{
  "generated_at": "2026-06-24T02:15:17.842Z",
  "entity": {
    "entity_id": "bangkok",
    "slug": "bangkok",
    "name": "Bangkok",
    "type": "destination",
    "province": "Bangkok",
    "path": "/entities/bangkok/",
    "source_confidence": "high"
  },
  "summary": {
    "signal_count": 28,
    "active_family_count": 41,
    "strongest_signal": {
      "signal_type": "flood_water_risk",
      "label": "Water and flood-adjacent risk is elevated",
      "score": 44,
      "severity": "high",
      "basis": "live_observation"
    },
    "last_computed_at": "2026-06-24T02:15:17.842Z",
    "storage_mode": "persisted"
  },
  "families": {
    "active": [
      {
        "id": "aqi_risk",
        "name": "AQI risk",
        "status": "active",
        "kind": "live_observation",
        "note": "Turns normalized Air4Thai AQI observations into a place-level outdoor risk signal.",
        "dependsOn": [
          "air4thai-aqi"
        ],
        "output": "Destination and hotel-area comfort risk."
      },
      {
        "id": "outdoor_comfort",
        "name": "Outdoor comfort",
        "status": "active",
        "kind": "live_observation",
        "note": "Combines AQI and PM2.5 into an explainable outdoor-comfort signal for day planning.",
        "dependsOn": [
          "air4thai-aqi"
        ],
        "output": "Walkability and outdoor-heavy plan fit."
      },
      {
        "id": "source_confidence",
        "name": "Source confidence",
        "status": "active",
        "kind": "seed_plus_live",
        "note": "Blends entity source confidence, source count, and live observation freshness into a trust signal.",
        "dependsOn": [
          "entity-registry",
          "air4thai-aqi",
          "gdacs-disaster-context",
          "usgs-thailand-earthquakes"
        ],
        "output": "Why the graph answer is or is not trustworthy today."
      },
      {
        "id": "regional_disaster_context",
        "name": "Regional disaster context",
        "status": "active",
        "kind": "context",
        "note": "Uses GDACS hazard groups as a route-confidence context layer without pretending it is a local place verdict.",
        "dependsOn": [
          "gdacs-disaster-context"
        ],
        "output": "Graph-wide route and confidence caution."
      },
      {
        "id": "regional_earthquake_context",
        "name": "Regional earthquake context",
        "status": "active",
        "kind": "context",
        "note": "Uses the bounded USGS query as a light route-breaking context signal for Thailand-region events.",
        "dependsOn": [
          "usgs-thailand-earthquakes"
        ],
        "output": "Graph-wide disruption context."
      },
      {
        "id": "rain_risk",
        "name": "Rain risk",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses live TMD forecast, warning, and station-weather observations to compute destination and route rain fit.",
        "dependsOn": [
          "tmd-weather-surface"
        ],
        "output": "Destination fit and route breakage."
      },
      {
        "id": "flight_delay_risk",
        "name": "Flight weather and airport delay risk",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses public METAR and TAF weather-operability context for Thai airports. This is airport weather burden, not airline on-time performance truth.",
        "dependsOn": [
          "aviationweather-airport-status"
        ],
        "output": "Airport weather burden and flight-operability context for route planning."
      },
      {
        "id": "marine_warning_risk",
        "name": "Marine warning and sea-state risk",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses public TMD marine text, wind, and wave context for coastal destinations and ferry-related anchors. This is sea-state caution, not operator closure or seat inventory truth.",
        "dependsOn": [
          "tmd-weather-surface",
          "tmd-shipping-forecast"
        ],
        "output": "Coastal boat-day caution and ferry-fragility context."
      },
      {
        "id": "berth_operability_context",
        "name": "Berth operability context",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public Marine Department berth-status surface to show whether tracked coastal anchors have named public port selectors and visible ship-visit evidence on the official page. This is berth and movement context, not ferry schedule, ticket, or seat truth.",
        "dependsOn": [
          "marine-department-berth-status"
        ],
        "output": "Coastal port and public berth-status support for ferry-sensitive planning."
      },
      {
        "id": "pier_transfer_support",
        "name": "Pier transfer support",
        "status": "active",
        "kind": "derived_live",
        "note": "Uses public Namtang stop and mode structure around piers and coastal anchors to show whether ferry moves have real transfer support behind them. This is transfer-structure support, not operator schedule or queue-length truth.",
        "dependsOn": [
          "namtang-transit-structure"
        ],
        "output": "Public-water-transport access strength for ferry and coastal planning."
      },
      {
        "id": "airport_transfer_support",
        "name": "Airport transfer support",
        "status": "active",
        "kind": "derived_live",
        "note": "Uses public Namtang stop and mode structure around airport anchors to show whether flight-based plans have real ground-access support behind them. This is airport transfer support, not live airline board, gate, or queue-length truth.",
        "dependsOn": [
          "namtang-transit-structure"
        ],
        "output": "Airport-ground-access strength for route and stay planning."
      },
      {
        "id": "airport_ground_service_support",
        "name": "Airport ground-service support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses public AOT airport transport pages to score official taxi, Grab, rental-counter, pickup-rule, and ground-service guidance where those pages are publicly available. This is airport ground-service context, not live queue, ETA, or rental inventory truth.",
        "dependsOn": [
          "aot-airport-ground-services"
        ],
        "output": "Official airport pickup-rule and ground-service support for route and stay planning."
      },
      {
        "id": "airport_board_surface_support",
        "name": "Airport board-surface support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses public AOT flight-status pages to score whether a traveler can self-check an official passenger board surface. 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.",
        "dependsOn": [
          "aot-airport-flight-board-surface"
        ],
        "output": "Official passenger self-serve board visibility for airport, stay, and route planning."
      },
      {
        "id": "airport_scale_context",
        "name": "Airport scale context",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public AOT fiscal traffic workbook to score official airport passenger and aircraft-movement scale context. This is airport scale and resilience context, not live on-time, queue, gate, or inventory truth.",
        "dependsOn": [
          "aot-airport-traffic-stats"
        ],
        "output": "Official airport scale and major-airport context for destination, stay, and route planning."
      },
      {
        "id": "airport_environmental_support",
        "name": "Airport environmental support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the SET-hosted AOT factsheet and annual report disclosure snapshot to score airport environmental-governance, community-contact, and airport-noise support context. This is institutional disclosure support, not live measured sound-level truth.",
        "dependsOn": [
          "aot-airport-environment-support"
        ],
        "output": "Official airport environmental-governance and community-support context for airport-linked stay and route planning."
      },
      {
        "id": "rail_feasibility",
        "name": "Rail feasibility",
        "status": "active",
        "kind": "derived_live",
        "note": "Uses public Namtang stop and mode structure around destinations, hotel areas, and station anchors to show whether a rail-linked plan is structurally real. This is rail-support context, not live seat, delay, or operator-disruption truth.",
        "dependsOn": [
          "namtang-transit-structure"
        ],
        "output": "Rail-linked destination and stay support for route and base planning."
      },
      {
        "id": "official_rail_presence",
        "name": "Official rail presence",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public SRT station-list surface to confirm official rail presence around destinations and selected hotel areas. This is operator-backed station presence, not live train timing or seat truth.",
        "dependsOn": [
          "srt-official-station-presence"
        ],
        "output": "Official operator-backed rail presence for destination and route confidence."
      },
      {
        "id": "official_bus_terminal_support",
        "name": "Official bus-terminal support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public MOT passenger-terminal master CSV to confirm official overland bus-terminal presence around destinations, hotel areas, and bus-terminal anchors. This is terminal-master support, not live departure, seat, or booking truth.",
        "dependsOn": [
          "mot-bus-terminal-support"
        ],
        "output": "Official overland bus-terminal support for destination, stay, and route confidence."
      },
      {
        "id": "official_intercity_bus_support",
        "name": "Official intercity bus support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public BKS station, office, stop, and ticket-point CSV to confirm official intercity-bus support around destinations, hotel areas, and overland anchors. This is official station and ticket-point presence, not live departure, seat, or booking truth.",
        "dependsOn": [
          "bks-station-ticket-support"
        ],
        "output": "Official BKS intercity-bus support for destination, stay, and route confidence."
      },
      {
        "id": "official_intercity_bus_search_support",
        "name": "Official intercity-bus search support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public BKS booking/search destination-selector surface to confirm whether tracked destinations are actually present in the official intercity-bus route-search flow from Bangkok origins. This is search-surface support, not live departure, seat, or booking truth.",
        "dependsOn": [
          "bks-timetable-search-surface"
        ],
        "output": "Official BKS public route-search support for destination, stay, and route confidence."
      },
      {
        "id": "official_transport_complaint_support",
        "name": "Official transport complaint support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public DLT 1584 fiscal-year complaint workbooks to score official complaint recourse and transport-burden context around Bangkok, regional, and overland traveler entities. This is passenger-protection and burden context, not local realtime service quality or dispatch truth.",
        "dependsOn": [
          "dlt-1584-complaint-stats"
        ],
        "output": "Official complaint recourse and transport-burden context for destination, stay, and route confidence."
      },
      {
        "id": "official_taxi_oversight_support",
        "name": "Official taxi-oversight support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public DLT GPS passenger pages and Taxi OK / Taxi VIP project notices to score official regulated-taxi oversight, complaint, and station-search support. This is oversight and passenger-protection context, not live vehicle location, dispatch, ETA, or raw taxi GPS truth.",
        "dependsOn": [
          "dlt-gps-taxi-support"
        ],
        "output": "Official regulated-taxi oversight support for city-base, airport-linked, stay, and route confidence."
      },
      {
        "id": "official_motorcycle_taxi_support",
        "name": "Official motorcycle-taxi support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public DLT/data.go.th Bangkok motorcycle-taxi dataset to score official stand and driver support around Bangkok city-base, hotel-area, terminal, and airport-linked entities. This is supply and stand coverage context, not live availability, dispatch, or queue truth.",
        "dependsOn": [
          "bangkok-motorcycle-taxi-support"
        ],
        "output": "Official Bangkok last-mile motorcycle-taxi support for destination, stay, and route confidence."
      },
      {
        "id": "taxi_pickup_dropoff_support",
        "name": "Taxi pickup and dropoff support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public OTP monthly taxi GPS analytics and top pickup/dropoff area rankings to score aggregate Bangkok taxi-demand and hotspot support around city-base, hotel-area, terminal, and airport-linked entities. This is monthly aggregate demand context, not live dispatch, ETA, queue, or raw trip truth.",
        "dependsOn": [
          "otp-taxi-demand-analytics"
        ],
        "output": "Bangkok taxi-demand and hotspot support for destination, stay, and route confidence."
      },
      {
        "id": "official_pier_support",
        "name": "Official pier support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public Marine Department berth registry to confirm official passenger-pier support around coastal destinations, hotel areas, and pier anchors. This is berth-registry and infrastructure support, not live ferry schedule, closure, queue, or seat truth.",
        "dependsOn": [
          "marine-department-pier-registry"
        ],
        "output": "Official coastal and passenger-pier support for destination, stay, route, and ferry confidence."
      },
      {
        "id": "urban_rapid_transit_support",
        "name": "Urban rapid-transit support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses public BTS and MRTA route-map and service pages to confirm official Bangkok rapid-transit support for core city-base entities. This is route-map and service-page support, not live headway, crowding, or outage truth.",
        "dependsOn": [
          "bangkok-rapid-transit-official-pages"
        ],
        "output": "Official Bangkok rapid-transit support for city-base, stay, and route planning."
      },
      {
        "id": "urban_bus_operator_support",
        "name": "Urban bus-operator support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public Thai Smile Group branch and depot locator to confirm Bangkok urban bus operator footprint around selected traveler entities. This is operator footprint and support context, not realtime vehicle, ETA, crowding, or outage truth.",
        "dependsOn": [
          "thai-smile-group-branch-locator"
        ],
        "output": "Bangkok urban bus operator support for city-base, stay, and route planning."
      },
      {
        "id": "thai_gold_reference_price",
        "name": "Thai gold reference price",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the published Gold Traders Association latest-price JSON surface to expose the national Thai domestic 96.5% gold quote in THB per 1 baht-weight. This is a published retail-reference layer, not a live trading feed or local shop-inventory surface.",
        "dependsOn": [
          "gta-gold-reference-price"
        ],
        "output": "National Thai gold reference availability, freshness, and spread context."
      },
      {
        "id": "thai_gold_fx_pressure",
        "name": "Thai gold FX pressure",
        "status": "active",
        "kind": "derived_live",
        "note": "Uses the Bank of Thailand daily-average USD/THB API when configured, and otherwise falls back to the Gold Traders Association embedded FX field, alongside recent GTA quote movement, to explain whether the Thai domestic gold quote feels calmer or more pressured. This is context, not investment advice.",
        "dependsOn": [
          "gta-gold-reference-price",
          "bot-usd-thb-reference"
        ],
        "output": "Exchange-rate and recent-quote pressure behind the Thai retail reference price."
      },
      {
        "id": "thai_gold_buying_friction",
        "name": "Thai gold buying friction",
        "status": "active",
        "kind": "seed_plus_live",
        "note": "Combines the national Gold Traders Association quote with city buying-context rules so Bangkok, Chiang Mai, Phuket, Pattaya, and Hat Yai are explained as comparison-shopping or tourist-friction contexts instead of fake province-specific price feeds.",
        "dependsOn": [
          "gta-gold-reference-price"
        ],
        "output": "City-by-city gold buying context and friction around the national Thai reference quote."
      },
      {
        "id": "flood_water_risk",
        "name": "Flood and water risk",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses live Thaiwater water-quality observations as a river and canal caution layer where current station coverage exists.",
        "dependsOn": [
          "thaiwater-water-quality"
        ],
        "output": "Flood, water quality, and marine caution."
      },
      {
        "id": "noise_risk",
        "name": "Noise risk",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses live Noise4Thai ambient-noise observations for hotel-base comfort and neighborhood nuisance signals.",
        "dependsOn": [
          "noise4thai-ambient-noise"
        ],
        "output": "Hotel base and neighborhood comfort."
      },
      {
        "id": "road_safety_risk",
        "name": "Road safety risk",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses ThaiRSC road-casualty observations to compute province and route road-safety caution.",
        "dependsOn": [
          "thairsc-road-safety"
        ],
        "output": "Route burden and accident caution."
      },
      {
        "id": "civic_friction",
        "name": "Civic friction",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses Bangkok Open Data district complaint, resolution, and star-rating stats as a slower-moving nuisance and service-friction layer for Bangkok and its main hotel areas.",
        "dependsOn": [
          "bangkok-civic-complaint-stats"
        ],
        "output": "Bangkok nuisance, complaint burden, and service-friction context."
      },
      {
        "id": "bangkok_flood_friction",
        "name": "Bangkok flood friction",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public Bangkok flood-monitoring current-event surface as a citywide flood-friction layer for Bangkok destination, stay, and route planning. This is Bangkok-only public flood-event context, not a province-by-province Thailand flood service.",
        "dependsOn": [
          "bangkok-flood-monitoring-system"
        ],
        "output": "Bangkok-only route, stay, and transfer burden during current flood events."
      },
      {
        "id": "highway_transfer_friction",
        "name": "Highway transfer friction",
        "status": "active",
        "kind": "derived_live",
        "note": "Combines DOH public CCTV region support with official EXAT expressway support surfaces to explain whether major overland moves have official observability and motorway-support context behind them. This is support and friction context, not live speed, queue, lane, or incident truth.",
        "dependsOn": [
          "doh-highway-traffic-support",
          "exat-expressway-support"
        ],
        "output": "Bangkok-linked and regional overland friction support for route and stay planning."
      },
      {
        "id": "spa_license_support",
        "name": "Spa license support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public HSS health-establishment directory and spa-premium surfaces to expose whether official spa and massage license-lookup context exists behind wellness-heavy traveler anchors. This is licensing-support context, not live booking, treatment quality, or venue popularity truth.",
        "dependsOn": [
          "hss-spa-license-support"
        ],
        "output": "Wellness-license confidence for destination and stay planning."
      },
      {
        "id": "medical_fallback_support",
        "name": "Medical fallback support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses public MOPH and HS4 facility surfaces to expose whether official hospital and facility-lookup context exists behind traveler fallback planning. This is medical-support context, not live bed, wait-time, dispatch, or specialist-availability truth.",
        "dependsOn": [
          "moph-health-facility-support"
        ],
        "output": "Destination and stay fallback-support strength when travelers need formal healthcare context."
      },
      {
        "id": "park_access_context",
        "name": "Park access context",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses public DNP tourism dataset surfaces to expose whether national-park and protected-area planning has official dataset support behind it. This is park-planning context, not live closure, capacity, or ranger-availability truth.",
        "dependsOn": [
          "dnp-park-tourism-support"
        ],
        "output": "Protected-area and nature-trip planning confidence for destination and route decisions."
      },
      {
        "id": "ferry_fragility",
        "name": "Ferry fragility",
        "status": "active",
        "kind": "derived_live",
        "note": "Blends live TMD weather context with pier confidence to score island-chain fragility honestly.",
        "dependsOn": [
          "tmd-weather-surface",
          "source_confidence"
        ],
        "output": "Island transfer reliability."
      },
      {
        "id": "transport_friction",
        "name": "Transport friction",
        "status": "active",
        "kind": "derived_live",
        "note": "Blends current weather, road burden, official highway support, source confidence, and Namtang transit-structure support into a live movement-friction family.",
        "dependsOn": [
          "rain_risk",
          "road_safety_risk",
          "highway_transfer_friction",
          "source_confidence",
          "namtang-transit-structure"
        ],
        "output": "Movement difficulty and backup strength."
      }
    ],
    "queued": [],
    "all": [
      {
        "id": "aqi_risk",
        "name": "AQI risk",
        "status": "active",
        "kind": "live_observation",
        "note": "Turns normalized Air4Thai AQI observations into a place-level outdoor risk signal.",
        "dependsOn": [
          "air4thai-aqi"
        ],
        "output": "Destination and hotel-area comfort risk."
      },
      {
        "id": "outdoor_comfort",
        "name": "Outdoor comfort",
        "status": "active",
        "kind": "live_observation",
        "note": "Combines AQI and PM2.5 into an explainable outdoor-comfort signal for day planning.",
        "dependsOn": [
          "air4thai-aqi"
        ],
        "output": "Walkability and outdoor-heavy plan fit."
      },
      {
        "id": "source_confidence",
        "name": "Source confidence",
        "status": "active",
        "kind": "seed_plus_live",
        "note": "Blends entity source confidence, source count, and live observation freshness into a trust signal.",
        "dependsOn": [
          "entity-registry",
          "air4thai-aqi",
          "gdacs-disaster-context",
          "usgs-thailand-earthquakes"
        ],
        "output": "Why the graph answer is or is not trustworthy today."
      },
      {
        "id": "regional_disaster_context",
        "name": "Regional disaster context",
        "status": "active",
        "kind": "context",
        "note": "Uses GDACS hazard groups as a route-confidence context layer without pretending it is a local place verdict.",
        "dependsOn": [
          "gdacs-disaster-context"
        ],
        "output": "Graph-wide route and confidence caution."
      },
      {
        "id": "regional_earthquake_context",
        "name": "Regional earthquake context",
        "status": "active",
        "kind": "context",
        "note": "Uses the bounded USGS query as a light route-breaking context signal for Thailand-region events.",
        "dependsOn": [
          "usgs-thailand-earthquakes"
        ],
        "output": "Graph-wide disruption context."
      },
      {
        "id": "rain_risk",
        "name": "Rain risk",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses live TMD forecast, warning, and station-weather observations to compute destination and route rain fit.",
        "dependsOn": [
          "tmd-weather-surface"
        ],
        "output": "Destination fit and route breakage."
      },
      {
        "id": "flight_delay_risk",
        "name": "Flight weather and airport delay risk",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses public METAR and TAF weather-operability context for Thai airports. This is airport weather burden, not airline on-time performance truth.",
        "dependsOn": [
          "aviationweather-airport-status"
        ],
        "output": "Airport weather burden and flight-operability context for route planning."
      },
      {
        "id": "marine_warning_risk",
        "name": "Marine warning and sea-state risk",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses public TMD marine text, wind, and wave context for coastal destinations and ferry-related anchors. This is sea-state caution, not operator closure or seat inventory truth.",
        "dependsOn": [
          "tmd-weather-surface",
          "tmd-shipping-forecast"
        ],
        "output": "Coastal boat-day caution and ferry-fragility context."
      },
      {
        "id": "berth_operability_context",
        "name": "Berth operability context",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public Marine Department berth-status surface to show whether tracked coastal anchors have named public port selectors and visible ship-visit evidence on the official page. This is berth and movement context, not ferry schedule, ticket, or seat truth.",
        "dependsOn": [
          "marine-department-berth-status"
        ],
        "output": "Coastal port and public berth-status support for ferry-sensitive planning."
      },
      {
        "id": "pier_transfer_support",
        "name": "Pier transfer support",
        "status": "active",
        "kind": "derived_live",
        "note": "Uses public Namtang stop and mode structure around piers and coastal anchors to show whether ferry moves have real transfer support behind them. This is transfer-structure support, not operator schedule or queue-length truth.",
        "dependsOn": [
          "namtang-transit-structure"
        ],
        "output": "Public-water-transport access strength for ferry and coastal planning."
      },
      {
        "id": "airport_transfer_support",
        "name": "Airport transfer support",
        "status": "active",
        "kind": "derived_live",
        "note": "Uses public Namtang stop and mode structure around airport anchors to show whether flight-based plans have real ground-access support behind them. This is airport transfer support, not live airline board, gate, or queue-length truth.",
        "dependsOn": [
          "namtang-transit-structure"
        ],
        "output": "Airport-ground-access strength for route and stay planning."
      },
      {
        "id": "airport_ground_service_support",
        "name": "Airport ground-service support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses public AOT airport transport pages to score official taxi, Grab, rental-counter, pickup-rule, and ground-service guidance where those pages are publicly available. This is airport ground-service context, not live queue, ETA, or rental inventory truth.",
        "dependsOn": [
          "aot-airport-ground-services"
        ],
        "output": "Official airport pickup-rule and ground-service support for route and stay planning."
      },
      {
        "id": "airport_board_surface_support",
        "name": "Airport board-surface support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses public AOT flight-status pages to score whether a traveler can self-check an official passenger board surface. 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.",
        "dependsOn": [
          "aot-airport-flight-board-surface"
        ],
        "output": "Official passenger self-serve board visibility for airport, stay, and route planning."
      },
      {
        "id": "airport_scale_context",
        "name": "Airport scale context",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public AOT fiscal traffic workbook to score official airport passenger and aircraft-movement scale context. This is airport scale and resilience context, not live on-time, queue, gate, or inventory truth.",
        "dependsOn": [
          "aot-airport-traffic-stats"
        ],
        "output": "Official airport scale and major-airport context for destination, stay, and route planning."
      },
      {
        "id": "airport_environmental_support",
        "name": "Airport environmental support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the SET-hosted AOT factsheet and annual report disclosure snapshot to score airport environmental-governance, community-contact, and airport-noise support context. This is institutional disclosure support, not live measured sound-level truth.",
        "dependsOn": [
          "aot-airport-environment-support"
        ],
        "output": "Official airport environmental-governance and community-support context for airport-linked stay and route planning."
      },
      {
        "id": "rail_feasibility",
        "name": "Rail feasibility",
        "status": "active",
        "kind": "derived_live",
        "note": "Uses public Namtang stop and mode structure around destinations, hotel areas, and station anchors to show whether a rail-linked plan is structurally real. This is rail-support context, not live seat, delay, or operator-disruption truth.",
        "dependsOn": [
          "namtang-transit-structure"
        ],
        "output": "Rail-linked destination and stay support for route and base planning."
      },
      {
        "id": "official_rail_presence",
        "name": "Official rail presence",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public SRT station-list surface to confirm official rail presence around destinations and selected hotel areas. This is operator-backed station presence, not live train timing or seat truth.",
        "dependsOn": [
          "srt-official-station-presence"
        ],
        "output": "Official operator-backed rail presence for destination and route confidence."
      },
      {
        "id": "official_bus_terminal_support",
        "name": "Official bus-terminal support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public MOT passenger-terminal master CSV to confirm official overland bus-terminal presence around destinations, hotel areas, and bus-terminal anchors. This is terminal-master support, not live departure, seat, or booking truth.",
        "dependsOn": [
          "mot-bus-terminal-support"
        ],
        "output": "Official overland bus-terminal support for destination, stay, and route confidence."
      },
      {
        "id": "official_intercity_bus_support",
        "name": "Official intercity bus support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public BKS station, office, stop, and ticket-point CSV to confirm official intercity-bus support around destinations, hotel areas, and overland anchors. This is official station and ticket-point presence, not live departure, seat, or booking truth.",
        "dependsOn": [
          "bks-station-ticket-support"
        ],
        "output": "Official BKS intercity-bus support for destination, stay, and route confidence."
      },
      {
        "id": "official_intercity_bus_search_support",
        "name": "Official intercity-bus search support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public BKS booking/search destination-selector surface to confirm whether tracked destinations are actually present in the official intercity-bus route-search flow from Bangkok origins. This is search-surface support, not live departure, seat, or booking truth.",
        "dependsOn": [
          "bks-timetable-search-surface"
        ],
        "output": "Official BKS public route-search support for destination, stay, and route confidence."
      },
      {
        "id": "official_transport_complaint_support",
        "name": "Official transport complaint support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public DLT 1584 fiscal-year complaint workbooks to score official complaint recourse and transport-burden context around Bangkok, regional, and overland traveler entities. This is passenger-protection and burden context, not local realtime service quality or dispatch truth.",
        "dependsOn": [
          "dlt-1584-complaint-stats"
        ],
        "output": "Official complaint recourse and transport-burden context for destination, stay, and route confidence."
      },
      {
        "id": "official_taxi_oversight_support",
        "name": "Official taxi-oversight support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public DLT GPS passenger pages and Taxi OK / Taxi VIP project notices to score official regulated-taxi oversight, complaint, and station-search support. This is oversight and passenger-protection context, not live vehicle location, dispatch, ETA, or raw taxi GPS truth.",
        "dependsOn": [
          "dlt-gps-taxi-support"
        ],
        "output": "Official regulated-taxi oversight support for city-base, airport-linked, stay, and route confidence."
      },
      {
        "id": "official_motorcycle_taxi_support",
        "name": "Official motorcycle-taxi support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public DLT/data.go.th Bangkok motorcycle-taxi dataset to score official stand and driver support around Bangkok city-base, hotel-area, terminal, and airport-linked entities. This is supply and stand coverage context, not live availability, dispatch, or queue truth.",
        "dependsOn": [
          "bangkok-motorcycle-taxi-support"
        ],
        "output": "Official Bangkok last-mile motorcycle-taxi support for destination, stay, and route confidence."
      },
      {
        "id": "taxi_pickup_dropoff_support",
        "name": "Taxi pickup and dropoff support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public OTP monthly taxi GPS analytics and top pickup/dropoff area rankings to score aggregate Bangkok taxi-demand and hotspot support around city-base, hotel-area, terminal, and airport-linked entities. This is monthly aggregate demand context, not live dispatch, ETA, queue, or raw trip truth.",
        "dependsOn": [
          "otp-taxi-demand-analytics"
        ],
        "output": "Bangkok taxi-demand and hotspot support for destination, stay, and route confidence."
      },
      {
        "id": "official_pier_support",
        "name": "Official pier support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public Marine Department berth registry to confirm official passenger-pier support around coastal destinations, hotel areas, and pier anchors. This is berth-registry and infrastructure support, not live ferry schedule, closure, queue, or seat truth.",
        "dependsOn": [
          "marine-department-pier-registry"
        ],
        "output": "Official coastal and passenger-pier support for destination, stay, route, and ferry confidence."
      },
      {
        "id": "urban_rapid_transit_support",
        "name": "Urban rapid-transit support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses public BTS and MRTA route-map and service pages to confirm official Bangkok rapid-transit support for core city-base entities. This is route-map and service-page support, not live headway, crowding, or outage truth.",
        "dependsOn": [
          "bangkok-rapid-transit-official-pages"
        ],
        "output": "Official Bangkok rapid-transit support for city-base, stay, and route planning."
      },
      {
        "id": "urban_bus_operator_support",
        "name": "Urban bus-operator support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public Thai Smile Group branch and depot locator to confirm Bangkok urban bus operator footprint around selected traveler entities. This is operator footprint and support context, not realtime vehicle, ETA, crowding, or outage truth.",
        "dependsOn": [
          "thai-smile-group-branch-locator"
        ],
        "output": "Bangkok urban bus operator support for city-base, stay, and route planning."
      },
      {
        "id": "thai_gold_reference_price",
        "name": "Thai gold reference price",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the published Gold Traders Association latest-price JSON surface to expose the national Thai domestic 96.5% gold quote in THB per 1 baht-weight. This is a published retail-reference layer, not a live trading feed or local shop-inventory surface.",
        "dependsOn": [
          "gta-gold-reference-price"
        ],
        "output": "National Thai gold reference availability, freshness, and spread context."
      },
      {
        "id": "thai_gold_fx_pressure",
        "name": "Thai gold FX pressure",
        "status": "active",
        "kind": "derived_live",
        "note": "Uses the Bank of Thailand daily-average USD/THB API when configured, and otherwise falls back to the Gold Traders Association embedded FX field, alongside recent GTA quote movement, to explain whether the Thai domestic gold quote feels calmer or more pressured. This is context, not investment advice.",
        "dependsOn": [
          "gta-gold-reference-price",
          "bot-usd-thb-reference"
        ],
        "output": "Exchange-rate and recent-quote pressure behind the Thai retail reference price."
      },
      {
        "id": "thai_gold_buying_friction",
        "name": "Thai gold buying friction",
        "status": "active",
        "kind": "seed_plus_live",
        "note": "Combines the national Gold Traders Association quote with city buying-context rules so Bangkok, Chiang Mai, Phuket, Pattaya, and Hat Yai are explained as comparison-shopping or tourist-friction contexts instead of fake province-specific price feeds.",
        "dependsOn": [
          "gta-gold-reference-price"
        ],
        "output": "City-by-city gold buying context and friction around the national Thai reference quote."
      },
      {
        "id": "flood_water_risk",
        "name": "Flood and water risk",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses live Thaiwater water-quality observations as a river and canal caution layer where current station coverage exists.",
        "dependsOn": [
          "thaiwater-water-quality"
        ],
        "output": "Flood, water quality, and marine caution."
      },
      {
        "id": "noise_risk",
        "name": "Noise risk",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses live Noise4Thai ambient-noise observations for hotel-base comfort and neighborhood nuisance signals.",
        "dependsOn": [
          "noise4thai-ambient-noise"
        ],
        "output": "Hotel base and neighborhood comfort."
      },
      {
        "id": "road_safety_risk",
        "name": "Road safety risk",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses ThaiRSC road-casualty observations to compute province and route road-safety caution.",
        "dependsOn": [
          "thairsc-road-safety"
        ],
        "output": "Route burden and accident caution."
      },
      {
        "id": "civic_friction",
        "name": "Civic friction",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses Bangkok Open Data district complaint, resolution, and star-rating stats as a slower-moving nuisance and service-friction layer for Bangkok and its main hotel areas.",
        "dependsOn": [
          "bangkok-civic-complaint-stats"
        ],
        "output": "Bangkok nuisance, complaint burden, and service-friction context."
      },
      {
        "id": "bangkok_flood_friction",
        "name": "Bangkok flood friction",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public Bangkok flood-monitoring current-event surface as a citywide flood-friction layer for Bangkok destination, stay, and route planning. This is Bangkok-only public flood-event context, not a province-by-province Thailand flood service.",
        "dependsOn": [
          "bangkok-flood-monitoring-system"
        ],
        "output": "Bangkok-only route, stay, and transfer burden during current flood events."
      },
      {
        "id": "highway_transfer_friction",
        "name": "Highway transfer friction",
        "status": "active",
        "kind": "derived_live",
        "note": "Combines DOH public CCTV region support with official EXAT expressway support surfaces to explain whether major overland moves have official observability and motorway-support context behind them. This is support and friction context, not live speed, queue, lane, or incident truth.",
        "dependsOn": [
          "doh-highway-traffic-support",
          "exat-expressway-support"
        ],
        "output": "Bangkok-linked and regional overland friction support for route and stay planning."
      },
      {
        "id": "spa_license_support",
        "name": "Spa license support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public HSS health-establishment directory and spa-premium surfaces to expose whether official spa and massage license-lookup context exists behind wellness-heavy traveler anchors. This is licensing-support context, not live booking, treatment quality, or venue popularity truth.",
        "dependsOn": [
          "hss-spa-license-support"
        ],
        "output": "Wellness-license confidence for destination and stay planning."
      },
      {
        "id": "medical_fallback_support",
        "name": "Medical fallback support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses public MOPH and HS4 facility surfaces to expose whether official hospital and facility-lookup context exists behind traveler fallback planning. This is medical-support context, not live bed, wait-time, dispatch, or specialist-availability truth.",
        "dependsOn": [
          "moph-health-facility-support"
        ],
        "output": "Destination and stay fallback-support strength when travelers need formal healthcare context."
      },
      {
        "id": "park_access_context",
        "name": "Park access context",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses public DNP tourism dataset surfaces to expose whether national-park and protected-area planning has official dataset support behind it. This is park-planning context, not live closure, capacity, or ranger-availability truth.",
        "dependsOn": [
          "dnp-park-tourism-support"
        ],
        "output": "Protected-area and nature-trip planning confidence for destination and route decisions."
      },
      {
        "id": "ferry_fragility",
        "name": "Ferry fragility",
        "status": "active",
        "kind": "derived_live",
        "note": "Blends live TMD weather context with pier confidence to score island-chain fragility honestly.",
        "dependsOn": [
          "tmd-weather-surface",
          "source_confidence"
        ],
        "output": "Island transfer reliability."
      },
      {
        "id": "transport_friction",
        "name": "Transport friction",
        "status": "active",
        "kind": "derived_live",
        "note": "Blends current weather, road burden, official highway support, source confidence, and Namtang transit-structure support into a live movement-friction family.",
        "dependsOn": [
          "rain_risk",
          "road_safety_risk",
          "highway_transfer_friction",
          "source_confidence",
          "namtang-transit-structure"
        ],
        "output": "Movement difficulty and backup strength."
      }
    ]
  },
  "storage": {
    "mode": "persisted",
    "snapshot_kind": "signals",
    "generated_at": "2026-06-24T02:15:17.842Z",
    "stored_at": "2026-06-24T02:16:12.398Z",
    "fresh": false
  },
  "signals": [
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_flood_water_risk",
      "signal_type": "flood_water_risk",
      "family_name": "Flood and water risk",
      "basis": "live_observation",
      "score": 44,
      "severity": "high",
      "tone": "caution",
      "label": "Water and flood-adjacent risk is elevated",
      "reason": "Thaiwater status proxy scores 33 with dissolved oxygen 0 mg/L. This is a river and canal caution layer, not a full flood-stage model.",
      "source_count": 2,
      "source_names": [
        "Thaiwater WaterQuality API"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "thaiwater-water-quality_bangkok_water_quality_status_score",
        "thaiwater-water-quality_bangkok_water_dissolved_oxygen_average",
        "thaiwater-water-quality_bangkok_water_quality_index_average"
      ],
      "context_ids": [],
      "note": "Water risk is only emitted where current Thaiwater station coverage exists."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_noise_risk",
      "signal_type": "noise_risk",
      "family_name": "Noise risk",
      "basis": "live_observation",
      "score": 50,
      "severity": "high",
      "tone": "caution",
      "label": "Noise risk is elevated",
      "reason": "Average Leq 24h is 66 dBA across 6 live Noise4Thai stations, peaking at 71.4 dBA.",
      "source_count": 6,
      "source_names": [
        "PCD Noise4Thai"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "noise4thai-ambient-noise_bangkok_noise_leq_24h_average"
      ],
      "context_ids": [],
      "note": "Bangkok area average from live Noise4Thai monitoring cards."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_rain_risk",
      "signal_type": "rain_risk",
      "family_name": "Rain risk",
      "basis": "live_observation",
      "score": 56,
      "severity": "high",
      "tone": "caution",
      "label": "Rain risk is elevated",
      "reason": "Forecast rain chance is 40%, and 10 matched warning item(s) apply.",
      "source_count": 4,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T00:00:00.000Z",
      "expires_at": "2026-06-24T06:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_bangkok_forecast_rain_probability",
        "tmd-weather-surface_bangkok_forecast_heavy_rain_flag",
        "tmd-weather-surface_bangkok_warning_match_count",
        "tmd-weather-surface_bangkok_station_rainfall_today"
      ],
      "context_ids": [],
      "note": "This is the live weather-fit layer for destinations, piers, airports, and route nodes."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_flight_delay_risk",
      "signal_type": "flight_delay_risk",
      "family_name": "Flight weather and airport delay risk",
      "basis": "live_observation",
      "score": 60,
      "severity": "medium",
      "tone": "mixed",
      "label": "Airport weather delay risk is elevated",
      "reason": "Current flight-rules score is 94.0, visibility score is 92.0, and forecast disruption score is 30.0, with convective wording in at least one mapped airport forecast. This is airport weather-operability context, not airline on-time truth.",
      "source_count": 2,
      "source_names": [
        "NOAA Aviation Weather API"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "aviationweather-airport-status_bangkok_airport_flight_rules_score",
        "aviationweather-airport-status_bangkok_airport_visibility_score",
        "aviationweather-airport-status_bangkok_airport_forecast_disruption_score",
        "aviationweather-airport-status_bangkok_airport_convective_forecast_flag"
      ],
      "context_ids": [],
      "note": "This signal should be read as airport weather and operability burden. Airline-specific delays, gates, and cancellations still need different sources."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_civic_friction",
      "signal_type": "civic_friction",
      "family_name": "Civic friction",
      "basis": "live_observation",
      "score": 63,
      "severity": "medium",
      "tone": "mixed",
      "label": "Civic friction is elevated",
      "reason": "Latest Bangkok district complaint summary shows 28,532 complaint(s), averaging 570.6 per mapped district, about 1.12x the city median district load, 47.1% resolved, and 4.17 stars.",
      "source_count": 50,
      "source_names": [
        "Bangkok Open Data"
      ],
      "freshness_class": "stale",
      "observed_at": "2025-07-31T17:00:00.000Z",
      "expires_at": "2025-08-14T17:00:00.000Z",
      "observation_ids": [
        "bangkok-civic-complaint-stats_bangkok_civic_monthly_complaint_count",
        "bangkok-civic-complaint-stats_bangkok_civic_monthly_resolution_rate",
        "bangkok-civic-complaint-stats_bangkok_civic_star_average"
      ],
      "context_ids": [],
      "note": "Bangkok-wide civic complaint context from the latest public district Traffy summary on Bangkok Open Data."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_official_bus_terminal_support",
      "signal_type": "official_bus_terminal_support",
      "family_name": "Official bus-terminal support",
      "basis": "live_observation",
      "score": 86,
      "severity": "low",
      "tone": "positive",
      "label": "Official bus-terminal support is workable",
      "reason": "The public MOT passenger-terminal master currently matches 3 official terminal name(s) for this entity: SOUTHERN BUS TERMINAL, BOROMMARATCHACHONNANI RD., NORTHERN AND NORTHEASTERN BUS TERMINAL (MO CHIT 2 BUS TERMINAL), BANGKOK BUS TERMINAL (EKAMAI). This is terminal-master support, not live departure, seat, or booking truth.",
      "source_count": 3,
      "source_names": [
        "MOT passenger bus terminals dataset"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-27T02:15:23.481Z",
      "observation_ids": [
        "mot-bus-terminal-support_bangkok_official_bus_terminal_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate destinations with explicit official overland terminal support from places where bus logic is only inferred from general map coverage."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_thai_gold_reference_price",
      "signal_type": "thai_gold_reference_price",
      "family_name": "Thai gold reference price",
      "basis": "live_observation",
      "score": 86,
      "severity": "low",
      "tone": "positive",
      "label": "Thai gold reference is fresh",
      "reason": "The published Gold Traders Association quote currently shows 96.5% gold bar buy at ฿64,400 and sell at ฿64,600 per 1 baht-weight, with ornament base around ฿63,111.08 and ornament sell around ฿65,400. This is a national Thai retail reference, not a local province-specific shop feed.",
      "source_count": 4,
      "source_names": [
        "Gold Traders Association Thailand gold prices"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:05:00.000Z",
      "expires_at": "2026-06-24T10:05:00.000Z",
      "bar_buy_price": 64400,
      "bar_sell_price": 64600,
      "ornament_base_price": 63111.08,
      "ornament_sell_price": 65400,
      "observation_ids": [
        "gta-gold-reference-price_bangkok_gold_bar_965_buy_baht_weight",
        "gta-gold-reference-price_bangkok_gold_bar_965_sell_baht_weight",
        "gta-gold-reference-price_bangkok_gold_ornament_965_base_baht_weight",
        "gta-gold-reference-price_bangkok_gold_ornament_965_sell_baht_weight"
      ],
      "context_ids": [],
      "note": "Use this as the national THB-per-baht-weight quote behind Thailand gold pages and decisions. It is not a live trading feed."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 86,
      "severity": "low",
      "tone": "positive",
      "label": "Transport friction is low",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Bangkok. Namtang structure scores 96 from 4687 nearby stops across 7 mode groups. Official highway support currently scores 88.",
      "source_count": 6,
      "source_names": [
        "Thai Meteorological Department",
        "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",
        "ThaiRSC Road Accident Center",
        "EXAT Traffic Surface",
        "EXAT Data Catalog",
        "Air4Thai / Pollution Control Department",
        "OpenStreetMap Thailand",
        "TAT accommodation data",
        "Google Places hotels",
        "Royal Thai Police station directory and provincial datasets",
        "Tourist Police Bureau",
        "Namtang GTFS"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-24T14:15:23.481Z",
      "observation_ids": [
        "tmd-weather-surface_bangkok_forecast_rain_probability",
        "tmd-weather-surface_bangkok_forecast_heavy_rain_flag",
        "tmd-weather-surface_bangkok_warning_match_count",
        "tmd-weather-surface_bangkok_station_rainfall_today",
        "air4thai-aqi_bangkok_aqi_average",
        "air4thai-aqi_bangkok_pm25_average",
        "thairsc-road-safety_bangkok_road_casualty_total_ytd",
        "thairsc-road-safety_bangkok_road_deaths_ytd",
        "thairsc-road-safety_bangkok_road_injuries_ytd",
        "exat-expressway-support_bangkok_exat_expressway_support_score",
        "air4thai-aqi_bangkok_aqi_average",
        "air4thai-aqi_bangkok_pm25_average",
        "tmd-weather-surface_bangkok_forecast_rain_probability",
        "tmd-weather-surface_bangkok_forecast_temp_min",
        "tmd-weather-surface_bangkok_forecast_temp_max",
        "tmd-weather-surface_bangkok_forecast_heavy_rain_flag",
        "tmd-weather-surface_bangkok_warning_match_count",
        "tmd-weather-surface_bangkok_marine_wind_speed_average",
        "tmd-weather-surface_bangkok_marine_thunderstorm_flag",
        "tmd-weather-surface_bangkok_station_temperature",
        "tmd-weather-surface_bangkok_station_humidity",
        "tmd-weather-surface_bangkok_station_wind_speed",
        "tmd-weather-surface_bangkok_station_rainfall_today",
        "aviationweather-airport-status_bangkok_airport_flight_rules_score",
        "aviationweather-airport-status_bangkok_airport_visibility_score",
        "aviationweather-airport-status_bangkok_airport_forecast_disruption_score",
        "aviationweather-airport-status_bangkok_airport_convective_forecast_flag",
        "thaiwater-water-quality_bangkok_water_quality_status_score",
        "thaiwater-water-quality_bangkok_water_dissolved_oxygen_average",
        "thaiwater-water-quality_bangkok_water_quality_index_average",
        "namtang-transit-structure_bangkok_transport_structure_score",
        "bangkok-rapid-transit-official-pages_bangkok_official_rapid_transit_support_score",
        "mot-bus-terminal-support_bangkok_official_bus_terminal_support_score",
        "bks-station-ticket-support_bangkok_official_intercity_bus_support_score",
        "bks-timetable-search-surface_bangkok_official_intercity_bus_search_support_score",
        "dlt-1584-complaint-stats_bangkok_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_bangkok_official_taxi_oversight_support_score",
        "bangkok-motorcycle-taxi-support_bangkok_official_motorcycle_taxi_support_score",
        "otp-taxi-demand-analytics_bangkok_taxi_pickup_dropoff_support_score",
        "thai-smile-group-branch-locator_bangkok_urban_bus_operator_support_score",
        "exat-expressway-support_bangkok_exat_expressway_support_score",
        "hss-spa-license-support_bangkok_spa_license_support_score",
        "moph-health-facility-support_bangkok_medical_fallback_support_score",
        "gta-gold-reference-price_bangkok_gold_bar_965_buy_baht_weight",
        "gta-gold-reference-price_bangkok_gold_bar_965_sell_baht_weight",
        "gta-gold-reference-price_bangkok_gold_ornament_965_base_baht_weight",
        "gta-gold-reference-price_bangkok_gold_ornament_965_sell_baht_weight",
        "gta-gold-reference-price_bangkok_usd_thb_reference",
        "gta-gold-reference-price_bangkok_gold_spot_reference",
        "gta-gold-reference-price_bangkok_gold_price_change_intraday",
        "gta-gold-reference-price_bangkok_gold_price_change_prev_day",
        "bangkok-civic-complaint-stats_bangkok_civic_monthly_complaint_count",
        "bangkok-civic-complaint-stats_bangkok_civic_monthly_resolution_rate",
        "bangkok-civic-complaint-stats_bangkok_civic_star_average",
        "noise4thai-ambient-noise_bangkok_noise_leq_24h_average",
        "thairsc-road-safety_bangkok_road_deaths_ytd",
        "thairsc-road-safety_bangkok_road_injuries_ytd",
        "thairsc-road-safety_bangkok_road_casualty_total_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_official_motorcycle_taxi_support",
      "signal_type": "official_motorcycle_taxi_support",
      "family_name": "Official motorcycle-taxi support",
      "basis": "live_observation",
      "score": 88,
      "severity": "low",
      "tone": "positive",
      "label": "Official motorcycle-taxi support is strong",
      "reason": "The public DLT/data.go.th Bangkok motorcycle-taxi dataset currently shows 5800 registered stand(s) and 87179 driver(s) for this support scope, across districts such as บางกะปิ, บางเขน, บางรัก, ดุสิต, ห้วยขวาง, ปทุมวัน. This is official last-mile support coverage, not live motorcycle-taxi availability, queue, or dispatch truth.",
      "source_count": 50,
      "source_names": [
        "Bangkok motorcycle taxi stands and drivers"
      ],
      "freshness_class": "stale",
      "observed_at": "2020-07-23T04:25:48.450Z",
      "expires_at": "2020-08-22T04:25:48.450Z",
      "observation_ids": [
        "bangkok-motorcycle-taxi-support_bangkok_official_motorcycle_taxi_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish Bangkok hotel areas, terminals, and airport-linked anchors with stronger official motorcycle-taxi last-mile coverage from places that rely only on rail, taxi, or generic city map logic."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_urban_bus_operator_support",
      "signal_type": "urban_bus_operator_support",
      "family_name": "Urban bus-operator support",
      "basis": "live_observation",
      "score": 88,
      "severity": "low",
      "tone": "positive",
      "label": "Urban bus-operator support is strong",
      "reason": "The public Thai Smile Group locator currently shows 18 nearby branch or depot location(s) for this entity: สำนักงานใหญ่, อู่ตลิ่งชัน, อู่ท่าอิฐ, อู่บึงกุ่ม, อู่ปากน้ำ, อู่ปากเกร็ด. This is operator-footprint support, not realtime vehicle, ETA, crowding, or outage truth.",
      "source_count": 18,
      "source_names": [
        "Thai Smile Group branch and depot locator"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-26T02:15:23.481Z",
      "observation_ids": [
        "thai-smile-group-branch-locator_bangkok_urban_bus_operator_support_score"
      ],
      "context_ids": [],
      "note": "Use this as operator-footprint support, not live bus operation, ETA, crowding, or outage truth."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_highway_transfer_friction",
      "signal_type": "highway_transfer_friction",
      "family_name": "Highway transfer friction",
      "basis": "derived_live",
      "score": 88,
      "severity": "low",
      "tone": "positive",
      "label": "Highway transfer friction is low",
      "reason": "Public road-support context currently shows 0 matched DOH CCTV row marker(s), plus 5 official EXAT support page(s) exposing 15 expressway-support marker(s). The strongest corridor fit here is Bangkok urban transfer spine; Bangkok -> Pattaya / Eastern Seaboard; Bangkok -> Hua Hin / southbound coast; Bangkok -> Ayutthaya / central northbound; Bangkok -> Kanchanaburi / westbound nature loop. This is official observability and support context, not live speed, queue, lane, or incident truth.",
      "source_count": 1,
      "source_names": [
        "EXAT Traffic Surface",
        "EXAT Data Catalog"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.132Z",
      "expires_at": "2026-05-16T11:11:30.132Z",
      "observation_ids": [
        "exat-expressway-support_bangkok_exat_expressway_support_score"
      ],
      "context_ids": [],
      "note": "Use this as overland support context behind Bangkok urban transfer spine, Bangkok -> Pattaya / Eastern Seaboard, Bangkok -> Hua Hin / southbound coast, Bangkok -> Ayutthaya / central northbound, Bangkok -> Kanchanaburi / westbound nature loop. It should not be mistaken for a live navigation feed."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_road_safety_risk",
      "signal_type": "road_safety_risk",
      "family_name": "Road safety risk",
      "basis": "live_observation",
      "score": 90,
      "severity": "low",
      "tone": "positive",
      "label": "Road safety burden is low",
      "reason": "315 deaths and 61,592 injuries are attached to this province proxy year to date. Province burden percentile 0",
      "source_count": 1,
      "source_names": [
        "ThaiRSC Road Accident Center"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:00:00.000Z",
      "expires_at": "2026-05-16T11:00:00.000Z",
      "observation_ids": [
        "thairsc-road-safety_bangkok_road_casualty_total_ytd",
        "thairsc-road-safety_bangkok_road_deaths_ytd",
        "thairsc-road-safety_bangkok_road_injuries_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a province-burden signal, not a per-road or per-kilometer crash model."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_thai_gold_fx_pressure",
      "signal_type": "thai_gold_fx_pressure",
      "family_name": "Thai gold FX pressure",
      "basis": "derived_live",
      "score": 90,
      "severity": "low",
      "tone": "positive",
      "label": "Thai gold FX pressure is calm",
      "reason": "Published GTA USD/THB context shows USD/THB around 33.37, intraday quote change -200 THB, and previous-day change -200 THB. GTA spot reference is 4,088. This is pricing context, not investment advice.",
      "source_count": 4,
      "source_names": [
        "Gold Traders Association Thailand gold prices"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:05:00.000Z",
      "expires_at": "2026-06-24T10:05:00.000Z",
      "observation_ids": [
        "gta-gold-reference-price_bangkok_usd_thb_reference",
        "gta-gold-reference-price_bangkok_gold_price_change_intraday",
        "gta-gold-reference-price_bangkok_gold_price_change_prev_day",
        "gta-gold-reference-price_bangkok_gold_spot_reference"
      ],
      "context_ids": [],
      "note": "Use this to explain why the domestic Thai quote feels calmer or more pressured. It does not replace personal investment or dealer advice."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_thai_gold_buying_friction",
      "signal_type": "thai_gold_buying_friction",
      "family_name": "Thai gold buying friction",
      "basis": "seed_plus_live",
      "score": 90,
      "severity": "low",
      "tone": "positive",
      "label": "Thai gold buying friction is low",
      "reason": "Bangkok / Yaowarat is the strongest public comparison-shopping base because shop density, receipts, and buyback familiarity are easiest to compare. Still compare workmanship, receipt detail, and buyback terms shop by shop.",
      "source_count": 1,
      "source_names": [
        "Gold Traders Association Thailand gold prices"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:05:00.000Z",
      "expires_at": "2026-06-24T10:05:00.000Z",
      "observation_ids": [
        "gta-gold-reference-price_bangkok_gold_bar_965_sell_baht_weight"
      ],
      "context_ids": [],
      "note": "This is city buying-context friction around the national Thai quote. It is not a local price feed or a shop-quality guarantee."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_aqi_risk",
      "signal_type": "aqi_risk",
      "family_name": "AQI risk",
      "basis": "live_observation",
      "score": 92,
      "severity": "low",
      "tone": "positive",
      "label": "AQI risk is very low",
      "reason": "Average AQI is 19.9 across 81 supporting stations. Odeon Circus reached AQI 33",
      "source_count": 81,
      "source_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"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_bangkok_aqi_average"
      ],
      "context_ids": [],
      "note": "Derived from Bangkok public station coverage."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_official_intercity_bus_support",
      "signal_type": "official_intercity_bus_support",
      "family_name": "Official intercity-bus support",
      "basis": "live_observation",
      "score": 92,
      "severity": "low",
      "tone": "positive",
      "label": "Official intercity-bus support is strong",
      "reason": "The public BKS station and ticket-point dataset currently matches 7 official station or ticket-point name(s) for this entity: สถานีขนส่งผู้โดยสารกรุงเทพ (จตุจักร)/สำนักงานใหญ่, สถานีบริการขนส่งสาธารณะขนาดเล็ก, สถานีขนส่งผู้โดยสารกรุงเทพ (เอกมัย), สถานีขนส่งผู้โดยสารกรุงเทพ (สายใต้บรมราชชนนี), งานบริการน้ำมัน (สายใต้ปิ่นเกล้า), จุดจำหน่ายค่าธรรมเนียม สถานีขนส่งผู้โดยสารกรุงเทพ (สายใต้ปิ่นเกล้า). This is official intercity-bus support, not live departure, seat, or booking truth.",
      "source_count": 7,
      "source_names": [
        "Transport Co. / BKS station and ticket-point locations"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:43.824Z",
      "expires_at": "2026-05-22T11:11:43.824Z",
      "observation_ids": [
        "bks-station-ticket-support_bangkok_official_intercity_bus_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with explicit official BKS overland support from places where bus logic only comes from general terminal or map layers."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_taxi_pickup_dropoff_support",
      "signal_type": "taxi_pickup_dropoff_support",
      "family_name": "Taxi pickup and dropoff support",
      "basis": "live_observation",
      "score": 92,
      "severity": "low",
      "tone": "positive",
      "label": "Taxi pickup and dropoff support is strong",
      "reason": "The latest public OTP taxi analytics month currently matches 475 ranked hotspot row(s) for this city-total scope, including stops such as อู่หมอชิต 2, เซ็นทรัลปิ่นเกล้า, เอ็นมาร์คพลาซ่า(น้อมจิตต์), อาคารผู้โดยสาร ชั้น 3, อาคารผู้โดยสาร 1 ชั้น 1 ประตู 6, ตรงข้ามเซ็นทรัลลาดพร้าว. The same published month shows about 84522 citywide passenger trips and 1170 taxis per day in the aggregate OTP GPS series. This is monthly aggregate pickup/dropoff and demand context, not live dispatch, ETA, queue, or raw trip truth.",
      "source_count": 475,
      "source_names": [
        "OTP taxi GPS trip analytics",
        "OTP top taxi pickup and dropoff areas"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:35.449Z",
      "expires_at": "2026-05-22T11:11:35.449Z",
      "observation_ids": [
        "otp-taxi-demand-analytics_bangkok_taxi_pickup_dropoff_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate Bangkok bases, rail nodes, terminals, and airport corridors that the public OTP monthly hotspot rankings consistently treat as taxi-active from places where taxi convenience is only assumed from generic city geography."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_official_transport_complaint_support",
      "signal_type": "official_transport_complaint_support",
      "family_name": "Official transport complaint support",
      "basis": "live_observation",
      "score": 94,
      "severity": "low",
      "tone": "positive",
      "label": "Official transport complaint support is strong",
      "reason": "The public DLT 1584 fiscal-year 2569 workbook currently shows 11 relevant mode(s) and 7 active month(s) for this bangkok-urban profile, including รถแท็กซี่, รถสามล้อรับจ้าง, รถสี่ล้อเล็กรับจ้าง, รถจักรยานยนต์รับจ้าง, ขสมก., รถร่วมบริการ(ธรรมดา). Current leading complaint reasons include แสดงกิริยาวาจาไม่สุภาพ, ขับรถประมาทน่าหวาดเสียว, ปฏิเสธไม่รับผู้โดยสาร, ไม่หยุดรับ-ส่งผู้โดยสารที่ป้าย. This is official complaint recourse and burden context, not local realtime service quality or dispatch truth.",
      "source_count": 11,
      "source_names": [
        "DLT 1584 public-transport complaints"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.831Z",
      "expires_at": "2026-05-22T11:11:30.831Z",
      "observation_ids": [
        "dlt-1584-complaint-stats_bangkok_official_transport_complaint_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with clearer official passenger-protection recourse and broad public-transport complaint coverage from places where transport confidence relies only on structural map layers."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_outdoor_comfort",
      "signal_type": "outdoor_comfort",
      "family_name": "Outdoor comfort",
      "basis": "live_observation",
      "score": 95,
      "severity": "low",
      "tone": "positive",
      "label": "Outdoor comfort is excellent",
      "reason": "AQI averages 19.9 and PM2.5 averages 11.6 µg/m3. This comfort layer is still air-first, but it now sits alongside live rain, water, noise, and road-risk families.",
      "source_count": 81,
      "source_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"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_bangkok_aqi_average",
        "air4thai-aqi_bangkok_pm25_average"
      ],
      "context_ids": [],
      "note": "Outdoor comfort stays deliberately air-first so users can see how weather and comfort layers disagree instead of hiding them inside one score."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_rail_feasibility",
      "signal_type": "rail_feasibility",
      "family_name": "Rail feasibility",
      "basis": "derived_live",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Rail feasibility is strong",
      "reason": "Public transport structure around this destination shows 4687 mapped stop(s), 204 rail-linked stop(s), 14 airport-link stop(s), and 4345 bus-linked stop(s). This is rail-support context, not live seat, delay, or operator-disruption truth.",
      "source_count": 4687,
      "source_names": [
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T19:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_bangkok_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Use this to judge whether a rail-linked base or route is structurally real before treating train logic as free convenience."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_official_intercity_bus_search_support",
      "signal_type": "official_intercity_bus_search_support",
      "family_name": "Official intercity-bus search support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Official intercity-bus search support is strong",
      "reason": "The public BKS booking/search destination-selector surface currently shows 617 relevant official destination option(s) for this entity across 2 Bangkok-origin search surface(s), including Krabi, Khlongthom, Ko Lanta, Khaophanom, Nueakhlong, BKK (EKKAMAI). This is official route-search support, not live departures, seats, or booking inventory truth.",
      "source_count": 617,
      "source_names": [
        "Transport Co. / BKS timetable resources"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:48Z",
      "expires_at": "2026-05-18T11:11:48.000Z",
      "observation_ids": [
        "bks-timetable-search-surface_bangkok_official_intercity_bus_search_support_score"
      ],
      "context_ids": [],
      "note": "Use this to tell whether a place is actually present in the official BKS public route-search surface from Bangkok, not just near a terminal or ticket office."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_official_taxi_oversight_support",
      "signal_type": "official_taxi_oversight_support",
      "family_name": "Official taxi-oversight support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Official taxi-oversight support is strong",
      "reason": "The public DLT GPS passenger pages currently expose 7 passenger-support marker(s), including registered vehicle locator, complaint reporting, passenger-station search, improved search and tracking, improved map display, while the Taxi OK / VIP project page shows 13 public notice download(s) and regulatory markers such as project workflow, taxi communication-center rules, driver-history rules, trip-recorder rules, safety-equipment rules. This is official regulated-taxi oversight support, not live vehicle location, dispatch, ETA, or raw taxi GPS truth.",
      "source_count": 16,
      "source_names": [
        "DLT GPS passenger and complaint app",
        "DLT Taxi OK / Taxi VIP project"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:32.530Z",
      "expires_at": "2026-05-18T11:11:32.530Z",
      "observation_ids": [
        "dlt-gps-taxi-support_bangkok_official_taxi_oversight_support_score"
      ],
      "context_ids": [],
      "note": "Use this to show where official regulated-taxi oversight, complaint, and station-search support materially improves confidence around city-base, airport-linked, and last-mile movement without confusing it for live taxi operations."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_spa_license_support",
      "signal_type": "spa_license_support",
      "family_name": "Spa license support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Spa license support is strong",
      "reason": "Public HSS wellness-license support currently shows 2 official support page(s) and 4 spa, massage, or health-establishment marker(s) behind this traveler anchor. This is official license-lookup context, not live booking, treatment quality, or venue popularity truth.",
      "source_count": 1,
      "source_names": [
        "HSS Health Establishment Directory",
        "HSS Spa Premium"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:35.580Z",
      "expires_at": "2026-05-18T11:11:35.580Z",
      "observation_ids": [
        "hss-spa-license-support_bangkok_spa_license_support_score"
      ],
      "context_ids": [],
      "note": "Bangkok uses public HSS license-lookup and spa-premium surfaces as wellness-license confidence behind spa and massage planning."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_medical_fallback_support",
      "signal_type": "medical_fallback_support",
      "family_name": "Medical fallback support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Medical fallback support is strong",
      "reason": "Public MOPH and HS4 facility support currently shows 2 official support page(s), 4 hospital or facility marker(s), and 61 dataset/resource marker(s) behind this traveler anchor. This is medical fallback context, not live bed, wait-time, dispatch, or specialist-availability truth.",
      "source_count": 1,
      "source_names": [
        "MOPH Health Facility Datasets"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:37.864Z",
      "expires_at": "2026-05-18T11:11:37.864Z",
      "observation_ids": [
        "moph-health-facility-support_bangkok_medical_fallback_support_score"
      ],
      "context_ids": [],
      "note": "Bangkok uses public MOPH facility surfaces as strong medical-fallback context for travel decisions."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "7 joined atlas sources and 48 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 7,
      "source_names": [
        "Air4Thai / Pollution Control Department",
        "Thai Meteorological Department",
        "OpenStreetMap Thailand",
        "TAT accommodation data",
        "Google Places hotels",
        "Royal Thai Police station directory and provincial datasets",
        "Tourist Police Bureau"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-24T14:15:23.481Z",
      "observation_ids": [
        "air4thai-aqi_bangkok_aqi_average",
        "air4thai-aqi_bangkok_pm25_average",
        "tmd-weather-surface_bangkok_forecast_rain_probability",
        "tmd-weather-surface_bangkok_forecast_temp_min",
        "tmd-weather-surface_bangkok_forecast_temp_max",
        "tmd-weather-surface_bangkok_forecast_heavy_rain_flag",
        "tmd-weather-surface_bangkok_warning_match_count",
        "tmd-weather-surface_bangkok_marine_wind_speed_average",
        "tmd-weather-surface_bangkok_marine_thunderstorm_flag",
        "tmd-weather-surface_bangkok_station_temperature",
        "tmd-weather-surface_bangkok_station_humidity",
        "tmd-weather-surface_bangkok_station_wind_speed",
        "tmd-weather-surface_bangkok_station_rainfall_today",
        "aviationweather-airport-status_bangkok_airport_flight_rules_score",
        "aviationweather-airport-status_bangkok_airport_visibility_score",
        "aviationweather-airport-status_bangkok_airport_forecast_disruption_score",
        "aviationweather-airport-status_bangkok_airport_convective_forecast_flag",
        "thaiwater-water-quality_bangkok_water_quality_status_score",
        "thaiwater-water-quality_bangkok_water_dissolved_oxygen_average",
        "thaiwater-water-quality_bangkok_water_quality_index_average",
        "namtang-transit-structure_bangkok_transport_structure_score",
        "bangkok-rapid-transit-official-pages_bangkok_official_rapid_transit_support_score",
        "mot-bus-terminal-support_bangkok_official_bus_terminal_support_score",
        "bks-station-ticket-support_bangkok_official_intercity_bus_support_score",
        "bks-timetable-search-surface_bangkok_official_intercity_bus_search_support_score",
        "dlt-1584-complaint-stats_bangkok_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_bangkok_official_taxi_oversight_support_score",
        "bangkok-motorcycle-taxi-support_bangkok_official_motorcycle_taxi_support_score",
        "otp-taxi-demand-analytics_bangkok_taxi_pickup_dropoff_support_score",
        "thai-smile-group-branch-locator_bangkok_urban_bus_operator_support_score",
        "exat-expressway-support_bangkok_exat_expressway_support_score",
        "hss-spa-license-support_bangkok_spa_license_support_score",
        "moph-health-facility-support_bangkok_medical_fallback_support_score",
        "gta-gold-reference-price_bangkok_gold_bar_965_buy_baht_weight",
        "gta-gold-reference-price_bangkok_gold_bar_965_sell_baht_weight",
        "gta-gold-reference-price_bangkok_gold_ornament_965_base_baht_weight",
        "gta-gold-reference-price_bangkok_gold_ornament_965_sell_baht_weight",
        "gta-gold-reference-price_bangkok_usd_thb_reference",
        "gta-gold-reference-price_bangkok_gold_spot_reference",
        "gta-gold-reference-price_bangkok_gold_price_change_intraday",
        "gta-gold-reference-price_bangkok_gold_price_change_prev_day",
        "bangkok-civic-complaint-stats_bangkok_civic_monthly_complaint_count",
        "bangkok-civic-complaint-stats_bangkok_civic_monthly_resolution_rate",
        "bangkok-civic-complaint-stats_bangkok_civic_star_average",
        "noise4thai-ambient-noise_bangkok_noise_leq_24h_average",
        "thairsc-road-safety_bangkok_road_deaths_ytd",
        "thairsc-road-safety_bangkok_road_injuries_ytd",
        "thairsc-road-safety_bangkok_road_casualty_total_ytd"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_urban_rapid_transit_support",
      "signal_type": "urban_rapid_transit_support",
      "family_name": "Urban rapid-transit support",
      "basis": "live_observation",
      "score": 98,
      "severity": "low",
      "tone": "positive",
      "label": "Official rapid-transit support is strong",
      "reason": "The latest public BTS and MRTA route-page snapshot shows 2 official page(s), 6 BTS route or journey-planning feature(s), 8 MRTA route or service feature(s), and named MRT lines such as Blue Line, Purple Line, Yellow Line, Pink Line. This is official route-map and service-page support, not live headway, crowding, or outage truth.",
      "source_count": 2,
      "source_names": [
        "BTS SkyTrain system maps and service pages",
        "MRT / MRTA metro maps and service pages"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:29.575Z",
      "expires_at": "2026-05-17T11:11:29.575Z",
      "observation_ids": [
        "bangkok-rapid-transit-official-pages_bangkok_official_rapid_transit_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate Bangkok bases with clearly supported rapid-transit logic from areas that only look easy on a generic city map."
    }
  ]
}