Skip to content

银行对账单:Upload → Poll → Apply

概述

用户上传银行对账单后,Liquia 将文件上传到 DTMS、触发 statements/convert,由后台 Poller 轮询 job;用户确认后 statements/apply,并同步 bank-flow id(必要时 bulk 补建)。

触发入口

动作HTTP
上传转换POST /api/bank/statements/upload
Job 状态GET /api/bank/statements/jobs/:jobId
忽略冲突POST /api/bank/statements/jobs/ignore-conflicts
应用入账POST /api/bank/statements/jobs/:jobId/apply

后台:DocumentParsePollerService(约 5s interval,Redis lock poll:document-parse)。

参与方

  • Client、api-gatewayStatementBankingUseCase
  • DtmsBankingServiceDocumentParsePollerService
  • DtmsAuthServiceDtmsClient、Redis、DTMS、本地 DB

业务流程图

加载图表…

时序图(主路径)

加载图表…

时序图:Ignore conflicts(摘要)

加载图表…

DTMS API 对照

步骤LiquiaHTTPPathBearer
上传uploadFilesPOST/files?type=STATEMENT
转换convertStatementPOST/statements/convert
查 jobgetStatementJobGET/statements/jobs/{jobId}
列表 joblistStatementJobsGET/statements/jobs?...
忽略ignoreStatementJobPOST/statements/jobs/{jobId}/ignore
应用applyStatementPOST/statements/apply
搜 flowssearchBankFlowsPOST/bank-flows-v2/search?...
批量 flowsbulkCreateBankFlowsPOST/bank-flows-v2/bulk

本地数据影响

  • DocumentdtmsFileIddtmsStatementJobId、parse/apply 状态
  • ParsedBankStatementBankStatementLine.dtmsBankFlowId
  • BankTransactionBankAccount.balance;可挂 FlowRun

异常与补偿

  • skip sync:假 jobId local-*
  • job 未 DONE → apply 400;already applied → 可继续本地
  • conflict → details.conflictJobId;job not found → 清理本地冲突
  • Poll 超时约 30min

源码索引

  • apps/api/src/integrations/dtms/dtms-banking.service.ts
  • apps/api/src/orchestration/documents/document-parse-poller.service.ts
  • Bank controller / statement-banking use-case

以 apps/api 代码为准 · 生成规范见 .cursor/skills/liquia-business-docs