提交图
150 次代码提交
作者 SHA1 备注 提交日期
wangsli和Claude Opus 5.5 b88790d396 借款还款同金额回单须经独立复核确认归属后方可核销(09-17-company-loan-principal-repayment)
- 同一出借人同金额的其他批次曾导出或上传回单(含确认失败后已取消的)时,
  最终核销入口要求已复核的归属确认;OCR 匹配与人工回单复核均不能绕过,
  证据不足保持待对账,本金与占用不变;存在候选时失败回单不能释放占用
- 新表 loan_receipt_attributions(迁移 20261006010000):绑定交易指纹、
  回单核验与人工录入证据、当时候选集合;依据类型不含时间吻合;复核人须
  当前有资格且独立于登记人、批次创建人、提交人、导出人、回单上传人、
  人工录入人与出借员工;失效记录在重新登记时标为 superseded,历史只增不改
- 借款回单上传取出借人锁,与核销候选检查串行;串行只保证按当时已知候选
  判断,核销之后才出现的新证据留待晚到结果对账流程处理
- 付款就绪检查反映归属要求;页面登记/复核/失效重登,写明同额分期每期需确认
- 测试:两个错误核销复现改为回归断言;证据绑定、确定性并发两种顺序、
  PC 浏览器完整登记复核重登流程;变异测试均变红

注意:借款功能尚不具备真实还款验收条件(失败回单与对账流程、离职后确认
失败、真实回单样本、手机端弹窗、独立复核待完成);未推送、未部署。

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-06 20:20:51 +08:00
wangsli和Claude Opus 5.5 b639422211 修复在途还款被出借人维护卡死并按审批时资格登记付款后事实(09-17-company-loan-principal-repayment)
- A:出借人存在 reserved 额度占用时,身份关联与收款资料维护在出借人锁内
  返回 409 loan.lender_in_flight;页面禁用并提示,修正账户弹窗误导文案
- B:回单 OCR 认领、人工回单参与人、核销按审批时资格认定,不再因原审批人
  或出借员工事后离职/撤权、主数据停用而卡死;保留身份核实、版本与付款快照
  一致、审批独立性及回单匹配校验;付款前环节仍校验当前资格
- 测试:隔离 PostgreSQL 合成全流程,含确定性并发交错、付款后独立性反例、
  离职后经 OCR/人工复核核销、PC/手机按钮禁用;变异测试均变红
- 恢复手册:资金类数据恢复后先暂停付款,对照银行流水补齐并核对占用再开放
- design 按环节修订资格规则

注意:C(同金额回单传错批次错误核销)已复现但尚未修复,借款功能不具备
真实还款验收条件;未推送、未部署。

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-06 13:13:30 +08:00
wangsli和Claude Sonnet 5 b2f4b42ded fix: 清理自动合并时残留的4条重复错误码 [09-05-error-explainability-payment-readiness]
合并时 errorReasons.js/errorReasons.ts 未被判定为冲突,git 自动把
主线首批4个条目和候选分支的完整版本拼在了一起,导致同一语义有两套
命名(如 ap_operations.feature_disabled 与 ap_operations.disabled
并存)。删除主线这4条已被取代的旧条目,保留候选分支的完整版本。

check-error-reason-contract.mjs 主检查+self-test 均恢复 PASS。

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-09-26 08:00:55 +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 229867f5fd 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 20:03:29 +08:00
wangsli 5d8cdf12b4 fix: 隔离门户待办身份并取消旧请求(09-11-reimbursement-payment-handoffs)
ci-e2e / e2e (push) Canceled after 0s
ci-minimal / check-minimal (push) Canceled after 0s
2026-09-11 20:21:46 +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 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 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 6e999d5bf9 实现报销费用政策与票据明细门禁(08-29-reimbursement-expense-policy-invoice-guard) 2026-08-29 23:47:22 +08:00
wangsli 21851774dd feat(08-05-contract-detail-workspace): 完成合同详情与终止状态治理 2026-08-08 02:02:52 +08:00
wangsli 94f1bad336 feat(08-05-interaction-pattern-unification): 统一前端交互与反馈模式 2026-08-07 06:50:40 +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 b7d5761067 feat(detail-page-structure-progress-actions): 统一详情处理进度与操作区 2026-08-03 16:00:42 +08:00
wangsli 4b0184c64b feat(management-navigation-single-company-ux): 收敛管理导航与单公司配置体验 2026-08-03 12:43:00 +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 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 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 030cf46c92 完善附件数量上限提示(07-28-travel-reimbursement-guide)
ci-e2e / e2e (push) Canceled after 0s
ci-minimal / check-minimal (push) Canceled after 0s
2026-07-30 14:58:33 +08:00
wangsli 734153847b 修复报销附件上传与中文文件名(07-28-travel-reimbursement-guide) 2026-07-30 14:41:08 +08:00
wangsli 35948729cf 修正CEO报销财务兜底与部署护栏(07-28-ceo-finance-fallback)
ci-e2e / e2e (push) Canceled after 0s
ci-minimal / check-minimal (push) Canceled after 0s
2026-07-28 13:42:48 +08:00
wangsli 2526052e73 支持企微通讯录缺失手机号(07-26-internal-ops-recovery-baseline) 2026-07-27 13:05:27 +08:00
wangsli 5d0a5f9a38 完成五人团队正式内用最小收口(07-18-small-team-internal-readiness) 2026-07-18 15:46:14 +08:00
wangsli f424492751 修复采购附件同源 XSS(07-17-purchase-attachment-xss-hardening) 2026-07-17 20:32:05 +08:00
wangsli f299ceeb74 修正 ERP 边界与资产页面一致性(05-30-fix-erp-boundary-asset-consistency) 2026-05-30 23:06:02 +08:00
wangsli 51a1347827 重构财务台账工具与异常优先页面(05-30-finance-ledger-tools-redesign) 2026-05-30 12:22:06 +08:00
wangsli 52e5284954 实现业务附件受控入库 V1(05-28-business-attachment-governance-v1) 2026-05-28 19:44:15 +08:00
wangsli c80d9adbcd 实现制度签收轻量回执(05-28-oa-policy-acknowledgement-v1) 2026-05-28 11:48:37 +08:00
wangsli 511efa0b2d 修复认证验证码投递与登录入口体验 05-27-oa-auth-delivery-wecom-entry-fix 2026-05-27 10:14:49 +08:00
wangsli 7f96cc0379 oa-email-code-login 实现邮箱验证码登录 2026-05-27 06:49:58 +08:00
wangsli cea5fb03c1 oa-login-password-recovery-ux 改进登录找回密码体验 2026-05-26 20:03:47 +08:00
wangsli fa5ed0337d OAFRONT4 清理PC付款和工作台文案 2026-05-25 07:47:52 +08:00
wangsli 2e778d3c9f OAFLOW1 支持负责人本人报销兜底审批 2026-05-24 21:12:18 +08:00
wangsli 9090046a97 ASSET1 统一电子资产与固定资产台账 2026-05-22 22:04:41 +08:00