Appearance
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
↘ voidThe 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:
| Disposition | Meaning |
|---|---|
| Invoice | Collected by the T&M builder when completed |
| Manually invoiced | Billed outside the builder; excluded from bundling |
| No invoice | Never 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.)