"""Element-label prefix routing and screenshot regression cases.""" from backend.core.notes_keyword_router import classify_note_cascade from backend.core.notes_routing import parse_element_label_prefix, route_lines_to_l3_sections MAIN_ROOF = ( "Main roof: Pitched valley-style roof with imitation slate covering. " "Some tiles have slipped, lifted, or are laid flat. Valley gutters appear to be in good condition. " "One ridge tile is broken. Repointing is required and verges are cracked." ) RAINWATER = ( "Rainwater fittings: UPVC gutters and gullies present. A blockage was noted. " "The point of discharge is unknown. Front right rainwater downpipe discharges below ground. " "Some fittings are brittle and faded." ) def test_element_label_main_roof(): assert parse_element_label_prefix(MAIN_ROOF) == ("D2", MAIN_ROOF) def test_element_label_rainwater_fittings(): assert parse_element_label_prefix(RAINWATER) == ("D3", RAINWATER) def test_screenshot_main_roof_routes_d2_not_d3(): sid, score, _ = classify_note_cascade(MAIN_ROOF) assert sid == "D2" assert score == 1.0 def test_screenshot_rainwater_routes_d3_not_d4(): sid, score, _ = classify_note_cascade(RAINWATER) assert sid == "D3" assert score == 1.0 def test_route_lines_batch(): routed, unmatched = route_lines_to_l3_sections([MAIN_ROOF, RAINWATER]) assert unmatched == [] assert MAIN_ROOF in routed["D2"] assert RAINWATER in routed["D3"]