# 맥락노트 — InsuRo 증권분석/신규설계

**작성일**: 2026-08-12 · 단일소스: [[project_insuro_cancer_coverage_taxonomy_260812]]

## 배경 실증 (실제 약관 3건으로 검증)
- **메리츠 The좋은내Mom대로(2607)** = 세분형: 표적/면역/중입자/양성자/세기조절 항암치료비 각각 별도 정액. 통합형 없음
- **메리츠 통합간편건강보험(2607)** = 통합형: 암 주요치료비(연1회한·10년), 비급여 암 주요치료비(전액본인부담), 상급종합병원·국립암센터 통합암 주요치료비, 매월 계속암치료비
- **삼성 New내돈내삼(16402601)** = 통합형: 암 특정치료비(진단후 10년, 연간1회, 수술·약물·방사선 무엇이든 통합)
- **결정적 발견**: ① 같은 회사도 상품마다 세분/통합 다름 → 지식DB는 **상품(약관) 단위** ② 담보명 달라도 실질 같으면 매칭됨(삼성 암특정치료비 ↔ 메리츠 암주요치료비) → AI가 약관 실질 읽어 grouping 가능함을 실물로 증명
- 약관 통째 불가 실측: 871~1767p, 167만~347만자, 토큰 한계 8배+. 텍스트레이어 살아있음(pymupdf). JPG는 vision 필요

## 핵심 결정 근거
- **taxonomy = 회장 실무 정의를 그대로 grouping 기준으로**. 이유: AI가 축을 발명하려다 막힘("끝이 없다"). 회장이 담보 종류를 직접 정리 → AI는 "발명"이 아니라 "이 그룹 중 어디인지 분류"만. 훨씬 단단
- **담보명이 아니라 약관 실질(지급사유·지급방식·급여여부)로 분류**. 이유: `5대고액치료비암진단비`(이름은 치료비, 실질은 진단비)처럼 담보명 신뢰 시 오분류 폭증(아르고스)
- **grouping human-in-the-loop**. 이유: 회사별 표현 극도로 다양(한 담보가 여러 치료 커버 vs 나눔=N:M). AI 자동 100% 불가 → 애매하면 설계사 확인. 이게 오히려 (1) 품질↑ (2) 집단지성 축적 (3) 설계사 교육
- **R1 재계산 = 선형 확정 (회장 정정)**. 페르소나/Codex가 "비선형"이라 한 건 연령변경·신규설계 시나리오. 회장 시나리오(동일 피보험자·동일 담보 한도만 조정)는 `보험료=요율(상수)×가입금액`이라 선형. 경계(최소단위/상한)만 처리
- **R2 = AI 1차 판단자 + 설계사 drag 조정**. 로키 "근거뷰어 격하"는 미채택하되, drag 재배치로 오분류 방어 + drag=학습
- **R3 = 과설계 금지(회장 판단)**. 최소 위생(무학습 경로 아누시스템·기존 개인정보 체계)만. 나머지는 테스트 중 문제 시 대응
- **"학습"=지식DB 축적**(claude 모델 학습 아님). 아누시스템=stateless 도구. 회장 "학습 애매" 질문에서 명확화
- **파일 vs DB 분리**: 20MB 약관은 Drive, DB엔 발췌 조항(수 KB)만. "필요한 건 암 담보 발췌 조항뿐" → 용량·저작권 동시 해결
- **담보 canonical 상품 넘어 공유**: 회사가 상품 달라도 담보 공유·재활용. 담보 개정→관련 상품 약관 개정본. product↔coverage 다대다
- **규제**: 보장분석은 원수사 공식 프로그램의 관행이라 문제없음(회장). 신규설계 비교는 설계사 전용
- **사업모델**: 지식DB는 대리점에도 동일 공유(집단지성 극대화·InsuWiki 비전), 수익=서비스 이용료. 격리는 고객데이터/철학만

