Files
wyndham-ARR/DATA_PROCESSING_HANDOFF.md
2026-07-31 15:11:42 +08:00

6.8 KiB
Raw Permalink Blame History

ARR1 历史文档 — ARR 数据处理与数据库交接

当前行为请以 ARR2.0 根目录 README、ADR-004 和 current-state 项目记忆为准。

更新时间2026-07-30 适用:另一个对话继续训练/调试日报 Skill、月报程序或公司 10 日报表程序。

1. 最终处理链

用户上传 Opera XML
  → ARR 存入 OSS仅将 committed 源 XML 设为 public-read
  → ARR 在 PROGRAM_INPUT v3 写入无签名公网 HTTPS URL
  → SuperAgent 用 fetch_oss_file 原样获取 XML
  → Agent 调用 arr-opera-daily-ingest
  → Skill 生成日报 XLSX、result.json、structured-result.json
  → ARR 获取正式工件并建立 DeliveryEnvelope
  → ARR 独立重验 Schema、哈希、计数、公式和语义
  → arr_ingestion 单事务写 PostgreSQL
  → 普通程序查询 current + retained 事实
      ├─ 生成月报
      ├─ 生成/查询渠道明细与 BI
      └─ 结合预订 room items 生成每 10 日公司用房表

Agent/Skill 不连接 PostgreSQL不生成数据库 SQL也不负责月报累计。

2. 权威实现

日报 Skill 源目录:arr-opera-daily-ingest/

SuperAgent 平台安装包:arr-opera-daily-ingest.skill

主要契约:

  • references/business-rules.md
  • references/field-contracts.md
  • references/error-contract.md
  • references/structured-output.md
  • references/structured-result.schema.json
  • references/codex-result.schema.json
  • references/价格对照.xlsx

ARR 验收/落库:

  • arr_ingestion/contracts.py
  • arr_ingestion/validation.py
  • arr_ingestion/service.py
  • arr_ingestion/postgres.py
  • database/008_arr_mvp_v1_rebuild.sql

预订行解析合同:

  • database/contracts/booking-row-parse-result.schema.json
  • booking_ingestion/

不要在 Agent Prompt、数据库 repository、看板或报表程序复制第二套白名单、定价、去重或渠道识别规则。

3. 日报 structured-result 入库字段

每个 source record 保存:

  • 血缘:source_sequencesource_location、可选 worksheet/row
  • 处理:outcomedecision_codesduplicate_of_source_sequence
  • 日报业务字段BLOCK_CODE、ADULTS、CHILDREN、COMPANY_NAME、CONFIRMATION_NO、DISP_ROOM_NO、EFFECTIVE_RATE_AMOUNT、FULL_NAME、RES_COMMENT、TRACE_TEXT、NO_OF_ROOMS、PRODUCTS、RATE_CODE、ROOM_CATEGORY_LABEL、ARRIVAL、DEPARTURE、NIGHTS、REAL PRICE、TOTAL PRICE
  • 规范化/定价:company_keygroup_code_keynormalized_rate_codekb_amountchannel_keypricing_method
  • 预订查询结果:booking_source_match_statusbooking_source_match_count

outcome 只能是:

  • retained
  • excluded_rate_code
  • duplicate
  • validation_failed
  • price_unmatched

全部 outcome 都落 finance.daily_records。只有 current 日版本中的 retained 进入 finance.v_active_daily_facts 和业务报表。

固定公式:

TOTAL PRICE = REAL PRICE × NO_OF_ROOMS × NIGHTS

例如 1800 × 2 × 3 = 10800。ARR 入库前重算PostgreSQL check constraint 再验证。渠道明细的 Total Booking Price 直接使用这一个日报行的 total_price

4. 预订数据职责

预订原表/MD 最低字段:

  • GROUP_CODE
  • TYPE OF ROOM
  • NO_OF_ROOMS
  • 来源 worksheet/row

Agent 可把一条组合文本拆成多个 room item例如

G1 | (【U-TWN12】1,【U-DBL12】2) | 3

