215 lines
5.6 KiB
TypeScript
215 lines
5.6 KiB
TypeScript
/**
|
|
* Mock pipeline data for Quotes overview (mission control). Replace with API when ready.
|
|
*/
|
|
|
|
export type QuotePipelineScopeFilter = 'global' | 'corporate' | 'personal'
|
|
|
|
export type QuoteOverviewLob = 'auto' | 'health' | 'life' | 'general_risk' | 'custom'
|
|
|
|
export type QuotePipelineStageId = 'intake' | 'quoted' | 'proposal' | 'bind' | 'handoff'
|
|
|
|
/**
|
|
* Unified pipeline stage IDs — mirrors PipelineStage from useSalesPipeline.
|
|
* Used by the quotes overview kanban so both views share one vocabulary.
|
|
*/
|
|
export type UnifiedStageId =
|
|
| 'customer'
|
|
| 'get_quotes'
|
|
| 'waiting_carriers'
|
|
| 'present_quotes'
|
|
| 'waiting_client'
|
|
| 'solicitud'
|
|
| 'emission'
|
|
|
|
export type MockPipelineQuote = {
|
|
id: string
|
|
customerLabel: string
|
|
/** Corporate vs personal — drives pipeline scope filters */
|
|
party: 'corporate' | 'personal'
|
|
lob: QuoteOverviewLob
|
|
/** Sub-path: single, comparativo, fleet, collective, etc. */
|
|
pathLabel: string
|
|
stage: QuotePipelineStageId
|
|
/** Unified pipeline stage — same vocabulary as sales pipeline */
|
|
unifiedStage: UnifiedStageId
|
|
owner: string
|
|
formsDone: number
|
|
formsTotal: number
|
|
/** Customer has been notified / has portal activity (mock) */
|
|
customerInformed: boolean
|
|
}
|
|
|
|
export const QUOTE_PIPELINE_STAGES: { id: QuotePipelineStageId; label: string; hint: string }[] = [
|
|
{ id: 'intake', label: 'Customer Profile', hint: 'Qualify & rate inputs' },
|
|
{ id: 'quoted', label: 'Quote Prep', hint: 'Options with carrier' },
|
|
{ id: 'proposal', label: 'Acceptance Pending', hint: 'Out to customer' },
|
|
{ id: 'bind', label: 'Emission Pending', hint: 'Submit & conditions' },
|
|
{ id: 'handoff', label: 'Going Live!', hint: 'Policy / solicitud' }
|
|
]
|
|
|
|
/** Unified pipeline stages — same as sales pipeline. Used in overview chart. */
|
|
export const UNIFIED_PIPELINE_STAGES: { id: UnifiedStageId; label: string; isWaiting: boolean }[] = [
|
|
{ id: 'customer', label: 'Customer', isWaiting: false },
|
|
{ id: 'get_quotes', label: 'Get Quotes', isWaiting: false },
|
|
{ id: 'waiting_carriers', label: 'Awaiting Carriers', isWaiting: true },
|
|
{ id: 'present_quotes', label: 'Present Quotes', isWaiting: false },
|
|
{ id: 'waiting_client', label: 'Awaiting Client', isWaiting: true },
|
|
{ id: 'solicitud', label: 'Solicitud', isWaiting: false },
|
|
{ id: 'emission', label: 'Emission', isWaiting: false },
|
|
]
|
|
|
|
export const QUOTE_LOB_OPTIONS: { value: QuoteOverviewLob | 'all'; label: string }[] = [
|
|
{ value: 'all', label: 'All lines' },
|
|
{ value: 'auto', label: 'Auto' },
|
|
{ value: 'health', label: 'Health' },
|
|
{ value: 'life', label: 'Life' },
|
|
{ value: 'general_risk', label: 'General risk' },
|
|
{ value: 'custom', label: 'Custom' }
|
|
]
|
|
|
|
export const MOCK_PIPELINE_QUOTES: MockPipelineQuote[] = [
|
|
{
|
|
id: 'q-101',
|
|
customerLabel: 'Transportes Delta S.A.',
|
|
party: 'corporate',
|
|
lob: 'auto',
|
|
pathLabel: 'Fleet',
|
|
stage: 'quoted',
|
|
unifiedStage: 'waiting_carriers',
|
|
owner: 'A. Morales',
|
|
formsDone: 2,
|
|
formsTotal: 5,
|
|
customerInformed: true
|
|
},
|
|
{
|
|
id: 'q-102',
|
|
customerLabel: 'María Fernández',
|
|
party: 'personal',
|
|
lob: 'auto',
|
|
pathLabel: 'Comparativo',
|
|
stage: 'proposal',
|
|
unifiedStage: 'present_quotes',
|
|
owner: 'L. Chen',
|
|
formsDone: 4,
|
|
formsTotal: 4,
|
|
customerInformed: true
|
|
},
|
|
{
|
|
id: 'q-103',
|
|
customerLabel: 'J. Pérez',
|
|
party: 'personal',
|
|
lob: 'auto',
|
|
pathLabel: 'Single',
|
|
stage: 'intake',
|
|
unifiedStage: 'customer',
|
|
owner: 'L. Chen',
|
|
formsDone: 0,
|
|
formsTotal: 3,
|
|
customerInformed: false
|
|
},
|
|
{
|
|
id: 'q-201',
|
|
customerLabel: 'Clínica Norte',
|
|
party: 'corporate',
|
|
lob: 'health',
|
|
pathLabel: 'Collective',
|
|
stage: 'bind',
|
|
unifiedStage: 'solicitud',
|
|
owner: 'R. Vega',
|
|
formsDone: 6,
|
|
formsTotal: 8,
|
|
customerInformed: true
|
|
},
|
|
{
|
|
id: 'q-202',
|
|
customerLabel: 'Familia Ortega',
|
|
party: 'personal',
|
|
lob: 'health',
|
|
pathLabel: 'Family',
|
|
stage: 'quoted',
|
|
unifiedStage: 'get_quotes',
|
|
owner: 'A. Morales',
|
|
formsDone: 3,
|
|
formsTotal: 6,
|
|
customerInformed: true
|
|
},
|
|
{
|
|
id: 'q-203',
|
|
customerLabel: 'Startup Labs',
|
|
party: 'corporate',
|
|
lob: 'health',
|
|
pathLabel: 'Travel',
|
|
stage: 'intake',
|
|
unifiedStage: 'customer',
|
|
owner: 'R. Vega',
|
|
formsDone: 1,
|
|
formsTotal: 4,
|
|
customerInformed: false
|
|
},
|
|
{
|
|
id: 'q-301',
|
|
customerLabel: 'Holdings Centro',
|
|
party: 'corporate',
|
|
lob: 'life',
|
|
pathLabel: 'Key person',
|
|
stage: 'proposal',
|
|
unifiedStage: 'waiting_client',
|
|
owner: 'L. Chen',
|
|
formsDone: 2,
|
|
formsTotal: 5,
|
|
customerInformed: true
|
|
},
|
|
{
|
|
id: 'q-302',
|
|
customerLabel: 'Carlos Méndez',
|
|
party: 'personal',
|
|
lob: 'life',
|
|
pathLabel: 'Individual',
|
|
stage: 'handoff',
|
|
unifiedStage: 'emission',
|
|
owner: 'A. Morales',
|
|
formsDone: 5,
|
|
formsTotal: 5,
|
|
customerInformed: true
|
|
},
|
|
{
|
|
id: 'q-401',
|
|
customerLabel: 'Retail Plaza',
|
|
party: 'corporate',
|
|
lob: 'general_risk',
|
|
pathLabel: 'Corporate',
|
|
stage: 'quoted',
|
|
unifiedStage: 'waiting_carriers',
|
|
owner: 'R. Vega',
|
|
formsDone: 3,
|
|
formsTotal: 7,
|
|
customerInformed: false
|
|
},
|
|
{
|
|
id: 'q-402',
|
|
customerLabel: 'Ana Ríos',
|
|
party: 'personal',
|
|
lob: 'general_risk',
|
|
pathLabel: 'Personal',
|
|
stage: 'intake',
|
|
unifiedStage: 'get_quotes',
|
|
owner: 'L. Chen',
|
|
formsDone: 1,
|
|
formsTotal: 4,
|
|
customerInformed: true
|
|
},
|
|
{
|
|
id: 'q-501',
|
|
customerLabel: 'Phone-in — manual rate',
|
|
party: 'personal',
|
|
lob: 'custom',
|
|
pathLabel: 'Manual entry',
|
|
stage: 'proposal',
|
|
unifiedStage: 'present_quotes',
|
|
owner: 'R. Vega',
|
|
formsDone: 0,
|
|
formsTotal: 2,
|
|
customerInformed: false
|
|
}
|
|
]
|