3.3 KiB
3.3 KiB
2026-08-23 — BOT Tourism source adapter
Plan status
- M1 Tourism source adapter: complete.
- Verified code commit:
a113a51—[verified] add BOT tourism source adapter. - API data-health and replay endpoints: complete.
- Dashboard lineage wiring: complete.
- LLM, webhook receiver, and MT5 bridge: deferred by design.
Changed files
backend/app/bot_tourism.py— BOT ASP.NET form fetcher, table parser, YoY baseline, raw hash, atomic raw/snapshot persistence.backend/app/__init__.py—TOURISM_SOURCE=bot, data-health endpoint, safe vintage replay endpoint, expanded summary lineage.backend/app/tourism.py— preserves provisional source quality.backend/tests/test_bot_tourism.py— parser, default opener, fetch form, persistence and failure tests.backend/tests/test_api.py— source-mode, data-health, replay and path-safety tests.frontend/src/App.vue— live-vintage lineage fields and sign-aware surprise copy.frontend/src/style.css— provisional-quality warning badge.README.md— fixture/BOT run modes and endpoint documentation.
Source and live evidence
- Source:
https://app.bot.or.th/BTWS_STAT/statistics/ReportPage.aspx?reportID=875&language=eng - Source ID:
bot.ec_ei_028_s2 - Published:
2026-07-31T14:30:00+07:00 - Retrieved:
2026-08-23T03:09:09.490017+00:00 - As of:
2026-06-30 - Release status:
provisional - Available monthly periods:
138 - Baseline points:
12 - Raw payload SHA-256:
665981f88b4a30c5bd30026cf1e96279c244ad83725558f4136d952b29756a31 - Raw HTML and normalized snapshot were persisted locally under ignored
backend/data/.
The latest observation is foreign_arrivals_yoy for 2026-06: value -9.8495%, trailing-baseline expectation -7.2791%, robust scale 7.32, resulting in theme surprise -0.35114754σ. The dashboard now says below seasonal expectation for this live result; it no longer assumes a bullish tourism direction.
Verification evidence
PYTHONPATH=backend .venv/bin/python -W error -m unittest discover -s backend/tests -v— 18 tests passed.npm run build— passed.- BOT adapter live fetch — passed;
138periods parsed and files persisted. GET /api/v1/health— HTTP 200, API version0.2.0.GET /api/v1/data-health— HTTP 200,source_mode=bot,status=provisional,replayable=true.GET /api/v1/replay/tourism?vintage_id=bot.ec_ei_028_s2-2026-07-31-665981f88b4a— HTTP 200; replay surprise matched live summary exactly.- Served Vite source after restart contains
BOT live vintage, sign-aware below copy,Raw hash, andwarning-tag.
Risks and remaining work
- BOT report is provisional and may revise. The vintage/hash contract preserves the fetched version, but the strategy must not silently treat provisional data as final.
- Only foreign-arrival YoY is live in this slice; occupancy and airport passenger metrics are still absent.
- Snapshot storage is local filesystem and single-process; shared persistence is required before multi-worker deployment.
- No investment edge, transaction-cost result, or backtest conclusion has been established.
Exact next action
Validate multiple BOT vintages and add the next real Tourism metric (occupancy or airport passenger proxy) without changing the snapshot contract. Run an event-study/backtest before introducing LLM analysis.