/* global React */
// ============================================================================
// MOCK DATA LAYER — single source of truth for all pages
// ============================================================================

const DATA = {};

// ---------- Pacientes / Casos ----------
DATA.pacientes = [
  {
    id:'P-0428', n:'María Elena Fernández Rossi', dni:'12.345.678', edad:62, sexo:'F',
    dx:'DM2', dxDetalle:'DM2 + HTA + Dislipidemia + Nefropatía G2',
    fin:'OSDE', plan:'OSDE 310', circuito:'CABA', sede:'Obispo Trejo',
    estado:'Adherencia', risk:78, adh:68, diasSinDisp:22, hba1c:8.6, hba1cObj:7.0,
    receta:'R-2026-04281', vencReceta:'05/07/2026', farmacia:'Helios Pharma Caballito',
    proxima:'15/05/2026 · Endocrinología', tone:'helios',
    med:'Metformina + Empagliflozina + Dulaglutida + Losartán + Atorvastatina',
    proxAccion:'Respuesta WhatsApp · intento 2/3',
    tel:'+54 11 5432-1098', email:'mefernandez@gmail.com',
    equipo:[
      {n:'Dr. Martín Hidalgo', r:'Endocrinólogo de cabecera', t:'helios'},
      {n:'Dra. Paula Alemán', r:'Clínica / seguimiento', t:'teal2'},
      {n:'Lic. Julieta Ferrer', r:'Nutricionista', t:'ok'},
    ],
  },
  {id:'P-0312', n:'Jorge Benítez', dni:'28.112.904', edad:54, sexo:'M', dx:'DM1', dxDetalle:'DM1', fin:'Swiss Medical', plan:'SB06', circuito:'CABA', sede:'Caballito', estado:'Dispensa', risk:62, adh:82, diasSinDisp:3, hba1c:7.4, hba1cObj:7.0, receta:'R-2026-03120', vencReceta:'15/07/2026', tone:'sun', proxAccion:'Retiro hoy 15-18h · Farmacity Caballito', med:'Insulina Glargina + Insulina Aspart'},
  {id:'P-0221', n:'Roberto Tonini', dni:'21.345.221', edad:68, sexo:'M', dx:'DM2', dxDetalle:'DM2 · retinopatía', fin:'PAMI', plan:'Base', circuito:'CABA', sede:'Obispo Trejo', estado:'Adherencia', risk:83, adh:58, diasSinDisp:18, hba1c:9.2, hba1cObj:7.5, receta:'R-2026-02210', vencReceta:'01/06/2026', tone:'danger', proxAccion:'Escalado · llamada agendada', med:'Metformina + Semaglutida + Losartán'},
  {id:'P-0402', n:'Lucía Bravo', dni:'30.441.002', edad:42, sexo:'F', dx:'DM2', dxDetalle:'DM2', fin:'OSDE', plan:'OSDE 310', circuito:'CABA', sede:'Caballito', estado:'Legajo armado', risk:32, adh:94, diasSinDisp:1, hba1c:6.8, hba1cObj:7.0, receta:'R-2026-04020', vencReceta:'10/08/2026', tone:'ok', proxAccion:'Facturar · $186.400', med:'Metformina + Semaglutida'},
  {id:'P-0189', n:'Carolina Mazzanti', dni:'24.555.212', edad:58, sexo:'F', dx:'DM2', dxDetalle:'DM2 · obesidad II', fin:'OSDE', plan:'OSDE 450', circuito:'Interior', sede:'La Plata', estado:'Reglas económicas', risk:71, adh:88, diasSinDisp:5, hba1c:7.9, hba1cObj:7.0, receta:'R-2026-01890', vencReceta:'20/05/2026', tone:'sun', proxAccion:'Revisar precio Glargina · fuera de rango', med:'Insulina Glargina + Metformina'},
  {id:'P-0517', n:'Pedro Alvarado', dni:'22.990.155', edad:71, sexo:'M', dx:'DM2', dxDetalle:'DM2 · nefropatía', fin:'OSDEPYM', plan:'Base', circuito:'Interior', sede:'Morón', estado:'Receta vigente', risk:55, adh:76, diasSinDisp:9, hba1c:7.8, hba1cObj:7.0, receta:'R-2026-05170', vencReceta:'12/06/2026', tone:'helios', proxAccion:'Confirmar llegada a farmacia Morón', med:'Metformina + Empagliflozina'},
  {id:'P-0634', n:'Javier Ramírez', dni:'28.112.904', edad:34, sexo:'M', dx:'LADA', dxDetalle:'LADA', fin:'Galeno', plan:'440', circuito:'CABA', sede:'Caballito', estado:'Consolidación doc.', risk:47, adh:81, diasSinDisp:6, hba1c:7.2, hba1cObj:7.0, receta:'R-2026-06340', vencReceta:'25/06/2026', tone:'teal2', proxAccion:'Falta consentimiento firmado', med:'Insulina Glargina + Metformina'},
  {id:'P-0703', n:'Verónica Colombo', dni:'32.120.404', edad:31, sexo:'F', dx:'DG', dxDetalle:'Diabetes gestacional', fin:'Medifé', plan:'Mater', circuito:'CABA', sede:'Quilmes', estado:'Alta', risk:38, adh:92, diasSinDisp:2, hba1c:6.4, hba1cObj:6.5, receta:'R-2026-07030', vencReceta:'20/09/2026', tone:'rose2', proxAccion:'Primera dispensa · kit materno', med:'Insulina Aspart'},
  {id:'P-0811', n:'Esteban Funes', dni:'21.808.340', edad:65, sexo:'M', dx:'DM2', dxDetalle:'DM2 · retinopatía', fin:'Medicus', plan:'Azul', circuito:'CABA', sede:'San Isidro', estado:'Facturado', risk:28, adh:96, diasSinDisp:0, hba1c:6.6, hba1cObj:7.0, receta:'R-2026-08110', vencReceta:'30/07/2026', tone:'ok', proxAccion:'Ciclo cerrado abril 2026', med:'Metformina + Dapagliflozina'},
  {id:'P-0920', n:'Matías Gutiérrez', dni:'26.778.100', edad:48, sexo:'M', dx:'DM2', dxDetalle:'DM2', fin:'IOMA', plan:'Base', circuito:'Interior', sede:'Zona Norte', estado:'Legajo armado', risk:52, adh:79, diasSinDisp:7, hba1c:7.6, hba1cObj:7.0, receta:'R-2026-09200', vencReceta:'05/06/2026', tone:'helios', proxAccion:'Facturar · $142.300', med:'Metformina + Dapagliflozina'},
];

