clearancewatch
A principal must hold valid workers'-comp coverage for every sub — for the whole job. clearancewatch audits subcontractor compliance documents against the job calendar and tells you what's expired, what expires mid-job, and what's coming up for renewal.
Rules modelled from official sources (verified October 2026):
- Ontario WSIB: clearance certificates are valid up to 90 days; WSIB states a principal must ensure a valid clearance is in place for the full length of a job. (wsib.ca clearances)
- Alberta WCB: a clearance letter is valid for work done up to the date of the letter — WCB advises requesting one at hire and before each installment. (wcb.ab.ca clearance letters)
This is not legal advice. It's a date-tracking assistant built on the rules above; confirm obligations with your broker, WSIB/WCB, or counsel.
Install
pip install clearancewatch
Jobs file
[
{
"name": "Kitchen reno",
"province": "ON",
"start": "2026-02-01",
"end": "2026-03-30",
"subs": [
{
"name": "Bob's Drywall",
"trade": "drywall",
"clearance": { "issuer": "WSIB", "number": "1234567", "issued": "2026-01-10", "expires": "2026-04-10" },
"insurance": { "provider": "Aviva", "policy": "GL-9", "coverage": "C$2M", "expires": "2026-12-31" },
"licences": [ { "name": "Fall protection", "expires": "2026-09-01" } ]
}
]
}
]
Usage
clearancewatch audit jobs.json --on 2026-02-15 --within 30
clearancewatch renewals jobs.json --within 30 # just what's coming due
clearancewatch audit jobs.json --json # machine-readable
ERROR clearance_expires_during_job Kitchen reno / Bob's Drywall: clearance expires 2026-03-15 before job end 2026-03-30...
WARN renewal_due Kitchen reno / Bob's Drywall: insurance expires 2026-03-05 (within 30 days)
1 error(s), 1 warning(s) — FAIL
Exit 1 when any error-severity finding exists (missing/expired clearance, lapsed coverage, expired insurance or licence) — CI- and cron-friendly.
What it catches
| Finding | Severity |
|---|---|
clearance_missing / clearance_expired / clearance_expires_during_job |
error |
clearance_cover_lapsed (Alberta letter predates ongoing work) |
warn |
issuer_mismatch (ON job, WCB-AB clearance — or vice versa) |
warn |
insurance_missing / insurance_expired |
error |
insurance_expires_during_job |
warn |
licence_expired |
error |
renewal_due / insurance_renewal_due / licence_renewal_due (within --within days) |
warn |
Python API
import datetime as dt
from clearancewatch import Job, audit
job = Job.from_dict({...})
for finding in audit(job, on=dt.date(2026, 2, 15), horizon=30):
print(finding.severity, finding.code, finding.detail)
clearancewatch renewals over a weekly cron gives you the "call these three subs" list before a gap becomes a deeming problem.
License
MIT-style: use it, ship it, no warranty.
Metadata
Release files for clearancewatch 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 | |
|---|---|---|---|---|
| clearancewatch-0.1.0.tar.gz | 10.7 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| clearancewatch-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 19.6 kB
Release files / clearancewatch-0.1.0.tar.gz
| Download URL | clearancewatch-0.1.0.tar.gz |
|---|---|
| Size | 10.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ca176566534a0b6a8c1c7fde578d0a45f16ed4f84ddc8d28e97e727500e25315
|
|
BLAKE2b-256 checksum How to use checksums |
e006f6fc52020bf11c45d8b5eecb479b63fa5fa580285239ca98003c1bf971c3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.15
|
Release files / clearancewatch-0.1.0-py3-none-any.whl
| Download URL | clearancewatch-0.1.0-py3-none-any.whl |
|---|---|
| Size | 9.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
34cbcb196e704f0c8a4818f3ea6ab6c590814448d32f44b20325dfa39739b094
|
|
BLAKE2b-256 checksum How to use checksums |
4a3d9b7df6e04bb3158eaaf08cf76f46ceae070f5702ad49ffffd4451173d76e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.15
|
Security for clearancewatch 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.