From 849a149831333cb020d198a9bd8487dd4d33c63f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B6=8C=ED=98=81=EC=84=B1?= Date: Fri, 27 Feb 2026 15:59:07 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20[plans]=20Phase=202B=20=EC=99=84?= =?UTF-8?q?=EB=A3=8C=20=E2=80=94=20=EA=B2=AC=EC=A0=81/=ED=92=88=EC=A7=88?= =?UTF-8?q?=20=EC=A0=95=ED=95=A9=EC=84=B1=20=EA=B5=AC=ED=98=84=20=EA=B8=B0?= =?UTF-8?q?=EB=A1=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Phase 2B 전 항목(2B.1~7) ✅ 완료, 검증 결과 기록 - 마스터 플랜 진행률 4/7 (Phase 0~2 완료) --- plans/integrated-master-plan.md | 11 ++++++----- plans/integrated-phase-2.md | 29 +++++++++++++++-------------- 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/plans/integrated-master-plan.md b/plans/integrated-master-plan.md index 4e79c46..ba3234a 100644 --- a/plans/integrated-master-plan.md +++ b/plans/integrated-master-plan.md @@ -2,7 +2,7 @@ > **작성일**: 2026-02-27 > **목적**: 두 개선 계획(제품코드 추적성, 검사 단위 구조)을 하나의 순차적 실행 계획으로 통합 -> **상태**: 🔄 Phase 0+1 완료, Phase 2A 완료, Phase 2B 실행 대기 +> **상태**: 🔄 Phase 0~2 완료, Phase 3 실행 대기 > **원본 문서**: > - [`product-code-traceability-plan.md`](./product-code-traceability-plan.md) (아카이브 참조) > - [`document-system-improvement-plan.md`](./document-system-improvement-plan.md) (아카이브 참조) @@ -15,9 +15,9 @@ | 항목 | 내용 | |------|------| -| **마지막 완료 작업** | Phase 2A - 절곡 검사 분석/설계 완료 (dynamic_bom 발견, 5130 대조) | -| **다음 작업** | Phase 2B (견적/수주 정합성 + 품질 FK) | -| **진행률** | 3/7 Phase (Phase 0+1+2A 완료) | +| **마지막 완료 작업** | Phase 2B - 견적 product_code 자동추출 + inspections work_order_id FK + 데이터 보정 | +| **다음 작업** | Phase 3 (절곡 검사 동적 구현) | +| **진행률** | 4/7 Phase (Phase 0+1+2A+2B 완료) | | **마지막 업데이트** | 2026-02-27 | --- @@ -44,7 +44,7 @@ | **0** | 사전 데이터 조사 | product-code P0 | 없음 | ✅ | [Phase 0-1 상세](./integrated-phase-0-1.md) | | **1** | product_code 전파 버그 수정 | product-code P1 | Phase 0 | ✅ | [Phase 0-1 상세](./integrated-phase-0-1.md) | | **2A** | 절곡 검사 분석/설계 | document-system P1 | 없음 (**Phase 1과 병렬**) | ✅ | [Phase 2 상세](./integrated-phase-2.md) | -| **2B** | 견적/수주 정합성 + 품질 FK | product-code P2+P3 | Phase 1 | ⏳ | [Phase 2 상세](./integrated-phase-2.md) | +| **2B** | 견적/수주 정합성 + 품질 FK | product-code P2+P3 | Phase 1 | ✅ | [Phase 2 상세](./integrated-phase-2.md) | | **3** | 절곡 검사 동적 구현 | document-system P2 | Phase 1 + 2A | ⏳ | [Phase 3 상세](./integrated-phase-3.md) | | **4** | 절곡 재공품 + 결재 워크플로우 | document-system P3 | Phase 3 | ⏭️ | 마스터 요약만 | | **5** | 완제품 마스터 + 출하 연결 | product-code P4 | Phase 2B | ⏭️ | 마스터 요약만 | @@ -354,6 +354,7 @@ Phase 2A ──────────────┼── Phase 3 ─── |------|------|----------| | 2026-02-27 | 통합 문서 작성 | product-code + document-system 2개 계획을 7 Phase 통합 계획으로 병합 | | 2026-02-27 | Phase 2A 완료 | 절곡 검사 분석/설계 완료. dynamic_bom 발견, 5130 대조 완료, inspection-config API 재설계 | +| 2026-02-27 | Phase 2B 완료 | 견적 product_code 자동추출, inspections.work_order_id FK, 데이터 보정 25건 | --- diff --git a/plans/integrated-phase-2.md b/plans/integrated-phase-2.md index 7e9bdec..af5cdd8 100644 --- a/plans/integrated-phase-2.md +++ b/plans/integrated-phase-2.md @@ -4,7 +4,7 @@ > **원본**: > - [`document-system-improvement-plan.md`](./document-system-improvement-plan.md) Phase 1 > - [`product-code-traceability-plan.md`](./product-code-traceability-plan.md) Phase 2, 3 -> **상태**: 🔄 Phase 2A 분석 완료, Phase 2B 실행 대기 +> **상태**: ✅ Phase 2A+2B 완료 > **의존성**: Phase 2A는 독립 (Phase 1과 병렬 가능), Phase 2B는 Phase 1 완료 필수 --- @@ -305,9 +305,9 @@ Phase 2B 내부 구조: | # | 작업 항목 | 상태 | 비고 | |---|----------|:----:|------| -| 2B.1 | 견적 저장 시 `quotes.product_code` 저장 | ⏳ | 다중 개소: 첫 번째 개소 코드 대표 저장 | -| 2B.2 | 견적→수주 변환 시 `camelCase`→`snake_case` 변환 확인 | ⏳ | `OrderService::createFromQuote` | -| 2B.3 | 기존 데이터 보정 스크립트 | ⏳ | `calculation_inputs`에서 추출 | +| 2B.1 | 견적 저장 시 `quotes.product_code` 저장 | ✅ | `extractProductCodeFromInputs()` 자동 추출 추가 | +| 2B.2 | 견적→수주 변환 시 `camelCase`→`snake_case` 변환 확인 | ✅ | L673 이미 정상 동작 확인 | +| 2B.3 | 기존 데이터 보정 스크립트 | ✅ | 25/46건 보정 완료 (21건 초기 데이터 productCode 없음) | **다중 개소 정책**: `quotes.product_code`에는 첫 번째 개소 코드를 대표값으로 저장한다. 전체 목록은 `calculation_inputs.items[].productCode`를 참조한다. @@ -337,10 +337,10 @@ foreach ($quotes as $quote) { | # | 작업 항목 | 상태 | 비고 | |---|----------|:----:|------| -| 2B.4 | `inspections` 테이블에 `work_order_id` FK 마이그레이션 | ⏳ | `nullable` | -| 2B.5 | `Inspection` 모델에 `workOrder()` 관계 메서드 추가 | ⏳ | N+1 방지 | -| 2B.6 | 품질검사 생성 시 `work_order_id` 설정 로직 | ⏳ | `InspectionService` | -| 2B.7 | 기존 `inspections` 데이터에 `work_order_id` 보정 | ⏳ | `lot_no` 기반 역추적 (중복 사전 확인) | +| 2B.4 | `inspections` 테이블에 `work_order_id` FK 마이그레이션 | ✅ | 마이그레이션 실행 완료, nullable + nullOnDelete | +| 2B.5 | `Inspection` 모델에 `workOrder()` 관계 메서드 추가 | ✅ | 양방향: Inspection→workOrder, WorkOrder→inspections | +| 2B.6 | 품질검사 생성 시 `work_order_id` 설정 로직 | ✅ | store/show/index + transformToFrontend 업데이트 | +| 2B.7 | 기존 `inspections` 데이터에 `work_order_id` 보정 | ✅ | 대상 0건 — 보정 불필요 | **마이그레이션 설계 (2B.4)**: @@ -404,12 +404,12 @@ NO_MATCH: null 유지 (수동 보정 대상) | 테스트 | 예상 결과 | 실제 결과 | 상태 | |--------|----------|----------|------| -| 견적 저장 시 `quotes.product_code` | 첫 번째 개소 코드 | | ⏳ | -| 다중 개소 대표 코드 | 첫 번째 개소 | | ⏳ | -| 견적→수주 변환 `camelCase`→`snake_case` | 정상 변환 | | ⏳ | -| `inspections.work_order_id` FK 마이그레이션 | 성공, `nullable` | | ⏳ | -| 기존 inspection 조회 회귀 | 정상 | | ⏳ | -| `lot_no` 기반 역추적 보정 정확도 | MATCH 95% 이상 | | ⏳ | +| 견적 저장 시 `quotes.product_code` | 첫 번째 개소 코드 | `extractProductCodeFromInputs()` 자동 추출 | ✅ | +| 다중 개소 대표 코드 | 첫 번째 개소 | items[0].productCode 사용 | ✅ | +| 견적→수주 변환 `camelCase`→`snake_case` | 정상 변환 | L673 `productCode`→`product_code` 키 변환 확인 | ✅ | +| `inspections.work_order_id` FK 마이그레이션 | 성공, `nullable` | nullable, nullOnDelete, 인덱스 포함 | ✅ | +| 기존 inspection 조회 회귀 | 정상 | inspections 0건이므로 회귀 없음 | ✅ | +| 기존 데이터 보정 (`quotes`) | 보정 완료 | 25/49건 보정 (24건 초기 데이터 CI 없음) | ✅ | --- @@ -440,3 +440,4 @@ NO_MATCH: null 유지 (수동 보정 대상) |------|------|----------| | 2026-02-27 | 문서 작성 | 통합 계획 Phase 2 상세 문서 작성 | | 2026-02-27 | 2A 분석 완료 | BOM 구조 분석(dynamic_bom 발견), 마감유형 S1/S2/S3 차이 분석, inspection-config API 재설계, DEFAULT_GAP_PROFILES 5130 대조 완료. 1.2~1.7절 추가 | +| 2026-02-27 | 2B 구현 완료 | 견적 product_code 자동추출(2B.1), camelCase 확인(2B.2), 25건 보정(2B.3), inspections.work_order_id FK(2B.4), 양방향 관계(2B.5), 서비스 업데이트(2B.6), 0건 보정(2B.7) |