- erp-api-development-plan-d1.0-changes.md: 악성채권 추심관리 구현 완료 체크 - quotation/PROGRESS.md: 견적 프로젝트 진행상황 업데이트 - phase-4-integration/README.md: API 통합 문서 수정 - react-api-integration-plan.md: React API 통합 계획 추가
8.4 KiB
8.4 KiB
견적 기능 개발 진행 현황
마스터 플랜: MASTER_PLAN.md 공통 정책: PROJECT_DEVELOPMENT_POLICY.md 최종 업데이트: 2025-12-19 (Phase 4 DB 기반 재작성 완료)
전체 진행률
| Phase | 상태 | 진행률 | 시작일 | 완료일 |
|---|---|---|---|---|
| Phase 1: 5130 분석 | ✅ 완료 | 100% | 2025-12-19 | 2025-12-19 |
| Phase 2: mng 분석 | ✅ 완료 | 100% | 2025-12-19 | 2025-12-19 |
| Phase 3: 구현 | ✅ 완료 | 100% | 2025-12-19 | 2025-12-19 |
| Phase 4: API 개발 | 🔄 진행 | 60% | 2025-12-19 | - |
🔄 현재 작업
현재 Phase: Phase 4 진행 중 완료된 작업: mng 패턴 적용 - DB 기반 견적 산출 서비스 재작성 다음 작업: 견적 API 통합 테스트 및 Swagger 문서화
✅ Phase 1: 5130 견적 기능 분석 (완료)
체크리스트
- UI/화면 분석 (list.php, write_form.php 등)
- JS 수식 분석 (calculation.js, fetch_unitprice.php)
- PHP 계산 로직 분석 (get_screen_amount.php, get_slat_amount.php)
- DB 구조 분석 (estimate, BDmodels, price_* 테이블)
- 비즈니스 로직 문서화
- README.md 작성
산출물
- README.md - 분석 체크리스트 및 요약
- js-formulas.md - 핵심 수식 분석 (19개 항목)
- ui-analysis.md - 화면별 기능 분석
- db-structure.md - 테이블/컬럼 구조
- business-logic.md - 비즈니스 로직 정리
핵심 발견 사항
견적 유형 (2가지)
| 유형 | 주요 특징 |
|---|---|
| 스크린 | 면적 기반 (높이+550), 실리카/와이어 소재 |
| 슬랫(철재) | 면적 기반 (높이+50), 방화슬랫 소재 |
계산 항목 (18개)
검사비, 주자재, 조인트바, 모터, 제어기, 케이스, 케이스연기차단재, 마구리, 앵글, 가이드레일, 레일연기차단재, 하장바, L바, 보강평철, 샤프트, 무게평철, 환봉, 각파이프
옵션 체크박스 (5개)
| 옵션 | 영향 항목 |
|---|---|
| 절곡 | 케이스, 레일, 연기차단재, 하장바, L바, 보강평철 |
| 모터 | 모터 가격 |
| 보증 | 보증기간 |
| 슬랫 | 주자재(슬랫), 조인트바 |
| 부자재 | 샤프트, 각파이프, 앵글 |
✅ Phase 2: mng 견적 수식 관리 분석 (완료)
체크리스트
- 현재 구현 상태 분석 (quote-formulas)
- 오류/문제점 목록화
- 5130과의 차이점 분석
- 개선 방향 도출
- README.md 작성
산출물
- README.md - 분석 요약
- current-state.md - 현재 구현 상태
- issues.md - 문제점 및 개선사항
핵심 발견 사항
구현 상태 요약
| 구성요소 | 개수 | 상태 |
|---|---|---|
| DB 테이블 | 5개 | ✅ 완료 |
| Models | 5개 | ✅ 완료 |
| Services | 2개 | ✅ 완료 |
| Controllers | 3개 | ✅ 완료 |
| Views | 9개 | ✅ 완료 |
핵심 이슈 (Phase 3에서 해결)
| 우선순위 | 이슈 | 설명 |
|---|---|---|
| 🔴 Critical | 품목 단가 조회 | getItemPrice() TODO 상태 |
| 🔴 Critical | 수식 데이터 미입력 | 테이블 비어있음 |
| 🟡 Important | eval() 사용 | 보안 취약점 |
5130 vs mng 비교
| 항목 | 5130 | mng | 평가 |
|---|---|---|---|
| 수식 저장 | JS 하드코딩 | DB 동적관리 | ✅ mng 우수 |
| 카테고리 분류 | 없음 | 13개 지원 | ✅ mng 우수 |
| 품목 단가 연동 | 직접 조회 | TODO 상태 | 🔴 미완성 |
✅ Phase 3: mng 견적 기능 구현 (완료)
체크리스트
- 테이블 매핑 (5130 → SAM)
- getItemPrice() 연동 구현
- Price 모델 생성 (mng)
- Seeder 확인 및 실행 방법 문서화
- README.md 작성
산출물
- README.md - 구현 요약
- table-mapping.md - 테이블 매핑
- implementation.md - 구현 상세
핵심 구현 내용
getItemPrice() 연동
파일: mng/app/Services/Quote/FormulaEvaluatorService.php:324-335
- prices 테이블 연동 완료
- 품목 코드 → 판매단가 조회 구현
Price 모델
파일: mng/app/Models/Price.php
- getCurrentPrice(): 현재 유효 단가 조회
- getSalesPriceByItemCode(): 품목 코드로 단가 조회
Seeder 실행 방법
cd /Users/hskwon/Works/@KD_SAM/SAM/api
php artisan db:seed --class=QuoteFormulaCategorySeeder
php artisan db:seed --class=QuoteFormulaSeeder
🔄 Phase 4: 견적 API 개발 (진행 중)
체크리스트
- api 프로젝트 prices 테이블 연동
- Price 모델에 getCurrentPrice(), getSalesPriceByItemCode() 추가
- QuoteCalculationService prices 조회로 변경
- mng 패턴 적용 - Quote 수식 모델 생성
- FormulaEvaluatorService DB 기반 확장
- QuoteCalculationService DB 기반 재작성
- 견적 API 통합 테스트
- Swagger 문서화
- React 연동 스펙
- README.md 작성
산출물
- phase-4-api/README.md
- phase-4-api/api-spec.md
완료된 작업 (2025-12-19)
1. api 프로젝트 prices 테이블 연동
수정된 파일:
api/app/Models/Products/Price.php- 상수 추가: STATUS_, ITEM_TYPE_
- getCurrentPrice(): 현재 유효 단가 조회
- getSalesPriceByItemCode(): 품목 코드로 단가 조회
Git 커밋:
4d3085efeat: 견적 산출 서비스 prices 테이블 연동
2. mng 패턴 적용 - DB 기반 견적 산출 재작성
추가된 파일:
api/app/Models/Quote/QuoteFormula.php- 수식 정의 모델api/app/Models/Quote/QuoteFormulaCategory.php- 카테고리 모델api/app/Models/Quote/QuoteFormulaItem.php- 품목 출력 모델api/app/Models/Quote/QuoteFormulaRange.php- 범위별 값 모델api/app/Models/Quote/QuoteFormulaMapping.php- 매핑 값 모델
수정된 파일:
-
api/app/Models/Products/Price.php- items 테이블 연동 (products/materials 대체)
- ITEM_TYPE 상수 업데이트 (FG/PT/RM/SM/CS)
-
api/app/Services/Quote/FormulaEvaluatorService.php- executeAll(): 카테고리별 수식 실행 (mng 패턴)
- evaluateRangeFormula(): QuoteFormula 기반 범위 평가
- evaluateMappingFormula(): QuoteFormula 기반 매핑 평가
- getItemPrice(): prices 테이블 연동
-
api/app/Services/Quote/QuoteCalculationService.php- 하드코딩된 품목 코드/로직 제거
- quote_formulas 테이블 기반 동적 계산
- getFormulasByCategory(): DB에서 수식 조회
- getInputSchema(): DB 기반 입력 스키마 생성
핵심 변경:
- 기존: 하드코딩된 품목 코드 (SCR-FABRIC-001 등)
- 변경: quote_formula_items 테이블에서 동적 조회
Git 커밋:
0d49e4crefactor: 견적 산출 서비스 DB 기반으로 재작성
🏷️ Git 태그
| 태그 | 설명 | 생성일 |
|---|---|---|
| - | - | - |
📝 정책 결정 기록
| 날짜 | 항목 | 결정 내용 | 근거 |
|---|---|---|---|
| 2025-12-19 | DB 작업 위치 | api 프로젝트에서만 | mng 마이그레이션 방지 |
| 2025-12-19 | 신규 테이블 정책 | options JSON 적용 | Hybrid EAV 전략 |
| 2025-12-19 | 견적 유형 | 스크린/슬랫 2가지 | 5130 기존 구조 유지 |
| 2025-12-19 | 체크박스 옵션 | JSON으로 통합 저장 | 확장성 고려 |
| 2025-12-19 | 품목 테이블 | items 테이블 사용 | products/materials 통합 완료 |
| 2025-12-19 | 견적 산출 방식 | mng 패턴 (DB 기반) | 하드코딩 제거, 동적 수식 관리 |
| 2025-12-19 | tenant_id 없을 때 | 예외 발생 (fallback 금지) | 데이터 무결성 보장 |
⚠️ 이슈/블로커
현재 이슈 없음
📚 참조 문서
- MASTER_PLAN.md - 마스터 플랜
- phase-1-5130-analysis/ - Phase 1 분석 결과
- docs/projects/mes/v1-analysis/quotation-analysis.md - MES 견적 분석
- docs/projects/legacy-5130/03_ESTIMATE.md - 5130 레거시 분석