// ---------- Workflows ----------
DATA.workflows = [
  {id:'WF-ADH',   n:'Detección y resolución de gap de adherencia',  cat:'Adherencia',    execHoy:124, auto:78, sla:'2.4h', pac:312, estado:'Activo', triggers:['gap_dispensa_detectado','cron_diario_08hs']},
  {id:'WF-REC',   n:'Control y renovación de receta vigente',       cat:'Receta',        execHoy:38,  auto:91, sla:'1.1h', pac:248, estado:'Activo', triggers:['cron_72h_previo_vencimiento','evento_alta_caso']},
  {id:'WF-DIS',   n:'Orquestación de dispensa CABA',                cat:'Dispensa',      execHoy:67,  auto:84, sla:'3.2h', pac:189, estado:'Activo', triggers:['solicitud_dispensa','confirmacion_receta']},
  {id:'WF-DIS-I', n:'Orquestación de dispensa Interior',            cat:'Dispensa',      execHoy:52,  auto:71, sla:'6.8h', pac:143, estado:'Activo', triggers:['solicitud_dispensa','stock_confirmado_drogueria']},
  {id:'WF-DOC',   n:'Consolidación documental y validación',        cat:'Documentación', execHoy:41,  auto:88, sla:'0.8h', pac:248, estado:'Activo', triggers:['dispensa_registrada','cierre_mensual']},
  {id:'WF-FAC',   n:'Preparación de legajo para facturación',       cat:'Facturación',   execHoy:29,  auto:94, sla:'0.4h', pac:201, estado:'Activo', triggers:['documentacion_completa','cierre_mensual']},
  {id:'WF-FIN',   n:'Control económico por financiador',            cat:'Facturación',   execHoy:34,  auto:97, sla:'0.2h', pac:248, estado:'Activo', triggers:['legajo_armado','actualizacion_precio']},
  {id:'WF-ALT',   n:'Alta de nuevo caso diabetes',                  cat:'Operación',     execHoy:7,   auto:63, sla:'8.0h', pac:7,   estado:'Activo', triggers:['admision_nueva','derivacion_externa']},
  {id:'WF-ESC',   n:'Escalamiento clínico a médico',                cat:'Adherencia',    execHoy:11,  auto:0,  sla:'1.0h', pac:23,  estado:'Activo', triggers:['score_riesgo_mayor_80','hba1c_critica']},
  {id:'WF-AUT',   n:'Solicitud y seguimiento de autorizaciones',    cat:'Documentación', execHoy:19,  auto:62, sla:'24h',  pac:86,  estado:'Activo', triggers:['receta_nueva','cambio_medicacion']},
];

