# Change: Refactor Dual-Track Architecture

## Why

目前雙軌制 OCR 系統存在多個已知問題和架構債務：

1. **Direct Track 表格問題**: `_detect_tables_by_position()` 無法識別合併單元格，導致 edit3.pdf 產生 204 個錯誤拆分的 cells（應為 83 個）
2. **OCR Track 圖片路徑丟失**: CHART/DIAGRAM 等視覺元素的 `saved_path` 在轉換時丟失，導致圖片未放回 PDF
3. **OCR Track cell_boxes 座標錯亂**: PP-StructureV3 返回的 cell_boxes 超出頁面邊界
4. **服務層過度複雜**: OCRService (2,326 行) 承擔過多職責，難以維護和測試
5. **PDF 生成器過於龐大**: PDFGeneratorService (4,644 行) 是單體服務，難以擴展

## What Changes

### Phase 1: 修復已知 Bug（優先級：最高）

- **Direct Track 表格修復**: 改用 PyMuPDF `find_tables()` API 取代 `_detect_tables_by_position()`
- **OCR Track 圖片路徑修復**: 擴展 `_convert_pp3_element` 處理所有視覺元素類型 (IMAGE, FIGURE, CHART, DIAGRAM, LOGO, STAMP)
- **Cell boxes 座標驗證**: 添加邊界檢查，超出範圍時使用 CV 線檢測 fallback
- **過濾極小裝飾圖片**: 過濾 < 200 px² 的圖片
- **移除覆蓋圖像**: 在渲染階段過濾與 covering_images 重疊的圖片

### Phase 2: 服務層重構（優先級：高）

- **拆分 OCRService**: 提取獨立的 `ProcessingOrchestrator` 負責流程編排
- **建立 Pipeline 模式**: 使用組合模式取代目前的聚合模式
- **提取 TableRenderer**: 從 PDFGeneratorService 提取表格渲染邏輯
- **提取 FontManager**: 從 PDFGeneratorService 提取字體管理邏輯

### Phase 3: 記憶體管理簡化（優先級：中）

- **統一記憶體策略**: 合併 MemoryManager、MemoryGuard、各類 Semaphore 為單一策略引擎
- **簡化配置**: 減少 8+ 個記憶體相關配置項到核心 3-4 項

### Phase 4: 前端狀態管理改進（優先級：中）

- **新增 TaskStore**: 使用 Zustand 管理任務狀態，取代分散的 useState
- **合併類型定義**: 統一 api.ts 和 apiV2.ts 為單一類型定義檔案

## Impact

- Affected specs: `document-processing`
- Affected code:
  - `backend/app/services/direct_extraction_engine.py` (表格檢測)
  - `backend/app/services/ocr_to_unified_converter.py` (元素轉換)
  - `backend/app/services/ocr_service.py` (服務編排)
  - `backend/app/services/pdf_generator_service.py` (PDF 生成)
  - `backend/app/services/memory_manager.py` (記憶體管理)
  - `frontend/src/store/` (狀態管理)
  - `frontend/src/types/` (類型定義)

## Risk Assessment

| 風險 | 嚴重性 | 緩解措施 |
|------|--------|----------|
| 表格渲染回歸 | 高 | 使用 edit.pdf 和 edit3.pdf 作為回歸測試 |
| 記憶體管理變更導致 OOM | 高 | 保留現有閾值，僅重構代碼結構 |
| 服務重構導致處理失敗 | 中 | 逐步重構，每階段完整測試 |

## Success Metrics

| 指標 | 目前 | 目標 |
|------|------|------|
| edit3.pdf Direct Track cells | 204 (錯誤) | 83 (正確) |
| OCR Track 圖片放回率 | 0% | 100% |
| cell_boxes 座標正確率 | ~40% | 100% |
| OCRService 行數 | 2,326 | < 800 |
| PDFGeneratorService 行數 | 4,644 | < 2,000 |
