# [Lv.1 데이터정비] 소식지 보험사 감지 — 생보/손보 오매핑 교정(COMPANY_PATTERNS) + 버그고정 테스트 수정

## allowed_resources
```yaml
allowed_resources:
  paths:
    - "server/main.py"
    - "server/tests/**"
  forbidden_paths:
    - ".github/**"
    - "extension/**"
    - "src/**"
    - "server/migrations/**"
    - "server/newsletter_review.py"
    - "server/newsletter_cross_verify.py"
    - "server/newsletter_validation.py"
    - "server/pdf_extract.py"
  commands: ["pytest","python3","git"]
  merge_policy: "none"
  ttl_hours: 8
```
> ★ base=현 origin/main(cc59a02). 근거: 회장 지시 "DB생명 데이터 정비". Codex 감사(ANU 조율) 반영.

## 배경 (ANU+Codex 감사 확정)
`COMPANY_PATTERNS`(main.py:4891~)에 **생명보험사가 손해보험사 키의 패턴으로 잘못 등록**:
- `"DB손해보험": [..., "DB생명"]` / `"삼성화재": ["삼성생명", ...]` / `"KB손해보험": [..., "KB생명"]`
→ DB생명·삼성생명·KB생명 소식지가 손보사로 오감지. `_detect_company` 첫매칭 반환이라 파일명 우선(task-2918)이어도 손보 패턴에 먼저 걸림.
★ 그리고 **`server/tests/test_detect_company_filename.py`(대략 28~32행)가 `DB생명.pdf → DB손해보험` 을 기대값으로 이 버그를 고정**시켜 놓음 — 반드시 함께 교정.

## 작업 (데이터 교정, COMPANY_PATTERNS + 테스트)
1. **손보 키에서 생명 패턴 제거**: DB손해보험/삼성화재/KB손해보험 등에서 "DB생명"·"삼성생명"·"KB생명" 패턴 삭제.
2. **생보사 독립 키 추가**(주요사):
   - `"DB생명": ["DB생명"]`, `"삼성생명": ["삼성생명"]`, `"KB라이프생명": ["KB라이프생명","KB라이프","KB생명"]`, `"한화생명": ["한화생명"]`, `"교보생명": ["교보생명"]`, `"신한라이프": ["신한라이프"]`, `"NH농협생명": ["NH농협생명","농협생명"]`, `"미래에셋생명": ["미래에셋생명"]`, `"흥국생명": ["흥국생명"]`, `"동양생명": ["동양생명"]` 등.
3. **그룹명 단독 패턴 금지**: "한화"·"농협"·"흥국"·"교보"·"롯데" 같은 그룹명 단독 패턴 제거(손보/생보 혼동 유발). **업권이 드러나는 약칭만**(예: "한화손해","한화손보","한화생명"). 
4. **순서 원칙**: 정식 법인명 완전일치/긴 별칭 우선 → 짧은 약칭. 첫매칭 반환이므로 손보·생보 동시존재 그룹(DB/KB/삼성/한화/NH/흥국)은 **생보·손보 각 키의 구체 패턴만** 두어 상호 오매칭 방지.
5. **테스트 교정**: `test_detect_company_filename.py` 의 `DB생명 → DB손해보험` 기대를 **`DB생명 → DB생명`** 으로 수정 + 생보/손보 분리 신규 케이스(삼성생명→삼성생명, KB생명/KB라이프→KB라이프생명, DB손해보험→DB손해보험 유지 등).
6. (선택·범위 밖) validation.py·insurerType.ts 3중복 단일소스화는 **이 태스크 범위 아님** — COMPANY_PATTERNS(감지)만 교정. 단, 프론트 `classifyInsurer`(src/lib/insurerType.ts) 생보 목록과 **키 명칭 일관성** 참고.

## 제약
- main.py(COMPANY_PATTERNS + 관련 별칭맵) + 테스트만. review·validation·cross_verify·pdf_extract·src 불변. `_detect_company` 로직(파일명 우선)은 불변 — **데이터만** 교정. 기존 손보 감지 회귀 0.

## 검증
- `pytest server/tests/` 회귀 0(버그고정 테스트 수정 포함). 신규/수정: DB생명.pdf→DB생명 / 삼성생명→삼성생명 / KB생명·KB라이프→KB라이프생명 / DB손해보험→DB손해보험(손보 유지) / 그룹명 단독("한화"만 있는 텍스트)이 손보·생보 아무거나로 오매칭 안 함.
- ★ L1: 실제 "DB생명 위드유매거진 26.08.pdf"(파일명)로 `_detect_company` → **DB생명** 반환 확인, 보고서 기록.

## 완료 (★ 순서 B)
- main.py + 테스트만. **dev6 금지** — dev1(헤르메스). 커밋 → push → **★ push 확인** → finish-task foreground 1회 → .done. ANU 독립검증·머지·**전체 단일 재배포는 ANU**.

## goal_assertions (auto-generated)
- `pytest server/tests/`
