{
  "schema_version": "1.0",
  "baseline": "V4",
  "updated_at": "2026-04-22",
  "owner_session": "B",
  "phase": "Journey Intelligence System (post-12F · B-owned contract)",
  "purpose_th": "Dashboard contract (journey-centric) · distinct from operational dashboard_contract.json (Phase 12E) · 7 dashboard families สำหรับวัด journey · chart patterns · refresh tier · filters · benchmark/anomaly/alert thresholds",
  "purpose_en": "Dashboard contract (journey-centric) · distinct from the operational dashboard_contract.json (Phase 12E) · 7 dashboard families measuring journeys · chart patterns · refresh tier · filters · benchmark/anomaly/alert thresholds",
  "distinction_from_phase12e":"dashboard_contract.json (12E) = 17 operational dashboards (city vital signs · merchant maturity · governance KPI scoreboard etc.). This file = journey-centric dashboards (journey funnel · journey value · media consumption · queue · approval · tenant rollout · waiting list).",
  "hard_rules": [
    "Dashboard id ใช้ pattern db-<slug> · lowercase · hyphen",
    "ทุก chart ใช้ metric จาก journey_metrics_contract.json เท่านั้น",
    "ทุก filter field ต้องอ้าง context_dimensions จาก journey_log_mapping",
    "Realtime dashboard = refresh ≤30s · near-realtime = 1-5 min · batch = hourly/daily",
    "ห้าม label dashboard live ถ้าไม่มี runtime ingest"
  ],
  "dashboards": [
    {
      "id":"db-exec-value",
      "family":"A",
      "label_th":"Executive Journey Value Dashboard","label_en":"Executive Journey Value Dashboard",
      "audience":["executive","investor"],
      "refresh_tier":"near-realtime (5 min · near-realtime for revenue_generated_if_any)",
      "purpose_th":"ตอบคำถาม 'journey ไหนสร้างมูลค่าสูงสุดวันนี้/สัปดาห์นี้/เดือนนี้' · แสดง top journeys by value · conversion · drop-off · trend",
      "primary_metrics":["value_generated","revenue_generated_if_any","conversion_rate","engagement_value","retention_value","ecosystem_value"],
      "charts":[
        {"id":"c-exec-top-journeys","type":"leaderboard","metric":"value_generated","grouping":"journey_code","top_n":10,"reason":"fastest exec read · sorted by total value today"},
        {"id":"c-exec-value-trend","type":"timeline","metric":"value_generated","window":"rolling 28d","reason":"see trend · compare vs benchmark"},
        {"id":"c-exec-funnel","type":"funnel","metric":"started_count → completed_count","grouping":"top journey","reason":"show conversion steps · identify drop-off"},
        {"id":"c-exec-value-family-breakdown","type":"stacked-bar","metric":"value_generated by value-family","grouping":"direct-revenue · engagement · retention · ops · gov · ecosystem · data-enrichment","reason":"decompose where value is coming from"},
        {"id":"c-exec-tenant-split","type":"tree-map","metric":"value_generated","grouping":"tenant_id","reason":"multi-tenant overview"}
      ],
      "filters":["time range","tenant","journey_type","device","language"],
      "benchmark":{"source":"ci-historical-p50","alert":"-20% vs 7-day avg → warning · -40% → critical"},
      "honest_note_th":"ทุกค่ารอ runtime ingest · 0 dashboards live ในขณะนี้"
    },
    {
      "id":"db-ux-funnel",
      "family":"B",
      "label_th":"Product / UX Journey Funnel Dashboard","label_en":"Product / UX Journey Funnel Dashboard",
      "audience":["product","ux","governance"],
      "refresh_tier":"near-realtime (5 min)",
      "purpose_th":"Funnel per journey · starts → step progression → abandonment → resume · duration distribution · hint effectiveness",
      "primary_metrics":["started_count","step_count","completed_count","abandoned_count","resumed_count","conversion_rate","step_dropoff_rate","avg_duration","p50_duration","p95_duration"],
      "charts":[
        {"id":"c-ux-funnel","type":"funnel","metric":"started_count → step_count → completed_count","grouping":"per journey","reason":"classic conversion funnel"},
        {"id":"c-ux-step-dropoff","type":"stacked-bar","metric":"step_dropoff_rate","grouping":"per step","reason":"identify weak step"},
        {"id":"c-ux-duration-strip","type":"duration-percentile-strip","metric":"p50/p75/p95","reason":"latency distribution visible at a glance"},
        {"id":"c-ux-resume-cohort","type":"cohort-chart","metric":"resumed_count","grouping":"entry day","reason":"retention within journey"},
        {"id":"c-ux-state-matrix","type":"state-transition-matrix","metric":"transitions step-i → step-j","grouping":"per journey","reason":"full state map · not just straight funnel"},
        {"id":"c-ux-hint-effectiveness","type":"conversion-ladder","metric":"completed_count with hint vs without","grouping":"journey × hint-variant","reason":"A/B of hint · link to future hint system"}
      ],
      "filters":["time range","journey_code","device","language","tenant","entrypoint"],
      "benchmark":{"source":"A-side-target","alert":"conversion_rate drop >15% vs baseline → warning"}
    },
    {
      "id":"db-media-consumption",
      "family":"C",
      "label_th":"Media / Embed Consumption Dashboard","label_en":"Media / Embed Consumption Dashboard",
      "audience":["marketing","product","content-team"],
      "refresh_tier":"realtime (play start) + batch-hourly (completion/dwell)",
      "purpose_th":"Watch start · completion · dwell · embed return · external vs internal performance",
      "primary_metrics":["media_start_count","media_completion_rate","media_dwell_p95","embed_return_rate","external_vs_internal_media_ratio"],
      "charts":[
        {"id":"c-media-watch-starts","type":"timeline","metric":"media_start_count","reason":"realtime pulse of attention"},
        {"id":"c-media-completion-heatmap","type":"heatmap","metric":"media_completion_rate","grouping":"media_type × hour-of-day","reason":"when do people finish what"},
        {"id":"c-media-dwell-boxplot","type":"box-plot","metric":"media_dwell","grouping":"media_type","reason":"variance per type"},
        {"id":"c-media-embed-return","type":"gauge","metric":"embed_return_rate","reason":"is partner embed bringing people back"},
        {"id":"c-media-internal-external","type":"stacked-bar","metric":"external_vs_internal_media_ratio","grouping":"journey_type","reason":"where attention leaks externally"}
      ],
      "filters":["time range","media_type","tenant","content_category"],
      "benchmark":{"source":"contract-proposed","alert":"embed_return_rate <0.40 → warning · <0.20 → critical"}
    },
    {
      "id":"db-operations-queue",
      "family":"D",
      "label_th":"Operational / Queue Dashboard","label_en":"Operational / Queue Dashboard",
      "audience":["operations","city-manager","governance"],
      "refresh_tier":"realtime (queue_active) + near-realtime (SLA)",
      "purpose_th":"Active queue · overdue · SLA risk · triage throughput · daily 07:00 queue",
      "primary_metrics":["queue_active","queue_overdue","queue_sla_risk","queue_triage_throughput","active_now"],
      "charts":[
        {"id":"c-queue-active-tile","type":"tile-board","metric":"queue_active","grouping":"queue type","reason":"at-a-glance operator dashboard"},
        {"id":"c-queue-sla-gauge","type":"gauge","metric":"queue_overdue / queue_active","reason":"SLA pressure"},
        {"id":"c-queue-throughput","type":"timeline","metric":"queue_triage_throughput","reason":"capacity read"},
        {"id":"c-queue-breach-table","type":"drill-down-table","metric":"queue items past SLA","reason":"actionable operator list"}
      ],
      "filters":["queue type (daily-07 · inbox · case)","tenant","severity"],
      "benchmark":{"source":"A-side-target","alert":"queue_overdue / queue_active > 0.10 → warning · > 0.25 → critical (PagerDuty P1 per CLAUDE.md)"}
    },
    {
      "id":"db-governance",
      "family":"E",
      "label_th":"Governance / Approval / Publish Dashboard","label_en":"Governance / Approval / Publish Dashboard",
      "audience":["governance","legal","DPO","founder"],
      "refresh_tier":"near-realtime",
      "purpose_th":"Approval states · expired approvals · sensitive-surface flows · publish pipeline · blocked journeys",
      "primary_metrics":["approval_active_count","approval_expired_count","sensitive_surface_flow_count","publish_pipeline_throughput","blocked_journeys_by_gov"],
      "charts":[
        {"id":"c-gov-sankey","type":"sankey-flow","metric":"publish_stage_transitions","grouping":"from_stage → to_stage","reason":"full publish pipeline picture"},
        {"id":"c-gov-expired","type":"tile-board","metric":"approval_expired_count","reason":"red-alert tile"},
        {"id":"c-gov-sensitive","type":"timeline","metric":"sensitive_surface_flow_count","reason":"attention on sensitive-surface volume"},
        {"id":"c-gov-blocked","type":"drill-down-table","metric":"blocked_journeys_by_gov","grouping":"journey × tenant × block_reason","reason":"actionable governance list"}
      ],
      "filters":["time range","tenant","scope (tenant-only · shared · marketplace · global)","sensitive only"],
      "benchmark":{"source":"A-side-target","alert":"approval_expired_count > 0 → warning · sensitive_surface without dual-approval past SLA → critical"}
    },
    {
      "id":"db-tenant-rollout",
      "family":"F",
      "label_th":"Tenant / Rollout / Visibility Dashboard","label_en":"Tenant / Rollout / Visibility Dashboard",
      "audience":["product","operations","tenant-admin","partner"],
      "refresh_tier":"batch-daily + near-realtime (cohort snapshot)",
      "purpose_th":"Journeys by tenant · rollout cohort · denied/hidden/gated surfaces · value by tenant/scope",
      "primary_metrics":["journey_count_by_tenant","rollout_cohort_penetration","value_generated by tenant","blocked_journeys_by_gov"],
      "charts":[
        {"id":"c-tenant-journey-tree","type":"tree-map","metric":"journey_count_by_tenant","reason":"tenant share at a glance"},
        {"id":"c-tenant-rollout","type":"cohort-chart","metric":"rollout_cohort_penetration","reason":"rollout health per cohort"},
        {"id":"c-tenant-value","type":"leaderboard","metric":"value_generated by tenant","reason":"which tenant drives value"},
        {"id":"c-tenant-gated","type":"stacked-bar","metric":"gated journeys by scope","grouping":"tenant × scope","reason":"visibility of gating"}
      ],
      "filters":["tenant","cohort","scope","rollout stage"],
      "benchmark":{"source":"contract-proposed"}
    },
    {
      "id":"db-waiting-list",
      "family":"G",
      "label_th":"Journey Creation / Waiting List Dashboard","label_en":"Journey Creation / Waiting List Dashboard",
      "audience":["product","governance","tenant-admin"],
      "refresh_tier":"batch-daily",
      "purpose_th":"Waiting-list journeys · proposed journeys · readiness score · blocked dependencies · promotion candidates",
      "primary_metrics":["waiting_list_readiness","proposal_promotion_velocity","journey counts by current_state"],
      "charts":[
        {"id":"c-wait-readiness","type":"conversion-ladder","metric":"journeys by current_state (proposal → waiting-list → contract-only → runtime-partial → runtime-live)","reason":"promotion pipeline"},
        {"id":"c-wait-readiness-score","type":"duration-percentile-strip","metric":"readiness_score distribution","reason":"which journeys close to ready"},
        {"id":"c-wait-blockers","type":"network-map","metric":"blocked dependencies","grouping":"journey × missing-dependency","reason":"see what blocks what"},
        {"id":"c-wait-promotion-velocity","type":"timeline","metric":"proposal_promotion_velocity","reason":"trend of moving forward"}
      ],
      "filters":["current_state","owner_side (A/B/shared)","journey_type"],
      "benchmark":{"source":"contract-proposed"}
    }
  ],
  "chart_pattern_catalog": [
    {"pattern":"funnel","best_for":"ordered step conversion","metrics":["started_count","step_count","completed_count"]},
    {"pattern":"sankey-flow","best_for":"multi-path state transitions","metrics":["publish_stage_transitions","journey branches"]},
    {"pattern":"state-transition-matrix","best_for":"non-linear journeys · multi-state UX","metrics":["transitions between steps"]},
    {"pattern":"stacked-bar","best_for":"decomposition by dimension","metrics":["value breakdown","gated by scope"]},
    {"pattern":"heatmap","best_for":"time × category","metrics":["media_completion by hour","queue overdue by day × tenant"]},
    {"pattern":"timeline","best_for":"trend over time","metrics":["started_count","value_generated","throughput"]},
    {"pattern":"cohort-chart","best_for":"retention/return by entry cohort","metrics":["resumed_count","rollout_cohort_penetration"]},
    {"pattern":"retention-curve","best_for":"% of users returning over N days","metrics":["resumed_count weekly"]},
    {"pattern":"conversion-ladder","best_for":"step-wise qualitative ladder (e.g. proposal → live)","metrics":["promotion pipeline"]},
    {"pattern":"duration-percentile-strip","best_for":"latency distribution","metrics":["p50/p75/p95"]},
    {"pattern":"box-plot","best_for":"distribution with outliers","metrics":["media_dwell"]},
    {"pattern":"network-map","best_for":"dependency graphs","metrics":["blocked deps"]},
    {"pattern":"tree-map","best_for":"hierarchical share","metrics":["value by tenant · journey_count by tenant"]},
    {"pattern":"leaderboard","best_for":"top-N ranking","metrics":["top journeys by value_generated"]},
    {"pattern":"tile-board","best_for":"critical at-a-glance operational state","metrics":["queue_active · approval_expired"]},
    {"pattern":"gauge","best_for":"single ratio vs threshold","metrics":["embed_return_rate · SLA adherence"]},
    {"pattern":"drill-down-table","best_for":"actionable operator/governance list","metrics":["breach table · blocked journeys table"]}
  ],
  "honest_note_th":"ทุก dashboard เป็น contract-only ขณะนี้ · ไม่มี data ingest จริง · A ต้อง instrument event ตาม journey_log_mapping ก่อน dashboard จึงจะมีข้อมูลแสดง · ห้ามใช้ benchmark_source ที่เป็น contract-proposed เป็น hard alert จนกว่าจะ tune หลัง pilot"
}
