Back to work
HealthcareProduct DesignAI UX

Denials Desk (2026)

A denials work queue for US medical billers, where an AI suggests the next step on each denied claim and the biller decides, with the evidence one click away.

Client

Self-initiated concept (Larkwell Medical Billing is fictional)

Role

Product designer, solo: PRD, design system, Figma, coded prototype, test plan

Timeline

5-day sprint

Platform

Desktop work queue · Claim workspace · Approvals

Denials Desk

TL;DR

Denied claims are money a practice has earned but hasn't been paid, and each one hides a deadline and a paper trail. I designed a work queue and claim workspace where a scripted AI suggests the next step and the biller approves, edits or rejects it, with every suggestion traced to the exact field it used. The hardest case is built in on purpose: a timely-filing write-off that looks certain but ignores the payer's 277CA acceptance. Testing with US billers comes next.

“…adjust off the visit since I cannot show proof of timely filing without the transmitted claim report.”

A medical biller on the AAPC forum, 2014

The Challenge

What needed solving.

Denied claims are money a practice has earned but hasn't been paid. An MGMA study put the cost of reworking one at about $25, and found more than half are never reworked at all (Family Practice Management, 2015). To work one, a biller compares the money at risk with the time left, decodes a CARC code, and digs the proof out of claim history, remittances and payer portals.

Each step has a trap. The billed charge isn't the money at risk: DN-1001 billed $3,180.00 but has $1,420.00 at risk. A filing limit, a corrected-claim window and an appeal deadline are different clocks. And proof of timely filing means the payer accepted the claim, not just that the clearinghouse received it. A suggestion that misses one of these sounds right, and a wrong write-off gives the money up for good.

The business case. For a billing company like Larkwell, the queue decides what gets recovered. The goal is to work more denied money before its deadline, without wrong write-offs, and with every decision on record for the supervisor who signs off the large ones. In production I'd measure dollars recovered per biller, write-offs reversed later, how often billers override each evidence label, and claims that pass a deadline while sitting in the queue.

The Approach

How I solved it.

My PRD set one rule for every screen: the problem is not generating an AI answer, it is helping billers decide whether that answer deserves to be trusted. So I didn't try to make the AI more convincing. I designed every suggestion to be checkable: what it recommends, why, the exact field it relied on, and what it didn't check.

The biller stays in charge. Approve records a next step and submits nothing, Edit keeps the original on record, and Reject asks for a reason and an alternative, which can simply be "investigate".

Left: a plain denial worklist where DN-1007 is a row of codes, a billed amount and DENIED. Right: DN-1007 in Denials Desk with the plain-language reason, the deadline, the suggestion and its evidence.
Before: a plain worklist mock built from the same synthetic claims. DN-1007 is just CO-29, $2,140.00 and DENIED. After: the reason in plain language, the deadline, the suggestion, and the 277CA marked Not cited.

Key Insights

What shaped the design.

01 · From the problem definition

A bigger claim isn't always the more urgent one

DN-1014 has $3,180 at risk and 16 days left. DN-1009 has $28,400 and 153 days. Either can be the right first pick.

What I did about it

No risk score. A single number would hide the trade-off and imply there's one right answer. The queue groups claims into deadline bands, then sorts by amount at risk within each band, and the biller can re-sort.

Every clock says what it is. Each deadline names its type and source, and assumed deadlines say so, so a corrected-claim window is never read as an appeal deadline.

Unknowns get their own place. Unverified and past deadlines have their own bands instead of sinking into "Standard", and urgency is written in words ("Due today", "3 days past"), not shown by colour alone.

Left: the queue grouped into deadline bands. Right: the same queue sorted by highest amount, with DN-1009 above DN-1014.
Left: the default deadline bands. Right: sorted by amount at risk, DN-1009 ($28,400) moves above DN-1014 ($3,180, 16 days left).

02 · From the design

Checking has to be cheaper than skipping

If checking the evidence takes more effort than approving, billers will approve on trust.

What I did about it

Evidence sits beside the decision, down to the field. Each evidence chip opens the document on the exact field the suggestion used, highlighted. "Open source record" opens a synthetic original that names the real format it stands for: an X12 278 for an authorization, a 277CA for a payer acknowledgment, an 835 for a remittance.

Words, not percentages. The labels are Strong match, Likely and Needs your judgment, and each one says what it covers. A number like 87% would claim an accuracy that scripted suggestions don't have.

Approve isn't "done". The result reads "Ready for manual action. Nothing was submitted."

Left: the evidence panel with the Valid dates field highlighted and labelled Cited. Right: the synthetic authorization record with the same field highlighted.
The cited field in the panel, and the same field in the synthetic source record, which names the real format (X12 278).
Open the claim, check the cited dates, approve. The audit log records the evidence that was opened.

