mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-30 13:10:47 +00:00
Load Conservatories, Renewables, RoomCountElements, WaterUse, CustomerReponse, SurveyAddendum from SiteNotes JSON 🟥
This commit is contained in:
parent
7833413c8b
commit
47cae167c8
2 changed files with 126 additions and 0 deletions
|
|
@ -4,6 +4,8 @@ from typing import List, Optional
|
||||||
from datatypes.epc.surveys.pashub_rdsap_site_notes import (
|
from datatypes.epc.surveys.pashub_rdsap_site_notes import (
|
||||||
BuildingConstruction,
|
BuildingConstruction,
|
||||||
BuildingMeasurements,
|
BuildingMeasurements,
|
||||||
|
Conservatories,
|
||||||
|
CustomerResponse,
|
||||||
ExtensionConstruction,
|
ExtensionConstruction,
|
||||||
ExtensionMeasurements,
|
ExtensionMeasurements,
|
||||||
ExtensionRoofSpace,
|
ExtensionRoofSpace,
|
||||||
|
|
@ -15,11 +17,16 @@ from datatypes.epc.surveys.pashub_rdsap_site_notes import (
|
||||||
MainBuildingMeasurements,
|
MainBuildingMeasurements,
|
||||||
MainHeating,
|
MainHeating,
|
||||||
PasHubRdSapSiteNotes,
|
PasHubRdSapSiteNotes,
|
||||||
|
Renewables,
|
||||||
|
RoomCountElements,
|
||||||
RoofSpace,
|
RoofSpace,
|
||||||
RoofSpaceDetail,
|
RoofSpaceDetail,
|
||||||
SecondaryHeating,
|
SecondaryHeating,
|
||||||
|
Shower,
|
||||||
|
SurveyAddendum,
|
||||||
Ventilation,
|
Ventilation,
|
||||||
WaterHeating,
|
WaterHeating,
|
||||||
|
WaterUse,
|
||||||
Window,
|
Window,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -314,6 +321,24 @@ class PasHubRdSapSiteNotesExtractor:
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def extract_conservatories(self) -> Conservatories:
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
|
def extract_renewables(self) -> Renewables:
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
|
def extract_room_count_elements(self) -> RoomCountElements:
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
|
def extract_water_use(self) -> WaterUse:
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
|
def extract_customer_response(self) -> CustomerResponse:
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
|
def extract_addendum(self) -> SurveyAddendum:
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
def _parse_main_heating(self, data: List[str]) -> MainHeating:
|
def _parse_main_heating(self, data: List[str]) -> MainHeating:
|
||||||
return MainHeating(
|
return MainHeating(
|
||||||
selection_method=self._get_in(data, "How would you like to select the Heating System?") or "",
|
selection_method=self._get_in(data, "How would you like to select the Heating System?") or "",
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,8 @@ from backend.documents_parser.extractor import PasHubRdSapSiteNotesExtractor
|
||||||
from datatypes.epc.surveys.pashub_rdsap_site_notes import (
|
from datatypes.epc.surveys.pashub_rdsap_site_notes import (
|
||||||
BuildingConstruction,
|
BuildingConstruction,
|
||||||
BuildingMeasurements,
|
BuildingMeasurements,
|
||||||
|
Conservatories,
|
||||||
|
CustomerResponse,
|
||||||
ExtensionConstruction,
|
ExtensionConstruction,
|
||||||
ExtensionMeasurements,
|
ExtensionMeasurements,
|
||||||
ExtensionRoofSpace,
|
ExtensionRoofSpace,
|
||||||
|
|
@ -18,11 +20,16 @@ from datatypes.epc.surveys.pashub_rdsap_site_notes import (
|
||||||
MainBuildingMeasurements,
|
MainBuildingMeasurements,
|
||||||
MainHeating,
|
MainHeating,
|
||||||
PasHubRdSapSiteNotes,
|
PasHubRdSapSiteNotes,
|
||||||
|
Renewables,
|
||||||
|
RoomCountElements,
|
||||||
RoofSpace,
|
RoofSpace,
|
||||||
RoofSpaceDetail,
|
RoofSpaceDetail,
|
||||||
SecondaryHeating,
|
SecondaryHeating,
|
||||||
|
Shower,
|
||||||
|
SurveyAddendum,
|
||||||
Ventilation,
|
Ventilation,
|
||||||
WaterHeating,
|
WaterHeating,
|
||||||
|
WaterUse,
|
||||||
)
|
)
|
||||||
|
|
||||||
FIXTURES = os.path.join(os.path.dirname(__file__), "fixtures")
|
FIXTURES = os.path.join(os.path.dirname(__file__), "fixtures")
|
||||||
|
|
@ -442,3 +449,97 @@ class TestVentilation:
|
||||||
draught_lobby=False,
|
draught_lobby=False,
|
||||||
ventilation_in_pcdf_database=False,
|
ventilation_in_pcdf_database=False,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class TestConservatories:
|
||||||
|
def test_full_conservatories(self) -> None:
|
||||||
|
result = PasHubRdSapSiteNotesExtractor(
|
||||||
|
load_text_fixture()
|
||||||
|
).extract_conservatories()
|
||||||
|
assert result == Conservatories(has_conservatory=False)
|
||||||
|
|
||||||
|
|
||||||
|
class TestRenewables:
|
||||||
|
def test_number_of_pv_batteries_none_string_becomes_zero(self) -> None:
|
||||||
|
result = PasHubRdSapSiteNotesExtractor(load_text_fixture()).extract_renewables()
|
||||||
|
assert result.number_of_pv_batteries == 0
|
||||||
|
|
||||||
|
def test_full_renewables(self) -> None:
|
||||||
|
result = PasHubRdSapSiteNotesExtractor(load_text_fixture()).extract_renewables()
|
||||||
|
assert result == Renewables(
|
||||||
|
wind_turbines=False,
|
||||||
|
solar_hot_water=False,
|
||||||
|
photovoltaic_array=False,
|
||||||
|
number_of_pv_batteries=0,
|
||||||
|
hydro=False,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class TestRoomCountElements:
|
||||||
|
@pytest.fixture
|
||||||
|
def rce(self) -> RoomCountElements:
|
||||||
|
return PasHubRdSapSiteNotesExtractor(
|
||||||
|
load_text_fixture()
|
||||||
|
).extract_room_count_elements()
|
||||||
|
|
||||||
|
def test_habitable_rooms(self, rce: RoomCountElements) -> None:
|
||||||
|
assert rce.number_of_habitable_rooms == 3
|
||||||
|
|
||||||
|
def test_heated_rooms_null(self, rce: RoomCountElements) -> None:
|
||||||
|
assert rce.number_of_heated_rooms is None
|
||||||
|
|
||||||
|
def test_full_room_count_elements(self, rce: RoomCountElements) -> None:
|
||||||
|
assert rce == RoomCountElements(
|
||||||
|
number_of_habitable_rooms=3,
|
||||||
|
any_unheated_rooms=False,
|
||||||
|
number_of_heated_rooms=None,
|
||||||
|
number_of_external_doors=2,
|
||||||
|
number_of_insulated_external_doors=0,
|
||||||
|
number_of_draughtproofed_external_doors=2,
|
||||||
|
number_of_open_chimneys=0,
|
||||||
|
number_of_blocked_chimneys=0,
|
||||||
|
number_of_fixed_incandescent_bulbs=4,
|
||||||
|
exact_led_cfl_count_known=True,
|
||||||
|
number_of_fixed_led_bulbs=0,
|
||||||
|
number_of_fixed_cfl_bulbs=1,
|
||||||
|
waste_water_heat_recovery="None",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class TestWaterUse:
|
||||||
|
def test_full_water_use(self) -> None:
|
||||||
|
result = PasHubRdSapSiteNotesExtractor(load_text_fixture()).extract_water_use()
|
||||||
|
assert result == WaterUse(
|
||||||
|
number_of_baths=1,
|
||||||
|
number_of_special_features=0,
|
||||||
|
showers=[Shower(id=1, outlet_type="Non-Electric Shower")],
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class TestCustomerResponse:
|
||||||
|
def test_full_customer_response(self) -> None:
|
||||||
|
result = PasHubRdSapSiteNotesExtractor(
|
||||||
|
load_text_fixture()
|
||||||
|
).extract_customer_response()
|
||||||
|
assert result == CustomerResponse(
|
||||||
|
customer_present=True,
|
||||||
|
willing_to_answer_satisfaction_survey=False,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class TestSurveyAddendum:
|
||||||
|
def test_hard_to_treat_flags(self) -> None:
|
||||||
|
result = PasHubRdSapSiteNotesExtractor(load_text_fixture()).extract_addendum()
|
||||||
|
assert result.hard_to_treat_cavity_access_issues is False
|
||||||
|
assert result.hard_to_treat_cavity_high_exposure is False
|
||||||
|
assert result.hard_to_treat_cavity_narrow_cavities is False
|
||||||
|
|
||||||
|
def test_full_addendum(self) -> None:
|
||||||
|
result = PasHubRdSapSiteNotesExtractor(load_text_fixture()).extract_addendum()
|
||||||
|
assert result == SurveyAddendum(
|
||||||
|
addendum="None",
|
||||||
|
related_party_disclosure="No related party",
|
||||||
|
hard_to_treat_cavity_access_issues=False,
|
||||||
|
hard_to_treat_cavity_high_exposure=False,
|
||||||
|
hard_to_treat_cavity_narrow_cavities=False,
|
||||||
|
)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue