git:20260914.8ad5d56 to git:20260915.e1e73ea

1 added, 1 removed. Audit A to A.

---
name: kr-patent-navigation-pane
description: 한국 특허 명세서 .docx의 Word 탐색창(Navigation Pane)에 섹션 헤더가 보이도록 outline level을 자동 부여하는 인프라성 스킬. 【발명의 명칭】, 【청구항 N】, 【도면 N】 등 한국 특허청 별지 양식의 섹션 제목 paragraph에 <w:outlineLvl>만 직접 삽입하여 외형(글자색·크기·폰트)은 그대로 두고 Word 탐색창에서 빠르게 점프 가능하도록 만든다. 부가로, 평탄하게 이어지는 【발명을 실시하기 위한 구체적인 내용】(S13 실시예 본문)을 도면 전환 경계마다 【N. …】 하위 챕터로 분할 삽입하여 탐색창에 트리로 보이게 하는 챕터 분할 기능도 포함한다. "탐색창", "navigation pane", "탐색창 손봐줘", "탐색창 안 나옴", "탐색창 비어 있음", "outline 안 나옴", "목차 사이드바", "섹션 점프", "outline level", "outlineLvl", "실시예 본문 챕터 나눠줘", "발명을 실시하기 위한 구체적인 내용 챕터 분할", "탐색창에 챕터 보이게", "상세 설명 단락을 챕터로"가 언급되거나 외부에서 받은 명세서·다른 변리사 작성 docx·kr-patent-docx-builder 외 경로로 만든 docx의 탐색창이 비어 있다는 맥락이면 사용. kr-patent-full-workflow의 docx 출력 직후 또는 최종 검토 직전 단계에서도 호출 가능.
---
# kr-patent-navigation-pane — 한국 특허 명세서 탐색창 복구
## 무엇을 하는가
외부에서 받았거나 일반 Word/한컴오피스로 작성된 한국 특허 명세서 .docx는 보통 섹션 제목(【발명의 명칭】, 【기술분야】 등)에 Heading 스타일이 잡혀 있지 않아 Word의 **탐색창(Navigation Pane)이 텅 비어 있다**. 100페이지짜리 명세서에서 청구항이나 특정 실시예로 점프하기가 매우 비효율적이 된다.
이 스킬은 명세서 외관을 전혀 건드리지 않으면서 탐색창만 살린다:
- `<w:p>` 안에 직접 `<w:outlineLvl w:val="N"/>`를 삽입 (Heading 스타일 부여 X)
- 글자색/크기/폰트/들여쓰기 — 모두 그대로
- Word "보기 → 탐색 창"에서 즉시 트리가 보임
## 언제 사용하는가
- 외부에서 받은 명세서 docx의 탐색창이 비어 있을 때
- 다른 변리사가 작성한 초안을 검토하는데 청구항 14, 실시예 6-3 등으로 빨리 점프하고 싶을 때
- `kr-patent-docx-builder`가 아닌 경로(예: 한컴오피스 변환, 일반 Word 작성)로 만든 docx
- 명세서 작성이 어느 정도 끝나 검토 단계에서 네비게이션이 필요할 때
## 언제 사용하지 않는가
- `kr-patent-docx-builder`로 생성한 docx — 빌더가 이미 outline을 부여함 (확인 후 진행)
- 명세서가 아닌 일반 docx (헤더 패턴 `【...】`이 매칭되지 않으면 아무것도 안 일어남 — 안전하지만 무의미)
## 출력 형식
스크립트 실행 후 다음을 출력한다:
1. 백업 파일 경로 (`{원본명}_원본백업.docx`)
2. 부여된 outline 항목 리스트 (레벨 + 헤더 텍스트)
3. 최종 저장 경로 (원본 자리에 in-place 덮어쓰기)
## 사용 방법
### 일반 호출
사용자가 .docx 경로를 알려주면 다음 명령을 실행한다:
```bash
- python "C:\Users\IPLAB\.claude\skills\kr-patent-navigation-pane\scripts\apply_navigation_pane.py" "<docx 경로>"
+ python "~/.claude/skills\kr-patent-navigation-pane\scripts\apply_navigation_pane.py" "<docx 경로>"
```
추가 옵션:
- `--no-backup` — 백업 생략 (비추천, OneDrive 등 자동 버전 관리가 있는 경우에만)
### 사전 점검
1. **파일이 Word에서 열려 있지 않은지 확인** — 열려 있으면 PermissionError로 실패. 사용자에게 닫아달라고 요청.
2. **OneDrive/Dropbox 등 동기화 폴더인 경우** — 동기화 충돌 가능. 작업 후 동기화 끝날 때까지 잠시 대기 권장.
3. **원본은 항상 백업됨** — 이름 충돌 시 `_원본백업(1).docx`, `_원본백업(2).docx`로 증가.
### 적용 결과 확인 방법
사용자에게: Word에서 파일 열고 **보기 → 탐색 창** 체크 → 좌측 사이드바에 outline 트리가 보이는지 확인.
## Outline 레벨 매핑 (한국 특허청 별지 양식)
| Lv | 헤더 |
|---|---|
| 0 | `【발명의 설명】`, `【청구범위】`, `【요약서】`, `【도면】` |
| 1 | `【발명의 명칭】`, `【기술분야】`, `【발명의 배경이 되는 기술】`, `【발명의 내용】`, `【도면의 간단한 설명】`, `【발명을 실시하기 위한 구체적인 내용】`, `【요약】`, `【대표도】`, `【청구항 N】`, `【도면 N】` |
| 2 | `【해결하고자 하는 과제】`, `【과제의 해결 수단】`, `【발명의 효과】`, `【본 발명 시작】`, `【N. …】` (예: 【1. 시스템 구성…】) |
| 3 | `【N-M. …】` (예: 【2-1. 좌표계 정합…】) |
레벨은 한국 특허청 별지 양식의 표준 계층을 따른다. 명세서마다 실시예 번호 체계가 다를 수 있으므로, 패턴이 매칭되지 않는 헤더는 outline 부여를 스킵한다(안전한 default).
## 부가 기능: 평탄한 S13 실시예 본문의 챕터 분할
위 Outline 매핑 표의 Lv2 `【본 발명 시작】`·`【N. …】`은 **헤더가 이미 존재**할 때만 outline이 부여된다. 그런데 외부 초안이나 ITER 10 정형을 따르지 않은 명세서는 【발명을 실시하기 위한 구체적인 내용】 아래가 **헤더 없이 수십 단락이 평탄하게** 이어져, 탐색창에서 부모 항목 하나만 보이고 내부 점프가 불가능하다. 이 경우 도면 전환 경계마다 `【N. …】` 하위 챕터 헤더를 **새로 삽입**한다.
### 챕터 경계 잡는 법
S13 본문은 도면을 순서대로 설명하므로, 다음 신호가 곧 챕터 경계다:
- `도 N은 … 도면이다. 도 N을 참조하면 …` — 새 도면 설명 시작
- `이상에서는 …에 대하여 설명하였으며, 이하에서는 …` — 명시적 전환 문장 (전환 문장은 **다음** 챕터에 포함)
- 도입부 해석 규정(서수·연결·단수복수·포함 등) ↔ 본 발명 개요 ↔ 마무리(컴퓨터 판독 매체·변형 실시)의 큰 단락 묶음
house 표준은 `kr-patent-detail-description-review`의 **"도입부 5단락 + 본 발명 7섹션 + 마무리 5단락"** 정형이다. 챕터 제목은 가능하면 이 7섹션 골격(`【본 발명 시작】` 다음 `【1. …】`~`【7. …】`)에 맞추고, 도면 개수가 많아 7섹션으로 안 떨어지면 도면 묶음 단위로 늘리되 제목에 `(도 N)`을 병기한다.
### 외관 정책 — 신규 헤더도 outlineLvl-only가 default
신규 챕터 헤더 단락은 **본문과 동일한 단락 스타일**로 만든 뒤 `<w:outlineLvl w:val="2"/>`만 부여하는 것이 이 스킬의 default다(특허청 양식 외관 보존). `Heading 3` 등 제목 스타일을 직접 쓰면 탐색창에는 뜨지만 굵은 파란 글씨로 바뀌어 양식에서 벗어난다 — 사용자가 "챕터 제목을 눈에 띄게" 요청한 편집용 사본일 때만 예외.
### 절차
1. python-docx로 본문을 읽어 paragraph 인덱스별 텍스트를 덤프하고 경계 인덱스를 확정한다.
2. **경계 단락의 안정 참조를 먼저 모두 확보**한 뒤(`targets = [(paras[i], title), …]`) `insert_paragraph_before(title, style=…)`로 삽입한다 — 인덱스가 밀려도 참조는 유효하므로 위→아래 순서 무관.
3. **새 파일로 저장**(원본 in-place 덮어쓰기 금지). 청구범위·부호의 설명·본문 텍스트는 한 글자도 수정하지 않고 헤더 단락만 추가한다.
4. 저장 후 헤딩 계층을 재출력해 부모(`발명을 실시하기 위한 구체적인 내용`, Lv1) 아래로 챕터가 한 단계 들여써졌는지 확인.
> ⚠️ 원본이 Word에서 열려 있으면 PermissionError. 사본을 떠서 작업하고, 작업 전 원본 창을 닫게 안내.
## 동작 원리 (왜 outlineLvl만 넣고 pStyle을 안 넣는가)
한국 Word의 기본 "제목 1~6" 스타일(styleId `1`~`6`)은 파란색·큰글씨·들여쓰기가 자동 적용되도록 정의되어 있다. `pStyle="1"`을 부여하면 탐색창에는 뜨지만 **명세서 외관이 한국 특허청 양식에서 벗어난다** (특허청 양식은 섹션 헤더가 검정·11pt·고정 위치).
탐색창의 본질은 outlineLvl 값이므로, paragraph의 `<w:pPr>` 안에 `<w:outlineLvl w:val="N"/>`만 직접 넣으면:
- 탐색창에는 정상적으로 노출 ✓
- 시각적 변화 없음 ✓
- styles.xml 수정 불필요 ✓
이미 outlineLvl이 부여된 paragraph는 새 값으로 교체(idempotent) — 여러 번 실행해도 안전.
## 헤더 매칭 규칙
paragraph의 **전체 텍스트가** `【...】` 단독일 때만 헤더로 인정한다 (앞뒤 공백 허용). 본문 중간에 인용된 `【...】`는 헤더로 보지 않음.
paragraph 안에서 헤더 텍스트가 여러 `<w:r>`(run)로 쪼개져 있어도(예: 한 run에 `【`, 다음 run에 `도면`, 다음 run에 `】`) 모두 합쳐 매칭한다 — 실제 docx에서 자주 발생.
## 의존성
- Python ≥ 3.8 (표준 라이브러리만 사용 — `zipfile`, `re`, `argparse`, `shutil`, `tempfile`)
- 추가 패키지 설치 불필요
## 다른 스킬과의 관계
- **kr-patent-docx-builder**: 이상적으로는 빌더가 처음부터 outlineLvl을 부여. 이 스킬은 빌더 외 경로로 만들어진 docx의 보완.
- **kr-patent-full-workflow**: Stage 8(docx 출력) 직후 또는 외부 검토용 사본 만들 때 호출 가능.
- **kr-patent-consistency-check**: 정합성 점검은 텍스트 내용에만 관심 — outline과 무관.
- **kr-patent-detail-description-review**: S13 본문의 "도입부 5단락 + 본 발명 7섹션 + 마무리 5단락" 정형의 소스. 챕터 분할 시 챕터 골격을 이 정형에 맞춘다.
## 누적 학습 항목
(이 섹션은 `kr-patent-skill-updater`가 작업 회고 후 자동으로 추가)
- **(2026-06-18, 사건 D 작업자 피로 예측)** 평탄한 S13 본문(헤더 0개, 약 80단락)을 도면 전환 경계 기준 12챕터로 분할 삽입. 경계는 `도 N을 참조하면` 및 `이상에서는…이하에서는` 전환 문장으로 정확히 잡혔다(anchor 12개 전부 1차 매칭). `paras[i]` 참조를 먼저 확보 후 `insert_paragraph_before`로 삽입해 인덱스 밀림 문제 없음. **개선점 2가지**: ① 신규 헤더에 `Heading 3` 스타일을 써서 외관이 굵은 파란 글씨로 바뀜 — 본 스킬 default(본문 스타일 + outlineLvl-only)와 어긋남, 다음엔 outlineLvl-only로. ② 12분할은 ad-hoc이었음 — house 표준인 "본 발명 7섹션"(detail-description-review)에 맞췄으면 검토 정형과 정합되었을 것. 원본이 Word에 열려 PermissionError → 사본 떠서 작업.