Line-Level 835 Remittance Intelligence: Beyond Basic ERA Parsing

Most practice management systems can download an 835 and post a payment. Very few can tell you why the payment was what it was, line by line, in a form you can act on the same day. The gap between those two capabilities is where independent practices quietly lose money — not to fraud or to payer malice, but to a posting engine that collapses four distinct adjudication decisions into one number labeled "contractual adjustment."

This piece walks through the anatomy of an 835, the three arithmetic identities a correct posting engine must enforce, and a worked example where bulk posting writes off 320.00 that was appealable and misses 43.88 that was collectible.

What the 835 actually tells you — and where bulk posting throws it away

The ASC X12N 835 Health Care Claim Payment/Advice (version 005010X221A1) is a hierarchy, not a receipt. Four levels matter:

  • Transaction level. BPR carries the total payment, the method (BPR04 — ACH, CHK, FWT, NON) and the effective date (BPR16). TRN02 is the reassociation trace number that must match the trace on the EFT so you can tie money to advice — the CAQH CORE EFT & ERA reassociation rule governs this pairing [verify: rule number and current version].
  • Claim level. CLP gives total charge (CLP03), payment (CLP04), patient responsibility (CLP05), and status (CLP02 — 1 primary, 4 denied, 22 reversal, 19 forwarded to another payer).
  • Service line level. SVC gives the procedure (SVC01), the line charge (SVC02), and the line payment (SVC03). AMT*B6 carries the allowed amount.
  • Adjustment level. CAS triplets — group code, Claim Adjustment Reason Code (CARC), amount — explain every dollar of the difference. LQ*HE and MIA/MOA carry Remittance Advice Remark Codes (RARCs) that qualify the CARC.

Group codes are the fork in the road. CO (contractual obligation) is a write-off by contract. PR (patient responsibility) is a receivable that moves to the patient. PI (payer-initiated reduction) and OA (other adjustment) are neither, and frequently signal something you should contest.

A bulk poster reads CLP03, CLP04, and CLP05, posts the difference to a single adjustment code, and moves on. Every CARC in the file is discarded. That is the failure mode — not a parsing bug, a modeling decision.

The three balancing rules your posting engine must enforce

The 835 is self-checking. If your engine does not verify all three identities before posting, it will post corrupt data silently.

  1. Line balancing: SVC02 = SVC03 + Σ(line-level CAS amounts)
  2. Claim balancing: CLP03 − Σ(all CAS amounts, claim and line) = CLP04
  3. Transaction balancing: Σ(CLP04) − Σ(PLB provider-level adjustments) = BPR02

A file that fails rule 1 or 2 should be quarantined, not posted. A file that fails rule 3 usually means a PLB segment — an overpayment recovery (WO), a forwarding balance (FB), interest (L6) — that your engine is ignoring. Those are real dollars moving against your deposit and they belong on the ledger as their own entries, not netted into a claim.

Worked example: one claim, four lines, $537.28 in adjustments

All values below are synthetic and constructed for illustration. No patient identifiers are used; the reconciliation runs entirely off CLP, SVC, and CAS, which is the correct discipline for any 835 sample that leaves your environment.

code
CLP*ACCT-4471*1*640.00*102.72*43.88*CI*CTRL88120*11~

SVC*HC:99214*220.00*102.72**1~
CAS*CO*45*91.60~
CAS*PR*2*25.68~
AMT*B6*128.40~

SVC*HC:93000*75.00*0.00**1~
CAS*CO*45*56.80~
CAS*PR*1*18.20~
AMT*B6*18.20~

SVC*HC:36415*25.00*0.00**1~
CAS*CO*97*25.00~

SVC*HC:20610:LT*320.00*0.00**1~
CAS*CO*197*320.00~
LQ*HE*N54~

Line 1 (99214, office visit). Charge 220.00. Allowed 128.40. CO-45 takes 91.60 as the contractual write-down. `PR-2` assigns 25.68 in coinsurance. Check: 220.00 = 102.72 + 91.60 + 25.68. ✔

Line 2 (93000, ECG). Charge 75.00. Allowed 18.20, all of it applied to deductible via PR-1. Payment $0.00. Check: 75.00 = 0.00 + 56.80 + 18.20. ✔

Line 3 (36415, venipuncture). Charge $25.00, adjusted entirely under CO-97 — benefit included in the allowance for another adjudicated service. Check: 25.00 = 0.00 + 25.00. ✔

Line 4 (20610, joint injection). Charge $320.00, adjusted entirely under CO-197 — precertification/authorization absent — with RARC N54 qualifying it as an authorization mismatch. Check: 320.00 = 0.00 + 320.00. ✔

Claim roll-up. Adjustments total 91.60 + 25.68 + 56.80 + 18.20 + 25.00 + 320.00 = 537.28. Then 640.00 − 537.28 = 102.72 = CLP04. ✔ The PR amounts total 25.68 + 18.20 = 43.88 = CLP05. ✔ And allowed-versus-outcome holds: 128.40 + 18.20 + 0 + 0 = 146.60 = 102.72 paid + 43.88 patient. ✔

