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