Claim adjustment reason codes on an EOB explain why a service line was paid differently than it was billed. Each code pairs a group code, which says who absorbs the amount, with a reason number, which says why. Read the group code first: CO usually stays with the provider, while PR may move to the patient.
CARC structure on an EOB: group code, reason code and amount
A claim adjustment reason code (CARC) on an EOB is printed as three parts: a two-letter group code, a numeric reason code and a dollar amount. In CO-45 $90.00, CO is the group, 45 is the reason and $90.00 is how much of the charge that pair explains. Every adjustment on a line should carry all three.
The X12 Claim Adjustment Reason Codes list is the official source for the reason numbers. It describes them as codes that "describe why a claim or service line was paid differently than it was billed." The same list defines the group codes. Payers print these codes on paper EOBs and send the same values in the electronic 835 remittance.
The two parts answer different questions, and mixing them up causes most posting errors. The reason code tells you what happened: a deductible, a fee schedule cut, a missing authorization. The group code tells you who carries the money. Chapter 22 of the Medicare Claims Processing Manual on remittance advice says a group code "must always be used in conjunction with a claim adjustment reason code to show liability" for amounts the plan does not pay.
The amount ties the code to the arithmetic of the line. A billed charge minus every adjustment amount should equal the plan payment. If you add up the adjustments on a line and the total does not close the gap between billed and paid, a code is missing or a figure was misread.
Reading CO-45 on a fictional line
Take an example line for a fictional patient, Dana Reyes, member ID XJK400271 (both made up for this post). The practice billed $210.00. The EOB shows CO-45 $75.00 and a plan payment of $135.00.
The X12 text for reason 45 is "Charge exceeds fee schedule/maximum allowable or contracted/legislated fee arrangement." The CO group puts that $75.00 on the provider under its contract. So the line is complete: $75.00 written off, $135.00 paid, nothing owed by the patient for this line.
The plain meaning of each part matters more than memorizing the numbers. Once you can split any code into group, reason and amount, an unfamiliar code becomes one lookup instead of a guess.
What do CO, PR, OI and PI group codes mean on remittances?
Group codes on remittances say who absorbs an adjustment. CO, contractual obligation, stays with the provider. PR, patient responsibility, may be billed to the patient. PI stands for payer initiated reductions. The X12 list has no OI group code; adjustments tied to other payers use OA, other adjustment.
The X12 list defines five group codes. CO is "Contractual Obligation", PR is "Patient Responsibility", OA is "Other Adjustment" and PI is "Payer Initiated Reductions". A fifth, CR for corrections and reversals, is marked on that list as not for use with version 005010 and later, so a current remittance should not carry it.
So when a list of CO, PR and OI group codes on remittances mentions OI, read it as OA for an adjustment tied to another payer. Reason 23, "The impact of prior payer(s) adjudication including payments and/or adjustments", is marked "Use only with Group Code OA". A secondary EOB that reduces a line because the primary plan already paid prints OA-23, not an OI code.
Chapter 22 of the Medicare manual adds plain-language guidance for Medicare remittances. It says CO adjustments are "generally" considered "a write off for the provider and are not billed to the patient." It says PR "would typically be used for deductible and copay adjustments." And it describes OA as the group to use "when no other group code applies."
Medicare draws one firm line on the patient side. The CMS remittance advice page states that "Medicare beneficiaries may be billed only when Group Code PR is used with an adjustment." Commercial contracts set their own terms, so check the payer agreement before billing a patient for anything outside PR on a non-Medicare EOB.
The CARCs billing teams see most often
The CARCs billing teams see most often fall into four families: patient cost sharing (1, 2, 3), contract and fee reductions (45, 253), other payers and duplicates (18, 22, 23) and denials for coverage, authorization, timing or missing information (16, 27, 29, 50, 96, 97, 109, 197). Knowing these on sight clears most lines without a lookup.
The table below gives each code's X12 description in short form, the group code it usually travels with, and a common posting action. The posting action is general practice, not a payer rule. Your contract and your practice management system decide the final entry.
| Code | Group in this example | Plain meaning (from the X12 text) | Common posting action |
|---|---|---|---|
| 1 | PR | Deductible amount | Move to patient balance |
| 2 | PR | Coinsurance amount | Move to patient balance |
| 3 | PR | Co-payment amount | Move to patient balance, net of any copay collected |
| 45 | CO | Charge exceeds fee schedule or contracted fee | Contractual write-off |
| 253 | CO | Sequestration, a reduction in federal payment | Write-off under the payer's rules |
| 16 | CO | Claim or service lacks information or has a billing error | Correct and resubmit |
| 18 | OA | Exact duplicate claim or service | Find the original claim, no new posting |
| 22 | CO | Care may be covered by another payer under coordination of benefits | Bill the other payer, hold the balance |
| 23 | OA | Impact of a prior payer's adjudication | Post as secondary adjustment |
| 27 | CO | Expenses incurred after coverage terminated | Verify eligibility, then rebill or move balance |
| 29 | CO | Time limit for filing has expired | Write off unless you hold proof of timely filing |
| 50 | CO | Not deemed a medical necessity by the payer | Review records, consider appeal |
| 96 | CO | Non-covered charge | Check benefits and any signed waiver |
| 97 | CO | Benefit included in payment for another service | Check bundling, no separate payment |
| 109 | CO | Not covered by this payer; send to the correct payer | Rebill the correct payer |
| 197 | CO | Precertification or authorization absent | Find the authorization or appeal |
The group column shows one pairing for each code, as an example, not the only one allowed. The same reason code can arrive with a different group, and the group always decides who pays. For example, 96 under PR may move to the patient, while 96 under CO stays with the provider.
Some codes on this list come with a remark code that names the detail, such as which piece of information was missing for a 16. Remark codes are a separate list. The post on what a remittance remark code adds to a CARC explains how the two work as a pair.
The X12 list changes. Chapter 22 of the Medicare manual says the code set "is updated three times a year." Check the current text on the X12 site before you build a local lookup table, because codes are added, reworded and given stop dates.
Which CARC group codes mean a write-off?
CARC group codes signal a write-off when the group is CO, which leaves the amount with the provider. PR amounts move to the patient. PI amounts need a check of the payer's terms. OA amounts depend on the reason: OA-23 is another payer's share, while OA-18 marks a duplicate. The group decides the account, and the reason confirms it.
Use the group code to sort each adjustment into one of three destinations:
- Stays with the provider: CO. Post as a contractual adjustment. Medicare's manual says CO amounts are generally not billed to the patient.
- Check the payer's terms: PI. The X12 list gives only the name, "Payer Initiated Reductions", so read the reason code and your contract before you choose an account.
- Moves to the patient: PR. Post to the patient balance, less anything collected at the front desk.
- Moves to another payer or needs review: OA. Read the reason. OA-23 means a prior payer already paid part of the line, so the remainder goes to the patient or a tertiary plan. OA-18 means the line duplicated an earlier claim, so nothing new is owed.
A write-off is not the same as a final answer. A CO-16 or CO-197 is technically a provider-side adjustment, but the right action is often to correct the claim or find the missing authorization rather than to write the balance off. A team that writes off every CO amount on sight gives up money it could recover.
Denied lines need their own steps. The post on posting a denied EOB line as a zero payment, adjustment or transfer covers the entries. If the denial looks wrong, appeal work and follow-up live in the revenue cycle automation category.
Several CARCs on one EOB service line
Several CARCs on one EOB service line each explain a separate slice of the adjustment. One amount gets one reason code. Chapter 22 of the Medicare manual states that "Current ASC X12 835 structures only allow one reason code to explain any one specific adjustment amount." To post the line, split the total gap into one entry per code.
A common pattern is a contract reduction followed by cost sharing. Here is a worked line for a fictional patient, Sam Okafor, claim number 2026-77810 (example values only):
| Field | Example value | Note |
|---|---|---|
| Billed | $300.00 | The practice's charge |
| CO-45 | $120.00 | Above the contracted rate, provider write-off |
| Allowed | $180.00 | $300.00 minus $120.00 |
| PR-1 | $50.00 | Deductible, to patient |
| PR-2 | $26.00 | 20% coinsurance on the remaining $130.00, to patient |
| Plan paid | $104.00 | $180.00 minus $76.00 of patient share |
The posting splits into three adjustment entries and one payment. CO-45 for $120.00 goes to the contractual adjustment account. PR-1 and PR-2, $76.00 together, move to Sam's balance. The $104.00 posts as the insurance payment. The four figures add back to the $300.00 charge, which is the check that the split is complete.
Two mistakes show up with multi-code lines. The first is posting only the largest code and folding the rest into it, which hides the patient's share inside a write-off. The second is reading a code from the next line down when a payer prints codes in a narrow column. Both break the line's arithmetic, so add every code's amount before you post.
Extraction tools face the same risk when they read a dense code column. The post on where EOB OCR reads well and where it slips covers code strings that drift between lines. Schema Care keeps each extracted field linked to its spot on the page and sends low-confidence values to a person, which you can see in the human review workflow.
Misreading CO-45 as a denial: a CARC posting mistake
Misreading CO-45 as a denial means treating a normal contract reduction as an unpaid amount. CO-45 says the charge exceeded the fee schedule or contracted rate. The line was processed and paid at the agreed rate. The gap is a write-off, not money still owed by the payer.
The mistake usually starts with the billed column. A poster sees $250.00 billed and $96.00 paid and assumes the payer short-paid by $154.00. They leave the difference open as insurance balance, or flag the line for an appeal. Weeks later the open balance ages into a collections report that overstates what the practice is owed.
Here is the right reading of that fictional line. CO-45 $90.00 is the contract cut. PR-1 $40.00 and PR-2 $24.00 move to the patient. The plan paid $96.00. Nothing remains on the insurance side. An appeal would fail, because the payer applied the rate the practice agreed to.
Three habits prevent the error:
- Read the group code before the amount. CO with reason 45 is a contract adjustment every time.
- Compare the allowed amount, not the billed amount, with the payment plus the patient share.
- Keep a short internal list of codes that close a line without follow-up, and review it whenever the X12 list updates.
The reverse mistake also happens. A CO-16 or CO-197 can look like a routine contract cut because it shares the CO group. Those lines often have a zero payment, and the reason text asks for missing information or an authorization. Reading the reason number every time, even on a CO line, catches both errors.