From 7d639bb58489910d52b8feb0d15ce2d86fcf7bb9 Mon Sep 17 00:00:00 2001 From: kent Date: Tue, 30 Dec 2025 14:46:26 +0900 Subject: [PATCH] =?UTF-8?q?docs(simulator):=20Phase=207=20=EC=A0=9C?= =?UTF-8?q?=ED=92=88=20=EC=9C=A0=ED=98=95=EB=B3=84=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EA=B2=B0=EA=B3=BC=20=EB=AC=B8=EC=84=9C=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 철재 제품(FG-STL-001) 테스트 결과 추가 - W1=2110, K=150.34 (M×25 공식) 검증 완료 - 총액: 3,158,111원 - 절곡 제품(FG-BND-001) 테스트 결과 추가 - CategoryGroup에 "절곡" 카테고리 추가 - 총액: 727,893원 - 스크린 제품(FG-SCR-001) 재검증 완료 - 총액: 1,711,225원 - 제품 유형별 검증 결과 요약 섹션 추가 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- plans/simulator-calculation-logic-mapping.md | 137 ++++++++++++++++++- 1 file changed, 136 insertions(+), 1 deletion(-) diff --git a/plans/simulator-calculation-logic-mapping.md b/plans/simulator-calculation-logic-mapping.md index c29dbb1..113c198 100644 --- a/plans/simulator-calculation-logic-mapping.md +++ b/plans/simulator-calculation-logic-mapping.md @@ -1,6 +1,6 @@ # 견적 시뮬레이터 완전 동기화 계획 -> **작성일**: 2025-12-23 (업데이트: 2025-12-29) +> **작성일**: 2025-12-23 (업데이트: 2025-12-30) > **목표**: design.sam.kr 시뮬레이터와 mng 시뮬레이터가 **동일한 결과**를 출력하도록 완전 동기화 --- @@ -919,4 +919,139 @@ private function getItemPrice(string $itemCode): float --- +## 11. Phase 7: 철재 제품 테스트 케이스 (2025-12-30) + +### 11.1 작업 개요 + +| 항목 | 내용 | +|------|------| +| 작업일 | 2025-12-30 | +| 목적 | 철재 제품(FG-STL-*) 마진값/중량 계산 동기화 및 CategoryGroup 적용 | +| 테스트 완제품 | FG-STL-001 (철재 방화문) | +| 입력값 | W0=2000, H0=2500 | + +### 11.2 수정 사항 + +#### 11.2.1 마진값 동적 적용 (SCREEN/STEEL 분기) + +**파일**: `mng/app/Services/Quote/FormulaEvaluatorService.php` + +| 제품 카테고리 | 마진 W | 마진 H | K 계산식 | +|-------------|-------|-------|---------| +| SCREEN (스크린) | W0+140 | H0+350 | M×2 + W0/1000×14.17 | +| STEEL (철재) | W0+110 | H0+350 | M×25 | + +**변경 내용**: +```php +// 제품 카테고리에 따른 마진값 결정 +if (strtoupper($productCategory) === 'STEEL') { + $marginW = 110; // 철재 마진 + $K = $M * 25; // 철재 중량 +} else { + $marginW = 140; // 스크린 기본 마진 + $K = $M * 2 + ($W0 / 1000) * 14.17; // 스크린 중량 +} +``` + +#### 11.2.2 CategoryGroup 데이터 생성 (tenant 287) + +**문제**: CategoryGroup 데이터가 tenant_id=1에만 존재, tenant_id=287 미등록 + +**해결**: tenant 287용 CategoryGroup 3종 생성 + +| 코드 | 이름 | 승수변수 | 포함 카테고리 | +|------|------|---------|-------------| +| area_based | 면적기반 | M | 원단, 패널, 도장, 표면처리, 유리, 도어, 프레임, 창틀 | +| weight_based | 중량기반 | K | 강판, 알루미늄, 스테인리스, 철재 | +| quantity_based | 수량기반 | (없음) | 볼트, 경첩, 도어락, 도어클로저, 실링재, 문턱, 킥플레이트 등 | + +### 11.3 테스트 결과 + +#### 11.3.1 변수 계산 검증 + +| 변수 | 계산값 | 예상값 | 상태 | +|------|-------|-------|------| +| W1 | 2110 | 2110 (W0+110) | ✅ | +| H1 | 2850 | 2850 (H0+350) | ✅ | +| M | 6.0135 ㎡ | 6.0135 | ✅ | +| K | 150.34 kg | 150.34 (M×25) | ✅ | +| PC | STEEL | STEEL | ✅ | + +#### 11.3.2 CategoryGroup 적용 검증 + +| 품목 | 카테고리 | CategoryGroup | 기준단가 | 승수 | 최종단가 | +|------|---------|--------------|---------|------|---------| +| 철재 도어 | 도어 | area_based | 320,000 | M×6.01 | 1,924,320원 | +| 철재 프레임 | 프레임 | area_based | 58,000 | M×6.01 | 348,783원 | +| 철재 패널 | 패널 | area_based | 68,000 | M×6.01 | 408,918원 | +| 경첩 세트 | 경첩 | quantity_based | 42,000 | - | 42,000원 | +| 도어락 | 도어락 | quantity_based | 95,000 | - | 95,000원 | +| 도어클로저 | 도어클로저 | quantity_based | 115,000 | - | 115,000원 | +| 실링재 | 실링재 | quantity_based | 9,500 | - | 9,500원 | +| 문턱 | 문턱 | quantity_based | 58,000 | - | 58,000원 | +| 킥플레이트 | 킥플레이트 | quantity_based | 45,000 | - | 45,000원 | +| 볼트 세트 | 볼트 | quantity_based | 18,000 | - | 18,000원 | + +**최종 합계**: 3,158,111원 ✅ + +### 11.4 수정된 파일 + +| 파일 | 수정 내용 | +|------|----------| +| `FormulaEvaluatorService.php` | 마진값/K계산 동적 분기, `getItemDetails()`에 item_category 추가 | +| `category_groups` (DB) | tenant 287용 3개 그룹 생성 | + +### 11.5 성공 기준 달성 + +| 기준 | 달성 | 비고 | +|------|------|------| +| 철재 마진 적용 | ✅ | W+110 정상 적용 | +| 철재 중량 계산 | ✅ | M×25 정상 적용 | +| CategoryGroup 매칭 | ✅ | area_based, quantity_based 정상 | +| 면적기반 단가 계산 | ✅ | base_price × M 정상 | +| 수량기반 단가 계산 | ✅ | base_price 그대로 적용 | + +### 11.6 절곡 제품 테스트 (FG-BND-001) + +#### 테스트 결과 + +| 변수 | 계산값 | 상태 | +|------|-------|------| +| W1 | 2110 (W0+110) | ✅ 철재 마진 적용 | +| M | 6.0135 ㎡ | ✅ | +| K | 150.34 kg (M×25) | ✅ 철재 중량 | +| PC | STEEL | ✅ | + +#### CategoryGroup 수정 + +**문제**: "절곡" 카테고리가 CategoryGroup 미등록 → 단가 0원 + +**해결**: `area_based`에 "절곡" 카테고리 추가 + +```json +// area_based categories (수정 후) +["원단","패널","도장","표면처리","스크린원단","유리","도어","프레임","창틀","절곡"] +``` + +#### 수정 후 단가 계산 + +| 품목 | CategoryGroup | 기준단가 | 승수 | 최종단가 | +|------|--------------|---------|------|---------| +| 절곡 | area_based | 28,000 | M×6.01 | 168,378원 | +| 프레임 | area_based | 58,000 | M×6.01 | 348,783원 | +| 도장 | area_based | 32,000 | M×6.01 | 192,432원 | +| 볼트 | quantity_based | 18,000 | - | 18,000원 | + +**최종 합계**: 727,893원 ✅ + +### 11.7 전체 제품 유형 검증 완료 + +| 제품 유형 | 코드 | 마진 | K 계산 | 합계 | +|----------|------|------|--------|------| +| 스크린 | FG-SCR-001 | W+140 ✅ | M×2+W0/1000×14.17 ✅ | 1,711,225원 | +| 철재 | FG-STL-001 | W+110 ✅ | M×25 ✅ | 3,158,111원 | +| 절곡 | FG-BND-001 | W+110 ✅ | M×25 ✅ | 727,893원 | + +--- + *이 문서는 design.sam.kr 완전 분석을 바탕으로 mng 시뮬레이터 완전 동기화 계획을 상세히 기술합니다.* \ No newline at end of file