// ---------- Financiadores ----------
DATA.financiadores = [
  {n:'OSDE',          codigo:'OS-001', tipo:'Por paciente', bonif:40, venc:'31/12/2026', obs:'Padrón actualizable diariamente', casos:77, esperado:3980000, confirmado:2840000, compl:71, obs_casos:2, acuerdo:'Vigente'},
  {n:'Swiss Medical', codigo:'SM-002', tipo:'Por paciente', bonif:35, venc:'30/06/2026', obs:'', casos:44, esperado:2320000, confirmado:1740000, compl:75, obs_casos:1, acuerdo:'Vigente'},
  {n:'Galeno',        codigo:'GA-003', tipo:'Por paciente', bonif:38, venc:'31/12/2026', obs:'En renegociación', casos:34, esperado:1760000, confirmado:1380000, compl:78, obs_casos:1, acuerdo:'Renegociando'},
  {n:'Medicus',       codigo:'ME-004', tipo:'Por paciente', bonif:42, venc:'31/12/2026', obs:'', casos:21, esperado:1090000, confirmado:890000, compl:82, obs_casos:0, acuerdo:'Vigente'},
  {n:'PAMI',          codigo:'PA-005', tipo:'Por artículo', bonif:50, venc:'31/03/2027', obs:'Precio fijado por resolución', casos:54, esperado:2810000, confirmado:2100000, compl:75, obs_casos:0, acuerdo:'Vigente'},
  {n:'IOMA',          codigo:'IO-006', tipo:'Por artículo', bonif:45, venc:'30/09/2026', obs:'', casos:9,  esperado:440000,  confirmado:130000, compl:30, obs_casos:0, acuerdo:'Vigente'},
  {n:'OSDEPYM',       codigo:'OD-007', tipo:'Por paciente', bonif:37, venc:'31/12/2026', obs:'', casos:5,  esperado:260000,  confirmado:80000,  compl:31, obs_casos:0, acuerdo:'Vigente'},
  {n:'Medifé',        codigo:'MF-008', tipo:'Por paciente', bonif:36, venc:'30/06/2026', obs:'', casos:2,  esperado:120000,  confirmado:40000,  compl:33, obs_casos:0, acuerdo:'Vigente'},
  {n:'Omint',         codigo:'OM-009', tipo:'Por paciente', bonif:39, venc:'31/12/2026', obs:'', casos:1,  esperado:40000,   confirmado:10000,  compl:25, obs_casos:0, acuerdo:'Vigente'},
  {n:'Prevención',    codigo:'PR-010', tipo:'Por paciente', bonif:38, venc:'31/12/2026', obs:'', casos:1,  esperado:20000,   confirmado:0,      compl:0,  obs_casos:0, acuerdo:'Vigente'},
];

