{
  "generated_at": "2026-06-24T02:15:35.482Z",
  "entity": {
    "entity_id": "bangkok",
    "slug": "bangkok",
    "name": "Bangkok",
    "type": "destination",
    "province": "Bangkok",
    "path": "/entities/bangkok/",
    "source_confidence": "high"
  },
  "summary": {
    "observation_count": 48,
    "context_count": 3,
    "active_feed_count": 35,
    "last_observed_at": "2026-06-24T02:15:23.481Z",
    "storage_mode": "persisted"
  },
  "feeds": {
    "active": [
      {
        "feed_id": "air4thai-aqi",
        "name": "Air4Thai AQI and PM2.5",
        "source_name": "Air4Thai / Pollution Control Department",
        "status": "connected",
        "cadence": "Hourly",
        "observation_count": 70,
        "entity_count": 35,
        "last_observed_at": "2026-06-24T02:00:00.000Z",
        "checked_at": "2026-06-24T02:15:23.481Z",
        "detail": "Mapped 175 public Air4Thai stations into 35 entity anchors."
      },
      {
        "feed_id": "gdacs-disaster-context",
        "name": "GDACS disaster context",
        "source_name": "GDACS",
        "status": "connected",
        "cadence": "Frequent / feed-driven",
        "observation_count": 0,
        "entity_count": 23,
        "last_observed_at": "2026-06-02T05:45:56.000Z",
        "checked_at": "2026-06-24T02:15:23.481Z",
        "detail": "32 GDACS items scanned with 4 active hazard groups."
      },
      {
        "feed_id": "usgs-thailand-earthquakes",
        "name": "USGS Thailand-region earthquakes",
        "source_name": "USGS Earthquake API",
        "status": "connected",
        "cadence": "Frequent / event-driven",
        "observation_count": 0,
        "entity_count": 23,
        "last_observed_at": "2026-06-14T20:07:57.209Z",
        "checked_at": "2026-06-24T02:15:23.481Z",
        "detail": "1 Thailand-region USGS earthquake events scanned."
      },
      {
        "feed_id": "tmd-weather-surface",
        "name": "TMD weather and warning surface",
        "source_name": "Thai Meteorological Department",
        "status": "connected",
        "cadence": "Hourly / warning-driven",
        "observation_count": 417,
        "entity_count": 35,
        "last_observed_at": "2026-06-24T00:00:00.000Z",
        "checked_at": "2026-06-24T02:15:23.481Z",
        "detail": "Mapped 6 regional forecast feeds, 9 station reports, and 16 warning items into entity weather observations."
      },
      {
        "feed_id": "tmd-shipping-forecast",
        "name": "TMD shipping weather forecast",
        "source_name": "TMD Shipping Forecast",
        "status": "connected",
        "cadence": "Operational / on marine-forecast update",
        "observation_count": 80,
        "entity_count": 16,
        "last_observed_at": "2026-06-24T06:00:00.000Z",
        "checked_at": "2026-06-24T02:15:23.481Z",
        "detail": "Mapped 4 public TMD shipping section(s) into 16 coastal destination and pier anchors."
      },
      {
        "feed_id": "aviationweather-airport-status",
        "name": "Aviation Weather airport status context",
        "source_name": "NOAA Aviation Weather API",
        "status": "connected",
        "cadence": "Minute to hourly depending airport weather updates",
        "observation_count": 56,
        "entity_count": 14,
        "last_observed_at": "2026-06-24T02:00:00.000Z",
        "checked_at": "2026-06-24T02:15:23.481Z",
        "detail": "Mapped 7 Thai airport METAR and TAF feeds into 14 airport and destination anchors."
      },
      {
        "feed_id": "aot-airport-ground-services",
        "name": "AOT airport ground-service support",
        "source_name": "AOT airport ground transport pages",
        "status": "connected",
        "cadence": "On change / operational page",
        "observation_count": 4,
        "entity_count": 4,
        "last_observed_at": "2026-05-15T11:11:26.060Z",
        "checked_at": "2026-06-24T02:15:23.481Z",
        "detail": "Served from the AOT ground-service snapshot at 2026-05-15T11:11:26.060Z after scanning 7 airport page(s) during build time."
      },
      {
        "feed_id": "aot-airport-flight-board-surface",
        "name": "AOT airport flight-board surface",
        "source_name": "AOT airport flight status",
        "status": "connected",
        "cadence": "On change / operational page",
        "observation_count": 4,
        "entity_count": 4,
        "last_observed_at": "2026-05-15T11:11:26.678Z",
        "checked_at": "2026-06-24T02:15:23.481Z",
        "detail": "Served from the AOT flight-board snapshot at 2026-05-15T11:11:26.678Z after scanning 4 flight page(s) and 4 bundle(s) during build time."
      },
      {
        "feed_id": "aot-airport-traffic-stats",
        "name": "AOT airport traffic statistics",
        "source_name": "AOT air transport statistics",
        "status": "connected",
        "cadence": "Monthly / fiscal-year workbook update",
        "observation_count": 12,
        "entity_count": 4,
        "last_observed_at": "2025-10-16T17:00:00.000Z",
        "checked_at": "2026-06-24T02:15:23.481Z",
        "detail": "Served from the AOT traffic snapshot at 2026-05-15T11:11:28.750Z using 20251017-aot-traffic-fiscal-2025.xlsx instead of a runtime workbook download."
      },
      {
        "feed_id": "aot-airport-environment-support",
        "name": "AOT airport environmental support",
        "source_name": "AOT annual report / SET filing",
        "status": "connected",
        "cadence": "Annual report publication with periodic factsheet refresh",
        "observation_count": 4,
        "entity_count": 4,
        "last_observed_at": "2026-05-15T11:11:25.296Z",
        "checked_at": "2026-06-24T02:15:23.481Z",
        "detail": "Served from the SET-hosted AOT annual-report disclosure snapshot at 2026-05-15T11:11:25.296Z and mapped 4 airport environmental-support observation row(s)."
      },
      {
        "feed_id": "thaiwater-water-quality",
        "name": "Thaiwater water-quality observations",
        "source_name": "Thaiwater WaterQuality API",
        "status": "connected",
        "cadence": "10 to 30 minutes depending on station",
        "observation_count": 75,
        "entity_count": 25,
        "last_observed_at": "2026-06-24T02:00:00.000Z",
        "checked_at": "2026-06-24T02:15:23.481Z",
        "detail": "Mapped Thaiwater water-quality rows into 25 entity anchors."
      },
      {
        "feed_id": "namtang-transit-structure",
        "name": "Namtang transit structure",
        "source_name": "Namtang GTFS",
        "status": "connected",
        "cadence": "Daily / static feed refresh",
        "observation_count": 55,
        "entity_count": 55,
        "last_observed_at": "2026-06-23T19:00:28.000Z",
        "checked_at": "2026-06-24T02:15:23.481Z",
        "detail": "Mapped 8660 Namtang stop rows into 55 entity anchors."
      },
      {
        "feed_id": "bangkok-rapid-transit-official-pages",
        "name": "Bangkok rapid-transit official pages",
        "source_name": "BTS SkyTrain system maps and service pages",
        "status": "connected",
        "cadence": "Daily / on official route-map or service-page change",
        "observation_count": 7,
        "entity_count": 7,
        "last_observed_at": "2026-05-15T11:11:29.575Z",
        "checked_at": "2026-06-24T02:15:23.481Z",
        "detail": "Mapped 2 official rapid-transit page(s) into 7 Bangkok support anchors."
      },
      {
        "feed_id": "srt-official-station-presence",
        "name": "SRT official station presence",
        "source_name": "SRT timetable data",
        "status": "failed",
        "cadence": "Daily / on public timetable-site change",
        "observation_count": 0,
        "entity_count": 0,
        "last_observed_at": null,
        "checked_at": "2026-06-24T02:15:35.482Z",
        "detail": "The operation was aborted"
      },
      {
        "feed_id": "mot-bus-terminal-support",
        "name": "MOT official passenger bus terminals",
        "source_name": "MOT passenger bus terminals dataset",
        "status": "connected",
        "cadence": "Weekly / monthly catalog update",
        "observation_count": 20,
        "entity_count": 20,
        "last_observed_at": "2026-06-24T02:15:23.481Z",
        "checked_at": "2026-06-24T02:15:23.481Z",
        "detail": "Mapped 126 official MOT bus-terminal rows into 20 overland entity anchors."
      },
      {
        "feed_id": "bks-station-ticket-support",
        "name": "BKS station and ticket-point support",
        "source_name": "Transport Co. / BKS station and ticket-point locations",
        "status": "connected",
        "cadence": "Monthly / quarterly static dataset validation",
        "observation_count": 22,
        "entity_count": 22,
        "last_observed_at": "2026-05-15T11:11:43.824Z",
        "checked_at": "2026-06-24T02:15:23.481Z",
        "detail": "Mapped 156 official BKS station and ticket-point row(s) into 22 overland entity anchors."
      },
      {
        "feed_id": "bks-timetable-search-surface",
        "name": "BKS timetable search surface",
        "source_name": "Transport Co. / BKS timetable resources",
        "status": "connected",
        "cadence": "Daily / search-surface validation",
        "observation_count": 16,
        "entity_count": 16,
        "last_observed_at": "2026-05-15T11:11:48Z",
        "checked_at": "2026-06-24T02:15:23.481Z",
        "detail": "Mapped 617 official BKS destination option row(s) from 2 Bangkok-origin search surface(s) into 16 overland entity anchors."
      },
      {
        "feed_id": "dlt-1584-complaint-stats",
        "name": "DLT 1584 complaint-support stats",
        "source_name": "DLT 1584 public-transport complaints",
        "status": "connected",
        "cadence": "Monthly / fiscal-year workbook refresh",
        "observation_count": 29,
        "entity_count": 29,
        "last_observed_at": "2026-05-15T11:11:30.831Z",
        "checked_at": "2026-06-24T02:15:23.481Z",
        "detail": "Mapped DLT 1584 fiscal-year 2569 complaint workbook coverage into 29 transport-support anchors."
      },
      {
        "feed_id": "dlt-gps-taxi-support",
        "name": "DLT GPS and Taxi OK taxi-oversight support",
        "source_name": "DLT GPS passenger and complaint app",
        "status": "connected",
        "cadence": "On regulatory or project-page change",
        "observation_count": 29,
        "entity_count": 29,
        "last_observed_at": "2026-05-15T11:11:32.530Z",
        "checked_at": "2026-06-24T02:15:23.481Z",
        "detail": "Mapped DLT GPS passenger support and Taxi OK / VIP oversight pages into 29 taxi-relevant traveler anchors."
      },
      {
        "feed_id": "bangkok-motorcycle-taxi-support",
        "name": "Bangkok motorcycle-taxi support",
        "source_name": "Bangkok motorcycle taxi stands and drivers",
        "status": "connected",
        "cadence": "Historical / static dataset with periodic validation",
        "observation_count": 9,
        "entity_count": 9,
        "last_observed_at": "2020-07-23T04:25:48.450Z",
        "checked_at": "2026-06-24T02:15:23.481Z",
        "detail": "Mapped 56 official Bangkok motorcycle-taxi datastore row(s) into 9 Bangkok last-mile entity anchors from dataset year unknown using the current build snapshot."
      },
      {
        "feed_id": "otp-taxi-demand-analytics",
        "name": "OTP taxi demand and pickup/dropoff analytics",
        "source_name": "OTP taxi GPS trip analytics",
        "status": "connected",
        "cadence": "Monthly",
        "observation_count": 8,
        "entity_count": 8,
        "last_observed_at": "2026-05-15T11:11:35.449Z",
        "checked_at": "2026-06-24T02:15:23.481Z",
        "detail": "Mapped 475 OTP pickup/dropoff hotspot row(s) and latest trip month มีนาคม 2569 into 8 Bangkok taxi-demand anchors from the current build snapshot."
      },
      {
        "feed_id": "marine-department-pier-registry",
        "name": "Marine Department passenger-pier registry",
        "source_name": "Marine Department piers",
        "status": "connected",
        "cadence": "Weekly / monthly berth-registry update",
        "observation_count": 20,
        "entity_count": 20,
        "last_observed_at": "2026-05-15T11:11:30.342Z",
        "checked_at": "2026-06-24T02:15:23.481Z",
        "detail": "Mapped 187 official Marine Department passenger-berth row(s) into 20 coastal entity anchors from the current build snapshot."
      },
      {
        "feed_id": "marine-department-berth-status",
        "name": "Marine Department berth-status surface",
        "source_name": "Marine Department Berth Status",
        "status": "connected",
        "cadence": "Operational / event-driven",
        "observation_count": 16,
        "entity_count": 16,
        "last_observed_at": "2026-06-24T02:15:23.481Z",
        "checked_at": "2026-06-24T02:15:23.481Z",
        "detail": "Matched 11 public tracked port option(s) and 350 visible ship-visit row(s) into 16 coastal entity anchors."
      },
      {
        "feed_id": "thai-smile-group-branch-locator",
        "name": "Thai Smile Group branch and depot locator",
        "source_name": "Thai Smile Group branch and depot locator",
        "status": "connected",
        "cadence": "Daily / site-locator update",
        "observation_count": 5,
        "entity_count": 5,
        "last_observed_at": "2026-06-24T02:15:23.481Z",
        "checked_at": "2026-06-24T02:15:23.481Z",
        "detail": "Mapped 24 Thai Smile Group branch/depot rows into 5 Bangkok urban-support anchors."
      },
      {
        "feed_id": "bangkok-flood-monitoring-system",
        "name": "Bangkok flood-monitoring current-event surface",
        "source_name": "Bangkok Flood Monitoring System",
        "status": "failed",
        "cadence": "Operational / event-driven",
        "observation_count": 0,
        "entity_count": 0,
        "last_observed_at": null,
        "checked_at": "2026-06-24T02:15:32.095Z",
        "detail": "520: error code: 520\n"
      },
      {
        "feed_id": "doh-highway-traffic-support",
        "name": "DOH highway traffic support",
        "source_name": "DOH Highway Traffic",
        "status": "failed",
        "cadence": "Operational / support-surface refresh",
        "observation_count": 0,
        "entity_count": 0,
        "last_observed_at": null,
        "checked_at": "2026-06-24T02:15:23.481Z",
        "detail": "DOH highway-traffic support snapshot is not available."
      },
      {
        "feed_id": "exat-expressway-support",
        "name": "EXAT expressway support",
        "source_name": "EXAT Traffic Surface",
        "status": "connected",
        "cadence": "Operational / support-surface refresh",
        "observation_count": 13,
        "entity_count": 13,
        "last_observed_at": "2026-05-15T11:11:30.132Z",
        "checked_at": "2026-06-24T02:15:23.481Z",
        "detail": "Mapped 5 official EXAT support page(s) into 13 Bangkok-linked road anchors from the current build snapshot."
      },
      {
        "feed_id": "hss-spa-license-support",
        "name": "HSS spa-license support",
        "source_name": "HSS Health Establishment Directory",
        "status": "connected",
        "cadence": "Weekly / monthly public support-surface refresh",
        "observation_count": 17,
        "entity_count": 17,
        "last_observed_at": "2026-05-15T11:11:35.580Z",
        "checked_at": "2026-06-24T02:15:23.481Z",
        "detail": "Mapped 2 public HSS wellness-license support page(s) into 17 traveler anchors from the current build snapshot."
      },
      {
        "feed_id": "moph-health-facility-support",
        "name": "MOPH health-facility support",
        "source_name": "MOPH Health Facility Datasets",
        "status": "connected",
        "cadence": "Weekly / monthly public support-surface refresh",
        "observation_count": 18,
        "entity_count": 18,
        "last_observed_at": "2026-05-15T11:11:37.864Z",
        "checked_at": "2026-06-24T02:15:23.481Z",
        "detail": "Mapped 2 public MOPH / HS4 medical-facility support page(s) into 18 traveler anchors from the current build snapshot."
      },
      {
        "feed_id": "dnp-park-tourism-support",
        "name": "DNP park tourism support",
        "source_name": "DNP Tourism Datasets",
        "status": "connected",
        "cadence": "Scheduled / catalog refresh",
        "observation_count": 9,
        "entity_count": 9,
        "last_observed_at": "2026-05-15T11:11:43.688Z",
        "checked_at": "2026-06-24T02:15:23.481Z",
        "detail": "Mapped 1 public DNP park-tourism support page(s) into 9 nature-heavy traveler anchors from the current build snapshot."
      },
      {
        "feed_id": "gta-gold-reference-price",
        "name": "GTA Thai gold reference price",
        "source_name": "Gold Traders Association Thailand gold prices",
        "status": "connected",
        "cadence": "Intraday / market-hours publication",
        "observation_count": 72,
        "entity_count": 9,
        "last_observed_at": "2026-06-24T02:05:00.000Z",
        "checked_at": "2026-06-24T02:15:23.481Z",
        "detail": "Mapped the national GTA 96.5% quote into 9 city buying-context anchors without inventing province-specific official prices."
      },
      {
        "feed_id": "bot-usd-thb-reference",
        "name": "BOT USD/THB daily average",
        "source_name": "Bank of Thailand API",
        "status": "queued",
        "cadence": "Business day / daily average publication",
        "observation_count": 0,
        "entity_count": 0,
        "last_observed_at": null,
        "checked_at": "2026-06-24T02:15:23.481Z",
        "detail": "BOT API token not configured, so gold FX context is currently falling back to the GTA embedded USD/THB reference."
      },
      {
        "feed_id": "bangkok-civic-complaint-stats",
        "name": "Bangkok civic complaint stats",
        "source_name": "Bangkok Open Data",
        "status": "connected",
        "cadence": "Monthly / district statistical update",
        "observation_count": 18,
        "entity_count": 6,
        "last_observed_at": "2025-07-31T17:00:00.000Z",
        "checked_at": "2026-06-24T02:15:23.481Z",
        "detail": "Mapped Bangkok district complaint summary period สิงหาคม 2568 into 6 entity anchors."
      },
      {
        "feed_id": "noise4thai-ambient-noise",
        "name": "Noise4Thai ambient noise",
        "source_name": "PCD Noise4Thai",
        "status": "connected",
        "cadence": "Hourly / daily",
        "observation_count": 21,
        "entity_count": 21,
        "last_observed_at": "2026-06-24T02:00:00.000Z",
        "checked_at": "2026-06-24T02:15:23.481Z",
        "detail": "Mapped 26 Noise4Thai cards into 21 entity anchors."
      },
      {
        "feed_id": "thairsc-road-safety",
        "name": "ThaiRSC road-safety observations",
        "source_name": "ThaiRSC Road Accident Center",
        "status": "connected",
        "cadence": "Near real time / daily snapshot",
        "observation_count": 105,
        "entity_count": 35,
        "last_observed_at": "2026-05-15T11:00:00.000Z",
        "checked_at": "2026-06-24T02:15:23.481Z",
        "detail": "Served from the latest ThaiRSC build snapshot at 2026-05-15T11:11:17.870Z because the upstream API requires TLS bypass in local refresh tooling."
      }
    ],
    "queued": [],
    "all": [
      {
        "id": "air4thai-aqi",
        "name": "Air4Thai AQI and PM2.5",
        "status": "active",
        "sourceName": "Air4Thai / Pollution Control Department",
        "kind": "entity-observation",
        "cadence": "Hourly",
        "coverage": "Destination, hotel-area, airport, pier-proxy, and monitoring-cluster AQI hooks where public station coverage exists.",
        "parameters": [
          "aqi_average",
          "pm25_average"
        ],
        "note": "Primary live entity observation feed for public station averages and proxy matching by destination or city cluster."
      },
      {
        "id": "gdacs-disaster-context",
        "name": "GDACS disaster context",
        "status": "active",
        "sourceName": "GDACS",
        "kind": "context-observation",
        "cadence": "Frequent / feed-driven",
        "coverage": "Global and regional hazard context that affects route and confidence checks across all destination entities.",
        "parameters": [
          "active_hazard_groups",
          "active_hazard_items"
        ],
        "note": "Context only. Useful for alerting and contradiction notes, not a local place-level safety verdict."
      },
      {
        "id": "usgs-thailand-earthquakes",
        "name": "USGS Thailand-region earthquakes",
        "status": "active",
        "sourceName": "USGS Earthquake API",
        "kind": "context-observation",
        "cadence": "Frequent / event-driven",
        "coverage": "Thailand-region earthquake context within the bounded public query used by the signal graph.",
        "parameters": [
          "regional_earthquake_events",
          "regional_max_magnitude"
        ],
        "note": "Context feed for rare but important event checks. It does not replace local disaster or route advisories."
      },
      {
        "id": "tmd-weather-surface",
        "name": "TMD weather and warning surface",
        "status": "active",
        "sourceName": "Thai Meteorological Department",
        "kind": "entity-observation",
        "cadence": "Hourly / warning-driven",
        "coverage": "Destination weather risk, storm warnings, heat risk, marine warnings, and route weather context.",
        "parameters": [
          "rain_risk_input",
          "heat_risk_input",
          "storm_warning_input",
          "marine_warning_input"
        ],
        "note": "Live connector using public TMD RSS/XML forecast, warning, and station-weather feeds for destination and route weather context."
      },
      {
        "id": "tmd-shipping-forecast",
        "name": "TMD shipping weather forecast",
        "status": "active",
        "sourceName": "TMD Shipping Forecast",
        "kind": "entity-observation",
        "cadence": "Operational / on marine-forecast update",
        "coverage": "Coastal destination and pier-anchor shipping forecast context for the Gulf of Thailand and Andaman / Malacca marine sections.",
        "parameters": [
          "marine_wind_speed_average",
          "marine_wave_height_average",
          "marine_wave_height_thunder",
          "marine_thunderstorm_flag"
        ],
        "note": "Live connector using the public TMD shipping forecast page for marine section wind, wave, thunder, and heavy-rain context. This is shipping-weather burden, not operator closure, ticket, or seat truth."
      },
      {
        "id": "aviationweather-airport-status",
        "name": "Aviation Weather airport status context",
        "status": "active",
        "sourceName": "NOAA Aviation Weather API",
        "kind": "entity-observation",
        "cadence": "Minute to hourly depending airport weather updates",
        "coverage": "Destination and airport weather-operability context for Bangkok, Chiang Mai, Phuket, Krabi, and Samui route decisions.",
        "parameters": [
          "airport_flight_rules_score",
          "airport_visibility_score",
          "airport_forecast_disruption_score",
          "airport_convective_forecast_flag"
        ],
        "note": "Live connector using public METAR and TAF data as airport weather and operability context. This is not airline delay or cancellation truth."
      },
      {
        "id": "aot-airport-ground-services",
        "name": "AOT airport ground-service support",
        "status": "active",
        "sourceName": "AOT airport ground transport pages",
        "sourceNames": [
          "AOT airport ground transport pages",
          "AOT Suvarnabhumi public taxi",
          "AOT Suvarnabhumi Grab pickup points",
          "AOT Suvarnabhumi car rental services",
          "AOT Don Mueang Grab pickup points",
          "AOT Don Mueang car rental services",
          "AOT Phuket car rental services",
          "AOT Chiang Mai car rental services"
        ],
        "kind": "entity-observation",
        "cadence": "On change / operational page",
        "coverage": "Airport-anchor observations for official taxi, Grab, rental-counter, and pickup-rule support at AOT airports where public transport pages are reachable.",
        "parameters": [
          "official_airport_ground_service_score"
        ],
        "note": "Live connector using public AOT airport transport pages for official airport-ground-service and pickup-rule context. This is not live taxi queue, ETA, or rental inventory truth."
      },
      {
        "id": "aot-airport-flight-board-surface",
        "name": "AOT airport flight-board surface",
        "status": "active",
        "sourceName": "AOT airport flight status",
        "kind": "entity-observation",
        "cadence": "On change / operational page",
        "coverage": "Airport-anchor observations for official public passenger flight-board self-check surfaces at AOT airports with public flight-status pages.",
        "parameters": [
          "official_airport_board_surface_score"
        ],
        "note": "Live connector using public AOT flight-status pages to score official passenger board-surface support. This is self-serve board visibility, not live airline delay, gate, baggage, or cancellation truth because the row query is protected by a browser turnstile token."
      },
      {
        "id": "aot-airport-traffic-stats",
        "name": "AOT airport traffic statistics",
        "status": "active",
        "sourceName": "AOT air transport statistics",
        "kind": "entity-observation",
        "cadence": "Monthly / fiscal-year workbook update",
        "coverage": "Airport-anchor observations for official passenger and aircraft-movement scale context at AOT airports with public traffic workbooks.",
        "parameters": [
          "official_airport_total_movements",
          "official_airport_total_passengers",
          "official_airport_scale_score"
        ],
        "note": "Live connector using the public AOT traffic archive workbook for airport-scale context. This is official passenger and movement scale, not live on-time, queue, gate, or inventory truth."
      },
      {
        "id": "aot-airport-environment-support",
        "name": "AOT airport environmental support",
        "status": "active",
        "sourceName": "AOT annual report / SET filing",
        "kind": "entity-observation",
        "cadence": "Annual report publication with periodic factsheet refresh",
        "coverage": "Airport-anchor observations for operator-level environmental-governance, community, and airport-noise disclosure support at AOT airports covered by the reachable SET-hosted annual report surface.",
        "parameters": [
          "official_airport_environmental_support_score"
        ],
        "note": "Live snapshot and connector using the public SET-hosted AOT factsheet and annual report ZIP to score airport environmental-governance and community-support disclosure. This is official disclosure context, not live measured sound-level truth."
      },
      {
        "id": "thaiwater-water-quality",
        "name": "Thaiwater water-quality observations",
        "status": "active",
        "sourceName": "Thaiwater WaterQuality API",
        "kind": "entity-observation",
        "cadence": "10 to 30 minutes depending on station",
        "coverage": "River, canal, and water-station observations for flood and water-quality decisions.",
        "parameters": [
          "water_quality_index",
          "water_quality_station_state"
        ],
        "note": "Live connector using the public Thaiwater water-quality load endpoint, mapped into destination and water-anchor observations where current station coverage exists."
      },
      {
        "id": "namtang-transit-structure",
        "name": "Namtang transit structure",
        "status": "active",
        "sourceName": "Namtang GTFS",
        "kind": "entity-observation",
        "cadence": "Daily / static feed refresh",
        "coverage": "Destination, hotel-area, station, airport, terminal, and pier transport-structure observations from the public OTP/Namtang stop spine.",
        "parameters": [
          "transport_structure_score"
        ],
        "note": "Live connector using the public Namtang compressed stop export to measure stop density, mode diversity, and transit-structure support around key traveler entities."
      },
      {
        "id": "bangkok-rapid-transit-official-pages",
        "name": "Bangkok rapid-transit official pages",
        "status": "active",
        "sourceName": "BTS SkyTrain system maps and service pages",
        "sourceNames": [
          "MRT / MRTA metro maps and service pages"
        ],
        "kind": "entity-observation",
        "cadence": "Daily / on official route-map or service-page change",
        "coverage": "Bangkok destination, Bangkok hotel-area, interchange, and terminal support observations from official BTS and MRTA public route-map and service pages.",
        "parameters": [
          "official_rapid_transit_support_score"
        ],
        "note": "Build snapshot using the public BTS route-map page and the public MRTA MRT route page to prove official rapid-transit support around Bangkok city-base decisions. This is route-map and service-page support, not live headway, crowding, or outage truth."
      },
      {
        "id": "srt-official-station-presence",
        "name": "SRT official station presence",
        "status": "active",
        "sourceName": "SRT timetable data",
        "kind": "entity-observation",
        "cadence": "Daily / on public timetable-site change",
        "coverage": "Destination and selected hotel-area official rail presence from the public SRT station list.",
        "parameters": [
          "official_rail_presence_score"
        ],
        "note": "Live connector using the public SRT station-list surface to confirm official station presence around rail-relevant destinations. This is operator-backed rail presence, not live train timing, seat, or disruption truth."
      },
      {
        "id": "mot-bus-terminal-support",
        "name": "MOT official passenger bus terminals",
        "status": "active",
        "sourceName": "MOT passenger bus terminals dataset",
        "kind": "entity-observation",
        "cadence": "Weekly / monthly catalog update",
        "coverage": "Destination, hotel-area, and bus-terminal observations from the official MOT passenger-terminal master where public CSV rows are available.",
        "parameters": [
          "official_bus_terminal_support_score"
        ],
        "note": "Live connector using the public MOT passenger-bus-terminal master CSV to confirm official terminal presence and overland-support anchors. This is terminal-master support, not live departure, seat, or booking truth."
      },
      {
        "id": "bks-station-ticket-support",
        "name": "BKS station and ticket-point support",
        "status": "active",
        "sourceName": "Transport Co. / BKS station and ticket-point locations",
        "kind": "entity-observation",
        "cadence": "Monthly / quarterly static dataset validation",
        "coverage": "Destination, hotel-area, and terminal observations from the official BKS station, office, stop, and ticket-point location CSV.",
        "parameters": [
          "official_intercity_bus_support_score"
        ],
        "note": "Build snapshot using the public BKS station and ticket-point CSV to prove official intercity-bus support around overland traveler entities. This is official station and ticket-point presence, not live departure, seat, or booking truth."
      },
      {
        "id": "bks-timetable-search-surface",
        "name": "BKS timetable search surface",
        "status": "active",
        "sourceName": "Transport Co. / BKS timetable resources",
        "kind": "entity-observation",
        "cadence": "Daily / search-surface validation",
        "coverage": "Destination and overland-anchor observations from the public BKS booking/search destination selector surface for Bangkok-origin intercity bus planning.",
        "parameters": [
          "official_intercity_bus_search_support_score"
        ],
        "note": "Build snapshot using the public BKS booking/search destination selector to prove official route-search support around tracked intercity destinations. This is official search-surface presence, not live departure, seat, or booking inventory truth."
      },
      {
        "id": "dlt-1584-complaint-stats",
        "name": "DLT 1584 complaint-support stats",
        "status": "active",
        "sourceName": "DLT 1584 public-transport complaints",
        "kind": "entity-observation",
        "cadence": "Monthly / fiscal-year workbook refresh",
        "coverage": "Bangkok city-base, regional destination, hotel-area, and bus-terminal complaint recourse and burden context from the public DLT 1584 fiscal-year workbooks.",
        "parameters": [
          "official_transport_complaint_support_score"
        ],
        "note": "Build snapshot using the public DLT 1584 complaint statistics workbooks to score official complaint recourse and transport-burden context. This is not local realtime service quality, dispatch, or incident truth."
      },
      {
        "id": "dlt-gps-taxi-support",
        "name": "DLT GPS and Taxi OK taxi-oversight support",
        "status": "active",
        "sourceName": "DLT GPS passenger and complaint app",
        "sourceNames": [
          "DLT Taxi OK / Taxi VIP project"
        ],
        "kind": "entity-observation",
        "cadence": "On regulatory or project-page change",
        "coverage": "Bangkok city-base, airport-linked, and taxi-heavy regional destination or hotel-area support observations from the public DLT GPS app pages and Taxi OK / Taxi VIP notices.",
        "parameters": [
          "official_taxi_oversight_support_score"
        ],
        "note": "Build snapshot using the public DLT GPS passenger pages and Taxi OK / Taxi VIP project notices to score official registered-taxi oversight, complaint, and station-search support. This is not live vehicle location, dispatch, ETA, or raw taxi GPS truth."
      },
      {
        "id": "bangkok-motorcycle-taxi-support",
        "name": "Bangkok motorcycle-taxi support",
        "status": "active",
        "sourceName": "Bangkok motorcycle taxi stands and drivers",
        "kind": "entity-observation",
        "cadence": "Historical / static dataset with periodic validation",
        "coverage": "Bangkok destination, Bangkok hotel-area, transfer-node, and airport last-mile support observations from the official DLT/data.go.th motorcycle-taxi stand and driver dataset.",
        "parameters": [
          "official_motorcycle_taxi_support_score"
        ],
        "note": "Live connector using the public data.go.th datastore for Bangkok motorcycle-taxi stands and drivers to score official last-mile support coverage. This is stand and driver supply context, not exact live availability, queue, or dispatch truth."
      },
      {
        "id": "otp-taxi-demand-analytics",
        "name": "OTP taxi demand and pickup/dropoff analytics",
        "status": "active",
        "sourceName": "OTP taxi GPS trip analytics",
        "sourceNames": [
          "OTP top taxi pickup and dropoff areas"
        ],
        "kind": "entity-observation",
        "cadence": "Monthly",
        "coverage": "Bangkok destination, hotel-area, interchange, terminal, and airport-linked demand context from public OTP monthly taxi GPS analytics and top pickup/dropoff area rankings.",
        "parameters": [
          "taxi_pickup_dropoff_support_score"
        ],
        "note": "Build snapshot using the public OTP monthly taxi GPS analytics and top pickup/dropoff area CSVs to score aggregate taxi-demand and hotspot support around Bangkok traveler entities. This is monthly aggregate demand context, not live dispatch, ETA, queue, or raw trip truth."
      },
      {
        "id": "marine-department-pier-registry",
        "name": "Marine Department passenger-pier registry",
        "status": "active",
        "sourceName": "Marine Department piers",
        "kind": "entity-observation",
        "cadence": "Weekly / monthly berth-registry update",
        "coverage": "Coastal destination, hotel-area, and pier-anchor observations from the official Marine Department berth registry where public passenger-use rows are available.",
        "parameters": [
          "official_pier_support_score"
        ],
        "note": "Live connector using the public Marine Department berth registry to confirm official passenger-pier support, berth depth, and berth length context around coastal traveler entities. This is pier-infrastructure support, not live ferry schedule, closure, queue, or seat truth."
      },
      {
        "id": "marine-department-berth-status",
        "name": "Marine Department berth-status surface",
        "status": "active",
        "sourceName": "Marine Department Berth Status",
        "kind": "entity-observation",
        "cadence": "Operational / event-driven",
        "coverage": "Coastal destination, hotel-area, and pier-anchor berth-status surface support for Phuket, Krabi, Samui, Phangan, Pattaya, and selected public port clusters visible on the official page.",
        "parameters": [
          "official_berth_status_surface_score"
        ],
        "note": "Live connector using the public Marine Department berth-status page to confirm named public port selectors and current visible ship-visit rows around coastal traveler entities. This is berth and ship-movement evidence, not ferry schedule, ticket, or seat truth."
      },
      {
        "id": "thai-smile-group-branch-locator",
        "name": "Thai Smile Group branch and depot locator",
        "status": "active",
        "sourceName": "Thai Smile Group branch and depot locator",
        "kind": "entity-observation",
        "cadence": "Daily / site-locator update",
        "coverage": "Bangkok destination, Bangkok hotel-area, and selected transfer-anchor observations from the public Thai Smile Group branch and depot locator.",
        "parameters": [
          "urban_bus_operator_support_score"
        ],
        "note": "Live connector using the public Thai Smile Group site locator to confirm urban bus operator footprint around Bangkok traveler entities. This is operator support and depot presence, not realtime vehicle, ETA, crowding, or outage truth."
      },
      {
        "id": "bangkok-flood-monitoring-system",
        "name": "Bangkok flood-monitoring current-event surface",
        "status": "active",
        "sourceName": "Bangkok Flood Monitoring System",
        "kind": "entity-observation",
        "cadence": "Operational / event-driven",
        "coverage": "Bangkok destination, hotel-area, and transfer-node flood-friction context from the public city flood-monitoring current-event endpoint.",
        "parameters": [
          "bangkok_flood_current_event_count",
          "bangkok_flood_max_level_cm"
        ],
        "note": "Live connector using the public Bangkok flood-monitoring current-event endpoint for citywide flood-friction context. This is Bangkok-only public surface evidence, not a nationwide flood service."
      },
      {
        "id": "doh-highway-traffic-support",
        "name": "DOH highway traffic support",
        "status": "active",
        "sourceName": "DOH Highway Traffic",
        "kind": "entity-observation",
        "cadence": "Operational / support-surface refresh",
        "coverage": "Destination, airport, bus-terminal, and interchange road-friction support observations using the public DOH CCTV region and corridor surfaces.",
        "parameters": [
          "doh_highway_support_score"
        ],
        "note": "Build snapshot using the public DOH highway-traffic CCTV region pages to score camera-backed corridor support and visible staleness by major traveler region. This is public observability and support context, not live travel-time, speed, queue, or incident truth."
      },
      {
        "id": "exat-expressway-support",
        "name": "EXAT expressway support",
        "status": "active",
        "sourceName": "EXAT Traffic Surface",
        "sourceNames": [
          "EXAT Data Catalog"
        ],
        "kind": "entity-observation",
        "cadence": "Operational / support-surface refresh",
        "coverage": "Bangkok-linked destination, airport, and overland-anchor expressway support observations using official EXAT map, toll, maintenance, and motorist service pages.",
        "parameters": [
          "exat_expressway_support_score"
        ],
        "note": "Build snapshot using the public EXAT support surfaces to score whether Bangkok-linked road moves have official expressway, toll, maintenance, and motorist-support context behind them. This is expressway support context, not live congestion, lane, queue, or travel-time truth."
      },
      {
        "id": "hss-spa-license-support",
        "name": "HSS spa-license support",
        "status": "active",
        "sourceName": "HSS Health Establishment Directory",
        "sourceNames": [
          "HSS Spa Premium"
        ],
        "kind": "entity-observation",
        "cadence": "Weekly / monthly public support-surface refresh",
        "coverage": "Destination and hotel-base wellness-license support observations using public HSS health-establishment directory and spa-premium surfaces.",
        "parameters": [
          "spa_license_support_score"
        ],
        "note": "Build snapshot using the public HSS health-establishment directory and spa-premium surfaces to score whether official spa and massage license lookup context exists behind wellness-heavy traveler anchors. This is licensing-support context, not live treatment availability, quality, or booking truth."
      },
      {
        "id": "moph-health-facility-support",
        "name": "MOPH health-facility support",
        "status": "active",
        "sourceName": "MOPH Health Facility Datasets",
        "kind": "entity-observation",
        "cadence": "Weekly / monthly public support-surface refresh",
        "coverage": "Destination and stay-fallback medical support observations using public MOPH/HS4 facility surfaces.",
        "parameters": [
          "medical_fallback_support_score"
        ],
        "note": "Build snapshot using public MOPH health-facility dataset and HS4 facility surfaces to score whether official hospital and facility-lookup context exists behind traveler fallback planning. This is medical fallback context, not live bed, wait-time, dispatch, or specialist availability truth."
      },
      {
        "id": "dnp-park-tourism-support",
        "name": "DNP park tourism support",
        "status": "active",
        "sourceName": "DNP Tourism Datasets",
        "kind": "entity-observation",
        "cadence": "Scheduled / catalog refresh",
        "coverage": "Nature-heavy destination park-access support observations using public DNP tourism dataset surfaces and national-park dataset visibility.",
        "parameters": [
          "park_access_context_score"
        ],
        "note": "Build snapshot using the public DNP tourism dataset surfaces to score whether national-park and protected-area planning has official dataset support behind it. This is park-planning context, not live closure, ticket, ranger, or capacity truth."
      },
      {
        "id": "gta-gold-reference-price",
        "name": "GTA Thai gold reference price",
        "status": "active",
        "sourceName": "Gold Traders Association Thailand gold prices",
        "kind": "entity-observation",
        "cadence": "Intraday / market-hours publication",
        "coverage": "Destination-level city buying-context anchors using the national Thai 96.5% gold reference quote instead of pretending there are province-specific official prices.",
        "parameters": [
          "gold_bar_965_buy_baht_weight",
          "gold_bar_965_sell_baht_weight",
          "gold_ornament_965_base_baht_weight",
          "gold_ornament_965_sell_baht_weight",
          "gold_spot_reference",
          "usd_thb_reference",
          "gold_price_change_intraday",
          "gold_price_change_prev_day"
        ],
        "note": "Live connector using the published Gold Traders Association latest-price JSON surface for the national Thai domestic 96.5% retail reference. This is published THB-per-baht-weight context, not a trading feed or province-by-province local shop quote."
      },
      {
        "id": "bot-usd-thb-reference",
        "name": "BOT USD/THB daily average",
        "status": "active",
        "sourceName": "Bank of Thailand API",
        "kind": "entity-observation",
        "cadence": "Business day / daily average publication",
        "coverage": "Gold-buying destination and market-anchor FX context when a Bank of Thailand API token is configured.",
        "parameters": [
          "usd_thb_reference"
        ],
        "note": "Optional live connector using the Bank of Thailand daily-average USD/THB exchange-rate API when credentials are configured. Preferred FX context for Thai gold pages and signals when reachable; otherwise the stack falls back to the GTA-published embedded USD/THB reference."
      },
      {
        "id": "bangkok-civic-complaint-stats",
        "name": "Bangkok civic complaint stats",
        "status": "active",
        "sourceName": "Bangkok Open Data",
        "kind": "entity-observation",
        "cadence": "Monthly / district statistical update",
        "coverage": "Bangkok destination and Bangkok hotel-area complaint, resolution, and star-rating context from the public district complaint statistics file.",
        "parameters": [
          "civic_monthly_complaint_count",
          "civic_monthly_resolution_rate",
          "civic_star_average"
        ],
        "note": "Public Bangkok Open Data complaint statistics. This is a slower-moving civic-friction layer for nuisance and service burden, not a live dispatch or complaint-intake feed."
      },
      {
        "id": "noise4thai-ambient-noise",
        "name": "Noise4Thai ambient noise",
        "status": "active",
        "sourceName": "PCD Noise4Thai",
        "kind": "entity-observation",
        "cadence": "Hourly / daily",
        "coverage": "Destination, hotel-area, and monitoring-cluster noise observations.",
        "parameters": [
          "leq_1h",
          "leq_24h"
        ],
        "note": "Live connector using public Noise4Thai monitoring cards to compute current destination and hotel-area ambient-noise observations."
      },
      {
        "id": "thairsc-road-safety",
        "name": "ThaiRSC road-safety observations",
        "status": "active",
        "sourceName": "ThaiRSC Road Accident Center",
        "kind": "entity-observation",
        "cadence": "Near real time / daily snapshot",
        "coverage": "Route and province road-safety observations for route fragility and holiday driving decisions.",
        "parameters": [
          "road_deaths_today",
          "road_injuries_today",
          "major_accident_context"
        ],
        "note": "Live connector served from a fresh build snapshot because the upstream API requires TLS bypass in refresh tooling, but the road-safety observations are now attached to the graph."
      }
    ]
  },
  "storage": {
    "mode": "persisted",
    "snapshot_kind": "observations",
    "generated_at": "2026-06-24T02:15:35.482Z",
    "stored_at": "2026-06-24T02:15:52.358Z",
    "fresh": false
  },
  "observations": [
    {
      "feed_id": "air4thai-aqi",
      "source_name": "Air4Thai / Pollution Control Department",
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "freshness_class": "fresh",
      "quality_flag": "direct-source-match",
      "method": "city_cluster_average",
      "confidence": "high",
      "note": "Derived from Bangkok public station coverage.",
      "station_count": 81,
      "supporting_station_ids": [
        "02t",
        "03t",
        "05t",
        "12t",
        "50t",
        "52t",
        "53t",
        "54t"
      ],
      "supporting_station_names": [
        "Bansomdejchaopraya Rajabhat University",
        "Highway NO.3902 km.13 +600",
        "Thai Meteorological Department ",
        "Nonsi Witthaya School",
        "Chulalongkorn Hospital",
        "Thonburi Power Sub-Station",
        "Chokchai Police Station",
        "National Housing Authority Dindaeng"
      ],
      "observation_id": "air4thai-aqi_bangkok_aqi_average",
      "parameter": "aqi_average",
      "metric_label": "Average AQI",
      "value": 19.9,
      "unit": "AQI",
      "bucket": "very good",
      "max_value": 33,
      "comparison_hint": "Odeon Circus reached AQI 33"
    },
    {
      "feed_id": "air4thai-aqi",
      "source_name": "Air4Thai / Pollution Control Department",
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "freshness_class": "fresh",
      "quality_flag": "direct-source-match",
      "method": "city_cluster_average",
      "confidence": "high",
      "note": "Derived from Bangkok public station coverage.",
      "station_count": 81,
      "supporting_station_ids": [
        "02t",
        "03t",
        "05t",
        "12t",
        "50t",
        "52t",
        "53t",
        "54t"
      ],
      "supporting_station_names": [
        "Bansomdejchaopraya Rajabhat University",
        "Highway NO.3902 km.13 +600",
        "Thai Meteorological Department ",
        "Nonsi Witthaya School",
        "Chulalongkorn Hospital",
        "Thonburi Power Sub-Station",
        "Chokchai Police Station",
        "National Housing Authority Dindaeng"
      ],
      "observation_id": "air4thai-aqi_bangkok_pm25_average",
      "parameter": "pm25_average",
      "metric_label": "Average PM2.5",
      "value": 11.6,
      "unit": "µg/m3",
      "bucket": "very good",
      "max_value": null,
      "comparison_hint": "Use with AQI to understand whether PM2.5 is the main comfort breaker."
    },
    {
      "feed_id": "tmd-weather-surface",
      "source_name": "Thai Meteorological Department",
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "observed_at": "2026-06-24T00:00:00.000Z",
      "freshness_class": "fresh",
      "quality_flag": "direct-source-match",
      "method": "tmd_rss_station_and_region",
      "confidence": "high",
      "note": "Direct TMD Bangkok station plus Bangkok and vicinity regional forecast.",
      "observation_id": "tmd-weather-surface_bangkok_forecast_rain_probability",
      "parameter": "forecast_rain_probability",
      "metric_label": "Forecast rain probability",
      "value": 40,
      "unit": "%",
      "source_hint": "Bangkok and vicinity",
      "comparison_hint": "No heavy-rain wording is present in the regional forecast."
    },
    {
      "feed_id": "tmd-weather-surface",
      "source_name": "Thai Meteorological Department",
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "observed_at": "2026-06-24T00:00:00.000Z",
      "freshness_class": "fresh",
      "quality_flag": "direct-source-match",
      "method": "tmd_rss_station_and_region",
      "confidence": "high",
      "note": "Direct TMD Bangkok station plus Bangkok and vicinity regional forecast.",
      "observation_id": "tmd-weather-surface_bangkok_forecast_temp_min",
      "parameter": "forecast_temp_min",
      "metric_label": "Forecast minimum temperature",
      "value": 26.5,
      "unit": "°C",
      "source_hint": "Bangkok and vicinity"
    },
    {
      "feed_id": "tmd-weather-surface",
      "source_name": "Thai Meteorological Department",
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "observed_at": "2026-06-24T00:00:00.000Z",
      "freshness_class": "fresh",
      "quality_flag": "direct-source-match",
      "method": "tmd_rss_station_and_region",
      "confidence": "high",
      "note": "Direct TMD Bangkok station plus Bangkok and vicinity regional forecast.",
      "observation_id": "tmd-weather-surface_bangkok_forecast_temp_max",
      "parameter": "forecast_temp_max",
      "metric_label": "Forecast maximum temperature",
      "value": 35.5,
      "unit": "°C",
      "source_hint": "Bangkok and vicinity"
    },
    {
      "feed_id": "tmd-weather-surface",
      "source_name": "Thai Meteorological Department",
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "observed_at": "2026-06-24T00:00:00.000Z",
      "freshness_class": "fresh",
      "quality_flag": "direct-source-match",
      "method": "tmd_rss_station_and_region",
      "confidence": "high",
      "note": "Direct TMD Bangkok station plus Bangkok and vicinity regional forecast.",
      "observation_id": "tmd-weather-surface_bangkok_forecast_heavy_rain_flag",
      "parameter": "forecast_heavy_rain_flag",
      "metric_label": "Heavy-rain forecast flag",
      "value": 0,
      "unit": "flag",
      "source_hint": "Bangkok and vicinity"
    },
    {
      "feed_id": "tmd-weather-surface",
      "source_name": "Thai Meteorological Department",
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "observed_at": "2026-06-24T00:00:00.000Z",
      "freshness_class": "fresh",
      "quality_flag": "direct-source-match",
      "method": "tmd_rss_station_and_region",
      "confidence": "high",
      "note": "Direct TMD Bangkok station plus Bangkok and vicinity regional forecast.",
      "observation_id": "tmd-weather-surface_bangkok_warning_match_count",
      "parameter": "warning_match_count",
      "metric_label": "Matched warning items",
      "value": 10,
      "unit": "alerts",
      "source_hint": "TMD warning news",
      "supporting_titles": [
        "อากาศหนาวเย็นบริเวณประเทศไทยตอนบนและคลื่นลมแรงบริเวณอ่าวไทย ฉบับที่ 11 (357/2565) (มีผลกระทบตั้งแต่วันที่ 19-20 ธันวาคม 2565)",
        "พยากรณ์อากาศสำหรับช่วงการประชุม APEC 2022 บริเวณกรุงเทพมหานคร นนทบุรี และสมุทรปราการ (ระหว่างวันที่ ๑๖ - ๑๘ พฤศจิกายน ๒๕๖๕)",
        "Storm NALGAE"
      ]
    },
    {
      "feed_id": "tmd-weather-surface",
      "source_name": "Thai Meteorological Department",
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "observed_at": "2026-06-24T00:00:00.000Z",
      "freshness_class": "fresh",
      "quality_flag": "direct-source-match",
      "method": "tmd_rss_station_and_region",
      "confidence": "high",
      "note": "Direct TMD Bangkok station plus Bangkok and vicinity regional forecast.",
      "observation_id": "tmd-weather-surface_bangkok_marine_wind_speed_average",
      "parameter": "marine_wind_speed_average",
      "metric_label": "Marine wind speed average",
      "value": 15,
      "unit": "km/h",
      "source_hint": "Bangkok and vicinity",
      "comparison_hint": "Parsed from the regional TMD marine-weather text where current sea conditions are published."
    },
    {
      "feed_id": "tmd-weather-surface",
      "source_name": "Thai Meteorological Department",
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "observed_at": "2026-06-24T00:00:00.000Z",
      "freshness_class": "fresh",
      "quality_flag": "direct-source-match",
      "method": "tmd_rss_station_and_region",
      "confidence": "high",
      "note": "Direct TMD Bangkok station plus Bangkok and vicinity regional forecast.",
      "observation_id": "tmd-weather-surface_bangkok_marine_thunderstorm_flag",
      "parameter": "marine_thunderstorm_flag",
      "metric_label": "Marine thunderstorm flag",
      "value": 1,
      "unit": "flag",
      "source_hint": "Bangkok and vicinity"
    },
    {
      "feed_id": "tmd-weather-surface",
      "source_name": "Thai Meteorological Department",
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "observed_at": "2026-06-24T00:00:00.000Z",
      "freshness_class": "fresh",
      "quality_flag": "direct-source-match",
      "method": "tmd_rss_station_and_region",
      "confidence": "high",
      "note": "Direct TMD Bangkok station plus Bangkok and vicinity regional forecast.",
      "observation_id": "tmd-weather-surface_bangkok_station_temperature",
      "parameter": "station_temperature",
      "metric_label": "Station temperature",
      "value": 29.9,
      "unit": "°C",
      "source_hint": "Bangkok"
    },
    {
      "feed_id": "tmd-weather-surface",
      "source_name": "Thai Meteorological Department",
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "observed_at": "2026-06-24T00:00:00.000Z",
      "freshness_class": "fresh",
      "quality_flag": "direct-source-match",
      "method": "tmd_rss_station_and_region",
      "confidence": "high",
      "note": "Direct TMD Bangkok station plus Bangkok and vicinity regional forecast.",
      "observation_id": "tmd-weather-surface_bangkok_station_humidity",
      "parameter": "station_humidity",
      "metric_label": "Station humidity",
      "value": 70,
      "unit": "%",
      "source_hint": "Bangkok"
    },
    {
      "feed_id": "tmd-weather-surface",
      "source_name": "Thai Meteorological Department",
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "observed_at": "2026-06-24T00:00:00.000Z",
      "freshness_class": "fresh",
      "quality_flag": "direct-source-match",
      "method": "tmd_rss_station_and_region",
      "confidence": "high",
      "note": "Direct TMD Bangkok station plus Bangkok and vicinity regional forecast.",
      "observation_id": "tmd-weather-surface_bangkok_station_wind_speed",
      "parameter": "station_wind_speed",
      "metric_label": "Station wind speed",
      "value": 0,
      "unit": "km/h",
      "source_hint": "Bangkok"
    },
    {
      "feed_id": "tmd-weather-surface",
      "source_name": "Thai Meteorological Department",
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "observed_at": "2026-06-24T00:00:00.000Z",
      "freshness_class": "fresh",
      "quality_flag": "direct-source-match",
      "method": "tmd_rss_station_and_region",
      "confidence": "high",
      "note": "Direct TMD Bangkok station plus Bangkok and vicinity regional forecast.",
      "observation_id": "tmd-weather-surface_bangkok_station_rainfall_today",
      "parameter": "station_rainfall_today",
      "metric_label": "Station rainfall today",
      "value": 0,
      "unit": "mm",
      "source_hint": "Bangkok",
      "comparison_hint": "ท้องฟ้าโปร่ง"
    },
    {
      "feed_id": "aviationweather-airport-status",
      "source_name": "NOAA Aviation Weather API",
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "freshness_class": "fresh",
      "quality_flag": "direct-source-match",
      "method": "aviationweather_metar_taf",
      "confidence": "high",
      "note": "Bangkok destination proxy from Suvarnabhumi and Don Mueang METAR and TAF weather-operability context.",
      "airport_count": 2,
      "supporting_station_ids": [
        "VTBS",
        "VTBD"
      ],
      "supporting_station_names": [
        "Bangkok/Suvarnabhumi Arpt, 20, TH",
        "Bangkok Intl, 10, TH"
      ],
      "source_names": [
        "NOAA Aviation Weather API"
      ],
      "observation_id": "aviationweather-airport-status_bangkok_airport_flight_rules_score",
      "parameter": "airport_flight_rules_score",
      "metric_label": "Airport flight-rules score",
      "value": 94,
      "unit": "score",
      "comparison_hint": "VTBS currently reports VFR."
    },
    {
      "feed_id": "aviationweather-airport-status",
      "source_name": "NOAA Aviation Weather API",
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "freshness_class": "fresh",
      "quality_flag": "direct-source-match",
      "method": "aviationweather_metar_taf",
      "confidence": "high",
      "note": "Bangkok destination proxy from Suvarnabhumi and Don Mueang METAR and TAF weather-operability context.",
      "airport_count": 2,
      "supporting_station_ids": [
        "VTBS",
        "VTBD"
      ],
      "supporting_station_names": [
        "Bangkok/Suvarnabhumi Arpt, 20, TH",
        "Bangkok Intl, 10, TH"
      ],
      "source_names": [
        "NOAA Aviation Weather API"
      ],
      "observation_id": "aviationweather-airport-status_bangkok_airport_visibility_score",
      "parameter": "airport_visibility_score",
      "metric_label": "Airport visibility score",
      "value": 92,
      "unit": "score",
      "comparison_hint": "VTBS visibility is about 6.1 SM."
    },
    {
      "feed_id": "aviationweather-airport-status",
      "source_name": "NOAA Aviation Weather API",
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "freshness_class": "fresh",
      "quality_flag": "direct-source-match",
      "method": "aviationweather_metar_taf",
      "confidence": "high",
      "note": "Bangkok destination proxy from Suvarnabhumi and Don Mueang METAR and TAF weather-operability context.",
      "airport_count": 2,
      "supporting_station_ids": [
        "VTBS",
        "VTBD"
      ],
      "supporting_station_names": [
        "Bangkok/Suvarnabhumi Arpt, 20, TH",
        "Bangkok Intl, 10, TH"
      ],
      "source_names": [
        "NOAA Aviation Weather API"
      ],
      "observation_id": "aviationweather-airport-status_bangkok_airport_forecast_disruption_score",
      "parameter": "airport_forecast_disruption_score",
      "metric_label": "Airport forecast disruption score",
      "value": 30,
      "unit": "score",
      "comparison_hint": "VTBS forecast highlights thunderstorm wording, CB cloud type, low forecast visibility."
    },
    {
      "feed_id": "aviationweather-airport-status",
      "source_name": "NOAA Aviation Weather API",
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "freshness_class": "fresh",
      "quality_flag": "direct-source-match",
      "method": "aviationweather_metar_taf",
      "confidence": "high",
      "note": "Bangkok destination proxy from Suvarnabhumi and Don Mueang METAR and TAF weather-operability context.",
      "airport_count": 2,
      "supporting_station_ids": [
        "VTBS",
        "VTBD"
      ],
      "supporting_station_names": [
        "Bangkok/Suvarnabhumi Arpt, 20, TH",
        "Bangkok Intl, 10, TH"
      ],
      "source_names": [
        "NOAA Aviation Weather API"
      ],
      "observation_id": "aviationweather-airport-status_bangkok_airport_convective_forecast_flag",
      "parameter": "airport_convective_forecast_flag",
      "metric_label": "Airport convective forecast flag",
      "value": 1,
      "unit": "flag",
      "comparison_hint": "At least one mapped airport forecast includes thunderstorm or CB wording."
    },
    {
      "feed_id": "thaiwater-water-quality",
      "source_name": "Thaiwater WaterQuality API",
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "freshness_class": "fresh",
      "quality_flag": "proxy-derived",
      "method": "thaiwater_waterquality_latest",
      "confidence": "medium",
      "note": "Bangkok river and canal proxy from Thaiwater water-quality stations.",
      "station_count": 2,
      "supporting_station_names": [
        "Siriraj Hospital",
        "Dao Khanong"
      ],
      "supporting_provinces": [
        "Bangkok"
      ],
      "observation_id": "thaiwater-water-quality_bangkok_water_quality_status_score",
      "parameter": "water_quality_status_score",
      "metric_label": "Water quality status score",
      "value": 33,
      "unit": "score",
      "comparison_hint": "ปกติ"
    },
    {
      "feed_id": "thaiwater-water-quality",
      "source_name": "Thaiwater WaterQuality API",
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "freshness_class": "fresh",
      "quality_flag": "proxy-derived",
      "method": "thaiwater_waterquality_latest",
      "confidence": "medium",
      "note": "Bangkok river and canal proxy from Thaiwater water-quality stations.",
      "station_count": 2,
      "supporting_station_names": [
        "Siriraj Hospital",
        "Dao Khanong"
      ],
      "supporting_provinces": [
        "Bangkok"
      ],
      "observation_id": "thaiwater-water-quality_bangkok_water_dissolved_oxygen_average",
      "parameter": "water_dissolved_oxygen_average",
      "metric_label": "Average dissolved oxygen",
      "value": 0,
      "unit": "mg/L",
      "comparison_hint": "Average WQI 0.0"
    },
    {
      "feed_id": "thaiwater-water-quality",
      "source_name": "Thaiwater WaterQuality API",
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "freshness_class": "fresh",
      "quality_flag": "proxy-derived",
      "method": "thaiwater_waterquality_latest",
      "confidence": "medium",
      "note": "Bangkok river and canal proxy from Thaiwater water-quality stations.",
      "station_count": 2,
      "supporting_station_names": [
        "Siriraj Hospital",
        "Dao Khanong"
      ],
      "supporting_provinces": [
        "Bangkok"
      ],
      "observation_id": "thaiwater-water-quality_bangkok_water_quality_index_average",
      "parameter": "water_quality_index_average",
      "metric_label": "Average water quality index",
      "value": 0,
      "unit": "WQI"
    },
    {
      "feed_id": "namtang-transit-structure",
      "source_name": "Namtang GTFS",
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "freshness_class": "acceptable",
      "quality_flag": "direct-source-match",
      "method": "namtang_stop_structure",
      "confidence": "high",
      "note": "Bangkok transport structure from the Namtang public stop and station spine.",
      "observation_id": "namtang-transit-structure_bangkok_transport_structure_score",
      "parameter": "transport_structure_score",
      "metric_label": "Transport structure score",
      "value": 96,
      "unit": "score",
      "stop_count": 4687,
      "mode_count": 7,
      "rail_stop_count": 204,
      "boat_stop_count": 138,
      "bus_stop_count": 4345,
      "airport_link_stop_count": 14,
      "supporting_station_ids": [
        "N00000001",
        "N00000002",
        "N00000003",
        "N00000004",
        "N00000005",
        "N00000006",
        "N00000007",
        "N00000008"
      ],
      "supporting_station_names": [
        "BTS Bang Wa",
        "BTS Wutthakat",
        "BTS Talat Phlu",
        "BTS Pho Nimit",
        "BTS Wongwian Yai",
        "BTS Krung Thon Buri",
        "BTS Saphan Taksin",
        "BTS Surasak"
      ],
      "source_names": [
        "Namtang GTFS"
      ],
      "comparison_hint": "7 mode group(s): bts, boat, brt, train, airport_link, mrt, bus."
    },
    {
      "feed_id": "bangkok-rapid-transit-official-pages",
      "source_name": "BTS SkyTrain system maps and service pages",
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "observed_at": "2026-05-15T11:11:29.575Z",
      "freshness_class": "stale",
      "quality_flag": "direct-source-match",
      "method": "bts_mrta_public_route_pages_snapshot",
      "confidence": "high",
      "note": "Official BTS and MRTA route-map and service pages confirm Bangkok's strongest rapid-transit city base at the destination level.",
      "observation_id": "bangkok-rapid-transit-official-pages_bangkok_official_rapid_transit_support_score",
      "parameter": "official_rapid_transit_support_score",
      "metric_label": "Official rapid-transit support score",
      "value": 98,
      "unit": "score",
      "official_support_source_count": 2,
      "bts_feature_count": 6,
      "mrta_feature_count": 8,
      "official_line_names": [
        "Blue Line",
        "Purple Line",
        "Yellow Line",
        "Pink Line"
      ],
      "bts_title": "Route and Fares",
      "mrta_title": "MRT Route | Mass Rapid Transit Authority of Thailand",
      "bts_url": "https://www.bts.co.th/eng/routemap-mb/index.html",
      "mrta_url": "https://www.mrta.co.th/en/mrt-route",
      "bts_route_fares_flag": 1,
      "bts_origin_destination_search_flag": 1,
      "bts_download_map_flag": 1,
      "bts_station_area_map_flag": 1,
      "bts_service_facilities_flag": 1,
      "bts_train_time_flag": 1,
      "mrta_route_flag": 1,
      "mrta_blue_line_flag": 1,
      "mrta_purple_line_flag": 1,
      "mrta_yellow_line_flag": 1,
      "mrta_pink_line_flag": 1,
      "mrta_ticket_info_flag": 1,
      "mrta_parking_services_flag": 1,
      "mrta_bangkok_project_flag": 1,
      "comparison_hint": "2 official rapid-transit page(s), 6 BTS support feature(s), 8 MRTA support feature(s), and 4 named MRT line(s) in the latest snapshot.",
      "source_names": [
        "BTS SkyTrain system maps and service pages",
        "MRT / MRTA metro maps and service pages"
      ]
    },
    {
      "feed_id": "mot-bus-terminal-support",
      "source_name": "MOT passenger bus terminals dataset",
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "freshness_class": "fresh",
      "quality_flag": "direct-source-match",
      "method": "mot_bus_terminal_master_csv",
      "confidence": "high",
      "note": "Official MOT terminal-master matches confirm Bangkok as Thailand's main overland bus-transfer anchor.",
      "observation_id": "mot-bus-terminal-support_bangkok_official_bus_terminal_support_score",
      "parameter": "official_bus_terminal_support_score",
      "metric_label": "Official bus-terminal support score",
      "value": 86,
      "unit": "score",
      "official_terminal_match_count": 3,
      "official_terminal_unique_count": 3,
      "official_terminal_names": [
        "SOUTHERN BUS TERMINAL, BOROMMARATCHACHONNANI RD.",
        "NORTHERN AND NORTHEASTERN BUS TERMINAL (MO CHIT 2 BUS TERMINAL)",
        "BANGKOK BUS TERMINAL (EKAMAI)"
      ],
      "official_owner_names": [
        "บจก.ขนส่ง"
      ],
      "official_terminal_ids": [
        "28",
        "29",
        "37"
      ],
      "supporting_station_names": [
        "SOUTHERN BUS TERMINAL, BOROMMARATCHACHONNANI RD.",
        "NORTHERN AND NORTHEASTERN BUS TERMINAL (MO CHIT 2 BUS TERMINAL)",
        "BANGKOK BUS TERMINAL (EKAMAI)"
      ],
      "source_names": [
        "MOT passenger bus terminals dataset"
      ],
      "comparison_hint": "3 official terminal match(es): SOUTHERN BUS TERMINAL, BOROMMARATCHACHONNANI RD., NORTHERN AND NORTHEASTERN BUS TERMINAL (MO CHIT 2 BUS TERMINAL), BANGKOK BUS TERMINAL (EKAMAI)."
    },
    {
      "feed_id": "bks-station-ticket-support",
      "source_name": "Transport Co. / BKS station and ticket-point locations",
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "observed_at": "2026-05-15T11:11:43.824Z",
      "freshness_class": "stale",
      "quality_flag": "direct-source-match",
      "method": "bks_station_ticket_support_snapshot",
      "confidence": "high",
      "note": "Official BKS station and ticket-point rows confirm Bangkok as the main intercity-bus anchor, not just a generic metro node.",
      "observation_id": "bks-station-ticket-support_bangkok_official_intercity_bus_support_score",
      "parameter": "official_intercity_bus_support_score",
      "metric_label": "Official intercity-bus support score",
      "value": 92,
      "unit": "score",
      "official_bks_match_count": 7,
      "official_bks_unique_count": 7,
      "official_bks_station_names": [
        "สถานีขนส่งผู้โดยสารกรุงเทพ (จตุจักร)/สำนักงานใหญ่",
        "สถานีบริการขนส่งสาธารณะขนาดเล็ก",
        "สถานีขนส่งผู้โดยสารกรุงเทพ (เอกมัย)",
        "สถานีขนส่งผู้โดยสารกรุงเทพ (สายใต้บรมราชชนนี)",
        "งานบริการน้ำมัน (สายใต้ปิ่นเกล้า)",
        "จุดจำหน่ายค่าธรรมเนียม สถานีขนส่งผู้โดยสารกรุงเทพ (สายใต้ปิ่นเกล้า)",
        "สถานีเดินรถกำแพงเพชร"
      ],
      "official_bks_type_labels": [
        "สถานีเดินรถ",
        "ที่ทำการ",
        "ที่ทำการ/จุดจำหน่ายตั๋ว"
      ],
      "official_bks_type_count": 3,
      "supporting_station_names": [
        "สถานีขนส่งผู้โดยสารกรุงเทพ (จตุจักร)/สำนักงานใหญ่",
        "สถานีบริการขนส่งสาธารณะขนาดเล็ก",
        "สถานีขนส่งผู้โดยสารกรุงเทพ (เอกมัย)",
        "สถานีขนส่งผู้โดยสารกรุงเทพ (สายใต้บรมราชชนนี)",
        "งานบริการน้ำมัน (สายใต้ปิ่นเกล้า)",
        "จุดจำหน่ายค่าธรรมเนียม สถานีขนส่งผู้โดยสารกรุงเทพ (สายใต้ปิ่นเกล้า)",
        "สถานีเดินรถกำแพงเพชร"
      ],
      "source_names": [
        "Transport Co. / BKS station and ticket-point locations"
      ],
      "comparison_hint": "7 official BKS station or ticket-point match(es): สถานีขนส่งผู้โดยสารกรุงเทพ (จตุจักร)/สำนักงานใหญ่, สถานีบริการขนส่งสาธารณะขนาดเล็ก, สถานีขนส่งผู้โดยสารกรุงเทพ (เอกมัย), สถานีขนส่งผู้โดยสารกรุงเทพ (สายใต้บรมราชชนนี), งานบริการน้ำมัน (สายใต้ปิ่นเกล้า)."
    },
    {
      "feed_id": "bks-timetable-search-surface",
      "source_name": "Transport Co. / BKS timetable resources",
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "observed_at": "2026-05-15T11:11:48Z",
      "freshness_class": "stale",
      "quality_flag": "direct-source-match",
      "method": "bks_timetable_search_surface_snapshot",
      "confidence": "high",
      "note": "Official BKS public booking/search surfaces show Bangkok as the main intercity-bus route-search origin.",
      "observation_id": "bks-timetable-search-surface_bangkok_official_intercity_bus_search_support_score",
      "parameter": "official_intercity_bus_search_support_score",
      "metric_label": "Official intercity-bus search support score",
      "value": 96,
      "unit": "score",
      "official_search_origin_ids": [
        "1223",
        "1806"
      ],
      "official_search_origin_names": [
        "BKK",
        "BKK (EKKAMAI)"
      ],
      "official_search_destination_count": 617,
      "official_search_province_count": 80,
      "official_search_destination_names": [
        "Krabi",
        "Khlongthom",
        "Ko Lanta",
        "Khaophanom",
        "Nueakhlong",
        "BKK (EKKAMAI)",
        "Rangsit",
        "จุดจอดสายใต้(รถต้นทางหมอชิต)",
        "DONMUANG INTERNATIONAL AIRPORT",
        "SUVARNABHUMI AIRPORT"
      ],
      "official_search_province_names": [
        "AMNAT CHAROEN",
        "ANG THONG",
        "AYUTTHAYA",
        "BANGKOK",
        "BUENG KAN",
        "BURI RAM",
        "CHACHOENGSAO",
        "CHAI NAT",
        "CHAIYAPHUM",
        "CHANTHABURI",
        "CHIANG MAI",
        "CHIANG RAI",
        "CHON BURI",
        "CHUMPHON",
        "KALASIN",
        "KAMPHAENG PHET",
        "KANCHANABURI",
        "KHON KAEN",
        "KRABI",
        "LAMPANG"
      ],
      "source_names": [
        "Transport Co. / BKS timetable resources"
      ],
      "comparison_hint": "617 official destination option row(s) currently appear across 2 Bangkok-origin BKS search surface(s)."
    },
    {
      "feed_id": "dlt-1584-complaint-stats",
      "source_name": "DLT 1584 public-transport complaints",
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "observed_at": "2026-05-15T11:11:30.831Z",
      "freshness_class": "stale",
      "quality_flag": "direct-source-match",
      "method": "dlt_1584_public_complaint_workbooks_snapshot",
      "confidence": "high",
      "note": "Bangkok gets broad official public-transport complaint recourse from the DLT 1584 central workbook across taxi, motorcycle-taxi, BMTA, van, and joint-service layers.",
      "observation_id": "dlt-1584-complaint-stats_bangkok_official_transport_complaint_support_score",
      "parameter": "official_transport_complaint_support_score",
      "metric_label": "Official transport complaint support score",
      "value": 94,
      "unit": "score",
      "complaint_fiscal_year": "2569",
      "complaint_scope_profile": "bangkok-urban",
      "complaint_section_key": "central",
      "complaint_active_month_count": 7,
      "complaint_active_month_labels": [
        "ต.ค. 2568",
        "พ.ย. 2568",
        "ธ.ค. 2568",
        "ม.ค. 2569",
        "ก.พ. 2569",
        "มี.ค. 2569",
        "เม.ย. 2569"
      ],
      "complaint_total_ytd": 46119,
      "complaint_monthly_average": 6588.4,
      "complaint_mode_coverage_count": 11,
      "complaint_vehicle_mode_count": 4,
      "complaint_transport_mode_count": 7,
      "complaint_highlight_modes": [
        "รถแท็กซี่",
        "รถสามล้อรับจ้าง",
        "รถสี่ล้อเล็กรับจ้าง",
        "รถจักรยานยนต์รับจ้าง",
        "ขสมก.",
        "รถร่วมบริการ(ธรรมดา)",
        "รถร่วมบริการ(ปรับอากาศ)",
        "รถมินิบัส"
      ],
      "complaint_top_reason_labels": [
        "แสดงกิริยาวาจาไม่สุภาพ",
        "ขับรถประมาทน่าหวาดเสียว",
        "ปฏิเสธไม่รับผู้โดยสาร",
        "ไม่หยุดรับ-ส่งผู้โดยสารที่ป้าย",
        "พขร.,พกส. แสดงกิริยาวาจาไม่สุภาพ"
      ],
      "complaint_dataset_ids": {
        "complaint_type": "199",
        "vehicle_type": "198"
      },
      "supporting_station_names": [
        "รถแท็กซี่",
        "รถสามล้อรับจ้าง",
        "รถสี่ล้อเล็กรับจ้าง",
        "รถจักรยานยนต์รับจ้าง",
        "ขสมก.",
        "รถร่วมบริการ(ธรรมดา)"
      ],
      "source_names": [
        "DLT 1584 public-transport complaints"
      ],
      "comparison_hint": "central FY 2569 workbook coverage shows 11 relevant mode(s), 7 active month(s), and about 6588 complaint rows/month across the matched legal sections."
    },
    {
      "feed_id": "dlt-gps-taxi-support",
      "source_name": "DLT GPS passenger and complaint app",
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "observed_at": "2026-05-15T11:11:32.530Z",
      "freshness_class": "stale",
      "quality_flag": "direct-source-match",
      "method": "dlt_gps_taxi_support_snapshot",
      "confidence": "high",
      "note": "Bangkok gets official regulated-taxi oversight support from the public DLT GPS passenger app and Taxi OK / Taxi VIP rules, which matters for street-hail, hotel-base, and airport-transfer planning.",
      "observation_id": "dlt-gps-taxi-support_bangkok_official_taxi_oversight_support_score",
      "parameter": "official_taxi_oversight_support_score",
      "metric_label": "Official taxi-oversight support score",
      "value": 96,
      "unit": "score",
      "taxi_oversight_scope_profile": "bangkok-core",
      "taxi_public_feature_count": 7,
      "taxi_public_features": [
        "registered vehicle locator",
        "complaint reporting",
        "passenger-station search",
        "improved search and tracking",
        "improved map display",
        "Android app page",
        "Apple app page"
      ],
      "taxi_platform_count": 2,
      "taxi_regulatory_marker_count": 9,
      "taxi_regulatory_markers": [
        "project workflow",
        "taxi communication-center rules",
        "driver-history rules",
        "trip-recorder rules",
        "safety-equipment rules",
        "licensing forms",
        "registration rules",
        "taxi-meter fare rules",
        "vehicle-marking rules"
      ],
      "taxi_ok_download_count": 13,
      "taxi_ok_download_titles": [
        "กระบวนการดำเนินงานโครงการแท็กซี่โอเค",
        "ประกาศกรมการขนส่งทางบก กำหนดหลักเกณฑ์ วิธีการและเงื่อนไขการให้ความเห็นชอบ การจัดตั้งศูนย์บริการสื่อสารรถยนต์รับจ้าง (แท๊กซี่)-2560",
        "ประกาศกรมการขนส่งทางบก เรื่อง การจัดทำประวัติผู้ขับขี่รถยนต์รับจ้างบรรทุกคนโดยสารแบบพิเศษ พ.ศ. ๒๕๖๐",
        "ประกาศกรมการขนส่งทางบก เรื่อง กำหนดคุณลักษณะ ระบบการทำงาน การติดตั้ง และการรับรองเครื่องบันทึกข้อมูลการเดินทางสำหรับรถยนต์รับจ้าง พ.ศ. ๒๕๖๐",
        "ประกาศกรมการขนส่งทางบก เรื่อง กำหนดคุณลักษณะ ระบบการทำงาน และการติดตั้งอุปกรณ์ เพื่อความปลอดภัยสำหรับรถยนต์รับจ้าง พ.ศ. ๒๕๖๐",
        "ประกาศกรมการขนส่งทางบก เรื่อง กำหนดแบบคำขอรับใบอนุญาต คำขอต่ออายุใบอนุญาต แบบใบอนุญาต และเงื่อนไขอื่นสำหรับการประกอบการรับจ้างบรรทุกคนโดยสารแบบพิเศษ พ.ศ. ๒๕๖๐",
        "ประกาศกรมการขนส่งทางบก เรื่อง กำหนดแบบลักษณะ ขนาด การติดตั้งและเงื่อนไขการใช้เครื่องหมายสำหรับรถยนต์รับจ้างบรรทุกคนโดยสารแบบพิเศษ พ.ศ. ๒๕๖๐",
        "ประกาศกรมการขนส่งทางบก เรื่อง กำหนดแบบลักษณะ ขนาด การติดตั้งและเงื่อนไขการใช้เครื่องหมายสำหรับรถยนต์รับจ้างบรรทุกคนโดยสารไม่เกินเจ็ดคน พ.ศ. ๒๕๖๐",
        "ประกาศกรมการขนส่งทางบก เรื่อง กำหนดรายละเอียดการประกอบการรับจ้างบรรทุกคนโดยสารแบบพิเศษ",
        "ประกาศกรมการขนส่งทางบก เรื่อง หลักเกณฑ์และวิธีการวัดกำลังของเครื่องยนต์หรือมอเตอร์ไฟฟ้าสำหรับรถยนต์รับจ้าง พ.ศ. ๒๕๖๐"
      ],
      "source_names": [
        "DLT GPS passenger and complaint app",
        "DLT Taxi OK / Taxi VIP project"
      ],
      "supporting_station_names": [
        "registered vehicle locator",
        "complaint reporting",
        "passenger-station search",
        "improved search and tracking",
        "improved map display",
        "Android app page",
        "Apple app page",
        "project workflow"
      ],
      "comparison_hint": "7 public passenger-support marker(s) and 9 Taxi OK / VIP regulatory marker(s) are visible, with 13 public notice download(s)."
    },
    {
      "feed_id": "bangkok-motorcycle-taxi-support",
      "source_name": "Bangkok motorcycle taxi stands and drivers",
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "observed_at": "2020-07-23T04:25:48.450Z",
      "freshness_class": "stale",
      "quality_flag": "proxy-derived",
      "method": "dlt_bangkok_motorcycle_taxi_datastore",
      "confidence": "medium",
      "note": "Bangkok gets citywide official motorcycle-taxi stand and driver supply context from the public DLT/data.go.th dataset. This is useful as last-mile support coverage, not live availability.",
      "observation_id": "bangkok-motorcycle-taxi-support_bangkok_official_motorcycle_taxi_support_score",
      "parameter": "official_motorcycle_taxi_support_score",
      "metric_label": "Official motorcycle-taxi support score",
      "value": 88,
      "unit": "score",
      "motorcycle_taxi_scope_mode": "city-total",
      "motorcycle_taxi_district_count": 50,
      "motorcycle_taxi_district_names": [
        "บางกะปิ",
        "บางเขน",
        "บางรัก",
        "ดุสิต",
        "ห้วยขวาง",
        "ปทุมวัน",
        "พญาไท",
        "ป้อมปราบศัตรูพ่าย",
        "สัมพันธวงศ์",
        "จตุจักร",
        "ดอนเมือง",
        "ลาดพร้าว",
        "บางซื่อ",
        "ราชเทวี",
        "ดินแดง",
        "หลักสี่",
        "สายไหม",
        "วังทองหลาง",
        "บางขุนเทียน",
        "คลองสาน",
        "ราษฎร์บูรณะ",
        "ธนบุรี",
        "ยานนาวา",
        "บางคอแหลม",
        "จอมทอง",
        "สาทร",
        "ทุ่งครุ",
        "บางบอน",
        "พระนคร",
        "บางกอกน้อย",
        "บางกอกใหญ่",
        "หนองแขม",
        "ภาษีเจริญ",
        "ตลิ่งชัน",
        "บางพลัด",
        "ทวีวัฒนา",
        "บางแค",
        "พระโขนง",
        "ประเวศ",
        "คลองเตย",
        "สวนหลวง",
        "วัฒนา",
        "บางนา",
        "ลาดกระบัง",
        "มีนบุรี",
        "หนองจอก",
        "บึงกุ่ม",
        "คลองสามวา",
        "คันนายาว",
        "สะพานสูง"
      ],
      "motorcycle_taxi_win_count": 5800,
      "motorcycle_taxi_driver_count": 87179,
      "motorcycle_taxi_drivers_per_win": 15.03,
      "motorcycle_taxi_dataset_year": "",
      "motorcycle_taxi_resource_id": "01ec2de9-e2c1-485e-8078-b15211fc528c",
      "supporting_station_names": [
        "บางกะปิ",
        "บางเขน",
        "บางรัก",
        "ดุสิต",
        "ห้วยขวาง",
        "ปทุมวัน"
      ],
      "source_names": [
        "Bangkok motorcycle taxi stands and drivers"
      ],
      "comparison_hint": "Citywide official motorcycle-taxi coverage shows 5800 stand(s) and 87179 registered driver(s)."
    },
    {
      "feed_id": "otp-taxi-demand-analytics",
      "source_name": "OTP taxi GPS trip analytics",
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "observed_at": "2026-05-15T11:11:35.449Z",
      "freshness_class": "stale",
      "quality_flag": "proxy-derived",
      "method": "otp_taxi_monthly_analytics_snapshot",
      "confidence": "medium-high",
      "note": "Bangkok uses the latest public OTP monthly taxi GPS analytics and hotspot rankings as aggregate citywide taxi-demand context, not live dispatch or raw trip truth.",
      "observation_id": "otp-taxi-demand-analytics_bangkok_taxi_pickup_dropoff_support_score",
      "parameter": "taxi_pickup_dropoff_support_score",
      "metric_label": "Taxi pickup and dropoff support score",
      "value": 92,
      "unit": "score",
      "taxi_scope_profile": "city-total",
      "taxi_hotspot_count": 475,
      "taxi_district_count": 47,
      "taxi_district_names": [
        "เขตจตุจักร",
        "เขตบางกอกน้อย",
        "เขตบางกะปิ",
        "เขตดอนเมือง",
        "เขตบางแค",
        "เขตราชเทวี",
        "เขตคันนายาว",
        "เขตดุสิต",
        "เขตตลิ่งชัน",
        "เขตยานนาวา",
        "เขตภาษีเจริญ",
        "เขตพระนคร",
        "เขตบางขุนเทียน",
        "เขตบางคอแหลม",
        "เขตธนบุรี",
        "เขตบางนา",
        "เขตสายไหม",
        "เขตบางพลัด",
        "เขตคลองสาน",
        "เขตมีนบุรี",
        "เขตบางเขน",
        "เขตวังทองหลาง",
        "เขตคลองเตย",
        "เขตปทุมวัน",
        "เขตประเวศ",
        "เขตสวนหลวง",
        "เขตป้อมปราบศัตรูพ่าย",
        "เขตบางซื่อ",
        "เขตห้วยขวาง",
        "เขตหลักสี่",
        "เขตดินแดง",
        "เขตจอมทอง",
        "เขตบางรัก",
        "เขตทวีวัฒนา",
        "เขตบางบอน",
        "เขตบางกอกใหญ่",
        "เขตลาดกระบัง",
        "เขตลาดพร้าว",
        "เขตคลองสามวา",
        "เขตราษฎร์บูรณะ",
        "เขตสัมพันธวงศ์",
        "เขตพญาไท",
        "เขตบึงกุ่ม",
        "เขตสาทร",
        "เขตหนองแขม",
        "เขตวัฒนา",
        "เขตหนองจอก"
      ],
      "taxi_total_activity": 9243,
      "taxi_pickup_total": 5387,
      "taxi_dropoff_total": 3856,
      "taxi_average_stop_volume": 19.5,
      "taxi_top_stop_volume": 366,
      "taxi_top_stop_names": [
        "อู่หมอชิต 2",
        "เซ็นทรัลปิ่นเกล้า",
        "เอ็นมาร์คพลาซ่า(น้อมจิตต์)",
        "อาคารผู้โดยสาร ชั้น 3",
        "อาคารผู้โดยสาร 1 ชั้น 1 ประตู 6",
        "ตรงข้ามเซ็นทรัลลาดพร้าว",
        "นครชัยแอร์",
        "แฟชั่นไอส์แลนด์"
      ],
      "taxi_top_stop_totals": [
        366,
        221,
        187,
        163,
        133,
        127,
        96,
        92
      ],
      "taxi_keyword_hit_count": 0,
      "taxi_trip_latest_year": "2569",
      "taxi_trip_latest_month": "มีนาคม",
      "taxi_trip_total_taxis_per_day": 1170,
      "taxi_trip_total_passenger_trips": 84522,
      "taxi_trip_avg_trips_per_day": 10565,
      "taxi_trip_avg_trips_per_taxi": 9,
      "taxi_trip_avg_speed": 30.5,
      "taxi_trip_recent_average": 173292.7,
      "taxi_trip_recent_ratio": 0.49,
      "supporting_station_names": [
        "อู่หมอชิต 2",
        "เซ็นทรัลปิ่นเกล้า",
        "เอ็นมาร์คพลาซ่า(น้อมจิตต์)",
        "อาคารผู้โดยสาร ชั้น 3",
        "อาคารผู้โดยสาร 1 ชั้น 1 ประตู 6",
        "ตรงข้ามเซ็นทรัลลาดพร้าว",
        "นครชัยแอร์",
        "แฟชั่นไอส์แลนด์"
      ],
      "source_names": [
        "OTP taxi GPS trip analytics",
        "OTP top taxi pickup and dropoff areas"
      ],
      "comparison_hint": "475 ranked hotspot row(s) currently match this scope in มีนาคม 2569, with top stops such as อู่หมอชิต 2, เซ็นทรัลปิ่นเกล้า, เอ็นมาร์คพลาซ่า(น้อมจิตต์) and about 84522 citywide passenger trips in the latest published OTP month."
    },
    {
      "feed_id": "thai-smile-group-branch-locator",
      "source_name": "Thai Smile Group branch and depot locator",
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "freshness_class": "fresh",
      "quality_flag": "proxy-derived",
      "method": "thai_smile_group_locator_json",
      "confidence": "medium-high",
      "note": "Public Thai Smile Group branch and depot coverage confirms a meaningful urban bus operator footprint across Bangkok and its nearby metro support zones.",
      "observation_id": "thai-smile-group-branch-locator_bangkok_urban_bus_operator_support_score",
      "parameter": "urban_bus_operator_support_score",
      "metric_label": "Urban bus-operator support score",
      "value": 88,
      "unit": "score",
      "operator_location_match_count": 18,
      "operator_location_unique_count": 18,
      "operator_location_names": [
        "สำนักงานใหญ่",
        "อู่ตลิ่งชัน",
        "อู่ท่าอิฐ",
        "อู่บึงกุ่ม",
        "อู่ปากน้ำ",
        "อู่ปากเกร็ด",
        "อู่พระประแดง",
        "อู่พรานนก",
        "อู่พุทธบูชา",
        "อู่พุทธมณฑลสาย 2"
      ],
      "operator_location_ids": [
        "28",
        "39",
        "43",
        "40",
        "48",
        "46",
        "31",
        "32",
        "50",
        "36"
      ],
      "operator_cities": [
        "สำเหร่",
        "กรุงเทพมหานคร",
        "นนทบุรี",
        "สมุทรปราการ",
        "นครปฐม"
      ],
      "supporting_station_names": [
        "สำนักงานใหญ่",
        "อู่ตลิ่งชัน",
        "อู่ท่าอิฐ",
        "อู่บึงกุ่ม",
        "อู่ปากน้ำ",
        "อู่ปากเกร็ด",
        "อู่พระประแดง",
        "อู่พรานนก"
      ],
      "source_names": [
        "Thai Smile Group branch and depot locator"
      ],
      "comparison_hint": "18 nearby operator branch or depot match(es): สำนักงานใหญ่, อู่ตลิ่งชัน, อู่ท่าอิฐ, อู่บึงกุ่ม, อู่ปากน้ำ."
    },
    {
      "feed_id": "exat-expressway-support",
      "source_name": "EXAT Traffic Surface",
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "observed_at": "2026-05-15T11:11:30.132Z",
      "freshness_class": "stale",
      "quality_flag": "direct-source-match",
      "method": "exat_support_surface_snapshot",
      "confidence": "high",
      "note": "Bangkok gets DOH camera-region support and official EXAT expressway support context behind road-friction decisions. EXAT adds expressway, toll, maintenance, and motorist-support context for Bangkok-linked road moves.",
      "observation_id": "exat-expressway-support_bangkok_exat_expressway_support_score",
      "parameter": "exat_expressway_support_score",
      "metric_label": "EXAT expressway support score",
      "value": 88,
      "unit": "score",
      "road_corridors": [
        "Bangkok urban transfer spine",
        "Bangkok -> Pattaya / Eastern Seaboard",
        "Bangkok -> Hua Hin / southbound coast",
        "Bangkok -> Ayutthaya / central northbound",
        "Bangkok -> Kanchanaburi / westbound nature loop"
      ],
      "exat_active_page_count": 5,
      "exat_feature_marker_count": 15,
      "exat_page_keys": [
        "map",
        "toll_rates",
        "maintenance",
        "motorists",
        "call_center"
      ],
      "source_names": [
        "EXAT Traffic Surface",
        "EXAT Data Catalog"
      ],
      "comparison_hint": "5 official EXAT support page(s) currently expose 15 matched expressway, toll, maintenance, or motorist-support marker(s)."
    },
    {
      "feed_id": "hss-spa-license-support",
      "source_name": "HSS Health Establishment Directory",
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "observed_at": "2026-05-15T11:11:35.580Z",
      "freshness_class": "stale",
      "quality_flag": "direct-source-match",
      "method": "hss_spa_support_snapshot",
      "confidence": "high",
      "note": "Bangkok uses public HSS license-lookup and spa-premium surfaces as wellness-license confidence behind spa and massage planning.",
      "observation_id": "hss-spa-license-support_bangkok_spa_license_support_score",
      "parameter": "spa_license_support_score",
      "metric_label": "Spa license support score",
      "value": 96,
      "unit": "score",
      "hss_active_page_count": 2,
      "hss_feature_marker_count": 4,
      "hss_page_keys": [
        "directory",
        "premium"
      ],
      "source_names": [
        "HSS Health Establishment Directory",
        "HSS Spa Premium"
      ],
      "comparison_hint": "2 public HSS support page(s) currently expose 4 spa, massage, or health-establishment marker(s) behind this wellness-planning anchor."
    },
    {
      "feed_id": "moph-health-facility-support",
      "source_name": "MOPH Health Facility Datasets",
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "observed_at": "2026-05-15T11:11:37.864Z",
      "freshness_class": "stale",
      "quality_flag": "direct-source-match",
      "method": "moph_health_facility_support_snapshot",
      "confidence": "high",
      "note": "Bangkok uses public MOPH facility surfaces as strong medical-fallback context for travel decisions.",
      "observation_id": "moph-health-facility-support_bangkok_medical_fallback_support_score",
      "parameter": "medical_fallback_support_score",
      "metric_label": "Medical fallback support score",
      "value": 96,
      "unit": "score",
      "moph_active_page_count": 2,
      "moph_feature_marker_count": 4,
      "moph_dataset_link_count": 61,
      "moph_page_keys": [
        "hospital_dataset",
        "hs4_directory"
      ],
      "source_names": [
        "MOPH Health Facility Datasets"
      ],
      "comparison_hint": "2 public MOPH / HS4 support page(s) currently expose 4 hospital or facility marker(s) and 61 dataset/resource marker(s) behind this fallback-planning anchor."
    },
    {
      "feed_id": "gta-gold-reference-price",
      "source_name": "Gold Traders Association Thailand gold prices",
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "observed_at": "2026-06-24T02:05:00.000Z",
      "freshness_class": "fresh",
      "quality_flag": "direct-source-match",
      "method": "gta_latest_price_json",
      "confidence": "high",
      "note": "Bangkok uses the national Gold Traders Association quote as a direct Thai gold buying-context anchor, with Yaowarat as the strongest public comparison-shopping district.",
      "source_names": [
        "Gold Traders Association Thailand gold prices"
      ],
      "city_context": "Bangkok / Yaowarat",
      "observation_id": "gta-gold-reference-price_bangkok_gold_bar_965_buy_baht_weight",
      "parameter": "gold_bar_965_buy_baht_weight",
      "metric_label": "96.5% gold bar buy price",
      "value": 64400,
      "unit": "THB per 1 baht-weight",
      "comparison_hint": "National GTA 96.5% gold-bar buy quote for Bangkok / Yaowarat. This is a shared Thai reference, not a separate local city price."
    },
    {
      "feed_id": "gta-gold-reference-price",
      "source_name": "Gold Traders Association Thailand gold prices",
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "observed_at": "2026-06-24T02:05:00.000Z",
      "freshness_class": "fresh",
      "quality_flag": "direct-source-match",
      "method": "gta_latest_price_json",
      "confidence": "high",
      "note": "Bangkok uses the national Gold Traders Association quote as a direct Thai gold buying-context anchor, with Yaowarat as the strongest public comparison-shopping district.",
      "source_names": [
        "Gold Traders Association Thailand gold prices"
      ],
      "city_context": "Bangkok / Yaowarat",
      "observation_id": "gta-gold-reference-price_bangkok_gold_bar_965_sell_baht_weight",
      "parameter": "gold_bar_965_sell_baht_weight",
      "metric_label": "96.5% gold bar sell price",
      "value": 64600,
      "unit": "THB per 1 baht-weight",
      "comparison_hint": "National GTA 96.5% gold-bar sell quote for Bangkok / Yaowarat. This is a shared Thai reference, not a separate local city price."
    },
    {
      "feed_id": "gta-gold-reference-price",
      "source_name": "Gold Traders Association Thailand gold prices",
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "observed_at": "2026-06-24T02:05:00.000Z",
      "freshness_class": "fresh",
      "quality_flag": "direct-source-match",
      "method": "gta_latest_price_json",
      "confidence": "high",
      "note": "Bangkok uses the national Gold Traders Association quote as a direct Thai gold buying-context anchor, with Yaowarat as the strongest public comparison-shopping district.",
      "source_names": [
        "Gold Traders Association Thailand gold prices"
      ],
      "city_context": "Bangkok / Yaowarat",
      "observation_id": "gta-gold-reference-price_bangkok_gold_ornament_965_base_baht_weight",
      "parameter": "gold_ornament_965_base_baht_weight",
      "metric_label": "96.5% ornament base price",
      "value": 63111.08,
      "unit": "THB per 1 baht-weight",
      "comparison_hint": "GTA ornament-side base or tax-base context. Local shop workmanship, spread, and buyback terms can still differ."
    },
    {
      "feed_id": "gta-gold-reference-price",
      "source_name": "Gold Traders Association Thailand gold prices",
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "observed_at": "2026-06-24T02:05:00.000Z",
      "freshness_class": "fresh",
      "quality_flag": "direct-source-match",
      "method": "gta_latest_price_json",
      "confidence": "high",
      "note": "Bangkok uses the national Gold Traders Association quote as a direct Thai gold buying-context anchor, with Yaowarat as the strongest public comparison-shopping district.",
      "source_names": [
        "Gold Traders Association Thailand gold prices"
      ],
      "city_context": "Bangkok / Yaowarat",
      "observation_id": "gta-gold-reference-price_bangkok_gold_ornament_965_sell_baht_weight",
      "parameter": "gold_ornament_965_sell_baht_weight",
      "metric_label": "96.5% ornament sell price",
      "value": 65400,
      "unit": "THB per 1 baht-weight",
      "comparison_hint": "National GTA ornament sell quote. Local workmanship or premium still changes the final shop price."
    },
    {
      "feed_id": "gta-gold-reference-price",
      "source_name": "Gold Traders Association Thailand gold prices",
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "observed_at": "2026-06-24T02:05:00.000Z",
      "freshness_class": "fresh",
      "quality_flag": "direct-source-match",
      "method": "gta_latest_price_json",
      "confidence": "high",
      "note": "Bangkok uses the national Gold Traders Association quote as a direct Thai gold buying-context anchor, with Yaowarat as the strongest public comparison-shopping district.",
      "source_names": [
        "Gold Traders Association Thailand gold prices"
      ],
      "city_context": "Bangkok / Yaowarat",
      "observation_id": "gta-gold-reference-price_bangkok_usd_thb_reference",
      "parameter": "usd_thb_reference",
      "metric_label": "USD / THB reference",
      "value": 33.37,
      "unit": "THB per USD",
      "comparison_hint": "FX context published alongside the GTA domestic quote. Use it as context, not as a separate local shop price."
    },
    {
      "feed_id": "gta-gold-reference-price",
      "source_name": "Gold Traders Association Thailand gold prices",
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "observed_at": "2026-06-24T02:05:00.000Z",
      "freshness_class": "fresh",
      "quality_flag": "direct-source-match",
      "method": "gta_latest_price_json",
      "confidence": "high",
      "note": "Bangkok uses the national Gold Traders Association quote as a direct Thai gold buying-context anchor, with Yaowarat as the strongest public comparison-shopping district.",
      "source_names": [
        "Gold Traders Association Thailand gold prices"
      ],
      "city_context": "Bangkok / Yaowarat",
      "observation_id": "gta-gold-reference-price_bangkok_gold_spot_reference",
      "parameter": "gold_spot_reference",
      "metric_label": "GTA spot reference",
      "value": 4088,
      "unit": "GTA reference value",
      "comparison_hint": "Secondary GTA reference field carried as published. Do not treat it as the primary Thai retail quote."
    },
    {
      "feed_id": "gta-gold-reference-price",
      "source_name": "Gold Traders Association Thailand gold prices",
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "observed_at": "2026-06-24T02:05:00.000Z",
      "freshness_class": "fresh",
      "quality_flag": "direct-source-match",
      "method": "gta_latest_price_json",
      "confidence": "high",
      "note": "Bangkok uses the national Gold Traders Association quote as a direct Thai gold buying-context anchor, with Yaowarat as the strongest public comparison-shopping district.",
      "source_names": [
        "Gold Traders Association Thailand gold prices"
      ],
      "city_context": "Bangkok / Yaowarat",
      "observation_id": "gta-gold-reference-price_bangkok_gold_price_change_intraday",
      "parameter": "gold_price_change_intraday",
      "metric_label": "Intraday gold-price change",
      "value": -200,
      "unit": "THB per 1 baht-weight",
      "comparison_hint": "Published change from the previous GTA row during the current Thai market session."
    },
    {
      "feed_id": "gta-gold-reference-price",
      "source_name": "Gold Traders Association Thailand gold prices",
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "observed_at": "2026-06-24T02:05:00.000Z",
      "freshness_class": "fresh",
      "quality_flag": "direct-source-match",
      "method": "gta_latest_price_json",
      "confidence": "high",
      "note": "Bangkok uses the national Gold Traders Association quote as a direct Thai gold buying-context anchor, with Yaowarat as the strongest public comparison-shopping district.",
      "source_names": [
        "Gold Traders Association Thailand gold prices"
      ],
      "city_context": "Bangkok / Yaowarat",
      "observation_id": "gta-gold-reference-price_bangkok_gold_price_change_prev_day",
      "parameter": "gold_price_change_prev_day",
      "metric_label": "Previous-day gold-price change",
      "value": -200,
      "unit": "THB per 1 baht-weight",
      "comparison_hint": "Published change from the previous trading day close or final row."
    },
    {
      "feed_id": "bangkok-civic-complaint-stats",
      "source_name": "Bangkok Open Data",
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "observed_at": "2025-07-31T17:00:00.000Z",
      "freshness_class": "stale",
      "quality_flag": "direct-source-match",
      "method": "bangkok_open_data_traffy_district_stats",
      "confidence": "high",
      "note": "Bangkok-wide civic complaint context from the latest public district Traffy summary on Bangkok Open Data.",
      "observation_id": "bangkok-civic-complaint-stats_bangkok_civic_monthly_complaint_count",
      "parameter": "civic_monthly_complaint_count",
      "metric_label": "Monthly civic complaint count",
      "value": 28532,
      "unit": "complaints",
      "comparison_hint": "Latest Bangkok district summary period สิงหาคม 2568.",
      "report_period": "สิงหาคม 2568",
      "district_count": 50,
      "districts": [
        "คลองเตย",
        "คลองสาน",
        "คลองสามวา",
        "คันนายาว",
        "จตุจักร",
        "จอมทอง",
        "ดอนเมือง",
        "ดินแดง",
        "ดุสิต",
        "ตลิ่งชัน",
        "ทวีวัฒนา",
        "ทุ่งครุ",
        "ธนบุรี",
        "บางกอกน้อย",
        "บางกอกใหญ่",
        "บางกะปิ",
        "บางขุนเทียน",
        "บางเขน",
        "บางคอแหลม",
        "บางแค",
        "บางซื่อ",
        "บางนา",
        "บางบอน",
        "บางพลัด",
        "บางรัก",
        "บึงกุ่ม",
        "ปทุมวัน",
        "ประเวศ",
        "ป้อมปราบศัตรูพ่าย",
        "พญาไท",
        "พระโขนง",
        "พระนคร",
        "ภาษีเจริญ",
        "มีนบุรี",
        "ยานนาวา",
        "ราชเทวี",
        "ราษฎร์บูรณะ",
        "ลาดกระบัง",
        "ลาดพร้าว",
        "วังทองหลาง",
        "วัฒนา",
        "สวนหลวง",
        "สะพานสูง",
        "สัมพันธวงศ์",
        "สาทร",
        "สายไหม",
        "หนองแขม",
        "หนองจอก",
        "หลักสี่",
        "ห้วยขวาง"
      ],
      "scope_average_complaint_count": 570.6,
      "city_median_complaint_count": 509,
      "city_average_complaint_count": 570.6,
      "city_total_complaint_count": 28532,
      "source_names": [
        "Bangkok Open Data"
      ]
    },
    {
      "feed_id": "bangkok-civic-complaint-stats",
      "source_name": "Bangkok Open Data",
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "observed_at": "2025-07-31T17:00:00.000Z",
      "freshness_class": "stale",
      "quality_flag": "direct-source-match",
      "method": "bangkok_open_data_traffy_district_stats",
      "confidence": "high",
      "note": "Bangkok-wide civic complaint context from the latest public district Traffy summary on Bangkok Open Data.",
      "observation_id": "bangkok-civic-complaint-stats_bangkok_civic_monthly_resolution_rate",
      "parameter": "civic_monthly_resolution_rate",
      "metric_label": "Monthly civic resolution rate",
      "value": 47.1,
      "unit": "percent",
      "comparison_hint": "13,443 resolved out of 28,532 complaints.",
      "report_period": "สิงหาคม 2568",
      "district_count": 50,
      "districts": [
        "คลองเตย",
        "คลองสาน",
        "คลองสามวา",
        "คันนายาว",
        "จตุจักร",
        "จอมทอง",
        "ดอนเมือง",
        "ดินแดง",
        "ดุสิต",
        "ตลิ่งชัน",
        "ทวีวัฒนา",
        "ทุ่งครุ",
        "ธนบุรี",
        "บางกอกน้อย",
        "บางกอกใหญ่",
        "บางกะปิ",
        "บางขุนเทียน",
        "บางเขน",
        "บางคอแหลม",
        "บางแค",
        "บางซื่อ",
        "บางนา",
        "บางบอน",
        "บางพลัด",
        "บางรัก",
        "บึงกุ่ม",
        "ปทุมวัน",
        "ประเวศ",
        "ป้อมปราบศัตรูพ่าย",
        "พญาไท",
        "พระโขนง",
        "พระนคร",
        "ภาษีเจริญ",
        "มีนบุรี",
        "ยานนาวา",
        "ราชเทวี",
        "ราษฎร์บูรณะ",
        "ลาดกระบัง",
        "ลาดพร้าว",
        "วังทองหลาง",
        "วัฒนา",
        "สวนหลวง",
        "สะพานสูง",
        "สัมพันธวงศ์",
        "สาทร",
        "สายไหม",
        "หนองแขม",
        "หนองจอก",
        "หลักสี่",
        "ห้วยขวาง"
      ],
      "scope_average_complaint_count": 570.6,
      "city_median_complaint_count": 509,
      "city_average_complaint_count": 570.6,
      "city_total_complaint_count": 28532,
      "source_names": [
        "Bangkok Open Data"
      ]
    },
    {
      "feed_id": "bangkok-civic-complaint-stats",
      "source_name": "Bangkok Open Data",
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "observed_at": "2025-07-31T17:00:00.000Z",
      "freshness_class": "stale",
      "quality_flag": "direct-source-match",
      "method": "bangkok_open_data_traffy_district_stats",
      "confidence": "high",
      "note": "Bangkok-wide civic complaint context from the latest public district Traffy summary on Bangkok Open Data.",
      "observation_id": "bangkok-civic-complaint-stats_bangkok_civic_star_average",
      "parameter": "civic_star_average",
      "metric_label": "Average civic star rating",
      "value": 4.17,
      "unit": "stars",
      "comparison_hint": "Average district complaint star rating across 50 district bucket(s).",
      "report_period": "สิงหาคม 2568",
      "district_count": 50,
      "districts": [
        "คลองเตย",
        "คลองสาน",
        "คลองสามวา",
        "คันนายาว",
        "จตุจักร",
        "จอมทอง",
        "ดอนเมือง",
        "ดินแดง",
        "ดุสิต",
        "ตลิ่งชัน",
        "ทวีวัฒนา",
        "ทุ่งครุ",
        "ธนบุรี",
        "บางกอกน้อย",
        "บางกอกใหญ่",
        "บางกะปิ",
        "บางขุนเทียน",
        "บางเขน",
        "บางคอแหลม",
        "บางแค",
        "บางซื่อ",
        "บางนา",
        "บางบอน",
        "บางพลัด",
        "บางรัก",
        "บึงกุ่ม",
        "ปทุมวัน",
        "ประเวศ",
        "ป้อมปราบศัตรูพ่าย",
        "พญาไท",
        "พระโขนง",
        "พระนคร",
        "ภาษีเจริญ",
        "มีนบุรี",
        "ยานนาวา",
        "ราชเทวี",
        "ราษฎร์บูรณะ",
        "ลาดกระบัง",
        "ลาดพร้าว",
        "วังทองหลาง",
        "วัฒนา",
        "สวนหลวง",
        "สะพานสูง",
        "สัมพันธวงศ์",
        "สาทร",
        "สายไหม",
        "หนองแขม",
        "หนองจอก",
        "หลักสี่",
        "ห้วยขวาง"
      ],
      "scope_average_complaint_count": 570.6,
      "city_median_complaint_count": 509,
      "city_average_complaint_count": 570.6,
      "city_total_complaint_count": 28532,
      "source_names": [
        "Bangkok Open Data"
      ]
    },
    {
      "feed_id": "noise4thai-ambient-noise",
      "source_name": "PCD Noise4Thai",
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "freshness_class": "fresh",
      "quality_flag": "direct-source-match",
      "method": "noise4thai_province_average",
      "confidence": "high",
      "note": "Bangkok area average from live Noise4Thai monitoring cards.",
      "observation_id": "noise4thai-ambient-noise_bangkok_noise_leq_24h_average",
      "parameter": "noise_leq_24h_average",
      "metric_label": "Average Leq 24h",
      "value": 66,
      "unit": "dBA",
      "max_value": 71.4,
      "station_count": 6,
      "online_station_count": 6,
      "supporting_station_ids": [
        "st09",
        "st10",
        "st12",
        "st52",
        "st53",
        "st54"
      ],
      "supporting_station_names": [
        "โรงเรียนบดินทรเดชา (สิงห์ สิงหเสนี)",
        "การเคหะชุมชนคลองจั่น",
        "โรงเรียนนนทรีวิทยา",
        "สถานีไฟฟ้าย่อยธนบุรี",
        "สถานีตำรวจนครบาลโชคชัย",
        "การเคหะชุมชนดินแดง"
      ],
      "comparison_hint": "Mixed community and roadside monitoring cards."
    },
    {
      "feed_id": "thairsc-road-safety",
      "source_name": "ThaiRSC Road Accident Center",
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "observed_at": "2026-05-15T11:00:00.000Z",
      "freshness_class": "stale",
      "quality_flag": "direct-source-match",
      "method": "thairsc_snapshot",
      "confidence": "high",
      "note": "Bangkok province road-safety burden from ThaiRSC snapshot data. Served from the current build snapshot because the upstream API certificate is not production-safe for runtime fetches.",
      "province_count": 1,
      "supporting_provinces": [
        "กรุงเทพมหานคร"
      ],
      "observation_id": "thairsc-road-safety_bangkok_road_deaths_ytd",
      "parameter": "road_deaths_ytd",
      "metric_label": "Road deaths year to date",
      "value": 315,
      "unit": "deaths"
    },
    {
      "feed_id": "thairsc-road-safety",
      "source_name": "ThaiRSC Road Accident Center",
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "observed_at": "2026-05-15T11:00:00.000Z",
      "freshness_class": "stale",
      "quality_flag": "direct-source-match",
      "method": "thairsc_snapshot",
      "confidence": "high",
      "note": "Bangkok province road-safety burden from ThaiRSC snapshot data. Served from the current build snapshot because the upstream API certificate is not production-safe for runtime fetches.",
      "province_count": 1,
      "supporting_provinces": [
        "กรุงเทพมหานคร"
      ],
      "observation_id": "thairsc-road-safety_bangkok_road_injuries_ytd",
      "parameter": "road_injuries_ytd",
      "metric_label": "Road injuries year to date",
      "value": 61592,
      "unit": "injuries"
    },
    {
      "feed_id": "thairsc-road-safety",
      "source_name": "ThaiRSC Road Accident Center",
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "observed_at": "2026-05-15T11:00:00.000Z",
      "freshness_class": "stale",
      "quality_flag": "direct-source-match",
      "method": "thairsc_snapshot",
      "confidence": "high",
      "note": "Bangkok province road-safety burden from ThaiRSC snapshot data. Served from the current build snapshot because the upstream API certificate is not production-safe for runtime fetches.",
      "province_count": 1,
      "supporting_provinces": [
        "กรุงเทพมหานคร"
      ],
      "observation_id": "thairsc-road-safety_bangkok_road_casualty_total_ytd",
      "parameter": "road_casualty_total_ytd",
      "metric_label": "Road casualties year to date",
      "value": 61907,
      "unit": "casualties",
      "comparison_hint": "Province burden percentile 0"
    }
  ],
  "contexts": [
    {
      "context_id": "gdacs-global-context",
      "feed_id": "gdacs-disaster-context",
      "source_name": "GDACS",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "parameter": "active_hazard_groups",
      "metric_label": "Active GDACS hazard groups",
      "value": 4,
      "unit": "groups",
      "freshness_class": "stale",
      "confidence": "medium",
      "affects_entity_types": [
        "destination",
        "hotel_area",
        "airport",
        "pier",
        "station",
        "bus_terminal",
        "monitoring_cluster"
      ],
      "affects_entities": [
        "bangkok",
        "chiang-mai",
        "phuket",
        "krabi",
        "koh-samui",
        "koh-phangan",
        "pattaya-chonburi",
        "hua-hin",
        "pai",
        "ayutthaya",
        "kanchanaburi",
        "isaan",
        "chiang-rai",
        "hat-yai",
        "trang",
        "surat-thani",
        "sukhothai",
        "nakhon-ratchasima",
        "chanthaburi",
        "khon-kaen",
        "ubon-ratchathani",
        "buriram",
        "nong-khai"
      ],
      "event_count": 32,
      "details": [
        {
          "label": "Fire",
          "value": 18
        },
        {
          "label": "Flood",
          "value": 10
        },
        {
          "label": "Earthquake",
          "value": 3
        },
        {
          "label": "Cyclone",
          "value": 1
        }
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "context_id": "usgs-thailand-earthquake-context",
      "feed_id": "usgs-thailand-earthquakes",
      "source_name": "USGS Earthquake API",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "parameter": "regional_earthquake_events",
      "metric_label": "Thailand-region earthquake events",
      "value": 1,
      "unit": "events",
      "freshness_class": "stale",
      "confidence": "medium",
      "affects_entity_types": [
        "destination",
        "hotel_area",
        "airport",
        "pier",
        "station",
        "bus_terminal",
        "monitoring_cluster"
      ],
      "affects_entities": [
        "bangkok",
        "chiang-mai",
        "phuket",
        "krabi",
        "koh-samui",
        "koh-phangan",
        "pattaya-chonburi",
        "hua-hin",
        "pai",
        "ayutthaya",
        "kanchanaburi",
        "isaan",
        "chiang-rai",
        "hat-yai",
        "trang",
        "surat-thani",
        "sukhothai",
        "nakhon-ratchasima",
        "chanthaburi",
        "khon-kaen",
        "ubon-ratchathani",
        "buriram",
        "nong-khai"
      ],
      "max_magnitude": 4.4,
      "details": [
        {
          "title": "M 4.4 - 82 km ENE of Loikaw, Burma (Myanmar)",
          "place": "82 km ENE of Loikaw, Burma (Myanmar)",
          "magnitude": 4.4,
          "observed_at": "2026-06-14T20:07:57.209Z",
          "longitude": 97.8867,
          "latitude": 20.0534,
          "depth_km": 10.543
        }
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "context_id": "thairsc-national-context",
      "feed_id": "thairsc-road-safety",
      "source_name": "ThaiRSC Road Accident Center",
      "observed_at": "2026-05-15T11:00:00.000Z",
      "parameter": "national_road_deaths_today",
      "metric_label": "National road deaths today",
      "value": 16,
      "unit": "deaths",
      "freshness_class": "stale",
      "confidence": "medium",
      "affects_entity_types": [
        "destination",
        "hotel_area",
        "airport",
        "pier",
        "station",
        "bus_terminal",
        "monitoring_cluster"
      ],
      "affects_entities": [
        "bangkok",
        "chiang-mai",
        "phuket",
        "krabi",
        "koh-samui",
        "koh-phangan",
        "pattaya-chonburi",
        "hua-hin",
        "pai",
        "ayutthaya",
        "kanchanaburi",
        "isaan",
        "chiang-rai",
        "hat-yai",
        "trang",
        "surat-thani",
        "sukhothai",
        "nakhon-ratchasima",
        "chanthaburi",
        "khon-kaen",
        "ubon-ratchathani",
        "buriram",
        "nong-khai"
      ],
      "event_count": 1834,
      "details": {
        "today_injuries": 1834,
        "source": "ที่มา : ศูนย์รับแจ้งเหตุ บริษัท กลางคุ้มครองผู้ประสบภัยจากรถ จำกัด และเครือข่ายรับแจ้ง"
      },
      "note": "National road-casualty context from the latest ThaiRSC snapshot."
    }
  ]
}