# Evidence Topic: Company-report path and July month-end readiness

## Metadata

- Date: 2026-07-30
- Status: Processor and Booking runtime ready; released 5/5 live job pending
- Scope: ARR2 local Web on port 8766, accepted `company_reports` processor, controlled `booking_test` snapshot
- Confidence: Fact
- Source: code/input inspection, live health/job metadata, repeatable-read aggregate queries, pure in-memory report build, real XLSX tests
- Last verified: 2026-07-31 11:34 +08:00
- Stale trigger: port-8766 restart, first Booking draft activation, Finance current-version repair, Booking source/parse changes, or a new July upload

## Question

What path and rules does the current “公司渠道明细” program use, and will the July month-end run publish all five
workbooks from the current database projection?

## Evidence

- The active Web process includes `--enable-company-reports`; loopback health reported `company_reports_ready=true`
  at 2026-07-30 15:35 Asia/Bangkok.
- The Web coordinator accepts one month and one cumulative cutoff period, enforces the Bangkok release boundary, and
  invokes the deterministic processor for the fixed five-company set. It does not read XML or call an Agent.
- The source query reads `finance.v_active_daily_facts` by `DEPARTURE` from month start through the cutoff in a
  repeatable-read, read-only transaction. Booking enrichment comes only from current accepted room items, joined by
  normalized complete Group Code.
- Two persisted Web jobs for 2026-07 cutoff 10 and cutoff 20 both completed 5/5 successfully with zero rows for every
  company. The current supported-company facts all have C/O in the 21-to-month-end period, so those are valid empty
  workbooks rather than dropped rows.
- A read-only July 31 aggregate found 417 supported-company facts: 121 `matched`, 11 `unmatched`, and 285
  `missing_group_code`. Missing Group Code counts are LianTai 120, QBD 128, DY-AI-Easy-KB 1, FengRun 33 and HanaTour 3.
- Under the prior strict rule, a pure in-memory preview blocked all five companies because every missing Group Code was
  an error. The user then explicitly chose the deterministic fallback: keep each such Finance fact as its own output
  row with blank `RES_COMMENT` and blank `Booking Room`, without warning or duplicate highlighting. At that intermediate
  step, present-but-unmatched Group Codes still remained strict source-completeness errors.
- The supplied Markdown `/Users/chillishark/ARR项目0727/outputs/res_comment_20260727/RES_COMMENT_TYPE_OF_ROOM.md` matches
  the dedicated fixed Booking Markdown importer: SHA-256
  `ec2302170c5657d3e465691997e17f7694eb5a7f76feba7e43261632209b8c23`, 867 rows, six source worksheets and 348 distinct
  Group Codes. The controlled database already contains an accepted/current batch with the same hash and counts, so
  re-importing this exact file is unnecessary and would be idempotent.
- After the fallback change, the same read-only July 31 preview produced:
  - LianTai: invalid; 136 candidate rows, including 120 blank Booking Rooms; two present Group Codes
    (`LLT260719MA`, `LT260718KC`) still lack accepted Booking matches; two multi-price review warnings remain.
  - QBD: valid; 139 rows, including 128 blank Booking Rooms; four multi-price review warnings.
  - DY-AI-Easy-KB: valid; one row with blank Booking Room.
  - FengRun: valid; 33 rows with blank Booking Room.
  - HanaTour: valid; three rows with blank Booking Room.
- At that intermediate step, a source/business error still blocked only the affected company while warning-only reports
  could publish, making four companies publishable and leaving only LianTai blocked.
- The user then explicitly broadened the rule: both an absent Group Code and a present Group Code with no resolvable
  Booking room leave `Booking Room` blank. Processor 1.2.0 keeps a present code's normal
  `(Group Code, ARRIVAL, DEPARTURE)` aggregation and Finance pricing; lookup absence alone creates no error or warning.
- The post-change repeatable-read July 31 preview is valid 5/5 with zero errors:
  - LianTai: 138 rows, 122 blank Booking Rooms and two existing non-blocking multi-price warnings.
  - QBD: 139 rows, 128 blank Booking Rooms and four existing non-blocking multi-price warnings.
  - DY-AI-Easy-KB: one row/one blank; FengRun: 33/33 blank; HanaTour: three/three blank.
- The current Finance projection also contains one `local_fixture`/`synthetic.xml` QBD fact with C/O 2026-07-30. The
  company-report source does not filter by storage provider, so the month-end snapshot includes that fact.
- The final scoped company/Booking/report suite ran 32 tests successfully with three expected private-fixture skips;
  real artifact-tool coverage included five-company XLSX generation, workbook reopen/value validation, rendering and a
  dedicated end-to-end blank-Booking-Room case. Four Web company-task coordinator tests also passed. No database import,
  report publication or Finance mutation was performed.
- The historical port-8766 Web process started at 17:13:54 +08, after the company-report core file's 17:10:03 +08
  change; it loaded the earlier no-code-only fallback. Processor 1.2.0 was written at 17:34:13 +08 and was not loaded
  in that superseded process.
- Processor 1.2.0 passed 37 company/Booking/real-XLSX/Web-coordinator tests with three expected private-fixture skips.
  The real builder exported, reopened and value-checked both absent-code and present-but-unmatched blank cells.
- A non-publishing real-data vertical slice loaded the controlled July 31 snapshot in a repeatable-read/read-only
  transaction and built all five workbooks in a temporary directory. All five exported, reopened, value-checked and
  rendered three previews; row counts were 138, 139, 1, 33 and 3 respectively. The temporary artifacts were removed
  automatically and no report/database state changed.
- The authenticated replacement runtime now loads current source and reports `company_reports_ready=true`; activation
  preserved three existing job records and deliberately did not submit a new report job.
- A later 2026-07-31 read-only audit first found 014 absent, then observed a concurrent 014/015 deployment at 11:19.
  Batch 1 is now the explicit current source and draft tables are empty. Port 8766 restarted at 11:30 with Booking
  source-upload readiness and PATCH/DELETE transport active. Historical fixture reads and processor readiness remain
  valid. See the later Booking extraction-program evidence.

## Finding

The supplied Markdown is a valid Booking source and its historical accepted rows remain queryable. Processor 1.2.0
makes both absent and unresolved Booking enrichment non-blocking and the current July projection previews valid 5/5.
`LLT260719MA` and `LT260718KC` remain visible business codes with blank Booking Room rather than report errors. The
processor runtime and Booking upload/source gate are active. A controlled real draft activation and one released
populated company-report job are still required before validating the new end-to-end flow. No additional Booking content
is required for the historical lookup baseline.

## Impact

- Do not interpret the two zero-row successful jobs as proof that the month-end data set is publishable.
- Current Web jobs use the activated processor 1.2.0 runtime, but readiness alone is not proof of a published 5/5 run.
- Retire the known fixture from the current projection without deleting immutable history before treating a July
  month-end company report as clean business output.

## Open Items

- Accept one controlled Booking review activation, then run one month-end Web job after the 2026-08-01 00:00 Bangkok
  release boundary; verify all five downloads and their registered hashes.
