// --------------------------------------------------------------- // SEED DATA — SOFIA MCP Recruitment (operated by SOLUCERSA) // Generic client names. Latin American context. // --------------------------------------------------------------- const CLIENTS = [ { id: 'cli-acme', name: 'Acme Retail Group', industry: 'Retail', city: 'San Salvador', country: 'SV', logoBg: 'from-rose-500 to-orange-400', monogram: 'AR', openRoles: 7, candidatesInPipe: 142, sla: 'Premium', activeSince: '2024-08' }, { id: 'cli-northwind',name: 'Northwind Logistics', industry: 'Logística & Transporte', city: 'Guatemala City', country: 'GT', logoBg: 'from-emerald-500 to-cyan-400', monogram: 'NL', openRoles: 4, candidatesInPipe: 88, sla: 'Standard', activeSince: '2025-01' }, { id: 'cli-helix', name: 'Helix Energy', industry: 'Energía Renovable', city: 'Tegucigalpa', country: 'HN', logoBg: 'from-amber-500 to-rose-400', monogram: 'HE', openRoles: 9, candidatesInPipe: 211, sla: 'Premium', activeSince: '2024-03' }, { id: 'cli-andes', name: 'Andes Capital', industry: 'Financiero', city: 'San Salvador', country: 'SV', logoBg: 'from-indigo-500 to-violet-400', monogram: 'AC', openRoles: 6, candidatesInPipe: 174, sla: 'Enterprise', activeSince: '2023-11' }, { id: 'cli-bluewave', name: 'BlueWave Telecom', industry: 'Telecomunicaciones', city: 'Guatemala City', country: 'GT', logoBg: 'from-sky-500 to-indigo-400', monogram: 'BW', openRoles: 3, candidatesInPipe: 56, sla: 'Standard', activeSince: '2025-03' }, { id: 'cli-vertex', name: 'Vertex Bank', industry: 'Banca', city: 'San Pedro Sula', country: 'HN', logoBg: 'from-violet-500 to-fuchsia-400',monogram: 'VB', openRoles: 5, candidatesInPipe: 119, sla: 'Enterprise', activeSince: '2024-05' }, ]; const REQUISITIONS = [ { id: 'req-001', clientId: 'cli-acme', client: 'Acme Retail Group', title: 'Asesor de Cobranza Bilingüe', location: 'San Salvador, SV', modality: 'On-site', openings: 12, matched: 34, aiQuality: 92, status: 'Active', priority: 'High', deadline: '2026-05-28', opened: '2026-04-22', salary: 'USD $850 – $1,150 / mes', description: 'Equipo de cobranza bilingüe (Español/Inglés) para cartera prime de Acme. Llamadas outbound, negociación de planes de pago y registro CRM.', mustHave: ['Inglés B2+', '1+ años en call center', 'Negociación', 'CRM (Salesforce/HubSpot)'], niceHave: ['Experiencia en finanzas', 'Manejo de objeciones avanzadas'], soft: ['Empatía', 'Resiliencia', 'Comunicación', 'Orientación a resultados'], profile: 'Agente con experiencia previa en cobranza o ventas outbound, inglés conversacional fluido, capacidad para manejar 60+ llamadas/día y comodidad con métricas semanales.', }, { id: 'req-002', clientId: 'cli-helix', client: 'Helix Energy', title: 'Ejecutivo de Ventas Solares B2B', location: 'Tegucigalpa, HN', modality: 'Hybrid', openings: 6, matched: 22, aiQuality: 86, status: 'Active', priority: 'Medium', deadline: '2026-06-04', opened: '2026-04-29', salary: 'HNL L. 22,000 + comisión', description: 'Apertura de nuevo canal B2B para Helix. Prospección de PYMES, propuestas técnicas y cierre consultivo.', mustHave: ['2+ años en B2B', 'Cierre consultivo', 'CRM'], niceHave: ['Sector energía/utilities', 'Ingeniería industrial'], soft: ['Presencia ejecutiva', 'Resiliencia', 'Curiosidad técnica'], profile: 'Vendedor consultivo B2B con cuota cumplida histórica, comfort con ciclos de venta de 30–60 días y disponibilidad para viajes regionales.', }, { id: 'req-003', clientId: 'cli-northwind', client: 'Northwind Logistics', title: 'Agente Call Center Outbound · Mercado US', location: 'Guatemala City, GT', modality: 'On-site', openings: 20, matched: 51, aiQuality: 78, status: 'Active', priority: 'High', deadline: '2026-05-20', opened: '2026-04-12', salary: 'GTQ Q5,200 – Q6,800 + bonos', description: 'Operación nocturna de Northwind para clientes US. Confirmación de despachos, resolución de incidencias y up-sell de servicios.', mustHave: ['Inglés C1', 'Disponibilidad nocturna', 'Locución clara'], niceHave: ['Experiencia en logística', 'CRM Zoho'], soft: ['Escucha activa', 'Adaptabilidad', 'Tolerancia al estrés'], profile: 'Hablante de inglés cuasi-nativo, cómodo en turno 8pm–5am, con experiencia previa en BPO US.', }, { id: 'req-004', clientId: 'cli-andes', client: 'Andes Capital', title: 'Coordinador de Operaciones de Crédito', location: 'San Salvador, SV', modality: 'On-site', openings: 2, matched: 11, aiQuality: 81, status: 'Active', priority: 'Medium', deadline: '2026-06-18', opened: '2026-05-02', salary: 'USD $1,400 – $1,800 / mes', description: 'Liderazgo del equipo de operaciones de crédito de Andes Capital. Análisis de carteras, reportería al comité y mejora continua de procesos.', mustHave: ['Excel avanzado', 'Power BI', '3+ años en banca/financiera'], niceHave: ['Experiencia auditoría', 'SQL básico'], soft: ['Atención al detalle', 'Liderazgo', 'Sensibilidad analítica'], profile: 'Analista o coordinador senior con experiencia en banca o financiera, dominio de Excel/Power BI y track-record liderando equipos pequeños.', }, { id: 'req-005', clientId: 'cli-bluewave', client: 'BlueWave Telecom', title: 'Customer Support — Omnichannel', location: 'Guatemala City, GT', modality: 'Hybrid', openings: 5, matched: 18, aiQuality: 88, status: 'Active', priority: 'Low', deadline: '2026-06-22', opened: '2026-05-04', salary: 'GTQ Q5,800 – Q7,200', description: 'Soporte multicanal (WhatsApp, email, redes) para clientes residenciales de BlueWave. Resolución en primer contacto y escalamiento a NOC.', mustHave: ['Soporte multicanal', 'Redacción impecable', 'Disponibilidad fines de semana'], niceHave: ['Conocimiento técnico básico (redes)', 'Inglés B2'], soft: ['Paciencia', 'Comunicación escrita', 'Resolución rápida'], profile: 'Soportista omnichannel con experiencia en alto volumen y tono cálido en redes sociales.', }, { id: 'req-006', clientId: 'cli-vertex', client: 'Vertex Bank', title: 'Analista de Riesgo Crediticio Jr.', location: 'San Pedro Sula, HN', modality: 'On-site', openings: 3, matched: 9, aiQuality: 74, status: 'Active', priority: 'Medium', deadline: '2026-07-02', opened: '2026-05-06', salary: 'HNL L. 22,000 – L. 28,000', description: 'Análisis de carteras corporativas, modelos de scoring en Excel/Power BI, soporte a comité de crédito.', mustHave: ['Excel avanzado', 'Power BI', 'Análisis financiero'], niceHave: ['SQL básico', 'Banca corporativa'], soft: ['Pensamiento analítico', 'Rigurosidad', 'Comunicación con stakeholders'], profile: 'Egresado/a de Finanzas o Ing. Industrial con prácticas en banca o auditoría, modelaje en Excel y curiosidad por dashboards.', }, { id: 'req-007', clientId: 'cli-acme', client: 'Acme Retail Group', title: 'Supervisor de Piso Call Center', location: 'San Salvador, SV', modality: 'On-site', openings: 2, matched: 7, aiQuality: 83, status: 'Draft', priority: 'Medium', deadline: '2026-06-30', opened: '2026-05-09', salary: 'USD $1,600 – $2,100 / mes', description: 'Liderazgo de squad de 18 agentes de cobranza, monitoreo de KPIs, coaching y reportería ejecutiva.', mustHave: ['3+ años supervisión BPO', 'Coaching', 'Power BI'], niceHave: ['Six Sigma', 'Inglés B2'], soft: ['Liderazgo', 'Comunicación', 'Mentalidad de coach'], profile: 'Supervisor con track-record de mejorar adherencia y CSAT en operaciones outbound.', }, ]; // ----- Candidates ----- const FIRST = ['Ana', 'Luis', 'María', 'José', 'Karla', 'Diego', 'Sofía', 'Carlos', 'Lucía', 'Andrés', 'Camila', 'Roberto', 'Gabriela', 'Marco', 'Daniela', 'Fernando', 'Valeria', 'Mateo', 'Isabela', 'Pablo', 'Ximena', 'Rodrigo', 'Renata', 'Esteban']; const LAST = ['García', 'Hernández', 'Martínez', 'López', 'Rodríguez', 'Pérez', 'Gómez', 'Ramírez', 'Flores', 'Cruz', 'Rivera', 'Torres', 'Mejía', 'Castillo', 'Morales', 'Reyes', 'Vásquez', 'Ortiz', 'Aguilar', 'Cabrera']; const CITIES = [ ['San Salvador', 'SV'], ['Santa Tecla', 'SV'], ['Soyapango', 'SV'], ['Guatemala City', 'GT'], ['Mixco', 'GT'], ['Quetzaltenango', 'GT'], ['Tegucigalpa', 'HN'], ['San Pedro Sula', 'HN'], ['La Ceiba', 'HN'], ]; const ROLES_HIST = [ 'Agente Call Center', 'Asesor de Cobranza', 'Ejecutivo de Ventas', 'Customer Support Specialist', 'Coordinador BPO', 'Supervisor de Piso', 'Analista Junior', 'Vendedor Retail', 'Operador Bilingüe', 'Backoffice Cobranza', ]; const SKILLS = [ 'Inglés C1', 'Inglés B2', 'Inglés B1', 'Negociación', 'Salesforce', 'HubSpot', 'Zoho CRM', 'Power BI', 'Excel avanzado', 'POS', 'Cierre consultivo', 'Atención al cliente', 'Empatía', 'WhatsApp Business', 'Manejo de objeciones', 'Locución', 'Coaching', 'Photoshop', 'SQL', 'Resolución de conflictos', 'Comunicación escrita', 'Telemarketing', ]; const LANGS = ['Español', 'Inglés', 'Portugués', 'Francés']; const SOURCES = ['Portal SOFIA', 'Referido', 'LinkedIn', 'WhatsApp Campaign', 'Job Fair']; const AVAIL = ['Inmediata', '15 días', '30 días', 'A convenir']; const AVATAR_COLORS = [ 'from-rose-500 to-orange-400', 'from-indigo-500 to-violet-400', 'from-sky-500 to-indigo-400', 'from-emerald-500 to-cyan-400', 'from-amber-500 to-pink-400', 'from-teal-500 to-violet-400', 'from-blue-500 to-purple-400', 'from-fuchsia-500 to-rose-400', ]; function mulberry32(seed) { return function () { let t = (seed += 0x6D2B79F5); t = Math.imul(t ^ (t >>> 15), t | 1); t ^= t + Math.imul(t ^ (t >>> 7), t | 61); return ((t ^ (t >>> 14)) >>> 0) / 4294967296; }; } const rng = mulberry32(7); const pick = (arr) => arr[Math.floor(rng() * arr.length)]; const pickN = (arr, n) => { const copy = [...arr]; const out = []; for (let i = 0; i < n && copy.length; i++) { out.push(copy.splice(Math.floor(rng() * copy.length), 1)[0]); } return out; }; const CANDIDATES = Array.from({ length: 36 }).map((_, i) => { const f = pick(FIRST), l = pick(LAST), l2 = pick(LAST); const [city, country] = pick(CITIES); const years = 1 + Math.floor(rng() * 9); const role = pick(ROLES_HIST); const skills = pickN(SKILLS, 3 + Math.floor(rng() * 3)); const languages = pickN(LANGS, 1 + Math.floor(rng() * 2)); const avail = pick(AVAIL); const source = pick(SOURCES); const score = 62 + Math.floor(rng() * 36); const reqId = REQUISITIONS[Math.floor(rng() * REQUISITIONS.length)].id; const expected = Math.round((650 + rng() * 1400) / 25) * 25; return { id: `cand-${1000 + i}`, name: `${f} ${l} ${l2}`, initials: `${f[0]}${l[0]}`, role, yearsExperience: years, city, country, languages, skills, availability: avail, salaryExpected: `USD $${expected.toLocaleString()}`, salaryNum: expected, source, matchScore: score, matchedReq: reqId, avatarColor: AVATAR_COLORS[i % AVATAR_COLORS.length], education: pick(['Lic. Administración', 'Téc. Marketing', 'Lic. Comunicaciones', 'Bachiller', 'Ing. Industrial', 'Lic. Finanzas']), appliedAt: `2026-${String(4 + Math.floor(rng() * 2)).padStart(2, '0')}-${String(1 + Math.floor(rng() * 28)).padStart(2, '0')}`, stage: pick(['Applied', 'AI Screened', 'Shortlisted', 'Interview', 'Submitted', 'Hired']), sentiment: pick(['Positive', 'Neutral', 'Enthusiastic', 'Cautious']), shortlistedFor: rng() > 0.65 ? reqId : null, }; }); // ----- AI screening calls ----- const SCREENING_QUESTIONS = [ '¿Cuántos años de experiencia tiene en operaciones de call center o cobranza?', '¿Cuál es su nivel de inglés conversacional y puede dar un ejemplo?', '¿Cuál es su disponibilidad de inicio y modalidad preferida (turno noche, mixta, diurna)?', '¿Cuál es su expectativa salarial mensual?', 'Describa una situación difícil con un cliente y cómo la resolvió.', ]; const SCREENING_CALLS = [ { id: 'call-001', candidateId: 'cand-1000', candidateName: 'Ana García Hernández', role: 'Asesor de Cobranza Bilingüe', client: 'Acme Retail Group', status: 'Completed', duration: '07:42', sentiment: 'Positive', sentimentScore: 86, scheduled: 'Hoy · 10:15', completed: 'Hoy · 10:23', recommendation: 'Advance', recoConfidence: 92, answers: [ { q: '¿Años de experiencia en BPO?', a: '4 años en cobranza outbound para mercado US.' }, { q: '¿Nivel de inglés y ejemplo?', a: 'C1 — manejó cartera 100% en inglés los últimos 18 meses. Demuestra fluidez en la respuesta.' }, { q: '¿Disponibilidad?', a: 'Inmediata, prefiere mixto pero acepta turno noche.' }, { q: '¿Expectativa salarial?', a: 'USD $950 + bonos por meta.' }, { q: '¿Caso difícil?', a: 'Cliente moroso con quiebra técnica; renegoció plan a 18 cuotas y recuperó 78% de la cartera.' }, ], aiNotes: 'Candidata fuerte. Tono cálido, control de objeciones evidente. Inglés C1 sostenido (sin lapsus). Riesgo: salario ligeramente arriba del rango medio. Recomiendo avanzar a entrevista con líder de operación Acme.', }, { id: 'call-002', candidateId: 'cand-1003', candidateName: 'José Martínez López', role: 'Agente Call Center Outbound', client: 'Northwind Logistics', status: 'Completed', duration: '06:18', sentiment: 'Neutral', sentimentScore: 64, scheduled: 'Hoy · 09:30', completed: 'Hoy · 09:36', recommendation: 'Hold', recoConfidence: 71, answers: [ { q: '¿Años de experiencia?', a: '2 años en BPO mixto (campañas US e internas).' }, { q: '¿Inglés?', a: 'B2 sólido pero acento perceptible; comprensión 100%.' }, { q: '¿Disponibilidad?', a: 'Disponibilidad nocturna confirmada.' }, { q: '¿Expectativa salarial?', a: 'Q6,500 + bonos.' }, { q: '¿Caso difícil?', a: 'Cliente abusivo, derivó a supervisor sin perder compostura.' }, ], aiNotes: 'Resuelve casos pero el inglés podría ser un riesgo para llamadas sensibles. Recomiendo pausar mientras se valida un segundo screening con prueba de role-play en vivo.', }, { id: 'call-003', candidateId: 'cand-1007', candidateName: 'Karla Rivera Cruz', role: 'Customer Support — Omnichannel', client: 'BlueWave Telecom', status: 'Completed', duration: '08:55', sentiment: 'Enthusiastic', sentimentScore: 94, scheduled: 'Ayer · 16:20', completed: 'Ayer · 16:29', recommendation: 'Advance', recoConfidence: 96, answers: [ { q: '¿Años de experiencia?', a: '3 años en soporte omnichannel.' }, { q: '¿Inglés?', a: 'B2, escrito impecable.' }, { q: '¿Disponibilidad?', a: 'Disponibilidad fines de semana confirmada.' }, { q: '¿Expectativa salarial?', a: 'Q6,800.' }, { q: '¿Caso difícil?', a: 'Ventana de alta demanda: 12,000 tickets en 7 minutos; manejó 80+ casos sin escalar.' }, ], aiNotes: 'Excelente match. Tono empático, autonomía clara, métricas tangibles. Match score 96. Avanzar a entrevista final con BlueWave.', }, { id: 'call-004', candidateId: 'cand-1011', candidateName: 'Diego Ramírez Flores', role: 'Ejecutivo de Ventas Solares B2B', client: 'Helix Energy', status: 'Scheduled', duration: '—', sentiment: '—', sentimentScore: 0, scheduled: 'Mañana · 11:00', completed: '—', recommendation: '—', recoConfidence: 0, answers: [], aiNotes: '', }, { id: 'call-005', candidateId: 'cand-1014', candidateName: 'Valeria Torres Mejía', role: 'Coordinador Operaciones de Crédito', client: 'Andes Capital', status: 'Scheduled', duration: '—', sentiment: '—', sentimentScore: 0, scheduled: 'Mañana · 14:30', completed: '—', recommendation: '—', recoConfidence: 0, answers: [], aiNotes: '', }, { id: 'call-006', candidateId: 'cand-1019', candidateName: 'Roberto Castillo Morales', role: 'Analista de Riesgo Jr.', client: 'Vertex Bank', status: 'Completed', duration: '09:11', sentiment: 'Neutral', sentimentScore: 58, scheduled: 'Ayer · 11:45', completed: 'Ayer · 11:55', recommendation: 'Reject', recoConfidence: 81, answers: [ { q: '¿Experiencia financiera?', a: 'Solo prácticas universitarias, sin manejo de scoring real.' }, { q: '¿Power BI?', a: 'Nivel básico, no ha publicado dashboards productivos.' }, { q: '¿Disponibilidad?', a: 'Inmediata.' }, { q: '¿Expectativa salarial?', a: 'L. 30,000 — arriba del rango.' }, { q: '¿Análisis reciente?', a: 'Trabajo final de tesis sobre fondos mutuos, sin uso comercial.' }, ], aiNotes: 'No cumple Power BI productivo ni manejo de Excel avanzado a nivel comité. Expectativa salarial 15% arriba. Recomiendo rechazar para esta requisición; mantener en pool para Junior Banking.', }, ]; // ----- WhatsApp threads (via SOFIA Chat) ----- const THREADS = [ { id: 'thr-001', candidateId: 'cand-1000', candidateName: 'Ana García Hernández', role: 'Asesor de Cobranza Bilingüe · Acme Retail', unread: 0, pinned: true, channel: 'WhatsApp', lastTime: '10:42', snippet: 'Perfecto, confirmo la entrevista para el jueves a las 3pm.', online: true, messages: [ { from: 'op', t: 'Ayer · 18:14', text: 'Hola Ana, soy Marisol de SOLUCERSA. ¿Tienes disponibilidad para una entrevista con el equipo de Acme Retail?' }, { from: 'cand', t: 'Ayer · 18:22', text: 'Hola Marisol! Sí, tengo disponibilidad jueves y viernes.' }, { from: 'op', t: 'Ayer · 18:25', text: 'Excelente. Te propongo jueves 14 a las 3:00pm, formato híbrido (videollamada + caso práctico).' }, { from: 'cand', t: 'Hoy · 09:51', text: '¿Me podrías compartir el link de la videollamada y los temas?' }, { from: 'op', t: 'Hoy · 10:02', text: 'Claro — te envío el calendar invite con el link y un PDF con el caso práctico. La sesión dura 45 min.' }, { from: 'cand', t: 'Hoy · 10:42', text: 'Perfecto, confirmo la entrevista para el jueves a las 3pm.' }, ], }, { id: 'thr-002', candidateId: 'cand-1007', candidateName: 'Karla Rivera Cruz', role: 'Customer Support · BlueWave Telecom', unread: 2, pinned: false, channel: 'WhatsApp', lastTime: '11:08', snippet: 'Adjunto mi CV actualizado y dos cartas de recomendación.', online: false, messages: [ { from: 'op', t: 'Hoy · 10:55', text: 'Hola Karla, ¿qué tal estuvo el screening con SOFIA Call ayer?' }, { from: 'cand', t: 'Hoy · 11:01', text: 'Súper bien, me sentí muy cómoda. ¿Cuál es el siguiente paso?' }, { from: 'op', t: 'Hoy · 11:03', text: 'Te enviamos un kit de entrevista y nos gustaría confirmar 2 referencias laborales.' }, { from: 'cand', t: 'Hoy · 11:08', text: 'Adjunto mi CV actualizado y dos cartas de recomendación.' }, ], }, { id: 'thr-003', candidateId: 'cand-1011', candidateName: 'Diego Ramírez Flores', role: 'Ventas B2B · Helix Energy', unread: 0, pinned: false, channel: 'WhatsApp', lastTime: 'Ayer', snippet: 'Gracias por la invitación, confirmo asistencia.', online: false, messages: [ { from: 'op', t: 'Ayer · 14:10', text: 'Hola Diego, te invitamos a la jornada presencial en Tegucigalpa este sábado 17.' }, { from: 'cand', t: 'Ayer · 14:33', text: 'Gracias por la invitación, confirmo asistencia.' }, ], }, { id: 'thr-004', candidateId: 'cand-1014', candidateName: 'Valeria Torres Mejía', role: 'Coord. Operaciones · Andes Capital', unread: 1, pinned: false, channel: 'WhatsApp', lastTime: '08:51', snippet: '¿Sería posible reagendar la entrevista para la próxima semana?', online: true, messages: [ { from: 'op', t: 'Hoy · 08:30', text: 'Hola Valeria, te recordamos la entrevista virtual de hoy a las 4pm con Andes Capital.' }, { from: 'cand', t: 'Hoy · 08:51', text: '¿Sería posible reagendar la entrevista para la próxima semana? Tuve un imprevisto familiar.' }, ], }, { id: 'thr-005', candidateId: 'cand-1019', candidateName: 'Roberto Castillo Morales', role: 'Analista de Riesgo Jr. · Vertex Bank', unread: 0, pinned: false, channel: 'WhatsApp', lastTime: '2 días', snippet: 'Entendido, gracias por la retroalimentación.', online: false, messages: [ { from: 'op', t: '2 días · 16:02', text: 'Hola Roberto, después de evaluar tu perfil decidimos no avanzar para Vertex en este momento, pero te mantenemos en nuestra base.' }, { from: 'cand', t: '2 días · 16:18', text: 'Entendido, gracias por la retroalimentación.' }, ], }, { id: 'thr-006', candidateId: 'cand-1003', candidateName: 'José Martínez López', role: 'Agente Call Outbound · Northwind', unread: 0, pinned: false, channel: 'WhatsApp', lastTime: '3 días', snippet: 'Sí, completé el formulario online.', online: false, messages: [ { from: 'op', t: '3 días · 09:01', text: 'Hola José, ¿pudiste completar el formulario de disponibilidad nocturna?' }, { from: 'cand', t: '3 días · 09:14', text: 'Sí, completé el formulario online.' }, ], }, ]; const TEMPLATES = [ { id: 't1', name: 'Invitación a entrevista', body: 'Hola {{nombre}}, te queremos invitar a una entrevista para la posición de {{rol}} con {{cliente}}. ¿Tienes disponibilidad esta semana?' }, { id: 't2', name: 'Solicitud de documentos', body: 'Hola {{nombre}}, para avanzar necesitamos: CV actualizado, 2 referencias laborales y constancia de inglés. ¿Puedes enviarlos hoy?' }, { id: 't3', name: 'Carta oferta', body: 'Hola {{nombre}}, ¡felicidades! Te compartimos la oferta formal para {{rol}}. Salario: {{salario}}. Modalidad: {{modalidad}}.' }, { id: 't4', name: 'Rechazo con empatía', body: 'Hola {{nombre}}, agradecemos tu interés. Por ahora decidimos avanzar con otros perfiles, pero te mantenemos en nuestra base para futuras oportunidades en {{cliente}}.' }, { id: 't5', name: 'Confirmación screening SOFIA Call', body: 'Hola {{nombre}}, agendamos una llamada de screening con nuestra asistente SOFIA para {{fecha}}. Dura ~8 min, en español/inglés.' }, ]; // ----- Activity feed ----- const ACTIVITY = [ { id: 'a1', t: '2 min', icon: 'Sparkles', tone: 'amber', text: <>SOFIA detectó 12 candidatos que coinciden con la nueva vacante de Acme Retail · Bilingüe. }, { id: 'a2', t: '8 min', icon: 'PhoneCall', tone: 'brand', text: <>SOFIA Call completó screening de Ana García H. · recomendación: Advance. }, { id: 'a3', t: '21 min', icon: 'CheckCircle', tone: 'emerald', text: <>Karla Rivera fue movida a Shortlist para BlueWave Telecom. }, { id: 'a4', t: '34 min', icon: 'Message', tone: 'brand', text: <>SOFIA Chat envió kit de entrevista vía WhatsApp a 3 candidatos. }, { id: 'a5', t: '1 h', icon: 'UserPlus', tone: 'sky', text: <>Nuevo candidato aplicado al portal: Camila Aguilar · Ventas B2B. }, { id: 'a6', t: '2 h', icon: 'File', tone: 'slate', text: <>Marisol Pineda submitió 4 finalistas a Andes Capital. }, { id: 'a7', t: '3 h', icon: 'Bot', tone: 'amber', text: <>SOFIA reentrenó el modelo de match con 1,240 perfiles del portal público. }, ]; const AI_INSIGHTS = [ { id: 'i1', title: '12 candidatos calzan con la nueva vacante de Acme Retail', body: 'Detecté 12 perfiles del pool que cumplen Inglés B2+, experiencia en cobranza outbound y disponibilidad inmediata. 7 ya pasaron screening previo con SOFIA Call.', action: 'Revisar shortlist', targetRoute: 'requisitions', }, { id: 'i2', title: 'Tres entrevistas en riesgo de fall-through', body: 'Diego Ramírez, Valeria Torres y dos más no han confirmado el recordatorio de mañana. Recomiendo enviar reminder por WhatsApp vía SOFIA Chat.', action: 'Enviar reminder masivo', targetRoute: 'interviews', }, { id: 'i3', title: 'El canal "Referido" supera a "LinkedIn" en calidad', body: 'En las últimas 4 semanas, los referidos tienen un match score promedio 18 puntos arriba de LinkedIn. Considera incentivar el plan de referidos.', action: 'Ver detalle de fuentes', targetRoute: 'reports', }, ]; const FUNNEL = [ { stage: 'Aplicados', count: 1248, conv: 100, color: '#a5b4fc' }, { stage: 'AI Screening', count: 742, conv: 59, color: '#818cf8' }, { stage: 'Shortlist', count: 318, conv: 25, color: '#6366f1' }, { stage: 'Entrevista', count: 186, conv: 15, color: '#7c3aed' }, { stage: 'Submitido a cliente', count: 94, conv: 8, color: '#9333ea' }, { stage: 'Contratado', count: 38, conv: 3, color: '#d97706' }, ]; const SOURCE_DATA = [ { name: 'Portal SOFIA', value: 412, fill: '#4f46e5' }, { name: 'Referidos', value: 268, fill: '#7c3aed' }, { name: 'LinkedIn', value: 184, fill: '#a855f7' }, { name: 'Job Fair', value: 96, fill: '#d97706' }, { name: 'WhatsApp Camp.',value: 76, fill: '#0891b2' }, ]; const TIME_TO_HIRE = [ { client: 'Acme Retail', days: 14 }, { client: 'Northwind', days: 11 }, { client: 'Helix', days: 22 }, { client: 'Andes', days: 18 }, { client: 'BlueWave', days: 9 }, { client: 'Vertex', days: 27 }, ]; const SCREENING_ACCURACY = [ { w: 'Sem 1', accuracy: 78 }, { w: 'Sem 2', accuracy: 82 }, { w: 'Sem 3', accuracy: 86 }, { w: 'Sem 4', accuracy: 88 }, { w: 'Sem 5', accuracy: 91 }, { w: 'Sem 6', accuracy: 92 }, { w: 'Sem 7', accuracy: 94 }, ]; const COST_PER_HIRE = [ { m: 'Ene', usd: 740 }, { m: 'Feb', usd: 695 }, { m: 'Mar', usd: 630 }, { m: 'Abr', usd: 582 }, { m: 'May', usd: 521 }, ]; const ASSISTANT_SCRIPTS = { bilingual: { user: 'Encuéntrame 5 agentes call center bilingües en San Salvador disponibles de inmediato.', steps: [ { tool: 'candidate-pool.search', label: 'Buscando en Candidate Pool', detail: 'filtros: idioma=Inglés B2+, ciudad=San Salvador, disponibilidad=Inmediata' }, { tool: 'sofia-call.history', label: 'Consultando screenings previos de SOFIA Call', detail: '24 candidatos con call completada en últimos 14 días' }, { tool: 'match-engine.rank', label: 'Rankeando por match score', detail: 'modelo v3.2 · weights: skills 0.5 / experience 0.3 / sentiment 0.2' }, ], candidates: ['cand-1000', 'cand-1003', 'cand-1007', 'cand-1014', 'cand-1011'], summary: 'Aquí están los 5 mejores candidatos. Ana García (94%) y Karla Rivera (92%) ya completaron screening con SOFIA Call con sentimiento positivo. Recomiendo contactar a las 5 vía SOFIA Chat para confirmar disponibilidad de entrevista esta semana.', }, summary: { user: 'Resume los 3 mejores candidatos para la vacante de Helix Energy.', steps: [ { tool: 'requisitions.fetch', label: 'Cargando requisición Helix · Ventas B2B' }, { tool: 'candidate-pool.rank', label: 'Rankeando 22 matches por requirement fit' }, { tool: 'cv-analysis.summarize', label: 'Generando resúmenes ejecutivos por candidato' }, ], candidates: ['cand-1011', 'cand-1023', 'cand-1028'], summary: 'Top 3 para Helix: Diego Ramírez (88%), Renata Cabrera (85%) y Mateo Reyes (84%). Los tres superan cuota histórica de 110% y tienen disponibilidad inmediata. Diego es el más fuerte en cierre consultivo, Renata en venta cruzada, Mateo en clientes corporativos.', }, draft: { user: 'Redacta un mensaje de WhatsApp invitando a Ana García a una entrevista el viernes.', steps: [ { tool: 'candidate.fetch', label: 'Recuperando perfil de Ana García H.' }, { tool: 'templates.match', label: 'Eligiendo template "Invitación a entrevista"' }, { tool: 'sofia-chat.compose', label: 'Personalizando con datos de la requisición Acme Retail' }, ], candidates: [], summary: 'Borrador listo:\n\n"Hola Ana, soy Marisol de SOLUCERSA. Nos encantó tu perfil para la vacante de Asesor de Cobranza Bilingüe con Acme Retail. Queremos invitarte a una entrevista virtual este viernes 16/05 a las 3:00 pm. Dura 45 min y combinaremos videollamada + caso práctico breve. ¿Te funciona el horario?"\n\n¿Lo envío ahora vía SOFIA Chat?', }, }; const NOTIFICATIONS = [ { id: 'n1', icon: 'Sparkles', tone: 'amber', t: '2 min', title: 'SOFIA encontró 12 candidatos para Acme Retail', body: 'Match score promedio: 89%' }, { id: 'n2', icon: 'PhoneCall', tone: 'brand', t: '14 min', title: 'Screening completado — Ana García', body: 'Recomendación: Advance · 92% conf.' }, { id: 'n3', icon: 'AlertCircle', tone: 'rose', t: '38 min', title: '3 entrevistas sin confirmar para mañana', body: 'Enviar reminder vía SOFIA Chat' }, { id: 'n4', icon: 'CheckCircle', tone: 'emerald', t: '1 h', title: 'Andes Capital aceptó 4 finalistas', body: 'Pasaron a entrevista con cliente' }, ]; window.DATA = { CLIENTS, REQUISITIONS, CANDIDATES, SCREENING_CALLS, THREADS, TEMPLATES, ACTIVITY, AI_INSIGHTS, FUNNEL, SOURCE_DATA, TIME_TO_HIRE, SCREENING_ACCURACY, COST_PER_HIRE, SCREENING_QUESTIONS, ASSISTANT_SCRIPTS, NOTIFICATIONS, };