# 수주 데이터 스키마 분석

> 분석 일시: 2024-12-18
> 소스: design/mes기획서_리액트/src/configs/orderMasterConfig.js

## 수주 유형 (entityTypes)

| ID | 코드 | 이름 | 설명 |
|----|------|------|------|
| 1 | NORMAL | 일반수주 | 견적 기반 일반 수주 |
| 2 | ADDITIONAL | 추가수주 | 기존 수주 추가분 |
| 3 | DIRECT | 직접수주 | 견적 없이 직접 입력 |

## 제품 카테고리 (생산공정 분류)

| ID | 코드 | 이름 |
|----|------|------|
| 1 | SCREEN | 스크린 |
| 2 | FOLD | 절곡 |
| 3 | SLAT | 슬랫 |
| 4 | ASSY | 조립 |

## 섹션 구조 (masterSections)

| ID | 키 | 이름 | 타입 | 설명 |
|----|-----|------|------|------|
| 1 | basicInfo | 기본정보 | general | 수주 기본 정보 |
| 2 | deliveryInfo | 납품정보 | general | 납품 관련 정보 |
| 3 | itemInfo | 품목정보 | **multiRow** | 수주 품목 목록 |
| 4 | productionSpec | 제작사양 | **multiRow** | 제작 상세 사양 |
| 5 | amountInfo | 금액정보 | general | 금액 합계 |
| 6 | etcInfo | 기타정보 | general | 기타 정보 |

---

## 필드 상세 (masterFields)

### 기본정보 (basicInfo)

| ID | 필드키 | 필드명 | 입력타입 | 필수 | 자동생성 | 설명 |
|----|--------|--------|----------|------|----------|------|
| 1 | orderNo | 수주번호 | text | ✅ | ✅ | 수주 식별 번호 |
| 2 | orderDate | 수주일 | date | ✅ | - | 수주 등록일 |
| 3 | quoteNo | 견적번호 | text | - | - | 연결된 견적번호 |
| 4 | customerName | 거래처명 | text | ✅ | - | 거래처명 |
| 5 | customerId | 거래처ID | text | - | - | 거래처 식별자 |
| 6 | siteName | 현장명 | text | ✅ | - | 설치 현장명 |
| 7 | manager | 담당자 | text | - | - | 거래처 담당자 |
| 8 | contact | 연락처 | text | - | - | 담당자 연락처 |

### 납품정보 (deliveryInfo)

| ID | 필드키 | 필드명 | 입력타입 | 필수 | 옵션 |
|----|--------|--------|----------|------|------|
| 10 | dueDate | 납기일 | date | ✅ | - |
| 11 | deliveryMethod | 배송방법 | select | - | 직접배차, 상차, 택배, 화물, 직접배송 |
| 12 | deliveryAddress | 납품주소 | text | - | - |
| 13 | receiverName | 수령자명 | text | - | - |
| 14 | receiverPhone | 수령자연락처 | text | - | - |

### 품목정보 (itemInfo) - 다중행

| ID | 필드키 | 필드명 | 입력타입 | 필수 | 옵션/검증 |
|----|--------|--------|----------|------|----------|
| 20 | productCode | 품목코드 | text | - | - |
| 21 | productName | 품목명 | select | ✅ | 국민방화스크린셔터, 방화셔터, 방연셔터 |
| 22 | category | 카테고리 | select | - | 스크린, 절곡, 슬랫, 조립 |
| 23 | floor | 층 | text | - | - |
| 24 | location | 위치 | text | - | - |
| 25 | openWidth | 개구폭(mm) | number | ✅ | min:500, max:15000 |
| 26 | openHeight | 개구높이(mm) | number | ✅ | min:500, max:10000 |
| 27 | qty | 수량 | number | ✅ | min:1 |
| 28 | unitPrice | 단가 | number | - | - |
| 29 | amount | 금액 | number | - | **자동계산** |

### 제작사양 (productionSpec) - 다중행

| ID | 필드키 | 필드명 | 입력타입 | 자동계산 | 옵션 |
|----|--------|--------|----------|----------|------|
| 30 | prodWidth | 제작폭(mm) | number | ✅ | 개구폭+140 |
| 31 | prodHeight | 제작높이(mm) | number | ✅ | MAX(개구높이+400, 2950) |
| 32 | guideRailType | 가이드레일형태 | select | - | 백면형, 양면형, 편면형 |
| 33 | guideRailSpec | 가이드레일규격 | select | - | 120-70, 150-80, 180-90 |
| 34 | finish | 마감 | select | - | SUS마감, 분체도장, 용융아연 |
| 35 | shaft | 샤프트 | number | ✅ | 폭>6000:5인치, 그외:4인치 |
| 36 | capacity | 전동용량 | number | ✅ | 폭>6000:300kg, 그외:160kg |

### 금액정보 (amountInfo)

| ID | 필드키 | 필드명 | 입력타입 | 자동계산 |
|----|--------|--------|----------|----------|
| 40 | totalAmount | 총금액 | number | ✅ (품목 금액 합계) |

### 기타정보 (etcInfo)

| ID | 필드키 | 필드명 | 입력타입 |
|----|--------|--------|----------|
| 50 | note | 비고 | textarea |

---

## 자동계산 규칙 (calculations)

| 필드 | 수식 | 설명 |
|------|------|------|
| prodWidth | `openWidth + 140` | 제작폭 = 개구폭 + 140 |
| prodHeight | `MAX(openHeight + 400, 2950)` | 제작높이 = MAX(개구높이+400, 2950) |
| shaft | `openWidth > 6000 ? 5 : 4` | 샤프트 인치 |
| capacity | `openWidth > 6000 ? 300 : 160` | 전동용량 kg |
| amount | `qty * unitPrice` | 금액 = 수량 × 단가 |
| totalAmount | `SUM(items.amount)` | 총금액 = 품목 금액 합계 |

---

## 페이지 템플릿

### 일반 수주 (order_normal)
- 경로: `/판매관리/수주_등록`
- 유형: NORMAL
- 섹션: 기본정보 → 납품정보 → 품목정보 → 제작사양 → 금액정보 → 기타정보

### 추가 수주 (order_additional)
- 경로: `/판매관리/수주_추가`
- 유형: ADDITIONAL
- 섹션: 기본정보(간소화) → 추가 품목 → 기타정보

---

## API 엔드포인트 추정

### 수주 CRUD
```
GET    /api/orders              - 수주 목록
GET    /api/orders/{id}         - 수주 상세
POST   /api/orders              - 수주 등록
PUT    /api/orders/{id}         - 수주 수정
DELETE /api/orders/{id}         - 수주 삭제
```

### 관련 API
```
GET    /api/orders/{id}/items   - 수주 품목 목록
POST   /api/orders/{id}/items   - 품목 추가
PUT    /api/orders/{id}/items/{itemId} - 품목 수정
DELETE /api/orders/{id}/items/{itemId} - 품목 삭제
POST   /api/orders/from-quote/{quoteId} - 견적에서 수주 전환
```

---

## 다음 분석 단계

1. QuoteDetailNew.jsx, QuoteDocumentDialogs.jsx - UI 구조 및 액션
2. App.jsx 수주 섹션 - 비즈니스 로직, 상태 관리
