# task-3071 — 약관 수술분류표 파싱 + 정액 판정 기반 구축 (Phase 1)

레벨: Lv.3 (시스템 설계) · 대상 repo: InsuRo · 담당: dev3
승인: 제이회장님 2026-08-30 (C 경로 확정 · 3문서 승인)

## ★ 먼저 읽어라 — 3문서가 정본이다

이 파일은 요약이다. **아래 3문서를 반드시 먼저 읽고 그것을 따라라.**

- 계획서: `/home/jay/workspace/memory/plans/policy-surgery-table_260830/plan_policy_surgery_table_260830.md`
- 맥락노트: `/home/jay/workspace/memory/plans/policy-surgery-table_260830/context-notes_policy_surgery_table_260830.md`
- 체크리스트: `/home/jay/workspace/memory/plans/policy-surgery-table_260830/checklist_policy_surgery_table_260830.md`

이 요약과 3문서가 어긋나면 **3문서가 이긴다.**

## 목표

고객 증권 + 약관이 등록된 상태에서, 진단서·수술확인서만으로 **정액 담보 예상 보험금을
참고용 1차 검토**할 수 있게 하는 기반을 만든다. 판정 엔진 자체는 후속 태스크다.

## ★★ 단계적 판단구조 (회장 지시 — 이 순서를 바꾸지 마라)

```
서류에서 항목 추출 (KCD · 수술명 · 입퇴원일 · 진단확정여부)
  ↓
[1단계] 고객 증권에서 관련 담보 후보 1차 탐색   ← 약관 전체를 뒤지지 않는다
  ↓
[2단계] 설계사에게 후보 A~G 확인 질문 → 응답으로 확정
  ↓
[3단계] 확정된 담보만 약관에서 정밀 조회 (1~5종 분류 · 경증제외 여부 · 한도)
  ↓
[4단계] 참고용 1차 검토 결과
```

## 범위 (상세는 계획서 §3-1)

1. 약관 PDF 표 추출 — `extract_tables()` 를 약관 파싱 경로에 결선.
   **`server/policy_extract/proposal_parser.py:262` 의 검증된 패턴을 재사용하라. 새 표 파서를 만들지 마라.**
2. 수술분류표 저장소 `coverage_surgery_class` (DDL 은 SQL 파일 제출까지)
3. 진단서·수술확인서 추출기 (`server/claim_extract/` 확장 — t3067 구조)
4. 증권 1차 탐색 → 담보 후보 산출
5. 설계사 확인 절차 (HITL)
6. 수술명 → 1~5종 분류 판정
7. 경증제외 등 조건 판단

## ★★★ 절대 금지 (위반 시 전면 반려)

회장 지시 verbatim: **"절대 환각으로 인한 거짓정보를 활용하면 안 된다!! 큰일나!!!!"**

- **약관 전문을 통째로 저장하지 마라.** 회장 지시 "전문 통째 저장은 절대 금물".
  `server/routes/policy_terms_v1.py:23-24` 의 기존 설계 원칙과도 일치한다. 분류표 행만 구조화 저장.
- **수술분류(1~5종)를 모델 추론으로 채우지 마라.** "담낭절제술은 통상 몇 종" 같은
  일반지식 적용 = 즉시 실패. 회사·상품마다 별표가 다르다.
- **유사도 임계값으로 자동 확정하지 마라.** 제시는 하되 확정은 사람이 한다.
- **경증제외 해당 여부를 추정하지 마라.** 약관 근거 없으면 "조건 확인 필요"로 남긴다.
- KCD 코드를 표기 보정하지 마라. 원문 그대로.

## ★ 매칭 실패는 "멈춤"이 아니라 "확인 질문"

회장 지시: **"실제 고객의 보험증권에 수술명이 100% 일치하게 나타날 확률은 거의 없다."**

완전일치만 자동 처리하고 나머지를 막으면 기능이 죽는다. 대신:
- 정규화 후 완전일치 → 자동 확정
- 부분일치·유사 후보 → **후보 나열 + 설계사 확인 질문** (근거 page·표 행 동반)
- 후보 0건 → "약관에서 찾지 못함" + 수동 입력 경로

## 개인정보 (회장 지시)

- 진료 서류에는 환자명·주민번호·주소·연락처·병원명·의사명이 있다.
  **로그·커밋·보고서·스크린샷에 남기지 마라.** 검증 캡처는 반드시 마스킹.
- 테스트 픽스처는 **합성 데이터**. 실환자 데이터 0건.
- 업로드 파일을 영구 저장하지 마라. 파싱 후 폐기하거나 만료를 두어라.
- 샘플 원본은 `/home/jay/private/claim_samples/` 에 격리되어 있다(권한 700, git 밖).
  **repo 안으로 복사하지 마라.**

## 검증 (체크리스트 전항목 + 아래)

- 커버리지 수치를 보고하라. "적재 성공"만으로 완료 보고 금지 (t2978 은 메리츠 14/299=4.7%)
- 못 채운 항목은 조용히 넘어가지 말고 이유와 함께 남겨라 (t2986·t2960 재발 방지)
- **변이 테스트**: 추정 금지 분기를 무력화하면 테스트가 죽는가.
  변이 주입 전 `assert 원문 in 소스` 로 no-op 아님을 입증할 것

## 종결

- **PR 까지만. 머지하지 마라.** 프로덕션 DDL 적용도 하지 마라 (ANU 가 한다).
- 프로덕션 고객 데이터를 변경하지 마라.
- `CI_WATCH_HANDOFF` 12필드 생성.
- 콜백 prompt UTF-8 **≤3900 bytes** (`printf '%s' "$P" | wc -c`).
- `gh` 호출 시 `GH_TOKEN="$BOT_GITHUB_TOKEN"` 주입 (회장 개인 PAT 금지).
- 봉투에 "머지 불필요·미해결 없음" 을 근거 없이 쓰지 마라.
- 보고서에 **ANU 판단 요청 사항**을 분리해 명시하라.