03 · The safety test

The dangerous suggestion looks exactly like a good one

DN-1007's write-off says Strong match and lists nothing missing. It's wrong: the payer accepted the original claim on 03/21, inside the 06/07 filing limit.

What I did about it

Acceptance, not receipt. The 277CA reads "Accepted by payer (not clearinghouse receipt)", because only the payer's acceptance proves timely filing, and payers differ on what proof they take.

No warning, on purpose. Real errors don't announce themselves. If I had flagged DN-1007, the test would measure the flag, not the biller.

Uncited documents are one click away. The 277CA is marked "Not cited by the suggestion", so the biller can see where the AI's view stopped.

Rejecting never forces a guess. The biller has to give a reason ("Contradictory evidence" is its own option) and a next step, and "Investigate" counts as one.

The approval gate can't rescue it. Write-offs above a provisional $2,500 need a second person, but DN-1007 sits below that line on purpose, so the test depends on the biller alone.

Left: Submission history with the corrected claim from 07/02 highlighted as cited, and the payer acceptance from 03/21 just above it. Right: the 277CA payer acknowledgment, not cited by the suggestion.
Left: the field the suggestion used, the 07/02 corrected claim. Right: the document it didn't use, the payer's acceptance on 03/21.
The cited field, then the 277CA the suggestion ignored, then the override with a reason and an appeal.

Process

How I worked through it.

01

A PRD grounded in the rules

CARC 197, 50 and 29 read against the X12 code list, Medicare's 120-day redetermination window from CMS, and three scenarios (right, uncertain, wrong) with a 4 of 5 detection target.

02

A design system first

Built new for this project: a three-tier token system kept in sync between Figma and code, 39 components and 17 product patterns, including the AI suggestion, the evidence document, the override dialog and the audit entry. Only the sidebar and stat tiles follow patterns from my Payment Resolution console.

03

7 flows, 32 screens

Queue, claim review, rejecting a wrong suggestion, editing, failures, write-off approval and source records, designed at 1512 × 982 with a product log for each flow.

04

Built, then checked like a reviewer

A coded prototype with 14 synthetic claims. Reviewing my own screens, I found a write-off justification that contradicted DN-1009's data, and rebuilt that scenario before it could confuse a tester. axe-core reports 0 accessibility issues on every prototype page.

Selected Screens

A closer look.

DN-1004 marked Needs your judgment, with no button highlighted and the unchecked medical policy named
The reject dialog for DN-1007 with Contradictory evidence, Appeal with records and a note citing the 277CA
DN-1009, a $28,400 write-off waiting for a second reviewer, seen by the supervisor Kemi Okoro
DN-1001 with its authorization record failing to load: the panel says nothing from it counts as checked, and offers Try again

Outcomes

How I'd know it works.

Target 4 of 5

billers reject the DN-1007 write-off because of the 277CA, not general distrust

Target <90 s

median time from opening DN-1007 to recording the override

Target 4 of 5

billers notice the unchecked payer policy on DN-1004

Not tested yet. The plan: moderated remote sessions with five US medical billers on the coded prototype, with synthetic claims and scripted suggestions. Billers are told the suggestions are scripted, not that one is wrong, and a rejection only counts if they name the evidence.

The path I designed for (a walkthrough, not research)

A careful biller. DN-1007 is a timely-filing write-off marked Strong match. Timely-filing denials can be overturned with proof of filing, so a careful biller opens Submission history: the cited corrected claim from 07/02, and above it a payer acceptance on 03/21. Next document opens the 277CA, accepted by the payer, inside the 06/07 limit. They reject with Contradictory evidence and choose an appeal.

The risk I designed against

A rushed biller. They see Strong match on a denial type that is often legitimate, and approve. That is automation bias, and it is why uncited documents stay one click away, why each one says what the suggestion didn't use, and why Approve says nothing was submitted.

The honest limits. No billers have used it yet. The walkthrough shows the path the design supports, written by me; only testing shows whether real billers take it, and the results will replace this section. The suggestions are scripted, so testing will measure the interaction model, not AI accuracy.

Reflection

What I'd do differently.

I'd talk to billers before designing the queue. The prioritisation rule, the deadline bands and the write-off threshold all came from my PRD. They should have come from billers, which is why testing with them is the next step.

I'd also watch whether billers check the 277CA unprompted. If they don't, the scenario is too hard, and the fix belongs in the payer message, not a warning in the UI.

Now you know.

A queue nobody trusts? A status that sends people to support?

That's the work I do, and I'm open to new projects. Tell me what you're building, and I'll tell you honestly if I'm right for it.

Next Project

Payment Resolution (2026)

Designed one resolution case for stuck payments in Nigeria and India. In testing, 8 of 10 customers knew to wait instead of paying twice.

View case study