// data.jsx — content data for maplesmile demo landing
// Personas, locations, channels, ARIA trajectory.

const LOCATIONS = [
  {
    id: "tuxedo",
    city: "Winnipeg",
    neighborhood: "Tuxedo",
    address: "2151 Corydon Ave, Winnipeg, MB R3P 0A6",
    phone: "+1 204 555 0181",
    hours: "Mon–Fri 7a–7p · Sat 8a–2p",
    lead: "Dr. Amara Chen, DMD",
    photoNote: "Reception · warm oak + brass",
    chairs: 8,
    languages: ["EN", "FR-CA", "Tagalog"],
  },
  {
    id: "stvital",
    city: "Winnipeg",
    neighborhood: "St. Vital",
    address: "1225 St. Mary's Rd, Winnipeg, MB R2M 3T9",
    phone: "+1 204 555 0182",
    hours: "Mon–Fri 8a–8p · Sat 9a–3p",
    lead: "Dr. Owen Penner, DDS",
    photoNote: "Family op · clerestory daylight",
    chairs: 6,
    languages: ["EN", "FR-CA", "Punjabi"],
  },
  {
    id: "brandon",
    city: "Brandon",
    neighborhood: "Downtown",
    address: "734 Rosser Ave, Brandon, MB R7A 0K8",
    phone: "+1 204 555 0183",
    hours: "Mon–Thu 7a–6p · Fri 8a–4p",
    lead: "Dr. Priya Bedi, DMD",
    photoNote: "Quiet street-front · 1920s façade",
    chairs: 5,
    languages: ["EN", "Hindi", "Ukrainian"],
  },
  {
    id: "steinbach",
    city: "Steinbach",
    neighborhood: "Main Street",
    address: "281 Main St, Steinbach, MB R5G 1Y8",
    phone: "+1 204 555 0184",
    hours: "Mon–Fri 8a–6p · Sat 9a–1p",
    lead: "Dr. Lucas Friesen, DDS",
    photoNote: "New build · sage cabinetry",
    chairs: 6,
    languages: ["EN", "Plautdietsch", "Spanish"],
  },
];

const CHANNELS = [
  { key: "wa",     label: "WhatsApp",  stat: "48%", note: "of inbound · highest reply rate" },
  { key: "sms",    label: "SMS",       stat: "27%", note: "recall + day-of confirmations" },
  { key: "tg",     label: "Telegram",  stat: "11%", note: "FR-CA preferred · St. Vital" },
  { key: "web",    label: "Webchat",   stat: "9%",  note: "new-patient intake · 24/7" },
  { key: "email",  label: "Email",     stat: "5%",  note: "treatment plans + invoices" },
];

const PERSONAS = [
  {
    id: "sarah",
    name: "Sarah M.",
    age: 31,
    tag: "New patient",
    channel: "SMS → Webchat",
    quote: "I chipped a tooth last night and they had me in a chair by 10:30 the next morning. I didn't have to repeat my story once.",
    location: "Winnipeg · Tuxedo",
    history: "1 visit · 3 messages",
    arc: "Pain-first triage → urgent slot → consent capture → follow-up.",
  },
  {
    id: "robert",
    name: "Robert K.",
    age: 58,
    tag: "3-year patient · multi-channel",
    channel: "WA · SMS · Email",
    quote: "They text me on WhatsApp for my cleanings, email me the plan, and call only when it actually matters.",
    location: "Brandon · Downtown",
    history: "11 visits · 84 messages across 3 channels",
    arc: "Recall cadence honored · prefers EN · opted out of marketing.",
  },
  {
    id: "marie",
    name: "Marie L.",
    age: 42,
    tag: "FR-CA · Telegram",
    channel: "Telegram",
    quote: "Je n'ai pas besoin de changer de langue. Ils me répondent en français, même à 22 h.",
    location: "Winnipeg · St. Vital",
    history: "4 visits · 22 messages",
    arc: "Locale-aware routing · after-hours triage handed to on-call.",
  },
];

