diff --git a/docs/자동차과태료_비교로직_정리-[지연].md b/docs/자동차과태료_비교로직_정리-[지연].md index c0cd051..f54bebe 100644 --- a/docs/자동차과태료_비교로직_정리-[지연].md +++ b/docs/자동차과태료_비교로직_정리-[지연].md @@ -6,7 +6,8 @@ ### 구현 위치 - **Checker 클래스**: `src/main/java/go/kr/project/carInspectionPenalty/registration/service/impl/delay_checker/` - - `ProductUseChecker.java` - 1. 상품용 + - `ProductUseChecker.java` - 1. 상품용(명의이전) + - `ProductUseChnageChecker.java` - 1-1. 상품용(변경등록) - `ProductCloseWithin31Checker.java` - 2. 내사종결(명의이전 이전소유자 상품용, 31일 이내) - `OwnerCloseWithin31Checker.java` - 3. 내사종결(순수 명의이전, 31일 이내) - `ProductLevyOver31Checker.java` - 4. 날짜수정후부과(명의이전 이전소유자 상품용, 31일 초과) @@ -29,7 +30,7 @@ ### 처리 규칙 > **중요**: 순서가 중요함! -> 1. 상품용 → 2. 내사종결(상품용) → 3. 내사종결(명의이전) → 4. 날짜수정(상품용) → 5. 날짜수정(명의이전) → 6. 이첩 +> 1. 상품용(명의이전) → 1-1. 상품용(변경등록) → 2. 내사종결(상품용) → 3. 내사종결(명의이전) → 4. 날짜수정(상품용) → 5. 날짜수정(명의이전) → 6. 이첩 > - 조건에 걸리는 순간 다음 차량번호 비교로 진행 > - 각 비교 로직별로 개별 API 호출 수행 @@ -79,6 +80,49 @@ existingData.setCarRegFrmbkChgYmd(targetRecord.getChgYmd()); --- +### 1-1. 상품용-변경등록 검증 (`ProductUseChnageChecker`) + +**처리상태코드**: `02` (상품용) +**클래스**: `ProductUseChnageChecker.java` + +#### API 호출 순서 + +| 순서 | API | 입력 파라미터 | 출력 데이터 | 용도 | +|------|-----|--------------|-------------|------| +| 1 | 자동차기본정보 | `차량번호`, `부과일자=검사일` | `차대번호(vin)`, `소유자명`, `대표소유자회원번호` | 검사일 기준 소유자 확인 | +| 2 | 자동차기본정보 | `1.차대번호`, `부과일자=오늘` | `차량번호`, `성명`, `주민번호`, `법정동코드` | 현재 소유자 정보 | +| 3 | 자동차등록원부(갑) | `2.차량번호`, `2.성명`, `2.주민번호`, `2.법정동코드` | 갑부 상세 List | 변경등록 이력 조회 | +| 4 | 자동차기본정보 | `1.차대번호`, `부과일자=CHG_YMD` | `소유자명`, `대표소유자회원번호` | 변경등록 시점 소유자 확인 | + +#### 비교 조건 + +``` +1. Step1 소유자명.contains("상품용") ← 상품용 아니면 return null + +2. 갑부에서 변경등록(21) 레코드 찾기 + - CHG_TASK_SE_CD == "21" + - CHG_YMD <= 검사종료일자 + - spcablMttr.contains("성명") ← 성명 변경 포함 필수 + - 가장 마지막 일자 선택 + ← 없으면 return null + +3. Step4 대표소유자회원번호 == Step1 대표소유자회원번호 + ← 불일치면 return null + +→ 모든 조건 충족: 상품용(02) 처리 +``` + +#### DB 업데이트 필드 + +```java +existingData.setTaskPrcsSttsCd("02"); // 상품용 +existingData.setCarBscMttrInqFlnm(step4OwnerName); +existingData.setCarRegFrmbkChgTaskSeCd("21"); +existingData.setCarRegFrmbkChgYmd(targetRecord.getChgYmd()); +``` + +--- + ### 2. 내사종결 - 명의이전 이전소유자 상품용, 31일 이내 (`ProductCloseWithin31Checker`) **처리상태코드**: `04` (내사종결) @@ -323,8 +367,17 @@ existingData.setCarBscMttrInqSggNm(sggNm); │ ▼ ┌──────────────────────────────────────────────┐ -│ 1. 상품용 (ProductUseChecker) │ +│ 1. 상품용-명의이전 (ProductUseChecker) │ +│ 조건: 검사일 소유자명.contains("상품용") │ +│ + 명의이전(11) 레코드 존재 │ +│ → 조건 충족: 상품용(02) │ +└──────────────────────────────────────────────┘ + │ (조건 미충족) + ▼ +┌──────────────────────────────────────────────┐ +│ 1-1. 상품용-변경등록 (ProductUseChnageChecker)│ │ 조건: 검사일 소유자명.contains("상품용") │ +│ + 변경등록(21) + 성명변경 포함 │ │ → 조건 충족: 상품용(02) │ └──────────────────────────────────────────────┘ │ (조건 미충족) @@ -375,7 +428,8 @@ existingData.setCarBscMttrInqSggNm(sggNm); | 코드 | 상태명 | 처리 로직 | 클래스 | |------|--------|----------|--------| -| 02 | 상품용 | 검사일 소유자가 상품용 | `ProductUseChecker` | +| 02 | 상품용 | 검사일 소유자가 상품용 + 명의이전(11) | `ProductUseChecker` | +| 02 | 상품용 | 검사일 소유자가 상품용 + 변경등록(21) + 성명변경 | `ProductUseChnageChecker` | | 04 | 내사종결 | 명의이전 전 상품용 (31일 이내) | `ProductCloseWithin31Checker` | | 04 | 내사종결 | 순수 명의이전 (31일 이내) | `OwnerCloseWithin31Checker` | | 05 | 날짜수정후부과 | 명의이전 전 상품용 (31일 초과) | `ProductLevyOver31Checker` | @@ -410,10 +464,11 @@ TaskPrcsSttsConstants.TASK_PRCS_STTS_CD_05_DATE_MODIFIED_LEVY = "05" // 변경업무구분코드 "11" = 명의이전 +"21" = 변경등록 ``` --- **문서 작성 완료일**: 2025-12-08 **실제 소스 코드 기준**: delay_checker 폴더 내 Checker 클래스들 -**분석 대상 클래스**: 6개 (ProductUseChecker, ProductCloseWithin31Checker, OwnerCloseWithin31Checker, ProductLevyOver31Checker, OwnerLevyOver31Checker, TransferCase115DayChecker) +**분석 대상 클래스**: 7개 (ProductUseChecker, ProductUseChnageChecker, ProductCloseWithin31Checker, OwnerCloseWithin31Checker, ProductLevyOver31Checker, OwnerLevyOver31Checker, TransferCase115DayChecker)