diff --git a/rules/wip-production-policy.md b/rules/wip-production-policy.md index 43a90ab..5c0ae5e 100644 --- a/rules/wip-production-policy.md +++ b/rules/wip-production-policy.md @@ -172,7 +172,51 @@ orders 테이블 └─────────────────────────────────────────────────┘ ``` -### 4.4 일반 수주와의 차이 +### 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 일반 수주와의 차이 | 항목 | 일반 수주 | 재공품 생산 | |------|----------|-----------| @@ -181,6 +225,7 @@ orders 테이블 | 견적 | 있음 (선택) | 없음 | | 납기 | 고객 요청일 | 없음 (가능한 빨리) | | 공정 선택 | BOM 기반 자동 매칭 | 절곡 공정 고정 | +| 자재 BOM | `buildDynamicBomForItem` (context+W+H) | `buildDynamicBomForStockItem` (bending_lot+partKey) | | 금액/매출 | 계산 + 매출 인식 | 없음 | | 현장명 | 고객 현장 | '재고생산' 고정 | | 채번 | `ORD20260316xxxx` | `STK20260316xxxx` | @@ -323,4 +368,4 @@ ATO: 수주 → 재공품 + 맞춤 부품 → 조립 → 출하 --- -**최종 업데이트**: 2026-03-16 +**최종 업데이트**: 2026-03-22