# 재고생산관리

> **작성일**: 2026-03-16
> **상태**: 설계 확정

---

## 1. 개요

### 1.1 목적

수주 없이 **재고 목적으로 생산**하는 경우를 관리하는 기능이다.

SAM 시스템은 `수주 → 작업지시 → 생산`의 흐름으로 동작하므로, 수주가 없으면 작업지시를 생성할 수 없다. 재고생산관리는 **내부 오더(Internal Order)** 개념으로, 재고생산도 일종의 수주로 취급하여 기존 생산 흐름을 그대로 활용한다.

### 1.2 핵심 원칙

- 기존 `orders` 테이블을 **공유**한다 (별도 테이블 없음)
- `order_type_code = 'STOCK'`으로 일반 수주(`ORDER`)와 구분한다
- 하류 시스템(작업지시, 생산, 출하, 품질검사)은 **변경 없이 동작**한다
- 화면은 수주관리를 **단순화**한 형태이다

---

## 2. 수주관리와의 관계

### 2.1 테이블 공유 구조

```
orders 테이블
├── order_type_code = 'ORDER'    → 수주관리 (거래처 주문)
├── order_type_code = 'PURCHASE' → 발주관리
└── order_type_code = 'STOCK'    → 재고생산관리 (내부 오더)
```

### 2.2 기능 비교

| 항목 | 수주관리 (ORDER) | 재고생산관리 (STOCK) |
|------|-----------------|---------------------|
| 거래처 | ✅ 필수 | ❌ 불필요 |
| 견적 연결 | ✅ 가능 | ❌ 불필요 |
| 현장/납기/배송 | ✅ 사용 | ❌ 불필요 |
| 할인 | ✅ 적용 | ❌ 불필요 |
| 금액 계산 | ✅ 자동 | ❌ 불필요 (단가 0 가능) |
| 매출 인식 | ✅ 자동/수동 | ❌ 생성 안 함 |
| 개소/구역 (OrderNode) | ✅ N-depth 트리 | ❌ 불필요 |
| 품목 등록 | ✅ 상세 | ✅ 품목 + 수량만 |
| 작업지시 생성 | ✅ 동일 | ✅ 동일 |
| 생산/출하/품질검사 | ✅ 동일 | ✅ 동일 |
| 채번 접두사 | `ORD` | `STK` |

### 2.3 재고생산 전용 필드

`orders.options` JSON에 재고생산 전용 속성을 저장한다:

| 필드 | 타입 | 설명 |
|------|------|------|
| `production_reason` | string | 생산 사유 (예: "시즌 대비", "안전재고 확보") |
| `target_stock_qty` | number | 목표 재고 수량 |

---

## 3. 업무 흐름

```
재고생산 등록 (DRAFT)
    │  order_type_code = 'STOCK'
    │  품목 + 수량만 입력
    ↓
재고생산 확정 (CONFIRMED)
    │  ※ 매출 생성 안 함 (일반 수주와 차이)
    ↓
생산지시 생성 (WorkOrder)
    │  기존 수주→생산지시 흐름 동일
    ↓
생산 실행 → 품질검사 → 출하
    │  기존 생산관리 흐름 동일
    ↓
완료 (COMPLETED)
```

---

## 4. 메뉴 위치

```
판매관리
├── 거래처관리
├── 견적관리
├── 수주관리
├── 재고생산관리  ← 신규
└── 단가관리
```

---

## 5. 재공품(WIP) 개념

재고생산의 대상 품목은 **재공품(Work-In-Process)**이다.

- 수주를 받지 않았지만, 회사 내에서 **이미 정해진 절곡품**을 미리 생산
- 작업자들의 **유휴시간에 앞으로 나갈 물건을 미리 제작**하는 행위
- 실제 수주가 들어오면 이미 만들어둔 재공품을 사용하여 **납기 단축**

```
유휴시간 → 재공품 미리 생산 → 재고 적재
                                  ↓
실제 수주 → 재고에서 재공품 사용 → 납기 단축
```

### 5.1 현재 구현 범위 (Phase 1)

- ✅ 재고생산 등록/목록/상세/수정/삭제
- ✅ 생산지시 생성 (절곡 공정 자동 선택)
- ✅ 생산지시 목록에 표시
- ✅ 작업지시 목록에 표시
- ✅ 생산현황판에 표시
- ✅ 작업실적 조회에 표시

### 5.2 향후 과제 (Phase 2)

> **작업자 화면 절곡 탭 — 재공품 사양 정보 연동**

현재 STOCK 건은 OrderNode(개소)가 없어 BendingInfoBuilder가 동작하지 않는다.
절곡 작업자 화면에서 다음 정보가 누락된다:

| 누락 정보 | 원인 | 해결 방향 |
|----------|------|----------|
| W/H (가로/세로) | OrderNode.options 없음 | 품목 마스터에 규격 정보 보유 → 등록 시 가져오기 |
| bending_info | BendingInfoBuilder 실패 (rootNodes 없음) | 품목별 표준 BOM 활용 또는 수동 입력 |
| 동적 자재 목록 | dynamic_bom 미생성 | 품목별 표준 BOM에서 자재 목록 생성 |
| 제품코드 | nodeOptions 없음 | 품목 마스터의 item_code 활용 |

**해결 전략**: 재공품은 이미 정해진 규격품이므로, 품목관리의 품목 정보(규격, BOM)를
재고생산 등록 시 `work_order_item.options`에 채워넣는 방식으로 해결 가능.

---

## 6. API

기존 수주관리 API를 그대로 사용한다. `order_type=STOCK` 파라미터로 필터링한다.

> **상세 API 명세**: `frontend/api-specs/stock-production-api.md`

---

## 7. 영향범위 검토 결과

| 메뉴 | 수정 필요 | 비고 |
|------|:--------:|------|
| 재고생산관리 (신규) | ✅ React 구현 | 수주 화면 단순화 |
| 생산지시 목록 | ⚠️ 소규모 | 납기/거래처 `-` 표시 (프론트) |
| 생산현황판 | ❌ 없음 | project_name='재고생산' 정상 표시 |
| 작업지시 목록 | ❌ 없음 | null fallback 처리 완비 |
| 작업실적 조회 | ❌ 없음 | Order 정보 미참조 |
| 작업자 화면 (절곡) | ⚠️ Phase 2 | bending_info/W/H 누락 (향후 과제) |

---

## 관련 문서

- [재고생산관리 API 명세](../../frontend/api-specs/stock-production-api.md)
- [수주 DB 스키마](../../system/database/sales.md)
- [생산 DB 스키마](../../system/database/production.md)

---

**최종 업데이트**: 2026-03-16
