Schema Care

Medical Bill OCR: Turning Billing Statements Into Data

By Schema CarePublished Updated

Medical bill OCR reads a printed or scanned billing statement and turns its charges, adjustments, payments and balance due into fields a system can use. Reading the numbers is only half the job. Before anyone relies on them, check that the charges, less every adjustment and payment, equal the balance the bill prints.

What is on a medical billing statement?

A medical billing statement is the document a provider sends to show what a patient's account owes. It usually prints account details at the top, a table of activity in the middle, and a summary with the balance due at the bottom. Activity means four kinds of amounts: charges, adjustments, payments and the running balance.

The top block identifies the account. Expect the provider's name and billing address, the patient or guarantor name, an account number, a statement date and a payment due date. Many statements also print a previous balance carried from the last statement, and some show the insurance plan that was billed.

The activity table lists what happened on the account since the last statement. Each row has a date and a description. A charge row adds to what is owed, such as an office visit or a lab test. An adjustment row reduces it, often an insurance contractual write-off or a discount. A payment row reduces it too, whether the money came from a plan or from the patient. Many layouts add a running balance column on the right that changes after every row.

The summary block repeats the totals. A typical one shows previous balance, new charges, total adjustments, total payments and the amount due now. Some add an aging breakdown that splits the balance by how long it has been owed.

A statement is not the same document as an explanation of benefits. The CMS guide to the explanation of benefits says an EOB isn't a bill, and that a patient's bill should not be higher than the patient balance on the EOB. That comparison only works when both documents have been read correctly. How the plan's side of the numbers is laid out is covered in the guide on how to read an EOB.

A summary statement is also not an itemized bill. A statement often groups a hospital stay into a few department totals. The CMS Medicare Program Integrity Manual, chapter 4, section 4.11.8.1, defines an itemized statement as a listing of each service or item, and says a statement that groups services, such as by revenue code, is not one. Line-by-line hospital bills have their own post, which explains itemized medical bill columns and what each one holds.

How medical bill OCR reads charges, adjustments and balance due

Medical bill OCR reads charges, adjustments and balance due by finding the activity table, working out which column holds which kind of amount, and then reading each row as one record. The hard part is the columns. A dollar figure means nothing until the software knows whether it is a charge, a credit or a running balance.

Plain OCR turns the page into text, line by line. That gives you "03/02 Office visit 210.00 210.00" with no labels. The software then has to decide that the first 210.00 sits under Charges and the second under Balance. Document extraction does this by reading the column headers and the position of each figure under them.

Sign conventions add a second puzzle. Some statements print credits as negative numbers, some put them in parentheses, some print them as positive figures in a separate Payments column, and some add "CR" after the amount. An extractor has to normalize all of these to one rule, such as charges positive and credits negative, before any totals can be checked.

Descriptions carry information that amounts do not. "Ins adj" and "Contractual" are adjustments. "Ins pmt" and "Plan payment" are plan payments. "Pt pmt", "Copay received" or "Thank you for your payment" are patient payments. Mapping those phrases to a small set of types lets a statement from any provider land in the same fields.

The running balance column is useful for checking, not for storing. If each row's balance equals the row before plus the charge minus the credit, the row was read correctly. A break in that chain points to the exact row where a digit was misread.

For a statement, the fields worth capturing are: statement date, account number, patient name, previous balance, each activity row with date, description, type and amount, total charges, total adjustments, total payments, and balance due.

Billing statement data extraction across different provider layouts

Billing statement data extraction across different provider layouts works by targeting the meaning of each field rather than its position. One clinic prints the balance due top right in a box. A hospital prints it at the bottom of page three. A lab prints it on a tear-off payment stub. The fields are the same; only the places change.

Template-based extraction draws a box around each field on one known layout. It is fast to set up for a single provider and fails as soon as a new layout arrives. A team that receives statements from dozens of providers would need dozens of templates, and each would break when a provider redesigns its bill.

Layout-independent extraction looks for labels and structures instead. It finds the phrase "Amount Due" or "Please Pay" and reads the figure beside it. It finds the table with date and amount columns and reads it row by row. This copes with new layouts far better, though it still needs a person to look at fields it is unsure of.

