nanomechanicsKIMM

patent-defence

특허 거절이유 통지에 대한 당소의견안 분석 및 업데이트내역 자동 생성. '거절대응', '당소의견안', '의견제출통지서', '특허 거절', 'patent defence', '업데이트내역' 키워드 시 트리거.

nanomechanicsKIMM 1 Updated 3mo ago

Resources

3
GitHub

Install

npx skillscat add nanomechanicskimm/my-tools/patent-defence

Install via the SkillsCat registry.

SKILL.md

Patent Defence Skill

특허 명세서 제출 후 심사관의 거절이유 통지에 대응하는 의견서(당소의견안)를 분석하여, 최대한 넓은 권리를 확보하기 위한 업데이트 필요사항을 도출한다.

입력 요구사항

사용자에게 다음 파일 경로를 확인한다:

  1. 명세서 (pdf 또는 md) — 필수
  2. 의견제출통지서 (pdf 또는 md) — 필수
  3. 당소의견안 (pdf, docx, 또는 md) — 필수
  4. 출력 디렉토리 — 선택 (기본: 입력 파일과 동일 경로)

산출물

  1. 당소의견안_업데이트내역.md — 우선순위별 업데이트 테이블 (Obsidian 형식)
  2. 메일초안_변리사.md — 변리사 발송용 메일 초안
  3. (YYYYMMDD) critic 검증보고_{대상}.md — 심사관 페르소나 원문 대조 검증 보고 (Step 7.5)

모델 배정 전략

토큰 효율을 위해 각 Step의 작업 성격에 따라 Agent 모델을 배정한다:

Step 모델 이유
1 (파일 변환) haiku 기계적 스크립트 실행, 추론 불필요
1.5 (인용발명 수집) 메인 (스크립트 + WebFetch) KIPRIS(KR) / Google Patents(국외)로 인용발명 원문 PDF 다운로드 + md 변환
2 (문서 파싱) sonnet 구조화된 텍스트 추출, 패턴 인식
5 (대비 분석) opus (메인) 핵심 교차 분석, 권리범위 판단
6 (업데이트내역) sonnet 분석 결과를 템플릿에 맞춰 구조화
7 (메일 초안) haiku 정형화된 비즈니스 메일 작성
7.5 (critic 검증) opus (메인) 산출물의 사실 주장 전수를 원문과 대조, 심사관 재반박 시뮬레이션
8 (지침 갱신) sonnet 일반화 패턴 추출 및 중복 판별

Step 3, 4는 메인 플로우에서 직접 수행 (별도 Agent 불필요).

실행 단계

Step 0: 입력 수집 및 환경 확인

사용자에게 3개 파일 경로와 출력 디렉토리를 확인한다. 파일 존재 여부와 확장자(pdf/md/docx)를 검증한다.

또한 사용자의 발신자 정보(이름, 소속)를 확인한다. 이전 실행에서 guidelines.md에 저장된 정보가 있으면 재사용한다.

Step 1: 파일 변환 [Agent: haiku]

pdf/docx 파일을 md로 변환한다. 이미 md인 경우 스킵.

변환 방법: Python 스크립트로 변환 (PYTHONUTF8=1 필수)

  • pdf → md: pymupdf4llm 사용 (md_text = pymupdf4llm.to_markdown(path)). 이미지 기반 PDF(텍스트 0자)인 경우 fitz.open()으로 재시도하고, 그래도 0자이면 당소의견안 내 요약으로 대체.
  • docx → md: python-docx의 XML 직접 파싱으로 변경 내용(tracked changes) 포함 추출. w:ins → {+삽입텍스트+}, w:del → {-삭제텍스트-} 형식. 단순 para.text는 tracked changes를 누락하므로 사용 금지.

3개 파일을 Agent(model: haiku) 도구로 병렬 변환한다. 각 Agent에 변환 스크립트 전문을 제공하고, 글자 수를 보고하도록 지시한다.

변환 후 글자 수를 확인하여 누락 여부를 검증한다.

Step 1.5: 인용발명 원문 수집 [스크립트 + WebFetch 병렬]

당소의견안 파싱에서 추출한 인용발명 공보/출원번호를 이용하여 원문 PDF를 먼저 다운로드한 뒤 MD로 변환하여 수집한다.

왜 스크립트 우선인가: 과거에 WebFetch로 Google Patents 페이지만 크롤링하면 HTTP 503(봇 차단) 또는 출원번호↔공개번호 혼동으로 무관한 문헌이 수집되는 사례가 있었다. 특히 한국 특허는 **출원번호(10-YYYY-NNNNNNN)**와 **공개번호(10-YYYY-NNNNNNN)**의 형식이 동일해 Google Patents ID로 그대로 쓰면 전혀 다른 문헌을 받을 수 있다(예: KR 10-2023-0164912 → "닭꼬치 제조방법" 수신). 반드시 KIPRIS 서지조회로 공개번호를 먼저 확정한다.

