6.3 KiB
6.3 KiB
实施清单:报销费用政策与票据门禁生产部署
1. 规划与冻结
- PRD、design、implement 经用户审查并明确批准进入实施。
- 本规划提交完成后确认工作区完全干净,以最终
HEAD冻结候选;外部审批记录写死完整 SHA 与 12 位 bundle marker。 - 冻结后无任何提交、修改或 untracked 文件;发生漂移则重新冻结、重新审查。
2. 验收准备(独立生产写入授权)
- 再次只读确认隔离部门零真人成员,经生产写入批准改名为“系统测试专用(勿分配员工)”,并固定为常驻 smoke 部门。
- 新建 OA-only manager smoke(manager + employee)与 finance smoke(finance + employee),凭据写入私有 smoke env,不输出、不绑定真人。
- 把 employee smoke 迁入常驻 smoke 部门,将 manager smoke 设置为其直属 manager;先用合成空壳草稿确认 workflow 可分配,再创建明显标识的合成历史草稿和非真实票据/附件。
- finance smoke 创建后默认 disabled;验收窗口开始前经单独批准临时启用,窗口结束立即 disabled。不得让持付款能力的 smoke finance 常驻 active。
- 明确授权材料合并预览产生设计内审计记录;真实材料不落测试报告。
3. Push 与来源门禁
- 用户单独批准 push;只推送冻结候选所在
main。 - 确认
origin/main等于或包含候选,严格 provenance PASS,published=true、remoteVerified=true、overrideUsed=false。 - push/provenance 不推定部署、配置或业务写入授权。
4. B1 部署前门禁
- 用户在 provenance 通过后单独批准 B1 部署。
check-existing-deployment.sh、生产 identity、existing 数据/附件挂载和备份合同均 PASS。- init 前显式记录 Prisma status,pending 只能是
20260829120000_reimbursement_expense_policy_invoice_guard。 - 保存受影响费用类型 code/name/enabled/description/category/account_code 的脱敏快照;记录 B2 env/DB flag 调用前状态。
- 部署前记录 B2 flag 是否尚不存在;不得把缺失解释为最终关闭合同。若记录已存在则必须为
force_off;若 env hard gate 已提前获批设为 true,必须证明 effective 仍为 false。
5. B1 正式发布
- 使用
deploy-existing.sh、existing 模式、SYNC_ENV=0执行 migration、seed 和应用切换。 - init 后显式记录 migration status;核对新增列、两项免票、其余启用类型需票、费用类型改名/停用/新建和 account code 保留。
- 核对 B2 DB flag 记录明确存在、override=
force_off、reason 不为missing_flag_record;缺失立即阻断,不继续 B1 验收。 /ready、12 位 bundle marker、runtime/external smoke、服务状态和备份合同 refresh 全部 PASS。- B2 effective off;owner 普通维护、assets 批准依据、2,000 元提示、无票补助和非参与人只读投影 PASS。
- admin/finance/employee 角色化公网验收 PASS;材料合并预览页序/比例正常并只产生获批审计。
6. B2 env hard gate(独立生产配置授权)
- 保存 env/flag 快照,确认 DB
force_off。 - 将生产
REIMBURSEMENT_INVOICE_GUARD_ENABLED=true写入受控 env,重启同一候选,不同步其他 env。 - 验证 env on、DB force_off、effective off 且 reason=
flag_force_off;失败则恢复 env 快照并重启。
7. B2 隔离灰度(独立 flag 授权)
- 灰度前实时读取隔离部门成员,确认恰好只有 employee/manager/finance 三个 smoke、无真人;临时启用 finance smoke 后,用 expectedVersion 把 flag 更新为
force_on + department_allowlist + 隔离部门。受控容器内只读诊断确认隔离部门 reason=flag_force_on_department_allowed、名单外 reason=department_not_allowed,并与详情 DTOinvoiceGuardEnabled交叉核对。 - 合成验证 owner 普通提交成功。
- 合成验证两项无票补助不被阻断。
- 合成验证多票显式关联成功。
- 合成验证申报金额高于票面时准确阻断。
- 合成验证旧草稿补齐关联/批准依据后可提交。
- 合成验证 admin/finance 非参与人无法写入且零业务副作用。
- 切回
force_off验证旧提交路径恢复、既有关联不删除不解绑,再恢复灰度快照继续最终判断。 - 任一失败立即恢复调用前 flag 快照,至少先落
force_off;不操作 4 张真人单据。
8. B2 全局启用(独立授权)
- 灰度七项全 PASS,成功合成单据已撤回并删除,失败草稿已删除;审计历史保留。
- 用户单独批准 global enable;用 expectedVersion 更新为 global force_on。
- 验证全局 effective on、reason=
flag_force_on_global、owner 基线、非参与人只读、错误提示、runtime 指标和审计记录。 - employee/manager/finance smoke 常驻隔离部门,确认成员集合仍只有三个 smoke且无真人;不再执行迁回写入,finance smoke 在窗口结束后立即 disabled。
9. 四张真实单据退回与重提
- 由真实 finance 退回 0014:说明“5 个发票日期拆成 5 条明细”,重提后人工确认。
- 由真实 finance 退回 0016:至少按 3 个日期拆分并逐票关联。
- 由真实 finance 退回 0017:按 2 个日期重做、从发票入口上传正式 PDF、逐票关联并解释 1,949.81 元差额。
- 由真实 finance 退回 0018:修正日期并逐票关联;同日同类可保留一条。
- 0008 已付款只留历史关联缺口;0013 空草稿不改。
10. 失败与回滚
- 切换前失败只停止;切换后失败先 B2
force_off,再用同一 existing 入口回滚固定应用基线59dc5f6。 - 不 reset、不逆 migration、不删除关联;主数据问题只凭部署前快照和单独批准做精确补偿。
- 回滚后复核 build、migration status、runtime/external smoke、DB/附件挂载、备份合同与公网入口。
11. 收口
- 所有生产证据脱敏回填;不保存凭据、真人信息、真实票据或原始 payload。
- B1/B2 与四张单据处置全部完成后才通知普通用户测试、归档本部署子任务并更新父 task。
- B3 一页式继续作为独立后续任务;日期粒度自动门禁仍明确不在本轮。