Files
sam-docs/history/2025-09/formula-system-analysis.md
hskwon 08a8259313 docs: 5130 레거시 분석 문서 및 기존 문서 초기 커밋
- 5130 레거시 시스템 분석 (00_OVERVIEW ~ 08_SAM_COMPARISON)
- MES 프로젝트 문서
- API/프론트엔드 스펙 문서
- 가이드 및 레퍼런스 문서
2025-12-04 18:47:19 +09:00

315 lines
8.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# SAM 산출식 시스템 분석 문서
**작성일**: 2025-09-22
**버전**: 2.0 (수정됨 🔄)
**목적**: SAM 프로젝트 전체 산출식 체계 정리, 5130 실제 구현 반영 및 오류 수정
---
## 📋 전체 산출식 개요
### 기본 입력 파라미터
- **W0** (오픈사이즈 폭), **H0** (오픈사이즈 높이)
- **설치방식**, **전원방식**
- **제품타입**: 스크린/철재
### 산출 흐름도
```
W0, H0 → W1, H1 (제작사이즈) → 면적, 중량(K) → 각종 부자재 수량
모터용량 → 샤프트규격 → 감기샤프트
브라켓, 가이드레일, 케이스, 하단마감, 각파이프
환봉(스크린전용), 조인트바
```
---
## 1. 오픈사이즈 → 제작사이즈/중량 계산
### 제작사이즈 계산 (수정됨 🔄)
**실제 5130 구현 기준**:
- **스크린**: W1 = W0 + 160, H1 = H0 + 350
- **철재**: W1 = W0 + 110, H1 = H0 + 350
**변수 설정**:
- makeWidth: 160 (스크린) / 110 (철재)
- makeHeight: 350 (공통)
### 중량 계산 (수정됨 🔄)
**스크린 (실제 구현)**:
- 면적(㎡) = W1 × H1 ÷ 1,000,000
- 중량(kg) = (면적 × 2) + (W0 ÷ 1000 × 14.17)
**철재 (추정)**:
- 면적(㎡) = W1 × H1 ÷ 1,000,000
- 중량(kg) = 면적 × 40 (기존 공식 유지)
---
## 2. 모터 용량 산정 (전면 수정됨 🔄)
### 실제 구현: 샤프트별 중량 매트릭스
**스크린용 모터 (5130 실제 로직)**:
| 샤프트 | 150K | 300K | 400K | 500K | 600K | 800K | 1000K |
|--------|------|------|------|------|------|------|-------|
| 4인치 | ≤150kg | 151-300kg | 301-400kg | - | - | - | - |
| 5인치 | ≤123kg | 124-246kg | 247-327kg | 328-500kg | 501-600kg | - | - |
| 6인치 | ≤104kg | 105-208kg | 209-300kg | 301-424kg | 425-508kg | 509-800kg | 801-1000kg |
### 샤프트 규격 결정 (수정됨 🔄)
**스크린 기준**:
- W1 ≤ 6000: 4인치
- 6000 < W1 8200: 5인치
- W1 > 8200: 미정의 (0)
**철재용 모터**: 별도 구현 필요 (주석 처리된 로직 존재)
---
## 3. 브라켓 및 지지각도
### 브라켓 수량
| 제작사이즈 폭 (W1) | 브라켓 수량 |
|------------------|-----------|
| ~3000 | 2개 |
| 3001~6000 | 3개 |
| 6001~9000 | 4개 |
| 9001~12000 | 5개 |
### 지지각도
- **수량**: 브라켓 수량와 동일
- **길이**: H1 + 200
---
## 4. 가이드레일 및 연기차단막
### 가이드레일
- **수량**: 2개 (양쪽)
- **길이**: H1 + 200
### 연기차단막 (높이 3000 이상인 경우)
- **조건**: H1 ≥ 3000
- **면적**: W1 × (H1 - 3000) ÷ 1,000,000 (㎡)
---
## 5. 케이스(셔터박스) 구성품
### 케이스 사이즈
- **스크린**: 500 × 350
- **철재**: 650 × 500
### 구성품 계산
- **상판**: W1 × 500 (스크린) / W1 × 650 (철재)
- **측판**: 500 × 350 × 2개 (스크린) / 650 × 500 × 2개 (철재)
- **전면판**: (W1 - 10) × 350 (스크린) / (W1 - 10) × 500 (철재)
- **후면판**: (W1 - 10) × 350 (스크린) / (W1 - 10) × 500 (철재)
**🚨 문제점**: 케이스 타입(500×350 vs 650×500) 선택 기준 미정의
---
## 6. 하단마감 자재
### 자재 계산
- **하단레일**: W1 길이
- **하단씰**: W1 길이
- **하단브라켓**: W1 ÷ 300 (올림)
- **결속끈**: W1 ÷ 200 (올림)
- **하단스토퍼**: 2개
---
## 7. 감기샤프트 (스크린용/철재용) (수정됨 🔄)
### 스크린용 감기샤프트 (실제 구현)
#### 샤프트 규격 결정 (단순화됨)
- **4인치**: W1 ≤ 6000
- **5인치**: 6000 < W1 8200
- **미정의**: W1 > 8200
#### 메인샤프트 수량 계산
**4인치 샤프트**:
- W1 ≤ 3050: 1개 × 수량
- 3050 < W1 4550: 1개 × 수량
- 4550 < W1 6050: 1개 × 수량
**5인치 샤프트**:
- 0 < W1 6050: 1개 × 수량
- 6050 < W1 7050: 1개 × 수량
- W1 > 7050: 1개 × 수량
#### 보조샤프트 (3인치)
- **규격**: 항상 3인치
- **수량**: 1개 × 수량
### 철재용 감기샤프트
- **규격 결정**: W1과 중량(K) 두 조건 모두 만족해야 함
- **자재**: 통자재 1개만 사용 (조합 불가)
| W1 구간 | 중량(K) 구간 | 샤프트 규격 |
|---------|-------------|-----------|
| 0 < W1 4500 | K 400 | 4인치 |
| 0 < W1 4500 | 400 < K 600 | 5인치 |
| 4500 < W1 5600 | K 600 | 5인치 |
| 5600 < W1 7800 | 600 < K 800 | 6인치 |
| 5600 < W1 8200 | K > 800 | 8인치 |
**🚨 문제점**: 경계값 처리 (W1=4500, K=400 등) 우선순위 불명확
---
## 8. 각파이프 자재 (실제 구현 발견 🔄)
### 기본 정보
- **자재 규격**: 3000mm, 6000mm
- **계산 기준**: col67 (상수길이 P)
- **P 계산식**: P = W1 + (3000 × 각파이프 수량)
### 실제 구현된 계산식
#### 각파이프 수량 결정 (col66)
```javascript
col66 = (W1 1600) ? 3 :
(W1 2800) ? 4 :
(W1 4000) ? 5 :
(W1 5200) ? 6 :
(W1 6400) ? 7 :
(W1 7600) ? 8 :
(W1 8800) ? 9 : 0
```
#### 상수길이 P 계산 (col67)
```javascript
P = W1 + (3000 × col66)
```
#### 최종 수량 계산 (col68-69)
**3000mm 자재 (col68)**:
- P ≤ 9000: 3 × 수량
- 9000 < P 12000: 4 × 수량
- 12000 < P 15000: 5 × 수량
- 15000 < P 18000: 6 × 수량
**6000mm 자재 (col69)**:
- 18000 < P 24000: 4 × 수량
- 24000 < P 30000: 5 × 수량
- 30000 < P 36000: 6 × 수량
- 36000 < P 42000: 7 × 수량
- 42000 < P 48000: 8 × 수량
** 문제 해결**: 실제 구현된 계산식 발견 문서화 완료
---
## 9. 환봉 (스크린 전용)
### 기본 정보
- **대상**: 스크린 셔터만
- **자재 규격**: 3000mm 고정
- **계산 기준**: 제작사이즈 W1
### 수량표
| 제작사이즈 W1 구간 | 자재 규격 | 수량 |
|------------------|---------|-----|
| 0 < W1 3000 | 3000mm | 1개 |
| 3000 < W1 6000 | 3000mm | 2개 |
| 6000 < W1 9000 | 3000mm | 3개 |
| 9000 < W1 12000 | 3000mm | 4개 |
** 문제없음**: 명확한 구간별 수량 정의
---
## 10. 조인트바
### 계산 공식
```
조인트바 수량 = 2 + FLOOR((W1 - 500) / 1000)
```
### 설치 기준
- **기본 2개**: 250mm 지점 고정
- **추가 설치**: 중앙 여유공간(W1-500) 1000mm 간격
### 예시
| W1 | 중앙 여유공간 | 추가 수량 | 수량 |
|----|-------------|---------|-------|
| 1500 | 1000 | 1 | 3개 |
| 2500 | 2000 | 2 | 4개 |
| 3500 | 3000 | 3 | 5개 |
** 문제없음**: 명확한 수학 공식
---
## 🚨 수정 결과 및 종합 분석 (업데이트됨 🔄)
### ✅ 해결된 문제점들
1. **제작사이즈 계산 오류 수정**
- 스크린: W1=W0+160, H1=H0+350 (실제 구현 반영)
- 철재: W1=W0+110, H1=H0+350 (실제 구현 반영)
2. **중량 계산 오류 수정**
- 스크린: 복합 계산식 (면적×2) + (W0/1000×14.17) 반영
3. **모터 용량 산정 전면 수정**
- 샤프트별 중량 매트릭스로 전환
- 실제 5130 구현 로직 반영
4. **샤프트 규격 결정 단순화**
- W1 기준 단순 구간별 분류로 수정
5. **각파이프 계산식 발견 및 문서화**
- P = W1 + (3000 × 각파이프수량) 공식 발견
- 전체 계산 로직 체계적 정리
### ❌ 여전히 있는 문제점
1. **철재용 중량 계산**: 실제 구현 미확인
2. **철재용 모터 용량**: 주석 처리된 로직 존재
3. **케이스 타입 선택**: 자동 결정 로직 필요
### ✅ 확인된 정확한 부분
- 환봉 산출 로직 (실제 구현과 일치)
- 조인트바 계산 공식 (수학적 정확성)
- 스크린 전체 산출 체계 (구현 반영 완료)
---
## 🛠️ 다음 단계 작업 및 권장사항
### 즉시 수행 권장
1. **철재용 중량 계산식 확인**
- 5130 코드에서 철재용 중량 계산 로직 찾기
- Slat 관련 함수에서 중량 계산 분석
2. **철재용 모터 로직 구현**
- 주석 처리된 철재 전용 로직 활성화
- W1과 중량 복합 조건 구현
3. **케이스 타입 자동 선택 로직**
- 스크린/철재 구분에 따른 자동 선택
- 500×350 / 650×500 선택 기준 명확화
### 장기 개선 대상
4. **전체 산출식 체계를 API로 구현**
- 파라미터 기반 동적 BOM 계산
- 실시간 견적 예상 시스템 구축
5. **산출식 검증 및 테스트**
- 기존 5130 대비 정확성 검증
- 경계값 처리 테스트 케이스 추가
---
## 📝 수정 이력
- **2025-09-22 v1.0**: 초기 분석 완료
- **2025-09-22 v2.0**: 5130 실제 구현 비교 주요 오류 수정
- 제작사이즈/중량 계산 오류 수정
- 모터 용량 산정 체계 전면 개편
- 각파이프 계산식 실제 구현 발견 반영
- 샤프트 규격 결정 로직 단순화