Files
set50-system/docs/engineering-log/2026-08-23-tourism-bot-adapter.md
2026-08-23 10:20:08 +07:00

3.3 KiB
Raw Blame History

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__.pyTOURISM_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 -v18 tests passed.
  • npm run build — passed.
  • BOT adapter live fetch — passed; 138 periods parsed and files persisted.
  • GET /api/v1/health — HTTP 200, API version 0.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, and warning-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.