837P / 837I JSON
Both professional (CMS-1500) and institutional (UB-04) claim formats. One enrollment, one credentials store.
Billing & RCM
Carelytics produces CMS-1500 (837P) and UB-04 (837I) from a single Claim model. Stedi clearinghouse handles submission, ERA reconciliation, and payer enrollment. Per-payer rate overrides and 4 unit rounding modes mean the same service bills correctly to Medicaid PCA, commercial, and private pay without code changes.
Stedi clearinghouse
Stedi is a modern healthcare clearinghouse built on a JSON API. We picked it because the legacy clearinghouses ship 1990s SFTP workflows and per-claim fees. With Stedi we get JSON submission, raw X12 fallback, and real-time payer-level status.
Both professional (CMS-1500) and institutional (UB-04) claim formats. One enrollment, one credentials store.
For payers that need exact X12, we can ship raw 837 files. JSON is the default; X12 is the escape hatch.
Submitted → accepted → rejected → paid status flows back from Stedi without manual SFTP polling.
Submit enrollments per transaction type (837P, 837I, 835, 270, 276), poll status, surface rejected/in-progress/enrolled.
ERA files parse into batch postings with CARC adjustment library and exception queue.
Real-time eligibility (270) and claim status (276) checks via the same Stedi pipe.
Real-time eligibility
Click "Verify eligibility" on the patient's Payer & Eligibility tab.
Carelytics builds the X12 270 from Client + Payer + Tenant data, sends it through Stedi,
parses the 271 into status / coverage dates / copay / deductible / out-of-pocket,
and persists an EligibilityCheck row for the audit trail.
Self-healing claim pipeline
Webhook dropped during a deploy? Stedi rejected an enrollment that already existed? A 277CA never came back? Carelytics's claim pipeline assumes all of these will happen and recovers automatically — no support ticket, no manual reconciliation spreadsheet.
"Provider already exists" / "enrollment already exists" Stedi responses are caught and treated as success — Carelytics fetches the existing record and continues. Submitting the same claim twice never creates a duplicate.
Every claim status is reconciled against Stedi nightly — 277CA acknowledgments and 835 ERAs that didn't fire a webhook are picked up automatically. Claims never silently stuck.
NPI digit count, EIN format, phone shape, address completeness — checked before the 837 leaves Carelytics. Fail-fast at submission instead of getting an obscure rejection back from Stedi six hours later.
Per-payer rate overrides
Medicaid PCA bills at one rate, the same HCPCS to a commercial payer bills at another, private
pay is a third. Carelytics handles this through ServiceHCPCSMapping — set the rate
per (service line × HCPCS × payer) tuple and the billing pipeline picks the right one.
Reconciliation
Inbound ERAs parse into batch postings. Each ERA line links back to the originating claim. Mismatches surface in the exception queue immediately.
Full CARC code library with reason categories. Adjustments routed by reason — denial vs underpayment vs contractual write-off.
Discrepancies route to a queue with an assignee, due date, and resolution path (rebill / appeal / write-off).
Two-person rule on write-offs above a tenant-configurable threshold. Reason category required. Audit-logged with full diff.
AR aging
0–30, 31–60, 61–90, 90+. Per payer. Per service line. Per branch. Click any bucket to see the underlying claims, sorted by amount. Click any claim to see the hold reason, the ERA history, the visit it came from, and the patient's authorization status.