Completed and unconverted, aged by day

A session happened. Someone was there, a clinician was paid, a note may or may not exist, and there is no billable charge.
The session is in the system. It is just in the wrong part of it, and there is no screen that shows you the wrong part.
Why this report does not exist
Because it is a report about absence, and reporting tools count things that are there.
Your system has a screen for appointments. It has a screen for charges. It has a screen for claims. What it does not have is a screen for appointments that completed and never became charges, because that is not a record — it is a gap between two records.
So the gap goes unmeasured, which is the entire reason this stage leaks.
Building it
Two exports and a join.
From the appointment side: appointment ID, client, clinician, date of service, status, scheduled units.
From the charge side: appointment ID, charge created date.
Left join charges onto appointments. Filter to appointments with a completed status. Every row with no charge is unconverted. Age it by date of service and bucket it.
Two traps worth knowing.
The first is status. “Completed” has to mean the session actually happened, not that the appointment time has passed. Some systems auto-complete appointments on a schedule, which fills your report with sessions that were cancelled and never updated. Check what the status means before you trust the count.
The second is the join key. If your system does not carry the appointment ID onto the charge, join on client plus date of service plus code, and accept that a client with two sessions in a day will need a manual look.
Reading it
Illustrative arithmetic, not a client engagement.
The first bucket is the working queue. Notes get written, charges get created, this is normal.
The second is slow but alive. The third is drag.
The fourth is the finding, and not because of the dollar value. Sixty-one sessions over fourteen days old means something is not moving on its own, and the reason is almost always one of four things: a clinician who is behind on notes, a client with a documentation issue, a code that requires a supervisor signature nobody has chased, or a session that should have been cancelled and never was.
Four causes, sixty-one rows. Group by clinician and by client and the causes will name themselves in about ten minutes.
The aging is the point
A single-number version of this report — “we have $25,650 unconverted” — is not actionable. It looks like a lot, it is mostly the normal working queue, and the person reading it cannot tell whether to worry.
The aging is what makes it a control. The oldest bucket is the only part that requires a decision, and it is usually under a fifth of the total.
It also puts a clock on the thing. Timely filing runs from date of service, not from conversion. A session sitting unconverted at 60 days has already spent most of its window on a shorter-limit payer, and nobody has noticed because it is not yet a claim and therefore appears in no billing report.
Who owns it
The clinical side creates the charge, or creates the note that lets the charge be created. So this report goes to whoever manages clinicians, not to the biller.
That routing matters. The biller cannot fix an unwritten note, and sending them a list of sessions they cannot act on teaches everyone to ignore the report. Send it to the clinical lead, daily, with the oldest bucket at the top.
Five checks you can run this week
1. Build the query and save it. After the first hour it is free forever.
2. Verify what “completed” means in your system before you count anything. An auto-completing status will inflate this report and destroy its credibility on day one.
3. Group the oldest bucket by clinician. If one name carries most of it, this is a coaching conversation, not a process project.
4. Check the oldest row against the payer’s timely filing limit. If it is inside 30 days of the line, that is today’s work.
5. Route the report to the clinical lead, not the biller, and send it daily. Weekly finds the problem four days after it stopped being cheap.
The number to actually track
Completed and unconverted, aged by date of service, in dollars, with the oldest row under four days.
Pair it with conversion completeness once a month — converted hours over delivered hours, target 100 percent. Anything under is gone, not late.
A single total is not actionable. The aging is what makes it a control.
Where this sits
This is the fourth of eight stages where ABA revenue leaves, and the last one that sits entirely with the clinical side of the house. Everything above it is about whether the session should have happened. This one is about whether it turned into anything billable.
An unconverted session is invisible to a claims audit, because there is no claim to audit.
A Leak Map Assessment measures all eight — the reservoir, authorization burn, cancellations, session conversion, conversion to billed, clean claims, rate integrity and recoupments. A claims audit is a different instrument. It starts once a session has been converted and billed, and reconciles the back half of the cycle to cash.
Aimline closes the books, oversees the revenue cycle, and sits in the CFO seat for ABA practices. We run claims audits scoped to a payer book, and Leak Map Assessments that measure the full cycle — three weeks, $7,500 fixed. Either one gives us a verified number to run oversight against, and the report is yours whether or not you engage us to fix what it finds.