---
name: huni-printing-estimator
description: |
  후니프린팅 통합 관리 시스템: 자동 견적 + 외주 정산 자동화
  
  🔹 견적/가격: "견적 계산", "가격 알려줘", "얼마야", "무선책자 100부"
  🔹 조판/CTP: "CTP 몇 판?", "조판 어떻게?", "판수 계산"
  🔹 옵션 검증: "이 옵션 가능해?", "박가공 선택하면?"
  🔹 파일 가이드: "파일 어떻게 만들어?", "도련", "CMYK", "아웃라인"
  🔹 후가공 파일: "박가공 파일", "칼선 레이어"
  🔹 주문 시뮬레이터: "만들고 싶어요", "미리보기", "옵션 선택"
  🔹 제품 프리뷰: "책 모양", "완성품 보여줘"
  
  ⭐ 정산 관리 (NEW):
  🔹 정산 분석: "정산 분석", "비즈하우스 정산", "후지필름 정산"
  🔹 매칭 검증: "데이터 매칭", "불일치 확인", "정산 대사"
  🔹 금액 집계: "정산 금액", "VAT 계산", "총액"
  🔹 정산서 생성: "정산서 만들어", "엑셀 출력"
  
  지원 상품: 디지털인쇄, 스티커, 책자, 캘린더, 포스터, 아크릴, 굿즈, 파우치, 에코백 등 236개 MES상품
  지원 외주사: 비즈하우스, 후지필름(롯데ON)
---

# 후니프린팅 통합 관리 시스템

## 용어 정리

| 구분 | 설명 | 예시 |
|-----|------|-----|
| **상품** (Product) | 판매 단위의 대분류 | 프리미엄엽서, 무선책자 |
| **상품아이템** (ProductItem) | 상품의 사이즈/옵션 조합 | 73x98mm, A5 100P |
| **MES코드** | 상품 고유 식별자 | 001-0001 |
| **PScode** | 외부 연동 코드 | 14529 |

> ⚠️ 기존 용어 "품목" → "상품", "품목모델" → "상품아이템"으로 통일

## 회사 정보

| 항목 | 내용 |
|-----|-----|
| **상호명** | 후니프린팅 |
| **대표자** | 채훈희 |
| **전화** | 02-3409-8853 |
| **주소** | 서울 중구 필동로 80 낙원빌딩 2층 |
| **영업시간** | 10:00~18:00 (점심 12:30~13:30) |
| **휴무** | 주말/공휴일 |

---

# 상품마스터 구조 (v251220)

## 카테고리 체계

```
MAP 시트 (상품 계획표)         MES품목 (운영 상품)
├─ ▶︎ 서브카테고리 헤더        ├─ 실제 운영 중인 상품만
├─ → 참조 링크                └─ 236개 고유 MES코드
├─ ★ 미출시/개발중
└─ 전체 상품 목록
```

## 12개 카테고리 현황

| 코드 | 카테고리 | MES상품수 | MAP항목수 | 주요 상품 |
|:---:|---------|:--------:|:--------:|----------|
| 001 | 엽서 | 14 | 19 | 프리미엄엽서, 포토카드, 접지카드 |
| 002 | 스티커 | 16 | 20 | 반칼자유형, 낱장자유형, 규격스티커 |
| 003 | 인쇄홍보물 | 16 | 22 | 명함, 전단지, 리플렛, 상품권 |
| 004 | 포스터 | 18 | 22 | 아트포스터, 패브릭포스터, 실사 |
| 005 | 사인 | 10 | 19 | 배너, 현수막, 시트커팅 |
| 006 | 책자 | 8 | 11 | 중철, 무선, PUR, 트윈링, 하드커버 |
| 007 | 캘린더 | 5 | 11 | 탁상형, 벽걸이, 엽서캘린더 |
| 008 | 문구 | 21 | 23 | 다이어리, 노트, 클립보드 |
| 009 | 아크릴 | 21 | 25 | 키링, 마그넷, 스탠드, 명찰 |
| 010 | 라이프 | 32 | 47 | 거울, 코스터, 머그컵, 쿠션 |
| 011 | 에코백 | 55 | 67 | 레더파우치, 캔버스백, 타이벡 |
| 012 | 포장 | 20 | 22 | 배경지, 봉투, 라벨, 케이스 |
| | **합계** | **236** | **308** | |