## 기각된 대안 (+ 사유)
- **속성 벡터 분해(초기 모코시/Codex 안)**: 회장 기각 — "설계사는 속성으로 생각 안 함, 역할로 묶는다". 단 내부 grouping 판정 근거로 최소 식별속성은 유지(겉=그룹, 속=최소근거)
- **동의어 사전(C안)**: 회장 기각 — "요즘 담보가 회사별 특색 극심해 고정 사전으로 정규화 불가"
- **로키의 "AI를 근거뷰어로 격하"**: 미채택하되 우려는 방어(근거조항 인용+drag+검수). Phase 0 실측으로 판정
- **헤르메스 비관습 "이름 우선 grouping, 약관 lazy-fetch"**: 채택 안 하되 **Phase 0에서 "이름만 grouping 정확도" 측정**으로 흡수 → 약관파서 투자 규모 근거로 활용
- **전면 PII 마스킹/약관 저작권 방어선 선구축**: 회장 판단 과설계 → 나중

## 주의사항 (미팅 도출 리스크)
- **오분류 엣지케이스**(아르고스): 이름≠실질, 통합형↔세분형 카디널리티 불일치(누락/이중계산), 갱신형 분리태깅, 급여/비급여 특약결합, OOV 신담보, 회사간 동의어 표면유사도 낮음
- **계산 오류**(토르·아르고스): 담보별 보험료 없는 증권→억지배분 금지(UNKNOWN, 금소법), 단위 함정(만원/원), 갱신형 현재보험료만 비교 왜곡. fail-closed 원칙
- **약관 발췌 손실**(로키·토르): 유사암 감액·면책 등 예외가 별표/주석에 숨음 → 발췌가 놓치면 오판단. 조항경계+참조 1-hop, OCR 필요는 명시적 실패(조용한 오완료 금지)
- **성능·비용**(토르): AI 호출 수×재처리 폭탄 → 담보 단위 batching, async 세마포어(subprocess 탈피), 2계층 캐시(추출/판정)+버전키, prompt caching
- **지식DB 오염 fan-out**(로키·오딘): 잘못 승인된 grouping이 전파. 승인이력·승인자·confidence·dispute·롤백. 골든셋 통과율 하락 시 배포 차단
- **cold start**: 지식DB 빈 초반 질문 폭증 → 회장이 씨앗 grouping + 먼저 테스트 후 오픈
- **약관 개정 추적**: 자동 감지 불가 → 신규 여부만 판별. Best=담보 변경점 diff 미리 안내
- **오류 fallback**: 약관 전체 수동입력 불가. 증권=OPUS OCR→설계사 검수·수정
- **오딘 3축 불가침**: canonical id·provenance(어느 조항)·상품버전 + confidence는 소급 불가라 MVP에도 필수. taxonomy는 코드 enum 아닌 **tag/label 테이블**로

## 기존 자산 (Codex 실사)
- `policy_analyzer.py`: run_policy_analysis(증권PDF→담보), DEFAULT_COVERAGES(실손/진단/치료/수술/일당/장애/기타 — 요양/사망/운전/생활은 표시계층 재매핑), calculate_remaining_payment(잔여개월)
- `composite_calculate_from_matrix`(main.py:7816): 보험사×담보 매트릭스 선형 환산 로직 존재하나 **복합설계 API용이라 신규설계 비교엔 별도 어댑터 필요**(Codex 정정: "재사용 가능"≠"이미 충족"). baseline=0 시 0폴백→UNKNOWN 변환 필요(아르고스)
- ohmy_coverages/ohmy_premiums, analysis_matrix/life_matrix("별도 슬롯 병합금지" 철학)
- 인슈위키 push 통로(main.py:6419) 이미 존재
- **부재**: 약관 지식DB, grouping 사전, 상품단위 taxonomy 매핑, 설계사 질문/확정 이력 테이블

## 미팅 3-cycle 최종결정 + 회장 판단 (260812)
- **판정: 만장일치 조건부 GO** (Codex·오딘·헤르메스·로키·아르고스). Phase 0=read-only 측정이라 착수 안전, NO-GO 0.
- **로키 최대 발견**: Phase 0 지표가 precision만이고 **발췌 recall(놓친 예외조항) 미측정** → 착수 전 recall 지표 추가로 해소.
- **회장 판단 3건(로키 대안 전부 기각)**:
  1. **순서 = 보장분석(①) 먼저** (로키 "신규설계 먼저" 기각 — 회장 원래 순서 유지)
  2. **보장분석 PDF에 자동 판정 포함** (로키 "사실표만+판정 구두" 기각 — 회장 스펙 유지)
  3. **공유DB Day1 유지** (로키 "조직격리 시작" 기각 — **회장 단독 사용·베타 전이라 오염 fan-out 없음**. 롤백/audit/저작권은 베타오픈 전 hard precondition으로 유예)
