Skip to content

Billing

Cash pay or insurance. Usually both. One set of books.

Practices change how they get paid. A cash-only clinic signs its first contract; a payer-billed practice adds a membership line; a therapist keeps half the panel on insurance and half self-pay. In most systems that is a platform decision made years before you had the information to make it.

Here it is decided per encounter, on one ledger, and changing your mix does not touch a single clinical record.

Three ways to run

The third one is the common case.

The platform does not have a cash-pay edition and an insurance edition. It has one financial model that both use.

Cash pay

Direct primary care, concierge, cash-based therapy, aesthetics, memberships.

  • Invoice the patient, take the payment, issue the statement
  • A good-faith estimate owed, tracked and issued before the visit, as the No Surprises Act requires
  • No payer machinery on screen for staff who never touch it

Insurance

Payer-billed visits, with the coding and claim lifecycle the workflow needs.

  • Coded charges become claim lines without re-entry
  • Claim status through submitted, acknowledged, accepted or rejected, paid or denied — a rejection before adjudication kept apart from a denial; a correction is a new claim that replaces the original, and an appeal is a letter drafted into the outbox
  • Patient responsibility computed per line from the remittance; raising the statement is still a person’s job

Both, at once

The common case: some visits billed to a payer, some paid directly, one set of books.

  • Billing model is decided per encounter, not per practice
  • One ledger, one reconciliation, one audit trail
  • Changing your mix is a setting, never a migration

What does not change

The flex is in the edge, never in the foundation.

This is the whole design. The parts a practice cannot retrofit later are common to both models; the parts that differ attach at the boundary.

Charges are coded from the start
Every charge carries a real code system — CPT, HCPCS, ICD-10 — whether or not a payer will ever see it. Cash-pay practices are not storing free text they would have to re-key the day they take their first contract.
One set of records, both models
Charges, invoices and statements are the same records whichever model pays. A patient’s payment is posted to the statement and the payment ledger beside it; a payer’s money is posted from the 835 to the claim. Neither is a double-entry general ledger.
The clinical record does not care
Encounters, notes, and orders are unaware of who pays. Switching billing model touches no clinical data and no clinical workflow.
Authorization already knows the difference
Billing roles see demographics, coverage, claims, invoices, payments, and good-faith estimates — and never the note. That minimum-necessary scope is enforced on the data, not by hiding a tab.
Payer connections are edge adapters
Eligibility checks, clearinghouse submission, and remittance posting attach at the boundary. The domain model behind them does not change shape when you add one.

Side by side

What actually differs.

A short list, which is the point. The last row is the one that saves a practice a migration.

What differs between cash-pay and insurance billing
 Cash payInsurance
Who is invoicedThe patient directly.The payer first, then the patient for their responsibility.
CodingCoded anyway — CPT, HCPCS, ICD-10.The same codes, now on claim lines.
Extra workflowStatement and receipt.Eligibility, submission, remittance, denial handling.
Staff who see itWhoever takes payment.The billing role, scoped away from clinical detail.
The ledgerOne ledger.The same one ledger.

Claims and remittance

Every step is somewhere a problem can be caught before a payer catches it.

A denial is not one bad day. It is a claim rebuilt by hand, refiled, and waited on again — and the second attempt is often denied for a different reason nobody was told about the first time. The pipeline is arranged so that the catching happens early, where it is cheap.

  1. Eligibility, before the visit

    Coverage is recorded before the patient is in the room, and the 270 inquiry and 271 response are generated and parsed as X12. No payer is connected to send them to yet, so the check itself is the practice’s until an eligibility adapter is bound.

  2. The claim is assembled from the encounter

    Coded charges become 837P claim lines with no re-keying, dated by the visit rather than the day the charge was posted, and a visit is assembled once. The diagnoses, their pointers, the place of service and the rendering provider are entered when the claim is assembled and can be corrected until it is filed.

  3. The scrubber reports everything at once

    Not the first problem — every problem, split into what will be rejected and what is merely worth a look. A biller who has to resubmit four times has been failed four times.

  4. The bytes are attested before they are sent

    What was transmitted is hashed into the transparency ledger before transmission. Months later, what the practice sent is provable rather than asserted.

  5. Status comes back and stays separate

    Submission, acknowledgement, and adjudication are distinct events on a timeline, because collapsing them is how “we never heard back” becomes unanswerable.

  6. Remittance posts exactly once

    The payer’s own trace number is the idempotency key. The same file arriving twice posts once; two different files under one reference stop and ask for a human.

  7. Denials are ranked by recoverable money

    The worklist opens on what is worth working, with each CARC and RARC turned into plain language — and codes the system does not recognise are labelled unknown rather than guessed at.

Three things that are always true

Regardless of how you configure it.

These are not settings. They hold for every practice on the platform, because each one is a place where getting it wrong is silent — the numbers end up wrong and nothing on any screen looks unusual afterwards.

  • A remittance cannot post twice

    The payer’s reassociation trace number is unique per practice and payer. A resent file is recognised as the same file; a different file under the same reference is refused rather than merged.

  • A file that does not add up is never posted

    If what the payer paid, adjusted, and assigned to the patient does not reconcile against what was billed, the file is stored for a person to read and posted to nothing. Posting it would put wrong numbers on every claim it touched, invisibly.

  • Write-offs and patient responsibility are never merged

    A contractual adjustment is money the practice absorbs and may not bill. Patient responsibility is money the patient owes. Systems that add them together either bill a patient for money they do not owe or write off money the practice should collect.

