# 품목 조건 기능 (Item Condition Feature)

## 📦 개요

산정 기준 시스템에 **품목 조건** 기능이 추가되었습니다. 이제 변수(W0, H1 등)뿐만 아니라 **품목(모터, 부품 등)**을 조건으로 사용할 수 있습니다.

---

## 🎯 사용 사례

### 브라케트 & 받침용앵글 산정

모터 용량에 따라 브라케트와 샤프트 규격, 받침용앵글 규격이 자동으로 결정됩니다.

#### 스크린용
| 모터 용량 | 브라케트 규격 | 샤프트 | 받침용앵글 |
|---------|------------|--------|----------|
| 150K | 380×180 | 3-4" | 40×40×380 |
| 300K | 530×320 | 3-5" | - |
| 400K | 530×320 | 3-6" | - |

#### 철재용
| 모터 용량 | 브라케트 규격 | 샤프트 | 받침용앵글 |
|---------|------------|--------|----------|
| 300K | 530×320 | 4" | 50×50×530 |
| 400K | 600×350 | 5" | 50×50×600 |
| 500K | 600×350 | 6" | - |
| 600K | 690×390 | 6" | 50×50×690 |
| 800K | 690×390 | 8" | - |

---

## 🔧 기술 구현

### 1. 데이터 타입 확장

**AdditionalCondition 인터페이스**에 품목 조건 필드 추가:

```typescript
export interface AdditionalCondition {
  id: string;
  conditionSource: 'variable' | 'item'; // 조건 소스: 변수 또는 품목
  
  // 변수 기반 조건 (기존)
  variable?: string; // 예: "K", "H1", "weight"
  minValue?: number;
  maxValue?: number;
  
  // 품목 기반 조건 (신규)
  itemCode?: string; // 예: "MOTOR-150K"
  itemName?: string; // 예: "모터 150K"
  
  conditionType: 'and' | 'or';
  result?: string;
  description?: string;
}
```

### 2. UI 컴포넌트 개선

**MultiConditionInput.tsx**
- 조건 소스 선택 기능 추가 (변수 / 품목)
- 품목 선택 시 Combobox로 품목 검색 및 선택
- 품목 정보 표시 (품목코드, 품목명, 규격)

### 3. 샘플 데이터 추가

#### 모터 용량 품목 (7개)
```typescript
- MOTOR-150K: 모터 150K
- MOTOR-300K: 모터 300K
- MOTOR-400K: 모터 400K
- MOTOR-500K: 모터 500K
- MOTOR-600K: 모터 600K
- MOTOR-800K: 모터 800K
- MOTOR-1000K: 모터 1000K
```

#### 브라케트 품목 (4개)
```typescript
- BRACKET-380-180: 브라케트 380×180
- BRACKET-530-320: 브라케트 530×320
- BRACKET-600-350: 브라케트 600×350
- BRACKET-690-390: 브라케트 690×390
```

#### 받침용앵글 품목 (4개)
```typescript
- ANGLE-40-40-380: 받침용앵글 40×40×380
- ANGLE-50-50-530: 받침용앵글 50×50×530
- ANGLE-50-50-600: 받침용앵글 50×50×600
- ANGLE-50-50-690: 받침용앵글 50×50×690
```

#### 산정 기준 규칙 (2개)
```typescript
- BRACKET-SCREEN: 브라케트 규격 - 스크린 (품목 조건 사용)
- BRACKET-STEEL: 브라케트 규격 - 철재 (품목 조건 사용)
```

---

## 📝 사용 방법

### Step 1: 품목 마스터 등록

먼저 조건으로 사용할 품목을 품목 마스터에 등록합니다.

```
품목관리 → 기준 등록
- 품목 코드: MOTOR-150K
- 품목명: 모터 150K
- 품목 유형: 구매품(PT)
- 품목 카테고리: 모터
- 규격: 150K
```

### Step 2: 산정 기준 등록

```
산정기준등록 → 기준 등록
- 규칙 코드: BRACKET-SCREEN
- 규칙명: 브라케트 규격 - 스크린
- 카테고리: 스크린
- 기준 유형: 범위(Range)
```

### Step 3: 범위 조건 추가

```
범위 추가
- 최소값: 0
- 최대값: 999
- 품목: BRACKET-380-180 (브라케트 380×180)
- 수량: 1
```

