1.7 KiB
1.7 KiB
CSV 流水导入模块
模块归属
- 业务模块:
transactions - 应用入口:收支流水页面
- 基础设施:Tauri 命令、SQLite、Windows 用户应用数据目录
当前公开接口
import_transactions_csv
输入文件名与 UTF-8 CSV 文本,在单个 SQLite 事务中完成校验、文件登记和交易写入。
返回:
- 文件总行数
- 新增交易数
- 重复交易数
- 文件 SHA-256 指纹
list_local_transactions
读取本机已经保存的交易,按交易时间倒序返回界面层需要的只读结构。
CSV 约定
必填列:
交易时间对方收支类型,值为“收入”或“支出”金额,最多两位小数
可选列:
来源分类交易单号
同时接受文档中定义的英文列名。首版只支持 UTF-8 编码,不自动猜测 GBK。
去重规则
- 文件内容 SHA-256 相同,整份文件视为已导入。
- 有交易单号时,以“来源 + 交易单号”生成交易指纹。
- 没有交易单号时,以“时间 + 对方 + 收支方向 + 整数分金额 + 来源”生成交易指纹。
- 不覆盖已有交易,重复记录使用数据库唯一约束跳过。
一致性与故障处理
- 所有金额在 Rust 中转换为整数分,不经过浮点数。
- 任何一行不合法时,整份 CSV 不写入数据库。
- SQLite 使用 WAL 日志模式。
- 数据库位于 Windows 用户应用数据目录,安装和升级不覆盖。
- 当前迁移版本为 1,并记录在
schema_migrations表。
已知限制
- 还没有字段映射向导。
- 还没有 GBK 文件转码。
- 还没有导入预览和逐行忽略。
- 待确认结果尚未持久化,本轮只保存原始流水与初始分类。