diff --git a/plans/kd-items-migration-plan.md b/plans/kd-items-migration-plan.md index f267cd6..7710c32 100644 --- a/plans/kd-items-migration-plan.md +++ b/plans/kd-items-migration-plan.md @@ -69,11 +69,15 @@ docker exec sam-mysql-1 mysql -uroot -proot samdb -e "SELECT COUNT(*) FROM items | 항목 | 내용 | |------|------| -| **마지막 완료 작업** | Phase 4 검증 완료 ✅ | -| **다음 작업** | 개발서버 배포 (⚠️ 사용자 승인 필요) | -| **진행률** | 4/4 (100%) - 로컬 검증 완료 | +| **마지막 완료 작업** | ✅ **정적 데이터 마이그레이션 완료** | +| **다음 작업** | 동적 BOM/견적 로직 구현 → [kd-quote-logic-plan.md](./kd-quote-logic-plan.md) | +| **진행률** | 4/4 (100%) - 정적 데이터 완료 | | **마지막 업데이트** | 2026-01-28 | +> ⚠️ **주의**: 이 문서는 **정적 품목/단가 데이터 이관**만 다룹니다. +> 동적 BOM 계산, 모터/제어기/부자재 자동 추가 등 **견적 로직**은 별도 문서 참조: +> → [kd-quote-logic-plan.md](./kd-quote-logic-plan.md) + ### Phase 1~3 실행 결과 ✅ | 소스 | 타입 | 건수 | @@ -104,34 +108,43 @@ docker exec sam-mysql-1 mysql -uroot -proot samdb -e "SELECT COUNT(*) FROM items - RM-010~RM-011: 화이바원단, 와이어원단 - 중복 확인: KDunitprice 기존 품목과 명칭 비교로 중복 제외 -### 다음 작업 상세 +### Phase 4 검증 결과 ✅ -**Phase 4: 검증 및 배포** +**로컬 검증 완료 (2026-01-28):** -- 건수 검증 (items 651건, prices 651건, BOM 18건) -- API 테스트 (/api/v1/items 목록 조회) -- 개발서버 배포 (⚠️ 사용자 승인 필요) +| 검증 항목 | 기대값 | 실제값 | 상태 | +|-----------|--------|--------|------| +| items 총 건수 | 651건 | 651건 | ✅ | +| prices 총 건수 | 651건 | 651건 | ✅ | +| BOM 연결 | 18건 | 18건 | ✅ | +| code 중복 | 0건 | 0건 | ✅ | -3. **실행 전 검증**: - ```bash - # KDunitprice 데이터 확인 (⭐ 실제 컬럼명 사용) - docker exec sam-mysql-1 mysql -uroot -proot chandj -e "SELECT COUNT(*), item_div FROM KDunitprice WHERE is_deleted=0 GROUP BY item_div;" - docker exec sam-mysql-1 mysql -uroot -proot chandj -e "SELECT num, prodcode, item_name, item_div, spec, unit, unitprice FROM KDunitprice WHERE is_deleted=0 LIMIT 5;" - ``` +**item_type 분포:** +| item_type | 건수 | +|-----------|------| +| FG (완제품) | 470건 | +| PT (부품) | 88건 | +| SM (부자재) | 61건 | +| RM (원자재) | 28건 | +| CS (소모품) | 4건 | -4. **Seeder 실행**: - ```bash - cd /Users/kent/Works/@KD_SAM/SAM/api - php artisan db:seed --class=Database\\Seeders\\Kyungdong\\KyungdongItemSeeder - ``` +### 후속 작업 -5. **결과 확인**: - ```bash - docker exec sam-mysql-1 mysql -uroot -proot samdb -e "SELECT item_type, COUNT(*) FROM items WHERE tenant_id=287 GROUP BY item_type;" - docker exec sam-mysql-1 mysql -uroot -proot samdb -e "SELECT COUNT(*) FROM prices WHERE tenant_id=287;" - ``` +**이 문서 범위 (정적 데이터):** +- ✅ 완료 - 개발서버 배포 대기 중 -6. ⚠️ **실행 전 사용자 승인 필요** +**별도 문서 (동적 로직):** +- → [kd-quote-logic-plan.md](./kd-quote-logic-plan.md) +- 5130 견적 로직 분석 +- 동적 BOM 계산 (모터/제어기/부자재) +- 파라미터 기반 절곡품 산출 + +### Seeder 재실행 방법 + +```bash +# Docker 컨테이너 내부에서 실행 +docker exec sam-api-1 php artisan db:seed --class="Database\\Seeders\\Kyungdong\\KyungdongItemSeeder" +``` --- diff --git a/plans/kd-quote-logic-plan.md b/plans/kd-quote-logic-plan.md new file mode 100644 index 0000000..dfcbcf1 --- /dev/null +++ b/plans/kd-quote-logic-plan.md @@ -0,0 +1,219 @@ +# 경동기업 견적 로직 분석 및 구현 계획 + +> **작성일**: 2026-01-28 +> **목적**: 5130 레거시 견적 시스템 분석 → SAM 동적 BOM/견적 로직 구현 +> **선행 작업**: [kd-items-migration-plan.md](./kd-items-migration-plan.md) (정적 품목/단가 완료) +> **상태**: 🔵 분석 대기 + +--- + +## 🚀 Quick Start + +### 이 문서의 목적 +정적 품목 데이터는 이관 완료 (items 651건, prices 651건). 이제 **동적으로 BOM을 계산하고 견적을 산출하는 로직**을 5130에서 분석하여 SAM에 구현. + +### 환경 정보 +| 항목 | 값 | +|------|-----| +| 레거시 소스 | `5130/` (프로젝트 루트) | +| 대상 테넌트 | 287 (경동기업) | +| 관련 SAM 페이지 | https://dev.sam.kr/sales/quote-management/new | + +--- + +## 📍 현재 진행 상태 + +| 항목 | 내용 | +|------|------| +| **현재 단계** | Phase 0: 분석 대기 | +| **다음 작업** | 5130 견적 로직 파일 탐색 | +| **진행률** | 0/5 (0%) | +| **마지막 업데이트** | 2026-01-28 | + +--- + +## 1. 배경 및 문제 정의 + +### 1.1 현재 상황 + +**SAM 견적 화면에서 FG-KSS01-벽면형-SUS 선택 시:** +- 현재: 3개 항목만 표시 (가이드레일, 하단마감재, L-BAR) +- 기대: 본체, 절곡품, 모터/제어기, 부자재 등 전체 BOM + +### 1.2 레거시 DB 구조 (분석 완료) + +``` +models (모델 마스터) + └─ parts (대분류 부품: 가이드레일, 하단마감재) + └─ parts_sub (세부 절곡품: 1번마감제, 2번본체, 3번-C, 4번-D...) +``` + +**KSS01 벽면형 예시:** +| 대분류 (parts) | 세부품 (parts_sub) | 재질 | 수량 | +|---------------|-------------------|------|------| +| 가이드레일 | 1번(마감제) | SUS 1.2T | 1 | +| | 2번(본체) | EGI 1.55T | 2 | +| | 3번(벽면형-C) | EGI 1.55T | 1 | +| | 4번(벽면형-D) | EGI 1.55T | 1 | +| 하단마감재 | 1번(하장바) | SUS 1.5T | 1 | + +### 1.3 동적 항목 (5130 분석 필요) + +| 항목 | 설명 | 레거시 소스 | +|------|------|-------------| +| 모터 | W0, H0 기반 용량 자동 계산 | 5130 로직 분석 필요 | +| 제어기 | 모터 사양에 따라 연동 | 5130 로직 분석 필요 | +| 부자재 | 모델/규격별 자동 추가 | 5130 로직 분석 필요 | +| 절곡품 수량 | 파라미터 기반 동적 계산 | 5130 로직 분석 필요 | + +--- + +## 2. 분석 대상 + +### 2.1 5130 디렉토리 구조 (예상) + +``` +5130/ +├── estimate/ # 견적 관련 (우선 분석) +├── output/ # 출력/리포트 +├── dbeditor/ # DB 관리 +└── [기타 모듈]/ +``` + +### 2.2 분석 우선순위 + +| 순위 | 대상 | 목적 | +|------|------|------| +| 1 | 견적 생성 로직 | BOM 자동 구성 방식 파악 | +| 2 | 모터 계산 로직 | W0/H0 → 모터 용량 공식 | +| 3 | 절곡품 계산 로직 | 파라미터 → 수량/단가 공식 | +| 4 | 부자재 추가 로직 | 모델별 자동 추가 규칙 | +| 5 | 가격 산출 로직 | 최종 견적 금액 계산 | + +--- + +## 3. 작업 계획 + +### Phase 0: 5130 탐색 및 구조 파악 +- [ ] 5130/ 디렉토리 구조 분석 +- [ ] 견적 관련 파일 식별 +- [ ] 주요 함수/클래스 목록화 + +### Phase 1: 견적 생성 로직 분석 +- [ ] 모델 선택 → BOM 구성 흐름 파악 +- [ ] 동적 항목 추가 조건 분석 +- [ ] DB 조회 패턴 파악 + +### Phase 2: 계산 공식 추출 +- [ ] 모터 용량 계산 공식 +- [ ] 절곡품 수량/단가 계산 공식 +- [ ] 부자재 자동 추가 규칙 + +### Phase 3: SAM 설계 +- [ ] API 엔드포인트 설계 +- [ ] Service 클래스 설계 +- [ ] DB 스키마 변경 필요 여부 + +### Phase 4: SAM 구현 +- [ ] BOM 동적 계산 Service +- [ ] 견적 API 수정 +- [ ] 프론트엔드 연동 + +### Phase 5: 검증 +- [ ] 레거시 vs SAM 결과 비교 +- [ ] 사용자 테스트 +- [ ] 배포 + +--- + +## 4. 레거시 분석 기록 + +### 4.1 분석된 테이블 + +| 테이블 | 용도 | 분석 상태 | +|--------|------|-----------| +| models | 모델 마스터 | ✅ 완료 | +| parts | 대분류 부품 | ✅ 완료 | +| parts_sub | 세부 절곡품 | ✅ 완료 | +| BDmodels | BOM + 단가 JSON | ✅ 완료 | +| price_motor | 모터 단가 | ✅ 완료 | +| price_shaft | 샤프트 계산 참조 | ✅ 완료 | +| price_pipe | 파이프 계산 참조 | ✅ 완료 | +| price_raw_materials | 원자재 단가 | ✅ 완료 | + +### 4.2 분석 예정 (5130 코드) + +| 파일/모듈 | 예상 내용 | 분석 상태 | +|-----------|----------|-----------| +| estimate/* | 견적 생성 로직 | ⏳ 대기 | +| (TBD) | 모터 계산 | ⏳ 대기 | +| (TBD) | 절곡품 계산 | ⏳ 대기 | + +--- + +## 5. 기술적 고려사항 + +### 5.1 SAM 아키텍처 준수 + +```php +// Service-First 패턴 +class QuoteBomService extends Service +{ + public function calculateDynamicBom(int $modelId, array $parameters): array + { + // 1. 정적 BOM 조회 (items.bom) + // 2. 파라미터 기반 동적 항목 계산 + // 3. 모터/제어기 자동 추가 + // 4. 부자재 자동 추가 + // 5. 단가 계산 + } +} +``` + +### 5.2 API 설계 (예상) + +``` +POST /api/v1/quotes/calculate-bom +Request: +{ + "model_id": 13147, // FG-KSS01-벽면형-SUS + "parameters": { + "W0": 3000, // 폭 + "H0": 2000, // 높이 + "installation_type": "벽면형", + "power_source": "220V" + } +} + +Response: +{ + "static_bom": [...], // 기존 items.bom + "dynamic_items": [...], // 모터, 제어기, 부자재 + "calculated_values": { + "motor_capacity": "150K", + "total_area": 6.0, + "estimated_weight": 45.5 + }, + "pricing": {...} +} +``` + +--- + +## 6. 관련 문서 + +- [kd-items-migration-plan.md](./kd-items-migration-plan.md) - 정적 품목/단가 이관 (완료) +- [kd-orders-migration-plan.md](./kd-orders-migration-plan.md) - 입고/재고/주문 이관 +- SAM API Rules - api/CLAUDE.md + +--- + +## 7. 변경 이력 + +| 날짜 | 항목 | 변경 내용 | +|------|------|----------| +| 2026-01-28 | 문서 생성 | 초기 계획 수립, 레거시 DB 분석 결과 반영 | + +--- + +*이 문서는 5130 분석 진행에 따라 지속 업데이트됩니다.* \ No newline at end of file