1.7 KiB
1.7 KiB
⚠️ 本文档已过时,仅留档备查,请勿删除。该历史任务已落地;当前状态见 ../任务清单.md。
[P0] 持久化层与不可变银行导入基础
背景
当前 /api/parse 只在临时文件中解析并返回摘要,随后删除文件。公司、账户、交易、导入批次和异常均无数据库记录,页面“原始文件已保留”的文案与实际行为不一致。
范围
- 选择并记录数据库、迁移工具和文件存储方案。
- 建立公司、账户、源文件、导入批次、工作表批次、规范化源行、解析异常和审计字段的最小模型。
- 源文件在解析前计算内容哈希并不可变保存。
- 每条规范化交易保存源文件、工作表、原始行号和模板版本。
- 实现文件级与源行级幂等,重复上传不重复影响后续计算。
- 定义失败状态、重试状态和事务边界。
约束
- 原始文件和源行不能被静默修改或覆盖。
- 金额继续使用十进制定点类型,不能转为二进制浮点。
验收标准
- 空数据库可通过迁移命令完整创建,重复执行无副作用。
- 上传成功后重启服务,原文件、批次、工作表和源行仍可查询。
- 同一文件重复上传返回已存在批次或明确重复状态,不创建第二份有效事实。
- 每条源行可反查文件哈希、工作表、行号和解析模板版本。
- 解析失败也保留异常批次和诊断,但不产生已确认交易。
- 有数据库约束和自动化测试证明幂等与不可变性。
测试
- 迁移向前/回滚测试。
- 重复文件、重复行、解析失败、服务重启后的集成测试。
依赖
Issue 001。