Large Loss Workflow
The ClaimsEventsConsumer creates a policy.agent_tasks row when isLargeLoss = true. This page explains what that task means, how underwriters action it, and what downstream effects it can trigger.
What Is a Large Loss?
A large loss is a claim settlement where the total settlement amount meets or exceeds the LARGE_LOSS_THRESHOLD (configured in ClaimsOne, default $100,000). These settlements warrant underwriting review because they:
- Signal elevated risk on the policy (and potentially on the account or territory)
- May affect renewal pricing, surcharges, or non-renewal decisions
- Can trigger reinsurance notifications
- May indicate fraud patterns that need SIU escalation
The Agent Task
When a large-loss event arrives, PolicyOne inserts exactly one policy.agent_tasks row per event:
{
taskKind: 'large_loss_review',
entityType: 'policy',
entityId: policy.id, // the PolicyOne policy UUID
agentKind: 'deterministic', // not AI-driven; requires human review
status: 'pending',
triggerEvent: 'claim.settled',
triggerSource: 'claims_one',
humanReviewRequired: true,
humanReviewNote: `Large loss settlement: ${claimNumber}, amount: $${formatCents(settlementAmountCents)}`,
inputs: {
claimId,
claimNumber,
policyNumber,
settlementAmountCents,
deductibleCents,
isLargeLoss: true,
settlementDate
}
}
| Field | Value | Why |
|---|---|---|
taskKind | large_loss_review | Identifies the task type for UW queue routing |
agentKind | deterministic | No AI automation — a human underwriter must review |
humanReviewRequired | true | Blocks automated close; UW must take action |
status | pending | Initial state; transitions to in_review → completed or escalated |
triggerSource | claims_one | Audit trail — this task originated from a ClaimsOne event |
Underwriter Workflow
Task Status Transitions
| Status | Meaning | Who sets it |
|---|---|---|
pending | Task created, awaiting UW pick-up | ClaimsEventsConsumer (on creation) |
in_review | Underwriter has opened the task | PolicyOne UI (when UW clicks "Start Review") |
completed | UW took action and closed the task | PolicyOne UI |
escalated | Referred to senior UW or committee | PolicyOne UI |
cancelled | Task voided (e.g. duplicate, error) | PolicyOne admin |
Data Available to the Underwriter
The inputs JSONB column stores the full claim context. When the UW opens the task in PolicyOne, the UI can display:
| Data point | Source |
|---|---|
| Claim number & link to ClaimsOne | inputs.claimNumber, inputs.claimId |
| Settlement amount | inputs.settlementAmountCents (formatted from cents) |
| Deductible applied | inputs.deductibleCents |
| Settlement date | inputs.settlementDate |
| Policy number | inputs.policyNumber (join to policy.policies) |
| Policy inception, expiry, coverage | Join policy.policies via entityId |
| Prior claims on this policy | Query policy.agent_tasks WHERE entity_id = entityId |
SQL: Query Pending Large Loss Tasks
-- All pending large-loss review tasks, newest first
SELECT
at.id,
at.human_review_note,
at.created_at,
p.policy_number,
p.insured_name,
at.inputs->>'settlementAmountCents' AS settlement_cents,
at.inputs->>'claimNumber' AS claim_number
FROM policy.agent_tasks at
JOIN policy.policies p ON p.id = at.entity_id
WHERE at.task_kind = 'large_loss_review'
AND at.status = 'pending'
AND at.tenant_id = $1
ORDER BY at.created_at DESC;
-- Large loss task volume by week (last 90 days)
SELECT
date_trunc('week', created_at) AS week,
COUNT(*) AS task_count,
AVG((inputs->>'settlementAmountCents')::numeric) AS avg_settlement_cents
FROM policy.agent_tasks
WHERE task_kind = 'large_loss_review'
AND created_at > now() - interval '90 days'
AND tenant_id = $1
GROUP BY 1
ORDER BY 1;
Relationship to ClaimsOne SIU Referrals
A single claim settlement may trigger reactions in both PolicyOne and ClaimsOne simultaneously:
These are independent reactions. PolicyOne's agent task is about the policy (renewal decision). ClaimsOne's SIU referral is about the claim (fraud investigation). They do not block or depend on each other.
← Previous: Event Flow | Next → Operations