53 lines
1.5 KiB
TypeScript
53 lines
1.5 KiB
TypeScript
import { useLocalStorageRef } from '~/utils/useLocalStorageRef'
|
|
|
|
export type EmissionItem = {
|
|
id: string
|
|
createdAt: string
|
|
customerLabel: string
|
|
insurerSlug: string
|
|
subRamoKey: string
|
|
productLine: string
|
|
status: 'pending_review' | 'approved' | 'sent_to_insurer' | 'in_force'
|
|
bindToken?: string
|
|
/** 'auto' = generated from quote acceptance, 'manual' = created from solicitud form */
|
|
source?: 'auto' | 'manual'
|
|
/** Carrier product name when auto-generated from comparative */
|
|
carrierProduct?: string
|
|
}
|
|
|
|
const KEY = 'policy-ui-emissions-queue-v1'
|
|
|
|
export function useEmissionsQueue() {
|
|
const items = useLocalStorageRef<EmissionItem[]>(KEY, () => [])
|
|
|
|
function enqueue(
|
|
entry: Omit<EmissionItem, 'id' | 'createdAt' | 'status'> & { status?: EmissionItem['status'] }
|
|
) {
|
|
const row: EmissionItem = {
|
|
id: crypto.randomUUID?.() ?? String(Date.now()),
|
|
createdAt: new Date().toISOString(),
|
|
status: entry.status ?? 'pending_review',
|
|
...entry
|
|
}
|
|
items.value = [row, ...items.value]
|
|
return row
|
|
}
|
|
|
|
function approve(id: string) {
|
|
const i = items.value.find((x) => x.id === id)
|
|
if (i) i.status = 'approved'
|
|
}
|
|
|
|
function sendToInsurer(id: string) {
|
|
const i = items.value.find((x) => x.id === id)
|
|
if (i) i.status = 'sent_to_insurer'
|
|
}
|
|
|
|
function markInForce(id: string) {
|
|
const i = items.value.find((x) => x.id === id)
|
|
if (i) i.status = 'in_force'
|
|
}
|
|
|
|
return { items, enqueue, approve, sendToInsurer, markInForce }
|
|
}
|