// The headline ARIA trajectory the site uses for the showcase demo.
// Patient: Sarah M. · New-patient chipped-tooth · routed to same-day urgent slot.
const TRAJECTORY = {
  id: "trj_8a14f2",
  patient: "Sarah M. (new)",
  intent: "Same-day urgent appointment · chipped tooth · throbbing pain",
  channel: "SMS · +1 249 800 0333",
  decision: "Book — Tuxedo · Dr. Chen · 10:30am tomorrow",
  confidence: 0.94,
  humanReview: false,
  modelHash: "aria-triage-2026.04 · sha:7c1f0b",
  duration: "3.2s",
  audit: [
    { t: "14:32:18.041", state: "auto",   label: "Inbound classification",   detail: "SMS · NEW_PATIENT + URGENT · sender unverified" },
    { t: "14:32:18.118", state: "auto",   label: "PII redaction",            detail: "Name + phone tokenised before model call (PIPEDA §4.5)" },
    { t: "14:32:18.402", state: "model",  label: "Severity assessment",      detail: "Pain-First Routing → 7 / 10 (structural damage + throbbing)" },
    { t: "14:32:18.665", state: "auto",   label: "Geo-resolution",           detail: "Area code → Winnipeg metro · 3 clinics in radius" },
    { t: "14:32:18.991", state: "model",  label: "Inventory match",          detail: "Tuxedo · Dr. Chen · 10:30 (urgent slot held 8a–11a daily)" },
    { t: "14:32:19.213", state: "auto",   label: "Consent capture queued",   detail: "Intake form + privacy notice · PIPEDA consent v1.4" },
    { t: "14:32:19.471", state: "model",  label: "Reply drafted",            detail: "Empathetic · 78 words · reading level grade 7" },
    { t: "14:32:21.002", state: "auto",   label: "Confirmation dispatched",  detail: "SMS delivered · 1 attempt · receipt 2026-05-25T14:32:21Z" },
    { t: "14:32:21.118", state: "human",  label: "Human review",             detail: "Skipped — confidence 0.94 ≥ 0.85 threshold for triage class" },
  ],
  frameworks: [
    { name: "Intake Classifier", v: "4.1.0", out: "NEW_PATIENT · URGENT", note: "BERT-based · F1 0.97 on Manitoba dental corpus" },
    { name: "Pain-First Routing Schema", v: "3.2", out: "Severity 7/10 · urgent-eligible", note: "Rule + LLM hybrid · clinician-reviewed" },
    { name: "Inventory Solver", v: "2.0", out: "Tuxedo · Dr. Chen · 10:30", note: "Constrained optimisation across 4 clinics" },
    { name: "PIPEDA Consent Capture", v: "1.4", out: "Consent v1.4 queued", note: "Patient must accept before first appointment" },
    { name: "Reply Composer", v: "2026.04", out: "EN · empathetic · clinical", note: "Constrained to clinic-approved phrase library" },
  ],
  art13: [
    { req: "(a) Intended purpose",      status: "documented",  detail: "Appointment triage + booking assistance for licensed dental clinics." },
    { req: "(b) Characteristics, capabilities, limitations", status: "documented", detail: "Not for diagnosis · not for billing · EN/FR-CA only · 24/7." },
    { req: "(c) Performance metrics",   status: "live",        detail: "Booking accuracy 96.4% · false-urgent rate 1.1% · audited weekly." },
    { req: "(d) Foreseeable risks",     status: "mitigated",   detail: "Mis-triage of pediatric pain → escalated to on-call clinician." },
    { req: "(e) Input data specs",      status: "documented",  detail: "Text only · max 480 tokens · stripped of attachments before model call." },
    { req: "(f) Human oversight",       status: "available",   detail: "Override at any step · 100% of high-risk classes are clinician-reviewed." },
    { req: "(g) Expected lifetime",     status: "documented",  detail: "Quarterly retraining · model card published with each version." },
    { req: "(h) Maintenance + updates", status: "documented",  detail: "On-call clinical lead approves every routing-rule change." },
  ],
};

Object.assign(window, { LOCATIONS, CHANNELS, PERSONAS, TRAJECTORY });
