From 367fd3664bd9398c540d2813adf34d09b9eabaf1 Mon Sep 17 00:00:00 2001 From: Daniel Roth Date: Tue, 30 Jun 2026 09:37:55 +0000 Subject: [PATCH 01/13] =?UTF-8?q?Write=20total=20trickle=20vent=20area=20t?= =?UTF-8?q?o=20column=20O;=20shift=20door=20columns=20to=20Q/R/S/T=20?= =?UTF-8?q?=F0=9F=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- .../magicplan/test_ventilation_audit.py | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/tests/domain/magicplan/test_ventilation_audit.py b/tests/domain/magicplan/test_ventilation_audit.py index 6ebb39362..6be6275fd 100644 --- a/tests/domain/magicplan/test_ventilation_audit.py +++ b/tests/domain/magicplan/test_ventilation_audit.py @@ -135,7 +135,7 @@ def test_writes_window_opening_data_to_columns_J_K_L() -> None: assert sheet["L6"].value == pytest.approx(0.5) -def test_writes_trickle_vent_data_to_columns_N_and_O() -> None: +def test_writes_trickle_vent_count_to_N_and_total_area_to_O() -> None: # Arrange plan = _make_plan(num_rooms=1, num_windows_per_room=1, num_doors_per_room=0) sheet = _blank_sheet() @@ -144,11 +144,11 @@ def test_writes_trickle_vent_data_to_columns_N_and_O() -> None: populate_sheet(sheet, plan) # Assert - assert sheet["N6"].value == 1000 - assert sheet["O6"].value == 2 + assert sheet["N6"].value == 2 + assert sheet["O6"].value == 1000 -def test_writes_door_room_name_to_column_R() -> None: +def test_writes_door_room_name_to_column_Q() -> None: # Arrange plan = _make_plan(num_rooms=1, num_windows_per_room=0, num_doors_per_room=1) sheet = _blank_sheet() @@ -157,10 +157,10 @@ def test_writes_door_room_name_to_column_R() -> None: populate_sheet(sheet, plan) # Assert - assert sheet["R6"].value == "Room 0" + assert sheet["Q6"].value == "Room 0" -def test_writes_door_dimensions_to_columns_S_and_T() -> None: +def test_writes_door_dimensions_to_columns_R_and_S() -> None: # Arrange plan = _make_plan(num_rooms=1, num_windows_per_room=0, num_doors_per_room=1) sheet = _blank_sheet() @@ -169,8 +169,8 @@ def test_writes_door_dimensions_to_columns_S_and_T() -> None: populate_sheet(sheet, plan) # Assert - assert sheet["S6"].value == 800.0 - assert sheet["T6"].value == 10.0 + assert sheet["R6"].value == 800.0 + assert sheet["S6"].value == 10.0 def test_writes_zeros_when_window_has_no_ventilation() -> None: @@ -186,8 +186,8 @@ def test_writes_zeros_when_window_has_no_ventilation() -> None: assert sheet["J6"].value == 0 assert sheet["K6"].value == 0 assert sheet["L6"].value == 0 - assert sheet["N6"].value == 0 - assert sheet["O6"].value == 0 + assert sheet["N6"].value == 0 # count + assert sheet["O6"].value == 0 # total area def test_writes_zeros_when_door_has_no_ventilation() -> None: @@ -200,7 +200,7 @@ def test_writes_zeros_when_door_has_no_ventilation() -> None: populate_sheet(sheet, plan) # Assert - assert sheet["T6"].value == 0 + assert sheet["S6"].value == 0 _TEMPLATE_PATH = ( @@ -220,4 +220,4 @@ def test_real_template_survives_18_doors() -> None: populate_sheet(sheet, plan) - assert sheet["R23"].value == "Room 17" + assert sheet["Q23"].value == "Room 17" From 1f0fffe8af6022d54043415005a06a41bcbc04b7 Mon Sep 17 00:00:00 2001 From: Daniel Roth Date: Tue, 30 Jun 2026 09:59:37 +0000 Subject: [PATCH 02/13] =?UTF-8?q?Write=20total=20trickle=20vent=20area=20t?= =?UTF-8?q?o=20column=20O;=20shift=20door=20columns=20to=20Q/R/S/T=20?= =?UTF-8?q?=F0=9F=9F=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- ...aster Sero Template - Data Extraction.xlsx | Bin 21128 -> 15415 bytes domain/magicplan/ventilation_audit.py | 16 ++++++++-------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/applications/audit_generator/Master Sero Template - Data Extraction.xlsx b/applications/audit_generator/Master Sero Template - Data Extraction.xlsx index 15bc8d3ab374c1472748ea464b817efa07f9959e..2416b11f2062a1b8bf72f611455fcf0bcec39019 100644 GIT binary patch literal 15415 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 G`~Lt9dc55L literal 21128 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 z None: pct = vent.pct_openable if vent else None _write_cell(sheet, row, "L", (pct / 100) if pct is not None else 0) # M = formula =I*L — do not write - _write_cell(sheet, row, "N", vent.trickle_vent_area_mm2 if vent else 0) - _write_cell(sheet, row, "O", vent.num_trickle_vents if vent else 0) - # P = formula =N*O — do not write + _write_cell(sheet, row, "N", vent.num_trickle_vents if vent else 0) + _write_cell(sheet, row, "O", vent.trickle_vent_area_mm2 if vent else 0) + # P = unused gap — do not write for i, (room_name, door) in enumerate(doors): row = _DATA_START_ROW + i vent = door.ventilation - _write_cell(sheet, row, "R", room_name) - _write_cell(sheet, row, "S", door.width_mm) - _write_cell(sheet, row, "T", vent.undercut_mm if vent else 0) - # U = formula =S*T — do not write + _write_cell(sheet, row, "Q", room_name) + _write_cell(sheet, row, "R", door.width_mm) + _write_cell(sheet, row, "S", vent.undercut_mm if vent else 0) + # T = formula =R*S — do not write _apply_column_y_formatting(sheet) From 550b2ae5e68ce5f1d5e27cf87541f7856f310f83 Mon Sep 17 00:00:00 2001 From: Daniel Roth Date: Tue, 30 Jun 2026 11:34:16 +0000 Subject: [PATCH 03/13] revert changes --- ...aster Sero Template - Data Extraction.xlsx | Bin 15415 -> 21128 bytes domain/magicplan/ventilation_audit.py | 16 ++++++------ .../magicplan/test_ventilation_audit.py | 24 +++++++++--------- 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/applications/audit_generator/Master Sero Template - Data Extraction.xlsx b/applications/audit_generator/Master Sero Template - Data Extraction.xlsx index 2416b11f2062a1b8bf72f611455fcf0bcec39019..15bc8d3ab374c1472748ea464b817efa07f9959e 100644 GIT binary patch literal 21128 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 G`~Lt9dc55L diff --git a/domain/magicplan/ventilation_audit.py b/domain/magicplan/ventilation_audit.py index 71dc2f0d9..74fc66e1f 100644 --- a/domain/magicplan/ventilation_audit.py +++ b/domain/magicplan/ventilation_audit.py @@ -11,7 +11,7 @@ from domain.magicplan.models import Door, Plan, Room, Window _DATA_START_ROW = 6 _MAX_ROWS = 50 -_DOOR_AREA_COL = "T" +_DOOR_AREA_COL = "U" _DOOR_AREA_CF_RANGE = f"{_DOOR_AREA_COL}{_DATA_START_ROW}:{_DOOR_AREA_COL}{_DATA_START_ROW + _MAX_ROWS - 1}" _Y_THRESHOLD = 7600 _DOOR_AREA_HEADER = CellRichText( @@ -87,16 +87,16 @@ def populate_sheet(sheet: Any, plan: Plan) -> None: pct = vent.pct_openable if vent else None _write_cell(sheet, row, "L", (pct / 100) if pct is not None else 0) # M = formula =I*L — do not write - _write_cell(sheet, row, "N", vent.num_trickle_vents if vent else 0) - _write_cell(sheet, row, "O", vent.trickle_vent_area_mm2 if vent else 0) - # P = unused gap — do not write + _write_cell(sheet, row, "N", vent.trickle_vent_area_mm2 if vent else 0) + _write_cell(sheet, row, "O", vent.num_trickle_vents if vent else 0) + # P = formula =N*O — do not write for i, (room_name, door) in enumerate(doors): row = _DATA_START_ROW + i vent = door.ventilation - _write_cell(sheet, row, "Q", room_name) - _write_cell(sheet, row, "R", door.width_mm) - _write_cell(sheet, row, "S", vent.undercut_mm if vent else 0) - # T = formula =R*S — do not write + _write_cell(sheet, row, "R", room_name) + _write_cell(sheet, row, "S", door.width_mm) + _write_cell(sheet, row, "T", vent.undercut_mm if vent else 0) + # U = formula =S*T — do not write _apply_column_y_formatting(sheet) diff --git a/tests/domain/magicplan/test_ventilation_audit.py b/tests/domain/magicplan/test_ventilation_audit.py index 6be6275fd..6ebb39362 100644 --- a/tests/domain/magicplan/test_ventilation_audit.py +++ b/tests/domain/magicplan/test_ventilation_audit.py @@ -135,7 +135,7 @@ def test_writes_window_opening_data_to_columns_J_K_L() -> None: assert sheet["L6"].value == pytest.approx(0.5) -def test_writes_trickle_vent_count_to_N_and_total_area_to_O() -> None: +def test_writes_trickle_vent_data_to_columns_N_and_O() -> None: # Arrange plan = _make_plan(num_rooms=1, num_windows_per_room=1, num_doors_per_room=0) sheet = _blank_sheet() @@ -144,11 +144,11 @@ def test_writes_trickle_vent_count_to_N_and_total_area_to_O() -> None: populate_sheet(sheet, plan) # Assert - assert sheet["N6"].value == 2 - assert sheet["O6"].value == 1000 + assert sheet["N6"].value == 1000 + assert sheet["O6"].value == 2 -def test_writes_door_room_name_to_column_Q() -> None: +def test_writes_door_room_name_to_column_R() -> None: # Arrange plan = _make_plan(num_rooms=1, num_windows_per_room=0, num_doors_per_room=1) sheet = _blank_sheet() @@ -157,10 +157,10 @@ def test_writes_door_room_name_to_column_Q() -> None: populate_sheet(sheet, plan) # Assert - assert sheet["Q6"].value == "Room 0" + assert sheet["R6"].value == "Room 0" -def test_writes_door_dimensions_to_columns_R_and_S() -> None: +def test_writes_door_dimensions_to_columns_S_and_T() -> None: # Arrange plan = _make_plan(num_rooms=1, num_windows_per_room=0, num_doors_per_room=1) sheet = _blank_sheet() @@ -169,8 +169,8 @@ def test_writes_door_dimensions_to_columns_R_and_S() -> None: populate_sheet(sheet, plan) # Assert - assert sheet["R6"].value == 800.0 - assert sheet["S6"].value == 10.0 + assert sheet["S6"].value == 800.0 + assert sheet["T6"].value == 10.0 def test_writes_zeros_when_window_has_no_ventilation() -> None: @@ -186,8 +186,8 @@ def test_writes_zeros_when_window_has_no_ventilation() -> None: assert sheet["J6"].value == 0 assert sheet["K6"].value == 0 assert sheet["L6"].value == 0 - assert sheet["N6"].value == 0 # count - assert sheet["O6"].value == 0 # total area + assert sheet["N6"].value == 0 + assert sheet["O6"].value == 0 def test_writes_zeros_when_door_has_no_ventilation() -> None: @@ -200,7 +200,7 @@ def test_writes_zeros_when_door_has_no_ventilation() -> None: populate_sheet(sheet, plan) # Assert - assert sheet["S6"].value == 0 + assert sheet["T6"].value == 0 _TEMPLATE_PATH = ( @@ -220,4 +220,4 @@ def test_real_template_survives_18_doors() -> None: populate_sheet(sheet, plan) - assert sheet["Q23"].value == "Room 17" + assert sheet["R23"].value == "Room 17" From 52749d49311e570325453637abe8fb5353440c08 Mon Sep 17 00:00:00 2001 From: Daniel Roth Date: Tue, 30 Jun 2026 12:53:29 +0000 Subject: [PATCH 04/13] delete redundant column from spreadsheet --- ...aster Sero Template - Data Extraction.xlsx | Bin 21128 -> 20508 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/applications/audit_generator/Master Sero Template - Data Extraction.xlsx b/applications/audit_generator/Master Sero Template - Data Extraction.xlsx index 15bc8d3ab374c1472748ea464b817efa07f9959e..31ab7f6b6387c5c7b29f8fc4f61f66c3e8c52be2 100644 GIT binary patch delta 11547 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 RfiR%|5zsY9Zb}bF{|~?aVLt!> delta 12201 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 z Date: Tue, 30 Jun 2026 12:56:54 +0000 Subject: [PATCH 05/13] =?UTF-8?q?Mapper=20reads=20new=20'Total=20Trickle?= =?UTF-8?q?=20Vent=20Effective=20Area'=20label=20=F0=9F=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- tests/magic_plan/magicplan_api_plan_response.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/magic_plan/magicplan_api_plan_response.json b/tests/magic_plan/magicplan_api_plan_response.json index bdf8b1bd3..16956f42d 100644 --- a/tests/magic_plan/magicplan_api_plan_response.json +++ b/tests/magic_plan/magicplan_api_plan_response.json @@ -1 +1 @@ -{"message":"OK","data":{"plan":{"id":"72efd2e0-b2b9-48cd-b82e-41f5b3166c9a","project_id":"eb23b4b9-19a4-4874-9a8d-554e350b7e70","name":"20 Larch Way BR2 8DU","address":{"street":"20 Larch Way","street_number":null,"postal_code":"BR2 8DU","city":"Bromley","country":"GB","longitude":0.0573414,"latitude":51.382861},"creation_date":"2026-05-25T15:48:48+00:00","update_date":"2026-06-03T08:51:53+00:00","thumbnail_url":"https:\/\/s3.amazonaws.com\/prod.plans.sensopia.com\/72efd2e0-b2b9-48cd-b82e-41f5b3166c9a\/plan.thumb","public_url":"https:\/\/cloud.magicplan.app\/plan\/72efd2e0-b2b9-48cd-b82e-41f5b3166c9a","cloud_url":"https:\/\/cloud.magicplan.app\/projects\/72efd2e0-b2b9-48cd-b82e-41f5b3166c9a","3d_url":"https:\/\/3d.magicplan.app\/#embed\/?key=OWJiNDI5YmM1ZWI5ODJlYmFiNDYyZmUxOTM4ZTc2NmQzZGYzNjA5MjZlMDQzNDNlMzIxOTk4MTFjNDY5M2ZkYcYjZ6i4MQhzK3HNkFrpRYw%2FPSRN%2FvCLu%2BKMjClzi4BYxQEtpulZnzfzAAV4feMAtqc%2FvajEeEiU419uOp2%2FtjPXiexQVxJJMWawfBWzStVG","workgroup_id":"677d01685458a","team_id":null,"created_by":{"id":"0e165295-6f60-443b-b3ac-779a6bc3a278","firstname":null,"lastname":null,"email":"jane.cooper@domna.homes"}},"plan_detail":{"magicplan_format_xml":"\nJane Cooper<\/value>2026-05-25<\/value>Sero<\/value>2.134<\/value>100<\/value>0<\/value>0<\/value><\/values>Sero<\/notes>Ground Floor<\/name>2.43<\/value>0.28<\/value><\/values><\/symbolInstance>677d01685458a<\/value><\/values><\/symbolInstance>m<\/value>m<\/value>m2<\/value>outdoors<\/value>m3<\/value><\/values><\/symbolInstance>m<\/value>1<\/value>30.Hinged.Pivot.Window<\/value>2<\/value>70<\/value>1700<\/value>2<\/value>m<\/value>m2<\/value>doors<\/value>m3<\/value>1.0<\/value>1<\/value>0.9<\/value><\/values><\/symbolInstance>m<\/value>0<\/value>m<\/value>m2<\/value>doors<\/value>m3<\/value><\/values><\/symbolInstance>m<\/value>0<\/value>m<\/value>m2<\/value>doors<\/value>m3<\/value><\/values><\/symbolInstance>m<\/value>m<\/value>m2<\/value>hvac<\/value>m3<\/value>0.1500<\/value><\/values><\/symbolInstance>677d01685458a<\/value><\/values><\/symbolInstance>m<\/value>1<\/value>External.Door<\/value>80<\/value>1700<\/value>1<\/value>m<\/value>m2<\/value>doors<\/value>m3<\/value><\/values><\/symbolInstance>m<\/value>1<\/value>30.Hinged.Pivot.Window<\/value>2<\/value>80<\/value>1700<\/value>2<\/value>m<\/value>m2<\/value>doors<\/value>m3<\/value>1.0<\/value>1.14<\/value>0.54<\/value><\/values><\/symbolInstance>m<\/value>1<\/value>30.Hinged.Pivot.Window<\/value>2<\/value>80<\/value>1700<\/value>2<\/value>m<\/value>m2<\/value>doors<\/value>m3<\/value>1.0<\/value>1.14<\/value>0.54<\/value><\/values><\/symbolInstance>m<\/value>0<\/value>m<\/value>m2<\/value>doors<\/value>m3<\/value>0.9<\/value><\/values><\/symbolInstance>m<\/value>1<\/value>30.Hinged.Pivot.Window<\/value>2<\/value>80<\/value>1700<\/value>2<\/value>m<\/value>m2<\/value>doors<\/value>m3<\/value>1.0<\/value>1<\/value>0.9<\/value><\/values><\/symbolInstance>m<\/value>m<\/value>m2<\/value>hvac<\/value>m3<\/value>0.1500<\/value><\/values><\/symbolInstance>m<\/value>m<\/value>m2<\/value>hvac<\/value>m3<\/value>0.1500<\/value><\/values><\/symbolInstance>677d01685458a<\/value><\/values><\/symbolInstance>677d01685458a<\/value><\/values><\/symbolInstance>m<\/value>1<\/value>70<\/value>m<\/value>m2<\/value>doors<\/value>m3<\/value><\/values><\/symbolInstance>m<\/value>m<\/value>m2<\/value>hvac<\/value>m3<\/value>0.2500<\/value><\/values><\/symbolInstance>m<\/value>1<\/value>30.Hinged.Pivot.Window<\/value>1<\/value>50<\/value>1700<\/value>m<\/value>m2<\/value>doors<\/value>m3<\/value>1.0<\/value>0.5<\/value>0.4<\/value><\/values><\/symbolInstance>m<\/value>m<\/value>m2<\/value>plumbing<\/value>m3<\/value><\/values><\/symbolInstance>m<\/value>0<\/value>m<\/value>m2<\/value>doors<\/value>m3<\/value><\/values><\/symbolInstance>m<\/value>0<\/value>m<\/value>m2<\/value>doors<\/value>m3<\/value>0.9<\/value><\/values><\/symbolInstance>m<\/value>0<\/value>m<\/value>m2<\/value>doors<\/value>m3<\/value><\/values><\/symbolInstance>m<\/value>1<\/value>70<\/value>m<\/value>m2<\/value>doors<\/value>m3<\/value><\/values><\/symbolInstance>m<\/value>m<\/value>m2<\/value>hvac<\/value>m3<\/value>0.1500<\/value><\/values><\/symbolInstance>677d01685458a<\/value><\/values><\/symbolInstance>structure<\/value>1<\/value>0<\/value><\/values><\/symbolInstance>3.19<\/value><\/values><\/point><\/floorRoom>