- **오딘 조건**(Phase 0 exit): canonical coverage master 엔티티 + product×coverage 다대다 + 담보 버전축 + audit 컬럼(confirmed_by/at/superseded_by) Phase 2로 앞당김.
- **아르고스 조건**(Phase 1 진입): 골든셋 Phase별 커버리지 매트릭스+최소그린, B4 UNKNOWN 4경로, 합산 불변식.
- **부수(로키)**: 신규설계는 신규상품·가입시점 연령요율=비선형 → Phase 3에서 연령 개입 견적은 선형금지·UNKNOWN(동일피보험자 한도조정만 선형).

## Phase 0a 측정 결과 — 결정 근거 갱신 (task-2937, dev1 헤르메스, 260812)
> 실측 산출물: `teams/dev1/task-2937-policy-spike/` · 판정표 `reports/PHASE0_VERDICT.md` · 보고서 `memory/reports/task-2937.md`
> read-only 스파이크. InsuRo 프로덕션 코드 변경 0 · PR 0 · 머지 0.

### 확정된 판정 (추정 → 실측으로 대체)
- **이름grouping 50.0%(42/84 암담보) → FULL_PARSER 확정.** 「≥80% lazy-fetch」 가정은 실측으로 기각.
  ★오류 성질이 중요: 이름으로 **확정한 건은 오판 0건**, 불일치 42건 전부 `UNKNOWN_ADVISOR`.
  → 이름 grouping은 **"틀리는" 게 아니라 "모르는"** 문제. Phase 1 grouping v0의 **미분류 버킷이 절반 가까이 나온다는 전제로 UX 설계**해야 함.
- **스키마 = wrap 확정** (extend ✗ / rewrite ✗). grouping 플래그 구조화 수용 **0/5**.
  최치명 = `DEFAULT_COVERAGES` 고정 화이트리스트 + 프롬프트 규칙1("리스트에 없는 담보는 포함하지 마세요", `policy_analyzer.py:178`)
  → 표적/면역/중입자/하이클래스 등이 **AI 출력 단계에서 원천 탈락**. plan.md 위임계획(「추출 유지·래핑」)과 일치.
- **표지 파싱 = textlayer-first + vision-fallback.** textlayer 94.4% > vision 72.2%(목표 90% 미달).
  vision 최약점이 `product_code`·`product_name` = **Drive 폴더 논리키 필드**라 vision 단독 채택은 위험.
  삼성은 판매버전·약관번호가 **문서 전체 1474p에 0건** → Drive 경로 스키마는 **회사별 필드 결손을 전제**로 설계.

### 로키 "숨은 예외조항" 지적 — 실측 답변 (형태 정정)
우려는 실재하나 **예상과 형태가 다르다**. 별표·주석 은닉은 소수(별표 3/294). 진짜 위험은 **표현방식**:
- 감액: 리터럴 recall **18.3%** — "감액"이란 단어 대신 **"1년 경과 전 50%/후 100%" 지급률 표**
- 면책: 리터럴 recall **1.7%** — "면책" 대신 **"암보장개시일=최초계약일+90일" 정의+도해**
- 지급방식 "정액": 그 단어가 약관 원문에 **아예 미등장**
→ **SEMANTIC_ONLY 42.1%** = 정보는 발췌문 안에 있으나 키워드로 못 잡는 구간.
→ **키워드 매칭 기반 lazy-fetch/경량 파서는 감액·면책을 구조적으로 놓친다.** FULL_PARSER 판정의 독립 증거.
→ 설계 반영: 발췌는 **조항 경계 단위 통째 확보**, 예외 판정은 **LLM이 의미로 읽어야** 함. 키워드는 후보 선별용으로만.
(진짜 발췌 손실 MISS 14.6% 별도 존재 — 8000자 절단이 주원인, 삼성 통합치료비 계열 19건 절단)