Billing automation

What runs without you, and what will never run without you.

The goal is to take work off a billing specialist, not to take the decision off them. Those are different, and conflating them is how a system ends up quietly upcoding on a practice's behalf — which is fraud, and the practice is liable, not the vendor.

Automatic

Happens with nobody watching. Only ever things that are reversible, that assert nothing to anybody, and that a person would have done identically.

  • Ranking the denial worklist by recoverable value
  • Turning a denial code into plain language
  • Learning that this payer denies this claim shape, from your own remittances
  • Warning you before submission when it has seen this shape denied before

Proposed

The system does the WORK and a person makes the DECISION. This is where the burden actually goes — a corrected claim assembled and waiting for one click is most of the work removed and none of the judgement.

  • A corrected claim rebuilt after a denial with a mechanical fix
  • An appeal letter drafted into your outbox
  • Codes proposed from a note, each one quoting the text that supports it
  • Posting an 835 that parsed and balanced, when a person uploads it

Forbidden

No configuration reaches these. They are constants in the code with no setting, because each is where the failure stops being a bad claim and becomes a false one — and a false claim is a civil penalty per claim plus treble damages, owed by the practice.

  • Adding a diagnosis the note does not support
  • Any change that increases what the payer pays
  • Editing a claim that has already been filed
  • Posting a remittance whose arithmetic does not reconcile

Two more acts always need a person, however you configure the rest: submitting a claim, and sending an appeal. Both are assertions to an outside party, and an assertion nobody chose to make is the whole problem. A practice that genuinely wants otherwise does not want this product.

Where this stands

Shipped, and next.

In the platform today

  • Coded charges on CPT, HCPCS, ICD-10, SNOMED, and LOINC
  • Invoices, payments and statements, with a ledger of the payments and refunds posted against them
  • ASC X12N 837P claim generation, with a scrubber that reports every problem at once
  • Claim lifecycle — draft, ready, submitted, acknowledged, accepted, rejected, paid, denied, replaced, voided — with a correction filed as a new claim that replaces the original, on a claims screen that records the filing and transmits nothing
  • 999 and 277CA acknowledgements parsed and applied, by hand from a file or from an adapter
  • 835 remittance parsing and posting from a pasted or loaded file, with the three invariants below
  • A denial worklist ordered by recoverable money, and denials grouped by cause
  • Eligibility recorded, with the 270 inquiry and 271 response generated and parsed as X12
  • Appeal letters drafted for a person to send, once a model is bound — never sent for you
  • Denial patterns learned from your own posted remittances
  • Billing and claim permissions, with minimum-necessary scope covering coverage and claims
  • Coding assistance that proposes; a person accepts, modifies, or rejects — the suggestion is asked for through the API and needs a bound model, and the Charges tab shows it for a person to confirm

Not connected yet

  • Claims and remittance are worked from files, not a connection. Staff screens build, check and record the filing of a claim, post a 999, 277CA or 835, and work the denial list — but nothing is sent or fetched. With no clearinghouse bound, a claim filed on the screen is recorded with its exact 837 and attested, not transmitted, and a biller pastes or loads each acknowledgement and remittance the clearinghouse or payer returns. Two things are still not built: editing a draft claim in place (a filed claim is corrected with a replacement) and marking a denial worked or written off.
  • A remittance does not reach the patient’s bill. The patient’s share of each line is computed from the 835 and kept on the claim. Nothing turns it into a statement, and nothing from a remittance is written to the patient ledger, so a biller raises that statement by hand. Nor is there a way yet to mark a denial worked or written off, or to attach a payment the system could not match to a claim.
  • No clearinghouse is bound yet. Claims are generated, scrubbed, and attested. The submission port exists and nothing is wired to it, so the API answers “not configured” rather than pretending a claim went somewhere. The integration point is built and waiting — a durable send queue with retries, and the filing of acknowledgements and remittances — but with no clearinghouse adapter it is idle, and filing stays a manual step.
  • Eligibility is not verified with a payer. Coverage is recorded, and the X12 library builds the 270 inquiry and parses the 271 response — service-type-level benefits, in-network and out kept apart, a $0 copay told apart from silence — though the API does not call it yet. Nothing is bound to the eligibility port, so the API answers “not configured” rather than reporting coverage it never confirmed. What a person is told by phone can be recorded, and is labelled as entered by hand. A patient told they are covered by a check that did not happen is worse off than one told nothing.

The clearinghouse and the payer are integrations at the boundary, which is exactly why they can land without reshaping the ledger underneath them. Until one is bound, the API answers “not configured” rather than letting a claim look like it went somewhere. We would rather say that here than let you find it out after you have filed.

Tell us your mix. We will show you that screen.

Cash-only, payer-only, or the messy middle — the demo runs on whichever one you actually have.

Request a demo

Forged Med is billed per practice, never per claim.