用途:把用户的一句话拆成一条或多条可核对流水并写入统一账本。触发说法包括“记一笔”“今天花了”“收到工资”“退款了”“报销垫付/到账”“转账”“改一下刚才那笔”“撤销上一笔”“恢复流水”。
主要能力:新增流水时保留用户原话、来源与稳定消息 ID(用于防止重试重复写入);先跑不带 --commit 的命令读取预览中的金额、币种、类型、分类、账户、日期、账本、置信度和追问,再决定直接提交或等待确认。开放式表达可先整理为结构化 JSON(参考 schema/transactions.schema.json)后经 record-json 预览,确认后追加 --commit。支持 update 修改基础字段,金额、类型、币种、汇率、可报销金额变更后会重算本位币金额、现金流和个人消费,派生金额不可直接改。支持 undo 与 restore,撤销保留历史、禁止物理删除。分类上优先沿用现有二级分类与用户历史习惯,退款沿用原消费分类与账本,报销垫付只保留用户最终承担部分,旅行费用写入具体项目账本并保留消费分类。
必要用法(命令保持原样): python3 "$AI_BOOKKEEPING_HOME/scripts/bookkeeping.py" --config "/absolute/path/to/config.json" record "用户原话";提交时追加 --source-message-id "稳定消息 ID" --commit。修改:update "BK-..." '{"amount":"38"}' --reason "用户纠正金额"。撤销与恢复:undo "BK-..."、restore "BK-..."。
提交后核对返回的 created_count、duplicate_count 和流水 ID,再用一句话回执。
限制与边界:金额必须大于 0;外币须有该笔确认汇率;退款须关联原支出,报销到账须关联原垫付;转账须有付款与收款账户;累计退款与累计报销不能超过原流水上限。多笔批量、大额、外币、退款、报销、转账、借款还款、信息不完整或分类有两种合理解释时,先展示预览等待确认。同一来源消息重复提交按同一笔处理并回报“已存在”;找不到唯一原流水时只问一个最小问题;用户手工锁定的分类不会被自动覆盖。不要补造金额、日期、汇率、账户或关联 ID。配置路径与共享脚本入口需在本次会话中保持一致。其他未提供的信息暂未说明。