HPD Lead-Paint Resolution RULEBOOK — every violation × every option
What this is. The single authoritative operational chart: every HPD lead order, every way it can be resolved (contest / cure / dismiss / postpone × overdue / not-overdue), the documents required, the professionals, the firm + deployment that produces each, the workflow phase it lives in, and the combination scenarios grouped by initial service request.
The code twin. This doc is the human-readable mirror of
domain/src/programs/nyc-lead-paint/orderRegistry.ts(ported from the pre-rebuild app underarchive/src/lib/hpd/orderRegistry.ts). When they disagree, the verbatim HPD forms win and BOTH get corrected. Do not add a third rulebook. The broader domain spec isdocs/HPD_SYSTEM_MODEL.md. For how projects move through the rebuilt app (Decide / Work / File / Money, who does what), seedocs/PROJECT_LIFECYCLE_GUIDE.mdanddocs/domain/OVERVIEW.md. Phase is a label, not a gate (docs/domain/GATING.md). Honest walk-through status:docs/LIFECYCLE_ASSESSMENT.md.Provenance (verbatim). Grounded in the HPD
NOV CERT LEAD (621/622/623/625)+NOV/NOF CERT LEAD (616/617/624)cert+instructions and all six L-06 contestation forms — all read verbatim viapdftotextfrom…/HPD LEAD BASED PAINT Documentation/— plusorderRegistry.ts. Last full verification pass: 2026-06-26 (every option/ground confirmed against the forms). OnlyAfffidavits/DOH DWS AFFIDAVIT.pdfremains unreadable (scanned — owner to re-upload/OCR).Consolidated 2026-06-29 from
HPD-MASTER-RESOLUTION-CHART.md+HPD-RESOLUTION-OPTION-MATRIX.md(those files lived under.planning/archive/, which is gone from this repo; this RULEBOOK is the surviving copy).
0. Structural model — firms, deployments, professionals, documents
App mapping (not a literal schema). "Firm" and "deployment" below are this rulebook's legal/workflow vocabulary, verified against the HPD forms — they are not literal app tables. In the rebuilt app: a firm (SEC/ABA/IND) is a
tenantsrow (tenant_id, nofirmstable); a deployment (D-INSP/D-ABAT/D-DWS) is aninspectionsrow distinguished byservice_type(xrf/paint_chip/dust_wipe/abatement), carryingtenant_iddirectly — there is no separatedeploymentstable. Seedocs/PROJECT_LIFECYCLE_GUIDE.mdand §7 item 2 below.
One project → many deployments → firm per deployment
One PROJECT per unit-job → multiple DEPLOYMENTS (field work-orders) → firm + EPA license attach to
the DEPLOYMENT; each generated document inherits its deployment's firm. (NOT parent+linked projects,
NOT a single requires_abatement flag.) One abatement supervisor affidavit lists multiple Violation
Number(s) (616s + 617s + 624s cured by one abatement) and prints the abatement firm's EPA #.
Firms (one owner, two LLCs + a selectable third party)
| Code | Firm | Role | EPA license |
|---|---|---|---|
| SEC | Secure (inspections) | XRF / paint-chip / dust-wipe testing | inspection EPA LBP-F251759-2 (renewed; iss 2026-05-21, exp 2029-07-25 — entered into ykeo 2026-06-29) |
| ABA | Abated NYC | abatement work | abatement EPA (LBP-F269301-1) |
| IND | Independent third party | clearance dust-wipe (optional, COI) | their own EPA |
Deployments (firm + EPA attach here)
| Code | Deployment | Firm | What it does | Produces |
|---|---|---|---|---|
| D-INSP | Inspection | SEC | one pro/visit: XRF + paint-chip + dust-wipe testing | inspection report, XRF/paint-chip affidavits, contestation testing docs |
| D-ABAT | Abatement | ABA | the abatement work | abatement supervisor affidavit (unions all cured violation #s) |
| D-DWS | Clearance dust-wipe | SEC or IND (selectable) | post-abatement clearance wipes — must be independent of the abater (COI) | clearance CoC + sampler affidavit + lab |
Professionals
| Code | Professional | Cert | 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 (+ workers) | EPA abatement | abatement supervisor affidavit |
| SAMP | Dust-wipe sampler | EPA clearance | sampler affidavit (date + dwelling) |
| LAB | NYS ELAP-certified laboratory | ELAP | dust + paint-chip lab analyses |
| NOT | Notary | — | notarizes affidavits / cert / contestation |
| OWN | Owner / managing agent / officer | on HPD Property Registration | the cert / contestation (the filer) |
Document catalog (codes used below)
| Code | Document | By | Firm |
|---|---|---|---|
| CERT-H | Cert of Correction — hazard (616-617-624 cert) | OWN + NOT | filer |
| CERT-T | Cert 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 + fee (overdue hazard) | OWN | filer |
| DISM-T | Dismissal request to Audit Unit (overdue turnover, no fee) | OWN | filer |
| POST1/POST2 | 1st / 2nd 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 + paint-chip affidavit | INSP + NOT | SEC |
| PC-LAB | State-lab analysis of paint-chip sample | LAB | (vendor) |
| ABAT-AFF | Abatement supervisor affidavit (§27-2056.11; start/end dates; firm contact; lists all cured violation #s) | ABSUP + NOT | ABA |
| ABAT-EPA | EPA cert of abatement firm + workers + supervisors | ABA | ABA |
| WORK-DESC | Per-room work location/description OR invoices | ABA | ABA |
| DUST-LAB | State-lab analysis of all clearance dust samples | LAB | (vendor) |
| SAMP-AFF | Dust-wipe sampler affidavit (date + dwelling) | SAMP + NOT | SEC/IND |
| SAMP-EPA | EPA cert of the dust-wipe sampler (valid for sample date) | SAMP | SEC/IND |
| INSP-EPA | EPA cert of the Inspector/RA (valid for inspection date) | INSP | SEC |
| COFO | Certificate of Occupancy (building age ≥1960) | (owner records) | — |
| LEASE | Lease/tenancy documentation (initial lease date) | (owner records) | — |
| NOV | Copy of the Notice of Violation | (owner records) | — |
The abatement proof-set = ABAT-AFF + ABAT-EPA + WORK-DESC + DUST-LAB + SAMP-AFF + SAMP-EPA. It is identical whether filed as CERT (on time) or AF-5/DISM (overdue) — only the cover form changes.
1. Per-order resolution chart
"≥Nd" = must be filed N days before correct-by (registry contestLeadDays). Penalties from the forms.
HAZARD family (occupied unit) — overdue route = AF-5 + Dismissal Request + fee
KEY ASYMMETRY (verbatim). The hazard Certification of Correction has ONLY the abatement / "work completed" section — there is no Option-4 XRF-dismissal or Option-5 paint-chip section on the hazard cert. So a hazard's no-work, prove-no-LBP route runs through the CONTESTATION form (≥6d before correct-by), never the cert. The hazard cert also embeds the abatement supervisor affidavit with a "Violation Number(s) ___" union field.
616 — Presumed lead-based paint hazard
| State | Path | Documents | Pros / firm | Deployments |
|---|---|---|---|---|
| not overdue | Contest (≥6d) — building age / exemption / 3a XRF-no-LBP / 3b XRF-inconc+paint-chip | CONTEST + NOV + (COFO | nothing-for-exemption | INSP-RPT+INSP-EPA+XRF-AFF | +PC-RPT+PC-AFF+PC-LAB) | OWN, NOT, (INSP for content) | D-INSP (only if 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 |
XRF-negative resolves a 616 only via the CONTEST channel, never the cert.
617 — HPD-confirmed positive hazard (no content dismissal — must abate)
| State | Path | Documents | Pros / 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 |
Same work overdue-or-not; only the cover doc changes (Cert ↔ AF-5).
624 — Inconclusive (XRF) / positive-on-ceramic-metal substrate (XRF cannot resolve — paint-chip or abate)
| State | Path | Documents | Pros / firm | Deployments |
|---|---|---|---|---|
| not overdue | Contest (≥6d) — paint-chip-no-LBP only (L-06 624 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 (owner): (a) not-overdue contestable → contest; (b) not-overdue but known positive (prior standard test) → skip contest, abate → Cert; (c) contested → came back positive → abate → Cert; (d) overdue → abate → AF-5. States (b)/(c) are INSTANCE facts (prior-test result, contest outcome) with no backing data field yet — deferred to the per-option walkthrough (see §9).
TURNOVER family (vacant-unit turnover) — overdue route = Audit Unit dismissal, no fee
The turnover cert (
621/622/623/625) bakes the dismissal options INTO the certification: Opt 3 = abate · Opt 4 = XRF-dismissal · Opt 5 = paint-chip-dismissal. 🔒 HARD RULE (on the form): Options #4 and #5 CANNOT be submitted for a friction surface tested positive by HPD for which an Order #617 was issued.
621 — Turnover, presumed
| State | Path | Documents | Pros / firm | Deployments |
|---|---|---|---|---|
| not overdue | Contest (≥5d) — tenancy / building age / exemption / 4a-4b XRF / 4c paint-chip | CONTEST + NOV + (LEASE | COFO | — | INSP-RPT+INSP-EPA+XRF-AFF | +PC-RPT+PC-AFF+PC-LAB) | OWN, NOT, (INSP for content) | D-INSP (if content) |
| not overdue | Cure → CERT-T Opt 4 (XRF-no-LBP, no work) | CERT-T + INSP-RPT + INSP-EPA + XRF-AFF | OWN, NOT, INSP | D-INSP |
| not overdue | Cure → CERT-T Opt 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 Opt 3 (abate) | CERT-T + abatement proof-set | OWN, NOT, ABSUP, SAMP, LAB | D-ABAT → D-DWS |
| not overdue | Postpone | POST1 / POST2 | OWN | — |
| overdue | Dismissal (same Opt 3/4/5 docs to Audit Unit) | DISM-T + chosen-option doc set | per option | per option |
622 — Turnover, "positive" but XRF-dismissable (cert Option 4) unless an Order 617 is open
| State | Path | Documents | Pros / firm | Deployments |
|---|---|---|---|---|
| not overdue, no open 617 | Cure → CERT-T Opt 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 Opt 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 | —) | OWN, NOT | — |
| open 617 present | Opt 4/5 BARRED → must abate → CERT-T Opt 3 | CERT-T + abatement proof-set | OWN, NOT, ABSUP, SAMP, LAB | D-ABAT → D-DWS |
| not overdue | Postpone | POST1 / POST2 | OWN | — |
| overdue | Dismissal (Opt 3 or 4 docs to Audit Unit) | DISM-T + chosen-option doc set | per option | per option |
623 — Turnover, general / audit-tied (extra ground: surface condition)
Owner ruling 2026-07-13 (after the HPD-website audit): the 623 is BOTH. 621/622/625 police turnover compliance with the hazards; the 623 polices turnover compliance with the audit — 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 (cert Options 3/4/5 / contest grounds below). No model change. | State | Path | Documents | Pros / firm | Deployments | |---|---|---|---|---| | not overdue | Contest (≥5d) — tenancy(<10yr of RPO) / building age / exemption / XRF / paint-chip / surface condition | CONTEST + NOV + ground docs (surface-condition = attestation; HPD may inspect) | OWN, NOT, (INSP for content) | D-INSP (if content) | | not overdue | Cure → CERT-T Opt 3/4/5 | as 621 | per option | per option | | not overdue | Postpone | POST1 / POST2 | OWN | — | | overdue | Dismissal | DISM-T + chosen-option doc set | per option | per option |
625 — Turnover, inconclusive (CONTEST route: violation surface = paint-chip ONLY. CERT route: Opt 4 negative friction XRF OK when no open 624/617 — owner ruling 2026-07-13. Cannot dismiss while paired 624 open)
| State | Path | Documents | Pros / firm | Deployments |
|---|---|---|---|---|
| not overdue, no open 624 | Contest (≥5d) — content = (a) paint-chip on violation surface AND (b) XRF or XRF+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/617 | Cure → CERT-T Opt 4 (negative friction XRF, no work — owner ruling 2026-07-13; the X-550 reads a definitive negative where HPD's Pb200i was inconclusive) | CERT-T + INSP-RPT + INSP-EPA + XRF-AFF | OWN, NOT, INSP | D-INSP |
| not overdue | Cure → CERT-T Opt 5 (paint-chip) or Opt 3 (abate) | CERT-T + (PC set | abatement proof-set) | per option | D-INSP or D-ABAT→D-DWS |
| open 624 present | dismissal BLOCKED → resolve 624 first | — | — | — |
| not overdue | Postpone | POST1 / POST2 | OWN | — |
| overdue | Dismissal | DISM-T + chosen-option doc set | per option | per option |
Penalties (per the forms): 621 $250/day≤$10k · 622 $250/day≤$10k · 623 $1500/violation · 625 $250/day≤$10k.
RECORDS / LL31 / LEGACY — no field testing/abatement (records or owner-side)
618 / 619 / 620 — RPO records audit (overdue → Audit Unit, no fee)
| State | Path | Documents | Pros / firm | Deployments |
|---|---|---|---|---|
| any | Records production → cert (618-619-620 cert) | RPO record set: turnover-vacancy + annual-notice + visual-investigation + safe-work-practices sample forms | OWN (records) | none (no field firm) |
626 — Local Law 31 (5-yr XRF testing violation)
| State | Path | Documents | Pros / firm | Deployments |
|---|---|---|---|---|
| any | Submit 5-yr XRF inspection report to Audit Unit (626 cert) | INSP-RPT (positive + negative surfaces) + INSP-EPA + (XRF-AFF if tested after Aug 9 2020) | OWN, INSP | D-INSP |
555 (AF-3) / 614 — legacy
| State | Path | Documents | Pros / 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" (what drives deployments/workflow)
Every path collapses into one of five shapes — this is what the per-option walkthrough builds:
| Shape | Deployments | Field pros | Doc engine output | Workflow phases |
|---|---|---|---|---|
| S1 — Contest (non-content) building age / exemption / tenancy / surface-condition | none | none (owner records) | CONTEST + NOV + COFO/LEASE | intake → docs_qa → billing |
| S2 — Contest/Dismiss by XRF (presumed surfaces; turnover Opt 4) | D-INSP | INSP | CONTEST or CERT-T + INSP-RPT + INSP-EPA + XRF-AFF | intake → scheduling → field → docs_qa → billing |
| S3 — Contest/Dismiss by paint-chip (inconclusive; Opt 5) | D-INSP | INSP, LAB | + PC-RPT + PC-AFF + PC-LAB | intake → scheduling → field → docs_qa → billing |
| S4 — Abate (positive / overdue hazard / blocked turnover) | D-ABAT → D-DWS | ABSUP, SAMP, LAB | CERT/AF-5/DISM + abatement proof-set | full pipeline |
| S5 — Records only (RPO / LL31) | none (or D-INSP for 626) | (INSP for 626) | record set / XRF report | intake → docs_qa → billing |
Overdue shifts the shape: an overdue hazard (616/617/624) can no longer contest → forced to S4 (abate) + AF-5 + fee. An overdue turnover keeps its cheapest shape (S2/S3/S4) but files a dismissal to the Audit Unit (no fee) instead of a cert.
3. Reusing existing XRF data — the big efficiency (owner, 2026-06-26)
When Secure already ran a full XRF inspection (LL31, prior turnover, initial inspection), the component-level readings persist. A later violation on specific components does NOT require a new field visit — we regenerate a violation-scoped subset of the stored XRF report = a "limited contest XRF report", covering STRICTLY the HPD-cited components. So XRF (S2) can resolve to 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 + component descriptions.
Action-level check for UPLOADED third-party reports (owner ruling 2026-07-13): all of OUR reports were taken at the 0.5 standard (the firm began testing after LL66 took effect), so no check is needed on our own data. But when a client uploads an XRF report from ANOTHER company, validate the report's action level at upload: a pre-Dec-2021 report tested at 1.0 cannot support an exemption (retest at 0.5 required), and its "negatives" between 0.5–0.9 are positives today. Old 1.0-level reports DO still satisfy the LL31 testing requirement itself.
Per-reading routing:
- negative (reusable) → regenerate limited XRF report, no visit.
- inconclusive → fresh paint-chip (S3) — XRF can't resolve.
- positive on a metal / ceramic substrate → fresh paint-chip (S3) — XRF can be a false positive on metal/ceramic (what the 624 form rev 11/2025 now explicitly covers).
- positive on any other substrate (wood/plaster/etc.) → genuine positive → abate (S4).
- partially covered (cited component never XRF-tested) → go back (supplemental D-INSP) with a manual override to add the reading into the CSV; merge into the one limited report.
Dates + signatures (HARD — HPD needs wet-signed originals):
- the limited contest report carries the ORIGINAL inspection date (when readings were taken);
- the XRF affidavit gets the CURRENT date + a fresh WET signature every filing — never reprinted;
- the Inspector EPA cert must have been valid on the original test date.
HPD location grammar → derived violation fields + human reconciliation
HPD hazard descriptions are a nested positional address, parseable 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-dir + at-side) → story → room (ordinal-from-dir) → wall → component (ordinal-from-dir) + a compass orientation to render.
Reconciliation is a HUMAN step, structure-assisted. Secure's report uses colloquial labels ("living room – door to switch"); HPD uses the positional address. The app supplies the derived fields
- compass so the match is fast, then re-labels the reused reading to the violation's description in the limited contest report. The orig↔vio reading match stays human-in-the-loop.
4. Contest grounds — verbatim-confirmed vs orderRegistry.contestGrounds
Every L-06 contestation form read 2026-06-26. The numbered grounds on each form (owner-facing walkthrough checklists) and the registry mapping — all six already match the live forms:
| Order | Form (rev) | Numbered grounds on the form | Registry contestGrounds |
|---|---|---|---|
| 616 | L-06 (616) 7/2021 | 1 building age (≥1960 +CofO) · 2 HPD exemption · 3a XRF-no-LBP · 3b XRF-inconclusive+paint-chip | building_age, exemption, content_xrf, content_paintchip ✅ |
| 621 | L-06 (621) 6/2024 | 1 tenancy (moved in <8/2/2004) · 2 building age · 3 exemption · 4a XRF unit · 4b XRF-friction-neg + others-no-peeling/smooth · 4c XRF-inconclusive+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 ✅ (622 XRF route is cert Opt#4, not contest) |
| 623 | L-06 (623) | 1 tenancy (<10 yrs of 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 violation surface (XRF NOT acceptable there) AND (b) XRF/XRF+paint-chip on all OTHER friction surfaces | content_paintchip ✅ (xrfClearable:false correct) |
617: issuance-grounds-only contest (building_age, exemption — no content); registry matches.
5. Combination scenarios (grouped by initial service request)
One PROJECT per unit-job; multiple orders cited together split into bundles by their cheapest cure (owner rule: contest/test before abate — abatement is the expensive last resort). Blocker rules re-route the cheap path to abatement when a paired positive/inconclusive hazard is open.
| # | Cited orders (same unit) | Bundles → shape | Deployments | Notes |
|---|---|---|---|---|
| C1 | 616 alone | S2 (XRF) or S1 (age/exemption) or S4 (abate) | D-INSP, or D-ABAT→D-DWS | owner picks cheapest viable |
| 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 can't resolve |
| C4 | 621 alone | S2/S3/S4 | per option | turnover, no fee if overdue |
| C5 | 622 alone (no 617) | S2 (XRF Opt 4) or S4 | D-INSP | the corrected case — XRF-dismissable |
| C6 | 622 + 617 | 622→S4 (blocked), 617→S4 | D-ABAT → D-DWS | one ABAT-AFF unions both #s |
| C7 | 616 + 617 (classic co-issue) | 616→S2 (XRF), 617→S4 | D-INSP and D-ABAT→D-DWS | split: contest/XRF the 616, abate the 617 |
| C8 | 625 + 624 | 625 dismissal blocked, 624→S3/S4 | D-INSP or D-ABAT→D-DWS | resolve 624 first |
| C9 | 616 + 621 (hazard+turnover presumed) | both S2 | D-INSP (one visit) | one inspection clears both |
| C10 | multi-unit / multi-order abatement | all S4 → one D-ABAT | D-ABAT → D-DWS | one ABAT-AFF lists every cured violation # (the union) |
| C11 | RPO (618-620) + a hazard | S5 + (S2/S4) | none + per option | records bundle 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"). Default = SEC unless the owner picks IND — but since SEC also holds abatement capability (owner 2026-07-13), if SEC performed the abatement, SEC cannot wipe that job: use IND. LL31-test practice rule (owner 2026-07-13): contract the LL31 XRF test as a STANDALONE engagement; 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/any contractor hired to perform remediation," judged at test time, so a bundled test+fix engagement is the one edge to avoid.
6. HPD Open Data field contract (everything keys on this)
Source = HPD Violations wvxf-dwi5 (filter bin, daily) via sync-hpd-violations → public_events.
| HPD field | public_events column | Logic use |
|---|---|---|
ordernumber | order_number | the rulebook (616–626) → shape/firm/docs |
originalcorrectbydate / newcorrectbydate | original_correct_by_date / new_correct_by_date; correct_by_date = new ‖ original | deadline engine reads the EFFECTIVE date |
originalcertifybydate / newcertifybydate / certifieddate | *_certify_by_date / certified_date | cert vs AF-5 timing |
currentstatusid (+ status/date) | current_status_id, status_norm, status_detail | open/closed/dismissed; postponement = status id 6 granted / 7 denied OR new≠original |
novdescription | description (+ raw) | parsed → location/component fields (§3 grammar) |
apartment / story / class | apartment / story / class_code | unit linkage, severity |
Not an HPD field: substrate (ours, from the XRF CSV) and the parsed location fields (derived).
7. What's encoded vs pending (build status)
- orderRegistry corrections — ✅ APPLIED: 622 →
surfaceStatus:'presumed',xrfClearable:true,cureMethods:['xrf_negative','abatement_dustwipe'],contentContestable:false, keepblockedByOpen:['617']; 625blockedByOpen:['624'].deriveServiceKeyhonorsblockedByOpen(622+open-617, or 625+open-624 → forced abatement bundle). 18/18 logic assertions green. 1b. orderRegistry 625 correction — ⚠ PENDING (owner ruling 2026-07-13, NOT yet in code): mirror the 622 fix one family down: 625 →xrfClearable:true, add'xrf_negative'tocureMethods, keepblockedByOpen:['624'](contest grounds stay paint-chip-only per the L-06 625 form — the XRF route is the CERT Opt #4, not a contest ground, exactly like 622). Until applied, the app under-offers the 625 XRF-clear path.hpdAdapter/documentValidationRulesre-derive once the registry changes. deploymentsentity — ✅ RESOLVED, not pending. Owner decision "Contradiction 13" (supabase/migrations/20260821080900_inspections.sql, 2026-08-21) rejected a standalonedeployments/firm_idjoin in favor of folding it intoinspections:project_id,service_type(xrf | paint_chip | dust_wipe | abatement) is the deployment type,tenant_id(→ SEC/ABA/IND's tenant row) is the firm attach point. Nofirmstable exists in this rebuild. Auto-splitting one inspection per tenant/service and unioning ABAT-AFF violation numbers across collaborating tenants are still manual (seedocs/PROJECT_LIFECYCLE_GUIDE.md§7, §11).- Per-option document bundle = pick the shape (S1–S5) per violation × chosen path → emit the exact doc codes from §1. The multi-violation union (Phase 14.7) already unions doc types; this adds the per-shape content + the union ABAT-AFF.
- Instance states still needed for 616/624 four-state (known-positive / contested-positive): a violation-instance field (prior standard-test result + contest outcome) — to add when the walkthrough is built.
Open owner inputs that touch this rulebook
- Renewed SEG inspection EPA number (replaces
LBP-F251759-1) → §0 firm table + plan 16-05. - Re-upload
DOH DWS AFFIDAVIT.pdf(only unreadable source form). - DOH NOV / COTA abatement in scope? (a whole intake class not yet modeled here.)