# InsuRo 보험료 파싱 후속 수정 — Pyright 에러 + 표 추출 최적화

## 작업 레벨: Lv.1

## 프로젝트
- InsuRo: `/home/jay/projects/InsuRo`
- 서버: `/home/jay/projects/InsuRo/server`

## 수정 사항 (2건)

### 1. main.py line 1071, 1104 Pyright 에러 수정
Supabase JSON 타입 추론 문제. 정확한 라인과 에러 내용을 확인 후 타입 단언 또는 타입 가드로 해결.

```bash
# 에러 확인
cd /home/jay/projects/InsuRo/server && python3 -m pyright main.py 2>&1 | grep "1071\|1104"
```

일반적으로 Supabase `.execute()` 결과의 `.data` 접근 시 타입 추론 문제 → `# type: ignore` 또는 적절한 타입 단언 적용.

### 2. _extract_pptx_tables slides 3회 순회 비효율 + _extract_pdf_tables 중복 텍스트
`server/main.py`의 `_extract_pptx_tables()` 함수:

**현재 문제**: 슬라이드를 3회 순회 (제목 추출 / 표 추출 / 텍스트 추출)
**수정**: 슬라이드 1회 순회로 통합 — shape 순회하면서 제목, 표, 텍스트를 한 번에 처리

```python
def _extract_pptx_tables(file_path: str) -> str:
    from pptx import Presentation
    prs = Presentation(file_path)
    result_parts = []
    
    for slide in prs.slides:
        title = ""
        table_parts = []
        text_parts = []
        
        for shape in slide.shapes:
            if shape.has_table:
                table = shape.table
                # 표 추출...
                table_parts.append(...)
            elif shape.has_text_frame:
                text = shape.text_frame.text.strip()
                if not title and text and len(text) < 200:
                    title = text
                else:
                    text_parts.append(text)
        
        if title:
            result_parts.append(f"\n### {title}\n")
        result_parts.extend(table_parts)
        result_parts.extend(text_parts)
    
    return "\n".join(result_parts)
```

`_extract_pdf_tables()` 중복 텍스트:
- pdfplumber `extract_tables()`와 `extract_text()` 결과가 중복될 수 있음
- 표 데이터가 있는 영역의 텍스트를 제외하거나, 표 모드에서는 `extract_tables()`만 사용

## affected_files
- `server/main.py` (수정 — Pyright 에러 + 표 추출 최적화)

## 검증 시나리오
1. Pyright 에러 0건 (또는 기존 대비 감소)
2. _extract_pptx_tables — 슬라이드 1회 순회로 동일 결과
3. _extract_pdf_tables — 중복 텍스트 제거
4. npm run build 성공
5. 서버 재시작 정상