// ---------- Usuarios ----------
DATA.usuarios = [
  {n:'Mariano Rossi',      rol:'Operación',           sede:'Obispo Trejo', mod:'Torre + Bandeja + Adherencia',  ult:'Hace 2 min',  estado:'Activo'},
  {n:'Camila Díaz',        rol:'Adherencia',          sede:'Caballito',    mod:'Adherencia + Casos (lectura)',  ult:'Hace 14 min', estado:'Activo'},
  {n:'Roberto Pereyra',    rol:'Farmacia / Dispensa', sede:'Morón',        mod:'Dispensa + Stock',               ult:'Hace 1 h',    estado:'Activo'},
  {n:'Ana Gutiérrez',      rol:'Facturación',         sede:'Obispo Trejo', mod:'Facturación + Analítica',        ult:'Hace 3 h',    estado:'Activo'},
  {n:'Dr. Martín Hidalgo', rol:'Médico',              sede:'Obispo Trejo', mod:'Solo lectura casos diabetes',    ult:'Hace 22 min', estado:'Activo'},
  {n:'Dra. Valeria Scocco',rol:'Médico',              sede:'Caballito',    mod:'Solo lectura casos diabetes',    ult:'Hace 1 día',  estado:'Activo'},
  {n:'Laura Montoya',      rol:'Conducción',          sede:'Todas',        mod:'Acceso completo',                ult:'Hace 6 h',    estado:'Activo'},
  {n:'Diego Altamira',     rol:'Sistemas',            sede:'Todas',        mod:'Acceso completo + Configuración',ult:'Hace 10 min', estado:'Activo'},
];

// ---------- Integraciones ----------
DATA.integraciones = [
  {n:'HIS Helios Salud',         estado:'OK',    lat:80,   sync:'Hace 2 min',  url:'https://his.heliossalud.internal/api/v2'},
  {n:'CRM Adherencia',           estado:'OK',    lat:120,  sync:'Hace 5 min',  url:'https://crm.helios.io/webhook'},
  {n:'Helios Pharma (farmacia)', estado:'OK',    lat:95,   sync:'Hace 1 min',  url:'https://pharma.heliossalud.ar/api'},
  {n:'WhatsApp Business API',    estado:'OK',    lat:340,  sync:'Hace 3 min',  url:'https://graph.facebook.com/v18.0/messages'},
  {n:'SMS Gateway',              estado:'OK',    lat:220,  sync:'Hace 8 min',  url:'https://sms.provider.ar/api'},
  {n:'OSDE · Padrón y precios',  estado:'WARN',  lat:1800, sync:'Hace 42 min', url:'https://padron.osde.com.ar/ws'},
  {n:'Swiss Medical API',        estado:'OK',    lat:580,  sync:'Hace 11 min', url:'https://api.swissmedical.com.ar'},
  {n:'PAMI · Padrón online',     estado:'OK',    lat:920,  sync:'Hace 6 min',  url:'https://padron.pami.org.ar'},
  {n:'Laboratorio clínico',      estado:'OK',    lat:450,  sync:'Hace 19 min', url:'https://lab.helios.ar/ws'},
  {n:'Droguería Nacional',       estado:'ERROR', lat:null, sync:'Hace 2 h · timeout', url:'https://drognacional.com.ar/api'},
];