> 💡 MAP > MES 차이: 서브카테고리 헤더(▶︎), 참조링크(→), 미출시(★) 포함

## 공정 흐름

```
인쇄공정 → 내부공정1 → 내부공정2 → 외주공정 → 출고
```

### 인쇄공정 유형 (7종)

| 공정 | 상품수 | 설비 |
|-----|:-----:|-----|
| 디지털인쇄 | 79 | 내부장비 |
| UV인쇄(쿠마) | 64 | 외주 |
| 패브릭출력(쿠마) | 23 | 외주 |
| 실사출력 | 21 | 내부장비 |
| 전사인쇄(쿠마) | 15 | 외주 |
| 화이트인쇄(쿠마) | 2 | 외주 |
| 도장 | 1 | 외주 |

### 내부공정 유형

| 공정1 | 공정2 |
|------|------|
| 레이저커팅 (17) | 미싱 (58) |
| 반칼커팅 (9) | 굿즈가공 (11) |
| 완칼커팅 (9) | 제본(트윈링) (9) |
| 시트커팅 (2) | 인쇄가공 (9) |

## 참조 파일

| 데이터 | 파일 |
|-------|------|
| 상품마스터 | `assets/data/product_master.toon` |
| 인쇄가격표 | `assets/data/price_table.toon` |
| 기본단가 | `assets/data/prices.toon` |

---

# Part A: 견적 시스템

## Quick Start

```
1. 가격 데이터 → assets/data/prices.toon (TOON 형식)
2. 가격 계산 → scripts/calculate_estimate.py
3. (책자) 조판 분석 → scripts/imposition_calculator.py
```

## 가격 데이터 (TOON)

가격 데이터는 `assets/data/prices.toon`에 TOON 형식으로 저장:
- 토큰 효율: JSON 대비 ~60% 절감
- 포함 데이터: 용지, 출력비, 제본비, 코팅, 후가공, 박가공, 포장, 할인율

```toon
# 수량 할인율 (prices.toon 발췌)
discount_tiers[6]{qty_min,qty_max,rate}:
  1,9,0
  10,49,0.03
  50,99,0.06
  100,499,0.10
  500,999,0.15
  1000,99999,0.20
```

## 가격 계산 공식

### 디지털인쇄
```
최종가 = (용지비 + 출력비 + 후가공비) × 수량 × (1 - 할인율)
```

### 책자 (중철, 무선, PUR)
```
최종가 = (내지비 + 표지비 + 제본비 + 후가공비) × 수량 × (1 - 할인율)
```

### 박가공 (엽서, 명함 등)
```
박가공비 = 동판비 + 박가공비

동판비: foil_copper_plate 테이블에서 (수량 × 면적mm) 조회
박가공비: 
  - 일반박 (금유광,은유광,동박,청박): foil_stamp_normal
  - 특수박 (먹유광,홀로그램,트윙클,적박): foil_stamp_special
  - 면적 150mm² 이하: price_base
  - 면적 150mm² 초과: price_large
```

### 수량 할인율
| 구간 | 할인율 |
|------|--------|
| 1-9 | 0% |
| 10-49 | 3% |
| 50-99 | 6% |
| 100-499 | 10% |
| 500-999 | 15% |
| 1000+ | 20% |

## 조판/CTP 가이드

### CTP 판수 공식
```
CTP 판수 = 대지수 × 색상수 × 인쇄면수
```

### 대지 크기
| 대지 | 페이지 | 용도 |
|-----|-------|-----|
| 4P | 4 | 리플렛 |
| 8P | 8 | 소형책자 |
| 16P | 16 | 표준책자 |

## 파일 제작 가이드

### 핵심 체크리스트
```
□ CMYK 색상 모드
□ 300dpi 해상도
□ 도련 사방 3mm
□ 안전영역: 재단선에서 3mm 안쪽
□ 서체 아웃라인
□ PDF 출판품질
```

### 도련/안전영역
```
┌─────────────────────┐
│   도련 (3mm)         │ ← 잘려나감
│  ┌───────────────┐  │
│  │   재단선      │  │
│  │ ┌─────────┐  │  │
│  │ │안전영역 │  │  │ ← 중요 내용
│  │ └─────────┘  │  │
│  └───────────────┘  │
└─────────────────────┘
```

