# 산정 기준 관리 완전 가이드

## 📋 목차
1. [개요](#개요)
2. [기본 개념](#기본-개념)
3. [기준 유형](#기준-유형)
4. [단계별 사용법](#단계별-사용법)
5. [다단계 매핑](#다단계-매핑)
6. [실전 예제](#실전-예제)
7. [FAQ](#faq)

---

## 개요

산정 기준 관리는 MES SAM 시스템의 핵심 기능으로, 모든 제품 카테고리의 산정 공식을 등록하고 관리할 수 있습니다.

### 주요 기능
- ✅ **모든 카테고리 지원**: 스크린, 철재, 공통 제품 모두 가능
- ✅ **3가지 기준 유형**: 범위(Range), 수식(Formula), 고정값(Fixed)
- ✅ **무제한 다단계 매핑**: 1단계 → 2단계 → 3단계 → ... 무한 확장
- ✅ **복합 조건 지원**: AND/OR 조건, 변수 조건, **품목 조건** (NEW!)
- ✅ **자동 산출 연동**: 견적 자동 산출 시스템과 완전 통합

---

## 기본 개념

### 1. 기준 유형 (Rule Type)

#### 📊 범위(Range)
- **용도**: 구간별로 다른 품목이나 수량을 지정
- **예시**: 
  - 제작길이 0~1000mm → 품목A 2개
  - 제작길이 1000~2000mm → 품목B 3개
- **사용 케이스**: 가이드레일, 케이스, 감기샤프트 등

#### 🧮 수식(Formula)
- **용도**: 수학 공식으로 값을 계산
- **예시**: 
  - 면적 = W1 * H1 / 1000000
  - 케이스 사이즈 = W0 + 220
- **사용 가능 함수**: CEIL(올림), FLOOR(내림), ROUND(반올림), IF(조건, 참, 거짓)
- **사용 케이스**: 제작사이즈, 면적, 중량 계산

#### 📌 고정값(Fixed)
- **용도**: 항상 동일한 값
- **예시**: 
  - 연기차단재 스크린: 항상 2개
  - 연기차단재 철재: 항상 1개
- **사용 케이스**: 고정 수량 품목

### 2. 단계 설정

#### 중간 단계 규칙 (Intermediate Rule)
- **특징**: 다음 단계로 결과를 전달
- **용도**: 복잡한 산정 로직을 단계별로 나눔
- **결과 타입**:
  - `specification`: 규격 결정 (예: "4인치", "120×70")
  - `item`: 품목 선택 (품목코드와 품목명)
  - `quantity`: 수량 산출
  - `value`: 수치 값 (예: 2500mm)

#### 최종 규칙 (Final Rule)
- **특징**: 결과만 반환, 더 이상 다음 단계로 전달 안 함
- **용도**: 산정 체인의 마지막 단계

---

## 기준 유형별 상세 사용법

### 범위(Range) 타입

1. **기본 범위 설정**
   ```
   최소값: 0
   최대값: 1000
   품목: GR-SCREEN-3000 (가이드레일 3000mm)
   수량: 1
   결과: "구간1 품목"
   설명: 0~1000mm 구간
   ```

2. **복합 조건 추가** (AND/OR)
   - **변수 기반 조건**: 기본 범위 + 추가 변수 조건
     - 예: W1(1000~2000) AND K≤400
   - **품목 기반 조건** (NEW!): 특정 품목 선택 시 적용
     - 조건 소스: `품목` 선택
     - 품목 선택: 모터 150K, 모터 300K 등
     - 예: 모터 150K 사용 시 → 브라케트 380×180

3. **한 구간에 여러 품목**
   - "품목 추가" 버튼으로 복수 품목 등록
   - 각각 다른 수량 지정 가능

### 수식(Formula) 타입

1. **기본 수식 작성**
   ```
   입력 변수: W0, H0
   수식: W0 + 220
   단위: mm
   ```

2. **함수 사용**
   ```
   CEIL(W1 / 1000)  // 올림
   FLOOR(H1 / 500)  // 내림
   ROUND(area * 1.5)  // 반올림
   IF(W0 > 5000, W0 + 240, W0 + 220)  // 조건문
   ```

### 고정값(Fixed) 타입

1. **단순 고정값**
   ```
   고정값: 2
   단위: EA
   ```

---

## 단계별 사용법

### 🚀 단순 산정 (1단계만)

**시나리오**: 면적 계산

1. **기준 등록** 버튼 클릭
2. 규칙 정보 입력
   - 규칙 코드: `AREA-CALCULATION`
   - 규칙명: `면적 계산`
   - 제품 카테고리: `공통`
   - 기준 유형: `수식(Formula)`
   - 입력 변수: `W1, H1`
3. 수식 입력
   ```
   W1 * H1 / 1000000
   ```
4. 단위: `㎡`
5. **중간 단계 규칙 체크 해제** (최종 규칙)
6. 등록 버튼 클릭

### 🔗 다단계 산정 (2단계 이상)

**시나리오**: 케이스(셔터박스) 3단계 프로세스
- 1단계: W0 → S 사이즈 계산
- 2단계: S → 품목 선택
- 3단계: H1 → 수량 세분화

#### Step 1: 3단계 규칙 생성 (최종 단계부터)

```
규칙 코드: CASE-QTY-DETAIL
규칙명: 케이스 수량 세분화 (3단계)
카테고리: 공통
기준 유형: 범위(Range)
입력 변수: H1

☑️ 중간 단계 규칙 체크 (해제 - 최종 규칙)
단계 레벨: 3

범위 조건:
- 0~2000: 수량 1개
- 2000~4000: 수량 2개
- 4000~10000: 수량 3개
```

#### Step 2: 2단계 규칙 생성

```
규칙 코드: CASE-ITEM-SCREEN
규칙명: 케이스 품목 선택 - 스크린 (2단계)
카테고리: 스크린
기준 유형: 범위(Range)
입력 변수: S

☑️ 중간 단계 규칙 체크
단계 레벨: 2
결과 타입: 품목(item)

범위 조건:
- 0~1500: 품목A (케이스 소형)
- 1500~3000: 품목B (케이스 중형)
- 3000~5000: 품목C (케이스 대형)

📍 3단계 매핑 조건 설정:
조건 추가 → 
  조건 타입: 텍스트 포함
  포함할 텍스트: "케이스"
  실행할 3단계 규칙: CASE-QTY-DETAIL
  ☑️ 2단계 결과를 3단계 입력값으로 전달 (선택)
```

#### Step 3: 1단계 규칙 생성

```
규칙 코드: CASE-SIZE-SCREEN
규칙명: 케이스 사이즈(S) - 스크린 (1단계)
카테고리: 스크린
기준 유형: 수식(Formula)
입력 변수: W0
수식: W0 + 220

☑️ 중간 단계 규칙 체크
단계 레벨: 1
결과 타입: 값(value)

📍 2단계 매핑 조건 설정:
조건 추가 → 
  조건 타입: 범위 조건
  최소값: 0
  최대값: 10000
  실행할 2단계 규칙: CASE-ITEM-SCREEN
  ☑️ 1단계 결과를 2단계 입력값으로 전달
  2단계 입력 변수명: S
```

---

## 다단계 매핑 완전 가이드

### 매핑 조건 타입

#### 1. 정확히 일치 (exact)
- **사용**: 규격이 정확히 일치할 때
- **예시**: 1단계 결과가 "4인치"일 때 → 특정 2단계 규칙 실행
```
1단계 결과 = "4인치"
```

#### 2. 범위 조건 (range)
- **사용**: 수치 범위로 판단
- **예시**: 1단계 결과가 1000~2000 범위일 때
```
1000 ≤ 1단계 결과 ≤ 2000
```

#### 3. 텍스트 포함 (contains)
- **사용**: 결과에 특정 텍스트가 포함되는지 확인
- **예시**: 1단계 결과에 "샤프트"가 포함될 때
```
1단계 결과에 "샤프트" 포함
```

#### 4. 수식 평가 (formula)
- **사용**: 복잡한 조건 (고급)
- **예시**: JavaScript 수식으로 조건 평가
```
stage1Result > 1000 && stage1Result < 2000
```

### 결과 전달 옵션

#### ☑️ N단계 결과를 N+1단계 입력값으로 전달
- **체크 시**: 이전 단계 결과를 다음 단계 규칙의 입력 변수로 사용
- **입력 변수명 지정**: 다음 단계에서 사용할 변수명 (예: S, diameter, spec)

---

## 실전 예제

### 예제 1: 감기샤프트 2단계 프로세스

**비즈니스 로직**:
1. 제작사이즈(W1)로 샤프트 규격 결정 (4"/5"/6")
2. 샤프트 규격 + 오픈사이즈(W0)로 품목 및 수량 산출

**구현**:

#### 1단계 규칙
```
규칙 코드: SHAFT-SPEC-SCREEN
규칙명: 감기샤프트 규격 - 스크린
카테고리: 스크린
기준 유형: 범위(Range)
입력 변수: W1

☑️ 중간 단계 규칙
단계 레벨: 1
결과 타입: 규격(specification)

범위:
- 0~6000: 결과 "4인치"
- 6000~8200: 결과 "5인치"
- 8200~10200: 결과 "6인치"

📍 2단계 매핑:
조건1:
  - 조건 타입: 정확히 일치
  - 일치할 값: "4인치"
  - 실행 규칙: SHAFT-ITEM-4INCH
  - ☑️ 1단계 결과 전달
  - 변수명: diameter

조건2:
  - 일치할 값: "5인치"
  - 실행 규칙: SHAFT-ITEM-5INCH
  
조건3:
  - 일치할 값: "6인치"
  - 실행 규칙: SHAFT-ITEM-6INCH
```

#### 2단계 규칙들
```
규칙 코드: SHAFT-ITEM-4INCH
규칙명: 4인치 샤프트 품목/수량
카테고리: 스크린
기준 유형: 범위(Range)
입력 변수: W0

☑️ 중간 단계 규칙 (해제 - 최종)

범위:
- 0~3000: 품목A 1개
- 3000~6000: 품목B 2개
```

### 예제 2: 브라케트 품목 조건 (NEW!)

**비즈니스 로직**:
- 모터 용량에 따라 다른 브라케트 규격 적용
- 모터는 150K~1000K까지 품목으로 등록됨

**구현**:

```
규칙 코드: BRACKET-SCREEN
규칙명: 브라케트 규격 - 스크린
카테고리: 스크린
기준 유형: 범위(Range)
입력 변수: motorCapacity

범위 조건 1:
  최소값: 0
  최대값: 999
  품목: BRACKET-380-180 (브라케트 380×180)
  수량: 1
  
  📦 추가 조건 (품목 기반):
    조건 유형: AND
    조건 소스: 품목
    품목 선택: MOTOR-150K (모터 150K)
    설명: 모터 150K 사용 시

범위 조건 2:
  최소값: 0
  최대값: 999
  품목: BRACKET-530-320 (브라케트 530×320)
  수량: 1
  
  📦 추가 조건 (품목 기반):
    조건 유형: AND
    조건 소스: 품목
    품목 선택: MOTOR-300K (모터 300K)
    설명: 모터 300K 사용 시
```

**사용법**:
1. 먼저 모터 품목들을 품목 마스터에 등록 (MOTOR-150K, MOTOR-300K 등)
2. 범위 조건 추가
3. 각 범위에 "추가 조건" 클릭
4. 조건 소스를 **"품목"**으로 선택
5. 품목 선택 드롭다운에서 모터 선택
6. 해당 모터가 사용될 때 이 브라케트가 적용됨

### 예제 3: 가이드레일 설치 유형별 분기

**비즈니스 로직**:
- 설치 유형(벽면형/측면형)과 제품 구분(스크린/철재)에 따라 다른 BASE 규격 적용

**구현**:

```
규칙 코드: GR-INSTALL-TYPE
규칙명: 가이드레일 설치 유형별 BASE
카테고리: 공통
기준 유형: 범위(Range)
입력 변수: installType

범위:
- installType = "벽면형": 결과 "BASE1"
  추가 조건 (변수 기반):
    - AND 조건: category = "스크린"
    - 결과: "BASE1-스크린"
    
- installType = "측면형": 결과 "BASE2"
  추가 조건 (변수 기반):
    - AND 조건: category = "철재"
    - 결과: "BASE2-철재"
```

---

## FAQ

### Q1: 2단계 조건 설정 시 선택할 규칙이 없어요
**A**: 2단계 규칙을 먼저 생성해야 합니다. 순서:
1. 2단계 규칙 생성 (중간 단계 체크, 레벨 2)
2. 1단계 규칙 생성 (중간 단계 체크, 레벨 1)
3. 1단계에서 2단계 매핑 설정

### Q2: 3단계 이상 매핑이 안 되나요?
**A**: 가능합니다! 무제한 확장 가능합니다.
- 3단계 규칙 생성 (레벨 3)
- 2단계 규칙 생성 (레벨 2) + 3단계 매핑
- 1단계 규칙 생성 (레벨 1) + 2단계 매핑

### Q3: 한 구간에 여러 품목을 넣고 싶어요
**A**: 범위 조건 카드에서 "품목 추가" 버튼 클릭
- 같은 구간에 품목 여러 개 등록 가능
- 각각 다른 수량 지정 가능

### Q4: AND/OR 조건은 어떻게 사용하나요?
**A**: 범위 조건에서 "추가 조건" 섹션 사용
- AND: 모든 조건을 만족해야 함
- OR: 하나라도 만족하면 됨
- 여러 개 조합 가능

### Q5: 다단계 매핑 실행 순서는?
**A**: 위에서 아래로 순차 평가
- 첫 번째 일치하는 조건의 규칙 실행
- 더 구체적인 조건을 위쪽에 배치 권장

### Q6: 이미 생성한 규칙을 수정할 수 있나요?
**A**: 네, 목록에서 "수정" 버튼 클릭
- 단, 규칙 코드는 수정 불가 (삭제 후 재생성)
- 범위, 매핑 조건은 수정 가능

### Q7: 모든 카테고리를 다 담을 수 있나요?
**A**: 네! 
- 범위/수식/고정값 조합
- 다단계 매핑
- 복합 조건 (AND/OR, 변수 조건, 품목 조건)
- 이 3가지로 모든 산정 로직 표현 가능

### Q8: 품목 조건은 언제 사용하나요? (NEW!)
**A**: 특정 품목이 선택되었을 때 다른 규격/품목을 적용하는 경우
- **예시 1**: 모터 150K 사용 시 → 브라케트 380×180
- **예시 2**: 모터 300K 사용 시 → 브라케트 530×320
- **설정 방법**:
  1. 추가 조건 섹션에서 "조건 추가" 클릭
  2. 조건 소스를 "품목"으로 선택
  3. 품목 선택 드롭다운에서 해당 품목 선택
  4. 해당 품목이 프로젝트/견적에 포함되면 자동 적용

---

## 빠른 참조

### 기본 변수
- `W0`: 오픈사이즈(폭)
- `H0`: 오픈사이즈(높이)
- `W1`: 제작사이즈(폭)
- `H1`: 제작사이즈(높이)
- `G`: 가이드레일 제작길이
- `K`: 모터 용량
- `S`: 케이스 사이즈
- `B`: 폭(B×2 등에 사용)

### 단위
- `mm`: 밀리미터
- `㎡`: 제곱미터
- `KG`: 킬로그램
- `EA`: 개수
- `SET`: 세트
- `M`: 미터

### 규칙 코드 네이밍 권장
- 형식: `{대분류}-{세부}-{구분}`
- 예시:
  - `GR-MATERIAL-SCREEN`: 가이드레일 자재 스크린
  - `SHAFT-SPEC-STEEL`: 샤프트 규격 철재
  - `CASE-SIZE-SCREEN`: 케이스 사이즈 스크린

---

## 문의 및 지원

산정 기준 등록 시 어려움이 있으시면:
1. 이 가이드의 실전 예제 참조
2. 시스템에 등록된 샘플 규칙 확인
3. 기술 지원팀 문의

**마지막 업데이트**: 2025-11-18
**버전**: 1.0
