HPD lead-paint resolution rulebook
Every HPD lead order, every way it can be resolved (contest, cure, dismiss or postpone, overdue or not), the documents required, the professionals who sign them, and the combinations that occur when several orders are cited together. It is written for compliance staff and for engineers who need the legal truth the code encodes.
This page is the human-readable mirror of
domain/src/programs/nyc-lead-paint/orderRegistry.ts.
When the two disagree, the verbatim HPD forms win and both are corrected. The broader legal model
(families, services, exemptions, roles) is in system-model.md. How a project
moves through the app is in running a project.
The order matrix follows the HPD NOV CERT LEAD (621/622/623/625) and NOV/NOF CERT LEAD (616/617/624) certification forms with their instructions, and all six L-06 contestation forms.
0. Structural model — firms, deployments, professionals, documents
App mapping. "Firm" and "deployment" are the rulebook's legal and workflow vocabulary, not literal tables. A firm is a
tenantsrow (there is nofirmstable). A deployment is aninspectionsrow, distinguished byservice_type(xrf,paint_chip,dust_wipe,abatement) and carrying its owntenant_id; there is nodeploymentstable.
One project, many deployments, a firm per deployment
One project per unit-job. It holds multiple deployments (field work orders); the firm and the
EPA license attach to the deployment, and each generated document inherits its deployment's
firm. This is not a parent-and-linked-projects model and not a single requires_abatement flag.
One abatement supervisor affidavit lists multiple violation numbers (616s, 617s and 624s cured
by one abatement) and prints the abatement firm's EPA number.
Firms
| Code | Firm | Role |
|---|---|---|
| SEC | Secure Environmental Group | XRF, paint-chip and dust-wipe testing; also holds abatement capability |
| ABA | Abated NYC | abatement work |
| IND | Independent third party | clearance dust-wipe (optional; certificate of insurance on file), with its own EPA certification |
Deployments
| Code | Deployment | Firm | What it does | Produces |
|---|---|---|---|---|
| D-INSP | Inspection | SEC | one professional per visit: XRF, paint-chip and dust-wipe testing | inspection report, XRF and paint-chip affidavits, contestation testing documents |
| D-ABAT | Abatement | ABA | the abatement work | abatement supervisor affidavit (unions all cured violation numbers) |
| D-DWS | Clearance dust-wipe | SEC or IND (selectable) | post-abatement clearance wipes, independent of the abater | clearance chain of custody, sampler affidavit, lab analysis |
Professionals
| Code | Professional | Certification | Signs |
|---|---|---|---|
| INSP | EPA-certified Inspector / Risk Assessor | EPA L/Q (40 CFR 745) | inspection report, XRF affidavit, paint-chip affidavit |
| ABSUP | Lead Abatement Supervisor / Project Designer (plus workers) | EPA abatement | abatement supervisor affidavit |
| SAMP | Dust-wipe sampler | EPA clearance | sampler affidavit (date and dwelling) |
| LAB | NYS ELAP-certified laboratory | ELAP | dust and paint-chip lab analyses |
| NOT | Notary | — | notarizes affidavits, certification and contestation |
| OWN | Owner, managing agent or officer | on HPD Property Registration | the certification and the contestation (the filer) |
Document catalog
| Code | Document | By | Firm |
|---|---|---|---|
| CERT-H | Certification of Correction — hazard (616-617-624 cert) | OWN + NOT | filer |
| CERT-T | Certification of Correction — turnover (621-622-623-625 cert) | OWN + NOT | filer |
| CONTEST | Contestation form (per-order L-06) | OWN + NOT | filer |
| AF5 | Affidavit of Compliance AF-5 (overdue hazard) | OWN + NOT | filer |
| DR | Dismissal Request inspection and fee (overdue hazard) | OWN | filer |
| DISM-T | Dismissal request to the Audit Unit (overdue turnover, no fee) | OWN | filer |
| POST1 / POST2 | First / second postponement request | OWN | filer |
| INSP-RPT | Inspection report (EPA Inspector/RA) | INSP | SEC |
| XRF-AFF | Notarized XRF affidavit | INSP + NOT | SEC |
| PC-RPT | Paint-chip sampling report | INSP | SEC |
| PC-AFF | Notarized XRF and paint-chip affidavit | INSP + NOT | SEC |
| PC-LAB | State-lab analysis of a paint-chip sample | LAB | vendor |
| ABAT-AFF | Abatement supervisor affidavit (§27-2056.11; start and end dates; firm contact; lists all cured violation numbers) | ABSUP + NOT | ABA |
| ABAT-EPA | EPA certification of the abatement firm, workers and supervisors | ABA | ABA |
| WORK-DESC | Per-room work location and description or invoices | ABA | ABA |
| DUST-LAB | State-lab analysis of all clearance dust samples | LAB | vendor |
| SAMP-AFF | Dust-wipe sampler affidavit (date and dwelling) | SAMP + NOT | SEC / IND |
| SAMP-EPA | EPA certification of the dust-wipe sampler (valid on the sample date) | SAMP | SEC / IND |
| INSP-EPA | EPA certification of the Inspector/RA (valid on the inspection date) | INSP | SEC |
| COFO | Certificate of Occupancy (building age 1960 or later) | owner records | — |
| LEASE | Lease or tenancy documentation (initial lease date) | owner records | — |
| NOV | Copy of the Notice of Violation | owner records | — |
The abatement proof-set is ABAT-AFF, ABAT-EPA, WORK-DESC, DUST-LAB, SAMP-AFF and SAMP-EPA. It is identical whether filed under a CERT (on time) or an AF-5 or DISM (overdue); only the cover form changes.
1. Per-order resolution chart
"≥Nd" means the filing must be made at least N days before the correct-by date (the registry's
contestLeadDays). Penalties are from the forms.
HAZARD family (occupied unit) — overdue route is AF-5, a Dismissal Request and a fee
Key asymmetry. The hazard Certification of Correction has only the abatement / "work completed" section. There is no Option 4 XRF dismissal and no Option 5 paint-chip section on the hazard certification. A hazard's no-work, prove-no-LBP route therefore runs through the contestation form (≥6d before the correct-by date), never the certification. The hazard certification also embeds the abatement supervisor affidavit, with a "Violation Number(s)" union field.
616 — Presumed lead-based paint hazard
| State | Path | Documents | Signers / firm | Deployments |
|---|---|---|---|---|
| not overdue | Contest (≥6d) — building age, exemption, 3a XRF-no-LBP, or 3b XRF-inconclusive plus paint-chip | CONTEST + NOV + (COFO, or nothing for exemption, or INSP-RPT + INSP-EPA + XRF-AFF, or additionally PC-RPT + PC-AFF + PC-LAB) | OWN, NOT, (INSP for a content ground) | D-INSP (only for a content ground) |
| not overdue | Cure = abate → CERT-H | CERT-H + abatement proof-set | OWN, NOT, ABSUP, SAMP, LAB | D-ABAT → D-DWS |
| not overdue | Postpone (≥6d) | POST1 / POST2 | OWN | — |
| overdue | AF-5 (abate, then file) | AF5 + DR (fee) + abatement proof-set | OWN, NOT, ABSUP, SAMP, LAB | D-ABAT → D-DWS |
An XRF-negative result resolves a 616 only through the contest channel, never the certification.
617 — HPD-confirmed positive hazard (no content dismissal; it must be abated)
| State | Path | Documents | Signers / firm | Deployments |
|---|---|---|---|---|
| not overdue | Contest (≥6d) — issuance grounds only: building age, exemption | CONTEST + NOV + (COFO) | OWN, NOT | — |
| not overdue | Cure = abate → CERT-H | CERT-H + abatement proof-set | OWN, NOT, ABSUP, SAMP, LAB | D-ABAT → D-DWS |
| not overdue | Postpone | POST1 / POST2 | OWN | — |
| overdue | AF-5 | AF5 + DR (fee) + abatement proof-set | OWN, NOT, ABSUP, SAMP, LAB | D-ABAT → D-DWS |
The work is the same overdue or not; only the cover document changes (certification or AF-5).
624 — Inconclusive XRF, or positive on a ceramic or metal substrate (XRF cannot resolve it; paint-chip or abate)
| State | Path | Documents | Signers / firm | Deployments |
|---|---|---|---|---|
| not overdue | Contest (≥6d) — paint-chip-no-LBP only (the L-06 624 form, rev 11/2025, also covers positive-on-ceramic/metal) | CONTEST + NOV + PC-RPT + INSP-EPA + PC-AFF + PC-LAB | OWN, NOT, INSP, LAB | D-INSP |
| not overdue | Cure = abate → CERT-H | CERT-H + abatement proof-set | OWN, NOT, ABSUP, SAMP, LAB | D-ABAT → D-DWS |
| not overdue | Postpone | POST1 / POST2 | OWN | — |
| overdue | AF-5 | AF5 + DR (fee) + abatement proof-set | OWN, NOT, ABSUP, SAMP, LAB | D-ABAT → D-DWS |
616 / 624 four-state shape. (a) Not overdue and contestable: contest. (b) Not overdue but known positive from a prior standard test: skip the contest, abate, file the certification. (c) Contested and it came back positive: abate, file the certification. (d) Overdue: abate, file the AF-5. States (b) and (c) depend on facts about the violation instance (a prior test result, a contest outcome).
TURNOVER family (vacant-unit turnover) — overdue route is Audit Unit dismissal, no fee
The turnover certification (
621/622/623/625) contains the dismissal options itself: Option 3 = abate, Option 4 = XRF dismissal, Option 5 = paint-chip dismissal. Hard rule on the form: Options 4 and 5 cannot be submitted for a friction surface that HPD tested positive and for which an Order 617 was issued.
621 — Turnover, presumed
| State | Path | Documents | Signers / firm | Deployments |
|---|---|---|---|---|
| not overdue | Contest (≥5d) — tenancy, building age, exemption, 4a/4b XRF, or 4c paint-chip | CONTEST + NOV + (LEASE, COFO, nothing, INSP-RPT + INSP-EPA + XRF-AFF, or additionally PC-RPT + PC-AFF + PC-LAB) | OWN, NOT, (INSP for a content ground) | D-INSP (content ground) |
| not overdue | Cure → CERT-T Option 4 (XRF-no-LBP, no work) | CERT-T + INSP-RPT + INSP-EPA + XRF-AFF | OWN, NOT, INSP | D-INSP |
| not overdue | Cure → CERT-T Option 5 (paint-chip) | CERT-T + INSP-RPT + PC-RPT + INSP-EPA + PC-AFF + PC-LAB | OWN, NOT, INSP, LAB | D-INSP |
| not overdue | Cure → CERT-T Option 3 (abate) | CERT-T + abatement proof-set | OWN, NOT, ABSUP, SAMP, LAB | D-ABAT → D-DWS |
| not overdue | Postpone | POST1 / POST2 | OWN | — |
| overdue | Dismissal (the same Option 3/4/5 documents, to the Audit Unit) | DISM-T + the chosen option's document set | per option | per option |
622 — Turnover, "positive" but XRF-dismissable (Option 4), unless an Order 617 is open
| State | Path | Documents | Signers / firm | Deployments |
|---|---|---|---|---|
| not overdue, no open 617 | Cure → CERT-T Option 4 (XRF-no-LBP) | CERT-T + INSP-RPT + INSP-EPA + XRF-AFF | OWN, NOT, INSP | D-INSP |
| not overdue, no open 617 | Cure → CERT-T Option 3 (abate) | CERT-T + abatement proof-set | OWN, NOT, ABSUP, SAMP, LAB | D-ABAT → D-DWS |
| not overdue | Contest (≥5d) — tenancy, building age, exemption (no content ground) | CONTEST + NOV + (LEASE, COFO, or nothing) | OWN, NOT | — |
| open 617 present | Options 4 and 5 are barred; abate → CERT-T Option 3 | CERT-T + abatement proof-set | OWN, NOT, ABSUP, SAMP, LAB | D-ABAT → D-DWS |
| not overdue | Postpone | POST1 / POST2 | OWN | — |
| overdue | Dismissal (Option 3 or 4 documents, to the Audit Unit) | DISM-T + the chosen option's document set | per option | per option |
623 — Turnover, general and audit-tied (extra ground: surface condition)
The 623 polices turnover compliance with the audit, where 621, 622 and 625 police it with the hazards. HPD issues it when the occupant moved in within 10 years and the owner failed to produce turnover documents under a Record Production Order. It resolves either way: produce the 10-year turnover records, or cure it like any turnover (certification Options 3/4/5, or the contest grounds below).
| State | Path | Documents | Signers / firm | Deployments |
|---|---|---|---|---|
| not overdue | Contest (≥5d) — tenancy (<10 years of the RPO date), building age, exemption, XRF, paint-chip, or surface condition | CONTEST + NOV + ground documents (surface condition is an attestation; HPD may inspect) | OWN, NOT, (INSP for a content ground) | D-INSP (content ground) |
| not overdue | Cure → CERT-T Option 3/4/5 | as 621 | per option | per option |
| not overdue | Postpone | POST1 / POST2 | OWN | — |
| overdue | Dismissal | DISM-T + the chosen option's document set | per option | per option |
625 — Turnover, inconclusive
The contest route accepts paint-chip only on the violation surface. The certification route allows Option 4 (negative friction XRF) when no 624 or 617 is open, because the firm's XRF reads a definitive negative where HPD's instrument was inconclusive. A 625 cannot be dismissed while its paired 624 is open.
| State | Path | Documents | Signers / firm | Deployments |
|---|---|---|---|---|
| not overdue, no open 624 | Contest (≥5d) — content is (a) paint-chip on the violation surface and (b) XRF or XRF plus paint-chip on all other friction surfaces | CONTEST + NOV + PC-RPT + PC-LAB + INSP-RPT + INSP-EPA + PC-AFF / XRF-AFF | OWN, NOT, INSP, LAB | D-INSP |
| not overdue, no open 624 or 617 | Cure → CERT-T Option 4 (negative friction XRF, no work) | CERT-T + INSP-RPT + INSP-EPA + XRF-AFF | OWN, NOT, INSP | D-INSP |
| not overdue | Cure → CERT-T Option 5 (paint-chip) or Option 3 (abate) | CERT-T + (paint-chip set or abatement proof-set) | per option | D-INSP, or D-ABAT → D-DWS |
| open 624 present | dismissal blocked — resolve the 624 first | — | — | — |
| not overdue | Postpone | POST1 / POST2 | OWN | — |
| overdue | Dismissal | DISM-T + the chosen option's document set | per option | per option |
Penalties (per the forms): 621 $250/day up to $10,000 · 622 $250/day up to $10,000 · 623 $1,500 per violation · 625 $250/day up to $10,000.
RECORDS, LL31 and LEGACY — no field testing or abatement
618 / 619 / 620 — RPO records audit (overdue goes to the Audit Unit, no fee)
| State | Path | Documents | Signers / firm | Deployments |
|---|---|---|---|---|
| any | Records production → certification (618-619-620 cert) | RPO record set: turnover-vacancy, annual-notice, visual-investigation and safe-work-practices sample forms | OWN (records) | none |
626 — Local Law 31 (five-year XRF testing violation)
| State | Path | Documents | Signers / firm | Deployments |
|---|---|---|---|---|
| any | Submit the XRF inspection report to the Audit Unit (626 cert) | INSP-RPT (positive and negative surfaces) + INSP-EPA + (XRF-AFF if tested after Aug 9, 2020) | OWN, INSP | D-INSP |
555 (AF-3) and 614 — legacy
| State | Path | Documents | Signers / firm | Deployments |
|---|---|---|---|---|
| 555 | AF-3 (work before Aug 1, 2004) | AF-3 affidavit + dust-wipe | OWN, SAMP, LAB | D-DWS |
| 614 | Abate | abatement proof-set | OWN, ABSUP, SAMP, LAB | D-ABAT → D-DWS |
2. The five resolution shapes
Every path collapses into one of five shapes, which drive deployments and workflow:
| Shape | Deployments | Field professionals | Document output | Typical workspace |
|---|---|---|---|---|
| S1 — Contest (non-content): building age, exemption, tenancy, surface condition | none | none (owner records) | CONTEST + NOV + COFO / LEASE | Decide, File, Money |
| S2 — Contest or dismiss by XRF: presumed surfaces, turnover Option 4 | D-INSP | INSP | CONTEST or CERT-T + INSP-RPT + INSP-EPA + XRF-AFF | Decide, Work, File, Money |
| S3 — Contest or dismiss by paint-chip: inconclusive surfaces, Option 5 | D-INSP | INSP, LAB | plus PC-RPT + PC-AFF + PC-LAB | Decide, Work, File, Money |
| S4 — Abate: positive, overdue hazard, blocked turnover | D-ABAT → D-DWS | ABSUP, SAMP, LAB | CERT / AF-5 / DISM + abatement proof-set | all four |
| S5 — Records only: RPO, LL31 | none (D-INSP for 626) | (INSP for 626) | record set or XRF report | Decide, File, Money |
Overdue shifts the shape. An overdue hazard (616, 617, 624) can no longer contest, so it is forced to S4 (abate) plus AF-5 and the fee. An overdue turnover keeps its cheapest shape (S2, S3 or S4) but files a dismissal to the Audit Unit (no fee) instead of a certification.
3. Reusing existing XRF data
When Secure has already run a full XRF inspection (Local Law 31, a prior turnover, an initial inspection), the component-level readings persist. A later violation on specific components does not require a new field visit: a violation-scoped subset of the stored XRF report — a "limited contest XRF report" — is regenerated, covering strictly the HPD-cited components. So XRF (S2) can resolve with zero deployments when prior data covers the cited components. Paint-chip (S3) is never reused: lab data is immutable (chain of custody), so paint-chips are always fresh, with violation-specific room and component descriptions.
Action-level check for uploaded third-party reports. All of the firm's own reports were taken at the 0.5 standard, so no check is needed on its own data. When a client uploads an XRF report from another company, the report's action level must be validated at upload: a report tested at 1.0 (before Dec 2021) cannot support an exemption, because a retest at 0.5 is required, and its "negatives" between 0.5 and 0.9 are positives today. Old 1.0-level reports still satisfy the Local Law 31 testing requirement itself.
Per-reading routing:
- negative (reusable) → regenerate the limited XRF report, no visit.
- inconclusive → fresh paint-chip (S3); XRF cannot resolve it.
- positive on a metal or ceramic substrate → fresh paint-chip (S3); XRF can read the metal and report a false positive, which the 624 form (rev 11/2025) now covers explicitly.
- positive on any other substrate (wood, plaster and so on) → a genuine positive → abate (S4).
- partially covered (a cited component was never XRF-tested) → go back with a supplemental D-INSP and a manual override to add the reading to the CSV; merge into the one limited report.
Dates and signatures (HPD needs wet-signed originals):
- the limited contest report carries the original inspection date (when the readings were taken);
- the XRF affidavit gets the current date and a fresh wet signature on every filing and is never reprinted;
- the Inspector's EPA certification must have been valid on the original test date.
HPD location grammar and human reconciliation
HPD hazard descriptions are a nested positional address that parses into structured fields:
"1st WINDOW FRAME FROM WEST AT NORTH WALL IN THE 2nd BATHROOM FROM EAST LOCATED AT APT 6C, 6th STORY, 1st APARTMENT FROM NORTH AT EAST"
| Field | Value | |
|---|---|---|
| component_type | WINDOW FRAME | feeds friction-surface classification |
| component_ordinal / from_dir | 1st / WEST | |
| wall | NORTH | |
| room_type / room_ordinal / from_dir | BATHROOM / 2nd / EAST | |
| apartment / story | 6C / 6 | |
| apartment_ordinal / from_dir / at_dir | 1st / NORTH / EAST |
Grammar: building → apartment position (ordinal-from-direction plus at-side) → story → room (ordinal-from-direction) → wall → component (ordinal-from-direction), with a compass orientation to render.
Reconciliation is a human step, assisted by structure. Secure's report uses colloquial labels ("living room – door to switch"); HPD uses the positional address. The derived fields and compass make the match fast; the reused reading is then re-labeled to the violation's description in the limited contest report. Matching the original reading to the violation's reading stays human-in-the-loop.
4. Contest grounds
Every L-06 contestation form's numbered grounds, and the registry's contestGrounds:
| Order | Form (rev) | Numbered grounds on the form | Registry contestGrounds |
|---|---|---|---|
| 616 | L-06 (616) 7/2021 | 1 building age (1960 or later, plus CofO) · 2 HPD exemption · 3a XRF-no-LBP · 3b XRF-inconclusive plus paint-chip | building_age, exemption, content_xrf, content_paintchip |
| 621 | L-06 (621) 6/2024 | 1 tenancy (moved in before 8/2/2004) · 2 building age · 3 exemption · 4a XRF unit · 4b XRF friction negative and others not peeling/smooth · 4c XRF-inconclusive plus paint-chip | tenancy, building_age, exemption, content_xrf, content_paintchip |
| 622 | L-06 (622) 6/2024 | 1 tenancy · 2 building age · 3 exemption — no content ground | tenancy, building_age, exemption (the 622 XRF route is certification Option 4, not a contest) |
| 623 | L-06 (623) | 1 tenancy (<10 years of the RPO date) · 2 building age · 3 exemption · 4a/4b XRF · 4c paint-chip · 5 surface condition | tenancy, building_age, exemption, content_xrf, content_paintchip, surface_condition |
| 624 | L-06 (624) 11/2025 | paint-chip-no-LBP only (also covers positive-on-ceramic/metal substrates) | content_paintchip |
| 625 | L-06 (625) 6/2024 | 1 tenancy · 2 building age · 3 exemption · 4 content = (a) paint-chip on the violation surface (XRF not acceptable there) and (b) XRF or XRF plus paint-chip on all other friction surfaces | tenancy, building_age, exemption, content_paintchip |
617: issuance-grounds-only contest (building age, exemption; no content ground).
5. Combination scenarios
One project per unit-job. Multiple orders cited together split into bundles by their cheapest cure. The rule is to contest or test before abating, because abatement is the expensive last resort. Blocker rules re-route the cheap path to abatement when a paired positive or inconclusive hazard is open.
| # | Cited orders (same unit) | Bundles → shape | Deployments | Notes |
|---|---|---|---|---|
| C1 | 616 alone | S2 (XRF), S1 (age/exemption) or S4 (abate) | D-INSP, or D-ABAT → D-DWS | the owner picks the cheapest viable path |
| C2 | 617 alone | S4 | D-ABAT → D-DWS | no dismissal possible |
| C3 | 624 alone | S3 (paint-chip) or S4 | D-INSP, or D-ABAT → D-DWS | XRF cannot resolve it |
| C4 | 621 alone | S2, S3 or S4 | per option | turnover, no fee if overdue |
| C5 | 622 alone (no 617) | S2 (XRF Option 4) or S4 | D-INSP | XRF-dismissable |
| C6 | 622 + 617 | 622 → S4 (blocked), 617 → S4 | D-ABAT → D-DWS | one ABAT-AFF unions both numbers |
| C7 | 616 + 617 (classic co-issue) | 616 → S2 (XRF), 617 → S4 | D-INSP and D-ABAT → D-DWS | split: contest or XRF the 616, abate the 617 |
| C8 | 625 + 624 | 625 dismissal blocked, 624 → S3 or S4 | D-INSP, or D-ABAT → D-DWS | resolve the 624 first |
| C9 | 616 + 621 (hazard plus turnover, presumed) | both S2 | D-INSP (one visit) | one inspection clears both |
| C10 | multi-unit or multi-order abatement | all S4 → one D-ABAT | D-ABAT → D-DWS | one ABAT-AFF lists every cured violation number (the union) |
| C11 | RPO (618–620) + a hazard | S5 + (S2 or S4) | none + per option | the records bundle is independent |
| C12 | all overdue hazards | all S4 + AF-5 + fee | D-ABAT → D-DWS | dismissal-request inspection |
Clearance firm selection (D-DWS). Whenever a project has a D-ABAT it needs a D-DWS, and the D-DWS firm is selectable (SEC or IND). It must be independent of whichever firm performed the abatement for the clearance to be valid (28 RCNY: "third-party, independent of the owner and any individual or firm that performs the work"). The default is SEC unless the owner picks IND; because SEC also holds abatement capability, if SEC performed the abatement then SEC cannot wipe that job and IND is used. Local Law 31 practice rule: contract the LL31 XRF test as a standalone engagement, and contract any abatement separately, only after results exist. The §27-2056.4(a-1) / 28 RCNY §11-04(b) tester bar is "not the owner, agent, or any contractor hired to perform remediation," judged at test time, so a bundled test-and-fix engagement is the one edge to avoid.
6. HPD Open Data field contract
Source: the HPD Violations dataset wvxf-dwi5 (filtered by bin, synced daily by the
hpd-violations feed into public_events). Everything in the rulebook keys on these fields.
| HPD field | public_events column | Logic use |
|---|---|---|
ordernumber | citation_code | the rulebook (616–626) → shape, firm, documents |
newcorrectbydate / originalcorrectbydate | due_date = new, else original | the deadline engine reads the effective date |
certifieddate | closed_date (when not open) | certification versus AF-5 timing |
currentstatusid (with status and date) | status_norm, status_detail | open, closed or dismissed; postponement is status id 6 (granted) or 7 (denied), or new ≠ original |
novdescription | description | parsed into location and component fields (§3 grammar) |
apartment | unit link (unit_id) | unit linkage |
class, story, the certify-by dates | raw_data | severity and display |
Not an HPD field: substrate (ours, from the XRF CSV) and the parsed location fields (derived).
7. Clearance independence
28 RCNY requires the post-abatement clearance dust-wipe sampler to be independent of the abater. The rule is about firms, not about any two tenants; a single tenant may legitimately hold both an abatement and an inspection license and subcontract one side to a firm with no Complied login, so the app cannot know the subcontracting facts of every job. The app surfaces the conflict and the person adjudicates it. It never blocks on this rule.
Three checks fire at three moments, each at the earliest point its own evidence exists:
| When | Check | Where | Severity |
|---|---|---|---|
| Collaborator invited | Would this tenant hold both the abatement and the clearance role on this project? | collaboratorRoleIndependenceWarning in collaboratorRoles.ts | warning; the invite is still allowed |
| Visit scheduled | Does the track's clearance visit share a tenant_id with one of its abatement visits? | clearanceIndependenceWarning in serviceRequirements.ts, shown on the visit drawer | warning; scheduling is still allowed |
| Field job completed | This is a clearance visit — confirm the firm split | fieldJobReadiness.ts, shown in the field job's readiness panel | warning; completion is still allowed |
The collaborator role catalog (COLLABORATOR_ROLES) makes the invite-time check possible:
each role declares what it performs (abatement, clearance, inspection or none), so a
rule about who abates versus who samples is evaluated against data rather than free text.
Nothing prevents scheduling an abatement visit and a clearance visit under the same tenant_id;
a visit can only be created by the tenant that will own it, so a single-tenant project's
abatement track will nearly always show the warning. Nothing prevents completing either visit,
and a person who reads the warning and proceeds leaves no record of the decision.
Financials are separate. Collaboration grants never expose a project's invoices, rate cards
or vendor payments, by absence of any code path: no financial table's RLS references
has_active_collaboration_grant(), and COLLABORATOR_ROLES_GRANTING_FINANCIALS is an empty
constant with a test asserting it stays empty.