### Step 4: 품목 조건 추가

```
📦 추가 조건
1. "조건 추가" 버튼 클릭
2. 조건 유형: AND
3. 조건 소스: 📦 품목 선택
4. 품목 선택: MOTOR-150K (모터 150K)
5. 설명: "모터 150K 사용 시"
```

### Step 5: 동작 확인

프로젝트/견적에서:
- 모터 150K를 선택하면
- 자동으로 브라케트 380×180이 산출됨

---

## 🎨 UI 표시

### 조건 소스 선택
```
┌─────────────────────┐
│ 조건 소스           │
├─────────────────────┤
│ 📊 변수 (W0, H1 등) │ ← 기존 방식
│ 📦 품목 (모터, 부품)│ ← 신규 방식
└─────────────────────┘
```

### 변수 조건 (기존)
```
┌─────────┬─────────┬─────────┐
│ 변수명  │ 최소값  │ 최대값  │
├─────────┼─────────┼─────────┤
│ K       │ 0       │ 400     │
└─────────┴─────────┴─────────┘
```

### 품목 조건 (신규)
```
┌───────────────────────────────────┐
│ 품목 선택                         │
├───────────────────────────────────┤
│ 📦 MOTOR-150K - 모터 150K        │
└───────────────────────────────────┘
💡 선택한 품목이 조건에 포함되면 이 범위가 적용됩니다
```

---

## 💡 장점

### 1. 직관적인 조건 설정
- 복잡한 변수 조건 대신 품목을 직접 선택
- "모터 150K 사용 시"처럼 자연스러운 표현

### 2. 유지보수 용이
- 품목 코드만 관리하면 됨
- 규격 변경 시 품목 마스터만 수정

### 3. 확장성
- 모든 품목에 적용 가능
- 조합 조건 지원 (변수 + 품목 동시 사용)

### 4. 실무 적합
- 실제 산정 기준과 동일한 방식
- 엑셀 기준표를 그대로 시스템화

---

## 📊 예제: 브라케트 산정 규칙

```typescript
{
  id: 'RULE-BRACKET-SCREEN-001',
  ruleCode: 'BRACKET-SCREEN',
  ruleName: '브라케트 규격 - 스크린',
  category: '스크린',
  ruleType: 'range',
  ranges: [
    {
      id: 'BS-1',
      minValue: 0,
      maxValue: 999,
      itemCode: 'BRACKET-380-180',
      itemName: '브라케트 380×180',
      quantity: 1,
      additionalConditions: [
        {
          id: 'BS-1-COND',
          conditionSource: 'item',        // 품목 조건!
          itemCode: 'MOTOR-150K',
          itemName: '모터 150K',
          conditionType: 'and',
          description: '모터 150K 사용 시'
        }
      ]
    },
    {
      id: 'BS-2',
      minValue: 0,
      maxValue: 999,
      itemCode: 'BRACKET-530-320',
      itemName: '브라케트 530×320',
      quantity: 1,
      additionalConditions: [
        {
          id: 'BS-2-COND',
          conditionSource: 'item',        // 품목 조건!
          itemCode: 'MOTOR-300K',
          itemName: '모터 300K',
          conditionType: 'and',
          description: '모터 300K 사용 시'
        }
      ]
    }
  ],
  status: 'active'
}
```

---

## 🔄 조건 평가 로직

```
기본 범위 조건 만족 여부 확인
  ↓
추가 조건이 있는가?
  ├─ 없음 → 이 범위 적용
  └─ 있음 → 추가 조건 평가
      ├─ 변수 조건: 변수 값 범위 확인
      └─ 품목 조건: 프로젝트에 해당 품목 포함 여부 확인
          ↓
      모든 AND 조건 만족 OR 하나라도 OR 조건 만족?
          ├─ Yes → 이 범위 적용
          └─ No → 다음 범위 확인
```

---

## 🎯 다음 단계

### 자동 산출 시스템 연동
품목 조건이 설정된 산정 기준을 자동 산출 시스템에서 실행할 수 있도록 로직 구현 필요.

### 조건 미리보기 개선
품목 조건이 포함된 경우 더 명확한 미리보기 표시.

### 품목 조합 조건
여러 품목의 조합으로 조건 설정 가능하도록 확장.

---

**작성일**: 2025-11-18  
**버전**: 1.0  
**작성자**: 시스템 관리자
