# InsuWiki 정제 월 2등분 필터 구현

## 개요
현재 정제 시 월 단위(예: 2026-03)로만 필터링 가능한데, 이를 **월 상반기(1일~15일)**와 **월 하반기(16일~말일)**로 나눠서 선택할 수 있게 한다.

## 배경
대량 카카오톡 파일(132,721줄 등) 정제 시 한 달치를 한 번에 돌리면 토큰 소진으로 중단될 수 있다. 반달 단위로 나눠서 정제하면 작업량이 절반으로 줄어 안정적으로 완료 가능.

## 수정 대상

### 1. 백엔드 — 파이프라인 month 필터 확장
**파일**: `scripts/kakao_knowledge/knowledge_extractor_v2.py`

현재 month 필터 (Line 920-922):
```python
if month:
    messages = [m for m in messages if m.date.startswith(month)]
```

수정: month 값이 `2026-03-H1` (상반기) 또는 `2026-03-H2` (하반기) 형태도 지원
```python
if month:
    if month.endswith("-H1"):
        base = month[:-3]  # "2026-03"
        messages = [m for m in messages if m.date.startswith(base) and int(m.date[8:10]) <= 15]
    elif month.endswith("-H2"):
        base = month[:-3]
        messages = [m for m in messages if m.date.startswith(base) and int(m.date[8:10]) >= 16]
    else:
        messages = [m for m in messages if m.date.startswith(month)]
```

### 2. 대시보드 API — selectedMonth 파라미터 확장
**파일**: `dashboard/server.py`

정제 API에서 selectedMonth를 그대로 파이프라인에 전달하면 됨. 별도 수정 불필요할 수 있으나, month 목록 생성 시 각 월에 대해 H1/H2를 추가해야 할 수 있음.

파일 업로드 시 months 목록 반환하는 로직에서, 각 월을 H1/H2로 분할:
- 기존: `["2026-01", "2026-02", "2026-03"]`
- 변경: `["2026-01-H1", "2026-01-H2", "2026-02-H1", "2026-02-H2", "2026-03-H1", "2026-03-H2"]`

### 3. 프론트엔드 — 월 선택 UI 변경
**파일**: `dashboard/components/InsuWikiView.js`

현재 월 선택 드롭다운 (Line 1145):
```jsx
{(refineUploadData.months || []).map(m => (
```

변경: 각 월이 `2026-03-H1`, `2026-03-H2` 형태로 표시
- 라벨: "2026-03 상반기 (1~15일)", "2026-03 하반기 (16~말일)"
- value: "2026-03-H1", "2026-03-H2"

## 검증 시나리오

1. **상반기 필터**: `--month 2026-03-H1`로 실행 시 3월 1~15일 메시지만 추출되면 성공
2. **하반기 필터**: `--month 2026-03-H2`로 실행 시 3월 16~31일 메시지만 추출되면 성공
3. **기존 호환**: `--month 2026-03`으로 실행 시 기존처럼 3월 전체가 추출되면 성공
4. **UI 표시**: 대시보드 InsuWiki탭에서 파일 업로드 후 드롭다운에 상반기/하반기 옵션이 표시되면 성공
5. **정제 실행**: 대시보드에서 상반기 선택 후 정제 시작 시 해당 기간만 처리되면 성공
6. **회귀**: 기존 InsuWiki탭 기능(정제 상태, 히스토리 등) 정상 동작하면 성공