## 주문 시뮬레이터

### 용도별 상품 추천
| 용도 | 추천 상품 |
|-----|---------|
| 포트폴리오 | 무선책자 |
| 팸플릿 | 중철책자 |
| 홍보물 | 엽서/전단 |
| 굿즈 | 스티커/포토카드 |

### 제품 미리보기
옵션 완료 시 `assets/templates/order-simulator.jsx`를 React 아티팩트로 렌더링

---

# Part B: 외주 정산 시스템 ⭐ NEW

## 지원 외주사

| 외주사 | 월 평균 | 매칭 방식 |
|-------|--------|---------|
| **비즈하우스** | 10,000+건 | 상품IDX ↔ 작업번호 |
| **후지필름** | 50~100건 | 거래처주문번호 ↔ MES주문번호 |

## 정산 워크플로우

```
1. 파일 업로드 → 외주사 + MES 파일
2. 시트 매핑 → 자동 감지
3. 데이터 매칭 → scripts/settlement_matcher.py
4. 불일치 검출 → 누락/수량차이
5. 금액 집계 → VAT 포함
6. 정산서 생성 → Excel 출력
```

## 비즈하우스 정산

### 파일 구조 (7개 시트)

| 시트명 | 행수(예시) | 용도 |
|-------|---------|-----|
| **인화업체정산** | 10,530 | 외주사 데이터 |
| **후니내역** | 10,521 | 내부 MES |
| **중복** | 11,555 | 매핑 테이블 |
| **보정** | 66 | 수동 보정 |
| **제주도서** | 72 | 도서산간 배송비 |

### 매칭 로직
```
인화업체정산.상품IDX 
  → 중복시트.상품IDX 
  → 중복시트.작업번호 
  → 후니내역.작업번호
```

### 제외 조건 (중복시트 비고 컬럼)
- `9월정산` → 이전 정산 완료
- `취소` → 취소 주문
- `환불` → 환불 처리

### 금액 계산
```
총 정산금액 = (상품금액 + 배송비 + 제주도서 + 보정) × 1.1

상품금액 = Σ(인화업체정산.총공급가격)
배송비 = Σ(인화업체정산.배송비)
제주도서 = Σ(제주도서.기타운임)
보정 = Σ(보정.합계금액)
VAT = 소계 × 10%
```

### 분석 결과 예시 (2025.11)
```
📊 매칭 결과
├─ 총 건수:        10,530건
├─ 매칭 성공:      10,499건 (99.71%)
├─ 이전 정산 제외:     22건
├─ 매핑 테이블 없음:    5건
└─ 내부 데이터 없음:    4건

💰 정산 금액
├─ 상품 공급가격:     ₩226,049,380
├─ 일반 배송비:       ₩ 24,273,900
├─ 제주도서 (72건):    ₩    407,000
├─ 보정 금액 (66건):   ₩ 20,382,990
├─ 소계:              ₩271,113,270
├─ VAT (10%):         ₩ 27,111,327
└─ 총 정산금액:       ₩298,224,597
```

## 후지필름 정산

### 파일 구조 (1개 시트)

| 시트명 | 행수(예시) | 용도 |
|-------|---------|-----|
| **Sheet** | 57 | 전체 정산 데이터 |

### 매칭 로직
```
후지필름.거래처주문번호 
  → 정규화 (S1 접미사 제거)
  → MES.주문번호
```

### 주문번호 정규화
```python
# M2511032226540S1 → M2511032226540
import re
normalized = re.sub(r'S\d+$', '', order_id)
```

### ⚠️ 금액 데이터 없음
후지필름 파일의 생산단가/금액 컬럼이 비어있음
→ **가격표 DB 연동 필요**

### 분석 결과 예시 (2025.11)
```
📊 매칭 결과
├─ 총 건수:           57건
├─ 매칭 성공:         27건 (유니크 주문)
├─ 후지에만 존재:      2건
└─ MES에만 존재:       3건

📦 품목별 수량
├─ 포토북:            96건
├─ 레더스트랩키링:     20건
├─ 반칼팬시스티커:     12건
└─ 아크릴키링:         7건

⚠️ 금액: 가격표 연동 필요
```

## 불일치 유형

