84 行
6.3 KiB
Markdown
84 行
6.3 KiB
Markdown
# 实施清单:报销费用政策与票据门禁生产部署
|
||
|
||
## 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`,并与详情 DTO `invoiceGuardEnabled` 交叉核对。
|
||
- [ ] 合成验证 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 一页式继续作为独立后续任务;日期粒度自动门禁仍明确不在本轮。
|