Now the part that matters. A bulk poster records: paid 102.72, adjustment 537.28. Line-level posting records something structurally different:

  • $148.40 genuine contractual write-down (CO-45). Correct to adjust — though it is also the number to test against your fee schedule for underpayment.
  • $25.00 bundling (CO-97). Adjust, but flag: bundling denials are frequently modifier-driven, and this is the bucket where a systematic coding issue hides.
  • $320.00 authorization denial (CO-197). Not a write-off. This is an appeal or a reconsideration with a deadline attached, and it is 50% of the claim's billed value.
  • $43.88 patient responsibility, split 18.20 deductible and 25.68 coinsurance. A receivable that can be requested the same day the 835 posts.

The bulk poster's ledger and the line-level ledger show the same cash. Only one of them shows you 320.00 of open work and 43.88 of collectible balance.

Claim-level vs. line-level posting

DimensionClaim-level (bulk) postingLine-level posting
Unit of recordOne CLP → one ledger entryEach SVC → its own entry, with CAS triplets retained
Adjustment detailCollapsed to a single "contractual" codeEvery CARC/RARC preserved with group code and amount
Denial detectionOnly when CLP02 = 4 (whole claim denied)Per line — catches partial denials inside a paid claim
Patient responsibilityTaken from CLP05 as one lumpDerived from PR triplets, so deductible/coinsurance/copay are distinguishable
Appeal triggerManual, from a worklist someone builds by reading PDFsAutomatic, keyed on CARC + payer + deadline
Secondary/COB billingOften needs manual reconstruction of line detailLine detail already present for the crossover claim
Underpayment detectionNot possible — allowed amount is not retained per lineAMT*B6 per line, comparable against contracted rate
ReconciliationTrust the payer's totalsAll three balancing identities verified before posting

From CARC to workflow: what the arithmetic lets you route

Once each line carries its own CAS triplets, the CARC becomes a routing key rather than a note. A workable first pass:

  • `PR-1`, `PR-2`, `PR-3` → patient balance queue. The PR sum is the ceiling on what may be requested. Amounts adjusted under CO are contractually yours to absorb and must never reach the patient — that boundary is the whole reason group codes exist. (Our companion piece on HIPAA-safe payment requests covers the delivery architecture for this step.)
  • `CO-197`, `CO-15`, `CO-16` with a correctable RARC → appeal or resubmission queue, stamped with the payer's filing deadline. Deadlines vary by payer and product [verify against your contracts]; do not hardcode one.
  • `CO-97`, `CO-59` → coding review queue. These cluster by provider and procedure pair when something is systematically wrong.
  • `CO-45` where `AMT*B6` < contracted rate → underpayment queue. This only exists if you retained the line-level allowed amount.
  • `PLB` segments → their own ledger entries, never netted into a claim.

The cash-flow argument follows from this, with one honest caveat: routing patient responsibility to a request-for-payment on the day the 835 lands compresses the collection clock, and real-time rails compress the funds availability clock. Neither one speeds up adjudication. The payer decides when the payer decides; what you control is how fast you act on the decision once it arrives.

FAQ

Our clearinghouse already auto-posts ERAs. Isn't that line-level? Sometimes, often not. Test it: pull a claim where one line was denied inside an otherwise-paid claim, and check whether your system stored the individual CAS triplets against that line, or a single adjustment against the claim. Second test: can you query "all CO-197 adjustments in the last 90 days by payer"? If not, the codes were parsed and discarded.

What should happen when a file doesn't balance? Quarantine, do not post. The usual causes are reversal claims (CLP02 = 22) paired with a corrected claim, PLB recoveries the engine ignores, or a truncated transfer. Posting an unbalanced file produces a ledger that cannot be reconciled to the deposit, and the error compounds across every subsequent remittance.

How often do CARC and RARC code lists change? The maintained lists are revised on a recurring schedule during the year [verify current cadence and effective dates against the official X12/WPC code list]. Treat the code list as versioned reference data with an effective date, not as a constant compiled into your application. A rule keyed on a retired code fails silently.


Try it against your own data. The shteg.ai sandbox [verify canonical path] accepts a de-identified 835 and returns the line-level decomposition, the three balancing checks, and the CARC-derived work queues — so you can see what your current poster is discarding before you change anything.


Educational content, not legal, compliance, coding, or billing advice. All amounts, codes, and identifiers in the example above are synthetic. CARC/RARC definitions, payer adjudication policies, and appeal deadlines change; verify against current X12 code lists, payer bulletins, and your own contracts before acting. Patient responsibility must be determined from the remittance and your payer agreement — this article does not address balance billing rules, which vary by state and by contract.

<!-- generated_by: claude-draft-1 -->