feat: add daily manual price review workflow
This commit is contained in:
@@ -5,7 +5,7 @@
|
||||
## 前置条件
|
||||
|
||||
- DNS:`WEB_PUBLIC_HOST` 指向部署主机;
|
||||
- PostgreSQL 15+:目标必须是隔离数据库 `booking_test`,并已应用 008–016 权威迁移;
|
||||
- PostgreSQL 15+:目标必须是隔离数据库 `booking_test`,发布窗口内按 016 → 017 → 018 应用;
|
||||
- OSS:区域匹配、服务端加密、未启用或暂停 versioning、禁止匿名写;bucket ACL 可为 private 或 public-read;
|
||||
- ARR 数据库账号和 OSS RAM/STS 凭据由 Secret 管理器注入,不写入镜像或仓库。
|
||||
- 月报和公司渠道明细均由 Python/openpyxl 生成;不需要 Node.js、npm 或私有运行时。
|
||||
@@ -25,18 +25,40 @@ chmod 600 deploy/.env.production
|
||||
- Agent callback URL/HMAC;
|
||||
- `fetch_oss_file` 或源文件公网 URL。
|
||||
|
||||
## 应用月报 OSS 迁移
|
||||
## 应用 016–018 日报价格复核迁移
|
||||
|
||||
在目标数据库确认当前连接为隔离的 `booking_test` 后,先应用 016;脚本会自行拒绝其他数据库。016
|
||||
只替换月报发布校验函数,不新增表或列,历史 `local` 工件不需要迁移:
|
||||
只替换月报发布校验函数,不新增表或列,历史 `local` 工件不需要迁移。随后应用 017,再应用修复人工清单
|
||||
工件类型的 018;各迁移都会拒绝非 `booking_test`、缺失前置对象或重复应用:
|
||||
|
||||
```bash
|
||||
psql "$ARR_DATABASE_URL" -Atc "select current_database();"
|
||||
sha256sum database/016_monthly_report_oss_artifacts.sql
|
||||
psql "$ARR_DATABASE_URL" -v ON_ERROR_STOP=1 \
|
||||
-f database/016_monthly_report_oss_artifacts.sql
|
||||
sha256sum database/017_daily_price_review.sql database/017_daily_price_review.down.sql
|
||||
sha256sum database/018_daily_review_manual_override_artifact.sql \
|
||||
database/018_daily_review_manual_override_artifact.down.sql
|
||||
```
|
||||
|
||||
017 会改变 lifecycle/Finance 约束并新增不可删除的复核审计事实。正式发布前,操作员必须在受控备份中保存
|
||||
schema/data manifest。优先在恢复出的临时 `booking_test` 副本上按顺序应用 016 → 017 → 018、检查约束/最小权限、
|
||||
再运行受保护的 down rollback probe。如果受控环境没有副本能力,且目标库尚无任何 review/manual 事实,可由经过审阅的迁移工具
|
||||
只在内存中移除 up/down 最外层 `BEGIN`/`COMMIT`,将两份正文置于同一外层事务,验证 up 中间态、down 精确恢复及
|
||||
第二连接零残留后强制回滚;不得改写迁移文件,也不得直接在正式库执行原始 down 文件。确认探针通过后,才执行:
|
||||
|
||||
```bash
|
||||
psql "$ARR_DATABASE_URL" -v ON_ERROR_STOP=1 \
|
||||
-f database/017_daily_price_review.sql
|
||||
psql "$ARR_DATABASE_URL" -v ON_ERROR_STOP=1 \
|
||||
-f database/018_daily_review_manual_override_artifact.sql
|
||||
```
|
||||
|
||||
一旦已产生 review case、冻结清单或人工定价 lineage,`017_daily_price_review.down.sql` 会故意拒绝破坏性回滚;
|
||||
此后只能用前向修复迁移。018 只允许新增 `manual_override_json` 工件类型;其 down 文件在已经登记任何该类
|
||||
不可变工件时也会拒绝回滚。已有 017 但尚未应用 018 的环境,应直接备份、探针并前向应用 018,不得改写已应用
|
||||
的 017。
|
||||
|
||||
## 校验并启动
|
||||
|
||||
```bash
|
||||
@@ -78,12 +100,13 @@ docker compose --env-file deploy/.env.production logs --tail=100 web
|
||||
|
||||
1. 未登录访问首页应进入 ARR 登录页,错误凭据不得创建会话;
|
||||
2. 使用授权 Finance 账号登录,页面上传一次 XML;
|
||||
3. 上传响应应直接给出 `succeeded` 或 `failed` 终态以及 `job_id`;
|
||||
3. 上传响应应直接给出 `succeeded`、`needs_review` 或 `failed` 以及 `job_id`;
|
||||
4. 在任务日志中确认“固定处理器已启动 → 程序输出制品已登记 → 独立验收 → Finance 提交”;
|
||||
5. 成功任务应能下载对应日报,数据库中 source/retained/outcome 数量必须与结构化结果一致;
|
||||
6. worker 应消费对应 outbox 事件,页面显示真实月报 ID/版本/“更新至”,下载文件哈希应与 OSS 登记值一致;删除 Web 容器或清空其临时 `outputs/monthly_reports` 后,月报与公司报表仍应可下载;
|
||||
7. 退出登录后,页面、API 和下载均应重新要求登录;
|
||||
8. 业务失败任务不得激活 Finance 当前版本或触发月报。
|
||||
5. 纯 `PRICE_UNMATCHED` 任务应显示待人工处理进度、无日报下载、无 Finance 版本、无 `arr.processing_failed`/月报事件;人工价格只接受非负整数(显式零写 `0`,系统冻结为 `0.00`),填完全部价格后才可确认生成;
|
||||
6. 最终成功任务应能下载对应日报,数据库中 source/retained/outcome 数量、`manual_review` 行数和冻结清单 SHA-256 必须与结构化结果一致;
|
||||
7. worker 应仅消费最终成功的对应 outbox 事件,页面显示真实月报 ID/版本/“更新至”,下载文件哈希应与 OSS 登记值一致;删除 Web 容器或清空其临时 `outputs/monthly_reports` 后,月报与公司报表仍应可下载;
|
||||
8. 退出登录后,页面、API 和下载均应重新要求登录;
|
||||
9. 业务失败任务不得激活 Finance 当前版本或触发月报。监控待复核数量/停留时长、人工定价行数和生成重试次数。
|
||||
|
||||
## 回退
|
||||
|
||||
|
||||
Reference in New Issue
Block a user