Never re-bill a draw that was already paid

Regenerating the schedule skips any stage that already has money against it, and tells you which ones it skipped.

What it is

Before generating, the routine scans the project's existing invoices for any that are paid or partially paid and records their stage id and stage index as settled. Those stages are excluded and returned in a skippedPaid list, which the editor surfaces as plain English rather than silently producing fewer invoices.

Also called: double billing the deposit · customer already paid this · duplicate draw invoice

See it
Never re-bill a draw that was already paid
Apr
May
Jun
Jul
Gideon Alt — Riding Arena
Framing
Sutter Kline — 30×40 Garage
Concrete
Marlin Hoover — Barndominium
Trim
Sutter Kline — 40×64 Shop
Framing
Ronan Petsch — 40×64 Shop
Concrete
Framing crewConcrete crewTrim crew
The editor's inline message: 'Nothing to generate — those stages are already paid (Down, Delivery).' src/components/invoices/InvoiceEditor.tsx. Sample data — no customer information appears here.
How it works
  1. 1listInvoices for the project; ignore voided rows.
  2. 2Any invoice with status paid or paid_amount above zero adds its stage id and '#index' to a settled set.
  3. 3Stages in that set are skipped during generation.
  4. 4If nothing generates, the editor says which stages are already paid instead of 'couldn't generate'.
Why we built it

Regenerating a schedule after part of the job had already been billed offered up stages the customer had paid for months earlier, and the only thing standing between that and a second invoice was somebody remembering. A customer who has to write in and say a payment has already been made has stopped trusting the paperwork. Any stage whose invoice has taken money is excluded from regeneration, so double-billing is not on the menu.

The problem
  • Re-generating a schedule creating a second bill for money already received.
  • Silent partial generation with no explanation.
Sound familiar?
What you get
A paid draw can never be re-issued by accident.
The system names the stages it skipped and why.

See it on your own jobs

Twenty minutes, your numbers, no slide deck. We’ll build one of your real buildings in front of you and send you the estimate link at the end — yours to keep either way.

or keep browsing features →