version: "0.1" created_at: "2026-04-20" notes: | Phase 0 발주건 단위 baseline 전용 그룹 매핑. DB 스키마 건드리지 않고 가설적 grouping. Phase 1A에서 구조화 추출 결과 본 뒤에야 정식 domain 모델 결정. role enum: - order_xlsx: 발주서 원본 xlsx - order_pdf: 발주서 PDF 변환본 (xlsx에서 출력) - invoice: 전자세금계산서 PDF (세무 증빙) - statement: 거래명세표/명세서 PDF (출고·배송 증빙, 선택) 한 발주건에 invoice/statement 둘 다 있거나, 하나만 있거나, 둘 다 없을 수 있음. 샘플 소스: ~/Desktop/3월지급 → NAS /volume4/Document_Server/PKM/Inbox/발주/2026-03/ (2026-04-20 ingest 완료, 9 파일 / 3 발주건) 제외된 파일: - 신양철강 74,290원.pdf (TKP-26-0132 invoice 중복 사본, 같은 세금계산서의 공급받는자 보관용) - 260220-테크니컬코리아 - 복사본.jpg (이미지, OCR 필요 — Phase 0 범위 밖) - 면취날 연마.pdf (DCS엔지 별도 PO의 invoice, TKP-26-0112와 무관) 2026-04-20 추가: TKP-26-0112의 invoice(TrusBill print.pdf, doc_id 8944) 누락 발견 후 ingest. 초기엔 "invoice 없는 케이스"로 잡았으나 파일명이 invoice를 암시 안 해서 놓침 (실제로는 존재). doc_id 조회 쿼리: docker exec hyungi_document_server-postgres-1 psql -U pkm -d pkm -c \ "SELECT id, file_path, length(extracted_text) AS tlen, (SELECT count(*) FROM document_chunks WHERE doc_id = d.id) AS chunks FROM documents d WHERE file_path LIKE '%Inbox/발주/2026-03/%' ORDER BY id;" groups: - order_group_id: TKP-26-0114 description: "대연기업 845,000원 (2026-02, 발주 + 세금계산서)" docs: - doc_id: 8853 role: order_xlsx - doc_id: 8854 role: order_pdf - doc_id: 8855 role: invoice # "2월 26일.pdf" (전자세금계산서) - order_group_id: TKP-26-0132 description: "신양철강 74,290원 (2026-03, 발주 + 세금계산서 + 거래명세표, 가장 풍성한 세트)" docs: - doc_id: 8856 role: order_xlsx - doc_id: 8857 role: order_pdf - doc_id: 8858 role: invoice # "전자세금계산서.pdf" - doc_id: 8859 role: statement # "테크니컬 3-3일자 명세서(출고완료건).pdf" - order_group_id: TKP-26-0112 description: "신양철강 650,000원 (2026-02, plate 절단 1건, statement 없음)" docs: - doc_id: 8851 role: order_xlsx - doc_id: 8852 role: order_pdf - doc_id: 8944 role: invoice # "TrusBill print.pdf" (전자세금계산서, 공급가액 650,000)