권장 절차:

  1. PDF 다운로드 — ~/.claude/skills/_shared/scripts/download_patent_pdf.py 사용

    # 한국 특허 (출원번호 13자리)
    PYTHONUTF8=1 python3 \
      ~/.claude/skills/_shared/scripts/download_patent_pdf.py \
      --kr 1020230164912 1020230191689 \
      --out {출력디렉토리}/pdfs/ --verify
    
    # 국외 특허 (Google Patents ID)
    PYTHONUTF8=1 python3 \
      ~/.claude/skills/_shared/scripts/download_patent_pdf.py \
      --gp WO2020016250A1 US8088067B2 \
      --out {출력디렉토리}/pdfs/ --verify
    • KR: $HOME/Claude_Work/.env의 KIPRIS_REST_AccessKey로 getPubFullTextInfoSearch/getAnnFullTextInfoSearch 호출 → PDF 바이너리 직접 다운로드
    • 국외: Google Patents 페이지에서 patentimages.storage.googleapis.com PDF URL 스크레이핑(503 발생 시 재시도+백오프)
    • --verify는 첫 페이지 텍스트에서 공개번호/제목을 출력하여 정합성 즉시 확인
  2. MD 변환 — pdf-to-md 스킬(opendataloader-pdf)로 첫 5~10페이지를 변환

    PYTHONUTF8=1 python3 \
      ~/.claude/skills/pdf-to-md/scripts/pdf_to_md.py \
      --input {출력디렉토리}/pdfs/*.pdf \
      --output {출력디렉토리}/md/ --format markdown --pages "1-10"

    이미지 전용 PDF(스캔)는 PyMuPDF로 첫 페이지를 PNG 렌더링하여 시각 확인한다.

  3. 내용 정합성 검증 — 변환된 MD 파일 첫 50줄에서 다음을 확인하고 기대값과 불일치하면 재조회:

    • 공개번호/Pub. No. 일치
    • 발명의 명칭이 인용 사유와 부합
    • 출원인/Applicant가 인용한 권리자와 일치
  4. Agent 분석 — 검증 통과한 MD를 Agent(model: sonnet)로 병렬 분석하여 다음을 구조화된 markdown으로 추출:

    • Title, Abstract
    • Claims (전체 또는 독립항 중심)
    • Detailed Description 핵심 단락 (발명 구조, 층 구성, 광학/기계/전기 특성)
    • 본원발명과의 비교에 필요한 기술적 특징

출력: {출력디렉토리}/인용{n}_{공보번호}.md — 각 인용발명별 분석 md 파일. 포함할 내용:

  • 서지사항 (공보번호, 출원일, 출원인, 발명자, IPC)
  • Abstract
  • 핵심 구조 및 작동 원리
  • 청구항 요약 (독립항 중심)
  • 본원발명과의 핵심 차이 비교표 (구분 | 인용발명 | 본원 형식)

참조 논문: 당소의견안에서 참조하는 논문이 있는 경우, DOI 또는 오픈액세스 미러(PMC, arXiv, HAL, 저자 홈페이지)로 WebFetch하여 핵심 내용을 추출하고 {출력디렉토리}/{논문식별자}.md로 저장한다. DOI는 사전 CrossRef 조회로 실존 확인 필수(허구 DOI 사례 있음).

폴백: 자동 다운로드가 모두 실패(503/SSL/타임아웃)할 경우, {출력디렉토리}/download_report.md에 실패 목록과 수동 KIPRIS/Google Patents 링크를 정리하고 사용자에게 수동 확보를 요청한다.

상세 절차·번호 체계·실패 대응: ~/.claude/skills/_shared/patent_pdf_download.md 참조

Step 2: 문서 파싱 및 구조화 [Agent: sonnet]

3개 md 파일에서 핵심 정보를 추출한다. reference.md의 "1. 문서 파싱 체크리스트"를 따른다.

3개 파일을 각각 Agent(model: sonnet)로 병렬 파싱한다. 각 Agent에 해당 파싱 체크리스트를 제공하고, 구조화된 JSON 또는 markdown으로 결과를 반환하도록 지시한다.

2-1. 의견제출통지서 파싱 (Agent: sonnet)

  • 심사관 소속팀
  • 거절 법조항
  • 거절 대상 청구항 목록
  • 인용발명 목록 (번호, 공보번호, 공개일)
  • 청구항별 거절 논리

2-2. 명세서 파싱 (Agent: sonnet)

  • 기술분야
  • 청구항 전문 (독립항/종속항 구분)
  • 발명의 효과
  • 핵심 구성요소 (도면부호 포함)
  • 청구항에 미반영된 명세서 특징

명세서가 긴 경우(50p+), Grep으로 【기술분야】【청구범위】【발명의 효과】 섹션만 선별 읽기하여 토큰을 절약한다.

2-3. 당소의견안 파싱 (Agent: sonnet)

  • 보정안 청구항 (보정 텍스트, 삭제 여부)
  • 의견서 논증 구조
  • 대응 범위
  • 변리사 정보 (이름, 사무소, 사건번호)

Step 3: 분석 관점 자동 설정 (메인 플로우)

Step 2에서 추출한 정보로 분석 페르소나를 구성한다:

분석 페르소나:
- 역할: {심사관 소속팀}의 20년 경력 심사관
- 기술분야: {명세서 기술분야}
- 관점: 최대한 넓은 권리 확보를 위해 의견안의 약점을 식별

Step 4: 누적 지침 로드 (메인 플로우)

~/.claude/skills/patent-defence/guidelines.md를 읽어서 분석에 반영한다. 특히 "사용자 피드백" 섹션의 지침은 반드시 준수한다.

Step 5: 대비 분석 [메인 opus]

이 Step은 스킬의 핵심이므로 메인 대화(opus)에서 직접 수행한다. reference.md의 체크리스트를 기반으로 3문서 교차 분석을 수행한다.

5-1. 보정안 vs 의견서 논증 정합성 검증

  • 보정 청구항 텍스트가 의견서 논증과 일치하는지
  • 삭제 청구항에 "삭제" 명시 여부
  • 의견서에서 주장하는 구성이 실제 보정 청구항에 반영되었는지

5-2. 보정 청구항 권리범위 검토

reference.md의 "2. 보정안 권리범위 검토 체크리스트"를 따른다:

  • 메커니즘 상위 개념화 가능성
  • 공정 단계 최소 한정 원칙
  • 이동/배치 방식 한정 범위
  • 수치/재료 한정의 적절성
  • 특정 실시예 종속 여부

5-3. 의견서 논증 완성도 검토

reference.md의 "3. 의견서 논증 완성도 체크리스트"를 따른다:

  • 거절이유 대응 완전성
  • 미활용 논거 탐색 (구조적 차이, 현저한 효과)
  • 논증 구조의 논리적 일관성

5-4. 신규사항 추가 금지 확인

  • 보정 청구항에 추가된 모든 한정의 명세서 근거(line 번호) 확인

5-5. 오자·탈자 검수

당소의견안 전문을 검수하여 오자·탈자·문법 오류를 식별한다:

  • 오타 (예: "는" → "눈")
  • 조사 오류 (예: "하는 가가" → "하는 지가")
  • 호칭 불일치 (예: 수신처가 연구원인데 "귀사" 사용 → "귀원")
  • 번호 체계 충돌 (예: 동일 수준에서 "(3)" 중복)
  • 비표준 용어 (예: "참증" → "입증")

Step 6: 업데이트내역 생성 [Agent: sonnet]

Step 5 결과를 Agent(model: sonnet)에 전달하여 templates/업데이트내역_template.md 형식으로 정리한다.

Agent에 전달할 내용: Step 5의 분석 결과 전문 + 템플릿 + 우선순위 분류 기준.

우선순위 분류 (reference.md의 "4. 우선순위 분류 기준" 참조):

우선순위 기준
핵심 보정안과 의견서의 불일치, 형식 흠결 → 대응 실패 가능성
필수 권리범위에 직접 영향 (과도한 한정, 상위 개념화)
강력 권고 설득력 강화 (미활용 효과, 미활용 구조적 차이)
권고 논증 완성도 보강
선택 대안적 전략

각 항목에 당소의견안 line 번호 + 명세서 근거 line 번호를 포함한다.

출력: {출력디렉토리}/당소의견안_업데이트내역.md

인용 문서 출처 섹션: 업데이트내역 말미에 분석에서 인용한 모든 문서(본원 명세서, 인용발명, 참조 논문, 패밀리 출원)의 공보번호/DOI를 표로 정리한다. templates/업데이트내역_template.md의 "인용 문서 및 출처" 섹션 참조.

Step 7: 메일 초안 생성 [Agent: haiku]

Agent(model: haiku)에 업데이트내역 + 변리사 정보 + 발신자 정보 + templates/메일초안_template.md를 전달하여 메일 초안을 작성한다.

Step 6과 Step 7은 병렬 실행 가능 — Step 5 결과가 확정되면 두 Agent를 동시에 실행한다.

  • 수신: Step 2에서 추출한 변리사 정보
  • 발신: 사용자 정보 (Step 0에서 확인)
  • 본문: 업데이트내역을 카테고리별로 요약 (상세는 별첨 참조)
  • 기한: 의견제출통지서에서 추출한 제출 기한

주의: guidelines.md "사용자 피드백" 섹션의 제외 항목은 메일에도 반영하지 않는다.

출력: {출력디렉토리}/메일초안_변리사.md

Step 7.5: 심사관 Critic 검증 [메인 opus]

산출물(업데이트내역, 메일초안)을 사용자 제출 전에 심사 원문과 전수 대조 검증한다. 법률적 다툼의 소지가 있으므로 이 Step은 메인(opus)에서 직접 수행하며, 페르소나는 "{심사관 소속팀/Art Unit}의 경력 20년 심사관"으로 설정한다.

검증 원칙: 산출물의 모든 사실 주장은 인용 원문과 직접 대조한다. md 변환본, 요약, 이전 세션 기록을 신뢰하지 않는다.

  1. 대조 원문 확보

    • OA/FOA 원문: 스캔본(텍스트 0자)이면 pymupdf로 페이지별 PNG 렌더링(page.get_pixmap(dpi=150)) 후 시각 판독. md 변환본이 빈 파일이면 반드시 원본으로 회귀
    • 인용발명 원공보 PDF: 본문뿐 아니라 도면 페이지 전체 포함 판독
    • 출원명세서, 당소의견안 원문
  2. 전수 대조 항목

    • 절차 사실: OA/FOA 발송일(표지 Mail Date에서 확인, 요약이나 대리인 보고 불신), 기한 체계(SSP/최대기한/advisory 유예), 심사관 성명과 연락처, 페이지 및 단락(¶) 번호
    • 거절 구조: 법조항 × 청구항 × 인용문헌 매트릭스가 통지서 원문과 일치하는지
    • 인용발명 사실: 도면의 축 범위(파장, 온도 등)를 도면 이미지에서 직접 판독, 데이터의 물리량 종류가 청구항 한정과 대응하는지(예: 반사율 데이터를 투과율 한정의 근거로 매핑했는지), 청구항 문언, 단락 인용의 정확성(기계번역본 단락 번호 ↔ 원문 번호 대조)
    • 명세서 인용: 산출물이 인용한 모든 단락([00xx])의 문언과 수치를 원문과 대조
    • 재현 가능성: 원문이 작업 폴더에 없는 문헌에 대한 "검증 완료" 주장은 "재확인 필요"로 강등
  3. 심사관 재반박 시뮬레이션: 핵심 논거별로 Advisory Action/차기 OA에서의 반증 가능성을 검토

    • 소극 논거("데이터 부재")는 원문 데이터 하나로 붕괴하므로, 적극 논거("존재하는 데이터가 심사관 매핑을 부정")로 대체 가능한지 우선 검토
    • 이전 OA의 심사관 오류(수치 오독 등)가 이후 통지서에서 자체 정정되어 이미 소멸한 쟁점인지 확인. 소멸 쟁점의 정정 요청은 after-final 협조 국면에 역효과
    • 인용문헌의 데이터가 오히려 역인용될 수 있는 구간(예: 특정 대역에서 곡선 근접)을 식별하고 해당 류 주장을 금지 표시
  4. 판정 분류: 오류(원문 반증 가능, 제출 전 수정 필수) / 뉘앙스(과장, 부정확 표현) / 확인(원문 일치, 강점 목록화) / 보강(검증 중 발견된 신규 논거)

  5. 산출 및 반영: {출력디렉토리}/(YYYYMMDD) critic 검증보고_{대상}.md를 templates/critic검증보고_template.md 형식으로 저장하고 사용자에게 보고한다. 사용자 승인 시 수정 사항을 산출물에 반영하고 버전을 올리며(예: v2 → v3), critic 보고서에 적용 완료 기록과 잔여 확인 항목을 남긴다.

Step 8: 지침 갱신 [Agent: sonnet]

Agent(model: sonnet)에 이번 분석 결과 + 현재 guidelines.md를 전달하여, 일반화 가능한 지침을 추출하고 guidelines.md를 업데이트한다.

일반화 기준:

  • 특정 기술분야에 종속되지 않는 패턴만 추출
  • 기존 지침과 중복이면 추가하지 않음
  • 기존 지침을 구체화하는 경우 기존 항목을 업데이트
  • 각 지침에 발견일자 [YYYY-MM-DD] 기재
  • 최대 50건 제한

관련 스킬

  • patent-draft-review — 출원 전 명세서 초안 검토. 해당 건의 초안 검토 이력(청구항 구조 JSON·진보성 논거)이 있으면 Step 5 대비분석 입력으로 재사용해 분석 시간을 줄인다.
  • patent-incubation-auto / patent-incubation-interactive — 발명내용설명서 생성 단계(모순→청구항 논거의 출발점)
  • _shared/scripts/download_patent_pdf.py — 인용발명 공보 PDF 수집 공용 엔진 (Step 1.5에서 사용)

Categories