149 次代码提交
作者 SHA1 备注 提交日期
wangsli 5a7a13524e 完善付款回单凭证核验与本地重检(09-17-company-loan-principal-repayment)
区分正式付款回单、非最终回执与未知凭证,在核验构建、人工证据重建和最终核销时使用同一份有效依据。非最终说明、入账方向、状态矛盾及重复交易不能经人工覆盖。

正式回单无字面成功状态时,允许财务按原件实际记账支出、日期及说明提出核验,由本批次适用的确认人确认;不补造银行成功文字。旧核验可显式本地重检,新版本与审计原子保存,不重新外发 OCR,不沿用旧人工批准或改写已核销历史。

本地验证:82 个迁移、借款 HTTP 116 组、关联电脑/手机 18 组、共享回单数据库与真实认证 38 组、共享报销页面限定重验 24 项、最新回单/报销定向 292 项通过;9 个资金守卫变异均被捕获。服务端全量 4554 项通过、1 项既有可选跳过,后续合成数据及零页详情改动由最新定向验证覆盖。

本次无新增迁移,新增本地 PDF 文本解析依赖。后续对本提交运行完整 verify-candidate,实际候选与结果以本轮回执为准。

限制:独立代码复核及真实还款验收待完成;历史材料预验不证明真实还本或银行提交对应。未推送、未部署、未访问生产或写入真实业务数据。
2026-10-09 06:18:09 +08:00
wangsli 431c36eae3 借款对账 S4–S8:人工未提交、晚到补记、追回与界面收口(09-17-company-loan-principal-repayment)
新增三类证据与双人复核的人工未提交、逐原因冻结、晚到付款逐借款补记和实际退款追回;补齐对账与补证恢复界面,保护已消费依据、最终归属重验及全局交易唯一性。

验证:81 迁移、HTTP 95 组、浏览器 13 组、数据库约束 9 组;13 项有效变异被捕获,部分由下游或数据库保护检出。构建、类型、合同和治理检查通过;修复后同模型只读静态复核通过。

真实回单待验、整体业务验收未通过;S0 存量、人员、银行材料与业务独立验收未完成。3 个新增迁移须纳入获批发布清单。本次仅本地提交,不推送、不部署。
2026-10-07 21:58:03 +08:00
wangsli和Claude Opus 5.5 b6f0c83608 采购提交与报销新建/提交事务显式使用10秒上限 [09-27-purchase-submit-tx-timeout]
负载下采购提交事务超过 Prisma 交互事务默认 5000ms(P2028)返回 500。
分段计时显示无单一瓶颈(总时长中位 843ms、最大 3506ms,编号锁等待
最多 535ms),是约 20 条顺序查询整体变慢贴近上限。报销新建/提交同结构。
三处改用项目既有的 { maxWait: 5000, timeout: 10000 },事务内容不变;
新增采购与报销提交的事务选项回归断言。

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-27 12:27:04 +08:00
wangsli ed3814fccd fix: 合并后清理重复测试与修复 CEO/财务兜底脚本注入 bug
ci-e2e / e2e (push) Canceled after 0s
ci-minimal / check-minimal (push) Canceled after 0s
- apply-ceo-finance-fallback.js: execute() 原先在传入 mock pool 时仍强制要求
  DATABASE_URL 环境变量,导致单测无法注入 mock pool 验证事务逻辑。改为仅在
  未传入 pool 时才检查 DATABASE_URL。
- portal.test.js: 删除本次合并前遗留的重复用例(期望旧的
  portal.feature_disabled reasonCode),候选分支自带的等价用例更完整
  (校验 reasonCode 以及全部零写入断言)。
- todos.test.js: 删除本次合并前遗留的文件,候选分支的
  todos.errors.test.js 覆盖等价且更完整。
