Files
xiaobaijizhang/docs/TRANSACTION_IMPORT.md
T

1.7 KiB

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 文件转码。
  • 还没有导入预览和逐行忽略。
  • 待确认结果尚未持久化,本轮只保存原始流水与初始分类。