Files
sam-docs/rules/wip-production-policy.md

372 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 재공품(WIP) 생산 정책
> **작성일**: 2026-03-16
> **상태**: 설계 확정
---
## 1. 개요
### 1.1 목적
제조업에서 **재공품(WIP, Work-In-Process)** 생산이 왜 필요하고, SAM 시스템에서 어떻게 처리하는지 정의한다.
### 1.2 대상 독자
- SAM을 도입하는 모든 제조업체
- 시스템 운영자 및 생산관리 담당자
- 개발팀 (기능 설계 시 참고)
---
## 2. 재공품이란
### 2.1 정의
재공품(WIP)은 **완성품이 되기 전 단계의 중간 생산물**이다.
블라인드/스크린 제조업에서는 절곡 가공된 **가이드레일, 케이스, 마구리, 바텀바** 등이 대표적인 재공품이다. 이 부품들은 최종 제품(블라인드)에 조립되기 전까지는 재공품 상태로 재고에 보관된다.
```
원자재 (알루미늄 코일, 철판 등)
↓ 절곡 가공
재공품 (가이드레일, 케이스, 바텀바 등) ← 이 단계
↓ 조립
완성품 (블라인드, 스크린)
↓ 출하
고객 납품
```
### 2.2 재공품 vs 완성품 vs 원자재
| 구분 | 설명 | 예시 |
|------|------|------|
| **원자재** | 가공 전 소재 | 알루미늄 코일, 철판, SUS판 |
| **재공품 (WIP)** | 가공 완료, 조립 전 | 가이드레일, 케이스, 바텀바, 마구리 |
| **완성품** | 출하 가능 상태 | 완성된 블라인드, 스크린 |
---
## 3. 왜 재공품을 미리 만드는가
### 3.1 제조업의 현실
모든 제조업에는 **수주가 몰리는 성수기**와 **한가한 비수기**가 존재한다.
```
┌────────────────────────────────────────────────┐
│ 수주량 │
│ ▲ │
│ │ ╱╲ ╱╲ │
│ │ ╱╲ ╲ ╱╲ │
│ │╱ ╲╱ ╲╱ ╲╱ ╲ │
│ └──────────────────────────── ▶ 시간 │
│ 비수기 성수기 비수기 성수기 │
│ │
│ ✕ 비수기: 작업자 유휴 → 인건비 낭비 │
│ ✕ 성수기: 작업 폭주 → 납기 지연 │
└────────────────────────────────────────────────┘
```
### 3.2 재공품 미리 생산의 효과
```
┌─────────────────────────────────────────────────┐
│ │
│ ① 유휴시간 활용 │
│ 비수기에 작업자들이 놀지 않고 재공품 생산 │
│ → 인건비 대비 생산성 향상 │
│ │
│ ② 납기 단축 │
│ 수주가 들어오면 이미 만들어둔 재공품 사용 │
│ → 절곡 가공 시간 절약 → 납기 3~5일 단축 │
│ │
│ ③ 생산 평준화 │
│ 성수기 작업 부하를 비수기로 분산 │
│ → 잔업/야근 감소 → 품질 안정 │
│ │
│ ④ 긴급 수주 대응 │
│ 재고가 있으면 긴급 주문도 즉시 대응 가능 │
│ → 고객 만족도 향상 → 수주 확보 │
│ │
└─────────────────────────────────────────────────┘
```
### 3.3 어떤 품목을 미리 만드는가
모든 재공품을 무작정 만들지는 않는다. **다음 조건에 해당하는 품목**만 미리 생산한다:
| 조건 | 설명 | 예시 |
|------|------|------|
| **규격 표준화** | 사이즈/재질이 정해져 있음 | 가이드레일 2438mm, 3000mm |
| **수요 빈도 높음** | 자주 출고되는 품목 | 주력 제품의 핵심 부품 |
| **가공 시간 김** | 만들기 시간이 오래 걸림 | 절곡 가공 (절단→벤딩→용접) |
| **보관 용이** | 장기 보관해도 품질 저하 없음 | 금속 부품 (부식 방지 처리 완료) |
> **주의**: 주문 제작품(고객 맞춤 사이즈)은 재공품 대상이 아니다. 표준 규격품만 해당한다.
---
## 4. SAM 시스템에서의 처리 방식
### 4.1 설계 원칙
SAM은 **수주 → 생산지시 → 작업지시 → 생산**의 흐름으로 동작한다. 수주가 없으면 생산지시를 생성할 수 없는 구조이다.
재공품 생산은 수주가 없지만 생산이 필요한 경우이므로, **내부 오더(Internal Order)** 개념을 도입하여 해결한다.
```
일반 수주: 고객 주문 → 수주 등록 → 생산지시 → 작업지시 → 생산
재공품 생산: (주문 없음) → 재고생산 등록 → 생산지시 → 작업지시 → 생산
내부 오더 (order_type_code = 'STOCK')
```
### 4.2 기존 테이블 공유
재공품 생산을 위해 별도 테이블을 만들지 않는다. 기존 `orders` 테이블에 `order_type_code = 'STOCK'`을 추가하여 구분한다.
```
orders 테이블
├── ORDER → 고객 수주 (거래처 주문)
├── PURCHASE → 발주 (자재 구매)
└── STOCK → 재고생산 (내부 오더, 재공품)
```
**이유**:
- 하류 시스템(작업지시, 생산, 품질검사, 출하)을 **변경 없이** 재활용
- 생산 통계에 재공품 생산량도 **자동 포함**
- 이력 관리(누가, 언제, 얼마나 재공품을 생산했는지) **기존 구조로 추적**
### 4.3 재공품 생산 흐름
```
┌─────────────────────────────────────────────────┐
│ │
│ 1. 재고생산 등록 │
│ ├─ 품목 선택 (이미 정해진 재공품) │
│ ├─ 수량 입력 │
│ ├─ 생산 사유 입력 (선택) │
│ └─ order_type_code = 'STOCK' 자동 설정 │
│ │
│ 2. 재고생산 확정 │
│ ├─ 상태: DRAFT → CONFIRMED │
│ └─ ※ 매출 생성 안 함 (내부 오더이므로) │
│ │
│ 3. 생산지시 생성 │
│ ├─ 절곡 공정 자동 선택 │
│ ├─ 현장명 = '재고생산' 자동 설정 │
│ ├─ 작업예정일 = 오늘 날짜 │
│ └─ 작업지시(WorkOrder) 생성 │
│ │
│ 4. 절곡 작업 수행 │
│ ├─ 작업자가 절곡 공정 수행 │
│ ├─ 자재 투입 기록 │
│ ├─ 중간검사 │
│ └─ 작업 완료 처리 │
│ │
│ 5. 재고 입고 │
│ ├─ 완성된 재공품 → 재고(Stock Lot) 등록 │
│ └─ 향후 수주 시 재고에서 출고 │
│ │
└─────────────────────────────────────────────────┘
```
### 4.4 자재 매칭 (dynamic_bom)
재공품 생산에서 자재 투입 시 원자재를 자동 매칭하기 위해 **dynamic_bom**을 생성한다.
```
STOCK 주문 확정 (confirmAndCreateWorkOrders)
order.options.bending_lot에서 정보 추출
├─ prod_code (R/S/B/T/G/C)
├─ spec_code (M/S/C/D/T 등)
├─ length_code (24/30/35 등)
└─ material ("SUS 1.2T", "EGI 1.55T")
BendingInfoBuilder::buildDynamicBomForStockItem()
├─ partKey(품목명 파싱) → prefix(PrefixResolver) → BD 코드
├─ BD 코드 → items 테이블에서 item_id 조회
└─ DynamicBomEntry 생성
work_order_items.options.dynamic_bom에 저장
getMaterialsForItem() → dynamic_bom에서 자재 목록 조회
작업자 화면 자재 투입 모달에 원자재 LOT 표시
```
**기존 STOCK 호환**: `dynamic_bom`이 없는 기존 작업지시는 `bending_lot.material` 기반으로 RM 품목을 검색하는 fallback 로직이 동작한다.
**자재 투입 검색 필터**: 재공품 자재 투입 시 원자재(`item_type=RM`)만 검색되도록 프론트에서 자동 필터링한다.
### 4.5 작업 완료 자동 처리
모든 공정(슬랫/스크린/절곡)에서 작업 단계가 전부 완료되면 작업지시가 **자동으로 completed 상태**로 전환된다.
```
개소별 단계 완료 (toggleStepProgress)
autoCompleteWorkOrderIfAllStepsDone()
├─ 모든 step_progress가 completed인지 확인
├─ 미완료 step 자동 보정 (orphaned steps)
└─ 전체 완료 → work_order.status = 'completed'
프론트: work_order_status_changed 감지 → 작업 목록 새로고침
```
### 4.6 일반 수주와의 차이
| 항목 | 일반 수주 | 재공품 생산 |
|------|----------|-----------|
| 트리거 | 고객 주문 | 생산 계획 (유휴시간 활용) |
| 거래처 | 있음 | 없음 (내부 오더) |
| 견적 | 있음 (선택) | 없음 |
| 납기 | 고객 요청일 | 없음 (가능한 빨리) |
| 공정 선택 | BOM 기반 자동 매칭 | 절곡 공정 고정 |
| 자재 BOM | `buildDynamicBomForItem` (context+W+H) | `buildDynamicBomForStockItem` (bending_lot+partKey) |
| 금액/매출 | 계산 + 매출 인식 | 없음 |
| 현장명 | 고객 현장 | '재고생산' 고정 |
| 채번 | `ORD20260316xxxx` | `STK20260316xxxx` |
| 생산 결과 | 고객 출하 | 재고 입고 |
---
## 5. 재공품 재고 관리
### 5.1 재공품 재고의 생명주기
```
재공품 생산 완료
재고 입고 (Stock Lot 생성)
재고 보관 (창고/적재대)
수주 접수 → 재고 확인
재고에서 출고 → 조립 → 완성품
고객 출하
```
### 5.2 재고 확인 시점
수주가 들어오면 시스템에서 **해당 재공품이 재고에 있는지 자동 확인**한다:
- **재고 있음** → 절곡 공정 스킵, 바로 조립 단계로 이동 → 납기 단축
- **재고 없음** → 일반 생산 흐름 (절곡 공정부터 시작)
### 5.3 안전재고와 목표 수량
재고생산 등록 시 `목표 재고 수량(target_stock_qty)`을 설정할 수 있다.
| 항목 | 설명 |
|------|------|
| 목표 재고 수량 | 이 수량만큼 재고를 유지하고 싶은 목표 |
| 현재 재고 수량 | Stock Lot에서 조회 |
| 생산 필요 수량 | 목표 - 현재 = 부족분 |
---
## 6. 제조업 공통 패턴
### 6.1 Make-to-Stock (MTS) vs Make-to-Order (MTO)
SAM 시스템은 기본적으로 **MTO(주문생산)** 방식이다. 재공품 생산은 **MTS(재고생산)** 방식을 부분적으로 도입한 것이다.
| 전략 | 설명 | SAM 적용 |
|------|------|----------|
| **MTO** (주문생산) | 수주 → 생산 | 일반 수주 (`ORDER`) |
| **MTS** (재고생산) | 예측 → 생산 → 재고 | 재고생산 (`STOCK`) |
| **ATO** (주문조립) | 재공품 재고 + 수주 → 조립 | MTS + MTO 결합 |
블라인드/스크린 제조에서는 **ATO 패턴**이 가장 효율적이다:
```
MTS: 표준 재공품 미리 생산 (절곡)
ATO: 수주 → 재공품 + 맞춤 부품 → 조립 → 출하
납기 단축 + 유휴시간 활용
```
### 6.2 다른 제조업 적용 사례
재공품 생산은 블라인드/스크린에 국한되지 않는다. **모든 제조업**에서 동일한 패턴이 적용된다:
| 업종 | 원자재 | 재공품 (WIP) | 완성품 |
|------|--------|-------------|--------|
| **블라인드/스크린** | 알루미늄 코일, 철판 | 가이드레일, 케이스, 바텀바 | 블라인드, 스크린 |
| **가구** | 목재, MDF | 재단된 판재, 엣지밴딩 부품 | 책상, 의자, 캐비닛 |
| **자동차** | 철강, 플라스틱 | 프레스 부품, 엔진 블록 | 자동차 |
| **전자제품** | PCB 원판, 칩 | 조립된 PCB, 하우징 | 스마트폰, TV |
| **식품** | 밀가루, 설탕 | 반죽, 소스 | 빵, 과자 |
| **의류** | 원단, 실 | 재단 원단, 염색 원단 | 완성 의류 |
### 6.3 재공품 생산의 핵심 가치
```
┌─────────────────────────────────────────────────┐
│ │
│ 💰 비용 절감 │
│ 유휴 인건비를 생산으로 전환 │
│ → 작업자가 놀지 않고 가치를 창출 │
│ │
│ ⏱️ 납기 단축 │
│ 수주 → 즉시 조립 가능 (절곡 공정 스킵) │
│ → 고객 만족도 향상 │
│ │
│ 📊 생산 평준화 │
│ 성수기/비수기 작업량 균등화 │
│ → 잔업 감소, 품질 안정 │
│ │
│ 🚀 경쟁력 확보 │
│ 빠른 납기 = 수주 확보 │
│ → 매출 증대 │
│ │
└─────────────────────────────────────────────────┘
```
---
## 7. 주의사항
### 7.1 과잉 생산 방지
재공품을 너무 많이 만들면 **재고 비용 증가**와 **사장 재고(불용 재고)** 문제가 발생한다.
| 위험 | 설명 | 대응 |
|------|------|------|
| 과잉 재고 | 수요보다 많이 생산 | 목표 수량 설정, 주기적 재고 점검 |
| 사장 재고 | 규격 변경/단종으로 사용 불가 | 표준 규격품만 대상, 수요 예측 기반 |
| 보관 비용 | 창고 공간 점유 | 적정 재고 수준 유지 |
| 품질 저하 | 장기 보관 시 녹/변색 | 보관 환경 관리, 선입선출(FIFO) |
### 7.2 생산 대상 품목 선정 기준
```
❌ 주문 맞춤 제작품 (고객 사이즈)
❌ 수요 불확실 품목
❌ 원자재 가격 변동이 큰 품목
❌ 보관이 어려운 품목
✅ 표준 규격품 (정해진 사이즈)
✅ 출고 빈도 높은 품목
✅ 가공 시간이 긴 품목
✅ 장기 보관 가능 품목
```
---
## 관련 문서
- [재고생산관리 기능 설명](../features/sales/stock-production.md)
- [재고생산관리 API 명세](../frontend/api-specs/stock-production-api.md)
- [품목 정책](item-policy.md)
---
**최종 업데이트**: 2026-03-22