为什么要分清楚谁是"真相"
这套系统里数据会出现在好几个地方:我嘴上报的、飞书消息、SQLite 数据库、导出的表格、生成的报告。如果不规定"以谁为准",很快就会出现数字对不上、改了这边漏了那边的情况。这篇讲清楚每一层各管什么,哪一个才是唯一能信的源头。
一句话原则
SQLite 数据库(rideshare.db)是唯一的事实来源,所有报告、看板都从它算出来。
各层分别管什么
- 我嘴里的话 / 飞书消息:只是输入。我用大白话报当天数据,它是原材料,报完就完成使命,不当作存档依据。
- Hermes Agent:负责解析和写入。把我的自由口语解析成结构化字段,写进数据库。它不存数据,只做搬运和翻译。
- SQLite 数据库:唯一事实层。订单、班次、免佣卡、基金支出全部落在这里,永久保存。要查"真实是多少",只认它。
- 统计层 rideshare_calc.py:唯一计算层。收入、时薪、工时、占比都在这里按统一口径算,不允许别的脚本另搞一套公式。
- 报告和看板:只是展示层。日报、周报、月报、年报、网页面板都是数据库和统计层的"投影",用来给人看,本身不存事实。
- 导出的表格:曾经用来做备份和人工核对,2026-09-25 起正式退役,不再维护,避免出现第二份会漂移的数字。
为什么不用表格当事实源
早期数据记在 Excel 表格里,2026-08-20 前后迁移到了 SQLite。表格的问题是:手动改一处不会留痕、多人多设备容易出现不同版本、程序读取还要依赖固定行列。数据库能保证每条订单有唯一记录、写入有审计、所有程序读的是同一份数据。
这条原则怎么防止出错
- 报告上数字可疑 → 回数据库查,不改报告硬凑。
- 要补录或改单 → 改数据库,报告重新生成后自动跟着对。
- 同一个指标只在统计层定义一次,其它地方不重复写公式。
数据只往一个方向流:我报数 → Agent 写入 SQLite → 统计层计算 → 生成报告。下游永远不反向修改上游,这是整套系统不打架的根本。