# 절곡품 LOT 채번 코드맵 최신화 + 품목 일괄 등록 + 일련번호 제거 **날짜:** 2026-03-18 **작업자:** Claude Code --- ## 변경 개요 경동기업 재공품 LOT 채번 규칙을 최신 기준으로 업데이트했다. 신규 종류/길이 코드 추가, 누락 품목 222건 일괄 등록, LOT 번호에서 일련번호(-001) 제거. --- ## 수정된 파일 | 파일 | 변경 내용 | 프로젝트 | |------|----------|---------| | `app/Services/BendingCodeService.php` | 코드맵 최신화 + generateLotNumber() 일련번호 제거 | API | | `app/Http/Controllers/Api/V1/BendingController.php` | generate-lot 응답 단순화 | API | | `scripts/register-bending-items.php` | 품목 일괄 등록 스크립트 | API | --- ## 상세 변경 사항 ### 1. BendingCodeService 코드맵 최신화 **신규 종류 코드 3종:** | 코드 | 종류 | 적용 제품 | |------|------|----------| | W | 본체(L120) | R(벽면형), S(측면형) | | F | SUS마감재(L120) | R(벽면형), S(측면형) | | H | 화이바원단(W80) | G(연기차단재) | **신규 길이 코드 4종:** | 길이 | 코드 | |------|------| | 610mm | 06 | | 1750mm | 17 | | 2000mm | 20 | | 4500mm | 45 | **명칭 변경:** - R:M 본체 → S:M 본체디딤 (측면형만) - SUS(마감) → SUS마감재 / SUS마감재(3) - 화이바원단 → 화이바원단(W50) - 가이드레일(R/S)에서 EGI(E) 종류 코드 제거 ### 2. 품목 일괄 등록 (222건) LOT 코드 기준 26개 제품+종류 조합 × 12개 길이 = 320개 조합 중 누락 222건을 `items` 테이블에 등록. `bending_item_mappings` 테이블에 320건 매핑 동시 등록. | 구분 | 건수 | |------|:----:| | 기존 품목 유지 | 170건 | | 신규 생성 | 222건 | | bending_item_mappings | 320건 | ### 3. LOT 번호 일련번호 제거 ``` 변경 전: CL6318-30-001 (일련번호 포함) 변경 후: CL6318-30 (일련번호 없음) ``` 같은 날 같은 조합은 동일 LOT 번호를 사용한다. **API 응답 변경 (`POST /api/v1/bending/generate-lot`):** ```json // 변경 전 { "lot_base": "CL6318-30", "lot_number": "CL6318-30-001", "date_code": "6318", "material": "EGI 1.55T" } // 변경 후 { "lot_number": "CL6318-30", "material": "EGI 1.55T" } ``` > `lot_base`, `date_code` 필드 제거. `lot_number`에 일련번호 미포함. ### 4. resolve-item 응답에 expected_code 추가 품목 매핑 조회(`GET /api/v1/bending/resolve-item`) 응답에 `expected_code` 필드를 추가했다. 매핑 실패 시 어떤 품목 코드(`BD-XX-nn`)를 찾고 있는지 사용자가 확인할 수 있다. **매핑 실패 응답:** ```json { "error": "NOT_MAPPED", "message": "해당 조합에 매핑된 품목이 없습니다.", "expected_code": "BD-BE-20" } ``` **매핑 성공 응답:** ```json { "item_id": 16448, "item_code": "BD-BE-20", "item_name": "하단마감재(스크린) EGI 2000mm", "expected_code": "BD-BE-20" } ``` --- ## React 영향 (프론트엔드 전달 필요) ### 호환성 (수정 불필요) - `BendingLotForm.tsx`의 LOT 프리뷰(`lotPreview`)는 이미 올바르게 동작 (일련번호 없는 형태) - 저장 시 `generateBendingLot()` API 응답에서 `lot_base`, `date_code` 필드 제거됨 - 현재 코드에서 `lotData.lot_number`와 `lotData.material`만 사용하므로 **호환성 문제 없음** ### 구현 요청 1. **매핑 실패 경고에 품목 코드 표시** (`BendingLotForm.tsx` 320행): ```tsx // 변경 전 setResolveError('해당 조합에 매핑된 품목이 없습니다.'); // 변경 후 const code = result.data?.expected_code || ''; setResolveError(`해당 조합에 매핑된 품목이 없습니다. (${code})`); ``` 2. **매핑 성공 시 품목 코드 함께 표시** (권장) ### 원자재 LOT 조회 (`GET /api/v1/bending/material-lots`) 변경 | 항목 | 변경 전 | 변경 후 | |------|---------|---------| | status 필터 | `completed`만 | `completed` + `inspection_completed` | | 재질 검색 | `LIKE "%EGI 1.55T%"` (전체 일치) | 키워드 분해: `"EGI" AND "1.55"` (공백/T 무관) | **변경 이유**: 실제 입고 데이터의 품목명이 `"EGI1.55"`, `"egi1.55"` 등 공백/대소문자/T접미사가 불일치하여 검색 결과가 0건이었음. 또한 수입검사 완료(`inspection_completed`) 상태의 입고도 원자재 LOT으로 선택 가능해야 함. **프론트엔드 영향**: 없음 (API 응답 구조 변경 없음, 결과 건수만 증가) --- ## 관련 문서 - `rules/bending-lot-numbering-policy.md` — LOT 채번 규칙 정책 - `plans/bending-item-registration-plan.md` — 품목 등록 계획 (완료) - `plans/bending-lot-auto-generation-plan.md` — LOT 자동 채번 기획 --- **최종 업데이트**: 2026-03-18