2026-09-26 08:23:07 +08:00
wangsli 46a70aa552 merge: 合入候选分支(09-17借款/ERP退役、09-18编号、09-19预算并发、完整10-05错误码迁移,均经确认)
# Conflicts:
#	.agents/skills/trellis-before-dev/SKILL.md
#	.agents/skills/trellis-brainstorm/SKILL.md
#	.agents/skills/trellis-continue/SKILL.md
#	.agents/skills/trellis-start/SKILL.md
#	.trellis/tasks/08-23-isolated-backup-restore-drill/design.md
#	.trellis/tasks/08-23-isolated-backup-restore-drill/prd.md
#	.trellis/tasks/09-05-error-explainability-payment-readiness/prd.md
#	.trellis/tasks/09-05-error-explainability-payment-readiness/task.json
#	.trellis/tasks/09-09-existing-deploy-seed-separation/implement.md
#	.trellis/tasks/archive/2026-09/09-05-trellis-upgrade-rule-cleanup/task.json
#	.trellis/workflow.md
#	scripts/qa/error-reason-legacy-baseline.json
#	server/src/routes/apOperations.js
#	server/src/routes/portal.js
#	server/src/routes/todos.js
#	server/tests/unit/fixtures/error-reason-messages.json
#	server/tests/unit/routes/apOperations.permissions.test.js
2026-09-26 07:54:10 +08:00
wangsli和Claude Sonnet 5 cd01e4bf28 迁移首批4个错误码:AP台账/查询、待办、工作台功能开关 [09-05-error-explainability-payment-readiness]
10-05 到期例外清单里已设计好的首批 4 个具体调用,现予落码(原方案见
implement.md §14「首批具体分支与验证要求」):

- ap_operations.feature_disabled(409):AP 台账/明细查询功能关闭
- ap_operations.query_invalid(400):AP 台账查询参数校验失败
- todo.feature_disabled(409):待办功能关闭
- portal.feature_disabled(409):工作台首页功能关闭

四处均改为调用 buildBusinessValidationError(reasonCode, details, statusCode),
保留原 HTTP 状态码、featureFlag/reason 等既有 details 字段不变,仅新增精确
reasonCode;不改功能开关判断逻辑、不改权限校验顺序。

- server/src/constants/errorReasons.js + client/src/api/errorReasons.ts:
  注册 4 条原因码及中文文案,服务端/客户端逐字一致。
- scripts/qa/error-reason-legacy-baseline.json:移除这 4 条已迁移的旧例外
  记录(591 → 587),check-error-reason-contract.mjs 主检查与 self-test
  均 PASS,无 new_legacy/stale_exception/unregistered_reason。
- apOperations.permissions.test.js:扩展"功能关闭"断言校验 reasonCode 与
  原 details 字段共存;新增"查询参数非法(功能开启)"400 用例,断言零
  台账业务查询;新增"合法查询仍 200"用例。
- portal.test.js:新增工作台关闭时 409+reasonCode+零业务查询断言(此前
  完全没有覆盖这条路径)。
- todos.test.js:新建(此前 todos 路由零测试覆盖),聚焦 ensureFeatureEnabled
  网关:关闭时 GET/POST 均 409+reasonCode+零 todoItem 查询;开启时正常放行。

验证:server 5 个相关测试文件 286/286 通过;client typecheck/build 通过;
check-ui-design-rules.mjs --strict、check-trellis-governance.mjs、
git diff --check 通过。routes/ 全量回归 872/874(2 个失败为 paymentBatches
BIFF8 导出的既有环境问题,已用 git stash 验证在改动前的 HEAD 上同样失败,
与本次改动无关,不在本次范围内处理)。

剩余 669 条例外记录不变,尚未处理;B/C 两档 57 文件仍需逐模块确认迁移或
提出延期理由,本次不扩大范围。

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-09-25 21:16:55 +08:00
wangsli 1f8d5b658a 完善借款、编号、付款与预算并发及验收(09-06-release-gate-integrity)
汇总已落盘的借款本金与还款、兼容历史编号的周期化编号、付款责任与回单核验、报销进度和排序、PWA/采购事务、错误原因与日期校验及ERP退役。
统一共享预算池锁序和锁后判断,恢复差旅原预算选择,补原因码固定夹具及反向完整性检查。
纳入配套迁移、测试、受管QA、分层验收合同、规约及任务记录;原始证据留在ignored artifacts。

