# task-735.1 완료 보고서: PDF 통합 미해결 사항 처리

## SCQA

**S**: task-734.1에서 opendataloader-pdf 통합을 완료했으나, dev2 팀 테스트 파일 2건(pdfplumber/docling 직접 참조)과 insuwiki npm 실제 설치가 미해결 상태였다.

**C**: dev2 테스트 파일이 삭제된 함수(`_extract_with_pdfplumber`)와 제거된 fallback 로직을 참조하여 import 에러 및 테스트 실패가 발생하며, insuwiki/functions에서 `@opendataloader/pdf` 패키지가 미설치 상태였다.

**Q**: dev2 테스트 파일에서 pdfplumber/docling 직접 참조를 모두 제거하고, npm install + build를 성공시킬 수 있는가?

**A**: 두 파일 모두 opendataloader 기반으로 전환 완료. `test_ai_parser_integration.py` 13건 테스트 전체 통과, `test_docling_comparison.py` 구문 검증 + pyright 0 에러. npm install 성공(2 packages added), tsc 빌드 에러 0건.

---

## 작업 내용

### 작업 1: dev2 테스트 파일 수정

#### 1-1. `test_ai_parser_integration.py` (불칸 수행)
- `_extract_with_pdfplumber` import 제거 (함수 삭제됨)
- `import io` 제거 (BytesIO 더 이상 미사용)
- `TestDoclingNormalOperation` → `TestNormalOperation` 클래스명 변경
- `TestFallbackToPdfplumber` 클래스 전체 삭제 (5개 테스트) → `TestErrorPropagation` 클래스 신규 추가 (3개 테스트: RuntimeError/ValueError/Exception 전파 확인)
- `TestExtractWithPdfplumber` 클래스 전체 삭제 (3개 테스트)
- `TestTableToMarkdown` 유지 (변경 없음)

#### 1-2. `test_docling_comparison.py` (아르고스 수행)
- `import pdfplumber`, `import io` 제거
- `run_comparison()` 전체 재작성: pdfplumber vs Docling 비교 → opendataloader 단독 품질 검증
- 결과 JSON 키: `pdfplumber_*`/`docling_*`/`winner` 키 제거 → `odl_*` 키만 사용
- `count_special_chars()`, `extract_clause_numbers()` 유틸 함수 유지

### 작업 2: npm install @opendataloader/pdf
- `cd /home/jay/projects/insuwiki/functions && npm install @opendataloader/pdf`
- 결과: 2 packages added, 3 removed, 380 audited
- `npm run build` (tsc): 에러 0건 빌드 성공

---

## 수정 파일 목록

- `/home/jay/workspace/teams/dev2/tests/test_ai_parser_integration.py` — pdfplumber mock 제거, opendataloader 기반 전환
- `/home/jay/workspace/teams/dev2/tests/test_docling_comparison.py` — pdfplumber 비교 제거, opendataloader 단독 검증 전환
- `/home/jay/projects/insuwiki/functions/package-lock.json` — npm install로 자동 갱신
- `/home/jay/projects/insuwiki/functions/node_modules/` — @opendataloader/pdf 패키지 설치

---

## 테스트 결과

### test_ai_parser_integration.py: 13 passed (0.07s)
- TestNormalOperation: 5/5 PASSED
- TestErrorPropagation: 3/3 PASSED
- TestTableToMarkdown: 5/5 PASSED

### test_docling_comparison.py
- 구문 검증(ast.parse): OK
- pyright: 0 errors, 0 warnings

### npm build
- `npm install @opendataloader/pdf`: 성공 (2 packages added)
- `npm run build` (tsc): 성공 (exit code 0, 에러 0건)

---

## 발견 이슈 및 해결

### 자체 해결 (3건)
1. **`_extract_with_pdfplumber` import 에러** — 삭제된 함수 import 제거로 해결 (test_ai_parser_integration.py:20)
2. **pdfplumber fallback 테스트가 존재하지 않는 로직 테스트** — `TestFallbackToPdfplumber` 삭제 후 `TestErrorPropagation`으로 교체
3. **`test_docling_comparison.py`가 pdfplumber를 직접 import** — pdfplumber import 제거, opendataloader 단독 품질 검증으로 전환

### 범위 외 미해결 (1건)
1. **pyright `reportMissingImports` on `ai_parser`** — `sys.path.insert()` 동적 경로 추가를 pyright가 정적 분석 시 인식 불가. task-734.1 이전부터 존재하던 기존 이슈로 본 작업 범위 외.

---

## QC 검증 결과

Overall: **WARN** (Gate PASS — .done 파일 자동 생성)

- file_check: PASS (7,565 bytes + 9,288 bytes)
- data_integrity: PASS
- tdd_check: PASS (테스트 파일만 변경, 구현 파일 0개)
- style_check: PASS (black OK, isort OK)
- critical_gap: PASS
- pyright_check: WARN — `reportMissingImports` 2건 (ai_parser, doc_parser). `sys.path.insert()` 동적 경로 추가 방식을 pyright가 정적 분석 시 인식 불가. task-734.1 이전부터 존재하던 기존 이슈.
- test_runner: SKIP (관련 테스트 파일 자동 추론 0개 — 정당한 SKIP)
- api_health: SKIP (서버 작업 아님)
- schema_contract: SKIP (workers 미사용)
- scope_check: SKIP
