Files
sam-docs/changes/20260318_bending_lot_codemap_update.md

4.7 KiB
Raw Blame History

절곡품 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):

// 변경 전
{ "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)를 찾고 있는지 사용자가 확인할 수 있다.

매핑 실패 응답:

{
  "error": "NOT_MAPPED",
  "message": "해당 조합에 매핑된 품목이 없습니다.",
  "expected_code": "BD-BE-20"
}

매핑 성공 응답:

{
  "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_numberlotData.material만 사용하므로 호환성 문제 없음

구현 요청

  1. 매핑 실패 경고에 품목 코드 표시 (BendingLotForm.tsx 320행):
// 변경 전
setResolveError('해당 조합에 매핑된 품목이 없습니다.');

// 변경 후
const code = result.data?.expected_code || '';
setResolveError(`해당 조합에 매핑된 품목이 없습니다. (${code})`);
  1. 매핑 성공 시 품목 코드 함께 표시 (권장)

원자재 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