docs: [bom] BOM V2 전 업종 대응 Universal 아키텍처로 확장

- BOM 유형 4→7종 (PROJECT, SERVICE, SUBSCRIPTION 추가)
- item_type 10→15종 (LB노동, EQ장비, LC라이선스, TB시간제, PK패키지)
- bom_lines 확장 (기간/과금주기/인력등급/옵션그룹 필드)
- 업종 프리셋 5→12 카테고리 (KSIC 22개 업종 커버)
- 비제조업 시나리오 (유통/보험/IT/컨설팅/물류/호텔/렌탈/교육)
- 업종별 검증 시나리오 12개로 확장
This commit is contained in:
김보곤
2026-03-22 20:06:02 +09:00
parent 12bed61ac1
commit 9311752656

View File

@@ -60,24 +60,49 @@ V1 BOM 시스템
### 2.1 핵심 원칙
```
P1. 모든 업종 수용 — 이산/공정/조립/혼합 제조 전부 지원
P2. 테넌트별 자율 — BOM 깊이, 유형, 수식 테넌트가 정의
P1. 업종 수용 제조/유통/건설/서비스/금융/구독 전부 지원
P2. 테넌트별 자율 — BOM 깊이, 유형, 수식, 단위를 테넌트가 정의
P3. 단일 BOM 엔진 — 3중 병렬 → 1개 통합 BOM 테이블
P4. 버전 필수 — 모든 BOM 변경은 리비전으로 관리
P5. 하위 호환 — V1 JSON BOM 데이터 무손실 마이그레이션
P6. 물리+비물리 — 자재뿐 아니라 노동/서비스/라이선스/구독도 구성요소
```
### 2.2 지원 대상 업종
### 2.2 지원 대상 업종 (KSIC 22개 업종 전수 대응)
| 업종 | BOM 특성 | V2 대응 |
|------|---------|---------|
| **블라인드/스크린** (현재) | 수식 기반, 가변 사이즈 | 수식 엔진 유지 |
| **기계 부품** | 다단계 조립, 가공 공정 | N-Level + Routing |
| **전자/반도체** | 대체품목, ECN 관리 | Substitute + Effectivity |
| **식품/화학** | 배합비, 수율, 부산물 | Formula BOM + Co-product |
| **건설/플랜트** | 프로젝트별 BOM, 대량 자재 | Project BOM + Bulk |
| **가구/인테리어** | 옵션, 커스텀 | Configurable BOM |
| **의류/섬유** | 사이즈별 BOM, 색상별 원단 | Variant BOM |
> BOM = "상품이나 서비스를 구성하는 모든 요소의 구조화된 명세"로 확장 정의
**A. 제조업 (KSIC C)**
| 업종 | BOM 특성 | V2 대응 | BOM 유형 | 깊이 |
|------|---------|---------|---------|:----:|
| 블라인드/스크린 (현재) | 수식 기반, 가변 사이즈 | 수식 엔진 유지 | FORMULA | 3~5 |
| 기계/금속 부품 | 다단계, 가공 공정 | N-Level + Routing | STANDARD | 4~7 |
| 전자/반도체 | 대체품목, ECN, 팬텀 | Substitute + Effectivity | STANDARD+ENGINEERING | 7~12 |
| 식품/음료/화장품 | 배합비, 수율, 전성분 | Formula BOM + Co-product | FORMULA | 2~5 |
| 의류/섬유 | 사이즈/컬러 변형 | Variant BOM (매트릭스) | CONFIGURABLE | 2~3 |
| 자동차/부품 | EBOM→MBOM→SBOM 전환 | 3단계 BOM 라이프사이클 | CONFIGURABLE | 7~12 |
| 조선/중공업 | 블록 단위, 3D 연계 | 프로젝트 BOM + 블록 분해 | PROJECT | 8~15 |
| 제약/의료기기 | GMP, 로트 추적, 유효기한 | Formula + 추적성 | FORMULA | 3~8 |
**B. 비제조업 — 서비스/유통/금융**
| 업종 | BOM = 구성요소 | V2 대응 | BOM 유형 | 깊이 |
|------|-------------|---------|---------|:----:|
| 유통/이커머스 | 묶음 세트, 사은품, 포장 | Kit/Bundle BOM | STANDARD | 2~3 |
| 건설/인테리어 | 자재+인력+장비+외주 (BOQ) | Project BOM + 4요소 혼합 | PROJECT | 4~6 |
| IT/SaaS | 기능모듈, 인프라, 라이선스 | Subscription BOM + 티어 | SUBSCRIPTION | 2~4 |
| 보험/금융 | 주계약+특약+담보 | Configurable BOM + 요율 | CONFIGURABLE | 2~4 |
| 물류/운송 | 차량+인력+연료+운임 | Service BOM + 수식 운임 | SERVICE | 2~3 |
| 교육/이러닝 | 강의+교재+플랫폼+부가 | Subscription BOM | SUBSCRIPTION | 2~4 |
| 호텔/관광/여행 | 숙박+식사+교통+관광 | Configurable + 동적 요금 | CONFIGURABLE | 2~3 |
| 광고/마케팅 | 인력+미디어비+제작비 | Project BOM + 외주 | PROJECT | 3~4 |
| 법률/회계/컨설팅 | 인력공수+실비+외주 | Service BOM (타임차지) | SERVICE | 2~3 |
| 인력파견/아웃소싱 | 인력+4대보험+수수료 | Service BOM + 등급단가 | SERVICE | 2~3 |
| 렌탈/리스/구독 | 제품원가+소모품+금융비 | Subscription + 정기교체 | SUBSCRIPTION | 2~4 |
| 부동산/건물관리 | 인력+소모품+법정점검 | Service BOM + SLA | SERVICE | 2~4 |
| 에너지/플랜트 | EPC 통합 (설계+조달+시공) | Project BOM + O&M | PROJECT | 4~6 |
| 인쇄/출판/미디어 | 용지+잉크+공정+인력 | Project BOM + 부수 단가 | PROJECT | 3~4 |
---
@@ -89,7 +114,7 @@ P5. 하위 호환 — V1 JSON BOM 데이터 무손실 마이그레이션
V2 BOM 테이블 구조
items (기존 유지 + 확장)
├── item_type 확장: FG, SA, PT, WIP, PH, SM, RM, CS, BP, SV
├── item_type 확장: FG, SA, PT, WIP, PH, SM, RM, CS, BP, SV, LB, EQ, LC, TB, PK
└── bom 컬럼: 제거 (관계형으로 이관)
bom_headers (신규 — BOM 헤더/버전)
@@ -97,7 +122,7 @@ bom_headers (신규 — BOM 헤더/버전)
├── revision (REV.01, REV.02 ...)
├── status (DRAFT → PENDING → APPROVED → ACTIVE → OBSOLETE)
├── effective_from / effective_to
└── bom_type (STANDARD | ENGINEERING | CONFIGURABLE | FORMULA)
└── bom_type (STANDARD | ENGINEERING | CONFIGURABLE | FORMULA | PROJECT | SERVICE | SUBSCRIPTION)
bom_lines (신규 — BOM 라인/구성품)
├── bom_header_id → bom_headers
@@ -143,22 +168,34 @@ bom_templates (기존 유지) │
└── 수식 산출 → bom_headers 자동 생성 ───────────────┘
```
### 3.3 items.item_type 확장
### 3.3 items.item_type 확장 (5→15종)
| 코드 | 한글 | 설명 | V1 | V2 |
|------|------|------|:--:|:--:|
| `FG` | 완제품 | 판매 가능한 최종 제품 | O | O |
| `SA` | 반조립품 | 중간 조립품 (재고 관리됨) | - | **신규** |
| `PT` | 부품 | 구성 부품 | O | O |
| `WIP` | 재공품 | 가공 중인 중간 산출물 | - | **신규** |
| `PH` | 팬텀 | 가상 그룹 (재고 없음, BOM 전개 시 투과) | - | **신규** |
| `SM` | 부자재 | 보조 자재 | O | O |
| `RM` | 원자재 | 주요 원료 | O | O |
| `CS` | 소모품 | 일회성 소모 자재 | O | O |
| `BP` | 부산물 | 생산 시 발생하는 부산물 | - | **신규** |
| `SV` | 서비스 | 외주 가공, 검사비 등 비물리 항목 | - | **신규** |
**물리적 품목 (Physical)**
> 테넌트별로 사용할 유형을 선택할 수 있다. 블라인드 업체는 FG/PT/SM/RM/CS만, 전자업체는 SA/PH까지 활성화.
| 코드 | 한글 | 설명 | V1 | V2 | 대표 업종 |
|------|------|------|:--:|:--:|---------|
| `FG` | 완제품 | 판매 가능한 최종 제품 | O | O | 전 업종 |
| `SA` | 반조립품 | 중간 조립품 (재고 관리됨) | - | **신규** | 전자, 자동차, 가구 |
| `PT` | 부품 | 구성 부품 | O | O | 전 업종 |
| `WIP` | 재공품 | 가공 중인 중간 산출물 | - | **신규** | 제조업 전반 |
| `PH` | 팬텀 | 가상 그룹 (재고 없음, BOM 전개 시 투과) | - | **신규** | 전자, 조선 |
| `SM` | 부자재 | 보조 자재 | O | O | 전 업종 |
| `RM` | 원자재 | 주요 원료 | O | O | 제조업, 건설, 식품 |
| `CS` | 소모품 | 일회성 소모 자재 | O | O | 전 업종 |
| `BP` | 부산물 | 생산 시 발생하는 부산물 | - | **신규** | 식품, 화학, 제약 |
**비물리적 품목 (Non-Physical) — 서비스/유통/금융 업종 핵심**
| 코드 | 한글 | 설명 | V1 | V2 | 대표 업종 |
|------|------|------|:--:|:--:|---------|
| `SV` | 서비스 | 외주 가공, 검사비, 용역 | - | **신규** | 전 업종 |
| `LB` | 노동 | 인력 공수 (M/M, M/D, 시간) | - | **신규** | 건설, IT, 컨설팅, 광고 |
| `EQ` | 장비 | 장비/설비 임대, 감가상각 할당 | - | **신규** | 건설, 물류, 인쇄 |
| `LC` | 라이선스 | SW 라이선스, 저작권, 특허 | - | **신규** | IT, 미디어, 교육 |
| `TB` | 시간제 | 시간/기간 기반 항목 (숙박, 구독) | - | **신규** | 호텔, 렌탈, 교육 |
| `PK` | 패키지 | 복합 상품 패키지 (보험 특약, 여행 패키지) | - | **신규** | 보험, 여행, 유통 |
> 테넌트별로 사용할 유형을 선택한다. 블라인드 업체는 FG/PT/SM/RM/CS만, IT SaaS는 FG/PK/LC/TB/SV를 활성화.
### 3.4 bom_headers 상세
@@ -169,10 +206,13 @@ CREATE TABLE bom_headers (
item_id BIGINT UNSIGNED NOT NULL, -- 부모 품목
revision VARCHAR(20) NOT NULL DEFAULT 'REV.01',
bom_type VARCHAR(20) NOT NULL DEFAULT 'STANDARD',
-- STANDARD: 일반 BOM
-- ENGINEERING: 설계용 (비생산)
-- CONFIGURABLE: 옵션 조합 BOM
-- FORMULA: 배합/수식 BOM
-- STANDARD: 고정 자재 구성 (제조, 유통 세트)
-- ENGINEERING: 설계용 (비생산, 승인 후 STANDARD 전환)
-- CONFIGURABLE: 옵션 조합 (보험 특약, 호텔 패키지, 차량 옵션)
-- FORMULA: 배합/수식 (식품, 화장품, 블라인드 수식 산출)
-- PROJECT: 수주형 1회성 (건설 BOQ, 광고 캠페인, SI 프로젝트)
-- SERVICE: 노동/시간 중심 (컨설팅, 물류, FM, 인력파견)
-- SUBSCRIPTION: 구독/반복 과금 (SaaS, 렌탈, 교육, 멤버십)
status VARCHAR(20) NOT NULL DEFAULT 'DRAFT',
-- DRAFT → PENDING → APPROVED → ACTIVE → OBSOLETE
effective_from DATE NULL, -- 유효 시작
@@ -214,7 +254,15 @@ CREATE TABLE bom_lines (
effective_from DATE NULL, -- 라인별 유효 시작
effective_to DATE NULL, -- 라인별 유효 종료
is_phantom TINYINT(1) NOT NULL DEFAULT 0, -- 팬텀 여부 (BOM 전개 시 투과)
is_optional TINYINT(1) NOT NULL DEFAULT 0, -- 옵션 여부 (CONFIGURABLE BOM)
option_group VARCHAR(100) NULL, -- 옵션 그룹명 (같은 그룹 내 택1)
supply_type VARCHAR(20) DEFAULT 'STOCK', -- STOCK | PURCHASE | SUBCONTRACT
-- 비물리적 항목용 필드 (서비스/노동/구독)
duration_value DECIMAL(10,2) NULL, -- 기간 값 (숙박 2박, 구독 12개월)
duration_unit VARCHAR(20) NULL, -- 기간 단위 (DAY|MONTH|YEAR|HOUR)
billing_cycle VARCHAR(20) NULL, -- 과금 주기 (MONTHLY|YEARLY|ONCE)
grade_level VARCHAR(50) NULL, -- 인력 등급 (시니어/주니어, 파트너/어소)
unit_price DECIMAL(18,4) NULL, -- 단가 (시간당, 월당, 건당)
sort_order INT NOT NULL DEFAULT 0,
notes VARCHAR(500) NULL,
options JSON NULL, -- 확장 속성
@@ -324,6 +372,89 @@ STANDARD BOM (생산팀)
새 REVISION 생성 (REV.02)
```
### 4.5 PROJECT BOM (프로젝트 BOM)
수주형 1회성 프로젝트. 건설 BOQ, SI 프로젝트, 광고 캠페인 등.
```
PRJ-APT (아파트 신축 프로젝트) [PROJECT]
├── [공종: 토목기초]
│ ├── RM-철근 x120 톤 → 조달: 구매
│ ├── RM-레미콘 x800 m³ → 조달: 구매
│ ├── LB-철근공 x40 M/D → grade: 기능공
│ └── EQ-크레인 x30 일 → duration: 30 DAY
├── [공종: 골조]
│ ├── RM-철근 x350 톤
│ ├── LB-형틀목공 x80 M/D
│ └── EQ-타워크레인 x90 일
├── [공종: 전기설비]
│ ├── PT-배전반 x3 SET
│ └── LB-전기공 x60 M/D → grade: 특급기능공
└── [외주]
└── SV-소방설비 x1 식 → supply: SUBCONTRACT
```
### 4.6 SERVICE BOM (서비스 BOM)
노동/시간 중심. 컨설팅, 물류, 시설관리, 인력파견 등.
```
SV-CONSULTING (경영 컨설팅 프로젝트) [SERVICE]
├── [인력]
│ ├── LB-프로젝트리더 x3 M/M → grade: 파트너, unit_price: 2000만/월
│ ├── LB-시니어컨설턴트 x6 M/M → grade: 시니어, unit_price: 1200만/월
│ └── LB-주니어컨설턴트 x12 M/M → grade: 주니어, unit_price: 700만/월
├── [도구/솔루션]
│ ├── LC-분석SW라이선스 x3 개월 → billing: MONTHLY
│ └── LC-설문플랫폼 x1 개월
├── [실비]
│ ├── CS-출장교통비 x20 건
│ └── CS-인쇄비 x500 부
└── [산출물]
├── SV-현황진단보고서 x1 건
└── SV-전략보고서 x1 건
SV-LOGISTICS (화물운송) [SERVICE]
├── EQ-5톤냉장탑차 x1 대
├── LB-운전기사 x8 시간 → grade: 1종대형
├── RM-경유 qty_formula="거리km * 0.12" → 수식: 거리 비례
├── SV-상하차인력 x2 인·시간 → optional: true
└── PK-화물보험 x1 건 → optional: true, 화물가액 비례
```
### 4.7 SUBSCRIPTION BOM (구독 BOM)
기간/과금 기반 반복 서비스. SaaS, 렌탈, 교육, 멤버십 등.
```
PK-SAAS-ENT (ERP SaaS Enterprise 플랜) [SUBSCRIPTION]
├── [기능 모듈] — billing: MONTHLY
│ ├── LC-재무회계모듈 x1 → 포함
│ ├── LC-생산관리모듈 x1 → 포함
│ ├── LC-인사급여모듈 x1 → 포함
│ └── LC-구매물류모듈 x1 → 포함
├── [인프라]
│ ├── TB-vCPU x8 코어 → billing: MONTHLY
│ ├── TB-메모리 x32 GB
│ └── TB-스토리지 x500 GB
├── [라이선스]
│ ├── LC-사용자계정 x50 User → billing: MONTHLY
│ └── LC-동시접속 x20 Session
└── [옵션 부가서비스] — optional: true
├── SV-전담CS지원 x10 시간/월 → option_group: "support"
├── SV-데이터백업 x1 일1회 → option_group: "backup"
└── SV-교육 x2 회/연 → option_group: "training"
PK-RENTAL (정수기 렌탈) [SUBSCRIPTION]
├── FG-정수기본체 x1 EA → 감가상각: 60개월
├── [정기 교체 소모품] — duration_unit: MONTH
│ ├── PT-세디먼트필터 x1 EA → 교체주기: 6개월
│ ├── PT-카본필터 x1 EA → 교체주기: 6개월
│ └── PT-UF멤브레인 x1 EA → 교체주기: 12개월
├── LB-위생점검인력 x1 회/월 → billing: MONTHLY
└── SV-금융비용 x1 식 → unit_price: 취득가 × 조달금리 / 계약개월
```
---
## 5. BOM 버전 관리
@@ -506,6 +637,12 @@ CREATE TABLE tenant_bom_settings (
use_phantom BOOLEAN NOT NULL DEFAULT FALSE,
-- 수식 BOM 사용 여부
use_formula_bom BOOLEAN NOT NULL DEFAULT FALSE,
-- 비물리적 항목 (서비스/노동/구독) 사용 여부
use_labor_items BOOLEAN NOT NULL DEFAULT FALSE,
-- 구독/과금 주기 관리 여부
use_billing_cycle BOOLEAN NOT NULL DEFAULT FALSE,
-- 옵션 BOM (CONFIGURABLE) 사용 여부
use_option_groups BOOLEAN NOT NULL DEFAULT FALSE,
-- 카테고리 그룹 표시 방식
category_display VARCHAR(20) DEFAULT 'FOLDER', -- FOLDER | FLAT | NONE
-- 커스텀 BOM 라인 필드 (테넌트별 확장)
@@ -516,52 +653,117 @@ CREATE TABLE tenant_bom_settings (
);
```
### 8.2 업종별 프리셋
### 8.2 업종별 프리셋 (12 카테고리, KSIC 22개 업종 커버)
| 프리셋 ID | 대상 업종 | KSIC | BOM 유형 | 품목 유형 |
|-----------|---------|------|---------|---------|
| `mfg_discrete` | 기계/금속/전자 제조 | C25~C28 | STANDARD, ENGINEERING | FG,SA,PT,PH,WIP,SM,RM,CS |
| `mfg_formula` | 식품/화학/화장품/제약 | C10~C21 | FORMULA, STANDARD | FG,PT,RM,CS,BP,SV |
| `mfg_custom` | 블라인드/가구/의류 | C13~C32 | FORMULA, CONFIGURABLE | FG,PT,WIP,SM,RM,CS,SV |
| `mfg_heavy` | 자동차/조선/중공업 | C30,C281 | STANDARD, CONFIGURABLE, ENGINEERING | FG,SA,PT,PH,WIP,SM,RM,CS,SV |
| `construction` | 건설/인테리어/에너지 | F41~42, D35 | PROJECT, CONFIGURABLE | FG,PT,SM,RM,CS,LB,EQ,SV |
| `distribution` | 유통/도소매/이커머스 | G45~47 | STANDARD | FG,PT,SM,CS,PK |
| `it_saas` | IT/SaaS/솔루션 | J58~63 | SUBSCRIPTION, PROJECT | FG,PK,LC,TB,LB,SV |
| `finance_insurance` | 보험/금융 | K64~66 | CONFIGURABLE, SUBSCRIPTION | FG,PK,SV,TB |
| `professional` | 법률/회계/컨설팅/광고 | M69~71 | SERVICE, PROJECT | SV,LB,LC,CS,EQ |
| `logistics` | 물류/운송/인력파견 | H49~52, N78 | SERVICE | SV,LB,EQ,CS,PK |
| `hospitality` | 호텔/관광/교육 | I55, N79, P85 | CONFIGURABLE, SUBSCRIPTION | FG,PK,SV,TB,LB |
| `rental` | 렌탈/리스/구독 | N77, K64 | SUBSCRIPTION | FG,PT,CS,SV,TB,LB |
**프리셋 상세 (JSON)**
```json
{
"presets": {
"blind_screen": {
"label": "블라인드/스크린 제조",
"enabled_item_types": ["FG", "PT", "WIP", "SM", "RM", "CS", "SV"],
"enabled_bom_types": ["STANDARD", "FORMULA"],
"max_bom_depth": 5,
"use_formula_bom": true,
"use_waste_rate": true,
"use_routing": true,
"category_display": "FOLDER"
},
"electronics": {
"label": "전자/반도체",
"enabled_item_types": ["FG", "SA", "PT", "PH", "SM", "RM", "CS"],
"enabled_bom_types": ["STANDARD", "ENGINEERING"],
"max_bom_depth": 15,
"require_approval": true,
"use_effectivity": true,
"use_substitutes": true,
"use_phantom": true
},
"food_chemical": {
"label": "식품/화학",
"enabled_item_types": ["FG", "PT", "RM", "CS", "BP"],
"enabled_bom_types": ["STANDARD", "FORMULA"],
"use_formula_bom": true,
"use_waste_rate": true,
"category_display": "FLAT"
},
"furniture": {
"label": "가구/인테리어",
"enabled_item_types": ["FG", "SA", "PT", "SM", "RM"],
"enabled_bom_types": ["STANDARD", "CONFIGURABLE"],
"max_bom_depth": 5
},
"simple_assembly": {
"label": "단순 조립",
"enabled_item_types": ["FG", "PT", "SM", "RM", "CS"],
"enabled_bom_types": ["STANDARD"],
"max_bom_depth": 3,
"category_display": "FLAT"
}
"mfg_discrete": {
"label": "이산/조립 제조 (기계, 전자, 금속)",
"enabled_item_types": ["FG","SA","PT","PH","WIP","SM","RM","CS"],
"enabled_bom_types": ["STANDARD","ENGINEERING"],
"max_bom_depth": 15,
"require_approval": true,
"use_effectivity": true,
"use_substitutes": true,
"use_phantom": true,
"use_routing": true,
"use_waste_rate": true,
"category_display": "FOLDER"
},
"mfg_formula": {
"label": "배합/공정 제조 (식품, 화학, 화장품, 제약)",
"enabled_item_types": ["FG","PT","RM","CS","BP","SV"],
"enabled_bom_types": ["FORMULA","STANDARD"],
"max_bom_depth": 5,
"use_formula_bom": true,
"use_waste_rate": true,
"use_routing": true,
"category_display": "FLAT"
},
"mfg_custom": {
"label": "주문 제작 (블라인드, 가구, 의류)",
"enabled_item_types": ["FG","PT","WIP","SM","RM","CS","SV"],
"enabled_bom_types": ["FORMULA","CONFIGURABLE","STANDARD"],
"max_bom_depth": 5,
"use_formula_bom": true,
"use_waste_rate": true,
"use_routing": true,
"category_display": "FOLDER"
},
"construction": {
"label": "건설/인테리어/에너지 (BOQ+WBS)",
"enabled_item_types": ["FG","PT","SM","RM","CS","LB","EQ","SV"],
"enabled_bom_types": ["PROJECT","CONFIGURABLE"],
"max_bom_depth": 6,
"use_routing": true,
"category_display": "FOLDER"
},
"distribution": {
"label": "유통/도소매 (세트/번들)",
"enabled_item_types": ["FG","PT","SM","CS","PK"],
"enabled_bom_types": ["STANDARD"],
"max_bom_depth": 3,
"category_display": "FLAT"
},
"it_saas": {
"label": "IT/SaaS/솔루션 (구독+프로젝트)",
"enabled_item_types": ["FG","PK","LC","TB","LB","SV"],
"enabled_bom_types": ["SUBSCRIPTION","PROJECT"],
"max_bom_depth": 4,
"category_display": "FOLDER"
},
"finance_insurance": {
"label": "보험/금융 (주계약+특약)",
"enabled_item_types": ["FG","PK","SV","TB"],
"enabled_bom_types": ["CONFIGURABLE","SUBSCRIPTION"],
"max_bom_depth": 4,
"category_display": "FOLDER"
},
"professional": {
"label": "전문 서비스 (법률, 회계, 컨설팅, 광고)",
"enabled_item_types": ["SV","LB","LC","CS","EQ"],
"enabled_bom_types": ["SERVICE","PROJECT"],
"max_bom_depth": 4,
"category_display": "FLAT"
},
"logistics": {
"label": "물류/운송/인력파견",
"enabled_item_types": ["SV","LB","EQ","CS","PK"],
"enabled_bom_types": ["SERVICE"],
"max_bom_depth": 3,
"use_formula_bom": true,
"category_display": "FLAT"
},
"hospitality": {
"label": "호텔/관광/교육/여행",
"enabled_item_types": ["FG","PK","SV","TB","LB"],
"enabled_bom_types": ["CONFIGURABLE","SUBSCRIPTION"],
"max_bom_depth": 3,
"category_display": "FOLDER"
},
"rental": {
"label": "렌탈/리스/구독 서비스",
"enabled_item_types": ["FG","PT","CS","SV","TB","LB"],
"enabled_bom_types": ["SUBSCRIPTION"],
"max_bom_depth": 4,
"category_display": "FOLDER"
}
}
```
@@ -762,47 +964,116 @@ foreach (Item::whereNotNull('bom')->cursor() as $item) {
---
## 12. 업종별 시나리오 검증
## 12. 업종별 시나리오 검증 (12개)
### 12.1 블라인드/스크린 (현재)
### A. 제조업군
**12.1 블라인드/스크린** (현재 고객, mfg_custom)
```
설정: STANDARD + FORMULA, WIP 사용, 카테고리 FOLDER
검증:
✓ 수식 산출 → BOM 자동 생성
✓ 절곡품(WIP) BOM 트리
✓ 카테고리 그룹 표시
✓ V1 데이터 100% 호환
프리셋: mfg_custom
BOM 유형: FORMULA + STANDARD
검증: ✓ 수식 산출 → BOM 저장, ✓ WIP 절곡품 트리, ✓ 카테고리 FOLDER, ✓ V1 100% 호환
```
### 12.2 전자부품 제조
**12.2 전자부품** (mfg_discrete)
```
설정: STANDARD + ENGINEERING, SA/PH 사용, 승인 필수, 대체품목, ECN
검증:
✓ 15단계 BOM 깊이
✓ 팬텀 품목 투과 전개
✓ ECN 시 일괄 품목 대체
✓ 리비전별 유효기간 관리
프리셋: mfg_discrete
BOM 유형: STANDARD + ENGINEERING
검증: ✓ 15단계 BOM, ✓ 팬텀 투과, ✓ ECN 일괄 대체, ✓ 유효기간, ✓ 승인 워크플로우
```
### 12.3 식품 제조
**12.3 식품/화장품** (mfg_formula)
```
설정: FORMULA, 수율 관리, 부산물(BP)
검증:
✓ 배합비 수식 (A원료 30% + B원료 70%)
✓ 로스율 반영 투입량
✓ 부산물 자동 등록
프리셋: mfg_formula
BOM 유형: FORMULA
검증: ✓ 배합비(%) 수식, ✓ 수율/로스, ✓ 부산물(BP), ✓ 전성분 목록 추출
```
### 12.4 가구 주문제작
**12.4 건설/인테리어** (construction)
```
설정: CONFIGURABLE, 옵션 조합
검증:
✓ 상판/다리/마감 옵션별 BOM 분기
✓ 주문 시 옵션 선택 → BOM 확정
프리셋: construction
BOM 유형: PROJECT
검증: ✓ 공종별 자재+노동(LB)+장비(EQ)+외주(SV) 4요소
✓ 단위 다양성 (m³, 톤, M/D, 식)
✓ 공정표 연동, ✓ 설계 변경 리비전
```
### B. 서비스/유통군
**12.5 유통/이커머스** (distribution)
```
프리셋: distribution
BOM 유형: STANDARD
검증: ✓ 3종 세트 → 단품 재고 차감, ✓ 사은품/포장재 포함, ✓ 시즌 구성 변경
```
**12.6 IT SaaS** (it_saas)
```
프리셋: it_saas
BOM 유형: SUBSCRIPTION
검증: ✓ 기능모듈(LC) + 인프라(TB) + 사용자수(LC) 구성
✓ 월/연 과금 주기(billing_cycle)
✓ 티어 업그레이드 (옵션 추가)
✓ 프로젝트형 SI는 PROJECT로 분리
```
**12.7 보험/금융** (finance_insurance)
```
프리셋: finance_insurance
BOM 유형: CONFIGURABLE + SUBSCRIPTION
검증: ✓ 주계약(FG) + 필수특약(PK) + 선택특약(PK, optional)
✓ option_group: "암담보", "뇌혈관" (택1)
✓ 갱신형: billing_cycle=YEARLY, duration=10 YEAR
✓ 나이/성별 요율 → options JSON으로 단가 테이블 연결
```
**12.8 법률/컨설팅** (professional)
```
프리셋: professional
BOM 유형: SERVICE
검증: ✓ 인력(LB) grade별 시간단가 (파트너 50만/h, 어소 15만/h)
✓ 공수 M/M 환산 (1M/M = 160h)
✓ 실비(CS) + 외주(SV) + 라이선스(LC) 혼합
✓ 타임차지 vs. 고정가 구분 (bom_type으로)
```
**12.9 물류/운송** (logistics)
```
프리셋: logistics
BOM 유형: SERVICE
검증: ✓ 차량(EQ) + 기사(LB) + 연료(RM, qty_formula) 구성
✓ 운임 수식: "거리km * 중량톤 * 기본단가 * 할증계수"
✓ 옵션: 상하차 인력, 포장, 보험 (is_optional)
```
**12.10 호텔/여행** (hospitality)
```
프리셋: hospitality
BOM 유형: CONFIGURABLE
검증: ✓ 숙박(TB, 2박) + 조식(SV, 2회) + 부대시설(SV) 구성
✓ 옵션: 스파, 레이트체크아웃 (option_group)
✓ 여행 패키지: 항공(SV)+숙박(TB)+가이드(LB)+입장(SV) 구성
✓ 성수기 단가 계수 → options JSON
```
**12.11 렌탈/구독** (rental)
```
프리셋: rental
BOM 유형: SUBSCRIPTION
검증: ✓ 본체(FG) + 소모품(PT, 교체주기) + 점검인력(LB) 구성
✓ 정기 교체: duration_value=6, duration_unit=MONTH
✓ 감가상각: 제품원가 ÷ 계약개월 = 월 원가
✓ 해지 시 잔존가치 계산
```
**12.12 교육/이러닝** (hospitality)
```
프리셋: hospitality
BOM 유형: SUBSCRIPTION
검증: ✓ 강의콘텐츠(LC, 120강) + 교재(FG) + 플랫폼(TB) 구성
✓ 구독기간: duration=6 MONTH, billing=MONTHLY
✓ 옵션: 라이브Q&A(SV), AI분석(SV), 첨삭(LB)
✓ 접근 권한 제어 (단원별 잠금/해제)
```
---