B-44: 往来余额、科目确认与全链路追溯 #5

Open
leefer wants to merge 6 commits from feat/b44-intercompany-positions into feat/b43-canonical-transfer-matching
Owner

按已验收的 B-130 技术方案与本轮唯一视觉规范(B-131 + 队长收口的五项接口契约)实现 B-44。

改动概要

  • 迁移 6:manual_records、ledger_event_revisions 只增不改修订链、当前投影、来源 claim、科目建议表与 eligible_position_events 视图
  • ledger_events.py:B-43 eligible 事件入账、冲销/调整/reopen、投影重建、幂等
  • subjects.py:应收/应付/其他应收/其他应付固定镜像、草案词典建议(仅建议不自动入账)、显式科目确认(expected_revision + 幂等键)
  • manual_records.py:提交、approve_new/approve_link、退回/异常/冲销、候选提示、重放幂等、并发 claim 防双计
  • positions.py:Decimal 聚合、双方守恒断言、截止日窗口、未决绝对额按原因分桶、keyset 分页、证据 visible/masked/missing
  • server.py:管理端与公司端 intercompany API,服务端租户隔离(跨租户 404、公司写 403),匹配变更后自动同步
  • 双端页面:公司余额目录、公司对抽屉、科目条、逐笔事件、证据抽屉、科目/手工审核队列、公司端往来余额与证据脱敏
  • 期初:B-45 完成前一律 opening.status=unavailable,结果仅标“期间净变动”

测试结果

  • 完整测试套件 233 项全部通过(新增 test_ledger_events / test_manual_records / test_positions / test_positions_api 共 65 项聚焦回归)
  • node --check web/app.js 通过
  • python -m bank_importer.cli '流水模板' 六家银行样本识别不回退
  • 迁移 forward / rollback-to-5 / re-forward 在副本库验证通过

已知风险与回退

  • 草案科目词典(subject-suggest-draft-v1)只产生建议,未经集团批准;贸易类关键词一律进审核
  • 手工记录 reverse 对 approve_link 的关联记录采用“解除关联”而非生成反向事件(该记录从未产生第二次经济影响)
  • 回退:尚未产生审批/修订时可 rollback-to-5;一旦产生审批/修订,线上只回滚应用代码并保留迁移 6 与审计数据
按已验收的 B-130 技术方案与本轮唯一视觉规范(B-131 + 队长收口的五项接口契约)实现 B-44。 ## 改动概要 - 迁移 6:manual_records、ledger_event_revisions 只增不改修订链、当前投影、来源 claim、科目建议表与 eligible_position_events 视图 - ledger_events.py:B-43 eligible 事件入账、冲销/调整/reopen、投影重建、幂等 - subjects.py:应收/应付/其他应收/其他应付固定镜像、草案词典建议(仅建议不自动入账)、显式科目确认(expected_revision + 幂等键) - manual_records.py:提交、approve_new/approve_link、退回/异常/冲销、候选提示、重放幂等、并发 claim 防双计 - positions.py:Decimal 聚合、双方守恒断言、截止日窗口、未决绝对额按原因分桶、keyset 分页、证据 visible/masked/missing - server.py:管理端与公司端 intercompany API,服务端租户隔离(跨租户 404、公司写 403),匹配变更后自动同步 - 双端页面:公司余额目录、公司对抽屉、科目条、逐笔事件、证据抽屉、科目/手工审核队列、公司端往来余额与证据脱敏 - 期初:B-45 完成前一律 opening.status=unavailable,结果仅标“期间净变动” ## 测试结果 - 完整测试套件 233 项全部通过(新增 test_ledger_events / test_manual_records / test_positions / test_positions_api 共 65 项聚焦回归) - node --check web/app.js 通过 - python -m bank_importer.cli '流水模板' 六家银行样本识别不回退 - 迁移 forward / rollback-to-5 / re-forward 在副本库验证通过 ## 已知风险与回退 - 草案科目词典(subject-suggest-draft-v1)只产生建议,未经集团批准;贸易类关键词一律进审核 - 手工记录 reverse 对 approve_link 的关联记录采用“解除关联”而非生成反向事件(该记录从未产生第二次经济影响) - 回退:尚未产生审批/修订时可 rollback-to-5;一旦产生审批/修订,线上只回滚应用代码并保留迁移 6 与审计数据
leefer added 1 commit 2026-08-19 12:00:55 +08:00
- migration 6: manual_records, ledger_event_revisions chain, current
  projections, source claims, subject suggestions, eligible_position_events
- ledger_events.py: bank-event reconciliation, reversal/adjustment/reopen,
  append-only revision chain and rebuildable current projection
- subjects.py: fixed subject mirror, draft suggestion dictionary, explicit
  administrator subject confirmation with expected_revision + idempotency
- manual_records.py: submit, approve new/link, return/exception/reverse,
  candidate hints, idempotent replay and concurrency-safe claims
- positions.py: Decimal aggregation, both-perspective conservation asserts,
  cutoff window, unresolved gross buckets, keyset pagination, evidence
  visibility (visible/masked/missing)
- server.py: admin + company intercompany APIs with tenant isolation (404 on
  cross-tenant reads, 403 on company writes) and auto reconcile wiring
- admin/company portals: balance directory, pair drill-down drawer, evidence
  drawer, subject/manual audit queue, company balance summary
- tests: ledger events, subjects, manual records, positions, HTTP API and
  migration persistence (233 total, all green)
leefer added 1 commit 2026-08-19 12:01:20 +08:00
leefer added 1 commit 2026-08-19 13:28:52 +08:00
leefer added 1 commit 2026-08-20 00:37:36 +08:00
leefer added 1 commit 2026-08-20 01:54:46 +08:00
leefer added 1 commit 2026-08-20 03:22:21 +08:00
在 376–900px 五列目录把方向 chip 与期末金额分行,并加 Chromium 盒模型回归,避免 15 位金额盖住未决状态。

Co-authored-by: Cursor <cursoragent@cursor.com>
You are not authorized to merge this pull request.
This pull request can be merged automatically.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin feat/b44-intercompany-positions:feat/b44-intercompany-positions
git checkout feat/b44-intercompany-positions
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: leefer/caiwuzongzhang#5