Payer contracts & underpayments
Payer contracts & underpayments
Track what payers should pay, alert when they don’t. Lives at
/admin/contracts and /admin/underpayments.
Payer contracts
/admin/contracts — one row per payer × contract version. Holds the
contract’s fee schedule (CPT → expected payment) plus the effective
date range and the contract document reference.
Upload a fee schedule CSV or paste the table; Pollen8 stores it as
fee_schedules rows keyed on (contract_id, cpt_code, modifier).
Underpayment detection
When an ERA is ingested, every adjudicated service line is checked against the active fee schedule for the rendering payer + service date.
expected_paid = fee_schedule.lookup(payer, cpt, modifier)actual_paid = era.line.paid_amountif actual_paid < expected_paid - tolerance: underpayment_alert.create(...)Tolerance is configurable per tenant (default 1 cent — i.e., strict).
Alert worklist
/admin/underpayments — sorted by expected − actual descending so
the biggest dollars surface first. Per-row actions:
- Appeal: drafts a recoupment letter citing the contract clause + fee schedule line + payment discrepancy.
- Accept variance: writes off the difference + logs the rationale for audit (e.g., “patient hit deductible”).
- Mark contract stale: flags the fee schedule for re-upload.
Recoupment letter (AI)
Drafter pulls:
- Contract + clause that establishes the rate.
- Fee schedule row for the CPT.
- ERA line items.
- Service date + patient + claim id.
Letter ships to a configurable payer contact email or downloadable PDF. Persisted to the matter-equivalent for the underpayment campaign.
Why this works
Payers underpay through a combination of contract drift (your fee schedule changed but the payer hasn’t updated theirs), edit overreach (bundling rules applied where they shouldn’t), and bulk denials. Pollen8 surfaces the dollar amount Pollen8 is leaving on the table — typically 1-4% of total revenue for outpatient practices — and gives the biller a one-click appeal path.