### 신규 발견 — 설계 제약으로 반영 필요
- **약관 발췌 recall 34.8%(80/230)** ❌ — 「암진단비(유사암제외)」·「유사암진단비」가 **통째 누락**.
  근본원인 = 담보 헤딩 정규식이 `N-M.`(하이픈)만 매칭, 메리츠 `13.` 형식 절 전부 탈락. 프로토타입 결함(수정 난이도 낮음).
  **독립 정답목록 `truth_coverage_list_*.json` = Phase 2 회귀 게이트**로 보존. "고쳤다" 선언은 이 목록 대비 재측정 필수.
- **별표 번호가 챕터별 로컬 재사용** — 메리츠 세분형에서 "별표2"가 p.649/p.764 서로 다른 내용.
  **별표 번호만으로 참조 특정 시 오참조 확정** → 참조 1-hop은 **조항이 속한 챕터 범위 내에서 해석**해야 함.
- **세분형 내부에도 급여범위 3분할** 존재(급여+비급여 / 비급여만 / 급여본인전액+비급여) — 치료비 3분할 구조가 세분형에 그대로 이식됨.
- **유사암 인정범위가 담보군별로 다름**(같은 상품 내에서도): 메리츠 치료비형은 기타피부암+갑상선암만, 검사비형은 제자리암·경계성종양까지 4종.

### taxonomy 동결 보류 — 회장 판단 2건
1. ★**삼성 "하이클래스" 브랜딩이 회장 taxonomy 정의와 역매칭.**
   명칭이 `하이클래스암특정치료비`(013/014)인 담보는 **항목별 한도가 아니라 3종 중 무엇이든 연1회 단일 정액**.
   정의(급여본인전액+비급여·항목별 한도)에 실제로 맞는 것은 `종합병원암전액본인부담(비급여포함)특정치료비Ⅱ/Ⅲ`(022/026/035/036/039).
   → **담보명 브랜딩을 신뢰하면 안 된다**는 이름≠실질의 결정적 실증. **동결 후 발견 시 지식DB 전체 오염**.
2. **taxonomy에 검사비/수술비/지원금 축 부재** — `암MRI촬영검사비`·`암특정단일유전자검사비`·`다빈치로봇암수술비`·`암복합치료회복지원금` 등
   명백한 암 담보인데 진단비/치료비 어디에도 안 맞아 `UNKNOWN_ADVISOR` 처리(미판정 3대 원인 중 하나).
   → (a)별도 그룹 신설 (b)보장분석 표의 다른 대구분 배치 (c)범위 외 중 회장 택일 필요.

### 검증된 것 (회장 taxonomy ↔ 실제 조항 일치)
- **통합치료비**(삼성 030~033·037/038): "연간 총 지급액은 보험가입금액을 한도" → `TX_INTEGRATED`/`TX_NONPAY_INTEGRATED` 정의와 **정확히 일치**
- **암특정치료비(정액)**(삼성 011): 수술/방사선/약물 중 무엇이든 받으면 연1회 가입금액 → `TX_SPECIFIC_FIXED` **일치**
- **세분형 가설**: 메리츠 세분형 문서에 통합형 담보 **전무**, 12개 개별담보로 완전 분해 → 「세분형 ↔ 암주요치료비 비교 필수」 전제 실증

### 측정 방법론 — 재사용할 통제 장치
- **blind 분리**: 이름 판정자는 조항·PDF·실질라벨 열람 금지(`names_only.json`만), 실질 라벨러는 이름판정 열람 금지 → 이름 vs 실질 비교의 독립성 확보.
- **독립 정답목록**: 발췌 엔진과 무관하게 약관 색인/목차에서 구축 → recall 분모를 발췌 결과에 의존시키지 않음.
- **하네스 자기검증**: 합성 픽스처로 손계산 기대값 vs 출력 11항목 전부 일치 확인 후 실측 사용.
- ★**라벨링 프로토콜 결함(교훈)**: quote를 verbatim이 아닌 요약으로 기록해 예외 recall 지표가 **7.8%로 오측정**됨(무효 처리).
  하네스는 정상이었고 **라벨 프로토콜이 결함**. → 향후 라벨링은 **verbatim 인용 강제**(`metrics_definition.md` 7절).
- **측정 신뢰도 한계**: 표본 약관 3건(손보 2사, **생보 0건**) · 1인 라벨링(교차 라벨링·IAA 미측정) · MISS 교차검증 79건 중 8건 표본.
