nanomechanicsKIMM

purchase-requisition

한국기계연구원(또는 유사 정부출연연) 내부용 **구매요구서 부속 양식**(규격서 + 용도설명서)을 HWPX 파일로 자동 생성한다. 견적서 PDF와 LLM_wiki(Obsidian vault) 컨텍스트를 바탕으로 양식을 채운다. 사용자가 "구매요구서", "규격서 작성", "용도설명서", "노트북/장비/SW 구매 양식", "purchase requisition", "구매 hwpx", "물품선정사유", "장비 구매 결재" 등을 언급하면 반드시 이 스킬을 사용할 것. 견적서 PDF가 있는 폴더에서 작업할 때 적극 트리거.

nanomechanicsKIMM 1 Updated 3mo ago

Resources

4
GitHub

Install

npx skillscat add nanomechanicskimm/my-tools/purchase-requisition

Install via the SkillsCat registry.

SKILL.md

Purchase Requisition (구매요구서 부속 양식) Skill

무엇을 하는가

KIMM 구매요구 절차에서 첨부하는 두 가지 한컴 HWPX 양식을 자동으로 작성한다.

  1. 규격서 (Specification) — 품명·규격·단위·수량 + 제품 개요/주요 사양/시스템 요구사항 등 본문
  2. 용도설명서 (Purpose Description) — 품명·금액·연구명·연구기간·연구책임자·자금명·용도개요·활용빈도·설치장소 등

견적서 PDF에서 품목·금액을 뽑고, LLM_wiki(Obsidian vault)에서 관련 과제 컨텍스트를 끌어와 초안을 만든 뒤, 사용자에게 빠진 필드를 질문하여 채운다. 마지막에 scripts/build_forms.py 가 두 hwpx 파일을 만든다.

언제 트리거되는가

  • 사용자가 "구매요구서/규격서/용도설명서 만들어줘", "이 견적서로 구매양식 작성", "노트북 구매 hwpx" 등을 요청
  • 작업 폴더에 견적서 PDF가 있고 사용자가 구매 결재 양식을 언급
  • KIMM 외부에서도 비슷한 양식이 필요한 경우(템플릿 구조가 동일하면 사용 가능)

의존 라이브러리

  • Python 3.10+
  • lxml (보통 conda env에 설치되어 있음)
  • 견적서가 PDF면 /pdf-to-md 스킬을 먼저 호출해 MD로 변환
python3 -c "import lxml; print(lxml.__version__)"

워크플로우 (반드시 순서대로)

1단계: 입력 수집

  1. 작업 폴더 결정. 보통 사용자가 호출한 디렉터리. /wrap-up 호환을 위해 LLM_wiki/to-do/<task>/ 안일 가능성이 높다.
  2. 견적서 파일 찾기. *견적*.pdf 또는 사용자가 명시한 PDF.
    • PDF만 있으면 /pdf-to-md 호출 → 같은 폴더에 *.md 생성
    • 이미 MD가 있으면 재사용
  3. 샘플 hwpx 무시. 작업 폴더에 규격서_샘플.hwpx 류가 있어도 스킬 내장 템플릿 (assets/templates/) 을 사용한다 (사용자 합의 사항).

2단계: 견적 데이터 추출

견적서 MD에서 다음을 추출한다:

추출 키 설명 예시
품명 표 첫 행의 품목 설명 (대표 1줄) Apple MacBook Pro 14 M5 Max
규격 품목의 사양 요약 (모델/구성) M5 Max(18C/40C/16NE), 128GB/2TB
단가 단가 (없으면 공급가액과 동일) 9,900,000
공급가액 부가세 제외 공급가 9,900,000
세액 세액 (또는 "포함") 포함
합계금액 한글 + 숫자 표기 금구백구십만원정 (₩9,900,000)
공급자 상호 + 대표 + 사업자번호 + 연락처 컴퓨터라이프(이진상)
견적일 견적 발행일 2026.04.16

견적서가 표가 아닌 자유 양식이면 사용자에게 누락 항목을 1개씩 묻는다.

3단계: Vault 컨텍스트 수집

LLM_wiki만 사용. 외부 웹 금지.

  1. 품명·용도 키워드(예: "메타초음파", "영상 복원", "노트북", "시뮬레이션")로 vault 검색:
    qmd query "<키워드> 과제"   # 또는 Grep
  2. 우선 검색 위치:
    • LLM_wiki/LLM_work/active/ — 진행 중 과제 노트
    • LLM_wiki/brain/ — 과제 개념·결정 노트
    • LLM_wiki/LLM_work/report/ — 관련 분석/보고서
    • LLM_wiki/human/Permanent note/ — 과제 본문 노트
  3. 사용자에게 상위 3~5개 후보 노트 제시 → 어느 것을 용도개요 근거로 쓸지 선택받기
  4. 선택된 노트의 핵심 문장을 추려 **물품선정사유 초안 (4~5 문장, 개조식)**을 작성

