Insurance Claims Adjudication
Claim-to-policy matching, coverage verification, and graduated adjudication. The insurance industry processes billions of claims annually — the majority through manual review queues that this pipeline replaces.
What Gets Automated
Matching claims to policies on policy number, member ID, and date of service. Auto-adjudicating clean claims that fall within coverage limits and have standard procedure codes. AI analysis of coding ambiguities, coverage edge cases, and multi-provider claims.
What Humans Still Own
Complex multi-party claims. Fraud referrals. Policy exception decisions. Appeal adjudication on contested denials.
Pipeline
This template uses two matcher steps in sequence — first for claim-to-policy matching, then for duplicate detection. This is the only template with chained matchers.
{
"name": "claims_adjudication",
"definition": {
"actions": [
{
"type": "matcher",
"properties": {
"left": "@input.claims",
"right": "@input.policies",
"matchOn": ["policy_number", "member_id"],
"dateWindowDays": 0,
"outputMatched": "claims_with_policy",
"outputUnmatchedLeft": "no_policy_claims",
"outputUnmatchedRight": "unused_policies"
}
},
{
"type": "matcher",
"filter": {
"condition": {
"greaterThan": [{ "length": "@claims_with_policy" }, 0]
}
},
"properties": {
"left": "@claims_with_policy",
"right": "@input.recent_claims",
"matchOn": ["member_id", "procedure_code", "service_date"],
"tolerance": 0,
"dateWindowDays": 1,
"outputMatched": "potential_duplicates",
"outputUnmatchedLeft": "unique_claims",
"outputUnmatchedRight": "no_dup_match"
}
},
{
"type": "loop",
"filter": {
"condition": {
"greaterThan": [{ "length": "@unique_claims" }, 0]
}
},
"properties": {
"mode": "foreach",
"items_path": "@unique_claims",
"item_variable_name": "claim",
"actions_to_execute": [
{
"type": "loop",
"properties": {
"mode": "react",
"objective": "Adjudicate claim {{claim.a.claim_id}}. Policy: {{claim.b.policy_number}}. Procedure: {{claim.a.procedure_code}}. Billed: ${{claim.a.billed_amount}}. Verify: 1) Coverage active for service date, 2) Procedure covered under plan, 3) Deductible and benefit limits, 4) In-network status. Recommend: approve with allowed amount, deny with reason code, or escalate.",
"tools": [
{ "type": "action", "name": "verify_coverage" },
{ "type": "action", "name": "lookup_procedure_codes" },
{ "type": "action", "name": "check_benefit_limits" },
{ "type": "action", "name": "calculate_allowed_amount" }
],
"max_iterations": 12,
"on_stuck": {
"iterations": 4,
"action": "escalate"
},
"result_key": "adjudication"
}
}
],
"max_concurrency": 10,
"failure_strategy": "continue_on_error",
"collect_results": true,
"result_key": "all_adjudications"
}
},
{
"type": "PbotApproval",
"properties": {
"comment": "{{unique_claims.length}} claims adjudicated. {{potential_duplicates.length}} duplicates flagged. Review AI decisions.",
"request_payload": {
"adjudications": "@all_adjudications",
"duplicates": "@potential_duplicates",
"no_policy_denials": "@no_policy_claims.length"
}
}
},
{
"type": "custom-table",
"properties": {
"table": "adjudication_log",
"operation": "write",
"keys": ["batch_id"],
"values": ["@__run_id"],
"fields": {
"claims_processed": "@input.claims.length",
"auto_denied_no_policy": "@no_policy_claims.length",
"duplicates_flagged": "@potential_duplicates.length",
"adjudicated": "@unique_claims.length",
"completed_at": "@now"
}
}
}
]
}
}
Required Registered Actions
| Action | Kind | Purpose |
|---|---|---|
verify_coverage |
http | Check policy status and effective dates |
lookup_procedure_codes |
db | Retrieve allowed procedure codes for policy type |
check_benefit_limits |
db | Query remaining benefit limits for member/year |
calculate_allowed_amount |
http | Compute allowed amount per fee schedule |
Customization Notes
Duplicate detection window. The 1-day dateWindowDays on the second matcher catches same-day duplicate submissions. Extend to 3–5 days if your intake has batch delays.
Agent concurrency. 10 concurrent adjudications works for typical batch sizes. Reduce if your coverage verification API has rate limits.
Stuck detection. The escalate action on stuck sends complex claims directly to a human adjudicator rather than retrying — appropriate for claims where incorrect auto-decisions have financial and regulatory consequences.