| 유형 | 설명 | 처리 |
|-----|-----|-----|
| 매핑 없음 | 상품IDX가 중복시트에 없음 | 매핑 추가 |
| 내부 없음 | 작업번호가 후니내역에 없음 | MES 확인 |
| 수량 차이 | 외주 vs 내부 수량 불일치 | 수량 확인 |
| 이전 정산 | "9월정산" 표시 | 제외 |

## 정산 자동화 도구

정산 요청 시 `assets/templates/settlement-manager.jsx`를 React 아티팩트로 렌더링:

**기능:**
- 📁 파일 업로드 (드래그앤드롭)
- 🔍 자동 시트 감지
- 📊 매칭 결과 대시보드
- ❌ 불일치 항목 테이블
- 💰 금액 집계 (VAT 포함)
- 📋 품목별 집계
- 📥 Excel 내보내기

---

# 참조 문서

## 상품/가격 데이터 (TOON)

| 데이터 유형 | 참조 파일 | 내용 |
|---------|---------|------|
| **상품마스터** | `assets/data/product_master.toon` | 236개 MES상품, 12카테고리, 공정라우트 |
| **인쇄가격표** | `assets/data/price_table.toon` | 출력비, 제본비, 굿즈/파우치/에코백 |
| **기본단가** | `assets/data/prices.toon` | 용지 22종, 코팅, 후가공, 박가공 |

## 가격 데이터 상세

| 데이터 유형 | 참조 파일 |
|---------|---------|
| 용지 단가 (22종) | `prices.toon → paper` |
| 디지털출력비 (A3) | `price_table.toon → output_a3` |
| 제본비 (중철/무선/PUR/트윈링/하드커버) | `price_table.toon → binding_*` |
| 아크릴 단가 (3T) | `price_table.toon → acrylic_3t` |
| 스티커 가공비 | `price_table.toon → sticker_freeform` |
| 굿즈 가격 | `price_table.toon → goods_*` |
| 파우치 가격 | `price_table.toon → pouch_*` |
| 에코백 가격 | `price_table.toon → ecobag_*` |
| 수량 할인율 | `price_table.toon → discount_tiers` |
| **박가공 동판비** | `price_table.toon → foil_copper_plate` |
| **박가공비 (일반박)** | `price_table.toon → foil_stamp_normal` |
| **박가공비 (특수박)** | `price_table.toon → foil_stamp_special` |
| **박가공 종류** | `price_table.toon → foil_types` |

## 견적/주문

| 질문 유형 | 참조 파일 |
|---------|---------|
| 주문 옵션 | `references/order-guide.md` |
| 제품 미리보기 | `assets/templates/order-simulator.jsx` |
| 파일 제작 | `references/file-guide/` |
| 조판/CTP | `references/imposition/` |

## 정산

| 질문 유형 | 참조 파일 |
|---------|---------|
| 정산 개요 | `references/settlement/overview.md` |
| 비즈하우스 | `references/settlement/bizhouse.md` |
| 후지필름 | `references/settlement/fujifilm.md` |
| 정산 도구 | `assets/templates/settlement-manager.jsx` |

---

# 스크립트 사용법

## 견적 계산
```bash
python scripts/calculate_estimate.py \
  --product "무선책자" \
  --options '{"pages":100}' \
  --qty 50
```

## CTP 판수
```bash
python scripts/imposition_calculator.py \
  --pages 100 --signature 16 --colors 4
```

## 정산 분석
```bash
python scripts/settlement_matcher.py \
  --partner bizhouse \
  --file "02__비즈하우스.xlsx"
```

---

# 대화 시나리오

## 견적 문의
```
고객: "무선책자 A5 100P 50부 얼마예요?"

Claude: "A5 100P 무선책자 견적:
📋 옵션: A5, 100P, 아트지 120g
💰 50부 기준: ₩XXX,XXX (VAT별도)

📄 파일 규격:
• 내지: 154×216mm
• 표지: 310×216mm (책등 7mm)"
```

## 정산 분석
```
담당자: "비즈하우스 정산 분석해줘"

Claude: "파일 업로드 후 분석할게요.

[분석 결과]
📊 매칭: 10,499건 (99.71%)
❌ 불일치: 9건 (확인 필요)
💰 총 정산금액: ₩298,224,597

[React 아티팩트: 정산 대시보드]

정산서 Excel 생성할까요?"
```