4단계: 케이스별 필드 질의

아래 항목을 번호 매긴 표로 한꺼번에 사용자에게 질문한다. 가능하면 vault에서 추론한 기본값을 ⓘ 로 제시한다.

# 필드 예시/질문
1 연구명(과제명) 풀네임 한 줄
2 연구기간 YYYY.MM.DD.-YYYY.MM.DD
3 연구책임자 성명
4 구매요구부서명 예: 나노디스플레이연구실
5 자금명 + 사업코드 예: 연구비(NK266F)
6 설치 사용 장소 예: 연구11동 305호
7 장비구분 예: 컴퓨터/노트북, S/W 라이센스(1년)
8 HSK 코드 노트북=8471.30-0000, 국내조달은 - 가능
9 활용예상빈도 시간/년 단위
10 기보유량 / 공동활용 보통 확인 불가능 / 없음
11 특기사항 비워둘 수 있음

답변 받은 뒤 5단계 진행 직전에 한 번 더 confirmation 표 출력 (오타·자금코드 실수 방지).

5단계: 본문 초안 작성

  • 규격서 본문 (sections 배열) — 보통 3개 섹션:
    • 1. 제품 개요 및 사용 목적 (2~4 문장)
    • 2. 주요 사양 (개조식 - 한 줄당 한 항목, 견적서 규격에서 추출)
    • 3. 시스템 요구사항 또는 공급 방식 (해당될 때만)
  • 용도설명서 용도개요 (4~5 문장, 개조식, 상세 표현):
     본 과제 "{{연구명}}"에서는 {{기술 분야}} 핵심 기술을 개발한다.
     - {{vault 근거 1}}
     - {{vault 근거 2}}
     - 이를 위해 {{품명}} {{모델명}}을 도입하여 {{구체 용도}} 한다.
     - {{본 장비 도입 시 기대 효과}}
    반드시 vault 근거를 활용. 외부 사실 추정·웹 검색 금지.

6단계: 빌드 실행

  1. payload.json 작성 (스키마는 scripts/build_forms.py 상단 docstring 참조)
  2. 실행:
    python3 \
      "~/.claude/skills/purchase-requisition/scripts/build_forms.py" \
      <payload.json> <output_dir>
  3. 산출물 명명: (YYYYMMDD LLM) <품명약식> 규격서.hwpx / … 용도설명서.hwpx
    • output_basename 필드에 (YYYYMMDD LLM) <품명약식> 까지만 넣으면 스크립트가 규격서/ 용도설명서 접미사를 붙임
    • YYYYMMDD = 작성일

7단계: 검증·보고

  • 두 파일이 만들어졌는지 ls로 확인
  • 사용자에게 파일 경로를 절대경로로 안내
  • "한컴오피스에서 열어보고 셀 누락/줄바꿈 깨짐이 있으면 알려달라" 한 마디 추가

산출물 예

LLM_wiki/to-do/purchase_meta_ultrasound/
├── 견적서(...).pdf
├── 견적서(...).md                                    ← /pdf-to-md
├── (20260417 LLM) 메타초음파 영상 복원 계산 하드웨어 규격서.hwpx
└── (20260417 LLM) 메타초음파 영상 복원 계산 하드웨어 용도설명서.hwpx

트러블슈팅

  • lxml import 오류 → pip install lxml
  • 셀이 비어 보임 → payload의 키 이름이 잘못되었을 가능성. references/placeholder-schema.md 확인
  • 본문 줄바꿈이 한 줄로 합쳐짐 → 용도개요/규격서 본문은 \n 개행으로 구분하면 스크립트가 paragraph로 분리한다
  • 한글 깨짐 — payload.json은 UTF-8로 저장
  • 표 칸이 추가/삭제됨 — 현재 스크립트는 셀의 address(row,col) 로 위치를 찾으므로 셀을 추가·삭제하지 않는 한 안전하다. 셀 분할이 필요하면 템플릿 hwpx를 직접 수정해야 한다.
  • 다른 양식이 필요해짐 — 다른 기관 양식이면 그 hwpx를 assets/templates/ 에 추가하고 스크립트의 find_row label을 그 양식의 한국어 라벨에 맞게 확장한다

범위 밖

  • ERP에 자동 등록 (구매요구 시스템 입력은 사용자 직접 수행)
  • 견적서 자동 수령 (사용자가 PDF를 폴더에 두어야 함)
  • 외부 웹 검색을 통한 가격 비교
  • 부가가치세 자동 계산 (견적서에 명시된 값을 그대로 사용)

참고 파일

  • references/field-guide.md — 각 필드의 의미·작성 원칙
  • references/placeholder-schema.md — payload.json 스키마 + 키 매핑
  • assets/samples/ — 원본 샘플 (참고용, 수정 금지)
  • assets/templates/ — 스킬 내장 템플릿 (script가 사용)

Categories