US Progress Billing complete edition: per-state retainage rules held with their primary source and consultation date, lien waiver campaigns with dated requests and follow-ups, one-click customer invoice from the certified payment application, schedule-of-values import that reads both decimal conventions, and sale order, project and timesheet cross-reading. Ships the retainage table EMPTY on purpose.
Overview
US Construction Pay Applications — full edition
Installs on top of the free dyo_situation_travaux_us_lite register without asking for anything again, and adds the five actions that cost money when they are missed.
The holdback table ships empty, and that is the heart of the module
This needs saying before anything else, because it is counterintuitive for a paid module. Retainage is governed by the law of each state: the maximum rate, the release period, the dividing line between public and private contracts and the conditions for substituting security all vary from one state to another. There are fifty possible answers, plus the federal district and five territories.
None could be obtained from a primary source within the timeframe of this project, and the module's VERIFICATION.md states exactly what was searched for, where and when — three of the four state code websites tried refused even a simple automated read. Setting plausible rates would have been the worst possible deliverable: a false confirmation dulls the vigilance of someone who would otherwise have opened their state's code.
So what the module brings is not content, it is an enforceable form. Each rule carries its text, its address, the date on which it was read, the name of the person who read it, and its caveat. A rule without a source cannot move to “recorded”: the module refuses it. And “not recorded” is distinguished from “zero” everywhere — a release period treated as known and equal to zero is a retainage you believe can be released immediately.
The project then compares the rate entered with the rule of the state where the work is performed, and records a finding. It says neither that the contract is lawful nor that it is not: it knows neither its terms nor the exceptions that might apply.
Lien waivers, in batches and followed up
The free register tells you who must sign what. It does not tell you how long you have been waiting, or whether anyone has followed up — and that is where money is lost: a waiver that nobody remembered to request shows up nowhere, and the owner does not release the payment.
The campaign creates the documents in one go, for one progress claim and one list of signatories, with a single form: mixing forms in the same request is the costliest mistake — an unconditional waiver slipped in among conditional ones gives up the security before payment is received. Each document carries its request date, its dated reminders and their count, and a late-status finding measured against the expected payment date.
The module sends nothing on its own: a legal document that goes out without being reviewed is one legal document too many.
The invoice, in one action and only once
A certified pay application generates a customer invoice with a single line, for the amount due net of retainage and previous certificates. Breaking it down by line item would produce negative lines at the first reversal; the owner pays an amount, and the schedule of values goes with the printed statement, which is the supporting document.
The link is maintained in both directions and invoicing is refused a second time: a progress claim invoiced twice is a progress claim paid twice, and that only comes to light at final settlement.
Importing the value table, without any factor-of-one-hundred errors
A schedule of values arrives as a spreadsheet, because that is where it was negotiated. The wizard imports it — and reads amounts under both decimal conventions. “34 500,50” from a French spreadsheet, read the English way, would give 3,450,050: the line item goes out at a hundred times its value, and nothing flags it. The parsing routine is the one already proven in dyo_paie_certifiee_us; it was not rewritten.
An existing item number is never overwritten: reimporting a corrected file must not erase progress that has already been invoiced.
The link to what Odoo already covers
The sales order carries the customer and the amount sold: the project is linked to it and the variance with the contract is recorded, never corrected — down payments, revisions and out-of-contract lots create legitimate variances.
The Odoo project and its timesheets carry the hours. They are collected for the period and displayed alongside the entered progress. The module derives no amount from them: an hour is not a percentage of progress. A fixed-price subcontracted work package progresses without hours; rework consumes hours without progress. The difference is a question to ask.
The source chain, and what it did not find
The module plugs into dyo_connexions_base and adds one question to it — a country's withholding regime — without writing a second chain. What is missing must be stated: no public online source was found for this question. The chain therefore holds a single source: the human reading, recorded and dated. When an online source becomes available, it will be added on top without anything else changing — which is precisely what the shape of the foundation allows.
The federal exclusion check for a subcontractor (SAM.gov), useful on federal contracts, is already provided by dyo_subventions_us in this repository: it is not duplicated here, and the gap is flagged rather than decided.
Not proven in production
No payment application produced by this module has been submitted to an owner, an architect or a filing portal, and no retainage rule is shipped. The printed statement is not an American Institute of Architects form: documents G702 and G703 are copyrighted, are available from the AIA and are not reproduced. Start with a test pay application.
Also searched as: AIA G702 Odoo, G703 schedule of values Odoo, progress billing Odoo, construction retainage by state, lien waiver tracking Odoo, application for payment Odoo, US construction progress billing.
Specifications
| Price | €149 excl. VAT |
|---|---|
| License | OPL-1 |
| Odoo series | 19.0: published on the Odoo Apps Store; 20.0: published on the Odoo Apps Store |
| Version | 1.0.0 |
| Edition | Odoo Community / on-premise |
| Technical name | dyo_situation_travaux_us |
| Domain | Construction and real estate |
| Free version (lite) | dyo_situation_travaux_us_lite |
Price excluding VAT as displayed on the Odoo Apps Store; purchase and installation are done on the Store or through your Omnifloo instance.