{{ entry.detail }}
+ ++ Choose a theme for the entire application. Colors, inputs, buttons, cards, sidebar, and top bar all follow your choice. + Your preference is saved to this browser. +
+
+ Theme applies instantly to all pages including sidebar navigation, cards, inputs, buttons, badges, and KPI panels.
+ You can also quickly switch themes from the
+
+ No customers, policies, or claims match "{{ q.trim() }}" +
+ + + + +{{ model.title }}
+{{ model.tagline }}
+Cotización
+{{ fmtDate(model.quoteDateIso) }}
+{{ fmtUsd(model.request.sumAssuredUsd) }}
+Suma asegurada
++ {{ fmtUsd(model.request.monthlyPremiumUsd) }} + / mes +
++ Prima anual equivalente: {{ fmtUsd(model.request.annualPremiumUsd) }} / año +
+| Suma asegurada | ++ {{ c.yearLabel }} + Edad {{ c.ageLabel }} + | +Destacado | +
|---|---|---|
| {{ fmtUsd(row.sumAssuredUsd) }} | ++ {{ fmtUsd(c.guaranteed) }} + {{ fmtUsd(c.projected) }} + | +
+ + {{ fmtUsd(row.highlightProjectedUsd) }} + ++ {{ row.highlightNote }} + + |
+
+ {{ row.footnote }} +
+Primas acumuladas pagadas (referencia)
+Review and send quote requests to carrier quoting inboxes.
+Contact on file for this quote — we’ll use it for status and carrier emails.
+Single quote or comparative — same workflow; comparative opens the comparison sheet after you send requests.
++ Choose carriers (quoting emails are maintained per provider in Settings). Pick coverage packages to request. +
+Review the health quote request before sending or saving.
+Single quote or comparative PDF — same steps; comparative opens the comparison sheet after acceptance.
++ Choose carriers and product shells to request. Quoting contacts live per provider in Settings. +
+Review the life quote request before sending or saving.
+Single quote or comparative PDF — same steps; comparative opens the comparison sheet after acceptance.
++ Choose carriers and plan shells to request. Quoting contacts live per provider in Settings. +
++ Profile, photo, and how the app looks for you. Software-wide configuration stays under Settings; company branding + is managed separately by a tenant administrator. +
+Avatar syncs when directory login is connected.
+Locale, density, and defaults will live here when account APIs exist.
+ ++ Get AI-powered guidance on open cases, including next steps, risk flags, and suggested actions. +
++ Draft professional client and carrier emails with AI, using policy context and brokerage tone. +
++ Upload two or more policy documents and get an AI-generated side-by-side coverage comparison. +
++ Analyze your book for cross-sell opportunities, assign leads to agents, and connect to email campaigns. +
+Scan your entire book of business for coverage gaps, mono-line clients, and cross-sell opportunities based on client profiles.
+ +Assign qualified leads and opportunities to agents based on capacity, expertise, and territory. Track conversion rates per agent.
+ +Connect to email campaigns for renewal nudges, cross-sell outreach, and re-engagement sequences. Track open rates and conversions.
+ +Visualize your sales pipeline by stage, LOB, and agent. Forecast close rates and identify stalled deals needing attention.
+ +AI-powered recommendations for which products to offer existing clients based on their profile, industry, and current coverage.
+ +Agent scorecards, team leaderboards, conversion funnels, and revenue attribution — all in real time.
+ ++ Consolidated view — production, claims, pipeline, and service KPIs with interactive charts. +
+{{ kpi.label }}
+ {{ kpi.change }} +{{ kpi.value }}
+{{ kpi.hint }}
+ +
+
Pick any metric, chart type, and time range.
++ {{ chartBuilderData[chartBuilderData.length - 1]?.display }} +
+ {{ chartBuilderMetricObj.change }} + {{ chartBuilderMetricObj.label }} +{{ metric.label }}
+ {{ metric.change }} ++ Your schedule, system alerts, renewal deadlines, and follow-ups in one view. +
+Toggle information layers on/off to customize your view.
+Event types
+Double-click a day to add an event
++ +{{ cell.events.length - 3 }} more +
+{{ event.title }}
+ Urgent + You +{{ event.detail }}
+No events match your current layers.
+{{ event.title }}
+ Urgent + You +{{ event.detail }}
+No claim with ID {{ claimId }} exists.
+{{ claim.aiRecap }}
+ +| + | Task | +Status | +Assignee | +Due | +SLA | +
|---|---|---|---|---|---|
| + |
+ {{ task.title }}
+ System suggested
+ |
+ {{ TASK_STATUS_LABELS[task.status] }} | +{{ task.assignee }} | +{{ fmtDate(task.dueDate) }} | ++ + {{ task.slaPercent }}% + | +
Intake complete — forms ready to generate.
+ + + + No generated forms yet. Complete the intake form first. + +| Date | Amount | Type | Description |
|---|---|---|---|
| {{ fmtDate(e.date) }} | +{{ fmtMoney(e.amount) }} | +Reserve Change | ++ {{ e.description }} + {{ e.annotation }} + | +
| No reserve changes recorded. | |||
| Date | Amount | Description |
|---|---|---|
| {{ fmtDate(e.date) }} | +{{ fmtMoney(e.amount) }} | +{{ e.description }} | +
| No payments recorded. | ||
| Date | Amount | Description |
|---|---|---|
| {{ fmtDate(e.date) }} | +{{ fmtMoney(e.amount) }} | +{{ e.description }} | +
| No subrogation activity. | ||
+ Track claims lifecycle from first notice of loss through resolution and payment. +
+Open claims
+{{ kpis.openClaims }}
+Under review
+{{ kpis.underReview }}
+SLA breached
+{{ kpis.breached }}
+Avg days open
+{{ kpis.avgDays }}d
+Total reserved
+{{ formatCurrency(kpis.totalReserved) }}
+| + | Claim | +Customer / Agent | +Line / Type | +Carrier | +Status | +Reserved | +Paid | +Days | +Priority | +Docs | +
|---|---|---|---|---|---|---|---|---|---|---|
| + |
+ |
+
+ {{ c.customer || 'Unnamed customer' }} +{{ c.agent || '—' }} + |
+
+ {{ c.line }} +{{ c.type }} + |
+ {{ c.carrier }} | +
+
+ {{ CARRIER_STATUS_LABELS[c.carrierStatus] }}
+ {{ WORKFLOW_STATUS_LABELS[c.workflowStatus] }}
+
+ |
+ {{ c.reserved }} | +{{ c.paid }} | ++ {{ c.daysOpen }}d + | ++ {{ priorityMeta[c.priority].label }} + | ++ {{ c.docsPending }} + — + | +
This intake form link is invalid or has expired. Please contact your broker for a new link.
+This intake form link expired on {{ new Date(claim.expiresAt).toLocaleDateString() }}. Please contact your broker to request a new link.
+Your claim information for {{ claim.id }} has been submitted successfully.
+Your broker {{ claim.handler }} will review the information and follow up with you shortly.
+When and where did the incident occur?
+ +Your vehicle and other parties involved.
+ +Information about the patient and medical provider.
+ +Details about the affected property.
+ +Upload photos and supporting documents. Take clear, well-lit photos.
+ +Please review your information before submitting.
+ +{{ Object.values(uploadedPhotos).filter(Boolean).length }} of {{ photoSlots.length }} photos uploaded
+Configure SLA rules, escalation tiers, required documents, and alert thresholds.
+Set target resolution days per line of business. Escalation tiers auto-compute from percentages.
+| Line of Business | +Target Days | +Tier 1 ({{ slaRules[0]?.tier1Pct ?? 50 }}%) | +Tier 2 ({{ slaRules[0]?.tier2Pct ?? 75 }}%) | +Tier 3 ({{ slaRules[0]?.tier3Pct ?? 100 }}%) | +
|---|---|---|---|---|
| {{ rule.lob }} | ++ + | +{{ tierDays(rule, rule.tier1Pct) }} days | +{{ tierDays(rule, rule.tier2Pct) }} days | +{{ tierDays(rule, rule.tier3Pct) }} days | +
Actions triggered when SLA thresholds are reached.
+Check which documents are required at each carrier status stage. Missing docs generate tasks automatically.
+| Status ↓ / Doc → | ++ {{ doc }} + | +
|---|---|
| {{ status }} | ++ ✓ + · + | +
Configure when the system flags claims for attention.
+Alert when reserve changes by more than this percentage.
+Highlight claims older than this threshold.
+Suggest escalation when carrier hasn't responded.
+Flag overdue required documents after this many days.
+Manage which carrier-specific forms are available for generation. Government forms (FUD) are not managed here.
+| Form Name | +Carrier | +LOB | +Active | +
|---|---|---|---|
| {{ ft.name }} | +{{ ft.carrier }} | +{{ ft.lob }} | ++ + | +
+ Premium collection tracking — overdue balances, payment follow-up, assignment rules, and reconciliation. +
+Overdue Accounts
+{{ kpis.totalAccounts }}
+Total Overdue
+{{ formatCurrency(kpis.totalOverdue) }}
+30-Day Overdue
+{{ kpis.thirtyDay }}
+60-Day Overdue
+{{ kpis.sixtyDay }}
+90+ Day Overdue
+{{ kpis.ninetyPlus }}
+Collection Rate
+{{ kpis.collectionRate }}%
+| + | Customer | +Policy / LOB | +Insurer | +Overdue | +Total Premium | +Days | +Grade | +Collector | +Status | +Last Contact | +Actions | +
|---|---|---|---|---|---|---|---|---|---|---|---|
| + + | +
+ |
+
+ {{ a.lob }} + |
+ {{ a.insurer }} | +{{ formatCurrency(a.overdueAmount) }} | +{{ formatCurrency(a.totalPremium) }} | ++ {{ a.daysOverdue }}d + | ++ {{ a.grade }} + | ++ {{ a.assignedAgent }} + Unassigned + | ++ {{ statusMeta[a.status].label }} + | +{{ formatDate(a.lastContactDate) }} | +
+
+
+
+
+ |
+
|
+
+
+
+
+
+
+
+ Contact History & Notes+No contact history recorded.
+
+
+
+
+
+ {{ note.note }} +
+
+ Payment Plan+
+
+
+ Total Amount
+ {{ formatCurrency(a.paymentPlan.totalAmount) }}
+
+
+ Installments
+ {{ a.paymentPlan.installments }} payments of {{ formatCurrency(a.paymentPlan.amountPer) }}
+
+
+ Next Due
+ {{ formatDate(a.paymentPlan.nextDue) }}
+
+ |
+ |||||||||||
+ Accounts assigned to you ({{ currentUser }}) for collection. {{ myAccounts.length }} active case{{ myAccounts.length !== 1 ? 's' : '' }}. +
+No accounts assigned
+You currently have no collection accounts. Check with your manager or browse available accounts in My Lists.
+| + | Customer | +Policy / LOB | +Insurer | +Overdue | +Days | +Grade | +Status | +Last Contact | +Actions | +
|---|---|---|---|---|---|---|---|---|---|
| + + | +
+ {{ a.economicGroup }} + |
+
+ {{ a.lob }} + |
+ {{ a.insurer }} | +{{ formatCurrency(a.overdueAmount) }} | ++ {{ a.daysOverdue }}d + | +{{ a.grade }} | +{{ statusMeta[a.status].label }} | +{{ formatDate(a.lastContactDate) }} | +
+
+
+
+
+ |
+
|
+
+
+
+
+ Contact History & Notes+No contact history recorded.
+
+
+
+
+
+ {{ note.note }} +
+
+ Payment Plan+
+
+ Total Amount{{ formatCurrency(a.paymentPlan.totalAmount) }}
+ Installments{{ a.paymentPlan.installments }} payments of {{ formatCurrency(a.paymentPlan.amountPer) }}
+ Next Due{{ formatDate(a.paymentPlan.nextDue) }}
+ |
+ |||||||||
+ Build your own collection routes — pick accounts and create a work list to take on the road. +
+Select accounts ({{ selectedForList.size }} selected)
+| + + | +Customer | +Policy | +Insurer | +Overdue | +Days | +Grade | +Status | +
|---|---|---|---|---|---|---|---|
| + + | +{{ a.customerName }} | +
+ {{ a.lob }} + |
+ {{ a.insurer }} | +{{ formatCurrency(a.overdueAmount) }} | ++ {{ a.daysOverdue }}d + | +{{ a.grade }} | +{{ statusMeta[a.status].label }} | +
No lists yet
+Create a collection list to organize your route and track which accounts to visit.
++ Accounts awaiting assignment. Use Smart Assign to assign by criteria, or assign individually. +
+Click accounts to select them for assignment.
+| + | Customer | +Insurer | +Overdue | +Days | +Grade | +
|---|---|---|---|---|---|
| + | {{ a.customerName }} | +{{ a.insurer }} | +{{ formatCurrency(a.overdueAmount) }} | +{{ a.daysOverdue }}d | +{{ a.grade }} | +
| + + | +Customer | +Policy / LOB | +Insurer | +Overdue | +Days | +Grade | +Status | +Assigned To | +
|---|---|---|---|---|---|---|---|---|
| + + | +
+ |
+
+ {{ a.lob }} + |
+ {{ a.insurer }} | +{{ formatCurrency(a.overdueAmount) }} | ++ {{ a.daysOverdue }}d + | +{{ a.grade }} | +{{ statusMeta[a.status].label }} | +
+
+
+
+
+ |
+
+ Upload insurer payment reports to reconcile accounts. Policies included in the report are marked as paid. + Policies NOT on the report that have outstanding balances remain overdue. +
+ + +Drag & drop your payment report here
+Accepts .xls, .xlsx, .csv files
+ +Report processed successfully
++ {{ uploadSummary.policiesPaid }} policies marked as paid, {{ uploadSummary.newOverdue }} new overdue accounts detected. +
+{{ rec.filename }}
+{{ formatDate(rec.date) }}
++ Define automatic collector assignment based on insurer, policy type, grade, or specific accounts. +
+| Condition | +Assigned Agent | +Enabled | +Remove | +
|---|---|---|---|
| + {{ describeRule(rule) }} + | ++ {{ rule.assignedAgent }} + | +
+ |
+ + + | +
Configure automated collection behaviors and notifications.
+ +Auto-escalate overdue accounts
+Automatically escalate accounts that exceed the escalation threshold.
+Send reminder emails to customers
+Automatically send payment reminder emails to overdue customers.
+Notify assigned agent on status change
+Send a notification to the assigned collector when an account status changes.
+Default escalation threshold
+Number of days overdue before automatic escalation triggers.
+{{ customer.email }}
+{{ serviceGrade.name }}
+{{ serviceScore }} pts
+
Nothing upcoming — all clear
+
-
Total Premium
+{{ totalPremium }}
+/year across {{ mock.policies.length }} {{ mock.policies.length === 1 ? 'policy' : 'policies' }}
+Active Policies
+{{ activePolicies.length }}
+{{ coveredLines.join(', ') || 'None' }}
+Open Claims
+{{ openClaims.length }}
+{{ openClaims.length > 0 ? openClaims.map(c => c.id).join(', ') : 'No open claims' }}
+Client Since
+{{ mock.since.slice(0, 4) }}
+{{ yearsSince }}+ years{{ mock.tags.length ? ' \u00b7 ' + mock.tags[0] : '' }}
+Payment Status
+{{ mock.paymentStatus }}
+{{ mock.paymentStatus === 'Current' ? 'All premiums up to date' : mock.paymentStatus === 'Overdue' ? 'Payment action required' : mock.paymentStatus === 'N/A' ? 'No active billing' : 'Payment pending' }}
+Coverage Lines
+{{ coveredLines.length }} of {{ ALL_LINES.length }}
+{{ coveredLines.length === ALL_LINES.length ? 'Full coverage' : coverageGaps.length + ' gap' + (coverageGaps.length === 1 ? '' : 's') }}
+{{ pol.line }} — {{ pol.carrier }}
+{{ pol.id }}
+Recent Activity
+{{ event.text }}
+{{ event.date }}
+No recent activity
+
-
Open Actions
+No open actions
+
-
Recently Closed
+No recently closed items
+- {{ policy.plate }} — {{ policy.year }} {{ policy.make }} {{ policy.model }} -
-{{ policy.application_id?.slice(0, 8) }}...
-{{ pol.product }}
+ {{ pol.line }} + {{ pol.status }} +{{ pol.details }}
+${{ pol.premium.toLocaleString() }}
+/year
No policies yet
Pending
+{{ pol.product }}
+ {{ pol.line }} + {{ pol.status }} +{{ pol.details }}
+${{ pol.premium.toLocaleString() }}
+/year
+{{ pol.product }}
+ {{ pol.line }} + {{ pol.status }} +{{ pol.details }}
+${{ pol.premium.toLocaleString() }}
+/year
+No policies on file
+{{ claim.id }} — {{ claim.type }}
+ {{ claim.status }} +Policy {{ claim.policy }} · Filed {{ formatDate(claim.date) }}
+${{ claim.amount.toLocaleString() }}
+No claims on file
+| Date | +Policy | +Method | +Status | +Amount | +
|---|---|---|---|---|
| {{ formatDate(pay.date) }} | +{{ pay.policy }} | +{{ pay.method }} | ++ + {{ pay.status }} + + | +${{ pay.amount.toLocaleString() }} | +
No payment history
+{{ event.text }}
+No activity recorded
+{{ entry.detail }}
+ +No entries match this filter
+No linked household members
+Corporación Tecnológica del Valle
+Employee · Linked to cust-009
+No business affiliations
+No professional contacts
+{{ note.text }}
+Customer Relationship Management
+{{ customerName(c) }}
+{{ customerName(c) }}
{{ customerSubtitle(c) }}
| Customer | +Type | +Phone | +Agent | +Policies | +Premium | +Payment | ++ | |
|---|---|---|---|---|---|---|---|---|
|
+ No customers found +Try adjusting your search or create a new customer + |
+ ||||||||
|
+
+
+ |
+
+ |
+ {{ c.email ?? '—' }} | +{{ c.phone ?? '—' }} | +{{ c._mock ? c._mock.agent : '—' }} | ++ {{ c._mock ? c._mock.policies.length : '—' }} + | ++ {{ c._mock ? fmtMoney(c._mock.policies.reduce((s: number, p: any) => s + p.premium, 0)) + '/yr' : '—' }} + | ++ {{ c._mock.paymentStatus }} + — + | ++ + | +
Create a new customer record
-- {{ type === 'individual' ? 'Individual' : 'Corporate' }} -
-
-
-
{{ op.label }}
+{{ op.value }}
+{{ op.target }}
+Headline operational metrics
+{{ k.label }}
++ {{ k.value }} +
++ {{ k.change }} +
+{{ k.hint }}
+ +Today's tasks
+{{ welcome.dailyTasks.length }} items prioritized
+Alerts
+Exceptions needing attention
+{{ alert.meta.label }}
+{{ alert.message }}
+Trailing 6 months
+{{ row.display }}
+{{ row.m }}
+Book, open quotes & YTD
+{{ item.value }}
+{{ item.label }}
+Segment mix
+YTD and trailing measures
+{{ k.label }}
+{{ k.value }}
+{{ k.change }}
+{{ k.hint }}
+Start a new quote by line of business
+{{ line.label }}
+{{ line.hint }}
+Jump to operational areas
+{{ link.label }}
+{{ link.description }}
+Drag blocks by the grip when reorder is on.
+Choose a role preset or toggle sections.
+Role preset
+{{ activePresetHint }}
+Sections
+{{ w.label }}
+{{ w.description }}
+{{ op.label }}
+{{ op.value }}
+{{ ind.label }}
+{{ ind.value }} · {{ ind.target }}
+Track (1–4 metrics)
+Headline operational metrics
+{{ k.label }}
++ {{ k.value }} +
++ {{ k.change }} +
+{{ k.hint }}
+ +Today's tasks
+{{ completedTaskCount }}/{{ totalTaskCount }} done
+Alerts
+{{ visibleAlerts.length }} exceptions
+All clear — no pending alerts
+{{ alert.meta.label }}
+{{ alert.message }}
+{{ row.display }}
+{{ row.m }}
+Book, open quotes & YTD
+{{ item.value }}
+{{ item.label }}
+Segment mix
+Pipeline stages
+By line of business
+YTD and trailing measures
+{{ k.label }}
+{{ k.value }}
+{{ k.change }}
+{{ k.hint }}
+{{ filteredSentQuotes.length }} quotes · ${{ (filteredSentQuotes.reduce((s, q) => s + q.premium, 0) / 1000).toFixed(0) }}K total premium
+No quotes match these filters
+{{ qt.customer }}
+ {{ qt.party === 'corporate' ? 'Corp' : 'Personal' }} + {{ quoteStatusMeta[qt.status].label }} +${{ qt.premium.toLocaleString() }}
+${{ qt.commission.toLocaleString() }} comm
+{{ qt.sentDate }}
+{{ filteredCalEvents.filter(e => e.urgent).length }} urgent · {{ filteredCalEvents.length }} total
+{{ event.title }}
+ Urgent +{{ event.customer }}
+{{ stickyNotes.length }} notes · auto-saved
+Last 10 days · {{ dashQuickLeads.length }} leads
+No quick leads in the last 10 days.
+{{ lead.name }}
+ {{ qlPriorityMeta(lead.priority).label }} +{{ lead.note }}
+{{ filteredSalesLeads.length }} leads{{ slSourceFilter !== 'all' ? ' · ' + slSourceLabel(slSourceFilter) : '' }}
+No leads match this filter.
+{{ lead.name }}
+ {{ lead.lob }} ++ {{ lead.campaignName ? '📣 ' + lead.campaignName : lead.note }} +
+{{ favCustomers.length }} starred
+No favorite clients yet. Star clients from the customer list.
+{{ c.name }}
+ {{ favTierLabel(c) }} +Resume in-progress work
+{{ draft.label }}
+Saved {{ draft.age }}
+No drafts in progress
+Drag blocks by the grip when reorder is on.
+Choose a role preset or toggle sections.
+Role preset
+{{ activePresetHint }}
+Sections
+{{ w.label }}
+{{ w.description }}
+Active lead entry form coming online.
++ Completed intakes land here for brokerage QA before submission to the carrier. +
+{{ kpi.label }}
+{{ kpi.value }}
+{{ kpi.sub }}
+No emissions in this status
+| ID | +Customer | +Insurer | +Product | +Premium | +Docs | +Status | +Submitted | +Actions | +
|---|---|---|---|---|---|---|---|---|
| {{ em.id }} | +
+ {{ em.customer }} +{{ em.agent }} + |
+ {{ em.insurer }} | +
+ {{ em.line }} +{{ em.product }} + |
+ {{ em.premium }} | ++ + {{ em.docs }}/{{ em.docsTotal }} + + | ++ + {{ statusMeta[em.status].label }} + + | +{{ em.submitted }} | +
+
+
+
+
+
+
+ |
+
| Created | +Customer | +Insurer | +Sub-ramo | +Line | +Status | +Actions | +
|---|---|---|---|---|---|---|
| {{ row.createdAt.slice(0, 10) }} | +{{ row.customerLabel }} | +{{ row.insurerSlug }} | +{{ row.subRamoKey }} | +{{ row.productLine }} | ++ + {{ statusMeta[row.status as EmissionStatus]?.label ?? row.status }} + + | +
+
+
+
+
+
+ |
+
{{ filteredDeals.length }} opportunities · {{ fmt(filteredDeals.reduce((s, d) => s + d.premium, 0)) }} total premium
+No deals in this stage
+{{ deal.customer }}
+ {{ deal.line }} +{{ deal.product }}
+ + +{{ deal.note }}
+ + ++ Register a policy and become the broker of record. Scan a document with AI or enter details manually, then link to an existing customer or create a new one. +
+Customer
+Select the customer this policy belongs to. AI scan will also attempt automatic matching.
+A new customer profile will be created from the policy details.
+Upload policy document
++ Drop a PDF here, or click to browse. AI will read the policy and extract all fields. +
+PDF, PNG, or JPG up to 25 MB
+Policy details
+Enter the policy information manually. All fields can be edited later.
+Customer details will be pulled from the selected existing profile.
+Uploading {{ fileName }}
+Sending document to processing pipeline...
+AI is reading the policy
+Extracting insured details, coverage terms, carrier info, and matching against existing customers...
++ Matched to existing customer: {{ extracted.matchedCustomerName }} + ({{ extracted.matchedCustomerId }}) +
+This policy will be added to their existing profile.
+New customer will be created
+No matching customer found. A new profile will be set up from the extracted data.
+Policy details
+Review and correct any fields before initiating the transfer.
+How it works
+Upload the policy
+Drop a PDF or image of the policy from the outgoing brokerage.
+AI extracts the data
+Policy number, carrier, coverage, insured details, and dates are read automatically.
+Customer matching
+The system checks if the insured is an existing customer or creates a new profile.
+Review and transfer
+Verify the extracted fields, then initiate the broker of record change.
+Potential lead entry form coming online.
+
+ Choose insurer, sub-ramo, person type, and product line. Required forms come from the
+
{{ g.description }}
+Keys: {{ g.fieldKeys.join(', ') }}
+| Name | Relationship | Date of Birth | Cédula | +
|---|---|---|---|
| {{ d.name }} | +{{ d.relationship }} | +{{ fmtDate(d.dob) }} | +{{ d.cedula }} | +
| Name | Relationship | Type | % | +
|---|---|---|---|
| {{ b.name }} | +{{ b.relationship }} | +{{ b.type }} | +{{ b.percentage }}% | +
| ID | Date | Type | Description | Premium Impact | +
|---|---|---|---|---|
| {{ e.id }} | +{{ fmtDate(e.date) }} | +{{ e.type }} | +{{ e.description }} | ++{{ fmtMoney(e.premium) }} | +
| Date | Amount | Method | Status | +
|---|---|---|---|
| {{ fmtDate(p.date) }} | +{{ fmtMoney(p.amount) }} | +{{ p.method }} | +{{ p.status }} | +
| Policy # | LOB | Titular | Status | +
|---|---|---|---|
| {{ rp.lob }} | +{{ rp.titular }} | +{{ statusLabel(rp.status) }} | +
| Claim ID | Date Filed | Type | Status | Amount | + |
|---|---|---|---|---|---|
| {{ fmtDate(c.date) }} | +{{ c.type }} | +{{ c.status }} | +{{ fmtMoney(c.amount) }} | +
+ |
+ |
|
+ {{ c.description }} + |
+ |||||
| Period | Premium | Change | Status | +
|---|---|---|---|
| {{ r.period }} | +{{ fmtMoney(r.premium) }} | ++ + {{ Number(renewalChange(idx)) > 0 ? '+' : '' }}{{ renewalChange(idx) }}% + + — + | +{{ r.status }} | +
{{ policy.application_id }}
+
+
+
+
+
{{ plan.name }} {{ plan.name }} {{ plan.provider_id?.slice(0, 8) }}...
+
{{ selectedPlan.name }} — ${{ Number(selectedPlan.premium).toLocaleString() }}/yr
Additional Fields Additional Fields
+ Consolidated view of all policies, lines, and carriers
+ Cartera Global in development Portfolio views, carrier breakdowns, retention analytics, and book-level reporting are actively being defined. Layout and feature scope may change. {{ evt.text }} No recent policy activity {{ a.name }} Car Insurance Policy Management Failed to load policies {{ error.message }}
- {{ policy.applicant_display_name }}
- {{ policy.applicant_document }} {{ pol.customerName }} No policies match your filters Try adjusting your search or filter criteria No policies found Create a new policy or adjust your filters No policies match your filters Try adjusting your search or filter criteria {{ policyApplicantName(policy) }} No policies found Create a new policy or adjust your filters Submit a new insurance policy quote request Submit a new insurance policy quote request
+
{{ customerDisplayName(c) }} {{ customerDisplayName(c) }} Policy Type Policy Type
+
+
{{ p.name }} {{ p.name }} {{ p.email }} {{ provider.provider_id }}
+
+
+ Stored in this browser for demo — sync to API later. Workflows (quotes, claims, renewals) resolve recipients
+ from these slots.
+
+
Upload a fillable PDF solicitation form Insurance carrier management Insurance carrier management {{ p.name }} {{ p.name }} Register a new insurance carrier Register a new insurance carrier
+
+ Set up the risk, choose who to solicit, then accept — three steps.
+
+ Step {{ STEP_ORDER.indexOf(step) + 1 }} of {{ STEP_ORDER.length }}
+
+ Build a single proposal or side-by-side comparative to present to the customer. Edit manually or attach a carrier PDF for future auto-fill.
+ {{ pdfNote }} Select carrier to present {{ singleCarrier.productName }} {{ singleCarrier.carrierName }} Sum assured ${{ singleCarrier.sumAssuredUsd?.toLocaleString() }} Projected value ${{ singleCarrier.highlightProjectedUsd?.toLocaleString() }} {{ singleCarrier.highlightNote }}
+ {{ acceptState === 'accepted' ? 'Quote accepted' : 'Customer acceptance' }}
+
+ {{ acceptState === 'accepted'
+ ? 'Solicitud auto-generated and sent to emissions queue.'
+ : 'When the customer confirms an option, mark it as accepted to auto-generate the solicitud and push it to emissions.'
+ }}
+ Which option did the customer accept?
+ Need to handle things manually? Generate a broker intake link or go directly to the solicitud form. This path is always available regardless of acceptance status.
+
+ Manually enter a quote for any line of business — quick single-page form.
+ Client Policy Notes
+ Property, liability, fire, all-risk, and commercial lines — set up, detail, review.
+
+ Step {{ STEP_ORDER.indexOf(step) + 1 }} of {{ STEP_ORDER.length }}
+ Single placement or comparative — comparative sends the same risk to multiple carriers.
+ Set up the member, complete forms, pick carriers, then accept — three steps.
+
+ Step {{ STEP_ORDER.indexOf(step) + 1 }} of {{ STEP_ORDER.length }}
+ Pipeline overview, quoting tracker, and team analytics — all in one place. {{ q.customerLabel }} No quotes here {{ col.hint }} {{ q.customerLabel }} No quotes Lines of business {{ a.name }} {{ a.activeDeals }} deals · {{ a.quotesSent }} quotes Deals stuck at a stage for more than 5 days No deals at this stage Deals will appear here as they move through the pipeline. Send nudge?
+ This will send a follow-up reminder to {{ nudgeConfirmDeal.customerName }} about their pending deal.
+
+ Set up the insured, complete screening, pick carriers, then accept — three steps.
+
+ Step {{ STEP_ORDER.indexOf(step) + 1 }} of {{ STEP_ORDER.length }}
+ Pipeline analytics & agent performance Deals stuck at a stage for more than 5 days No deals at this stage Send nudge?
+ This will send a follow-up reminder to {{ nudgeConfirmDeal.customerName }} about their pending deal.
+
+ {{ currentStep === 'customer' ? 'Select a customer to quote, or enter details manually.' : 'Choose a product line to begin the quoting wizard.' }}
+
+ {{ activeTierFilter === 'all' ? 'All contacts' : tierMeta[activeTierFilter as CustomerTier]?.label }}
+ No contacts match your search. Existing coverage Consider cross-sell opportunities in lines not currently covered. Select product line {{ card.label }} {{ card.hint }}
+ Extended capture aligned with brokerage intake. Core fields map to the customer API.
+
+ {{ createdCustomerName }} has been added to your customer base.
+ What would you like to do next?
+ Condiciones particulares, plan de pagos y referencias. Draft persists in this browser until an API is
+ wired.
+ Comisiones agente (%) No renewal with ID {{ renewalId }} exists. {{ renewal.aiRenewalBrief }} {{ party.name }} {{ party.role.replace('_', ' ') }} · {{ party.company }} {{ party.email }} {{ party.phone }} {{ c.subject }} {{ c.body }} {{ renewal.comparison.aiAnalysis }} Waiting for renewal terms Comparison will be available once the carrier sends renewal terms.
+ Pipeline de renovaciones — seguimiento desde revisión hasta confirmación.
+ Urgent (≤ 7d) {{ kpis.urgent }} Pipeline premium {{ formatCurrency(kpis.pipeline) }} High retention risk {{ kpis.atRisk }} SLA breached {{ kpis.breached }} Renewed MTD {{ kpis.renewed }} {{ r.policyNumber }} {{ r.customerName || 'Unnamed customer' }} {{ r.customerType }} {{ r.lob }} {{ r.carrier }} {{ r.expiryDate }} All leads from every source — assign, track, and connect APIs. Total leads {{ leads.length }} Unassigned {{ unassignedCount }} New today {{ newCount }} Pipeline value {{ fmtValue(totalPipeline) }} Connected {{ connectedCount }}/{{ integrations.length }} No leads match your filters. {{ lead.name }}
+ {{ lead.campaignName ? '📣 ' + lead.campaignName : lead.note }}
+ Connect lead sources to automatically import leads. APIs sync on a schedule when connected. {{ intg.name }} {{ intg.description }} Automatically assign leads to agents by source and line of business. Choose how incoming leads are handled when they arrive from any source. Control who can release leads and how agents are notified.
+ Leads Hub can be turned on or off in
+
+ Capture leads in seconds. Every lead lands here and stays visible until you move it to a full quote or customer profile.
+ Contact Lead info Total leads {{ leads.length }} Last 10 days {{ recentLeads(10).length }} Urgent {{ filterCounts.urgent }} High priority {{ filterCounts.high }} No quick leads yet. {{ lead.name }}
+ Manage producer accounts, credentials, and commission schedules. Commissions are calculated on collected cashflow only — unpaid or late premiums do not generate commission until received.
+ Active agents {{ kpis.activeCount }} / {{ kpis.totalCount }} Total book {{ fmtMoney(kpis.totalBook) }} Collected {{ fmtMoney(kpis.totalCollected) }} {{ kpis.collectionRate }}% Outstanding {{ fmtMoney(kpis.totalOutstanding) }} YTD commissions paid {{ fmtMoney(kpis.totalEarned) }} Pending (uncollected) {{ fmtMoney(kpis.totalPending) }} Cashflow-based commission model
+ Agents earn commission only on premiums actually collected. If a client is overdue or in grace period,
+ the corresponding commission moves to "pending" and is not payable until funds are received. This protects
+ the brokerage from paying out on uncollected revenue.
+ {{ agent.name }} {{ agent.email }} No agents match your search. {{ selectedAgent.id }} · {{ selectedAgent.role }} Contact Email {{ selectedAgent.email }} Phone {{ selectedAgent.phone }} Hire date {{ selectedAgent.hireDate }} Last login {{ selectedAgent.lastLogin }} Book of business {{ selectedAgent.book.policies }} Policies {{ fmtMoney(selectedAgent.book.gwp) }} GWP {{ fmtMoney(selectedAgent.book.collected) }} Collected {{ fmtMoney(selectedAgent.book.outstanding) }} Outstanding
+ {{ Math.round(selectedAgent.book.collected / selectedAgent.book.gwp * 100) }}% collected — commission payable on collected portion only
+ YTD commission {{ fmtMoney(selectedAgent.ytdEarned) }} Earned (paid) {{ fmtMoney(selectedAgent.ytdPending) }} Pending (uncollected) Commission schedule by LOB
+ Percentages apply to collected premium only. Overdue or grace-period accounts are excluded from the calculation until payment clears.
+ Configure automated email alerts for renewals, cancellations, late payments, and custom triggers. Email Sender Configuration All automated alerts are sent from this email address. Renewal Alerts Notify when policies approach their renewal date. Cancellation Alerts Alert when a policy enters the cancellation process. Notify these recipients: Late Payment Alerts Escalating notifications based on days overdue. Credit Card Expiry Alerts Notify customers before their payment card expires. Custom Parameter Alerts Define custom rules that trigger alerts based on any field condition.
+ Define service tiers and scoring rules to automatically classify customers by value and engagement.
+ In development
+ This feature uses local configuration only. Once the API is ready, tiers and rules will be persisted server-side and apply across the organization.
+ {{ tier.name }} {{ tier.description }} Benefits Auto-classify customers Automatically assign tiers based on scoring rules
+ Showing {{ previewRows.length }} mock customers. Scores computed from current rules.
+
+ Master catalog: each row maps carriers, sub-ramos, person type, and product line (local vs international
+ health, auto full coverage vs DAT, etc.) to a template file. The
+ Catalog version: {{ version }} · {{ rows.length }} rows {{ rangeLabel }}
+ Carriers, forms, permissions, and tenant organization (superadmin). Your personal theme and profile live under
+ {{ c.title }} {{ c.description }} Show or hide optional sections in the navigation sidebar.
+ Brokerage legal name and logo in the app chrome; report header and footer for PDFs and exports. This applies to
+ the whole tenant — not personal account settings.
+ Company logo (sidebar & home) Current file: {{ draft.logoFileName }} Transparent PNGs work best with the sidebar chrome treatment.
+ Reference layout for the SEGUROS group: each role can
+ grant seven feature columns. Data is static until your API is connected.
+ {{ rangeLabel }}
+ Configure which sections appear and in what order based on your role.
+ In development
+ Layout preferences are stored locally. Once the API is ready, layouts will sync across devices and can be assigned organization-wide by role.
+ Active layout Section order · {{ activeLayout.name }} Reorder sections and toggle visibility for the active layout. Default tab: {{ activeLayout.defaultTab }} Custom layouts Create personalized layouts beyond the built-in role presets. {{ layout.name }} {{ layout.description }} No custom layouts yet. Custom layout creation coming soon.
+ Operational directory for insurance carriers. This is the same provider list used across quotes,
+ onboarding, and policy book — configure templates and status per carrier from detail pages.
+ Browse providers Search, filter, and open a carrier profile. New provider Add a carrier before attaching templates or quotes.
+ Open any provider from the list to manage templates, credentials, and activity — the detail view is
+ the operational control surface.
+
+ Control whether the app describes outbound emails to carrier quoting addresses (Settings →
+ Providers). Turn off when your tenant already gets rates from published tables, direct APIs, or agentic / AI
+ quoting — so users aren’t prompted to “email” carriers unnecessarily.
+ Provider quote emails
+ When enabled, auto and health quote flows explain that requests can be emailed to providers. When disabled,
+ runs are saved in-app for manual pricing, rate tables, or future automation — without implying email dispatch.
+
+ Manage the sources that generate leads and new business — people, companies, digital campaigns, events, and more.
+ {{ editingId ? 'Edit channel' : 'New referral channel' }} Contact info Total channels {{ channels.length }} Active {{ filterCounts.active }} Inactive {{ filterCounts.inactive }} Types {{ new Set(channels.map(c => c.type)).size }} No referral channels yet. {{ ch.name }}
+ Configure 3-tier routing rules for incoming support requests — auto-routing, keyword classification, and open pool settings.
+
+ {{ tierTabs.find(t => t.id === activeTier)?.description }}
+ {{ rule.name }} {{ rule.condition }} {{ rule.name }} {{ rule.condition }} Asignación por defecto Tickets sin coincidencia de regla se asignan a: Umbral de escalamiento Si un ticket no asignado permanece en el pool más de este tiempo, se escala automáticamente. No existe un ticket con ID {{ ticketId }}.
+ Siniestros vinculados {{ ticket.aiSummary }} {{ step.step }} {{ step.result }} {{ msg.body }} {{ msg.subject }} {{ msg.body }} {{ msg.from }} {{ msg.body }} {{ step.step }} {{ step.result }} — {{ fmtDateTime(step.timestamp) }} Documentos adjuntos Los archivos compartidos en la conversación aparecerán aquí. Funcionalidad de carga próximamente. No collectivo account matches ID "{{ id }}".
+ {{ account.product }}
+ ·
+ RUC {{ account.ruc }}
+ ·
+ Agent: {{ account.agent }}
+
+ Upload the employee census (Excel or CSV) provided by the client's HR department.
+ The system will compare it against the current roster and flag new hires, terminations, and changes.
+ Expected columns: Document ID, Name, Department, Role, Tier, Dependents
+ {{ censusStats.newInCensus }} inclusion request(s) and {{ censusStats.missing }} exclusion request(s) have been created.
+ Changed records have been flagged for review.
+ Group account management & operations No group accounts match your filters. No recent activity No group accounts match your filters.
+ Tickets, inquiries, and customer requests — 3-tier routing with WhatsApp & email threads.
+ Abiertos {{ kpis.open }} En proceso {{ kpis.inProgress }} SLA incumplido {{ kpis.breached }} Promedio días {{ kpis.avgDaysOpen }}d Sin asignar {{ kpis.unassigned }} {{ t.subject }} {{ t.lastMessagePreview }} Received {{ formatDate(task.created_at) }} Received {{ formatDate(task.created_at) }} Task Info Task Info Request Payload Request Payload Applicant
+
Solicitation v{{ task.version ?? 1 }} Solicitation v{{ task.version ?? 1 }} {{ task.s3_key }} Plans Plans Plan {{ i + 1 }} Plan {{ i + 1 }} Enter the policy details from the provider Carrier Inbox — Quote & Solicitation Requests Carrier Inbox — Quote & Solicitation Requests
+
{{ task.application_id }}
diff --git a/app/pages/workstation/claims.vue b/app/pages/workstation/claims.vue
new file mode 100644
index 0000000..d6e3883
--- /dev/null
+++ b/app/pages/workstation/claims.vue
@@ -0,0 +1,18 @@
+
+
+
+
+ File, track, and manage insurance claims from first notice through resolution.
+
+ Track outstanding balances, manage payment follow-ups, and reconcile carrier accounts.
+
+ Manage group policies end to end — from census intake through billing reconciliation.
+ {{ group.name }} {{ action.title }} {{ action.desc }} Recent census activity
+ {{ event.group }}
+ — {{ event.action }}
+ {{ event.detail }} {{ stat.label }} {{ stat.value }} {{ stat.sub }} Upcoming billing Next 60 days {{ bill.group }} {{ bill.period }} · Due {{ bill.due }}
+ Handle service requests, endorsements, and policyholder inquiries from a unified inbox.
+
+ Invoicing workflow for the brokerage. Generate, track, and manage invoices tied to policies, commissions, and client accounts. Integrates with carrier billing and AR to keep financials in sync.
+ Create invoices from bound policies, endorsements, or manual entries. Auto-populate client data, premium breakdowns, and tax fields. Schedule monthly, quarterly, or annual invoices for policies with installment plans. Automatic reminders on upcoming due dates. Record payments against invoices, mark partial payments, and flag overdue balances. Ties into the collections workstation. Match brokerage invoices to carrier statements. Surface discrepancies between what was billed and what was remitted. Generate branded PDF invoices, export batches to CSV for accounting software, or integrate via API with ERP systems. Aging reports, collection rates by client segment, revenue recognition dashboards, and commission payout summaries.
+ Monitor upcoming policy expirations and manage the renewal pipeline end to end.
+ Premium
- ${{ Number(plan.premium).toLocaleString() }}
+ ${{ Number(plan.premium).toLocaleString() }}
/year
@@ -332,7 +332,7 @@ const applicantRows = computed(() => {
Accept Plan
+ Accept Plan
Book of Business
+
+
+
+
+
+
+
+ Customer
+ Insurer
+ Product
+ Status
+
+
+
+
+ {{ row.customerLabel }}
+
+
+ {{ row.insurerSlug }}
+
+
+ {{ row.subRamoKey }} · {{ row.productLine }}
+
+
+ In force
+
+
+
+
+
+
+
+
+ Line
+ Policies
+ Premium
+ % of Book
+
+
+
+
+
+
+ {{ row.count }}
+
+
+ {{ fmtMoney(row.totalPremium) }}
+
+
+
+
+
+
+
+
+
+
+ #
+ Carrier
+ Policies
+ GWP
+ Share
+
+
+
+
+ {{ idx + 1 }}
+
+
+ {{ row.carrier }}
+
+
+ {{ row.count }}
+
+
+ {{ fmtMoney(row.gwp) }}
+
+
+
+ Colectivos
+ {{ filtered.length }}
+
+
+
+
+
+
+
+ Group Name
+ LOB
+
+ Members
+ Annual Premium
+
+
+ Status
+
+
+
+
+
+
+
+
+
+ {{ a.lob }}
+
+
+
+ {{ a.totalMembers.toLocaleString() }}
+ ({{ a.dependentsCount }})
+
+ {{ fmtCurrency(a.annualPremium) }}
+
+
+
+
+ {{ statusBadge(a.status).label }}
+
+
+
+
+
+
+
+
+
+
+
+
+ No group accounts match your filters.
+ Policies
- Policies
+ {{ usingMock ? mockPolicies.length : (meta?.total_count ?? 0) }}
+
+
+
+
+
+
+ Policy #
+ Customer
+ Line
+ Carrier
+ Product
+ Premium
+ Status
+ Renewal
+ Agent
+ Actions
+
+
+
+
+
+
+
+
+
+
+
+ {{ pol.carrier }}
+
+
+ {{ pol.product }}
+ {{ pol.details }}
+
+
+ {{ fmtMoney(pol.premium) }}
+ /yr
+
+
+ {{ pol.status }}
+
+
+
+ {{ renewalUrgency(pol.renewal).label }}
+
+
+
+ {{ pol.agent }}
+
+
+
+
+
+
+
+
+
+
+ Applicant
+ Document
+ Details
+ Status
+ Quotes
+ Submitted
+
+
+
+
+
+ {{ policyApplicantDoc(policy) }}
+
+
+
+ {{ policyDetailsSummary(policy) }}
+
+
+
+ {{ statusLabel(policy.status) }}
+
+
+
+ {{ Object.keys(policy.quotes ?? {}).length }} / {{ (policy.selected_providers ?? []).length }}
+
+
+
+ {{ new Date(policy.submitted_at).toLocaleDateString('es-PA') }}
+
+ New Policy
- New Policy
+ {{ provider.name }}
+ {{ provider.name }}
Upload Template
+ Upload Template
Providers
- Providers
+ New Provider
- New Provider
+ Auto quoting
+ {{ STEP_LABELS[step] }}
+ Present Quotes
+
+
+
+
+
+
+
+ Period
+ Age
+ Guaranteed
+ Projected
+
+
+
+ {{ cell.yearLabel }}
+ {{ cell.ageLabel }}
+ ${{ cell.guaranteed?.toLocaleString() }}
+ ${{ cell.projected?.toLocaleString() }}
+ Custom quote entry
+ Client information
+ Policy details
+ Special conditions
+ General risk quoting
+ {{ STEP_LABELS[step] }}
+ Quote type
+ Health quoting
+ {{ STEP_LABELS[step] }}
+ Mission Control
+ Pipeline funnel
+ Agent performance
+ Bottleneck analysis
+ Stage breakdown
+ Life quoting
+ {{ STEP_LABELS[step] }}
+ Mission Control
+ Pipeline Funnel
+ Agent Performance
+
+
+
+
+
+
+
+ Agent
+ Active Deals
+ Quotes Sent
+ Conversion
+ Avg Response
+ Pipeline Value
+
+
+
+ {{ a.name }}
+ {{ a.activeDeals }}
+ {{ a.quotesSent }}
+
+
+ {{ a.conversionRate }}%
+
+
+ {{ a.avgResponseTime }}
+ {{ formatCurrency(a.pipelineValue) }}
+ Bottleneck Analysis
+ Stage Breakdown
+
+
+
+
+
+
+
+
+
+ Customer
+ Product Line
+ Days at Stage
+ Agent
+ Premium
+ Form Completion
+
+
+
+ {{ deal.customerName }}
+ {{ deal.productLine }}
+
+
+ {{ deal.daysAtStage }}d
+
+
+ {{ deal.agent }}
+ {{ formatCurrency(deal.premium) }}
+
+
+ Get Quotes
+ New Customer Registration
+ Customer registered
+ Nuevo registro · Póliza
+
+
+
+
+
+
+
+ #
+ Fecha vencimiento
+ Prima
+
+
+
+ {{ row.n }}
+
+
+
+
+ Renewal not found
+ {{ renewal.id }}
+
+ {{ carrierStatusLabels[renewal.carrierStatus] }}
+
+
+ {{ brokerStatusLabels[renewal.brokerStatus] }}
+
+
+ {{ priorityLabels[renewal.priority] }}
+
+
+ Risk: {{ retentionRiskLabels[renewal.retentionRisk] }}
+
+ Talk Track
+
+
+ Retention Factors
+
+
+ Renewal History
+
+
+
+
+
+
+ Year Carrier Premium Outcome
+
+
+ {{ h.year }}
+ {{ h.carrier }}
+ {{ fmtMoney(h.premium) }}
+
+ {{ h.outcome }}
+
+
+
+
+ Parties
+ Cancellation Details
+
+
+
+
+
+
+
+
+ Task
+ Type
+ Status
+ Assignee
+ Due
+
+
+
+
+ {{ t.title }}
+ {{ t.type.replace('_', ' ') }}
+ {{ t.status.replace('_', ' ') }}
+ {{ t.assignee }}
+ {{ fmtDate(t.dueDate) }}
+
+
+
+
+ No tasks. Required Documents
+
+
+
+
+
+
+ Document Category Uploaded By Date
+
+
+
+ ✓
+ ○
+
+ {{ d.name }}
+ {{ d.category.replace(/_/g, ' ') }}
+ {{ d.uploadedBy || '—' }}
+ {{ d.uploadedAt ? fmtDate(d.uploadedAt) : '—' }}
+ Coverage Comparison
+
+
+
+
+
+
+ Coverage Current Renewal Delta
+
+
+ {{ line.name }}
+ {{ typeof line.currentAmount === 'number' ? fmtMoney(line.currentAmount) : line.currentAmount }}
+ {{ line.renewalAmount !== null ? (typeof line.renewalAmount === 'number' ? fmtMoney(line.renewalAmount) : line.renewalAmount) : '—' }}
+
+ {{ line.delta }}
+ —
+
+ Renewals
+
+
+
+
+
+
+
+
+ Renewal
+ Customer
+ LOB / Carrier
+ Status
+ Current
+ Renewal
+ Expiry
+ Risk
+ Priority
+ Handler
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ formatCurrency(r.currentPremium) }}
+
+
+ {{ formatCurrency(r.renewalPremium) }}
+ {{ r.premiumDelta > 0 ? '+' : '' }}{{ r.premiumDelta }}%
+
+ —
+
+
+ {{ daysDisplay(r.daysUntilExpiry) }}
+
+
+ {{ retentionRiskLabels[r.retentionRisk] }}
+
+
+ {{ priorityLabels[r.priority] }}
+
+
+ {{ r.assignedTo }}
+
+ Leads Hub
+ Auto-assignment rules
+ Intake & release mode
+ Release permissions & notifications
+ Quick Leads
+ Agents & commissions
+
+
+
+
+
+
+
+ Agent
+ Role
+ Policies
+ Book GWP
+ Collected
+ YTD earned
+ Status
+
+
+
+
+
+ {{ agent.role }}
+ {{ agent.book.policies }}
+ {{ fmtMoney(agent.book.gwp) }}
+
+
+ {{ fmtMoney(agent.ytdEarned) }}
+
+
+
+ {{ statusMeta[agent.status].label }}
+
+
+ {{ selectedAgent.name }}
+
+
+
+
+
+
+
+ Line of business
+ New biz %
+ Renewal %
+
+
+
+ {{ tier.lob }}
+
+
+ {{ tier.newPct }}%
+
+
+
+ {{ tier.renewalPct }}%
+
+ Alerts & Notifications
+
+
+
+
+
+
+
+ Days before expiry
+ Active
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Days before expiry
+ Active
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Alert name
+ Field
+ Operator
+ Value
+ Recipients
+ Active
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Customer Attention & Service Levels
+
+
+
+
+
+
+
+ Customer
+ Premium
+ Policies
+ Lines
+ Tenure
+ Score
+ Tier
+
+
+
+ {{ row.name }}
+ {{ row.totalPremium > 0 ? fmtMoney(row.totalPremium) : '—' }}
+ {{ row.policyCount }}
+ {{ row.lineCount }}
+ {{ row.tenureYears }}yr
+ {{ row.score }}
+
+
+ {{ row.tier.name }}
+
+
+ Forms library
+
+
+
+
+
+
+
+ ID
+ Description
+ Carrier(s)
+ Sub-ramo
+ Person type
+ Product line
+ File
+ Badge
+
+
+
+ {{ row.id }}
+ {{ row.description }}
+
+
+ {{ row.subRamoLabel }}
+ {{ personLabel(row.personKinds) }}
+ {{ productLineLabel(row.productLine) }}
+
+
+ {{ row.fileLabel }}
+
+
+
+
+ Software configuration
+ Sidebar modules
+ Organization
+ Roles & permissions
+
+
+
+
+
+ ID
+ Descripción
+ Estado
+
+ SEGUROS
+
+
+
+
+
+
+
+
+
+
+
+ {{ row.id }}
+ {{ row.description }}
+
+
+
+
+ ×
+
+
+ Profile Layouts
+
+ Providers & carriers
+
+ What you configure per carrier
+
+
+ Quote requests
+ Referral Channels
+ Support Routing
+ Ticket no encontrado
+ {{ ticket.id }}
+ {{ STATUS_LABELS[ticket.status] }}
+ {{ PRIORITY_LABELS[ticket.priority] }}
+ {{ TIER_LABELS[ticket.routingTier] }}
+ Traza de Ruteo
+ Información del Cliente
+ Account not found
+ {{ account.name }}
+ {{ account.lob }}
+ {{ statusLabel(account.status) }}
+ {{ account.carrier }}
+
+
+
+
+
+
+
+ Name
+ Document ID
+ Email
+ Department
+ Role
+ Tier
+ Deps
+ Enrolled
+ Status
+ Forms
+ Actions
+
+
+
+ {{ m.name }}
+
+
+ {{ m.documentId }}
+ {{ m.email }}
+ {{ m.department }}
+ {{ m.role }}
+ {{ m.tier }}
+ {{ m.dependents }}
+ {{ fmtDateShort(m.enrollmentDate) }}
+ {{ statusLabel(m.status) }}
+
+
+ {{ m.formsCompleted }}/{{ m.formsTotal }}
+
+
+
+
+
+
+
+ No members match your search.
+ Upload Monthly Census
+ Previous Census Uploads
+
+
+
+
+
+
+
+ File
+ Period
+ Uploaded By
+ Date
+ Result
+ Actions
+
+
+
+
+ March 2026
+ Silvia Acosta
+ Mar 5
+
+ 3 inclusions, 0 exclusions
+
+
+
+
+
+
+
+ February 2026
+ Silvia Acosta
+ Feb 3
+
+ 2 inclusions, 1 exclusion
+
+
+
+
+
+
+
+
+ January 2026
+ Carlos Villalba
+ Jan 6
+
+ 0 changes
+
+
+
+
+
+
+
+
+
+
+ Document ID
+ Name
+ Status
+ Details
+
+
+
+ {{ row.documentId }}
+ {{ row.name }}
+
+
+ {{ reconciliationLabel(row.status) }}
+
+
+
+
+ {{ c }}
+
+ No differences
+
+ Census Reconciled
+
+ Inclusions
+ {{ inclusions.length }}
+
+
+
+
+
+
+
+
+ ID
+ Member / Subject
+ Effective Date
+ Docs Status
+ Status
+ Assignee
+ Created
+
+
+ {{ r.id }}
+
+
+ {{ r.effectiveDate ? fmtDateShort(r.effectiveDate) : '\u2014' }}
+ {{ r.docsStatus ?? '\u2014' }}
+ {{ statusLabel(r.status) }}
+ {{ r.assignee }}
+ {{ fmtDateShort(r.created) }}
+
+
+
+ No inclusion requests.
+
+ Exclusions
+ {{ exclusions.length }}
+
+
+
+
+
+
+
+
+ ID
+ Member / Subject
+ Last Day
+ Reason
+ Status
+ Assignee
+ Created
+
+
+ {{ r.id }}
+
+
+ {{ r.lastDay ? fmtDateShort(r.lastDay) : '\u2014' }}
+ {{ r.reason ?? '\u2014' }}
+ {{ statusLabel(r.status) }}
+ {{ r.assignee }}
+ {{ fmtDateShort(r.created) }}
+
+
+
+ No exclusion requests.
+ Current Billing Period: {{ currentBilling.period }}
+ {{ statusLabel(currentBilling.status) }}
+
+
+
+
+
+
+
+ Period
+ Due Date
+ Invoice Amount
+ Paid Amount
+ Status
+ Billed / Expected
+ Carrier Ref
+
+
+
+ {{ bc.period }}
+ {{ fmtDateShort(bc.dueDate) }}
+ {{ fmtMoney(bc.invoiceAmount) }}
+ {{ fmtMoney(bc.paidAmount) }}
+ {{ statusLabel(bc.status) }}
+
+ {{ bc.membersBilled }} / {{ bc.membersExpected }}
+
+ {{ bc.carrierRef }}
+
+
+
+
+
+
+
+ Claim ID
+ Member
+ Subject
+
+ Status
+
+
+ Priority
+
+
+ Created
+
+ Assignee
+
+
+ {{ c.id }}
+ {{ c.memberName ?? '\u2014' }}
+ {{ c.subject }}
+ {{ statusLabel(c.status) }}
+
+
+ {{ c.priority }}
+
+ {{ fmtDateShort(c.created) }}
+ {{ c.assignee }}
+
+
+
+ No claims match your filters.
+
+
+
+
+
+
+
+ Request ID
+ Member
+ Subject
+ Status
+ Created
+ Notes
+
+
+ {{ c.id }}
+ {{ c.memberName ?? '\u2014' }}
+ {{ c.subject }}
+ {{ statusLabel(c.status) }}
+ {{ fmtDateShort(c.created) }}
+ {{ c.notes ?? '\u2014' }}
+
+
+
+ No certificate requests.
+
+
+
+
+
+
+
+ Amendment ID
+ Subject
+ Status
+ Priority
+ Created
+ Assignee
+
+
+ {{ a.id }}
+ {{ a.subject }}
+ {{ statusLabel(a.status) }}
+
+
+ {{ a.priority }}
+
+ {{ fmtDateShort(a.created) }}
+ {{ a.assignee }}
+
+
+
+ No amendments.
+
+
+
+
+
+
+
+ Name
+ Category
+ Type
+ Size
+ Uploaded By
+ Date
+ Version
+ Actions
+
+
+
+
+ {{ docCategoryLabel(doc.category) }}
+ {{ doc.fileType }}
+ {{ doc.fileSize }}
+ {{ doc.uploadedBy }}
+ {{ fmtDateShort(doc.uploadedAt) }}
+ v{{ doc.version }}
+
+
+
+
+
+ No documents in this category.
+ Colectivos
+ Account Overview
+ Current Status
+ Recent Activity
+ Quick Actions
+ Incoming Support
+
+
+
+
+
+
+
+
+ Ticket
+ Asunto / Último mensaje
+ Cliente
+ Canal
+ Tier
+ Cola
+ Estado
+ Prioridad
+ Asignado
+ Días
+
+
+
+
+
+
+
+
+ {{ t.customerName || 'Unknown caller' }}
+
+
+
+ {{ TIER_LABELS[t.routingTier] }}
+
+ {{ QUEUE_LABELS[t.routedQueue] }}
+
+ {{ statusMeta[t.status].label }}
+
+
+ {{ priorityMeta[t.priority].label }}
+
+ {{ t.assignedTo ?? '—' }}
+
+ {{ t.daysOpen }}d
+
+ {{ task.application_id }}
- {{ task.application_id }}
+ Record Quote Response
Record Quote Response
Issue Policy
+ Issue Policy
Tasks
- Tasks
+ Claims
+ Collections
+ Collectivos
+
+
+
+
+
+
+
+ Group
+ Carrier
+ Line
+ Members
+ Premium
+ Renewal
+ Status
+
+
+
+
+
+ {{ group.carrier }}
+
+ {{ group.line }}
+
+ {{ group.members }}
+ {{ group.premium }}
+ {{ group.renewal }}
+
+ {{ group.status }}
+
+ Customer Service
+ Facturación
+ Invoice generation
+ Recurring billing
+ Payment tracking
+ Carrier reconciliation
+ PDF & export
+ Billing analytics
+ Renewals
+