refactor(property-baseline): units on co2 / PEUI columns (PR #1139 review)

Make the stored units explicit on the property_baseline_performance columns:
- `*_co2_emissions` → `*_co2_emissions_t_per_yr` (tonnes CO₂/yr, whole dwelling)
- `*_primary_energy_intensity` → `*_primary_energy_intensity_kwh_per_m2_yr`

Column names only; the domain `Performance` VO stays unit-suffix-free (units are
a storage concern, mapped in from_domain/to_domain). Migration doc updated.
Round-trip stays green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Khalim Conn-Kowlessar 2026-06-01 14:57:00 +00:00 committed by Jun-te Kim
parent 457d959b1f
commit 50914e8aae
2 changed files with 16 additions and 16 deletions

View file

@ -20,12 +20,12 @@ straight lift-and-shift of the columns below.
| `property_id` | int, FK → `property.id`, **unique** | one Baseline Performance per Property |
| `lodged_sap_score` | int | Lodged Performance — gov register, off the Effective EPC |
| `lodged_epc_band` | text | the `Epc` enum, stored as its string value (e.g. `"C"`) |
| `lodged_co2_emissions` | float | |
| `lodged_primary_energy_intensity` | int | PEUI (kWh/m²/yr); **not** "heat demand" — see CONTEXT.md |
| `lodged_co2_emissions_t_per_yr` | float | tonnes CO₂/yr (whole dwelling) |
| `lodged_primary_energy_intensity_kwh_per_m2_yr` | int | PEUI (kWh/m²/yr); **not** "heat demand" — see CONTEXT.md |
| `effective_sap_score` | int | Effective Performance — what modelling scored against |
| `effective_epc_band` | text | |
| `effective_co2_emissions` | float | |
| `effective_primary_energy_intensity` | int | |
| `effective_co2_emissions_t_per_yr` | float | tonnes CO₂/yr (whole dwelling) |
| `effective_primary_energy_intensity_kwh_per_m2_yr` | int | kWh/m²/yr |
| `rebaseline_reason` | text | `none` \| `pre_sap10` \| `physical_state_changed` \| `both` |
| `space_heating_kwh` | float | off `renewable_heat_incentive`; deterministic (ADR-0006) |
| `water_heating_kwh` | float | off `renewable_heat_incentive` |

View file

@ -25,13 +25,13 @@ class PropertyBaselinePerformanceModel(SQLModel, table=True):
lodged_sap_score: int
lodged_epc_band: str
lodged_co2_emissions: float
lodged_primary_energy_intensity: int
lodged_co2_emissions_t_per_yr: float
lodged_primary_energy_intensity_kwh_per_m2_yr: int
effective_sap_score: int
effective_epc_band: str
effective_co2_emissions: float
effective_primary_energy_intensity: int
effective_co2_emissions_t_per_yr: float
effective_primary_energy_intensity_kwh_per_m2_yr: int
rebaseline_reason: str
@ -46,12 +46,12 @@ class PropertyBaselinePerformanceModel(SQLModel, table=True):
property_id=property_id,
lodged_sap_score=baseline.lodged.sap_score,
lodged_epc_band=baseline.lodged.epc_band.value,
lodged_co2_emissions=baseline.lodged.co2_emissions,
lodged_primary_energy_intensity=baseline.lodged.primary_energy_intensity,
lodged_co2_emissions_t_per_yr=baseline.lodged.co2_emissions,
lodged_primary_energy_intensity_kwh_per_m2_yr=baseline.lodged.primary_energy_intensity,
effective_sap_score=baseline.effective.sap_score,
effective_epc_band=baseline.effective.epc_band.value,
effective_co2_emissions=baseline.effective.co2_emissions,
effective_primary_energy_intensity=baseline.effective.primary_energy_intensity,
effective_co2_emissions_t_per_yr=baseline.effective.co2_emissions,
effective_primary_energy_intensity_kwh_per_m2_yr=baseline.effective.primary_energy_intensity,
rebaseline_reason=baseline.rebaseline_reason,
space_heating_kwh=baseline.space_heating_kwh,
water_heating_kwh=baseline.water_heating_kwh,
@ -62,14 +62,14 @@ class PropertyBaselinePerformanceModel(SQLModel, table=True):
lodged=Performance(
sap_score=self.lodged_sap_score,
epc_band=Epc(self.lodged_epc_band),
co2_emissions=self.lodged_co2_emissions,
primary_energy_intensity=self.lodged_primary_energy_intensity,
co2_emissions=self.lodged_co2_emissions_t_per_yr,
primary_energy_intensity=self.lodged_primary_energy_intensity_kwh_per_m2_yr,
),
effective=Performance(
sap_score=self.effective_sap_score,
epc_band=Epc(self.effective_epc_band),
co2_emissions=self.effective_co2_emissions,
primary_energy_intensity=self.effective_primary_energy_intensity,
co2_emissions=self.effective_co2_emissions_t_per_yr,
primary_energy_intensity=self.effective_primary_energy_intensity_kwh_per_m2_yr,
),
rebaseline_reason=cast(RebaselineReason, self.rebaseline_reason),
space_heating_kwh=self.space_heating_kwh,