// ---------- Medicamentos / Stock ----------
DATA.stock = [
  {m:'Metformina 500mg',        stock:840, min:200, alerta:'ok',   pres:'Comp. x 60'},
  {m:'Metformina 1000mg',       stock:620, min:200, alerta:'ok',   pres:'Comp. x 60'},
  {m:'Empagliflozina 10mg',     stock:180, min:150, alerta:'warn', pres:'Comp. x 30'},
  {m:'Empagliflozina 25mg',     stock:95,  min:100, alerta:'crit', pres:'Comp. x 30'},
  {m:'Dulaglutida 1.5mg',       stock:48,  min:80,  alerta:'crit', pres:'Pluma prellenada'},
  {m:'Semaglutida 1mg',         stock:72,  min:60,  alerta:'ok',   pres:'Pluma prellenada'},
  {m:'Insulina Glargina U300',  stock:130, min:100, alerta:'ok',   pres:'Pluma 1.5mL'},
  {m:'Insulina Degludec',       stock:44,  min:60,  alerta:'crit', pres:'Pluma 3mL'},
  {m:'Insulina Aspart',         stock:210, min:100, alerta:'ok',   pres:'Pluma 3mL'},
  {m:'Dapagliflozina 10mg',     stock:167, min:80,  alerta:'ok',   pres:'Comp. x 28'},
];

// ---------- Reglas del motor ----------
DATA.reglas = [
  {n:'Umbral de gap de adherencia',          v:'15 días',           d:'Días sin dispensa para activar WF-ADH'},
  {n:'Reintentos de recontacto automático',  v:'3',                 d:'Intentos antes de escalar a humano'},
  {n:'Intervalo entre reintentos',           v:'48 horas',          d:'Tiempo entre cada intento'},
  {n:'Canal preferido por defecto',          v:'WA → SMS → Tel',    d:'Orden de fallback automático'},
  {n:'Horario permitido de contacto',        v:'08:00 – 20:00',     d:'Zona horaria Argentina (ART)'},
  {n:'SLA máximo antes de escalar',          v:'4 horas',           d:'Tiempo sin resolución → alerta secundaria'},
  {n:'Tope mensual de contactos/paciente',   v:'6',                 d:'Límite para evitar fatiga del paciente'},
  {n:'Score mínimo para escalamiento',       v:'75',                d:'Por encima: requiere intervención humana'},
  {n:'Días previos para alerta de receta',   v:'7',                 d:'Antes del vencimiento'},
  {n:'Variación de precio aceptada (%)',     v:'5%',                d:'Por encima: excepción en WF-FIN'},
];

