# 기준정보 모듈 상세 가이드

## 목차
1. [견적수식관리](#견적수식관리)
2. [번호기준관리](#번호기준관리)

---

## 견적수식관리

### 개요
견적수식관리는 견적서 작성 시 품목별 금액을 자동으로 계산하는 수식을 정의하고 관리하는 모듈입니다. 복잡한 계산 로직을 수식으로 등록하여 견적 작성의 정확성과 효율성을 높일 수 있습니다.

### 주요 기능

#### 1. 기본 수식 관리
- **표준 수식**
  - 공급가액 = 단가 × 수량
  - 부가세 = 공급가액 × 0.1
  - 총액 = 공급가액 + 부가세
  
- **커스텀 수식**
  - 품목별 특수 계산 수식
  - 조건부 계산 로직
  - 할인율 적용 수식
  - 수량 구간별 단가 적용

#### 2. 수식 구성 요소

##### 2.1 변수 정의
- **기본 변수**
  - `UNIT_PRICE`: 단가
  - `QUANTITY`: 수량
  - `SUPPLY_AMOUNT`: 공급가액
  - `VAT`: 부가세
  - `TOTAL_AMOUNT`: 총액
  
- **품목 속성 변수**
  - `ITEM_COST`: 품목 원가
  - `ITEM_CATEGORY`: 품목 카테고리
  - `MARGIN_RATE`: 마진율
  
- **거래처 속성 변수**
  - `CUSTOMER_GRADE`: 거래처 등급
  - `DISCOUNT_RATE`: 할인율

##### 2.2 연산자
- **산술 연산자**
  - `+` : 덧셈
  - `-` : 뺄셈
  - `*` : 곱셈
  - `/` : 나눗셈
  - `%` : 나머지
  
- **비교 연산자**
  - `>` : 크다
  - `<` : 작다
  - `>=` : 크거나 같다
  - `<=` : 작거나 같다
  - `==` : 같다
  - `!=` : 다르다
  
- **논리 연산자**
  - `AND` : 그리고
  - `OR` : 또는
  - `NOT` : 부정

##### 2.3 함수
- **수학 함수**
  - `ROUND(값, 자릿수)`: 반올림
  - `CEIL(값)`: 올림
  - `FLOOR(값)`: 내림
  - `MIN(값1, 값2, ...)`: 최소값
  - `MAX(값1, 값2, ...)`: 최대값
  - `SUM(값1, 값2, ...)`: 합계
  
- **조건 함수**
  - `IF(조건, 참일때값, 거짓일때값)`: 조건 분기
  - `SWITCH(값, 케이스1, 결과1, 케이스2, 결과2, ...)`: 다중 조건

#### 3. 수식 유형

##### 3.1 단순 수식
기본적인 곱셈 계산
```
공급가액 = UNIT_PRICE * QUANTITY
```

##### 3.2 할인 적용 수식
할인율을 적용한 계산
```
공급가액 = UNIT_PRICE * QUANTITY * (1 - DISCOUNT_RATE)
```

##### 3.3 수량 구간별 단가 수식
수량에 따라 단가가 달라지는 경우
```
단가 = IF(QUANTITY >= 100, 
         UNIT_PRICE * 0.9,
       IF(QUANTITY >= 50,
         UNIT_PRICE * 0.95,
         UNIT_PRICE))
공급가액 = 단가 * QUANTITY
```

##### 3.4 마진율 기반 수식
원가에 마진을 더하여 판매가 계산
```
단가 = ITEM_COST * (1 + MARGIN_RATE)
공급가액 = ROUND(단가 * QUANTITY, 0)
```

##### 3.5 복합 조건 수식
거래처 등급과 수량을 모두 고려
```
할인율 = IF(CUSTOMER_GRADE == "VIP" AND QUANTITY >= 100, 0.15,
          IF(CUSTOMER_GRADE == "VIP", 0.1,
          IF(QUANTITY >= 100, 0.05, 0)))
공급가액 = UNIT_PRICE * QUANTITY * (1 - 할인율)
```

#### 4. 수식 등록 프로세스

##### 4.1 수식 생성
1. 수식명 입력
2. 수식 설명 입력
3. 적용 대상 선택 (전체/카테고리/품목)
4. 수식 코드 작성
5. 수식 검증
6. 저장

##### 4.2 수식 검증
- **구문 검사**
  - 변수명 유효성 확인
  - 연산자 사용 적합성 확인
  - 괄호 짝 확인
  
- **논리 검사**
  - 순환 참조 방지
  - 0으로 나누기 방지
  - 범위 초과 방지
  
- **테스트 실행**
  - 샘플 데이터로 계산 테스트
  - 결과값 검증
  - 오류 확인

#### 5. 수식 적용 우선순위

1. **품목별 전용 수식** (최우선)
   - 특정 품목에만 적용되는 수식
   
2. **카테고리별 수식**
   - 완제품/반제품/부자재/원자재 카테고리별 수식
   
3. **기본 수식** (기본값)
   - 모든 품목에 적용되는 표준 수식

#### 6. 수식 관리

##### 6.1 수식 조회
- **목록 조회**
  - 수식명, 적용대상, 작성일, 상태 표시
  - 활성/비활성 구분
  
- **상세 조회**
  - 수식 코드 확인
  - 적용 품목 목록
  - 사용 이력

##### 6.2 수식 수정
- 버전 관리
  - 수식 수정 시 새 버전 생성
  - 이전 버전 이력 보관
  
- 영향도 분석
  - 수식 변경 시 영향받는 품목 확인
  - 기존 견적서 재계산 여부 결정

##### 6.3 수식 비활성화
- 사용 중단 처리
- 대체 수식 지정
- 기존 데이터 유지

### 실전 예제

#### 예제 1: 기본 견적 수식
```
# 수식명: 기본 견적 계산
# 적용대상: 전체 품목

공급가액 = ROUND(UNIT_PRICE * QUANTITY, 0)
부가세 = ROUND(공급가액 * 0.1, 0)
총액 = 공급가액 + 부가세
```

#### 예제 2: VIP 고객 할인 수식
```
# 수식명: VIP 고객 할인 적용
# 적용대상: 전체 품목

기본금액 = UNIT_PRICE * QUANTITY
할인금액 = IF(CUSTOMER_GRADE == "VIP", 
             기본금액 * 0.1, 
             0)
공급가액 = ROUND(기본금액 - 할인금액, 0)
부가세 = ROUND(공급가액 * 0.1, 0)
총액 = 공급가액 + 부가세
```

#### 예제 3: 수량별 차등 단가 수식
```
# 수식명: 수량별 차등 단가
# 적용대상: 완제품 카테고리

실제단가 = IF(QUANTITY >= 1000, UNIT_PRICE * 0.85,
           IF(QUANTITY >= 500, UNIT_PRICE * 0.90,
           IF(QUANTITY >= 100, UNIT_PRICE * 0.95,
           UNIT_PRICE)))
           
공급가액 = ROUND(실제단가 * QUANTITY, 0)
부가세 = ROUND(공급가액 * 0.1, 0)
총액 = 공급가액 + 부가세
```

#### 예제 4: 원가 기반 마진 적용 수식
```
# 수식명: 원가 + 마진 계산
# 적용대상: 반제품 카테고리

기본마진 = 0.30
최소마진 = 0.20

마진율 = IF(QUANTITY >= 500, 기본마진 - 0.05,
         IF(QUANTITY >= 100, 기본마진,
         기본마진 + 0.05))
         
최종마진 = MAX(마진율, 최소마진)
판매단가 = ROUND(ITEM_COST * (1 + 최종마진), 0)
공급가액 = 판매단가 * QUANTITY
부가세 = ROUND(공급가액 * 0.1, 0)
총액 = 공급가액 + 부가세
```

#### 예제 5: 복합 조건 수식
```
# 수식명: 종합 할인 계산
# 적용대상: 전체 품목

# 거래처 등급별 기본 할인
등급할인 = SWITCH(CUSTOMER_GRADE,
                  "VIP", 0.15,
                  "Gold", 0.10,
                  "Silver", 0.05,
                  0)

# 수량별 추가 할인
수량할인 = IF(QUANTITY >= 1000, 0.10,
           IF(QUANTITY >= 500, 0.05,
           IF(QUANTITY >= 100, 0.02,
           0)))

# 최대 할인 한도 30%
총할인율 = MIN(등급할인 + 수량할인, 0.30)

# 최종 금액 계산
기본금액 = UNIT_PRICE * QUANTITY
할인금액 = 기본금액 * 총할인율
공급가액 = ROUND(기본금액 - 할인금액, 0)
부가세 = ROUND(공급가액 * 0.1, 0)
총액 = 공급가액 + 부가세
```

### 업무 프로세스

```
1. 계산 요구사항 분석
   ↓
2. 수식 설계
   ↓
3. 변수 및 연산자 정의
   ↓
4. 수식 코드 작성
   ↓
5. 수식 검증 (테스트)
   ↓
6. 수식 등록
   ↓
7. 적용 대상 지정
   ↓
8. 견적 작성 시 자동 적용
   ↓
9. 결과 검증 및 수정
```

### 활용 팁

#### 수식 작성 시 주의사항
- 변수명은 대문자로 명확하게 작성
- 복잡한 수식은 단계별로 변수에 저장하여 가독성 향상
- 나눗셈 시 0으로 나누는 경우 방지 로직 추가
- 금액은 항상 ROUND 함수로 반올림 처리

#### 성능 최적화
- 불필요한 중첩 조건문 최소화
- 반복 계산되는 값은 변수에 저장
- 복잡한 수식은 카테고리별로 분리

#### 유지보수
- 수식 설명을 상세히 작성
- 수정 이력 기록
- 테스트 케이스 문서화
- 정기적인 수식 검토

---

## 번호기준관리

### 개요
번호기준관리는 시스템 내에서 생성되는 모든 문서번호, 코드번호의 채번 규칙을 정의하고 관리하는 모듈입니다. 일관된 번호 체계를 통해 문서 추적과 관리가 용이해집니다.

### 주요 기능

#### 1. 번호 유형 관리

##### 1.1 품목 관련
- **품목코드**
  - 형식: `ITEM-{카테고리코드}-{일련번호}`
  - 예시: `ITEM-FIN-0001` (완제품)
  - 예시: `ITEM-SEM-0042` (반제품)
  - 예시: `ITEM-SUB-0025` (부자재)
  - 예시: `ITEM-RAW-0015` (원자재)

##### 1.2 판매 관련
- **견적번호**
  - 형식: `QT-{YYYYMMDD}-{일련번호}`
  - 예시: `QT-20241202-0001`
  
- **수주번호**
  - 형식: `SO-{YYYYMMDD}-{일련번호}`
  - 예시: `SO-20241202-0001`

##### 1.3 거래처 관련
- **거래처코드**
  - 형식: `CUST-{유형코드}-{일련번호}`
  - 예시: `CUST-C-0001` (고객사)
  - 예시: `CUST-V-0001` (협력사)
  - 예시: `CUST-S-0001` (공급사)

- **현장코드**
  - 형식: `SITE-{거래처코드}-{일련번호}`
  - 예시: `SITE-CUST-C-0001-01`

##### 1.4 생산 관련
- **작업지시번호**
  - 형식: `WO-{YYYYMMDD}-{일련번호}`
  - 예시: `WO-20241202-0001`

- **LOT번호**
  - 형식: `LOT-{품목코드}-{YYYYMMDD}-{일련번호}`
  - 예시: `LOT-ITEM-FIN-0001-20241202-001`

##### 1.5 구매 관련
- **발주번호**
  - 형식: `PO-{YYYYMMDD}-{일련번호}`
  - 예시: `PO-20241202-0001`

- **입고번호**
  - 형식: `IN-{YYYYMMDD}-{일련번호}`
  - 예시: `IN-20241202-0001`

##### 1.6 재고 관련
- **입출고번호**
  - 형식: `TR-{구분코드}-{YYYYMMDD}-{일련번호}`
  - 예시: `TR-IN-20241202-0001` (입고)
  - 예시: `TR-OUT-20241202-0001` (출고)

- **재고조정번호**
  - 형식: `ADJ-{YYYYMMDD}-{일련번호}`
  - 예시: `ADJ-20241202-0001`

#### 2. 번호 구성 요소

##### 2.1 접두사 (Prefix)
- 문서/데이터 유형 구분
- 2~4자리 영문 코드
- 예시: `QT`, `SO`, `WO`, `ITEM`

##### 2.2 날짜 형식
- **YYYYMMDD**: 년월일 (20241202)
- **YYYYMM**: 년월 (202412)
- **YYYY**: 년도 (2024)
- **YY**: 년도 2자리 (24)

##### 2.3 구분 코드
- 카테고리 또는 유형 구분
- 1~3자리 영문
- 예시: `FIN`(완제품), `C`(고객사)

##### 2.4 일련번호
- 자동 증가 번호
- 자릿수 지정 가능 (4자리, 5자리 등)
- 앞자리 0으로 채움
- 예시: `0001`, `0042`, `1234`

##### 2.5 구분자
- 번호 구성 요소 사이 구분
- 하이픈 `-` 사용
- 예시: `QT-20241202-0001`

#### 3. 번호 채번 규칙

##### 3.1 기본 규칙
```
{접두사}-{날짜형식}-{일련번호}
```

##### 3.2 확장 규칙
```
{접두사}-{구분코드}-{날짜형식}-{일련번호}
```

##### 3.3 계층 규칙
```
{상위코드}-{하위일련번호}
```

#### 4. 일련번호 초기화 정책

##### 4.1 일별 초기화
- 매일 자정에 일련번호 1로 리셋
- 적용: 견적번호, 수주번호, 작업지시번호
- 예시: 
  - 2024년 12월 2일: `QT-20241202-0001`
  - 2024년 12월 3일: `QT-20241203-0001` (다시 1부터 시작)

##### 4.2 월별 초기화
- 매월 1일에 일련번호 1로 리셋
- 적용: 발주번호, 입고번호
- 예시:
  - 2024년 12월: `PO-202412-0001`
  - 2025년 1월: `PO-202501-0001`

##### 4.3 연도별 초기화
- 매년 1월 1일에 일련번호 1로 리셋
- 적용: 거래처코드, 현장코드
- 예시:
  - 2024년: `CUST-C-2024-0001`
  - 2025년: `CUST-C-2025-0001`

##### 4.4 초기화 없음
- 계속해서 증가
- 적용: 품목코드, LOT번호
- 예시:
  - `ITEM-FIN-0001`
  - `ITEM-FIN-0002`
  - ... (계속 증가)

#### 5. 번호기준 등록

##### 5.1 등록 정보
- **기준명**: 번호 유형 명칭
- **접두사**: 문서 구분 코드
- **날짜형식**: YYYYMMDD, YYYYMM, YYYY, 없음
- **구분코드 사용**: 예/아니오
- **일련번호 자릿수**: 4자리, 5자리 등
- **초기화 정책**: 일별/월별/연도별/없음
- **현재 일련번호**: 마지막 사용 번호
- **사용 여부**: 활성/비활성

##### 5.2 등록 예시

**견적번호 기준**
- 기준명: 견적번호
- 접두사: QT
- 날짜형식: YYYYMMDD
- 구분코드: 사용안함
- 일련번호 자릿수: 4
- 초기화 정책: 일별
- 결과: `QT-20241202-0001`

**품목코드 기준**
- 기준명: 품목코드
- 접두사: ITEM
- 날짜형식: 없음
- 구분코드: 사용 (FIN/SEM/SUB/RAW)
- 일련번호 자릿수: 4
- 초기화 정책: 없음
- 결과: `ITEM-FIN-0001`

**현장코드 기준**
- 기준명: 현장코드
- 접두사: SITE
- 날짜형식: 없음
- 구분코드: 사용 (거래처코드)
- 일련번호 자릿수: 2
- 초기화 정책: 거래처별
- 결과: `SITE-CUST-C-0001-01`

#### 6. 번호 발급 프로세스

```
1. 문서/데이터 생성 요청
   ↓
2. 번호 유형 확인
   ↓
3. 번호기준 조회
   ↓
4. 초기화 정책 확인
   ↓
5. 현재 일련번호 조회
   ↓
6. 일련번호 +1 증가
   ↓
7. 번호 생성 (조합)
   ↓
8. 번호 중복 검사
   ↓
9. 번호 발급 및 저장
   ↓
10. 일련번호 업데이트
```

#### 7. 번호 관리 기능

##### 7.1 번호 조회
- **발급 이력**
  - 날짜별 발급 번호 목록
  - 발급 시간
  - 발급자
  - 사용 문서

##### 7.2 번호 수정
- **일련번호 조정**
  - 현재 일련번호 수동 변경
  - 이유: 번호 건너뛰기, 특정 번호부터 시작
  
- **주의사항**
  - 중복 번호 발생 방지
  - 이미 사용된 번호는 수정 불가

##### 7.3 번호 초기화
- **수동 초기화**
  - 관리자가 직접 일련번호를 1로 리셋
  - 새로운 회계연도 시작 시
  - 번호 체계 변경 시

##### 7.4 번호 통계
- **발급 현황**
  - 일별/월별/연도별 발급 건수
  - 번호 유형별 사용 현황
  - 최대 발급 번호

#### 8. 번호 검증 규칙

##### 8.1 형식 검증
- 접두사 일치 확인
- 날짜 형식 유효성 확인
- 일련번호 자릿수 확인

##### 8.2 중복 검증
- 동일 번호 존재 여부 확인
- 발급 전 실시간 검증

##### 8.3 순차성 검증
- 일련번호 순차 증가 확인
- 건너뛴 번호 모니터링

### 실전 예제

#### 예제 1: 견적번호 자동 생성
```
날짜: 2024년 12월 2일
마지막 번호: QT-20241202-0042

신규 견적 생성 시
→ 번호기준 조회: 견적번호
→ 날짜 확인: 20241202 (동일)
→ 일련번호: 42 + 1 = 43
→ 생성 번호: QT-20241202-0043
```

#### 예제 2: 일자 변경 시 초기화
```
날짜: 2024년 12월 3일 (날짜 변경)
전일 마지막 번호: QT-20241202-0127

신규 견적 생성 시
→ 번호기준 조회: 견적번호
→ 날짜 확인: 20241203 (변경됨)
→ 초기화 정책: 일별 초기화
→ 일련번호: 1로 리셋
→ 생성 번호: QT-20241203-0001
```

#### 예제 3: 품목코드 생성
```
카테고리: 완제품 (FIN)
마지막 번호: ITEM-FIN-0099

신규 품목 생성 시
→ 번호기준 조회: 품목코드
→ 카테고리: FIN
→ 일련번호: 99 + 1 = 100
→ 생성 코드: ITEM-FIN-0100
```

#### 예제 4: 현장코드 생성
```
거래처: CUST-C-0001
마지막 현장번호: SITE-CUST-C-0001-03

신규 현장 생성 시
→ 번호기준 조회: 현장코드
→ 상위코드: CUST-C-0001
→ 일련번호: 3 + 1 = 4
→ 생성 코드: SITE-CUST-C-0001-04
```

### 업무 프로세스

```
1. 번호 유형 정의
   ↓
2. 번호 형식 설계
   ↓
3. 구성 요소 정의
   ↓
4. 초기화 정책 결정
   ↓
5. 번호기준 등록
   ↓
6. 시험 발급 (테스트)
   ↓
7. 검증 및 승인
   ↓
8. 실제 업무 적용
   ↓
9. 모니터링 및 관리
```

### 활용 팁

#### 번호 설계 원칙
- **명확성**: 번호만 봐도 문서 유형을 알 수 있도록
- **일관성**: 전체 시스템에서 동일한 규칙 적용
- **확장성**: 향후 증가를 고려한 충분한 자릿수
- **가독성**: 구분자를 사용하여 읽기 쉽게

#### 초기화 정책 선택 가이드
- **일별 초기화**: 일일 업무량이 많지 않고, 날짜별 구분이 중요한 경우
- **월별 초기화**: 월간 통계가 중요하고, 업무량이 중간 수준인 경우
- **연도별 초기화**: 연간 단위 관리가 필요하고, 업무량이 많은 경우
- **초기화 없음**: 영구적으로 고유한 번호가 필요한 경우 (품목, LOT)

#### 문제 해결
- **번호 중복**: 동시 접속으로 중복 발생 시 트랜잭션 잠금 사용
- **번호 건너뛰기**: 삭제된 문서의 번호는 재사용하지 않음
- **번호 고갈**: 자릿수 부족 시 사전에 자릿수 증가

#### 주의사항
- 번호기준 변경 시 기존 데이터 영향도 분석 필수
- 초기화 정책은 신중하게 결정 (변경 어려움)
- 일련번호 수동 조정은 꼭 필요한 경우에만 실시
- 번호 체계 변경 시 이전 버전과의 호환성 고려

---

## 모듈 간 연계

### 견적수식관리 ↔ 번호기준관리 통합 시나리오

#### 시나리오: 신규 견적 작성 프로세스
```
1. 견적 생성 버튼 클릭
   ↓
2. [번호기준관리] 견적번호 자동 발급
   → QT-20241202-0043 생성
   ↓
3. 거래처, 현장 선택
   ↓
4. 품목 및 수량 입력
   ↓
5. [견적수식관리] 단가/금액 자동 계산
   → 거래처 등급 확인
   → 수량별 할인율 적용
   → 공급가액, 부가세, 총액 계산
   ↓
6. 계산 결과 자동 입력
   ↓
7. 견적서 저장 및 출력
```

### 데이터 흐름
```
번호기준관리 → 모든 문서에 고유번호 부여
              ↓
         견적관리, 수주관리, 작업지시 등
              ↓
견적수식관리 → 견적/단가 자동 계산
```

### 시스템 전체 번호 체계
```
MASTER DATA (기준정보)
├─ 번호기준관리: 모든 번호 규칙 정의
└─ 견적수식관리: 계산 로직 정의

SALES (판매관리)
├─ 견적관리: QT-YYYYMMDD-####
├─ 거래처관리: CUST-{유형}-####
├─ 현장관리: SITE-{거래처코드}-##
└─ 단가관리: PRICE-{품목코드}-####

PRODUCTION (생산관리)
├─ 작업지시: WO-YYYYMMDD-####
└─ LOT관리: LOT-{품목코드}-YYYYMMDD-###

PURCHASE (구매관리)
├─ 발주관리: PO-YYYYMMDD-####
└─ 입고관리: IN-YYYYMMDD-####

INVENTORY (재고관리)
├─ 입출고: TR-{구분}-YYYYMMDD-####
└─ 재고조정: ADJ-YYYYMMDD-####
```

이렇게 기준정보 모듈이 시스템 전체의 번호 체계와 계산 로직을 통합 관리합니다.
