# 품목 재고 관리 체계 설계 > 작성일: 2026-02-12 > 상태: 설계 확정, 단계별 구현 예정 ## 1. 배경 ### 문제 - 5130(레거시)에서 관리하던 "내화실" 등 품목이 SAM에 제대로 반영되지 않음 - 기존 item_type(FG/PT/SM/RM/CS) 분류만으로는 다양한 관리 방식을 표현할 수 없음 - 소모품 중 LOT 관리가 필요한 품목과 불필요한 품목 구분 불가 - 자체생산 재고품(중간재) 개념 부재 ### 현재 item_type 체계 | 코드 | 의미 | 비고 | |------|------|------| | FG | 완제품 (Finished Goods) | 출하 대상 | | PT | 부품 (Parts) | BOM 구성 | | SM | 부자재 (Sub Materials) | 구매품 | | RM | 원자재 (Raw Materials) | 구매품, LOT 관리 | | CS | 소모품 (Consumables) | 단순 소진 | ## 2. 설계: items.options JSON 기반 관리 속성 ### 핵심 원칙 - **컬럼 추가 금지**: FK/조인키만 컬럼 추가, 나머지는 JSON (멀티테넌시 원칙) - **item_type은 "뭐냐"**, **options는 "어떻게 관리하냐"**를 구분 ### options 필드 정의 | 키 | 타입 | 값 | 설명 | |----|------|-----|------| | `lot_managed` | boolean | true/false | LOT 번호 추적 여부 | | `consumption_method` | string | auto/manual/none | 소진 처리 방식 | | `production_source` | string | purchased/self_produced/both | 조달 구분 | | `input_tracking` | boolean | true/false | 원자재 투입 추적 여부 | | `material` | string | - | 재질 정보 (선택) | ### 필드 상세 **lot_managed** - `true`: 입고 시 LOT 번호 필수, stock_lots 테이블에 LOT별 수량 추적 - `false`: LOT 없이 총량만 관리 **consumption_method** - `auto`: 생산 완료 시 BOM 기준 자동 차감 - `manual`: 사용자가 직접 수량 입력하여 소진 처리 - `none`: 소진 추적 안 함 (완제품 등) **production_source** - `purchased`: 구매 입고만 (원자재, 부자재, 소모품) - `self_produced`: 자체 생산으로 입고 (중간재, 반제품) - `both`: 구매 + 자체 생산 모두 가능 **input_tracking** - `true`: 생산 시 BOM 기반 원자재 투입 기록 - `false`: 잔재/스크랩 활용 생산 → 투입 추적 불가, 산출물 입고만 기록 ## 3. 품목 유형별 적용 ### 유형 분류표 | 유형 | 예시 | item_type | lot | consumption | source | input_tracking | |------|------|-----------|-----|------------|--------|---------------| | 구매 소모품 (LOT) | 내화실 | SM | true | manual | purchased | - | | 구매 소모품 (비LOT) | 장갑, 테이프 | CS | false | manual | purchased | - | | 원자재 | 실리카원단, EGI코일 | RM | true | auto | purchased | - | | 일반 자체생산 | 슬랫, 절곡물 | PT | true | auto | self_produced | true | | 잔재 활용 생산 | 조인트바 | PT | true | auto | self_produced | false | | 완제품 | 방화스크린 | FG | true | none | self_produced | true | ### 유형별 처리 흐름 #### 구매 소모품 - LOT 관리 (내화실) ``` 납품 → 수입검사 → 검사 합격 → stock_transactions(IN) + LOT 생성 → 작업일지에 사용 LOT 기록 (추적용) → 수동 소진 처리: 사용자가 수량 입력 → stock_transactions(OUT, manual_consumption) ``` #### 구매 소모품 - 비LOT (장갑, 테이프) ``` 구매 입고 → stock_transactions(IN), LOT 없음 → 수동 소진 처리: 수량 입력 → stock_transactions(OUT, manual_consumption) ``` #### 일반 자체생산 (슬랫, 절곡물) ``` 작업지시 시작 → BOM 기준 원자재 자동 차감: stock_transactions(OUT, work_order_input) → 생산 완료 → 산출물 입고: stock_transactions(IN, production_output) + LOT 생성 → 상위 조립 시 BOM 기준 자동 차감 ``` #### 잔재 활용 생산 (조인트바) ``` 다른 공정 잔재/스크랩 활용 → 원자재 투입 기록 없음 (이미 다른 공정에서 차감됨) → 생산 완료 → 산출물 입고만: stock_transactions(IN, production_output) + LOT 생성 → 상위 조립 시 BOM 기준 자동 차감 ``` ## 4. 내화실 품목 업데이트 (완료) ### 변경 내역 | 필드 | 변경 전 | 변경 후 | |------|--------|---------| | code | 80019 | 내화실-WY-MA12 | | name | 실 | 내화실 | | unit | m | 콘 | | attributes.spec | (비어있음) | WY-MA12 | | options | null | 아래 참조 | ### options 값 ```json { "lot_managed": true, "consumption_method": "manual", "production_source": "purchased", "material": "SUS316L + Para aramid" } ``` ### 배포 - 시더: `api/database/seeders/data/kyungdong/items.json` (커밋 완료) - SQL: `docs/deploys/item-naehwasil-update-20260212.sql` ## 5. 구현 로드맵 ### Phase 1: 품목 마스터 정비 (현재) - [x] options 체계 설계 - [x] 내화실 품목 데이터 업데이트 - [ ] 슬랫, 절곡물, 조인트바 등 자체생산품 options 설정 - [ ] 기존 품목 일괄 options 매핑 ### Phase 2: 수동 소진 처리 - [ ] API: 소모품 사용 처리 엔드포인트 (POST /stocks/{id}/consume) - [ ] React: 소모품 사용 처리 화면 - [ ] stock_transactions reason에 `manual_consumption` 추가 ### Phase 3: 자체생산품 입고 연동 - [ ] 작업지시 완료 시 산출물 자동 입고 로직 - [ ] stock_transactions reason에 `production_output` 추가 - [ ] 작업지시번호 기반 LOT 자동 생성 규칙 - [ ] input_tracking=false인 경우 투입 차감 스킵 로직 ### Phase 4: BOM 기반 자동 차감 - [ ] consumption_method=auto인 품목 자동 차감 로직 - [ ] 작업지시 완료 → BOM 순회 → 해당 품목 stock_transactions(OUT) - [ ] 부족 재고 경고 알림 ## 6. 참고 ### 관련 파일 - Item 모델: `api/app/Models/Items/Item.php` - Stock 모델: `api/app/Models/Tenants/Stock.php` - StockTransaction 모델: `api/app/Models/Tenants/StockTransaction.php` - StockLot 모델: `api/app/Models/Tenants/StockLot.php` - 시더 데이터: `api/database/seeders/data/kyungdong/items.json` ### 5130 참고 파일 - 내화실 수입검사: `5130/instock/i_fireproofWire.php` - 스크린 작업일지: `5130/output/viewScreenWork.php` - LOT 조회: `5130/output/fetch_lot.php`