Files
sam-api/docs/changes/20251230_2339_quote_calculation_mng_logic.md
권혁성 b6d2b9942e chore: [인프라] Slack 채널 분리 + logging 권한 + 문서 갱신
- Slack 알림 채널: product_infra → deploy_api
- logging.php daily/api 채널 permission 0664 추가
- CLAUDE.md, INDEX.md, 변경이력 문서 갱신

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 02:59:49 +09:00

2.8 KiB
Raw Blame History

변경 내용 요약

날짜: 2025-12-30 23:39 작업자: Claude Code Phase: 1.1 - QuoteCalculationService에 MNG FormulaEvaluatorService 로직 재구현

📋 변경 개요

MNG 시뮬레이터의 BOM 계산 로직을 API FormulaEvaluatorService에 동기화하여 React 프론트엔드에서 동일한 견적 계산 기능을 사용할 수 있도록 구현.

📁 수정된 파일

1. app/Models/CategoryGroup.php (신규)

  • MNG CategoryGroup 모델을 API로 이식
  • 카테고리별 단가 계산 방식 관리 (면적/중량/수량 기반)

2. app/Services/Quote/FormulaEvaluatorService.php (수정)

  • 기존: 537줄 (기본 수식 평가만)
  • 수정 후: 1176줄 (MNG 10단계 BOM 계산 로직 추가)

🔧 상세 변경 사항

1. CategoryGroup 모델 추가

새 파일: app/Models/CategoryGroup.php

주요 기능:

  • CODE_AREA_BASED ('area_based'): 면적 기반 단가 (M 곱셈)
  • CODE_WEIGHT_BASED ('weight_based'): 중량 기반 단가 (K 곱셈)
  • CODE_QUANTITY_BASED ('quantity_based'): 수량 기반 단가
  • findByItemCategory(): 품목분류로 그룹 조회
  • calculatePrice(): 카테고리 기반 최종 가격 계산

2. FormulaEvaluatorService 로직 추가

추가된 메서드:

메서드 설명
calculateBomWithDebug() 10단계 BOM 계산 (디버그 모드 지원)
calculateCategoryPrice() 카테고리 기반 단가 계산
groupItemsByProcess() 공정별 품목 그룹화
getItemDetails() 품목 상세 정보 조회
getBomTree() BOM 트리 구조 생성 (재귀)
expandBomWithFormulas() 수식 기반 BOM 확장
evaluateQuantityFormula() 수량 수식 계산
getItemCategory() 품목 카테고리 조회

10단계 BOM 계산 프로세스:

  1. 입력 변수 수집 (W0, H0, 설치타입, 전원 등)
  2. 완제품 선택 및 제품 카테고리 확인
  3. 변수 계산 (W1, H1, M, K 등)
  4. BOM 확장 (수식 기반)
  5. 가격 소스 결정 (표준가/특가)
  6. 수량 수식 평가
  7. 가격 계산 (카테고리별 곱셈 적용)
  8. 공정별 그룹화
  9. 소계 계산
  10. 총계 산출

변수 계산 규칙:

  • W1 = W0 + product_category.margin_width
  • H1 = H0 + product_category.margin_height
  • M = (W1 × H1) / 1,000,000 (면적 ㎡)
  • K = 제품 카테고리별 중량 계산

테스트 체크리스트

  • API 엔드포인트 /api/v1/quotes/calculate 테스트
  • MNG 시뮬레이터 결과와 비교 검증
  • 다양한 제품 카테고리별 계산 테스트
  • 디버그 모드 출력 검증

⚠️ 배포 시 주의사항

  • category_groups 테이블 마이그레이션 필요
  • 테넌트별 초기 데이터 설정 필요

🔗 관련 문서

  • docs/dev/dev_plans/quote-calculation-api-plan.md
  • mng/app/Services/Quote/FormulaEvaluatorService.php (원본)