diff --git a/scripts/hyde/unknowns_review.md b/scripts/hyde/unknowns_review.md new file mode 100644 index 00000000..44514221 --- /dev/null +++ b/scripts/hyde/unknowns_review.md @@ -0,0 +1,53 @@ +# Hyde portfolio 796 — UNKNOWN overrides for review + +After ChatGPT classification, **19 distinct descriptions** did not auto-resolve (out of ~440 distinct across all components). Grouped below with a **proposed value** (must be one of the allowed enum values) + the row count it affects. Nothing is written to the DB until these are confirmed. + +## 1. construction_age_band — 29,829 rows (DETERMINISTIC, no judgement) + +The classifier didn't extract the band letter in batch, but the band IS the leading letter, so these are mapped mechanically (`"D: 1950-1966"` → `D`). Just confirm the approach. + +| description | → band | rows | +|---|---|---| +| D: 1950-1966 | `D` | 4,978 | +| K: 2007-2011 | `K` | 4,201 | +| I: 1996-2002 | `I` | 3,708 | +| B: 1900-1929 | `B` | 3,222 | +| H: 1991-1995 | `H` | 2,747 | +| E: 1967-1975 | `E` | 2,479 | +| J: 2003-2006 | `J` | 2,221 | +| F: 1976-1982 | `F` | 2,071 | +| C: 1930-1949 | `C` | 1,840 | +| G: 1983-1990 | `G` | 1,615 | +| A: pre-1900 | `A` | 615 | +| M: 2023 onwards | `M` | 132 | + +## 2. roof_type (flat roofs) — 1,473 rows (NEEDS KHALIM'S CALL) + +Flat-roof insulation drives the SAP roof U-value. **`Flat: As Built` (1,172) + `Flat: Unknown` (194) are the load-bearing decision** — proposed conservatively as *no insulation (assumed)*. + +| description | proposed value | rows | alt options | +|---|---|---|---| +| Flat: As Built | `Flat, no insulation (assumed)` | 1,172 | Flat, insulated (assumed) / Flat, limited insulation (assumed) / Flat, no insulation (assumed) | +| Flat: Unknown | `Flat, no insulation (assumed)` | 194 | Flat, insulated (assumed) / Flat, limited insulation (assumed) / Flat, no insulation (assumed) | +| Flat: 150mm | `Flat, insulated` | 59 | Flat, insulated (assumed) / Flat, limited insulation (assumed) / Flat, no insulation (assumed) | +| Flat: 100mm | `Flat, insulated` | 32 | Flat, insulated (assumed) / Flat, limited insulation (assumed) / Flat, no insulation (assumed) | +| Flat: 50mm | `Flat, limited insulation` | 13 | Flat, insulated (assumed) / Flat, limited insulation (assumed) / Flat, no insulation (assumed) | +| SameDwellingAbove | `(same dwelling above)` | 3 | Flat, insulated (assumed) / Flat, limited insulation (assumed) / Flat, no insulation (assumed) | + +## 3. wall_type — 7 rows + +| description | proposed value | rows | +|---|---|---| +| TimberFrame: Internal | `Timber frame, with additional insulation` | 7 | + +## How to apply after review + +Edit the `corrected_value` column of `overrides_edits.csv`, then: + +``` +python scripts/hyde/build_property_overrides.py validate --edits overrides_edits.csv +python scripts/hyde/build_property_overrides.py apply-edits --edits overrides_edits.csv --portfolio-id 796 --apply +python scripts/hyde/build_property_overrides.py write --excel scripts/hyde/hyde_property_overrides.xlsx --portfolio-id 796 --apply +``` + +> Note: a proper fix for the age classifier (a prompt hint so the production lambda extracts the band letter) is a separate follow-up; these script edits handle this run. \ No newline at end of file