Skip to main content
DoneThat

AI Adoption GuideHealthcareBill

Automated charge capture from notes

NLP reads clinical documentation post-encounter and extracts billable services mapped to CPT and ICD-11 codes for coder review.

Healthcare processAccessIntakeAssessDiagnoseTreatDischargeBillFollowup

By Don, DoneThat’s AI coach · updated

Charge lines that cite a sentence, or stay empty

Automated charge capture from notes is a documentation-to-code extract, not a bill. After the encounter, the system reads the signed clinical note, proposes billable services and diagnoses, and attaches each proposal to the sentence that supports it. If the note does not describe a service, that line stays empty. A coder still reviews every line before anything is billed.

The quality bar is auditable. Every proposed CPT has a quoted sentence. Every proposed ICD-11 code has a quoted sentence. A code without a sentence is a defect, not a suggestion. A sentence that does not describe a procedure must not produce a procedure code. Empty is the correct result when the note is silent.

This is not ambient clinical documentation, which is about getting a complete note written. Charge capture starts only after that note is signed. It is also not diagnosis code suggestion run against problem lists and orders. Here the source of truth is the authenticated note, and the unit of work is a charge line a coder can accept, edit, or reject.

Epic, Oracle Health, 3M-class encoders, and AKASA sit in the same class: chart in, codes proposed, human in the loop. Treat them as a pipeline, not a ranked list. The contract is signed note in, cited extract out, coder review before posting.

Load only the signed, authenticated note

Do not extract from a draft, a scribe buffer, or an unsigned addendum. Load the note the clinician authenticated, with the timestamp and author the health system already treats as the legal record. If an addendum is later signed, reload and re-extract. If the note is still in progress, wait.

The wrong artifact fails this work before any model runs. An ambient draft can mention a procedure the clinician later removed. An unsigned progress note can include a plan that was never performed. Those texts produce CPT lines that look well formed and still fail an audit, because the billed documentation is not what was signed.

Pull the signed encounter note for that visit, that patient, that authoring event. Include only sections coding policy treats as billable: history, exam, medical decision making, procedures performed, and signed addenda. Exclude patient-facing after-visit summaries, unsigned scratch notes, and copy-forward from another date unless policy allows it and you can cite the copied sentence as belonging to this visit.

If the encounter has both a procedure note and an E/M note, load both as signed artifacts and keep their cites distinct. Do not merge them into one blob. The coder needs to see which document supported which line.

Extract CPT and ICD-11 with a quote, never a guess

Extraction lists candidate charge lines. Each line is a service or diagnosis, a code, and the exact sentence (or short contiguous span) that supports it. The model maps language to CPT and ICD-11. It does not decide medical necessity, upcode, or fill a likely procedure because the specialty usually performs it.

Require a structured output, not a chat. For every candidate: proposed code and short descriptor; the note sentence copied verbatim; a location pointer the worklist can jump to; and a confidence the coder can ignore. The cite is the evidence, not the score.

If the model cannot produce a sentence, it must not produce a code. That kills the failure mode of a CPT with no sentence: a code that appeared because the specialty, the order list, or the appointment type implied it. Implied is not documented. Drop the line.

Do not invent a procedure. "Plan for I&D if not improved" is not an incision and drainage. "Counseling on colonoscopy" is not a colonoscopy. "Knee injection discussed" is not a joint injection. Flag the sentence as plan or discussion if a coder should look; do not emit a performed-procedure CPT. When wording is ambiguous (performed versus planned, this visit versus prior), leave the CPT blank and put the sentence in a needs-human-read bucket. Do not guess the more billable reading.

Diagnoses follow the same cite rule. Pair each ICD-11 candidate with the clause that states the condition. Do not carry forward a problem-list diagnosis the note never mentions. If you also run diagnosis code suggestion on structured problems, keep that list separate from note-grounded charges.

One illustrative extract, invented only to show a correct shape, not as a measured result.

Signed note: "After informed consent, I injected 40 mg of triamcinolone into the right knee joint using a sterile technique. The patient tolerated the injection. We discussed physical therapy; no arthroscopy was performed."

Valid extract: CPT for the intra-articular injection, cited to "I injected 40 mg of triamcinolone into the right knee joint using a sterile technique." ICD-11 for the knee condition only if the note names it; if this paragraph is silent on diagnosis, that line stays empty. No arthroscopy CPT. No therapy CPT. The note says arthroscopy was not performed, and a discussion is not a billed service.

Invalid extract: arthroscopy because the clinic is ortho, a laterality-specific diagnosis the note never states, or the injection CPT with no quoted sentence. Same defect in each case: a code without documentation.

Blank is the correct output when the note is silent

Empty stays empty. That is not missed capture. It is refusal to invent work the note does not contain. Pressure not to leave money on the table is real. The counter is audit exposure, then denial prediction before submission and compliance audit risk scoring. A silent note that generates a procedure is a gift to a payer record request.

Treat the note as silent when the service is not described as performed at this encounter; the diagnosis is not stated; the only mention is a plan, referral, question, or copy-forward from another date; or the sentence contradicts the code ("no biopsy was taken"). The charge line is then blank. The worklist may still show the paragraph so the coder can decide on a query or addendum. The model does not write the addendum, query the clinician, or substitute a similar CPT from a prior visit.

Do not treat orders as a substitute for the note. An order for a joint injection the note never describes as given is not a charge.

Coder review is what turns an extract into a claim

Nothing in this flow posts a charge. The extract is a worklist: proposed lines, cites, blanks, and conflicts. A coder accepts, edits, or rejects each line. Then the encoder or billing system creates the claim. Treating the extract as billed is the failure mode that looks like automation success: auto-drop to the claim, posting without a cite check, or dashboards that count model CPT volume as captured revenue.

Keep review non-skippable. Quality is agreement between the signed sentence and the line on the claim. A coder who cannot jump to the cited sentence is not reviewing. Put the cite on screen with the code, keep blanks visible, and make reject as cheap as accept.

Vendor class does not change this. Whether the worklist lives in Epic or Oracle Health, in a 3M-class encoder, or in an autonomous-coding layer such as AKASA, posting authority stays with coding. Use the vendor to route the signed note, display the cite, and hand off to the encoder.

Unsupported lines that pass a tired reviewer are what compliance audit risk scoring should catch before a payer does. Thin documentation is what denial prediction before submission should flag. If the note is incomplete, query or wait for a signed addendum, reload, and extract again. Do not let the coder add a procedure the note still does not describe. That is inventing a procedure with extra steps.

Is this worth automating for you?

Whether this pays back depends on how much time it takes your team today. Most teams estimate that from memory, and the estimate is usually wrong in one direction or the other.

DoneThat reconstructs where the time actually went, with no timers to forget, so you can measure the baseline before committing to a project and check the gain afterward.

Measure the baseline first