Files
sam-docs/dev/history/2025-09/formula-system-analysis.md

315 lines
8.8 KiB
Markdown
Raw Normal View History

# 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 실제 구현 비교 및 주요 오류 수정
- 제작사이즈/중량 계산 오류 수정
- 모터 용량 산정 체계 전면 개편
- 각파이프 계산식 실제 구현 발견 및 반영
- 샤프트 규격 결정 로직 단순화