关联任务:09-17-company-loan-principal-repayment、09-17-erp-exclusive-retirement、09-18-reimbursement-periodic-numbering、09-08-reimbursement-payment-closeout、09-18-local-concurrency-product-fixes、09-19-budget-pool-concurrency、09-05-error-explainability-payment-readiness。
预算补审由Claude定向验证2文件928项通过,原4446/28及r6结果仍仅对应各自历史输入;本轮未重跑测试。
完整新候选门禁、R1真实入口接入与12项公网义务仍开放。生产编号未启用、差旅仍冻结;不推送、不部署,不宣称发布资格。
2026-09-19 13:11:04 +08:00
wangsli b1d25d3c99 fix: 加固日历日期与动态错误合同(09-05-error-explainability-payment-readiness,09-08-reimbursement-payment-closeout)
ci-e2e / e2e (push) Canceled after 0s
ci-minimal / check-minimal (push) Canceled after 0s
2026-09-16 20:20:11 +08:00
wangsli 3516d7ec04 fix: 完善动态错误指引与发票日期校验(09-05-error-explainability-payment-readiness) 2026-09-16 12:56:27 +08:00
wangsli 8d08d46d16 fix: 增加回单核对与付款登记门禁(09-08-reimbursement-payment-closeout)
ci-e2e / e2e (push) Canceled after 0s
ci-minimal / check-minimal (push) Canceled after 0s
2026-09-15 07:21:55 +08:00
wangsli 31ab9fbb2b fix: 拦截已删除报销进入付款创建(09-04-reimbursement-state-gap-finance-view)
ci-e2e / e2e (push) Canceled after 0s
ci-minimal / check-minimal (push) Canceled after 0s
2026-09-12 16:00:25 +08:00
wangsli fedcaed1a1 feat: 补齐报销付款待办交接(09-11-reimbursement-payment-handoffs)
ci-e2e / e2e (push) Canceled after 0s
ci-minimal / check-minimal (push) Canceled after 0s
2026-09-11 09:43:37 +08:00
wangsli fe025e65cf fix: 优化报销制单下载与付款进度(09-08-reimbursement-payment-closeout)
ci-e2e / e2e (push) Canceled after 0s
ci-minimal / check-minimal (push) Canceled after 0s
2026-09-10 16:39:01 +08:00
wangsli 73fcd5a65a fix: 退回报销支持留痕删除(09-04-reimbursement-state-gap-finance-view) 2026-09-10 16:38:37 +08:00
wangsli e5685f18b2 feat: 选票自动生成报销明细并支持集中分类(08-29-reimbursement-expense-policy-invoice-guard)
ci-e2e / e2e (push) Canceled after 0s
ci-minimal / check-minimal (push) Canceled after 0s
2026-09-09 23:19:02 +08:00
wangsli e8cad812ad fix: 取消CEO默认AP台账权限(09-07-manager-ap-access-scope) 2026-09-09 09:05:17 +08:00
wangsli 58dcee08f7 fix: 用专用权限收窄经理 AP 访问(09-07-manager-ap-access-scope)
ci-e2e / e2e (push) Canceled after 0s
ci-minimal / check-minimal (push) Canceled after 0s
2026-09-08 07:21:37 +08:00
wangsli 99167127b5 fix: 补齐候选诊断环境与证据保护(09-06-release-gate-integrity) 2026-09-08 07:21:19 +08:00
wangsli a837912638 feat: 完成错误原因合同与付款就绪提示(09-05-error-explainability-payment-readiness)
ci-e2e / e2e (push) Canceled after 0s
ci-minimal / check-minimal (push) Canceled after 0s
2026-09-05 19:00:35 +08:00
wangsli 5fe9f78bc9 补齐报销待组批财务入口 [09-04-reimbursement-state-gap-finance-view][R1] 2026-09-05 09:14:13 +08:00
wangsli 8e0af8235e 收紧报销草稿读取边界 [09-04-reimbursement-state-gap-finance-view][R2] 2026-09-05 09:13:53 +08:00
wangsli 2e69fe4edb 补齐审批退回结果通知 [09-04-approval-return-notification-gap] 2026-09-04 16:22:27 +08:00
wangsli 8551601818 收敛报销退回动作与审批布局 [09-04-approval-return-reject-actions] 2026-09-04 10:31:32 +08:00
wangsli c840574d36 实现 B-2a 报销审批内容工作台(reimbursement-approval-content-workbench) 2026-09-01 20:32:34 +08:00
wangsli f57e2236f2 修复报销票据门禁提示与 OCR 降级(08-30-b2-submit-error-ocr-fallback) 2026-08-31 20:20:20 +08:00
wangsli 36c86f1dca 取消报销资产事前批准强制(08-30-reimbursement-assets-prior-approval-correction) 2026-08-30 12:44:58 +08:00
wangsli 6e999d5bf9 实现报销费用政策与票据明细门禁(08-29-reimbursement-expense-policy-invoice-guard) 2026-08-29 23:47:22 +08:00
wangsli e8d676634f 修复非参与人报销只读边界(08-28-reimbursement-nonparticipant-readonly-projection) 2026-08-29 08:22:23 +08:00
wangsli 46bfa7e00f 修复(08-28-reimbursement-detail-material-preview-fixes): 收紧撤回展示并校正材料图片尺寸 2026-08-28 21:53:26 +08:00
wangsli be057e665d 修复(08-28-reimbursement-review-routing-copy): 规范财务兜底文案 2026-08-28 20:30:04 +08:00
wangsli 21851774dd feat(08-05-contract-detail-workspace): 完成合同详情与终止状态治理 2026-08-08 02:02:52 +08:00
wangsli d4400116c5 feat(reimbursement-small-team-form-validation): 完善付款批次核对与回单预览 2026-08-05 01:02:51 +08:00
wangsli 50c14c1b85 feat(reimbursement-small-team-form-validation): 完善小团队报销填报校验 2026-08-04 23:28:56 +08:00
wangsli a5b7e18507 fix(detail-page-structure-progress-actions): 收敛操作面板定位并补充制单诊断
ci-e2e / e2e (push) Canceled after 0s
ci-minimal / check-minimal (push) Canceled after 0s
2026-08-03 16:41:32 +08:00
wangsli b7d5761067 feat(detail-page-structure-progress-actions): 统一详情处理进度与操作区 2026-08-03 16:00:42 +08:00
wangsli 23c3768c46 feat(corporate-bank-account-payment-order): 基于原模板生成建行制单 2026-08-03 01:18:10 +08:00
wangsli 5261d2849b 实现企业银行账户与建行制单(corporate-bank-account-payment-order) 2026-08-02 23:36:40 +08:00
wangsli 185d64dcd6 收紧付款复核资料与阶段编辑(08-01-reimbursement-notification-progress-clarity)
ci-e2e / e2e (push) Canceled after 0s
ci-minimal / check-minimal (push) Canceled after 0s
2026-08-02 15:15:01 +08:00
wangsli 5d274af8d4 统一付款详情与批次短编号(08-01-reimbursement-notification-progress-clarity)
ci-e2e / e2e (push) Canceled after 0s
ci-minimal / check-minimal (push) Canceled after 0s
2026-08-02 09:02:40 +08:00
wangsli 7c39f8b0f9 收口付款批次创建与复核(08-01-reimbursement-notification-progress-clarity)
ci-e2e / e2e (push) Canceled after 0s
ci-minimal / check-minimal (push) Canceled after 0s
2026-08-02 00:29:47 +08:00
wangsli aa6b9bc373 完善报销通知与付款进度(08-01-reimbursement-notification-progress-clarity)
ci-e2e / e2e (push) Canceled after 0s
ci-minimal / check-minimal (push) Canceled after 0s
2026-08-01 21:06:31 +08:00
wangsli f33b3569c6 修复报销进度审批节点覆盖(07-27-yang-jun-reimbursement-readiness) 2026-08-01 13:38:05 +08:00
wangsli 421c2d6e1e 收敛报销详情并展示五阶段进度(07-27-yang-jun-reimbursement-readiness) 2026-08-01 12:37:11 +08:00
wangsli da35591bd5 实现报销材料合并预览与差旅概要(07-27-yang-jun-reimbursement-readiness)
ci-e2e / e2e (push) Canceled after 0s
ci-minimal / check-minimal (push) Canceled after 0s
2026-08-01 09:25:44 +08:00
wangsli 8a9279efce 实现报销材料连续预览(07-27-yang-jun-reimbursement-readiness)
ci-e2e / e2e (push) Canceled after 0s
ci-minimal / check-minimal (push) Canceled after 0s
2026-08-01 00:17:54 +08:00
wangsli 410d8cd71b 实现企微原生材料预览(07-27-yang-jun-reimbursement-readiness)
ci-e2e / e2e (push) Canceled after 0s
ci-minimal / check-minimal (push) Canceled after 0s
2026-07-31 18:57:34 +08:00
wangsli fb164eb690 增加 PC 企业微信扫码登录(07-30-pc-wecom-qr-login)
ci-e2e / e2e (push) Canceled after 0s
ci-minimal / check-minimal (push) Canceled after 0s
2026-07-30 17:16:22 +08:00
wangsli 734153847b 修复报销附件上传与中文文件名(07-28-travel-reimbursement-guide) 2026-07-30 14:41:08 +08:00
wangsli 13a3f4b57d 完善差旅补助规定与费用类型(07-28-travel-reimbursement-guide)
ci-e2e / e2e (push) Canceled after 0s
ci-minimal / check-minimal (push) Canceled after 0s
2026-07-29 20:04:35 +08:00
wangsli ac17092fa0 实现腾讯通用票据OCR安全适配(07-28-travel-reimbursement-guide) 2026-07-28 22:02:11 +08:00