from dataclasses import dataclass, field from typing import Optional @dataclass class WindowVentilation: opening_type: Optional[str] = None num_openings: Optional[int] = None pct_openable: Optional[int] = None trickle_vent_area_mm2: Optional[int] = None num_trickle_vents: Optional[int] = None @dataclass class DoorVentilation: undercut_mm: Optional[float] = None @dataclass class Window: width_m: float height_m: float area_m2: float opening_type: str ventilation: Optional[WindowVentilation] = None @dataclass class Door: width_mm: float height_mm: float ventilation: Optional[DoorVentilation] = None @dataclass class Room: name: str width_m: float length_m: float area_m2: float windows: list[Window] = field(default_factory=list[Window]) doors: list[Door] = field(default_factory=list[Door]) @dataclass class Floor: level: int | None name: str | None rooms: list[Room] = field(default_factory=list[Room]) @dataclass class Plan: uid: str name: str | None address: str | None = None postcode: str | None = None floors: list[Floor] = field(default_factory=list[Floor])