Skip to content

Invoicing ​

Two kinds of invoice, one shared flow: build it in Blok with the field documentation attached, mark it ready, and QuickBooks takes it from there.

The two invoice types ​

Maintenance T&M bundles completed, billable work orders for one customer, with one line per work order, priced from its extracted billing (labor at your rates, materials and sub invoices with markup). Each bundled work order is stamped so it can't be billed twice.

TI (Schedule of Values) progress-bills a project against its SOV. You enter this invoice's amount per line; billed-to-date, balance and % complete are always computed from the full history, never stored, so they can't drift.

Approved change orders add lines to the schedule alongside the ones seeded from the estimate.

Status flow, and who moves it ​

created → ready to send → sent → viewed → paid / overdue
                 ↘ void

The split matters:

  • You move ready to send and void, in the app.
  • QuickBooks moves the rest. Marking an invoice ready fires the event the QBO integration listens for; it creates the invoice in QuickBooks and writes back the number, the link, and every later status change.
  • No QuickBooks? A ready invoice also offers Record as sent. Download the sheet, send it your own way (email, mail, QBO by hand), and record that it went out. Viewed, paid and overdue still only come from the integration.

If invoices sit at "ready to send" and you expected QuickBooks

That's the integration not running. The app never sends an invoice itself. Check the Make scenario, or use Record as sent after sending it manually.

Voiding releases: a voided T&M invoice frees its work orders to be billed again, and a voided SOV invoice's amounts drop out of billed-to-date so the value can be re-billed.

What gets billed, and what doesn't ​

Every work order carries a billing disposition:

DispositionMeaning
InvoiceCollected by the T&M builder when completed
Manually invoicedBilled outside the builder; excluded from bundling
No invoiceNever billed. Receipts, estimate prep, internal work default here

The builder enforces this server-side: only completed, un-invoiced work orders with disposition invoice, belonging to that customer. Anything else is refused with the reason.

Rates resolve most-specific-first (project → customer → org, each preferring a work-order-type-specific row) and are snapshotted when billing is extracted, so editing a rate later never rewrites history. Warranty work bills at zero while still recording its true cost.

Documents ​

From the invoice page:

  • Detail sheet (PDF or HTML): per-work-order breakdown for T&M, the SOV grid for TI.
  • Report packet (T&M): the branded field reports for every bundled work order: photos, descriptions, signatures. This is the "here's proof" attachment.
  • Editable Excel detail: a paid add-on, enabled per organization, for offices whose approval pass happens on the spreadsheet itself. Grayscale by default, brand colours optional.

The customer-facing estimate document shows only fields marked visible. Internal costs, hours and markups stay internal.

Two things to watch ​

An invoice is a snapshot. Its line amounts are copied when it's built. If a submission is re-approved afterwards, the work order's billing updates but the issued invoice does not. Check before re-approving work that's already on an invoice.

SOV lines don't currently stop you over-billing. Nothing caps an amount at the line's remaining balance; a line can go past 100%. The builder shows balance and percent, so read them before saving. (A guard is on the backlog.)

Internal documentation. Not for distribution.