# 품목코드 자동생성 로직

## 개요

품목코드는 품목기준관리에서 별도 필드로 등록하지 않고, **프론트엔드(DynamicItemForm)에서 자동 생성**한다.

## 배경

- 품목기준관리 API에 "자동생성 필드" 설정 기능이 아직 없음 (TODO 상태)
- 당장 테스트를 위해 프론트에서 처리하기로 결정 (2025-12-02)

## 자동생성 규칙 (2025-12-03 업데이트)

### PT (부품) - 영문약어-순번 형식
```
품목명 선택 → 영문약어 매핑 조회 → 기존 품목코드에서 순번 계산 → 코드 생성

예시:
- 가이드레일 → GR → GR-001, GR-002, ...
- 모터 → MOTOR → MOTOR-001, MOTOR-002, ...
- 제어기 → CTL → CTL-001, CTL-002, ...
```

### 기타 품목 (FG, SM, RM, CS) - 품목명-규격 형식
```
IF 해당 페이지에 item_name 필드 존재
AND specification 필드 존재
THEN
  → "품목코드 (자동생성)" 읽기전용 필드 자동 표시
  → 값: {품목명}-{규격}
  → 저장 시 품목관리 API의 code로 전달
```

## 영향 범위

### 품목기준관리에 등록할 필드 (CS 소모품 예시)

| 필드명 | field_key | field_type | 비고 |
|--------|-----------|------------|------|
| 품목명 | `item_name` | textbox | 필수 |
| 규격(사양) | `specification` | textbox | 필수 |
| 단위 | `unit` | dropdown | 필수 |
| 비고 | `note` | textarea | 선택 |

### 품목기준관리에 등록하지 않는 필드

| 필드명 | 이유 |
|--------|------|
| 품목코드 | 프론트에서 자동생성 |

## 구현 위치

- **파일**: `src/components/items/DynamicItemForm/index.tsx`
- **로직**:
  1. `structure`에서 `item_name`, `specification` 필드 존재 여부 체크
  2. 둘 다 있으면 품목코드 읽기전용 필드 렌더링
  3. 값은 `formData.item_name` + `-` + `formData.specification`
  4. 저장 시 `submitData.item_code`에 포함

## 향후 계획

- 품목기준관리 API에 `properties.autoGenerate` 설정 기능 추가 시 마이그레이션
- 예시 설정:
```json
{
  "field_name": "품목코드",
  "field_type": "textbox",
  "properties": {
    "autoGenerate": {
      "formula": "{item_name}-{specification}",
      "readonly": true
    }
  }
}
```

## 관련 문서

- `[PLAN-2025-11-28] dynamic-item-form-implementation.md`
- `[IMPL-2025-12-02] dynamic-item-form-rebuild.md`
- `[REF] item-code-hardcoding.md` - PT 품목코드 하드코딩 내역 상세