/** * Mock customer data for visual design & demo. * Each client has realistic policies, claims, payments, and activity. */ export type MockPolicy = { id: string line: string carrier: string product: string premium: number status: 'Active' | 'Pending' | 'Lapsed' | 'Cancelled' renewal: string icon: string details?: string referralChannel?: string } export type MockClaim = { id: string policy: string type: string date: string amount: number status: 'In progress' | 'Resolved' | 'Denied' | 'Under review' } export type MockPayment = { date: string amount: number policy: string method: string status: 'Paid' | 'Pending' | 'Overdue' | 'Failed' } export type MockActivityEvent = { date: string text: string type: 'claim' | 'payment' | 'renewal' | 'quote' | 'note' | 'policy' | 'onboarding' } /** * Customer tier — derived from data completeness & policy status: * quick_lead — minimal capture (name + phone/email only) * lead — profile info but no policies yet * customer — has at least one active policy * cancelled — had policies but all cancelled / lapsed */ export type CustomerTier = 'quick_lead' | 'lead' | 'customer' | 'cancelled' export type MockCustomer = { id: string name: string initials: string type: 'Individual' | 'Corporate' documentId: string email: string phone: string birthDate: string gender: string address: string since: string agent: string preferredLang: string tags: string[] policies: MockPolicy[] claims: MockClaim[] payments: MockPayment[] activity: MockActivityEvent[] paymentStatus: 'Current' | 'Overdue' | 'Grace period' | 'N/A' } /** Derive tier from customer data */ export function customerTier(c: MockCustomer): CustomerTier { if (c.policies.length === 0 && (!c.documentId || c.documentId === '—') && !c.address) return 'quick_lead' if (c.policies.length === 0) return 'lead' const hasActive = c.policies.some(p => p.status === 'Active' || p.status === 'Pending') if (!hasActive) return 'cancelled' return 'customer' } /* ────────────────────────────────────────────── */ /* 1 · María Elena Pérez Solano */ /* ────────────────────────────────────────────── */ const maria: MockCustomer = { id: 'cust-001', name: 'María Elena Pérez Solano', initials: 'MP', type: 'Individual', documentId: '1-0456-0812', email: 'maria.perez@email.com', phone: '+506 8834-2291', birthDate: '1988-03-14', gender: 'Female', address: 'San José, Escazú, Trejos Montealegre', since: '2021-06-10', agent: 'Ana R.', preferredLang: 'Spanish', tags: ['VIP', 'Referral source'], paymentStatus: 'Current', policies: [ { id: 'POL-2024-4412', line: 'Auto', carrier: 'ASSA', product: '2023 Toyota RAV4 — SJO-4412', premium: 1840, status: 'Active', renewal: '2025-06-15', icon: 'i-heroicons-truck', details: 'Comprehensive • $500 deductible', referralChannel: 'Direct walk-in' }, { id: 'POL-2024-7788', line: 'Life', carrier: 'INS', product: 'Individual health plan', premium: 3200, status: 'Active', renewal: '2025-09-01', icon: 'i-heroicons-heart', details: 'Gold tier • Dental included', referralChannel: 'Direct walk-in' }, { id: 'POL-2023-1190', line: 'Life', carrier: 'Mapfre', product: 'Term life — 20yr, $250K', premium: 960, status: 'Active', renewal: '2026-01-10', icon: 'i-heroicons-shield-check', details: 'Beneficiary: Carlos Pérez (spouse)', referralChannel: 'Cross-sell' }, ], claims: [ { id: 'CL-2891', policy: 'POL-2024-4412', type: 'Collision', date: '2025-02-18', amount: 4200, status: 'In progress' }, { id: 'CL-2204', policy: 'POL-2024-7788', type: 'Medical reimbursement', date: '2024-08-05', amount: 1100, status: 'Resolved' }, ], payments: [ { date: '2025-04-01', amount: 540, policy: 'POL-2024-4412', method: 'Auto-debit', status: 'Paid' }, { date: '2025-04-01', amount: 267, policy: 'POL-2024-7788', method: 'Auto-debit', status: 'Paid' }, { date: '2025-03-01', amount: 540, policy: 'POL-2024-4412', method: 'Auto-debit', status: 'Paid' }, { date: '2025-03-01', amount: 267, policy: 'POL-2024-7788', method: 'Auto-debit', status: 'Paid' }, { date: '2025-03-01', amount: 80, policy: 'POL-2023-1190', method: 'Transfer', status: 'Paid' }, ], activity: [ { date: 'Today', text: 'Auto claim CL-2891 — adjuster report uploaded', type: 'claim' }, { date: 'Yesterday', text: 'Health premium payment confirmed ($267)', type: 'payment' }, { date: 'Mar 28', text: 'Renewal notice sent for Auto policy', type: 'renewal' }, { date: 'Mar 15', text: 'Quote requested: Home insurance', type: 'quote' }, { date: 'Feb 18', text: 'Collision claim filed — CL-2891', type: 'claim' }, ], } /* ────────────────────────────────────────────── */ /* 2 · Roberto Jiménez Mora */ /* ────────────────────────────────────────────── */ const roberto: MockCustomer = { id: 'cust-002', name: 'Roberto Jiménez Mora', initials: 'RJ', type: 'Individual', documentId: '3-0321-0654', email: 'roberto.jimenez@correo.cr', phone: '+506 7012-8845', birthDate: '1975-11-22', gender: 'Male', address: 'Heredia, Belén, La Asunción', since: '2019-02-15', agent: 'Ana R.', preferredLang: 'Spanish', tags: ['Long-term client'], paymentStatus: 'Current', policies: [ { id: 'POL-2023-3301', line: 'Auto', carrier: 'Qualitas', product: '2021 Hyundai Tucson — HER-9901', premium: 1520, status: 'Active', renewal: '2025-08-20', icon: 'i-heroicons-truck', details: 'Comprehensive • $750 deductible', referralChannel: 'Referral — client' }, { id: 'POL-2023-3302', line: 'Auto', carrier: 'Qualitas', product: '2019 Honda CRV — HER-6632', premium: 1280, status: 'Active', renewal: '2025-08-20', icon: 'i-heroicons-truck', details: 'Comprehensive • $750 deductible • Spouse vehicle', referralChannel: 'Referral — client' }, { id: 'POL-2022-1010', line: 'Home', carrier: 'ASSA', product: 'Homeowner — Belén residence', premium: 890, status: 'Active', renewal: '2025-11-01', icon: 'i-heroicons-home-modern', details: 'Dwelling $185K • Contents $40K • Earthquake included', referralChannel: 'Cross-sell' }, { id: 'POL-2024-5500', line: 'Life', carrier: 'Pan-American Life', product: 'Whole life — $150K', premium: 1440, status: 'Active', renewal: '2026-02-15', icon: 'i-heroicons-shield-check', details: 'Beneficiary: Lucía Jiménez (spouse)', referralChannel: 'Cross-sell' }, { id: 'POL-2024-5501', line: 'General Risk', carrier: 'INS', product: 'Personal umbrella — $1M', premium: 420, status: 'Active', renewal: '2025-12-01', icon: 'i-heroicons-shield-exclamation', details: 'Excess liability over auto + home', referralChannel: 'Cross-sell' }, ], claims: [ { id: 'CL-1840', policy: 'POL-2022-1010', type: 'Water damage', date: '2024-04-12', amount: 6800, status: 'Resolved' }, { id: 'CL-2105', policy: 'POL-2023-3301', type: 'Windshield', date: '2024-11-28', amount: 450, status: 'Resolved' }, ], payments: [ { date: '2025-04-01', amount: 233, policy: 'POL-2023-3301', method: 'Auto-debit', status: 'Paid' }, { date: '2025-04-01', amount: 197, policy: 'POL-2023-3302', method: 'Auto-debit', status: 'Paid' }, { date: '2025-04-01', amount: 74, policy: 'POL-2022-1010', method: 'Auto-debit', status: 'Paid' }, { date: '2025-04-01', amount: 120, policy: 'POL-2024-5500', method: 'Auto-debit', status: 'Paid' }, { date: '2025-03-01', amount: 233, policy: 'POL-2023-3301', method: 'Auto-debit', status: 'Paid' }, { date: '2025-03-01', amount: 197, policy: 'POL-2023-3302', method: 'Auto-debit', status: 'Paid' }, ], activity: [ { date: 'Yesterday', text: 'Monthly premium auto-debited ($624)', type: 'payment' }, { date: 'Mar 30', text: 'Umbrella policy annual review scheduled', type: 'renewal' }, { date: 'Mar 15', text: 'Quote requested: Teen driver add-on', type: 'quote' }, { date: 'Feb 20', text: 'Home policy endorsement — added jewelry rider', type: 'policy' }, { date: 'Jan 10', text: 'Windshield claim CL-2105 resolved ($450)', type: 'claim' }, { date: 'Dec 15', text: 'Year-end portfolio review completed', type: 'note' }, ], } /* ────────────────────────────────────────────── */ /* 3 · Carolina Fallas Vargas */ /* ────────────────────────────────────────────── */ const carolina: MockCustomer = { id: 'cust-003', name: 'Carolina Fallas Vargas', initials: 'CF', type: 'Individual', documentId: '2-0589-0177', email: 'carolina.fallas@gmail.com', phone: '+506 6198-3340', birthDate: '1992-07-30', gender: 'Female', address: 'Cartago, Paraíso, Orosí', since: '2023-09-05', agent: 'Marco V.', preferredLang: 'Spanish', tags: ['New client'], paymentStatus: 'Current', policies: [ { id: 'POL-2024-8810', line: 'Auto', carrier: 'INS', product: '2024 Kia Sportage — CAR-1177', premium: 1650, status: 'Active', renewal: '2025-09-05', icon: 'i-heroicons-truck', details: 'Comprehensive • $500 deductible', referralChannel: 'Facebook campaign' }, { id: 'POL-2024-8811', line: 'Home', carrier: 'ASSA', product: "Renter's insurance — Paraíso apt", premium: 320, status: 'Active', renewal: '2025-09-05', icon: 'i-heroicons-home-modern', details: 'Contents $25K • Liability $100K', referralChannel: 'Facebook campaign' }, ], claims: [], payments: [ { date: '2025-04-01', amount: 138, policy: 'POL-2024-8810', method: 'Credit card', status: 'Paid' }, { date: '2025-04-01', amount: 27, policy: 'POL-2024-8811', method: 'Credit card', status: 'Paid' }, { date: '2025-03-01', amount: 138, policy: 'POL-2024-8810', method: 'Credit card', status: 'Paid' }, { date: '2025-03-01', amount: 27, policy: 'POL-2024-8811', method: 'Credit card', status: 'Paid' }, ], activity: [ { date: 'Mar 25', text: 'Monthly payment processed ($165)', type: 'payment' }, { date: 'Mar 10', text: 'Renter policy — updated inventory list', type: 'policy' }, { date: 'Feb 05', text: 'Welcome call completed by Marco V.', type: 'onboarding' }, { date: 'Sep 05', text: 'Policies issued — Auto + Renter', type: 'policy' }, ], } /* ────────────────────────────────────────────── */ /* 4 · Luis Andrés Solís Calderón */ /* ────────────────────────────────────────────── */ const luis: MockCustomer = { id: 'cust-004', name: 'Luis Andrés Solís Calderón', initials: 'LS', type: 'Individual', documentId: '1-1102-0398', email: 'luis.solis@outlook.com', phone: '+506 8455-7721', birthDate: '1968-01-09', gender: 'Male', address: 'San José, Santa Ana, Pozos', since: '2017-11-20', agent: 'Ana R.', preferredLang: 'Spanish', tags: ['High-value', 'Referral source', 'Multi-line'], paymentStatus: 'Overdue', policies: [ { id: 'POL-2022-2200', line: 'Auto', carrier: 'Qualitas', product: '2022 BMW X5 — SJO-2200', premium: 3200, status: 'Active', renewal: '2025-05-01', icon: 'i-heroicons-truck', details: 'Comprehensive • $1,000 deductible', referralChannel: 'Referral — client' }, { id: 'POL-2022-2201', line: 'Auto', carrier: 'Qualitas', product: '2020 Mercedes GLC — SJO-7788', premium: 2800, status: 'Active', renewal: '2025-05-01', icon: 'i-heroicons-truck', details: 'Comprehensive • $1,000 deductible • Spouse vehicle', referralChannel: 'Referral — client' }, { id: 'POL-2020-0055', line: 'Home', carrier: 'ASSA', product: 'Homeowner — Santa Ana residence', premium: 2100, status: 'Active', renewal: '2025-07-15', icon: 'i-heroicons-home-modern', details: 'Dwelling $420K • Contents $95K • Flood + Earthquake', referralChannel: 'Cross-sell' }, { id: 'POL-2021-0750', line: 'Life', carrier: 'Pan-American Life', product: 'Whole life — $500K', premium: 4800, status: 'Active', renewal: '2025-11-20', icon: 'i-heroicons-shield-check', details: 'Beneficiaries: Patricia Calderón (60%), Children (40%)', referralChannel: 'Google Ads' }, { id: 'POL-2023-6600', line: 'Life', carrier: 'Blue Cross', product: 'Family health — Platinum', premium: 8400, status: 'Active', renewal: '2025-10-01', icon: 'i-heroicons-heart', details: '4 members • Dental + Vision • Intl coverage', referralChannel: 'Google Ads' }, { id: 'POL-2023-6601', line: 'General Risk', carrier: 'INS', product: 'Personal umbrella — $2M', premium: 680, status: 'Active', renewal: '2025-12-01', icon: 'i-heroicons-shield-exclamation', details: 'Excess liability over auto + home', referralChannel: 'Cross-sell' }, ], claims: [ { id: 'CL-3020', policy: 'POL-2022-2200', type: 'Collision — rear-end', date: '2025-03-08', amount: 9500, status: 'In progress' }, { id: 'CL-2650', policy: 'POL-2023-6600', type: 'Surgery reimbursement', date: '2024-10-15', amount: 12400, status: 'Resolved' }, { id: 'CL-2102', policy: 'POL-2020-0055', type: 'Storm damage — roof', date: '2024-06-22', amount: 8200, status: 'Resolved' }, ], payments: [ { date: '2025-04-01', amount: 1832, policy: 'Multiple', method: 'Auto-debit', status: 'Failed' }, { date: '2025-03-01', amount: 1832, policy: 'Multiple', method: 'Auto-debit', status: 'Paid' }, { date: '2025-02-01', amount: 1832, policy: 'Multiple', method: 'Auto-debit', status: 'Paid' }, { date: '2025-01-01', amount: 1832, policy: 'Multiple', method: 'Auto-debit', status: 'Paid' }, ], activity: [ { date: 'Today', text: 'ALERT: April payment failed — auto-debit declined', type: 'payment' }, { date: 'Yesterday', text: 'Collision claim CL-3020 — repair estimate received ($9,500)', type: 'claim' }, { date: 'Mar 20', text: 'Auto policies up for renewal May 1 — quote comparison started', type: 'renewal' }, { date: 'Mar 08', text: 'Collision claim filed — CL-3020 (BMW rear-end)', type: 'claim' }, { date: 'Feb 15', text: 'Annual portfolio review — recommended umbrella increase', type: 'note' }, { date: 'Jan 20', text: 'Health claim CL-2650 resolved — $12,400 reimbursed', type: 'claim' }, ], } /* ────────────────────────────────────────────── */ /* 5 · Sofía Campos Rojas */ /* ────────────────────────────────────────────── */ const sofia: MockCustomer = { id: 'cust-005', name: 'Sofía Campos Rojas', initials: 'SC', type: 'Individual', documentId: '4-0220-0561', email: 'sofia.campos@icloud.com', phone: '+506 7233-0098', birthDate: '1995-12-03', gender: 'Female', address: 'Guanacaste, Liberia, Centro', since: '2024-01-15', agent: 'Marco V.', preferredLang: 'Spanish', tags: ['Young professional'], paymentStatus: 'Grace period', policies: [ { id: 'POL-2024-9901', line: 'Auto', carrier: 'INS', product: '2024 Mazda CX-30 — GUA-0098', premium: 1380, status: 'Active', renewal: '2026-01-15', icon: 'i-heroicons-truck', details: 'Comprehensive • $500 deductible', referralChannel: 'Instagram campaign' }, { id: 'POL-2024-9902', line: 'Life', carrier: 'Mapfre', product: 'Term life — 10yr, $100K', premium: 360, status: 'Active', renewal: '2026-01-15', icon: 'i-heroicons-shield-check', details: 'Beneficiary: Elena Rojas (mother)', referralChannel: 'Cross-sell' }, ], claims: [ { id: 'CL-3101', policy: 'POL-2024-9901', type: 'Fender bender', date: '2025-03-20', amount: 1800, status: 'Under review' }, ], payments: [ { date: '2025-04-01', amount: 145, policy: 'POL-2024-9901', method: 'Transfer', status: 'Pending' }, { date: '2025-03-01', amount: 145, policy: 'POL-2024-9901', method: 'Transfer', status: 'Paid' }, { date: '2025-03-01', amount: 30, policy: 'POL-2024-9902', method: 'Transfer', status: 'Paid' }, { date: '2025-02-01', amount: 145, policy: 'POL-2024-9901', method: 'Transfer', status: 'Paid' }, ], activity: [ { date: 'Today', text: 'Grace period — April auto premium not yet received', type: 'payment' }, { date: 'Mar 22', text: 'Fender bender claim CL-3101 filed', type: 'claim' }, { date: 'Mar 01', text: 'Monthly payment received ($175)', type: 'payment' }, { date: 'Jan 15', text: 'Policies renewed — Auto + Life', type: 'renewal' }, ], } /* ────────────────────────────────────────────── */ /* 6 · Quick Lead — Diego Herrera */ /* ────────────────────────────────────────────── */ const diego: MockCustomer = { id: 'cust-006', name: 'Diego Herrera', initials: 'DH', type: 'Individual', documentId: '—', email: 'diego.h@gmail.com', phone: '+506 6100-4422', birthDate: '', gender: '', address: '', since: '2026-03-28', agent: 'Marco V.', preferredLang: 'Spanish', tags: ['Quick lead', 'Referral'], paymentStatus: 'N/A', policies: [], claims: [], payments: [], activity: [ { date: 'Mar 28', text: 'Quick lead captured — referred by Roberto Jiménez', type: 'onboarding' }, ], } /* ────────────────────────────────────────────── */ /* 7 · Quick Lead — Valeria Núñez */ /* ────────────────────────────────────────────── */ const valeria: MockCustomer = { id: 'cust-007', name: 'Valeria Núñez', initials: 'VN', type: 'Individual', documentId: '—', email: '', phone: '+506 8899-1100', birthDate: '', gender: '', address: '', since: '2026-04-01', agent: 'Ana R.', preferredLang: 'Spanish', tags: ['Quick lead', 'Walk-in'], paymentStatus: 'N/A', policies: [], claims: [], payments: [], activity: [ { date: 'Apr 01', text: 'Walk-in lead — interested in auto insurance', type: 'onboarding' }, ], } /* ────────────────────────────────────────────── */ /* 8 · Lead — Andrés Mora Villalobos */ /* ────────────────────────────────────────────── */ const andres: MockCustomer = { id: 'cust-008', name: 'Andrés Mora Villalobos', initials: 'AM', type: 'Individual', documentId: '1-1450-0221', email: 'andres.mora@empresa.cr', phone: '+506 7744-5566', birthDate: '1990-05-18', gender: 'Male', address: 'San José, Moravia, San Vicente', since: '2026-03-15', agent: 'Ana R.', preferredLang: 'Spanish', tags: ['Lead', 'Corporate referral'], paymentStatus: 'N/A', policies: [], claims: [], payments: [], activity: [ { date: 'Mar 15', text: 'Lead created — needs auto + health quotes', type: 'onboarding' }, { date: 'Mar 20', text: 'Discovery call completed — family of 3', type: 'note' }, ], } /* ────────────────────────────────────────────── */ /* 9 · Lead — Corporación Tecnológica del Valle */ /* ────────────────────────────────────────────── */ const corpTech: MockCustomer = { id: 'cust-009', name: 'Corporación Tecnológica del Valle', initials: 'CT', type: 'Corporate', documentId: '3-101-789456', email: 'rrhh@corptech.cr', phone: '+506 2234-8800', birthDate: '', gender: '', address: 'Heredia, Heredia, Zona Franca', since: '2026-02-10', agent: 'Marco V.', preferredLang: 'Spanish', tags: ['Lead', 'Corporate', 'Group health prospect'], paymentStatus: 'N/A', policies: [], claims: [], payments: [], activity: [ { date: 'Feb 10', text: 'Corporate lead — 45 employees, group health RFP', type: 'onboarding' }, { date: 'Mar 05', text: 'Census received — quoting in progress', type: 'quote' }, ], } /* ────────────────────────────────────────────── */ /* 10 · Cancelled — Fernando Arias Blanco */ /* ────────────────────────────────────────────── */ const fernando: MockCustomer = { id: 'cust-010', name: 'Fernando Arias Blanco', initials: 'FA', type: 'Individual', documentId: '1-0892-0344', email: 'fernando.arias@hotmail.com', phone: '+506 8322-0017', birthDate: '1982-09-14', gender: 'Male', address: 'Alajuela, San Carlos, Ciudad Quesada', since: '2020-04-01', agent: 'Ana R.', preferredLang: 'Spanish', tags: ['Cancelled', 'Win-back opportunity'], paymentStatus: 'N/A', policies: [ { id: 'POL-2020-1100', line: 'Auto', carrier: 'INS', product: '2018 Toyota Hilux — ALJ-4400', premium: 1200, status: 'Cancelled', renewal: '2024-04-01', icon: 'i-heroicons-truck', details: 'Cancelled — non-payment', referralChannel: 'Direct walk-in' }, { id: 'POL-2021-2200', line: 'Home', carrier: 'ASSA', product: 'Homeowner — Ciudad Quesada', premium: 650, status: 'Lapsed', renewal: '2024-06-15', icon: 'i-heroicons-home-modern', details: 'Lapsed — did not renew', referralChannel: 'Direct walk-in' }, ], claims: [ { id: 'CL-1200', policy: 'POL-2020-1100', type: 'Theft attempt', date: '2023-08-10', amount: 3200, status: 'Resolved' }, ], payments: [ { date: '2024-01-01', amount: 154, policy: 'POL-2020-1100', method: 'Transfer', status: 'Paid' }, { date: '2024-02-01', amount: 154, policy: 'POL-2020-1100', method: 'Transfer', status: 'Overdue' }, { date: '2024-03-01', amount: 154, policy: 'POL-2020-1100', method: 'Transfer', status: 'Overdue' }, ], activity: [ { date: 'Apr 01', text: 'Auto policy cancelled — 3 months unpaid', type: 'policy' }, { date: 'Jun 15', text: 'Home policy lapsed — did not renew', type: 'policy' }, { date: 'Aug 20', text: 'Win-back call attempted — no answer', type: 'note' }, ], } /* ────────────────────────────────────────────── */ /* Exports */ /* ────────────────────────────────────────────── */ export const MOCK_CUSTOMERS: MockCustomer[] = [maria, roberto, carolina, luis, sofia, diego, valeria, andres, corpTech, fernando] export const MOCK_CUSTOMERS_BY_ID: Record = Object.fromEntries( MOCK_CUSTOMERS.map((c) => [c.id, c]) ) /** Helper to format currency */ export function fmtMoney(n: number): string { return `$${n.toLocaleString()}` }