# 절곡품 작업단계 매핑 계획

> **작성일**: 2026-03-20
> **상태**: 설계 확정
> **담당**: R&D실

---

## 1. 개요

### 1.1 목적

절곡 공정(P-003)의 작업단계가 모든 절곡 품목에 동일하게 표시되는 문제를 해결한다. BD 코드 접두사에 따라 해당 품목에 필요한 작업단계만 표시한다.

### 1.2 현재 문제

```
현재: 모든 절곡 작업지시 → [가이드레일 제작, 케이스 제작, 하단마감재 제작, 검사]
문제: BD-ST-24 (가이드레일 측면형)에 케이스/하단마감재 단계가 불필요하게 표시됨
```

### 1.3 기대 결과

```
BD-RS-30 (가이드레일 벽면) → [가이드레일 제작, 검사]
BD-ST-24 (가이드레일 측면) → [가이드레일 제작, 검사]
BD-CF-35 (케이스 전면부)   → [케이스 제작, 검사]
BD-CB-35 (케이스 린텔부)   → [케이스 제작, 검사]
BD-BL-35 (하단마감재 스크린) → [하단마감재 제작, 검사]
```

---

## 2. BD 코드 분류 체계

### 2.1 코드 구조

```
BD-{종류코드}{규격코드}-{길이코드}
예: BD-RS-30 = BD + R(가이드레일) + S(측면형) + 30(길이)
```

### 2.2 종류코드 → 작업단계 매핑

| 종류코드 접두사 | 제품 분류 | 필요 작업단계 |
|:---:|---|---|
| `R` | 가이드레일-벽면형 | `guide_rail`, `inspection` |
| `S` | 가이드레일-측면형 | `guide_rail`, `inspection` |
| `C` | 케이스 (린텔/전면/점검/후면) | `case`, `inspection` |
| `B` | 하단마감재-스크린 | `bottom_finish`, `inspection` |
| `T` | 하단마감재-철재 | `bottom_finish`, `inspection` |
| `L` | L-Bar | `guide_rail`, `inspection` |
| `G` | 연기차단재 | `guide_rail`, `inspection` |

---

## 3. 구현 방안: 프론트엔드 코드 매핑

### 3.1 선택 근거

| 방안 | 장점 | 단점 |
|------|------|------|
| ~~A. DB 규칙 기반~~ | 유연 | 마이그레이션, 관리 UI 필요 |
| **B. 프론트엔드 코드 매핑** | 빠른 구현, 변경 용이 | BD 코드 체계 변경 시 수정 필요 |

BD 코드 체계가 안정적이고 종류가 7개로 한정되어 있어 프론트엔드 매핑이 적합하다.

### 3.2 구현 위치

| 파일 | 변경 내용 |
|------|----------|
| `react/src/components/production/WorkOrders/types.ts` | `BENDING_STEP_MAP` 상수 추가 |
| `react/src/components/production/WorkOrders/WorkOrderDetail.tsx` | `ProcessStepPills`에 필터링 로직 적용 |

### 3.3 매핑 상수

```typescript
// BD 코드 접두사 → 필요 작업단계 매핑
const BENDING_STEP_MAP: Record<string, string[]> = {
  'R': ['guide_rail', 'inspection'],   // 가이드레일-벽면
  'S': ['guide_rail', 'inspection'],   // 가이드레일-측면
  'C': ['case', 'inspection'],         // 케이스
  'B': ['bottom_finish', 'inspection'], // 하단마감재-스크린
  'T': ['bottom_finish', 'inspection'], // 하단마감재-철재
  'L': ['guide_rail', 'inspection'],   // L-Bar
  'G': ['guide_rail', 'inspection'],   // 연기차단재
};
```

### 3.4 필터링 로직

```
1. 작업지시의 work_order_items에서 품목 코드(BD-XX-YY) 수집
2. BD- 접두사 뒤의 첫 글자(종류코드)로 필요 단계 결정
3. 여러 품목이 있으면 필요 단계의 합집합(union)으로 표시
4. BD 코드가 아닌 품목이면 전체 단계 표시 (fallback)
```

---

## 4. 데이터 흐름

```
API: WorkOrder → items[].item_code (BD-RS-30, BD-CF-35 등)
  ↓
React: transformApiToFrontend()
  ↓ items에서 BD 코드 추출
  ↓ BENDING_STEP_MAP으로 필요 단계 결정
  ↓
ProcessStepPills(filteredSteps)
  ↓ 필요 단계만 렌더링
```

---

## 5. 재고생산(STOCK)의 경우

재고생산은 단일 품목(BD-XX-YY)으로 생성되므로 매핑이 명확하다.

```
STK202603180005 → BD-ST-24 (가이드레일 측면)
  → 종류코드 'S' → ['guide_rail', 'inspection']
  → 가이드레일 제작 + 검사 만 표시
```

---

## 관련 문서

- [재고생산 개편](stock-production-lot-form-plan.md) — 절곡품 LOT 방식
- [입고×수입검사 연동](receiving-inspection-integration-plan.md) — 입고-검사-재고 흐름
- [재공품 생산 정책](../../rules/wip-production-policy.md) — 재공품 개념

---

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