# Data audit (P1) — 2026-10-30 All SHA-256 values computed with `shasum -a 256` match those in data/README.md exactly (24 CSV files). Row counts (data rows after header) also match README. | file | rows×cols | first | last | missing | dup dates | |---|---|---|---|---|---| | RSAFS_vintage_2025-10-31 | 404×2 | 1992-01 | **2025-08** | 0 | 0 | | RSAFS_vintage_2025-11-30 | 405×2 | 1992-01 | 2025-09 | 0 | 0 | | RSAFS_vintage_2025-12-31 | 406×2 | 1992-01 | 2025-10 | 0 | 0 | | RSAFS_vintage_2026-01-31 | 407×2 | 1992-01 | 2025-11 | 0 | 0 | | RSAFS_vintage_2026-02-28 | 408×2 | 1992-01 | 2025-12 | 0 | 0 | | RSAFS_vintage_2026-03-31 | 409×2 | 1992-01 | **2026-01** | 0 | 0 | | RSAFS_vintage_2026-04-30 | 411×2 | 1992-01 | 2026-03 (adds 2 months) | 0 | 0 | | RSAFS_vintage_2026-05-31 | 412×2 | 1992-01 | 2026-04 | 0 | 0 | | RSAFS_vintage_2026-06-30 | 413×2 | 1992-01 | 2026-05 | 0 | 0 | | RSAFS_vintage_2026-07-31 | 414×2 | 1992-01 | 2026-06 | 0 | 0 | | PAYEMS vintages (10) | 1040…1050×2 | 1939-01 | 2025-08 … 2026-06; vintage 2025-12-31 ends 2025-11 (two months added at once) | 0 | 0 | | UMCSENT.csv | 887×2 | 1952-11 | 2026-09 | 210 (all before 1978-01, quarterly survey era); none after | 0 | | RSAFS_current.csv | 417×2 | 1992-01 | 2026-09 | 0 | 0 | | first_release.csv | 28×5 | 2024-06 | 2026-09 | 0 | 0 | Units: RSAFS millions USD SA; PAYEMS thousands SA; UMCSENT index 1966Q1=100. All monthly, no internal gaps in any series (checked against a full monthly date range). ## Anomalies / findings 1. **Irregular publication timing**: last(V) is two calendar months before the origin month for the six origins 2025-10-31 … 2026-03-31 (last = 2025-08 … 2026-01; month-end vintages normally end one month before), and one month for 2026-04-30 … 2026-07-31; vintage 2026-04-30 adds 2026-02 and 2026-03 at once, so 2026-03 is never an h=1 target. Handled per task rule: targets are last(V)+h, not calendar-based. Consequence: some target months are shared between h=1 and h=3 (13 distinct target months). 2. **first_release.csv consistency**: recomputed 100·ln(level/prev) matches `yoy_first_release` to < 5e-7 (rounding). For each origin, the last row of the vintage equals `level_first_release` and the 12-month-earlier level equals `level_prev_year_same_vintage` whenever the first-release vintage equals V (checked; all 10 match). For origin 2025-10-31 (last=2025-08) the first-release vintage of 2025-08 is 2025-09-30, but levels still match. 3. **Annual/benchmark revision of RSAFS levels**: RSAFS_current levels are ~4% lower than the 2026-07-31 vintage for 2025 months, and `level_prev_year_same_vintage` jumps between the target months 2026-07 (727176) and 2026-08 (700218) — a level rebasing occurred between the 2026-08-31 and 2026-09-30 vintages. The YoY of current data is systematically lower than first release (~0.3–0.8 pp). This affects h=3 targets 2026-08 and 2026-09 (first-released after the rebasing) and estimand (d). Handled: no adjustment (the task defines the actual as first release); documented. 4. **PAYEMS** may extend beyond last(V) of RSAFS (e.g. V=2025-12-31: PAYEMS ends 2025-11, RSAFS 2025-10). Not used by my model (see decisions). 5. **UMCSENT** is a current vintage; per README and TASK it is unrevised and the origin-month value is available at month-end. Not used by my model. ## Availability-rule violations / handling - RSAFS_current.csv would violate the rule if used in forecasts → used only in the revision computation (estimand d), in a separate code block. - first_release.csv contains post-origin information → used only as evaluation actuals. - No other file violates the rules provided vintage V is used only at origin V (enforced in code by loading files by origin date).