返回正文目录

第二十七章实操:聚合后关联与金额核对

2026-10-25 补验:独立服务复测后,实际教学 18067 也已升级 0.1.42,本章 10 项请求再次复跑通过。当前验收 · 升级记录。派生接口 #163 / #164 的修复合同见原请求复测。以下为 0.1.39 原始实操记录。

2026-10-24。Launcher 0.1.39、项目 CLI 0.1.25,Runtime http://127.0.0.1:18067、Namespace chinook-composition、命名数据源 chinook-composition-sqlite。沿用独立的 data/Chinook.sqlite,匿名本地开发测试,Console/FAP 未启用。

准备与执行

原始账单 TM / QM、明细 TM / QM已在本系列首次准备中校验加载。本轮模型不改,重新检查能力、数据源绑定和两个 QM 的实时 JSON / Markdown。查询只使用公开的客户、业务日期和金额字段。

原始账单一行一张,明细一行一条;两个输入均先按客户 ID 汇总。账单侧 LEFT JOIN 明细侧后保留两个客户标识,差额用 ROUND(bill_amount - line_amount, 2) 按本样例两位小数核对。计算表达式只引用前一阶段的公开列。

正常请求均按 validate → preview → execute,未以手写物理 SQL 代替语义查询。当前写法的 10 项执行全部通过,详见下表。

文件 预期与实际
01-bill-aggregates 年度账单按客户汇总,47 位,477.53
02-line-aggregates 年度明细按客户汇总,47 位,477.53
03-reconcile-customers 正文完整请求,47 位,每位差额均为 0
04-amount-differences 在计算后的阶段筛选差额不为 0,返回空
05-bills-without-lines 账单为左侧,按明细客户键为空查未匹配,返回空
06-lines-without-bills 明细为左侧,按账单客户键为空查未匹配,返回空
07-mismatched-period-all 故意让账单取全年、明细只取十一月;保留账单侧 47 位,7 位匹配、40 位未匹配
08-mismatched-period-differences 同一期间错配变体,仅返回 5 位已匹配且差额不为 0 的客户
09-mismatched-period-missing 同一变体,返回 40 位明细未匹配客户;差额和明细金额保持空,不补零
10-reverse-period-missing 反向边界:账单取十一月、明细取全年,以明细为左侧,返回 40 位账单未匹配客户

期间错配只改变查询参数,没有增加、删除或修改原始记录。它用来验证 NULL、差异筛选与左右方向,也说明请求合法不等于两侧业务口径已经一致;不能把这些结果说成 Chinook 原数据出现了金额问题。

独立核对

只读取得 Invoice 原始行与 InvoiceLine 原始行,在 Python 中通过 InvoiceId 获取明细所属客户和账单日期,用 Decimal 分别累计,再构造预期的匹配、缺失和差异结果。没有把引擎生成的 JOIN SQL 当作独立答案。

每个客户的输入键唯一,两侧原始字段、金额、空值、顺序和差额均逐项核对;原库、基础篇模型、本系列模型与数据库摘要不变。主请求返回 47 行,小于显式 limit 100,未截断本例范围。

接口探索边界

本轮另保留派生接口发现:派生层 calculatedFields 未形成可选字段,文档的 dsl({model: prevPlan}) 在受限 Runtime 入口出现类型转换错误。它们与上方通过的列内表达式写法分开记录;失败请求只校验,没有执行。用户后续授权提交,已分别登记 #163 与 #164,详见提交与复核记录。

复跑

在资料项目根目录运行:

python lab/checks/verify-chapter27-reconciliation.py

阶段和边界请求由正文主脚本构造,每轮另存原始响应、预览 SQL/参数、命令与退出码、结果及脚本摘要。

最新执行目录 · 验收。本次由当前 Codex 会话通过公开 CLI 执行,没有另开干净 AI 会话只凭正文提示词验收;未测试其他数据库、生产权限或本章以外的组合。