# [체크리스트] 품번 수동 접두어 채번 - 접두어별 독립 순번 생성 > 관련 문서: [계획서](./MPN[계획]-품번-수동접두어채번.md) | [맥락노트](./MPN[맥락]-품번-수동접두어채번.md) --- ## 공정 상태 - 전체 진행률: **95%** (코드 구현 + DB 마이그레이션 + 실시간 미리보기 + 코드 정리 완료, 검증 대기) - 현재 단계: 검증 대기 --- ## 구현 체크리스트 ### 1단계: 구조적 변경 (행위 변경 없음) - [x] `numberingRuleService.ts`에서 수동 값 추출 로직을 `extractManualValuesFromInput` private 메서드로 분리 - [x] 기존 `allocateCode` 내부에서 분리한 메서드 호출로 교체 - [x] 기존 동작과 동일한지 확인 (구조적 변경만, 행위 변경 없음) ### 2단계: buildPrefixKey 수정 - [x] `buildPrefixKey` 시그니처에 `manualValues?: string[]` 파라미터 추가 - [x] 수동 파트 처리 로직 변경: `continue` → `manualValues`에서 값 꺼내 `prefixParts`에 추가 - [x] `previewCode` 호출부에 영향 없음 확인 (optional 파라미터) ### 3단계: allocateCode 순서 변경 + 폴백 정리 - [x] 수동 값 추출 로직을 `buildPrefixKey` 호출 전으로 이동 - [x] 수동 파트 1개 + 추출 실패 시 `userInputCode` 전체를 수동 값으로 사용하는 폴백 추가 - [x] `buildPrefixKey` 호출 시 `extractedManualValues`를 세 번째 인자로 전달 - [x] 코드 조합 단계에서 `part.manualConfig?.value` 폴백 제거 ### 4단계: DB 마이그레이션 - [x] `db/migrations/1053_remove_bulk1_manual_config_value.sql` 작성 - [x] `manual_config->>'value' = 'BULK1'` 조건으로 JSONB에서 `value` 키 제거 - [x] 마이그레이션 실행 (9건 정리 완료) ### 5단계: 연속 구분자(--) 방지 - [x] `joinPartsWithSeparators`에서 빈 파트 뒤 연속 구분자 방지 로직 추가 - [x] `extractManualValuesFromInput`에서 카테고리/참조 빈 값 시 `""` 반환 (템플릿 정합성) ### 6단계: 검증 - [ ] 카테고리 선택 + 수동입력 "ㅁㅁㅁ" → 카테고리값-ㅁㅁㅁ-001 생성 확인 - [ ] 카테고리 미선택 + 수동입력 "ㅁㅁㅁ" → -ㅁㅁㅁ-001 생성 확인 (-- 아님) - [ ] 같은 접두어 "ㅁㅁㅁ" 재등록 → -ㅁㅁㅁ-002 순번 증가 확인 - [ ] 다른 접두어 "ㅇㅇㅇ" 등록 → -ㅇㅇㅇ-001 독립 시퀀스 확인 - [ ] 수동 파트 없는 채번 규칙 동작 영향 없음 확인 - [ ] previewCode (미리보기) 동작 영향 없음 확인 - [ ] BULK1이 더 이상 생성되지 않음 확인 ### 7단계: 실시간 순번 미리보기 - [x] 백엔드 컨트롤러: preview 엔드포인트에 `manualInputValue` body 파라미터 수신 추가 - [x] 백엔드 서비스: `previewCode`에 `manualInputValue` 파라미터 추가, `buildPrefixKey`에 전달 - [x] 프론트엔드 API: `previewNumberingCode`에 `manualInputValue` 파라미터 추가 - [x] V2Input: `manualInputValue` 변경 시 디바운스(300ms) preview API 호출 + suffix 갱신 - [x] 백엔드 서비스: 초기 상태(수동 입력 없음) 시 레거시 공용 시퀀스 조회 건너뜀 → startFrom 기본값 표시 - [x] V2Input: 카테고리 변경 시 초기 useEffect에서도 `manualInputValue` 전달 → 순번 즉시 반영 - [x] 린트 에러 없음 확인 ### 8단계: 코드 정리 - [x] 카테고리 해석 로직 3곳 중복 → `resolveCategoryFormat` 헬퍼 추출 (약 100줄 감소) - [x] 임시 변수명 정리 (pool2/ct2/cc2 등 복붙 흔적 제거) - [x] 린트 에러 없음 확인 ### 9단계: 정리 - [x] 계획서/맥락노트/체크리스트 최신화 --- ## 알려진 이슈 (보류) | 이슈 | 설명 | 상태 | |------|------|------| | 저장 실패 시 순번 갭 | allocateCode와 saveFormData가 별도 트랜잭션이라 저장 실패해도 순번 소비됨 | 보류 | | 유령 데이터 | 중복 품명으로 간헐적 저장 성공 + 리스트 미노출 | 보류 | --- ## 변경 이력 | 날짜 | 내용 | |------|------| | 2026-03-11 | 계획서, 맥락노트, 체크리스트 작성 완료 | | 2026-03-11 | 1-4단계 구현 완료 | | 2026-03-11 | 5단계 추가 구현 (연속 구분자 방지 + 템플릿 정합성 복원) | | 2026-03-11 | 계맥체 최신화 완료. 문제 4-5 보류 | | 2026-03-12 | 7단계 실시간 순번 미리보기 구현 완료 (백엔드/프론트엔드 4파일) | | 2026-03-12 | 계맥체 최신화 완료 | | 2026-03-12 | 초기 상태 레거시 시퀀스 조회 방지 수정 + 계맥체 반영 | | 2026-03-12 | 카테고리 변경 시 수동 입력값 포함 순번 재조회 수정 | | 2026-03-12 | resolveCategoryFormat 헬퍼 추출 코드 정리 + 계맥체 최신화 |