344 笔历史记录,逐人对账
317 笔支出、27 笔还款,总支出 $35,241.21。导入保留日期、付款人、分摊与备注。姓名由 zhao 修正为 wenchao zhang,原成员 ID 与账务归属保留。
一个从真实合租需求出发的小型全栈项目。迁移旧账、简化分摊、自动记房租,并把数据正确性、多人协作和可维护性落实到代码里。界面参照 Kittysplit,优先展示成员余额,账目按需查看。
317 笔支出、27 笔还款,总支出 $35,241.21。导入保留日期、付款人、分摊与备注。姓名由 zhao 修正为 wenchao zhang,原成员 ID 与账务归属保留。
总金额使用整数分;分摊保留 microcent 精度。每笔分摊严格守恒,汇总后统一舍入,确保所有人的余额之和为零。
每次读取带有 revision。写入在事务中保存历史快照并校验版本;旧版本返回 409 Conflict,界面保留草稿并提示刷新核对。
服务器使用纽约时区判断到期月份,以 rent-YYYY-MM 为稳定 ID。GitHub Actions 按月触发,云端任务核对并重试失败;已删除的自动记录不会被重新创建。
17 种原币统一折算 USD,保存后锁定汇率。照片/PDF 写入 R2,D1 校验附件归属;重试上传不会重复覆盖。
从 ChatGPT Finances 导入文件,预览匹配旧账或选择新消费。只公开选中来源,交易哈希避免重复关联。当前为显式导入,尚未提供网页银行直连或自动同步。
| 问题 | 实现 | 验证方式 |
|---|---|---|
| 跨设备共享数据 | TypeScript API + D1 持久化 | 写入后重新读取 |
| 并发更新丢失 | revision 乐观锁 + 原子事务 | 同版本并发,一次成功、一次 409 |
| 账务舍入误差 | 整数计算 + 聚合后舍入 | 原表对账与资金守恒测试 |
| 任务重试与漏跑 | 稳定 ID + 到期月份计算 | 月界线、幂等与补记测试 |
| 变更容易回归 | API 契约 + 数据迁移 + CI | Node 测试、类型检查与接口检查 |