// ---------- Trazabilidad ----------
DATA.eventos = [
  {t:'11:42:03',id:'EVT-4821',tipo:'Auto',     mod:'Adherencia',  pac:'P-0428',pacN:'María Elena Fernández Rossi',ag:'WF-ADH',      desc:'Gap detectado: 22 días sin retirar Dulaglutida',estado:'OK'},
  {t:'11:42:04',id:'EVT-4822',tipo:'Auto',     mod:'Sistema',     pac:'P-0428',pacN:'María Elena Fernández Rossi',ag:'WF-ADH',      desc:'Consulta HIS: perfil cargado, canal preferido WhatsApp',estado:'OK'},
  {t:'11:43:01',id:'EVT-4823',tipo:'Auto',     mod:'Adherencia',  pac:'P-0428',pacN:'María Elena Fernández Rossi',ag:'WF-ADH · IA', desc:'Score calculado: 78 · Segmento: efecto adverso probable',estado:'OK'},
  {t:'11:44:00',id:'EVT-4824',tipo:'Auto',     mod:'Adherencia',  pac:'P-0428',pacN:'María Elena Fernández Rossi',ag:'WF-ADH',      desc:'WhatsApp enviado · plantilla ADH-GLP1-01',estado:'OK'},
  {t:'12:10:17',id:'EVT-4825',tipo:'Externo',  mod:'Adherencia',  pac:'P-0428',pacN:'María Elena Fernández Rossi',ag:'WhatsApp API',desc:'Respuesta recibida: "me marea, lo dejé hace 3 semanas"',estado:'OK'},
  {t:'12:10:19',id:'EVT-4826',tipo:'Auto',     mod:'Adherencia',  pac:'P-0428',pacN:'María Elena Fernández Rossi',ag:'WF-ADH · IA', desc:'Motivo clasificado: efecto adverso GI (confianza 92%)',estado:'OK'},
  {t:'12:10:20',id:'EVT-4827',tipo:'Auto',     mod:'Adherencia',  pac:'P-0428',pacN:'María Elena Fernández Rossi',ag:'WF-ADH',      desc:'Caso escalado a equipo adherencia + alerta Dra. Alemán',estado:'OK'},
  {t:'11:38:00',id:'EVT-4810',tipo:'Auto',     mod:'Receta',      pac:'P-0312',pacN:'Jorge Benítez',              ag:'WF-REC',      desc:'Receta R-2026-03120 validada · vence 15/07/2026',estado:'OK'},
  {t:'11:39:12',id:'EVT-4811',tipo:'Auto',     mod:'Dispensa',    pac:'P-0312',pacN:'Jorge Benítez',              ag:'WF-DIS',      desc:'Dispensa agendada · Farmacity Caballito · hoy 15:00-18:00',estado:'OK'},
  {t:'10:55:00',id:'EVT-4798',tipo:'Auto',     mod:'Facturación', pac:'P-0402',pacN:'Lucía Bravo',                ag:'WF-FAC',      desc:'Legajo armado automáticamente · OSDE 310 · $186.400 ARS',estado:'OK'},
  {t:'10:55:01',id:'EVT-4799',tipo:'Auto',     mod:'Facturación', pac:'P-0402',pacN:'Lucía Bravo',                ag:'WF-FIN',      desc:'Precio Semaglutida verificado: $8.140 dentro del rango OSDE',estado:'OK'},
  {t:'09:30:00',id:'EVT-4740',tipo:'Auto',     mod:'Sistema',     pac:'—',     pacN:'—',                          ag:'WF-ADH cron', desc:'Cron 08:00 · 31 pacientes evaluados · 19 workflows iniciados',estado:'OK'},
  {t:'09:31:45',id:'EVT-4741',tipo:'Humano',   mod:'Adherencia',  pac:'P-0221',pacN:'Roberto Tonini',             ag:'Camila Díaz', desc:'Registro de llamada: respondió, HbA1c discutida, cita urgente acordada',estado:'OK'},
  {t:'09:32:00',id:'EVT-4742',tipo:'Auto',     mod:'Adherencia',  pac:'P-0221',pacN:'Roberto Tonini',             ag:'WF-ADH',      desc:'Caso marcado resuelto por intervención humana',estado:'OK'},
  {t:'08:45:00',id:'EVT-4721',tipo:'Excepción',mod:'Facturación', pac:'P-0189',pacN:'Carolina Mazzanti',          ag:'WF-FIN',      desc:'Precio Insulina Glargina fuera de rango OSDE (+6.2%)',estado:'Pendiente'},
  {t:'08:12:00',id:'EVT-4698',tipo:'Auto',     mod:'Dispensa',    pac:'P-0189',pacN:'Carolina Mazzanti',          ag:'WF-DIS',      desc:'Remito digital REM-20260423-0189 generado y enviado a OSDE',estado:'OK'},
  {t:'07:59:00',id:'EVT-4690',tipo:'Humano',   mod:'Dispensa',    pac:'P-0312',pacN:'Jorge Benítez',              ag:'R. Pereyra',  desc:'Dispensa confirmada: Jorge Benítez retiró medicación',estado:'OK'},
  {t:'07:58:00',id:'EVT-4689',tipo:'Auto',     mod:'Sistema',     pac:'—',     pacN:'—',                          ag:'Motor reglas',desc:'Precios del día actualizados: 3 financiadores sincronizados',estado:'OK'},
  {t:'07:30:00',id:'EVT-4680',tipo:'Auto',     mod:'Receta',      pac:'P-0221',pacN:'Roberto Tonini',             ag:'WF-REC',      desc:'Alerta: receta vence en 5 días · notificación enviada al equipo',estado:'OK'},
  {t:'06:15:00',id:'EVT-4650',tipo:'Error',    mod:'Sistema',     pac:'—',     pacN:'—',                          ag:'Motor integr.',desc:'Droguería Nacional: timeout en consulta de stock · reintentando en 15 min',estado:'Error'},
];

window.DATA = DATA;
