// ─── Business Analytics — Types, Labels, Mock Data ─────────────────────────── export type AnalyticsTimePoint = { m: string; v: number; display: string } export type AnalyticsDomainId = 'production' | 'claims' | 'pipeline' | 'service' export type AnalyticsChartType = 'line' | 'bar' | 'area' export interface AnalyticsMetric { id: string domain: AnalyticsDomainId label: string unit: string data12m: AnalyticsTimePoint[] change: string changeTone: 'positive' | 'negative' | 'neutral' defaultChartType: AnalyticsChartType } export interface AnalyticsKpiSummary { id: string label: string value: string change: string changeTone: 'positive' | 'negative' | 'neutral' hint: string sparkline: number[] } // ─── Domain Labels ─────────────────────────────────────────────────────────── export const ANALYTICS_DOMAIN_LABELS: Record = { production: 'Producción', claims: 'Siniestros', pipeline: 'Pipeline', service: 'Servicio', } // ─── Headline KPI Summaries ────────────────────────────────────────────────── export const ANALYTICS_KPI_SUMMARIES: AnalyticsKpiSummary[] = [ { id: 'gwp', label: 'GWP Written', value: '$5.41M', change: '+6.2%', changeTone: 'positive', hint: 'Gross written premium YTD', sparkline: [72, 68, 76, 74, 81, 88, 85, 90, 87, 92, 95, 98] }, { id: 'policies', label: 'Active Policies', value: '342', change: '+12', changeTone: 'positive', hint: 'Currently active policies', sparkline: [290, 295, 298, 305, 310, 315, 318, 322, 328, 332, 338, 342] }, { id: 'loss-ratio', label: 'Loss Ratio', value: '58%', change: '-3.1%', changeTone: 'positive', hint: 'Claims paid / earned premium', sparkline: [68, 72, 65, 63, 60, 58, 61, 59, 57, 60, 58, 58] }, { id: 'retention', label: 'Retention Rate', value: '91%', change: '+1.2%', changeTone: 'positive', hint: 'Client renewal rate', sparkline: [86, 87, 88, 87, 89, 90, 89, 90, 91, 90, 91, 91] }, { id: 'open-claims', label: 'Open Claims', value: '7', change: '-2', changeTone: 'positive', hint: 'Currently unresolved claims', sparkline: [12, 11, 10, 9, 11, 10, 8, 9, 8, 7, 8, 7] }, { id: 'pipeline-value', label: 'Pipeline Value', value: '$6.2M', change: '+$820K', changeTone: 'positive', hint: 'Open quoted premium', sparkline: [42, 45, 48, 50, 52, 55, 53, 56, 58, 60, 62, 65] }, ] // ─── Metrics: Production & Revenue ─────────────────────────────────────────── const productionMetrics: AnalyticsMetric[] = [ { id: 'gwp', domain: 'production', label: 'GWP Written', unit: '$', change: '+6.2%', changeTone: 'positive', defaultChartType: 'area', data12m: [ { m: 'May', v: 62, display: '$3.82M' }, { m: 'Jun', v: 65, display: '$4.01M' }, { m: 'Jul', v: 60, display: '$3.70M' }, { m: 'Aug', v: 68, display: '$4.19M' }, { m: 'Sep', v: 71, display: '$4.38M' }, { m: 'Oct', v: 72, display: '$4.52M' }, { m: 'Nov', v: 68, display: '$4.28M' }, { m: 'Dec', v: 76, display: '$4.71M' }, { m: 'Jan', v: 74, display: '$4.61M' }, { m: 'Feb', v: 81, display: '$4.98M' }, { m: 'Mar', v: 88, display: '$5.41M' }, { m: 'Apr', v: 91, display: '$5.58M' }, ], }, { id: 'premium-by-lob', domain: 'production', label: 'Premium by LOB', unit: '$', change: '+4.8%', changeTone: 'positive', defaultChartType: 'bar', data12m: [ { m: 'Auto', v: 85, display: '$1.82M' }, { m: 'Health', v: 72, display: '$1.54M' }, { m: 'Life', v: 48, display: '$1.03M' }, { m: 'Property', v: 35, display: '$750K' }, { m: 'Marine', v: 18, display: '$386K' }, { m: 'Liability', v: 12, display: '$257K' }, { m: 'Surety', v: 8, display: '$171K' }, { m: 'Travel', v: 5, display: '$107K' }, { m: 'Other', v: 3, display: '$64K' }, { m: '', v: 0, display: '' }, { m: '', v: 0, display: '' }, { m: '', v: 0, display: '' }, ], }, { id: 'new-biz-vs-renewal', domain: 'production', label: 'New Biz vs Renewal', unit: '$', change: '+$820K', changeTone: 'positive', defaultChartType: 'bar', data12m: [ { m: 'May', v: 45, display: '$1.8M' }, { m: 'Jun', v: 48, display: '$1.9M' }, { m: 'Jul', v: 42, display: '$1.7M' }, { m: 'Aug', v: 52, display: '$2.1M' }, { m: 'Sep', v: 55, display: '$2.2M' }, { m: 'Oct', v: 52, display: '$2.4M' }, { m: 'Nov', v: 48, display: '$2.2M' }, { m: 'Dec', v: 62, display: '$2.9M' }, { m: 'Jan', v: 58, display: '$2.7M' }, { m: 'Feb', v: 64, display: '$3.0M' }, { m: 'Mar', v: 70, display: '$3.2M' }, { m: 'Apr', v: 73, display: '$3.4M' }, ], }, { id: 'commission-revenue', domain: 'production', label: 'Commission Revenue', unit: '$', change: '+8.4%', changeTone: 'positive', defaultChartType: 'area', data12m: [ { m: 'May', v: 48, display: '$590K' }, { m: 'Jun', v: 50, display: '$615K' }, { m: 'Jul', v: 46, display: '$565K' }, { m: 'Aug', v: 53, display: '$652K' }, { m: 'Sep', v: 55, display: '$680K' }, { m: 'Oct', v: 55, display: '$680K' }, { m: 'Nov', v: 52, display: '$640K' }, { m: 'Dec', v: 60, display: '$740K' }, { m: 'Jan', v: 58, display: '$715K' }, { m: 'Feb', v: 65, display: '$800K' }, { m: 'Mar', v: 72, display: '$886K' }, { m: 'Apr', v: 75, display: '$923K' }, ], }, { id: 'policies-bound', domain: 'production', label: 'Policies Bound', unit: '#', change: '+12', changeTone: 'positive', defaultChartType: 'bar', data12m: [ { m: 'May', v: 28, display: '28' }, { m: 'Jun', v: 30, display: '30' }, { m: 'Jul', v: 25, display: '25' }, { m: 'Aug', v: 33, display: '33' }, { m: 'Sep', v: 35, display: '35' }, { m: 'Oct', v: 32, display: '32' }, { m: 'Nov', v: 28, display: '28' }, { m: 'Dec', v: 35, display: '35' }, { m: 'Jan', v: 38, display: '38' }, { m: 'Feb', v: 36, display: '36' }, { m: 'Mar', v: 42, display: '42' }, { m: 'Apr', v: 44, display: '44' }, ], }, { id: 'avg-premium', domain: 'production', label: 'Avg Premium', unit: '$', change: '+2.1%', changeTone: 'positive', defaultChartType: 'line', data12m: [ { m: 'May', v: 52, display: '$12.4K' }, { m: 'Jun', v: 53, display: '$12.6K' }, { m: 'Jul', v: 51, display: '$12.1K' }, { m: 'Aug', v: 54, display: '$12.8K' }, { m: 'Sep', v: 55, display: '$13.1K' }, { m: 'Oct', v: 56, display: '$13.3K' }, { m: 'Nov', v: 55, display: '$13.1K' }, { m: 'Dec', v: 57, display: '$13.6K' }, { m: 'Jan', v: 56, display: '$13.3K' }, { m: 'Feb', v: 58, display: '$13.8K' }, { m: 'Mar', v: 59, display: '$14.0K' }, { m: 'Apr', v: 60, display: '$14.3K' }, ], }, ] // ─── Metrics: Claims & Loss ────────────────────────────────────────────────── const claimsMetrics: AnalyticsMetric[] = [ { id: 'claims-count', domain: 'claims', label: 'Claims Opened', unit: '#', change: '-2', changeTone: 'positive', defaultChartType: 'bar', data12m: [ { m: 'May', v: 8, display: '8' }, { m: 'Jun', v: 6, display: '6' }, { m: 'Jul', v: 10, display: '10' }, { m: 'Aug', v: 7, display: '7' }, { m: 'Sep', v: 9, display: '9' }, { m: 'Oct', v: 8, display: '8' }, { m: 'Nov', v: 6, display: '6' }, { m: 'Dec', v: 5, display: '5' }, { m: 'Jan', v: 7, display: '7' }, { m: 'Feb', v: 8, display: '8' }, { m: 'Mar', v: 6, display: '6' }, { m: 'Apr', v: 5, display: '5' }, ], }, { id: 'loss-ratio', domain: 'claims', label: 'Loss Ratio', unit: '%', change: '-3.1%', changeTone: 'positive', defaultChartType: 'line', data12m: [ { m: 'May', v: 66, display: '66%' }, { m: 'Jun', v: 64, display: '64%' }, { m: 'Jul', v: 70, display: '70%' }, { m: 'Aug', v: 67, display: '67%' }, { m: 'Sep', v: 65, display: '65%' }, { m: 'Oct', v: 68, display: '68%' }, { m: 'Nov', v: 72, display: '72%' }, { m: 'Dec', v: 65, display: '65%' }, { m: 'Jan', v: 63, display: '63%' }, { m: 'Feb', v: 60, display: '60%' }, { m: 'Mar', v: 58, display: '58%' }, { m: 'Apr', v: 57, display: '57%' }, ], }, { id: 'avg-resolution-days', domain: 'claims', label: 'Avg Resolution', unit: 'days', change: '-4d', changeTone: 'positive', defaultChartType: 'line', data12m: [ { m: 'May', v: 38, display: '38d' }, { m: 'Jun', v: 35, display: '35d' }, { m: 'Jul', v: 40, display: '40d' }, { m: 'Aug', v: 36, display: '36d' }, { m: 'Sep', v: 34, display: '34d' }, { m: 'Oct', v: 32, display: '32d' }, { m: 'Nov', v: 30, display: '30d' }, { m: 'Dec', v: 28, display: '28d' }, { m: 'Jan', v: 31, display: '31d' }, { m: 'Feb', v: 29, display: '29d' }, { m: 'Mar', v: 27, display: '27d' }, { m: 'Apr', v: 26, display: '26d' }, ], }, { id: 'reserve-trend', domain: 'claims', label: 'Reserve Trend', unit: '$', change: '-$45K', changeTone: 'positive', defaultChartType: 'area', data12m: [ { m: 'May', v: 75, display: '$380K' }, { m: 'Jun', v: 70, display: '$355K' }, { m: 'Jul', v: 80, display: '$405K' }, { m: 'Aug', v: 72, display: '$365K' }, { m: 'Sep', v: 68, display: '$345K' }, { m: 'Oct', v: 65, display: '$330K' }, { m: 'Nov', v: 60, display: '$304K' }, { m: 'Dec', v: 58, display: '$294K' }, { m: 'Jan', v: 62, display: '$314K' }, { m: 'Feb', v: 57, display: '$289K' }, { m: 'Mar', v: 55, display: '$279K' }, { m: 'Apr', v: 52, display: '$264K' }, ], }, { id: 'claims-by-status', domain: 'claims', label: 'Claims by Status', unit: '#', change: '', changeTone: 'neutral', defaultChartType: 'bar', data12m: [ { m: 'Open', v: 3, display: '3' }, { m: 'Review', v: 3, display: '3' }, { m: 'Docs', v: 1, display: '1' }, { m: 'Approved', v: 2, display: '2' }, { m: 'Denied', v: 0, display: '0' }, { m: 'Closed', v: 1, display: '1' }, { m: '', v: 0, display: '' }, { m: '', v: 0, display: '' }, { m: '', v: 0, display: '' }, { m: '', v: 0, display: '' }, { m: '', v: 0, display: '' }, { m: '', v: 0, display: '' }, ], }, { id: 'severity-trend', domain: 'claims', label: 'Avg Severity', unit: '$', change: '-$2.1K', changeTone: 'positive', defaultChartType: 'line', data12m: [ { m: 'May', v: 65, display: '$18.5K' }, { m: 'Jun', v: 60, display: '$17.1K' }, { m: 'Jul', v: 72, display: '$20.5K' }, { m: 'Aug', v: 63, display: '$17.9K' }, { m: 'Sep', v: 58, display: '$16.5K' }, { m: 'Oct', v: 55, display: '$15.7K' }, { m: 'Nov', v: 52, display: '$14.8K' }, { m: 'Dec', v: 50, display: '$14.2K' }, { m: 'Jan', v: 54, display: '$15.4K' }, { m: 'Feb', v: 48, display: '$13.7K' }, { m: 'Mar', v: 46, display: '$13.1K' }, { m: 'Apr', v: 44, display: '$12.5K' }, ], }, ] // ─── Metrics: Sales Pipeline ───────────────────────────────────────────────── const pipelineMetrics: AnalyticsMetric[] = [ { id: 'conversion-rate', domain: 'pipeline', label: 'Conversion Rate', unit: '%', change: '+2.8%', changeTone: 'positive', defaultChartType: 'line', data12m: [ { m: 'May', v: 28, display: '28%' }, { m: 'Jun', v: 30, display: '30%' }, { m: 'Jul', v: 27, display: '27%' }, { m: 'Aug', v: 32, display: '32%' }, { m: 'Sep', v: 31, display: '31%' }, { m: 'Oct', v: 33, display: '33%' }, { m: 'Nov', v: 30, display: '30%' }, { m: 'Dec', v: 35, display: '35%' }, { m: 'Jan', v: 34, display: '34%' }, { m: 'Feb', v: 36, display: '36%' }, { m: 'Mar', v: 38, display: '38%' }, { m: 'Apr', v: 39, display: '39%' }, ], }, { id: 'pipeline-value', domain: 'pipeline', label: 'Pipeline Value', unit: '$', change: '+$820K', changeTone: 'positive', defaultChartType: 'area', data12m: [ { m: 'May', v: 42, display: '$3.8M' }, { m: 'Jun', v: 45, display: '$4.1M' }, { m: 'Jul', v: 40, display: '$3.6M' }, { m: 'Aug', v: 48, display: '$4.4M' }, { m: 'Sep', v: 52, display: '$4.7M' }, { m: 'Oct', v: 55, display: '$5.0M' }, { m: 'Nov', v: 50, display: '$4.5M' }, { m: 'Dec', v: 58, display: '$5.3M' }, { m: 'Jan', v: 56, display: '$5.1M' }, { m: 'Feb', v: 60, display: '$5.5M' }, { m: 'Mar', v: 65, display: '$5.9M' }, { m: 'Apr', v: 68, display: '$6.2M' }, ], }, { id: 'lead-sources', domain: 'pipeline', label: 'Lead Sources', unit: '#', change: '+18%', changeTone: 'positive', defaultChartType: 'bar', data12m: [ { m: 'Referral', v: 85, display: '85' }, { m: 'Walk-in', v: 42, display: '42' }, { m: 'WhatsApp', v: 38, display: '38' }, { m: 'Google', v: 28, display: '28' }, { m: 'Instagram', v: 22, display: '22' }, { m: 'Facebook', v: 15, display: '15' }, { m: 'Partner', v: 12, display: '12' }, { m: 'Event', v: 8, display: '8' }, { m: 'Other', v: 6, display: '6' }, { m: '', v: 0, display: '' }, { m: '', v: 0, display: '' }, { m: '', v: 0, display: '' }, ], }, { id: 'quote-to-bind-days', domain: 'pipeline', label: 'Quote-to-Bind', unit: 'days', change: '-2d', changeTone: 'positive', defaultChartType: 'line', data12m: [ { m: 'May', v: 18, display: '18d' }, { m: 'Jun', v: 16, display: '16d' }, { m: 'Jul', v: 20, display: '20d' }, { m: 'Aug', v: 15, display: '15d' }, { m: 'Sep', v: 14, display: '14d' }, { m: 'Oct', v: 13, display: '13d' }, { m: 'Nov', v: 15, display: '15d' }, { m: 'Dec', v: 12, display: '12d' }, { m: 'Jan', v: 14, display: '14d' }, { m: 'Feb', v: 11, display: '11d' }, { m: 'Mar', v: 10, display: '10d' }, { m: 'Apr', v: 9, display: '9d' }, ], }, { id: 'agent-performance', domain: 'pipeline', label: 'Agent Performance', unit: '#', change: '', changeTone: 'neutral', defaultChartType: 'bar', data12m: [ { m: 'Ana R.', v: 88, display: '44 pólizas' }, { m: 'Marco V.', v: 72, display: '36 pólizas' }, { m: 'Carlos V.', v: 64, display: '32 pólizas' }, { m: 'María F.', v: 56, display: '28 pólizas' }, { m: 'Luis G.', v: 40, display: '20 pólizas' }, { m: '', v: 0, display: '' }, { m: '', v: 0, display: '' }, { m: '', v: 0, display: '' }, { m: '', v: 0, display: '' }, { m: '', v: 0, display: '' }, { m: '', v: 0, display: '' }, { m: '', v: 0, display: '' }, ], }, { id: 'win-rate', domain: 'pipeline', label: 'Win Rate', unit: '%', change: '+3.5%', changeTone: 'positive', defaultChartType: 'line', data12m: [ { m: 'May', v: 35, display: '35%' }, { m: 'Jun', v: 38, display: '38%' }, { m: 'Jul', v: 33, display: '33%' }, { m: 'Aug', v: 40, display: '40%' }, { m: 'Sep', v: 42, display: '42%' }, { m: 'Oct', v: 41, display: '41%' }, { m: 'Nov', v: 39, display: '39%' }, { m: 'Dec', v: 44, display: '44%' }, { m: 'Jan', v: 43, display: '43%' }, { m: 'Feb', v: 46, display: '46%' }, { m: 'Mar', v: 48, display: '48%' }, { m: 'Apr', v: 50, display: '50%' }, ], }, ] // ─── Metrics: Customer & Service ───────────────────────────────────────────── const serviceMetrics: AnalyticsMetric[] = [ { id: 'support-volume', domain: 'service', label: 'Tickets Opened', unit: '#', change: '+15%', changeTone: 'negative', defaultChartType: 'bar', data12m: [ { m: 'May', v: 22, display: '22' }, { m: 'Jun', v: 25, display: '25' }, { m: 'Jul', v: 28, display: '28' }, { m: 'Aug', v: 24, display: '24' }, { m: 'Sep', v: 30, display: '30' }, { m: 'Oct', v: 27, display: '27' }, { m: 'Nov', v: 32, display: '32' }, { m: 'Dec', v: 20, display: '20' }, { m: 'Jan', v: 26, display: '26' }, { m: 'Feb', v: 29, display: '29' }, { m: 'Mar', v: 34, display: '34' }, { m: 'Apr', v: 36, display: '36' }, ], }, { id: 'sla-compliance', domain: 'service', label: 'SLA Compliance', unit: '%', change: '+4%', changeTone: 'positive', defaultChartType: 'line', data12m: [ { m: 'May', v: 78, display: '78%' }, { m: 'Jun', v: 80, display: '80%' }, { m: 'Jul', v: 76, display: '76%' }, { m: 'Aug', v: 82, display: '82%' }, { m: 'Sep', v: 84, display: '84%' }, { m: 'Oct', v: 83, display: '83%' }, { m: 'Nov', v: 85, display: '85%' }, { m: 'Dec', v: 88, display: '88%' }, { m: 'Jan', v: 86, display: '86%' }, { m: 'Feb', v: 89, display: '89%' }, { m: 'Mar', v: 90, display: '90%' }, { m: 'Apr', v: 92, display: '92%' }, ], }, { id: 'avg-response-time', domain: 'service', label: 'Avg Response Time', unit: 'hrs', change: '-1.2h', changeTone: 'positive', defaultChartType: 'line', data12m: [ { m: 'May', v: 72, display: '5.8h' }, { m: 'Jun', v: 68, display: '5.4h' }, { m: 'Jul', v: 75, display: '6.0h' }, { m: 'Aug', v: 65, display: '5.2h' }, { m: 'Sep', v: 60, display: '4.8h' }, { m: 'Oct', v: 55, display: '4.4h' }, { m: 'Nov', v: 52, display: '4.2h' }, { m: 'Dec', v: 48, display: '3.8h' }, { m: 'Jan', v: 50, display: '4.0h' }, { m: 'Feb', v: 45, display: '3.6h' }, { m: 'Mar', v: 42, display: '3.4h' }, { m: 'Apr', v: 40, display: '3.2h' }, ], }, { id: 'retention-rate', domain: 'service', label: 'Retention Rate', unit: '%', change: '+1.2%', changeTone: 'positive', defaultChartType: 'area', data12m: [ { m: 'May', v: 84, display: '84%' }, { m: 'Jun', v: 85, display: '85%' }, { m: 'Jul', v: 86, display: '86%' }, { m: 'Aug', v: 87, display: '87%' }, { m: 'Sep', v: 88, display: '88%' }, { m: 'Oct', v: 88, display: '88%' }, { m: 'Nov', v: 87, display: '87%' }, { m: 'Dec', v: 89, display: '89%' }, { m: 'Jan', v: 90, display: '90%' }, { m: 'Feb', v: 90, display: '90%' }, { m: 'Mar', v: 91, display: '91%' }, { m: 'Apr', v: 91, display: '91%' }, ], }, { id: 'nps-score', domain: 'service', label: 'NPS Score', unit: '#', change: '+5', changeTone: 'positive', defaultChartType: 'line', data12m: [ { m: 'May', v: 42, display: '42' }, { m: 'Jun', v: 44, display: '44' }, { m: 'Jul', v: 40, display: '40' }, { m: 'Aug', v: 46, display: '46' }, { m: 'Sep', v: 48, display: '48' }, { m: 'Oct', v: 50, display: '50' }, { m: 'Nov', v: 48, display: '48' }, { m: 'Dec', v: 52, display: '52' }, { m: 'Jan', v: 54, display: '54' }, { m: 'Feb', v: 55, display: '55' }, { m: 'Mar', v: 58, display: '58' }, { m: 'Apr', v: 60, display: '60' }, ], }, { id: 'ticket-resolution-days', domain: 'service', label: 'Ticket Resolution', unit: 'days', change: '-0.8d', changeTone: 'positive', defaultChartType: 'line', data12m: [ { m: 'May', v: 55, display: '4.4d' }, { m: 'Jun', v: 52, display: '4.2d' }, { m: 'Jul', v: 58, display: '4.6d' }, { m: 'Aug', v: 50, display: '4.0d' }, { m: 'Sep', v: 48, display: '3.8d' }, { m: 'Oct', v: 45, display: '3.6d' }, { m: 'Nov', v: 42, display: '3.4d' }, { m: 'Dec', v: 40, display: '3.2d' }, { m: 'Jan', v: 43, display: '3.4d' }, { m: 'Feb', v: 38, display: '3.0d' }, { m: 'Mar', v: 36, display: '2.9d' }, { m: 'Apr', v: 34, display: '2.7d' }, ], }, ] // ─── Combined Export ───────────────────────────────────────────────────────── export const ANALYTICS_METRICS: AnalyticsMetric[] = [ ...productionMetrics, ...claimsMetrics, ...pipelineMetrics, ...serviceMetrics, ]