## REMOVED Requirements ### Requirement: Legacy PDF Generator Service **Reason**: `pdf_generator.py` (507 lines) was the original PDF generation implementation using Pandoc/WeasyPrint. It has been completely superseded by `pdf_generator_service.py` which uses ReportLab for low-level PDF generation with full layout preservation, table rendering, and image support. **Migration**: No migration needed. The new `pdf_generator_service.py` provides all functionality with improved features. #### Scenario: Legacy PDF generator file removal - **WHEN** the legacy `pdf_generator.py` file is removed - **THEN** the system continues to function normally using `pdf_generator_service.py` - **AND** PDF generation works correctly with layout preservation - **AND** no import errors occur in any service or router ### Requirement: Deprecated IoU Configuration Parameters **Reason**: `gap_filling_iou_threshold` and `gap_filling_dedup_iou_threshold` are deprecated configuration parameters that should be replaced by IoA (Intersection over Area) thresholds for better accuracy. **Migration**: Use `gap_filling_dedup_ioa_threshold` instead. #### Scenario: Deprecated config removal - **WHEN** the deprecated IoU configuration parameters are removed from config.py - **THEN** gap filling service uses IoA-based thresholds - **AND** the system starts without configuration errors ## ADDED Requirements ### Requirement: Unified Bbox Utility Module The system SHALL provide a centralized bbox utility module (`backend/app/utils/bbox_utils.py`) for consistent bounding box normalization across all services. #### Scenario: Bbox normalization from polygon format - **WHEN** a bbox in polygon format `[[x1,y1], [x2,y2], [x3,y3], [x4,y4]]` is provided - **THEN** the utility returns normalized tuple `(x0, y0, x1, y1)` representing min/max coordinates #### Scenario: Bbox normalization from flat array - **WHEN** a bbox in flat array format `[x0, y0, x1, y1]` is provided - **THEN** the utility returns normalized tuple `(x0, y0, x1, y1)` #### Scenario: Bbox normalization from 8-point polygon - **WHEN** a bbox in 8-point format `[x1, y1, x2, y2, x3, y3, x4, y4]` is provided - **THEN** the utility calculates and returns normalized tuple `(min_x, min_y, max_x, max_y)`