holdbackcalc
Prompt-payment and holdback deadlines for Alberta and Ontario construction work — verified rules only. Give it an anchor date (invoice received, payment received, lien trigger event, contract anniversary); it gives back a dated schedule you can drop into a calendar or CI reminder.
Not legal advice. An administrative date calculator. Every constant was verified against official sources in October 2026 — and everything we could not verify is deliberately not encoded: run
holdbackcalc what-we-dont-encodeto see the holes.
Install
pip install holdbackcalc
Alberta
holdbackcalc ab-invoice 2026-01-01 # proper invoice received
holdbackcalc ab-sub-payment 2026-03-02 # owner's payment received by the contractor
| Deadline | Rule |
|---|---|
| dispute notice by: received + 14 days | owner must give notice of dispute within 14 calendar days |
| payment due (owner → contractor): received + 28 days | proper invoice payable within 28 calendar days |
| payment due (contractor → sub): owner payment + 7 days | pay the sub within 7 days of receiving the owner's payment |
Deliberately blank: holdback release — Alberta's statutory holdback percentage and release clock could not be verified from official text, so no date is invented.
Ontario
holdbackcalc on-lien 2026-01-01 # from the trigger event (e.g. publication of substantial performance)
holdbackcalc on-holdback 2026-01-01 # 10% holdback schedule from the same event
holdbackcalc on-invoice 2026-06-01 # proper-invoice deficiency window (2026 rules)
holdbackcalc on-annual 2026-01-01 # annual holdback release, contracts ≥ Jan 1 2026
| Deadline | Rule |
|---|---|
| preserve lien by: event + 60 days | 60-day lien preservation period |
| perfect lien by: preserve deadline + 90 days | 90 days to commence the action |
| owner must pay holdback: event + 74 days | lien period (60) + owner's 14 days to pay after expiry |
| pass downstream: payment + 14 days | contractor/sub has 14 days after receipt |
| deficiency notice: invoice + 7 days (2026) | otherwise the invoice is deemed proper |
| annual notice: anniversary + 14 days (2026) | payment window opens at notice +60, closes at notice +74 |
--json gives a machine-readable schedule for automation.
What it does NOT encode
$ holdbackcalc what-we-dont-encode
- AB: statutory holdback percentage and the post-substantial-performance release clock
- AB: substantial-performance payment deadline and base-building/partial-performance treatment
- AB: detailed adjudication filing deadlines
- ON: any 'first 90 days of contract' short lien period (not found in the current Act)
- ON: a general 45-day pleadings deadline (not found in the current Act)
These were checked against official text in October 2026 and could not be confirmed. A calculator that guesses a legal deadline is worse than no calculator.
Sources
- Alberta prompt payment overview: https://www.alberta.ca/prompt-payment-rules-for-construction-industry
- Prompt Payment and Adjudication Regulation, Alta Reg 23/2022: https://open.alberta.ca/publications/2022_023
- Ontario Construction Act (consolidated to Jan 1, 2026): https://www.ontario.ca/laws/statute/90c30
- 2026 amendments summary: https://cassels.com/insights/the-construction-act-whats-new-in-the-new-year/
Notes
- All offsets are calendar days from the anchor date you pass in.
- Deadlines that depend on a later event (e.g. pass-down timing) print as reminders with no date unless you supply the trigger.
- Pair with
clearancewatchfor the coverage side of job compliance.
License
MIT-style: use it, ship it, no warranty.
Metadata
Release files for holdbackcalc 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| holdbackcalc-0.1.0.tar.gz | 9.7 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| holdbackcalc-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 19.1 kB
Release files / holdbackcalc-0.1.0.tar.gz
| Download URL | holdbackcalc-0.1.0.tar.gz |
|---|---|
| Size | 9.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
143cbae6f8d7cc0d651fff4101932952e139a469fdf025cd8f26e0bf2f9208fb
|
|
BLAKE2b-256 checksum How to use checksums |
7871e15fbb377b7dfe4b9415373d37422801206d42e682a0058b7c8634de6f38
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.15
|
Release files / holdbackcalc-0.1.0-py3-none-any.whl
| Download URL | holdbackcalc-0.1.0-py3-none-any.whl |
|---|---|
| Size | 9.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
89c3132f0d02616752b59f49e53dc22bfa62c5aa64b4353d143b4abc4026fa86
|
|
BLAKE2b-256 checksum How to use checksums |
fdba226b08f51bd960895ed7d9fe0f2b5a6efa759ec6a1c359a645e1812a5524
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.15
|
Security for holdbackcalc 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.