한국기계연구원(또는 유사 정부출연연) 내부용 **구매요구서 부속 양식**(규격서 + 용도설명서)을 HWPX 파일로 자동 생성한다. 견적서 PDF와 LLM_wiki(Obsidian vault) 컨텍스트를 바탕으로 양식을 채운다. 사용자가 "구매요구서", "규격서 작성", "용도설명서", "노트북/장비/SW 구매 양식", "purchase requisition", "구매 hwpx", "물품선정사유", "장비 구매 결재" 등을 언급하면 반드시 이 스킬을 사용할 것. 견적서 PDF가 있는 폴더에서 작업할 때 적극 트리거.
Resources
4Install
npx skillscat add nanomechanicskimm/my-tools/purchase-requisition Install via the SkillsCat registry.
SKILL.md
Purchase Requisition (구매요구서 부속 양식) Skill
무엇을 하는가
KIMM 구매요구 절차에서 첨부하는 두 가지 한컴 HWPX 양식을 자동으로 작성한다.
- 규격서 (Specification) — 품명·규격·단위·수량 + 제품 개요/주요 사양/시스템 요구사항 등 본문
- 용도설명서 (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단계: 입력 수집
- 작업 폴더 결정. 보통 사용자가 호출한 디렉터리.
/wrap-up호환을 위해LLM_wiki/to-do/<task>/안일 가능성이 높다. - 견적서 파일 찾기.
*견적*.pdf또는 사용자가 명시한 PDF.- PDF만 있으면
/pdf-to-md호출 → 같은 폴더에*.md생성 - 이미 MD가 있으면 재사용
- PDF만 있으면
- 샘플 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만 사용. 외부 웹 금지.
- 품명·용도 키워드(예: "메타초음파", "영상 복원", "노트북", "시뮬레이션")로 vault 검색:
qmd query "<키워드> 과제" # 또는 Grep - 우선 검색 위치:
LLM_wiki/LLM_work/active/— 진행 중 과제 노트LLM_wiki/brain/— 과제 개념·결정 노트LLM_wiki/LLM_work/report/— 관련 분석/보고서LLM_wiki/human/Permanent note/— 과제 본문 노트
- 사용자에게 상위 3~5개 후보 노트 제시 → 어느 것을 용도개요 근거로 쓸지 선택받기
- 선택된 노트의 핵심 문장을 추려 **물품선정사유 초안 (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 근거를 활용. 외부 사실 추정·웹 검색 금지.본 과제 "{{연구명}}"에서는 {{기술 분야}} 핵심 기술을 개발한다. - {{vault 근거 1}} - {{vault 근거 2}} - 이를 위해 {{품명}} {{모델명}}을 도입하여 {{구체 용도}} 한다. - {{본 장비 도입 시 기대 효과}}
6단계: 빌드 실행
payload.json작성 (스키마는scripts/build_forms.py상단 docstring 참조)- 실행:
python3 \ "~/.claude/skills/purchase-requisition/scripts/build_forms.py" \ <payload.json> <output_dir> - 산출물 명명:
(YYYYMMDD LLM) <품명약식> 규격서.hwpx/… 용도설명서.hwpxoutput_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_rowlabel을 그 양식의 한국어 라벨에 맞게 확장한다
범위 밖
- ERP에 자동 등록 (구매요구 시스템 입력은 사용자 직접 수행)
- 견적서 자동 수령 (사용자가 PDF를 폴더에 두어야 함)
- 외부 웹 검색을 통한 가격 비교
- 부가가치세 자동 계산 (견적서에 명시된 값을 그대로 사용)
참고 파일
references/field-guide.md— 각 필드의 의미·작성 원칙references/placeholder-schema.md— payload.json 스키마 + 키 매핑assets/samples/— 원본 샘플 (참고용, 수정 금지)assets/templates/— 스킬 내장 템플릿 (script가 사용)