- BendingCodeService: lengthCodeToMm() public static 메서드 추가
- BendingInfoBuilder: buildDynamicBomForStockItem() 신규 메서드
- bending_lot(prodCode/specCode/lengthCode) + partKey → BD 품목 코드 → dynamic_bom 엔트리 생성
- PrefixResolver 활용하여 정확한 prefix 매핑
- OrderService: STOCK 확정 시 bending_lot 기반 dynamic_bom 자동 생성
- WorkOrderService: 기존 STOCK 호환 fallback (getMaterials + getMaterialsForItem)
- dynamic_bom 없는 기존 재공품도 bending_lot.material로 원자재 검색
- CF/CL/CP/CB 품목이 모든 길이에 등록되어 boxSize 무관하게 적용
- resolveShutterBoxPrefix()에서 불필요한 isStandard 분기 제거
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- PrefixResolver: 제품코드×마감재질→LOT prefix 결정 + BD-XX-NN 코드 생성
- DynamicBomEntry DTO: dynamic_bom JSON 항목 타입 안전 관리
- BendingInfoBuilder 확장: build() 리턴 변경 + buildDynamicBomForItem() 추가
- OrderService: 작업지시 생성 시 per-item dynamic_bom 자동 저장
- WorkOrderService.getMaterials(): dynamic_bom 우선 체크 + N+1 배치 최적화
- WorkOrderService.registerMaterialInput(): work_order_item_id 분기 라우팅 통일
- 단위 테스트 58개 + 통합 테스트 6개 (64 tests / 293 assertions)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- FormulaHandler: 철재 면적 공식 W1×(H1+550) → W1×H1 (레거시 Slat_updateCol12and13 동일)
- FormulaHandler: 샤프트 인치 자동계산 추가 (레거시 Slat_updateCol22 동일)
- BendingInfoBuilder: 셔터박스 크기를 모터용량→브라켓→박스 매핑으로 결정
(BOM 원자재 코드 BD-케이스-500*380 대신 조립 크기 650*550 등 사용)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>