I have a question about “Add More Items” to the fee sheet after encounter is billed. It seems that after adding a new line in billing manager I see the line beeing added
but when generating the X12 file for billing it has both the new line (99211) and the old line (99215) which create a duplicate billing for 99215 which was already billed.
is this an intended behavior?
After billing an encounter, you used “Add More Items” in the Fee Sheet, which successfully added a new CPT code (e.g., 99211).
However, when generating the X12 EDI file, both the new CPT code (99211) and the already billed CPT (e.g., 99215) are present — causing duplicate billing.
Root Cause:
OpenEMR does not automatically remove or mark older CPT codes as already billed unless explicitly managed. When you add a new item post-billing, it adds to the same encounter, and both new + already billed codes remain marked as ‘to be billed’ in the X12 generation if their billing status is not updated.
Solution: Properly Handle Already Billed Codes
Here’s how to prevent duplicate billing when modifying an already billed encounter:
Step-by-Step Fix:
Option 1: Re-open Encounter and Mark Previous Items as “Billed”
Navigate to the encounter → Fee Sheet.
Click “Re-Open” to unlock the encounter if it’s locked.
Uncheck or mark as ‘Billed’ the previously billed CPT codes (e.g., 99215).
Add the new CPT code (e.g., 99211).
Save the fee sheet.
Then regenerate the X12 file — now it should only include 99211.
Option 2: Use “Mark as Cleared” for the previous code
If you already billed 99215, go to the Billing Manager and:
Search the encounter/CPT under the patient’s billing tab.
Click “Mark as Cleared” (or mark it as sent or posted) — this flags the CPT as processed and excludes it from the next X12 export.
Important Notes:
Avoid adding new lines to already billed encounters unless you plan to submit a corrected claim.
For billing corrections, the correct workflow would be to:
There are multiple places where openemer checks billing status billing.billed before generating a report.
While I have not test it yet, it seems that src/Billing/BillingProcessor/BillingProcessor.php does not check billing.billed flag before calling the script to generate the X12 file.
Before I proceed I would like to know if there is a reason for that?