CO, PR, OA and PI: what the adjustment codes on a dental EOB mean for your ledger
September 13, 2026
Every dollar an insurance company does not pay has to go somewhere. Either the practice writes it off, or the patient is billed for it. On an EOB or ERA that decision is spelled out, line by line, in a small code most people skim past: two letters, a dash, and a number, like CO-45 or PR-1.
The number says why the amount was not paid. The two letters say who it belongs to. Most posting mistakes that quietly cost a practice money come from reading the number and ignoring the letters.
The short version
- CO (Contractual Obligation): the amount is between the practice and the payer. The patient is not billed for it. This is the ordinary write-off on an in-network claim.
- PR (Patient Responsibility): the amount is the patient’s. Deductible, coinsurance, copay, and anything the plan does not cover that the patient agreed to pay.
- OA (Other Adjustment): neither of the above. Most often it is bookkeeping between payers, such as the amount a secondary plan reduced because the primary already paid.
- PI (Payer Initiated Reduction): the payer reduced the payment for a reason of its own that is not the patient’s fault. On an in-network claim it is usually handled like a write-off, but it is worth reading the reason code.
The letters are the group code. The number is the reason code. Read the group first.
Where the codes appear
On an ERA (the electronic 835 file from your clearinghouse) every adjustment sits in a CAS segment on the claim or on the service line, always as group code plus reason code plus amount. The format is strict, which is why software can post ERAs without guessing.
On a paper or PDF EOB the same information is there, but each payer lays it out differently. Some print “CO-45” next to the amount. Some split the page into columns headed “contractual adjustment” and “patient responsibility” and never show the letters at all. Some put the reason code in a remarks column and the amount three columns to the left. Whatever the layout, the payer had a group code for every adjustment, and your job when posting is to recover it.
The reason codes you will see most
These are Claim Adjustment Reason Codes, a standard list maintained for the whole healthcare industry. A handful cover most dental EOBs.
45, charge exceeds the fee schedule or maximum allowable. The gap between what you billed and what the plan allows. In network this arrives as CO-45 and is your write-off. Out of network the same number can arrive as PR-45, because there is no contract stopping you from billing the patient the difference. Same reason, opposite ledgers.
1, 2 and 3: deductible, coinsurance, copay. Almost always PR. These are the patient’s share by design. A deductible line is the one most often double-counted when posting, because the deductible is already inside the patient portion; subtracting it again from the allowed amount makes the claim look underpaid.
96, non-covered charge. Usually PR, because the patient can be billed for a service the plan does not cover. Some plan contracts make certain non-covered services a CO instead. The group code on the EOB is the payer telling you which contract applies.
97, included in the payment for another service. The payer bundled this line into another line’s payment. It arrives as CO-97 and the money is not missing; it is sitting on the other procedure. Writing this off and expecting a separate payment is how a balanced claim starts to look short.
119, benefit maximum reached. The patient has used the plan’s annual maximum. PR, because the remaining balance is the patient’s.
204, not covered under the current benefit plan. Close to 96 in practice, and again the group code decides whether it is billable.
18, duplicate claim. Nothing to post. Find the original.
23, impact of prior payer adjudication. This is the OA you will see on secondary claims: the secondary plan reduced its payment because the primary already paid. Not a write-off, not a patient balance. It just explains why the secondary paid less.
253, sequestration reduction. A small percentage reduction on some federal plans. CO.
Why the group code, not the reason code, decides the ledger
The reason code explains. The group code assigns. Two claims can carry the identical reason code and land in different places on your ledger because the group code differs, and the most common example is reason 45 in network versus out of network.
That is also why a posting rule like “45 is always a write-off” eventually costs money. It is true for every in-network claim and wrong for every out-of-network one, and the wrong ones are silent: the patient is never billed, the practice absorbs it, and nobody notices because the claim balances.
What this looks like in Open Dental
When you enter a claim payment by procedure in Open Dental, each line has an insurance paid amount, a write-off amount, and a deductible amount, and whatever is left over stays on the patient’s side of the ledger. The group codes map onto those fields directly:
- CO amounts go in the write-off.
- PR amounts are left as patient balance (the deductible field is a PR amount with its own box so the plan’s deductible tracking stays right).
- OA-23 on a secondary claim is not entered anywhere; the secondary’s paid amount and the remaining patient balance already reflect it.
- PI goes to the write-off on an in-network claim, and to the patient balance out of network only if your agreement with the patient allows it.
A claim that balances to the penny can still be wrong here. The paid amount was right, the total adjustment was right, but a PR amount was keyed as a write-off, so a patient who owed money was never billed. Nothing on a balancing report will catch it. Only reading the group code at posting time does.
When the group code is missing
Some EOBs, particularly older paper layouts, show only column totals without codes. In that case the column heading is the group code: “contractual adjustment” is CO, “patient responsibility” or “you may bill patient” is PR. If a payer’s EOB gives you neither, the ERA for the same claim will, and it is worth asking the clearinghouse to enroll that payer for electronic remittance so you stop guessing.
Posted reads the group and reason codes on every EOB and ERA, puts CO in the write-off and PR on the patient’s side, and shows you the line it read them from before you approve the payment. See it on your own EOBs.
Posted Dental
Automated insurance posting for Open Dental practices.
EOB and ERA automation that takes insurance payment posting off the front desk. $199 a month, flat. Built by a dentist.