Generate a construction draw workbook
Prerequisites
- A working Rust toolchain and a checkout of the workspace containing the accounting crates.
- A data directory with the shared entity/account/consolidation registry populated for the entity these reports run against, plus real budget-lock data from the sibling construction engine (see tool-construction — construction cost, schedule, and quality ledger).
- No services need to be running for any of the five binaries below.
Purpose
Produce the reporting package an equity investor's independent directors, or a construction lender where one exists, review during an active build: what's being requested against the project's approved budget, the statutory declaration required under construction-lien law, a record of payments actually disbursed, and a calendar of statutory payment due dates cascading from real invoice-receipt dates.
This guide is distinct from Generate a financial statement package, which covers a different, entity-level statement toolchain — this one is specific to an active construction project's own draw/capital-call cycle.
Procedure
1. Point every binary at the shared data directory
The same environment variable the construction-side reports use — this toolchain reads from the same data directory, not a separate one.
2. Run the reports
Each is independent — running one does not require having run any other first, and each writes its own HTML and PDF into <data-dir>/outputs/<year>/.
Expected outcome
| Report | Real output |
|---|---|
| Capital call request | The current request to the entity's independent directors, sized against the real approved budget |
| Capital call schedule | The running Original Estimate / Revised Estimate / Costs Completed to Date / Cost to Complete / % Complete / Holdback register a capital call draws from |
| Statutory declaration | The sworn lien/holdback compliance attestation the underlying construction-lien statute requires |
| Checks issued | A disbursement register keyed off the real cash account — genuinely empty until a real payment has been disbursed |
| Cash-flow calendar | A calendar of owner-payment and subcontractor-payment due dates, each cascaded from a real invoice-received date |
Verification
- Open each PDF and look at it.
- A genuinely empty register is not a defect. On a project with no real payroll, invoice, or payment ever posted, every one of these five reports correctly renders with real, honest zero balances or an empty table — not a fabricated figure. Read each report's own basis-of-preparation note before treating an empty result as broken.
- Confirm the capital call reports never use lender language (a "draw request" to a bank) if the entity you're running this against is equity-financed — the report's own framing follows the entity's real financing structure rather than defaulting to loan terminology.
What this task does not do
- It does not compute the statutory due-date cascade from anything other than a real, recorded invoice-received date. A blank invoice-received date produces no calendar entry for that transaction, not an estimated one.
- It does not disburse or authorize a payment. These reports read the ledger; nothing in this task writes a payment or a check.
Edge cases
- A project with no real transactions posted yet produces a complete, real set of five reports, all correctly showing empty balances — this is the expected state for a project at kick-off, not an error.
Rollback
Nothing to undo — every binary reads existing files and writes only into <data-dir>/outputs/<year>/.
Next steps
- Monitor an active construction project — the construction-side reports this workbook's figures ultimately trace back to
See also
- tool-accounting — double-entry ledger and audit-ready financial statements — the construction-industry extension section describing this toolchain's design
- tool-construction — construction cost, schedule, and quality ledger — the retainage and holdback model this workbook's statutory declaration and cash-flow calendar depend on
- Generate a financial statement package — the entity-level statement toolchain this guide is distinct from