7.6 KiB
7.6 KiB
절곡품 재고생산 LOT 자동 채번 기획
작성일: 2026-03-18 상태: 기획 확정 관련:
rules/bending-lot-numbering-policy.md
1. 목표
재고생산 등록 화면에서 품종 + 종류 + 모양&길이 3가지를 선택하면:
- 매핑된 품목이 자동 식별됨
- 제조일과 결합하여 LOT 번호가 자동 채번되어 프리뷰에 표시됨
- 일련번호 없음 — 같은 날 같은 조합은 동일 LOT 번호
2. LOT 번호 생성 규칙
{제품코드}{종류코드}{날짜코드4자리}-{길이코드}
| 입력 | 예시 값 | 코드 |
|---|---|---|
| 제조일 | 2026-03-18 | 6318 |
| 품종 | 케이스 | C |
| 종류 | 린텔부 | L |
| 모양&길이 | 3000mm | 30 |
| 결과 | CL6318-30 |
같은 날(03-18) 케이스 린텔부 3000mm를 2번 생산하면, 두 건 모두 LOT
CL6318-30이다.
3. 화면 흐름
┌──────────────────────────────────────────────────────┐
│ 절곡품 재고생산 등록 │
├──────────────────────────────────────────────────────┤
│ │
│ ① 기본 정보 │
│ ┌─────────────────┬─────────────────┐ │
│ │ 제조일: 2026-03-18│ 수량: 50 │ │
│ └─────────────────┴─────────────────┘ │
│ │
│ ② 품목 선택 (3개 드롭다운) │
│ ┌─────────────┬──────────────┬──────────────┐ │
│ │ 품종 * │ 분류(종류) * │ 모양&길이 * │ │
│ │ [케이스 ▾]│ [린텔부 ▾] │ [3000 ▾] │ │
│ └─────────────┴──────────────┴──────────────┘ │
│ │
│ ┌──────────────────────────────────────────┐ │
│ │ ✅ 매핑 품목: BD-CL-30 케이스 린텔부 3000mm │ │
│ └──────────────────────────────────────────┘ │
│ │
│ ③ LOT 정보 (자동 채번) │
│ ┌─────────────────────────────────────────┐ │
│ │ 생산품 LOT: CL6318-30 │ ← 자동 │
│ │ 원자재 재질: EGI 1.55T │ ← 자동 │
│ └─────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────┐ │
│ │ 원자재 LOT: [🔍 선택] │ ← 수동 │
│ └─────────────────────────────────────────┘ │
│ │
│ ╔══════════════════════════════════════════╗ │
│ ║ ✕ 취소 💾 저장 ║ │
│ ╚══════════════════════════════════════════╝ │
└──────────────────────────────────────────────────────┘
3.1 자동 채번 트리거
| 조건 | 동작 |
|---|---|
| 품종 선택 | 종류 드롭다운 필터링 (해당 제품의 종류만 표시) |
| 종류 선택 | 길이 드롭다운 필터링 (연기차단재면 연기차단재 길이, 그 외 일반 길이) |
| 모양&길이 선택 | ① resolveItem API 호출 → 매핑 품목 표시 ② LOT 프리뷰 자동 생성 |
| 제조일 변경 | LOT 프리뷰의 날짜 코드 부분 갱신 |
3.2 에러 상태
| 상태 | 표시 |
|---|---|
| 3가지 미선택 | LOT 프리뷰 비어있음 |
| 매핑 품목 없음 | ⚠️ "해당 조합에 매핑된 품목이 없습니다" (저장 가능 — 품목 없이도 LOT 생성) |
| 매핑 품목 있음 | ✅ "BD-CL-30 케이스 린텔부 3000mm" 표시 |
4. 수정 범위
4.1 API 수정 (BendingCodeService)
현재 문제: generateLotNumber()이 일련번호(-001)를 추가함
// 변경 전
public function generateLotNumber(string $lotBase): string
{
// ... 기존 LOT 수 조회 → -001 suffix 추가
return "{$lotBase}-{$seq}";
}
// 변경 후
public function generateLotNumber(
string $prodCode,
string $specCode,
string $lengthCode,
string $date
): string {
$dateCode = self::generateDateCode($date);
return "{$prodCode}{$specCode}{$dateCode}-{$lengthCode}";
}
일련번호 로직 제거. 같은 날 같은 조합은 동일 LOT.
4.2 API 엔드포인트 수정 (BendingController)
POST /api/v1/bending/generate-lot 응답 변경:
// 변경 전
{ "lot_number": "CL6318-30-001", "material": "EGI 1.55T" }
// 변경 후
{ "lot_number": "CL6318-30", "material": "EGI 1.55T" }
4.3 React 수정 (BendingLotForm.tsx)
현재 LOT 프리뷰 (270~276행): 이미 올바른 형태로 동작함
// 이미 올바름 — 일련번호 없이 {prod}{spec}{dateCode}-{length}
const lotPreview = useMemo(() => {
const dateCode = generateDateCode(form.regDate);
const base = `${form.prodCode}${form.specCode}${dateCode}`;
return form.lengthCode ? `${base}-${form.lengthCode}` : base;
}, [form.prodCode, form.specCode, form.lengthCode, form.regDate]);
저장 시 (348~362행): generateBendingLot() API 호출 결과가 달라지므로 연동 확인 필요
4.4 수정 파일 목록
| 파일 | 변경 내용 | 프로젝트 |
|---|---|---|
app/Services/BendingCodeService.php |
generateLotNumber() 일련번호 제거 |
API |
app/Http/Controllers/Api/V1/BendingController.php |
generate-lot 응답 수정 | API |
src/components/stocks/BendingLotForm.tsx |
저장 로직에서 API 응답 연동 확인 | React |
5. 테스트 체크리스트
- 품종+종류+길이 선택 시 LOT 프리뷰 자동 표시
- 제조일 변경 시 LOT 프리뷰 갱신
- 같은 날 같은 조합 2건 저장 → 동일 LOT 번호 확인
- 매핑 품목 있는 조합 → 품목명 자동 표시
- 매핑 품목 없는 조합 → 경고 표시, 저장은 가능
- 연기차단재(G) 선택 시 연기차단재 전용 길이 표시
관련 문서
rules/bending-lot-numbering-policy.md— LOT 채번 규칙 (일련번호 없음 확정)plans/bending-item-registration-plan.md— 품목 등록 계획 (완료)
최종 업데이트: 2026-03-18