docs: [plans] Phase 2B 완료 — 견적/품질 정합성 구현 기록
- Phase 2B 전 항목(2B.1~7) ✅ 완료, 검증 결과 기록
- 마스터 플랜 진행률 4/7 (Phase 0~2 완료)
This commit is contained in:
@@ -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건 |
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -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) |
|
||||
|
||||
Reference in New Issue
Block a user