A few layout habits cause most of the trouble:

  • Payment stubs. The tear-off section repeats the account number and amount due, sometimes with a different "pay by" date. Read both, and confirm they agree.
  • Multiple columns of totals. Some statements show "Insurance pending" and "Patient responsibility" side by side. Capturing only one gives a wrong picture of what is owed.
  • Messages printed over the table. A notice such as "Your insurance has paid" in the middle of the activity rows can be read as a row.
  • Reprinted statements. A second notice may show the same charges again with a new statement date. Without a check, the same activity is recorded twice.

These are the same kinds of issues that a medical bill review software tool has to handle before its rules can run, which is why input quality matters as much as the rules.

Does the extracted medical bill add up?

An extracted medical bill adds up when the previous balance, plus new charges, minus adjustments, minus payments, equals the balance due printed on the statement. If it does not, either the OCR misread a figure or a row was missed. Run this check on every statement before the data goes into any system.

The formula is short:

previous balance + charges − adjustments − payments = balance due

Run it twice: once with the totals from the summary block, and once with the sum of the activity rows. When both agree with the printed balance, the statement is internally consistent. When the summary agrees and the rows do not, a row was dropped or doubled. When neither agrees, look first at the balance due itself.

A worked balance check

This fictional statement belongs to an example patient, Jordan Lee, account 55102. Every value is made up.

LineTypeAmount as extracted
Previous balanceCarried forward$0.00
03/02 Office visitCharge$210.00
03/02 Lab panelCharge$85.00
03/09 X-ray, two viewsCharge$140.00
04/11 Insurance contractual adjustmentAdjustment$118.00
04/11 Insurance paymentPayment$221.40
03/02 Copay receivedPayment$25.00
Balance due (printed)Summary$76.60

The arithmetic from the extracted rows:

StepCalculationResult
Charges$210.00 + $85.00 + $140.00$435.00
Less adjustments$435.00 − $118.00$317.00
Less payments$317.00 − $221.40 − $25.00$70.60
Printed balance dueAs extracted$76.60
Difference$76.60 − $70.60$6.00 flagged

The rows produce $70.60, but the balance due field reads $76.60. The $6.00 gap is a single digit, which suggests a misread "0" as "6" on the balance line rather than a missing row. The right move is not to guess. The balance due field goes to a reviewer, who looks at the highlighted figure on the page and confirms which value is printed. If the page really says $76.60, the statement itself has an error, and that is a question for the provider's billing office.

The plan's side of these numbers, the difference between what was charged and what the plan recognized, is explained in the guide to allowed amount vs billed amount on an EOB.

Schema Care reads billing statements into charges, adjustments, payments and balance due, scores each field, and holds the uncertain ones for a person to check against the page, which you can try on the fictional EOB in the Schema Care threshold demo.

Medical bill OCR on multi-page and multi-account statements

Medical bill OCR on multi-page and multi-account statements has to keep track of which rows belong to which account and which totals are partial. A long statement can carry a subtotal at the foot of each page and a balance forward at the top of the next. A family statement can list several patients under one guarantor.

Carried-forward balances are the first trap. Page two may open with "Balance forward $317.00", which is the running balance from page one, not a new charge. Reading it as a charge doubles the bill. The extractor should recognize these as continuation lines and use them only to check that pages join correctly.

Page subtotals are the second. Each page may show its own total of charges. Add them only if they do not overlap with a statement-level summary. Otherwise the same charges count twice.

Several patients on one statement is the third. A guarantor statement may group activity by patient, each with its own subtotal, and then print one combined balance due. Capture the patient name with every row, check each patient's subtotal, and then check that the subtotals add up to the combined balance.

Several accounts for one patient is the fourth. Hospitals sometimes open a separate account for each visit and send one statement that lists them all. Each account number needs its own balance check before the overall total is trusted.

Billing teams that process statements as part of the wider billing cycle, alongside superbills, charge tickets and payment posting, will find that angle in the post on medical billing OCR. This post stays with the statement itself and the claims and bills that feed it.

All posts in Claims and Medical Bills