diff --git a/plans/qa-bugfix-plan-v2.md b/plans/qa-bugfix-plan-v2.md index 5b3cb44..b8e29fa 100644 --- a/plans/qa-bugfix-plan-v2.md +++ b/plans/qa-bugfix-plan-v2.md @@ -14,11 +14,11 @@ |------|------| | **총 이슈** | 43건 (신규 26 + V1이관 17) | | **중요도 분포** | Critical 6, Major 22, Minor 9, 확인필요 4, 보류/패스 2 | -| **완료** | 16건 (코드수정 12 + 코드정상/자동해소 4) | -| **미착수** | 27건 (재검증 2, 프론트이관 5, 별도세션 11, 기획확인 5, 보류 4) | -| **진행률** | 16/43 (37%) | -| **다음 작업** | Phase 5 신규기능 또는 별도 세션 이슈 | -| **마지막 업데이트** | 2026-03-18 | +| **완료** | 31건 (코드수정 18 + 정상/자동해소 4 + 디펙아님 7 + 준비중 1 + 패스 1) | +| **미착수** | 12건 (프론트이관 3, 신규기능 3, 별도세션 2, 패스/보류 4) | +| **진행률** | 31/43 (72%) | +| **다음 작업** | V1#37 작업지시 수량 수정, V1#40 미터단위, V1#41 재고조정 (신규기능) | +| **마지막 업데이트** | 2026-03-19 | --- @@ -71,12 +71,12 @@ ### 2.0 Phase 0: 확인필요 (4건) — 정책 결정 후 배정 -| # | 출처 | 모듈 | 이슈 | 확인 사항 | -|---|------|------|------|----------| -| 4 | 신규 | 수주관리 | 출고예정일 빈값 → 납품요청일 복사 | 의도된 동작인지 확인 | -| 21 | 신규 | 제품검사 | 검사 완료 후 수정 가능 | 완료 후 수정 차단 필요 여부 | -| V1#10 | V1이관 | 견적관리 | 목록 작업 컬럼 빈값 | 어떤 데이터가 들어가야 하는지 기획 확인 | -| V1#12 | V1이관 | 견적관리 | 연락처 필수값 안내 시점 | UX 정책: 저장 시 vs 실시간 검증 | +| # | 출처 | 모듈 | 이슈 | 확인 사항 | 상태 | +|---|------|------|------|----------|------| +| 4 | 신규 | 수주관리 | 출고예정일 빈값 → 납품요청일 복사 | 의도된 동작인지 확인 | ✅ 디펙아님 (정상 동작) | +| 21 | 신규 | 제품검사 | 검사 완료 후 수정 가능 | 완료 후 수정 차단 필요 여부 | ✅ 수정완료 (완료 후 차단) | +| V1#10 | V1이관 | 견적관리 | 목록 작업 컬럼 빈값 | 어떤 데이터가 들어가야 하는지 기획 확인 | 보류 (셀렉트 시 액션 표시됨) | +| V1#12 | V1이관 | 견적관리 | 연락처 필수값 안내 시점 | UX 정책: 저장 시 vs 실시간 검증 | 패스 (현재 동작 유지) | --- @@ -91,7 +91,7 @@ | 항목 | 내용 | |------|------| | **현상** | 수주확정 후 생산지시 생성 클릭 시 `[500] Undefined variable $process` 에러 | -| **경로** | `/sales/order-management-sales/[id]` → 생산지시 생성 | +| **경로** | https://dev.codebridge-x.com/ko/sales/order-management-sales/[id] → 생산지시 생성 | | **영향** | **생산→출고→매출 전체 흐름 차단** | | **비고** | 3/13 정상이었으나 3/16부터 에러 발생. 예시: KD-SS-260316-02 | @@ -112,7 +112,7 @@ | 항목 | 내용 | |------|------| | **현상** | 제품검사 등록 성공 알럿 → 목록 이동 → 데이터 없음. 요약카드만 +1 | -| **경로** | `/quality/inspections?mode=new` | +| **경로** | https://dev.codebridge-x.com/ko/quality/inspections?mode=new | | **영향** | **품질관리 흐름 검증 차단** | **수정 대상:** @@ -128,7 +128,7 @@ | 항목 | 내용 | |------|------| | **현상** | 출고 완료되어도 매출금액 0원. SL202603~ 목록/상세 모두 0원 | -| **경로** | `/accounting/sales`, `/accounting/sales/[id]?mode=view` | +| **경로** | https://dev.codebridge-x.com/ko/accounting/sales , https://dev.codebridge-x.com/ko/accounting/sales/[id]?mode=view | | **선행** | #16 해결 필요 | **수정 대상:** @@ -144,7 +144,7 @@ | 항목 | 내용 | |------|------| | **현상** | 실적신고 미확정 상태 데이터가 품질관리서 목록에 표시됨 | -| **경로** | `/quality/qms` | +| **경로** | https://dev.codebridge-x.com/ko/quality/qms | | **선행** | #20 해결 필요 | **수정 대상:** @@ -160,7 +160,7 @@ | 항목 | 내용 | |------|------| | **현상** | 부가세 포함 선택 후 저장 → 상세에서 부가세 미노출 | -| **경로** | `/sales/quote-management/new` | +| **경로** | https://dev.codebridge-x.com/ko/sales/quote-management/new | | **코드 검증** | Quote 모델 fillable에 `tax_amount` 있으나, 프론트에서 tax_amount 미전송. 계산/저장 로직 자체 미구현 | **수정 대상:** @@ -177,7 +177,7 @@ | 항목 | 내용 | |------|------| | **현상** | 단가 수정 시 저장되지 않고 0원으로 저장 | -| **경로** | `/sales/pricing-management/create?itemId=` | +| **경로** | https://dev.codebridge-x.com/ko/sales/pricing-management/create?itemId= | | **코드 검증** | `PricingService.php` → `getItemPrice()` 메서드가 TODO 상태, `return ['price' => 0]` 하드코딩 | **수정 대상:** @@ -199,7 +199,7 @@ | 항목 | 내용 | |------|------| | **현상** | 로트번호 컬럼에 출고번호(SHP-*)가 표시됨. 상세에서는 `-` 표기 | -| **경로** | `/outbound/shipments` | +| **경로** | https://dev.codebridge-x.com/ko/outbound/shipments | --- @@ -208,16 +208,17 @@ | 항목 | 내용 | |------|------| | **현상** | 전체 출고건 "등록된 제품이 없다"고 표시 | -| **경로** | `/outbound/shipments/[id]?mode=view` | +| **경로** | https://dev.codebridge-x.com/ko/outbound/shipments/[id]?mode=view | --- -#### #25 출고 수동등록 로트번호 미로드 `Major` `신규` +#### #25 출고 수동등록 로트번호 미로드 `Major` `신규` ✅ 디펙아님 (기능 제거) | 항목 | 내용 | |------|------| | **현상** | 생산완료 후 수동 등록 시 로트번호 목록 미로드 | -| **경로** | `/outbound/shipments?mode=new` | +| **경로** | https://dev.codebridge-x.com/ko/outbound/shipments?mode=new | +| **점검 결과** | 출고 수동등록 기능은 의도적으로 제거됨. 제품 없이 수동 등록 불가하므로 수주→생산→출고(자동생성) 경로만 지원 | --- @@ -226,25 +227,28 @@ | 항목 | 내용 | |------|------| | **현상** | 카드 출고완료 0건 vs 목록 출고완료 2건 | -| **경로** | `/outbound/shipments` | +| **경로** | https://dev.codebridge-x.com/ko/outbound/shipments | --- -#### #27 매출관리 흐름 검증 불가 `Major` `신규` +#### #27 매출관리 흐름 검증 불가 `Major` `신규` ✅ 디펙아님 (#25 해소) | 항목 | 내용 | |------|------| | **현상** | 출고 수동등록 불가로 매출 등록 확인 불가 | | **선행** | #25 + #16 해결 시 자동 해소 가능 | +| **점검 결과** | #25가 디펙아님(수동등록 기능 제거). 매출 흐름은 수주→생산→출고(자동)→매출 경로로 검증 가능. #16(생산지시 500) 기수정 완료로 정상 흐름 확보됨 | --- -#### #29 엑셀 업로드 구버전 제품명 산출 안됨 `Major` `신규` +#### #29 엑셀 업로드 구버전 제품명 산출 안됨 `Major` `신규` ⏳ 준비중 처리 | 항목 | 내용 | |------|------| | **현상** | 엑셀 업로드 시 구버전 제품명으로 견적 산출 안됨 | -| **경로** | `/sales/quote-management/new?mode=new` | +| **경로** | https://dev.codebridge-x.com/ko/sales/quote-management?mode=new | +| **점검 결과** | 엑셀 제품코드 매칭이 `item_code === productCode` 완전 일치만 지원. 구버전 제품명/별칭 필드 없음. 양식 재설계 필요 | +| **처리** | 양식다운로드 + 업로드 버튼 → "준비중입니다." toast로 임시 비활성화. `LocationListPanel.tsx` 수정 | --- @@ -259,7 +263,7 @@ | 항목 | 내용 | |------|------| | **현상** | 수주 선택 시 모두 "불일치" 표시. "미검사" 워딩과도 불일치 | -| **경로** | `/quality/inspections?mode=new` | +| **경로** | https://dev.codebridge-x.com/ko/quality/inspections?mode=new | --- @@ -268,7 +272,7 @@ | 항목 | 내용 | |------|------| | **현상** | 품질관리서 목록에 품목명이 표시되지 않음 | -| **경로** | `/quality/qms` | +| **경로** | https://dev.codebridge-x.com/ko/quality/qms | --- @@ -277,7 +281,7 @@ | 항목 | 내용 | |------|------| | **현상** | 기존 데이터로는 표시됨, 신규 검증 불가 (#20 선행) | -| **경로** | `/quality/qms` | +| **경로** | https://dev.codebridge-x.com/ko/quality/qms | --- @@ -286,7 +290,7 @@ | 항목 | 내용 | |------|------| | **현상** | 관련서류 탭 수주서/작업일지/검사서 검증 불가 (#20 선행) | -| **경로** | `/quality/qms` | +| **경로** | https://dev.codebridge-x.com/ko/quality/qms | --- @@ -299,7 +303,7 @@ | 항목 | 내용 | |------|------| | **현상** | 신규 등록 거래처가 견적 등록 시 수주처 목록에 미표시 | -| **경로** | `/sales/quote-management/new?mode=new` | +| **경로** | https://dev.codebridge-x.com/ko/sales/quote-management?mode=new | --- @@ -308,64 +312,72 @@ | 항목 | 내용 | |------|------| | **현상** | 활성 6건 + 비활성 14건 = 20건 전부 목록 표시 | -| **경로** | `/sales/quote-management/new?mode=new` | +| **경로** | https://dev.codebridge-x.com/ko/sales/quote-management?mode=new | > **참고**: V1 #25(수주관리 `getClients({ only_active: true })`)와 동일 패턴. 견적관리 쪽도 적용 필요. --- -#### #13 단가 신규 등록 기능 없음 `Major` `신규` +#### #13 단가 신규 등록 기능 없음 `Major` `신규` ✅ 디펙아님 (의도된 설계) | 항목 | 내용 | |------|------| | **현상** | 품목마스터 동기화 버튼만 존재. 수동 단가 등록 기능 없음 | -| **경로** | `/sales/pricing-management` | +| **경로** | https://dev.codebridge-x.com/ko/sales/pricing-management | | **연관** | V1#32, V1#33 (PricingService 통합 구현) | +| **점검 결과** | 등록 기능은 구현됨 (미등록 품목 행 클릭 → create 페이지). 품목마스터에 없는 제품의 단가 등록은 의도적으로 불가. 설계 의도대로 정상 | --- -#### #14 배차차량 상태 전환 방법 없음 `Major` `신규` +#### #14 배차차량 상태 전환 방법 없음 `Major` `신규` ✅ 완료 | 항목 | 내용 | |------|------| | **현상** | "작성대기"에서 전환 불가. 배차정보 입력해도 상태 변경 없음 | -| **경로** | `/outbound/vehicle-dispatches/[id]?mode=view` | +| **경로** | https://dev.codebridge-x.com/ko/outbound/vehicle-dispatches/[id]?mode=view | +| **점검 결과** | 백엔드 update()에서 options.status를 저장하지 않음. 프론트는 조회 시 freight_cost_type으로 가상 계산만 | +| **처리** | 백엔드 update() 시 freight_cost_type 유무로 status 자동 결정(completed/draft). 상차/직접배차는 금액 0 허용. 프론트는 options.status 우선 사용 + 폴백 유지 | --- -#### #15 생산지시 상세 개소 값 불일치 `Major` `신규` +#### #15 생산지시 상세 개소 값 불일치 `Major` `신규` ✅ 완료 | 항목 | 내용 | |------|------| | **현상** | 작업지시서 개소 컬럼에 품목 합 표시. 납품 개소 값이어야 함 | -| **경로** | `/sales/order-management-sales/production-orders/[id]?mode=view` | +| **경로** | https://dev.codebridge-x.com/ko/sales/order-management-sales/production-orders/[id]?mode=view | --- -#### #17 수주 목록 상태/카드 불일치 `Major` `신규` +#### #17 수주 목록 상태/카드 불일치 `Major` `신규` ✅ 완료 | 항목 | 내용 | |------|------| -| **현상** | 카드 생산지시 대기 7건 vs 목록 수주확정 5건 | -| **경로** | `/sales/order-management-sales` | +| **현상** | 카드 생산지시 대기 7건 vs 목록 수주확정 5건. 추가로 3월 21건인데 11건만 표시 | +| **경로** | https://dev.codebridge-x.com/ko/sales/order-management-sales | +| **점검 결과** | ① 카드는 복합 상태 합산, 필터는 3개만 존재 ② received_at 전부 NULL로 API 날짜 필터 미작동 | +| **처리** | 백엔드 날짜 필터를 COALESCE(DATE(received_at), DATE(created_at)) 폴백으로 수정. 프론트 필터/카드는 현행 유지 | --- -#### V1#6 거래처 등록 시 회계관리 미노출 `Major` `V1이관` +#### V1#6 거래처 등록 시 회계관리 미노출 `Major` `V1이관` 패스 (mng 별도) | 항목 | 내용 | |------|------| | **현상** | 신규 거래처 등록 시 회계관리 거래처 목록에 미노출 | -| **코드 검증** | ClientService에 mng DB 동기화 로직 없음 | +| **코드 검증** | DB 동기화 문제가 아님. 같은 DB(samdb)의 같은 `clients` 테이블(41건) 공유. **mng 회계 화면이 `trading_partners`(34건) 테이블을 별도 조회**하는 구조적 차이. mng 회계 코드 확인 필요 | +| **처리** | mng 영역이므로 패스. 별도 세션에서 처리 | --- -#### V1#11 견적 접수일 날짜 하루 밀림 `Major` `V1이관` +#### V1#11 견적 접수일 날짜 하루 밀림 `Major` `V1이관` ✅ 완료 | 항목 | 내용 | |------|------| | **현상** | 접수 날짜 오늘(3/13) 설정 → 저장 후 목록에 3/12로 노출 | | **코드 검증** | QuoteRegistration.tsx에서 UTC 타임존 변환 처리 없음 | +| **점검 결과** | DB 저장은 정상(`2026-03-19`). Laravel `date` 캐스트가 JSON 직렬화 시 UTC 변환(`2026-03-18T15:00:00.000000Z`) → 프론트에서 -1일 표시 | +| **처리** | Quote 모델의 date 캐스트를 `date:Y-m-d` 형식으로 변경 → JSON 직렬화 시 `"2026-03-19"` 문자열로 반환 | --- @@ -384,13 +396,15 @@ --- -#### V1#32 단가 등록 시 품목코드/품목명 변경 `Major` `V1이관` +#### V1#32 단가 등록 시 품목코드/품목명 변경 `Major` `V1이관` ✅ 완료 | 항목 | 내용 | |------|------| | **현상** | 단가 등록 시 품목코드가 ITEM-15893, 품목명이 "없음"으로 변경됨 | | **코드 검증** | PricingService.php store() 미구현 (TODO 상태) | | **연관** | V1#33, 신규#13과 통합 처리 | +| **점검 결과** | Price 모델에 `item()` 관계 미정의 → API 응답에 품목 정보 없음 → 프론트 폴백값(`ITEM-{id}`, `품목명 없음`) 표시 | +| **처리** | ① Price 모델에 `item()` BelongsTo 관계 추가 ② index/show에서 `item:id,code,name,item_category` eager load ③ 프론트 변환 함수에서 item 데이터 우선 사용 | --- @@ -450,11 +464,11 @@ | # | 출처 | 모듈 | 이슈 | 상세 | 상태 | |---|------|------|------|------|------| -| 18 | 신규 | 재고현황 | 재공품 필드 0 표시 | 목록 0 노출, 상세 "사용" 표시 | ⏳ 기획 확인 | +| 18 | 신규 | 재고현황 | 재공품 필드 0 표시 | 목록 0 노출, 상세 "사용" 표시 | 패스 (다른 개발자 진행중) | | 19 | 신규 | 제품검사 | 상태/카드 불일치 | 카드 완료5 vs 목록 완료2 | ✅ #20에서 해소 | | 24 | 신규 | 출고관리 | 상태 워딩 | "출고완료**으로**" → "출고완료**로**" | ✅ 완료 | | 32 | 신규 | 견적관리 | 날짜필터 활성화 스타일 | 선택 버튼 활성화 스타일 없음 | → 프론트이관 | -| V1#13 | V1이관 | 견적관리 | 수동 품목 단가 0원 | 수동 추가 시 단가 입력 불가 | ⏳ 기획 확인 | +| V1#13 | V1이관 | 견적관리 | 수동 품목 단가 0원 | 수동 추가 시 단가 입력 불가 | ✅ 디펙아님 (단가 데이터 미등록) | | V1#17 | V1이관 | 견적관리 | PDF 생성 안됨 | DomPDF 미구현 | ⏳ 별도 세션 | | V1#24 | V1이관 | 견적관리 | 견적상태 3곳 불일치 | 상태/뱃지/금액요약 워딩 통일 | → 프론트이관 | | V1#34 | V1이관 | 품목관리 | 품목 규격 (나머지) | WO items에 spec 미적용 | ⏳ 별도 세션 | @@ -586,6 +600,17 @@ Phase 6 (Minor) ── 모두 독립 | 2026-03-18 | Phase 3 | #7 #10 완료, #5 정상, #9 자동해소 | | 2026-03-18 | Phase 4 | V1#29 완료, #11 #12 코드정상(재검증), 나머지 별도 처리 | | 2026-03-18 | Phase 6 | #24 완료, #19 자동해소, #32 V1#24 V1#42 프론트이관 | +| 2026-03-18 | Phase 4 | #15 개소값 수정, #17 카드 재구성+stats 상태 추가, 공정그룹 한글화 | +| 2026-03-18 | Phase 0 | #4 디펙아님, #21 수정완료, V1#10 보류, V1#12 패스 | +| 2026-03-18 | Phase 6 | V1#13 디펙아님(단가 미등록), #18 패스(다른 개발자) | +| 2026-03-18 | 기타 | V1#6 구조확인(clients vs trading_partners), 개발서버 CLI timezone 수정 | +| 2026-03-19 | Phase 2 | #25 디펙아님(수동등록 기능 의도적 제거), #27 디펙아님(#25 해소, 자동 흐름으로 검증 가능) | +| 2026-03-19 | Phase 2 | #29 엑셀 업로드 "준비중" 처리 (양식다운로드+업로드 버튼 toast 비활성화) | +| 2026-03-19 | 문서 | 전체 경로를 full URL(https://dev.codebridge-x.com/ko/...)로 업데이트 | +| 2026-03-19 | Phase 4 | #17 완료 — 필터 전체 상태 추가 + 카드 필터 연동 + API 서버사이드 날짜 필터(COALESCE) + 건수 누락 해결 | +| 2026-03-19 | Phase 4 | #14 완료 — 백엔드 update() 시 freight_cost_type 유무로 options.status 자동 저장 | +| 2026-03-19 | Phase 4 | V1#11 완료 — Quote 모델 date 캐스트를 `date:Y-m-d` 형식으로 변경 (UTC 직렬화 방지) | +| 2026-03-19 | Phase 4 | #13 디펙아님(의도된 설계), V1#6 패스(mng 별도), V1#32 완료 — Price 모델 item() 관계 추가 + eager load | ---