数据库必须同时保留:

  • 原始一行 type_of_room_raw 和总房数 3
  • 一个行级完整 result_json
  • 两个 room itemsU-TWN × 1、U-DBL × 2。

来源行不能按 Group Code 合并。同一 Group Code 多行在查询时聚合,原行仍可追溯。

Finance 与预订的唯一关联:

upper(trim(XML.RES_COMMENT)) = booking.group_code_key

预订只提供 Booking Room住宿日期、晚数、实际房数和价格使用 Finance 日报事实。

5. 月报与渠道明细

月报 20 列来自 finance.v_monthly_report_rows/monthly_reports

ARRIVAL, DEPARTURE, NIGHTS, ADULTS, CHILDREN, BLOCK_CODE,
NO_OF_ROOMS, COMPANY_NAME, CONFIRMATION_NO, DISP_ROOM_NO,
RATE_AMOUNT, FULL_NAME, RES_COMMENT, TRACE_TEXT, PRODUCTS,
RATE_CODE, ROOM_CATEGORY, Real Price, Booking Room, TOTAL PRICE

其中:

  • RATE_AMOUNT = effective_rate_amount
  • ROOM_CATEGORY = room_category_label
  • Booking Room 来自预订 Group Code 查询
  • TOTAL PRICE 直接来自日报

渠道明细来自 finance.v_channel_details,字段包括 ARRIVAL、DEPARTURE、NIGHTS、BLOCK_CODE、RES_COMMENT、Booking Room、Total Booking Price。它不是同 Group Code 汇总表。

公司 10 日表由 company_reports 读取 Finance 日期/金额与 Booking Room再按程序规则生成文件。数据库不保存这些派生行。

6. 数据库位置与查询

  • 目标:<ARR_DB_HOST>:5432/booking_test(远程测试库)
  • 本机受控配置:/path/to/private/booking-test-db.env
  • <LEGACY_DB_HOST>:5433/booking_testbooking-test-lan-db.env 只作临时回退,不再接收新写入

应用 DSN 环境变量:

  • ARR_DATABASE_URL
  • MONTHLY_REPORT_DATABASE_URL(可回退 ARR
  • COMPANY_REPORT_DATABASE_URL(可回退 ARR
  • DASHBOARD_DATABASE_URL(可回退 ARR

常用只读入口:

  • booking.v_group_booking_rooms
  • finance.v_active_daily_facts
  • finance.v_monthly_report_rows
  • finance.v_channel_details
  • finance.v_company_report_source
  • finance.v_daily_processing_audit

7. 当前测试数据

预订 fixture867 条来源行348 个 Group Code没有合并重复行。

Finance fixture2026-07-27 三条合成 source recordretained/duplicate/excluded 各一条。正式业务视图只有一条 retainedLT260720GAA 查询得到 DBL × 1,日报总价 5400。

这些只用于验证流程,不能当真实业务底数。

8. 给数据处理对话的提示词

请先完整读取 DATA_PROCESSING_HANDOFF.md、
DATABASE_CONVERSATION_HANDOFF.md 和日报 Skill 的 SKILL.md/契约文件。

日报 Skill 只生成日报、result.json、structured-result.json月报、渠道明细和公司 10 日表由普通程序查询 PostgreSQL 生成。
测试库是 <ARR_DB_HOST>:5432/booking_test受控配置为
/path/to/private/booking-test-db.env。

只读查询使用 booking/finance 视图。Agent 不得直接写库structured-result 必须由 ARR 后端经
arr_ingestion 独立验收后事务落库。不要输出数据库密码、OSS 凭据或真实住客字段。

9. 生产缺口

数据库/程序读路径已验收真实生产仍缺最小权限账号、public-read 源 XML 的保留期/访问日志控制、SuperAgent .xml/application/xml 获取验收与回调验签,以及生产级共享幂等/恢复演练。fetch_oss_file 使用 ARR 生成的公网 URL不配置 OSS Provider暂存与处理输出对象仍为 private。