@ -112,15 +112,42 @@ public class ComparisonRemarkBuilder {
public static String buildProductUseRemarkDetail ( String vhclno , String inspYmd ,
String step1OwnerNm , String targetChgYmd , String step4OwnerNm ) {
StringBuilder sb = new StringBuilder ( ) ;
sb . append ( "[상품용 판정]\n" ) ;
sb . append ( "[상품용 판정 - 지연]\n\n" ) ;
sb . append ( "=== 기본 정보 ===\n" ) ;
sb . append ( "차량번호: " ) . append ( StringUtil . nvl ( vhclno ) ) . append ( "\n" ) ;
sb . append ( "검사일자: " ) . append ( DateUtil . formatDateString ( inspYmd ) ) . append ( "\n" ) ;
sb . append ( "검사일 기준 소유자명: " ) . append ( StringUtil . nvl ( step1OwnerNm ) ) . append ( "\n" ) ;
sb . append ( "갑부 변경일자: " ) . append ( DateUtil . formatDateString ( targetChgYmd ) ) . append ( "\n" ) ;
sb . append ( "변경일 기준 소유자명: " ) . append ( StringUtil . nvl ( step4OwnerNm ) ) . append ( "\n" ) ;
sb . append ( "판정근거: 검사일 기준 소유자명에 '상품용' 포함되어 있고, " ) ;
sb . append ( "갑부 상세에서 변경업무구분코드 '21'(변경등록) 레코드 확인됨" ) ;
return truncateToMaxLength ( sb . toString ( ) ) ;
sb . append ( "검사일자: " ) . append ( DateUtil . formatDateString ( inspYmd ) ) . append ( "\n\n" ) ;
sb . append ( "=== API 호출 및 비교 과정 ===\n" ) ;
sb . append ( "Step1) 자동차기본정보 조회\n" ) ;
sb . append ( " - 조회 기준: 차량번호 + 검사일자(" ) . append ( DateUtil . formatDateString ( inspYmd ) ) . append ( ")\n" ) ;
sb . append ( " - 소유자명: " ) . append ( StringUtil . nvl ( step1OwnerNm ) ) . append ( "\n" ) ;
sb . append ( " - 조건 확인: 소유자명에 '상품용' 포함 여부 → O\n\n" ) ;
sb . append ( "Step2) 자동차기본정보 조회\n" ) ;
sb . append ( " - 조회 기준: 차대번호 + 오늘일자\n" ) ;
sb . append ( " - 목적: 차량번호, 성명, 주민번호, 법정동코드 조회\n\n" ) ;
sb . append ( "Step3) 자동차등록원부(갑) 조회\n" ) ;
sb . append ( " - 조회 기준: 차량번호 + 성명 + 주민번호 + 법정동코드\n" ) ;
sb . append ( " - 검색 조건:\n" ) ;
sb . append ( " · 변경업무구분코드(CHG_TASK_SE_CD) = '11' (명의이전)\n" ) ;
sb . append ( " · 변경일자(CHG_YMD) ≤ 검사종료일자\n" ) ;
sb . append ( " · 조건 충족하는 레코드 중 가장 마지막 일자 선택\n" ) ;
sb . append ( " - 선택된 갑부 변경일자: " ) . append ( DateUtil . formatDateString ( targetChgYmd ) ) . append ( "\n\n" ) ;
sb . append ( "Step4) 자동차기본정보 조회\n" ) ;
sb . append ( " - 조회 기준: 차대번호 + 갑부 변경일자(" ) . append ( DateUtil . formatDateString ( targetChgYmd ) ) . append ( ")\n" ) ;
sb . append ( " - 변경일 기준 소유자명: " ) . append ( StringUtil . nvl ( step4OwnerNm ) ) . append ( "\n" ) ;
sb . append ( " - 조건 확인: Step1 대표소유자 회원번호 = Step4 대표소유자 회원번호 → 일치\n\n" ) ;
sb . append ( "=== 판정 근거 ===\n" ) ;
sb . append ( "1. 검사일자 기준 소유자명에 '상품용' 포함\n" ) ;
sb . append ( "2. 갑부 상세에서 변경업무구분코드 '11'(명의이전) 레코드가 검사종료일자 이내에 존재\n" ) ;
sb . append ( "3. 갑부 변경일자 시점의 대표소유자 회원번호와 검사일자 기준 대표소유자 회원번호가 동일\n" ) ;
sb . append ( "→ 상품용 판정 (처리상태: 02_상품용)\n" ) ;
return sb . toString ( ) ;
}
/ * *
@ -138,17 +165,53 @@ public class ComparisonRemarkBuilder {
String step1OwnerNm , String targetChgYmd ,
String step4OwnerNm , long daysBetween ) {
StringBuilder sb = new StringBuilder ( ) ;
sb . append ( "[내사종결 - 명의이전 이전소유자 상품용 판정]\n" ) ;
sb . append ( "[내사종결 - 명의이전 이전소유자 상품용 판정 - 지연]\n\n" ) ;
sb . append ( "=== 기본 정보 ===\n" ) ;
sb . append ( "차량번호: " ) . append ( StringUtil . nvl ( vhclno ) ) . append ( "\n" ) ;
sb . append ( "검사일자: " ) . append ( DateUtil . formatDateString ( inspYmd ) ) . append ( "\n" ) ;
sb . append ( "검사일 기준 소유자명: " ) . append ( StringUtil . nvl ( step1OwnerNm ) ) . append ( "\n" ) ;
sb . append ( "갑부 명의이전 일자: " ) . append ( DateUtil . formatDateString ( targetChgYmd ) ) . append ( "\n" ) ;
sb . append ( "명의이전 전 소유자명: " ) . append ( StringUtil . nvl ( step4OwnerNm ) ) . append ( "\n" ) ;
sb . append ( "31일 기준일: " ) . append ( DateUtil . formatDateString (
DateUtil . parseDate ( inspYmd ) . plusDays ( 31 ) . format ( java . time . format . DateTimeFormatter . ofPattern ( "yyyyMMdd" ) )
) ) . append ( "\n\n" ) ;
sb . append ( "=== API 호출 및 비교 과정 ===\n" ) ;
sb . append ( "Step1) 자동차기본정보 조회\n" ) ;
sb . append ( " - 조회 기준: 차량번호 + 검사일자(" ) . append ( DateUtil . formatDateString ( inspYmd ) ) . append ( ")\n" ) ;
sb . append ( " - 소유자명: " ) . append ( StringUtil . nvl ( step1OwnerNm ) ) . append ( "\n" ) ;
sb . append ( " - 조건 확인: 소유자명에 '상품용' 포함 여부 → X\n\n" ) ;
sb . append ( "Step2) 자동차기본정보 조회\n" ) ;
sb . append ( " - 조회 기준: 차대번호 + 오늘일자\n" ) ;
sb . append ( " - 목적: 차량번호, 성명, 주민번호, 법정동코드 조회\n\n" ) ;
sb . append ( "Step3) 자동차등록원부(갑) 조회\n" ) ;
sb . append ( " - 조회 기준: 차량번호 + 성명 + 주민번호 + 법정동코드\n" ) ;
sb . append ( " - 검색 조건:\n" ) ;
sb . append ( " · 변경업무구분코드(CHG_TASK_SE_CD) = '11' (명의이전)\n" ) ;
sb . append ( " · 변경일자(CHG_YMD) ≤ 검사일자\n" ) ;
sb . append ( " · 조건 충족하는 레코드 중 가장 마지막 일자 선택\n" ) ;
sb . append ( " - 선택된 갑부 명의이전 일자: " ) . append ( DateUtil . formatDateString ( targetChgYmd ) ) . append ( "\n\n" ) ;
sb . append ( "Step4) 자동차기본정보 조회\n" ) ;
sb . append ( " - 조회 기준: 차대번호 + 명의이전일자-1일(" ) . append ( DateUtil . formatDateString (
DateUtil . parseDate ( targetChgYmd ) . minusDays ( 1 ) . format ( java . time . format . DateTimeFormatter . ofPattern ( "yyyyMMdd" ) )
) ) . append ( ")\n" ) ;
sb . append ( " - 명의이전 전 소유자명: " ) . append ( StringUtil . nvl ( step4OwnerNm ) ) . append ( "\n" ) ;
sb . append ( " - 조건 확인: 명의이전 전 소유자명에 '상품용' 포함 → O\n\n" ) ;
sb . append ( "=== 일수 계산 ===\n" ) ;
sb . append ( "검사일~명의이전일 일수: " ) . append ( daysBetween ) . append ( "일\n" ) ;
sb . append ( "판정근거: 검사일 기준 소유자명에 '상품용' 미포함이나, " ) ;
sb . append ( "갑부 상세에서 변경업무구분코드 '11'(명의이전) 레코드의 이전 소유자가 '상품용'이고, " ) ;
sb . append ( "명의이전일이 검사일로부터 31일 이내임" ) ;
return truncateToMaxLength ( sb . toString ( ) ) ;
sb . append ( "기준일수: 31일\n" ) ;
sb . append ( "조건 확인: " ) . append ( daysBetween ) . append ( "일 ≤ 31일 → 이내\n\n" ) ;
sb . append ( "=== 판정 근거 ===\n" ) ;
sb . append ( "1. 검사일자 기준 소유자명에 '상품용' 미포함\n" ) ;
sb . append ( "2. 갑부 상세에서 변경업무구분코드 '11'(명의이전) 레코드가 검사일자 이내에 존재\n" ) ;
sb . append ( "3. 명의이전일자-1일 시점의 소유자명에 '상품용' 포함\n" ) ;
sb . append ( "4. 명의이전일이 검사일로부터 31일 이내 (" ) . append ( daysBetween ) . append ( "일)\n" ) ;
sb . append ( "→ 내사종결 - 명의이전 이전소유자 상품용 판정 (처리상태: 04_내사종결)\n" ) ;
return sb . toString ( ) ;
}
/ * *
@ -166,16 +229,53 @@ public class ComparisonRemarkBuilder {
String step1OwnerNm , String targetChgYmd ,
String step4OwnerNm , long daysBetween ) {
StringBuilder sb = new StringBuilder ( ) ;
sb . append ( "[내사종결 - 명의이전 판정]\n" ) ;
sb . append ( "[내사종결 - 명의이전 판정 - 지연]\n\n" ) ;
sb . append ( "=== 기본 정보 ===\n" ) ;
sb . append ( "차량번호: " ) . append ( StringUtil . nvl ( vhclno ) ) . append ( "\n" ) ;
sb . append ( "검사일자: " ) . append ( DateUtil . formatDateString ( inspYmd ) ) . append ( "\n" ) ;
sb . append ( "검사일 기준 소유자명: " ) . append ( StringUtil . nvl ( step1OwnerNm ) ) . append ( "\n" ) ;
sb . append ( "갑부 명의이전 일자: " ) . append ( DateUtil . formatDateString ( targetChgYmd ) ) . append ( "\n" ) ;
sb . append ( "명의이전 전 소유자명: " ) . append ( StringUtil . nvl ( step4OwnerNm ) ) . append ( "\n" ) ;
sb . append ( "31일 기준일: " ) . append ( DateUtil . formatDateString (
DateUtil . parseDate ( inspYmd ) . plusDays ( 31 ) . format ( java . time . format . DateTimeFormatter . ofPattern ( "yyyyMMdd" ) )
) ) . append ( "\n\n" ) ;
sb . append ( "=== API 호출 및 비교 과정 ===\n" ) ;
sb . append ( "Step1) 자동차기본정보 조회\n" ) ;
sb . append ( " - 조회 기준: 차량번호 + 검사일자(" ) . append ( DateUtil . formatDateString ( inspYmd ) ) . append ( ")\n" ) ;
sb . append ( " - 소유자명: " ) . append ( StringUtil . nvl ( step1OwnerNm ) ) . append ( "\n" ) ;
sb . append ( " - 조건 확인: 소유자명에 '상품용' 포함 여부 → X\n\n" ) ;
sb . append ( "Step2) 자동차기본정보 조회\n" ) ;
sb . append ( " - 조회 기준: 차대번호 + 오늘일자\n" ) ;
sb . append ( " - 목적: 차량번호, 성명, 주민번호, 법정동코드 조회\n\n" ) ;
sb . append ( "Step3) 자동차등록원부(갑) 조회\n" ) ;
sb . append ( " - 조회 기준: 차량번호 + 성명 + 주민번호 + 법정동코드\n" ) ;
sb . append ( " - 검색 조건:\n" ) ;
sb . append ( " · 변경업무구분코드(CHG_TASK_SE_CD) = '11' (명의이전)\n" ) ;
sb . append ( " · 변경일자(CHG_YMD) ≤ 검사일자\n" ) ;
sb . append ( " · 조건 충족하는 레코드 중 가장 마지막 일자 선택\n" ) ;
sb . append ( " - 선택된 갑부 명의이전 일자: " ) . append ( DateUtil . formatDateString ( targetChgYmd ) ) . append ( "\n\n" ) ;
sb . append ( "Step4) 자동차기본정보 조회\n" ) ;
sb . append ( " - 조회 기준: 차대번호 + 명의이전일자(" ) . append ( DateUtil . formatDateString ( targetChgYmd ) ) . append ( ")\n" ) ;
sb . append ( " - 명의이전 시점 소유자명: " ) . append ( StringUtil . nvl ( step4OwnerNm ) ) . append ( "\n" ) ;
sb . append ( " - 조건 확인: Step1 대표소유자 회원번호 = Step4 대표소유자 회원번호 → 일치\n" ) ;
sb . append ( " - 명의이전 시점 소유자명에 '상품용' 포함 → X\n\n" ) ;
sb . append ( "=== 일수 계산 ===\n" ) ;
sb . append ( "검사일~명의이전일 일수: " ) . append ( daysBetween ) . append ( "일\n" ) ;
sb . append ( "판정근거: 검사일 기준 소유자와 명의이전 전 소유자가 동일하고, " ) ;
sb . append ( "명의이전일이 검사일로부터 31일 이내임" ) ;
return truncateToMaxLength ( sb . toString ( ) ) ;
sb . append ( "기준일수: 31일\n" ) ;
sb . append ( "조건 확인: " ) . append ( daysBetween ) . append ( "일 ≤ 31일 → 이내\n\n" ) ;
sb . append ( "=== 판정 근거 ===\n" ) ;
sb . append ( "1. 검사일자 기준 소유자명에 '상품용' 미포함\n" ) ;
sb . append ( "2. 갑부 상세에서 변경업무구분코드 '11'(명의이전) 레코드가 검사일자 이내에 존재\n" ) ;
sb . append ( "3. 명의이전 시점의 대표소유자 회원번호와 검사일자 기준 대표소유자 회원번호가 동일 (소유자 변동 없음)\n" ) ;
sb . append ( "4. 명의이전 시점 소유자명에 '상품용' 미포함\n" ) ;
sb . append ( "5. 명의이전일이 검사일로부터 31일 이내 (" ) . append ( daysBetween ) . append ( "일)\n" ) ;
sb . append ( "→ 내사종결 - 명의이전 판정 (처리상태: 04_내사종결)\n" ) ;
return sb . toString ( ) ;
}
/ * *
@ -193,17 +293,54 @@ public class ComparisonRemarkBuilder {
String step1OwnerNm , String targetChgYmd ,
String step4OwnerNm , long daysBetween ) {
StringBuilder sb = new StringBuilder ( ) ;
sb . append ( "[날짜수정후부과 - 명의이전 이전소유자 상품용 판정]\n" ) ;
sb . append ( "[날짜수정후부과 - 명의이전 이전소유자 상품용 판정 - 지연]\n\n" ) ;
sb . append ( "=== 기본 정보 ===\n" ) ;
sb . append ( "차량번호: " ) . append ( StringUtil . nvl ( vhclno ) ) . append ( "\n" ) ;
sb . append ( "검사일자: " ) . append ( DateUtil . formatDateString ( inspYmd ) ) . append ( "\n" ) ;
sb . append ( "검사일 기준 소유자명: " ) . append ( StringUtil . nvl ( step1OwnerNm ) ) . append ( "\n" ) ;
sb . append ( "갑부 명의이전 일자: " ) . append ( DateUtil . formatDateString ( targetChgYmd ) ) . append ( "\n" ) ;
sb . append ( "명의이전 전 소유자명: " ) . append ( StringUtil . nvl ( step4OwnerNm ) ) . append ( "\n" ) ;
sb . append ( "31일 기준일: " ) . append ( DateUtil . formatDateString (
DateUtil . parseDate ( inspYmd ) . plusDays ( 31 ) . format ( java . time . format . DateTimeFormatter . ofPattern ( "yyyyMMdd" ) )
) ) . append ( "\n\n" ) ;
sb . append ( "=== API 호출 및 비교 과정 ===\n" ) ;
sb . append ( "Step1) 자동차기본정보 조회\n" ) ;
sb . append ( " - 조회 기준: 차량번호 + 검사일자(" ) . append ( DateUtil . formatDateString ( inspYmd ) ) . append ( ")\n" ) ;
sb . append ( " - 소유자명: " ) . append ( StringUtil . nvl ( step1OwnerNm ) ) . append ( "\n" ) ;
sb . append ( " - 조건 확인: 소유자명에 '상품용' 포함 여부 → X\n\n" ) ;
sb . append ( "Step2) 자동차기본정보 조회\n" ) ;
sb . append ( " - 조회 기준: 차대번호 + 오늘일자\n" ) ;
sb . append ( " - 목적: 차량번호, 성명, 주민번호, 법정동코드 조회\n\n" ) ;
sb . append ( "Step3) 자동차등록원부(갑) 조회\n" ) ;
sb . append ( " - 조회 기준: 차량번호 + 성명 + 주민번호 + 법정동코드\n" ) ;
sb . append ( " - 검색 조건:\n" ) ;
sb . append ( " · 변경업무구분코드(CHG_TASK_SE_CD) = '11' (명의이전)\n" ) ;
sb . append ( " · 변경일자(CHG_YMD) ≤ 검사일자\n" ) ;
sb . append ( " · 조건 충족하는 레코드 중 가장 마지막 일자 선택\n" ) ;
sb . append ( " - 선택된 갑부 명의이전 일자: " ) . append ( DateUtil . formatDateString ( targetChgYmd ) ) . append ( "\n\n" ) ;
sb . append ( "Step4) 자동차기본정보 조회\n" ) ;
sb . append ( " - 조회 기준: 차대번호 + 명의이전일자-1일(" ) . append ( DateUtil . formatDateString (
DateUtil . parseDate ( targetChgYmd ) . minusDays ( 1 ) . format ( java . time . format . DateTimeFormatter . ofPattern ( "yyyyMMdd" ) )
) ) . append ( ")\n" ) ;
sb . append ( " - 명의이전 전 소유자명: " ) . append ( StringUtil . nvl ( step4OwnerNm ) ) . append ( "\n" ) ;
sb . append ( " - 조건 확인: 명의이전 전 소유자명에 '상품용' 포함 → O\n\n" ) ;
sb . append ( "=== 일수 계산 ===\n" ) ;
sb . append ( "검사일~명의이전일 일수: " ) . append ( daysBetween ) . append ( "일\n" ) ;
sb . append ( "판정근거: 검사일 기준 소유자명에 '상품용' 미포함이나, " ) ;
sb . append ( "갑부 상세에서 변경업무구분코드 '11'(명의이전) 레코드의 이전 소유자가 '상품용'이고, " ) ;
sb . append ( "명의이전일이 검사일로부터 31일 초과함 (부과일자 수정 필요)" ) ;
return truncateToMaxLength ( sb . toString ( ) ) ;
sb . append ( "기준일수: 31일\n" ) ;
sb . append ( "조건 확인: " ) . append ( daysBetween ) . append ( "일 > 31일 → 초과\n\n" ) ;
sb . append ( "=== 판정 근거 ===\n" ) ;
sb . append ( "1. 검사일자 기준 소유자명에 '상품용' 미포함\n" ) ;
sb . append ( "2. 갑부 상세에서 변경업무구분코드 '11'(명의이전) 레코드가 검사일자 이내에 존재\n" ) ;
sb . append ( "3. 명의이전일자-1일 시점의 소유자명에 '상품용' 포함\n" ) ;
sb . append ( "4. 명의이전일이 검사일로부터 31일 초과 (" ) . append ( daysBetween ) . append ( "일)\n" ) ;
sb . append ( "→ 날짜수정후부과 - 명의이전 이전소유자 상품용 판정 (처리상태: 05_날짜수정후부과)\n" ) ;
sb . append ( "※ 부과일자를 명의이전일자로 수정하여 재부과 필요\n" ) ;
return sb . toString ( ) ;
}
/ * *
@ -211,26 +348,74 @@ public class ComparisonRemarkBuilder {
*
* @param vhclno 차 량 번 호
* @param inspYmd 검 사 일 자
* @param vldPrdExpryYmd 유 효 기 간 만 료 일
* @param inspEndYmd 검 사 종 료 일 자
* @param step1OwnerNm Step1 소 유 자 명
* @param targetChgYmd 갑 부 명 의 이 전 일 자
* @param step4OwnerNm Step4 소 유 자 명 ( 명 의 이 전 전 소 유 자 )
* @param daysBetween 검 사 일 과 명 의 이 전 일 간 일 수 차 이
* @return 비 고 상 세 문 자 열
* /
public static String buildOwnerLevyOver31RemarkDetail ( String vhclno , String inspYmd ,
String step1OwnerNm, String targetChgYmd ,
public static String buildOwnerLevyOver31RemarkDetail ( String vhclno , String inspYmd , String vldPrdExpryYmd ,
String inspEndYmd, String step1OwnerNm, String targetChgYmd ,
String step4OwnerNm , long daysBetween ) {
StringBuilder sb = new StringBuilder ( ) ;
sb . append ( "[날짜수정후부과 - 명의이전 판정]\n" ) ;
sb . append ( "[날짜수정후부과 - 명의이전 판정 - 지연]\n\n" ) ;
sb . append ( "=== 기본 정보 ===\n" ) ;
sb . append ( "차량번호: " ) . append ( StringUtil . nvl ( vhclno ) ) . append ( "\n" ) ;
sb . append ( "검사일자: " ) . append ( DateUtil . formatDateString ( inspYmd ) ) . append ( "\n" ) ;
sb . append ( "검사일 기준 소유자명: " ) . append ( StringUtil . nvl ( step1OwnerNm ) ) . append ( "\n" ) ;
sb . append ( "갑부 명의이전 일자: " ) . append ( DateUtil . formatDateString ( targetChgYmd ) ) . append ( "\n" ) ;
sb . append ( "명의이전 전 소유자명: " ) . append ( StringUtil . nvl ( step4OwnerNm ) ) . append ( "\n" ) ;
sb . append ( "유효기간만료일: " ) . append ( DateUtil . formatDateString ( vldPrdExpryYmd ) ) . append ( "\n" ) ;
sb . append ( "유효기간만료일 - 90일: " ) . append ( DateUtil . formatDateString (
DateUtil . parseDate ( vldPrdExpryYmd ) . minusDays ( 90 ) . format ( java . time . format . DateTimeFormatter . ofPattern ( "yyyyMMdd" ) )
) ) . append ( "\n" ) ;
sb . append ( "검사종료일자: " ) . append ( DateUtil . formatDateString ( inspEndYmd ) ) . append ( "\n" ) ;
sb . append ( "31일 기준일: " ) . append ( DateUtil . formatDateString (
DateUtil . parseDate ( inspYmd ) . plusDays ( 31 ) . format ( java . time . format . DateTimeFormatter . ofPattern ( "yyyyMMdd" ) )
) ) . append ( "\n\n" ) ;
sb . append ( "=== API 호출 및 비교 과정 ===\n" ) ;
sb . append ( "Step1) 자동차기본정보 조회\n" ) ;
sb . append ( " - 조회 기준: 차량번호 + 검사일자(" ) . append ( DateUtil . formatDateString ( inspYmd ) ) . append ( ")\n" ) ;
sb . append ( " - 소유자명: " ) . append ( StringUtil . nvl ( step1OwnerNm ) ) . append ( "\n" ) ;
sb . append ( " - 조건 확인: 소유자명에 '상품용' 포함 여부 → X\n\n" ) ;
sb . append ( "Step2) 자동차기본정보 조회\n" ) ;
sb . append ( " - 조회 기준: 차대번호 + 오늘일자\n" ) ;
sb . append ( " - 목적: 차량번호, 성명, 주민번호, 법정동코드 조회\n\n" ) ;
sb . append ( "Step3) 자동차등록원부(갑) 조회\n" ) ;
sb . append ( " - 조회 기준: 차량번호 + 성명 + 주민번호 + 법정동코드\n" ) ;
sb . append ( " - 검색 조건:\n" ) ;
sb . append ( " · 변경업무구분코드(CHG_TASK_SE_CD) = '11' (명의이전)\n" ) ;
sb . append ( " · 유효기간만료일-90일 ≤ 변경일자(CHG_YMD) ≤ 검사종료일자\n" ) ;
sb . append ( " · 범위: " ) . append ( DateUtil . formatDateString (
DateUtil . parseDate ( vldPrdExpryYmd ) . minusDays ( 90 ) . format ( java . time . format . DateTimeFormatter . ofPattern ( "yyyyMMdd" ) )
) ) . append ( " ~ " ) . append ( DateUtil . formatDateString ( inspEndYmd ) ) . append ( "\n" ) ;
sb . append ( " · 조건 충족하는 레코드 중 가장 마지막 일자 선택\n" ) ;
sb . append ( " - 선택된 갑부 명의이전 일자: " ) . append ( DateUtil . formatDateString ( targetChgYmd ) ) . append ( "\n\n" ) ;
sb . append ( "Step4) 자동차기본정보 조회\n" ) ;
sb . append ( " - 조회 기준: 차대번호 + 명의이전일자(" ) . append ( DateUtil . formatDateString ( targetChgYmd ) ) . append ( ")\n" ) ;
sb . append ( " - 명의이전 시점 소유자명: " ) . append ( StringUtil . nvl ( step4OwnerNm ) ) . append ( "\n" ) ;
sb . append ( " - 조건 확인: Step1 대표소유자 회원번호 = Step4 대표소유자 회원번호 → 일치\n" ) ;
sb . append ( " - 명의이전 시점 소유자명에 '상품용' 포함 → X\n\n" ) ;
sb . append ( "=== 일수 계산 ===\n" ) ;
sb . append ( "검사일~명의이전일 일수: " ) . append ( daysBetween ) . append ( "일\n" ) ;
sb . append ( "판정근거: 검사일 기준 소유자와 명의이전 전 소유자가 동일하고, " ) ;
sb . append ( "명의이전일이 검사일로부터 31일 초과함 (부과일자 수정 필요)" ) ;
return truncateToMaxLength ( sb . toString ( ) ) ;
sb . append ( "기준일수: 31일\n" ) ;
sb . append ( "조건 확인: " ) . append ( daysBetween ) . append ( "일 > 31일 → 초과\n\n" ) ;
sb . append ( "=== 판정 근거 ===\n" ) ;
sb . append ( "1. 검사일자 기준 소유자명에 '상품용' 미포함\n" ) ;
sb . append ( "2. 갑부 상세에서 변경업무구분코드 '11'(명의이전) 레코드가 검사기간(유효기간만료일-90일 ~ 검사종료일자) 내에 존재\n" ) ;
sb . append ( "3. 명의이전 시점의 대표소유자 회원번호와 검사일자 기준 대표소유자 회원번호가 동일 (소유자 변동 없음)\n" ) ;
sb . append ( "4. 명의이전 시점 소유자명에 '상품용' 미포함\n" ) ;
sb . append ( "5. 명의이전일이 검사일로부터 31일 초과 (" ) . append ( daysBetween ) . append ( "일)\n" ) ;
sb . append ( "→ 날짜수정후부과 - 명의이전 판정 (처리상태: 05_날짜수정후부과)\n" ) ;
sb . append ( "※ 부과일자를 명의이전일자로 수정하여 재부과 필요\n" ) ;
return sb . toString ( ) ;
}
/ * *
@ -248,16 +433,35 @@ public class ComparisonRemarkBuilder {
String ownerNm , String usgsrhldStdgCd ,
String sggNm , String userOrgCd ) {
StringBuilder sb = new StringBuilder ( ) ;
sb . append ( "[이첩 판정 - 검사일 사용본거지]\n" ) ;
sb . append ( "[이첩 판정 - 검사일 사용본거지 (이첩-1) - 지연]\n\n" ) ;
sb . append ( "=== 기본 정보 ===\n" ) ;
sb . append ( "차량번호: " ) . append ( StringUtil . nvl ( vhclno ) ) . append ( "\n" ) ;
sb . append ( "검사일자: " ) . append ( DateUtil . formatDateString ( inspYmd ) ) . append ( "\n" ) ;
sb . append ( "소유자명: " ) . append ( StringUtil . nvl ( ownerNm ) ) . append ( "\n" ) ;
sb . append ( "사용본거지법정동코드: " ) . append ( StringUtil . nvl ( usgsrhldStdgCd ) ) . append ( "\n" ) ;
sb . append ( "시군구명: " ) . append ( StringUtil . nvl ( sggNm ) ) . append ( "\n" ) ;
sb . append ( "현재 사용자 조직코드: " ) . append ( StringUtil . nvl ( userOrgCd ) ) . append ( "\n" ) ;
sb . append ( "판정근거: DAYCNT가 115일 이하이고, " ) ;
sb . append ( "검사일 기준 사용본거지법정동코드 앞 4자리가 현재 사용자 조직코드 앞 4자리와 불일치하여 이첩 대상임" ) ;
return truncateToMaxLength ( sb . toString ( ) ) ;
sb . append ( "DAYCNT: 115일 이하\n" ) ;
sb . append ( "부과기준일: 검사일자 (DAYCNT ≤ 115이므로)\n\n" ) ;
sb . append ( "=== API 호출 및 비교 과정 ===\n" ) ;
sb . append ( "자동차기본정보 조회\n" ) ;
sb . append ( " - 조회 기준: 차량번호 + 부과기준일(검사일자)(" ) . append ( DateUtil . formatDateString ( inspYmd ) ) . append ( ")\n" ) ;
sb . append ( " - 소유자명: " ) . append ( StringUtil . nvl ( ownerNm ) ) . append ( "\n" ) ;
sb . append ( " - 사용본거지법정동코드: " ) . append ( StringUtil . nvl ( usgsrhldStdgCd ) ) . append ( "\n\n" ) ;
sb . append ( "=== 법정동코드 비교 ===\n" ) ;
String legalDong4 = usgsrhldStdgCd ! = null & & usgsrhldStdgCd . length ( ) > = 4 ? usgsrhldStdgCd . substring ( 0 , 4 ) : "" ;
String userOrg4 = userOrgCd ! = null & & userOrgCd . length ( ) > = 4 ? userOrgCd . substring ( 0 , 4 ) : "" ;
sb . append ( "사용본거지법정동코드 앞 4자리: " ) . append ( legalDong4 ) . append ( "\n" ) ;
sb . append ( "현재 사용자 조직코드 앞 4자리: " ) . append ( userOrg4 ) . append ( "\n" ) ;
sb . append ( "코드 불일치 → 이첩 대상\n" ) ;
sb . append ( "시군구코드: " ) . append ( usgsrhldStdgCd ! = null & & usgsrhldStdgCd . length ( ) > = 5 ? usgsrhldStdgCd . substring ( 0 , 5 ) : "" ) . append ( "\n" ) ;
sb . append ( "시군구명: " ) . append ( StringUtil . nvl ( sggNm ) ) . append ( "\n\n" ) ;
sb . append ( "=== 판정 근거 ===\n" ) ;
sb . append ( "1. DAYCNT ≤ 115일이므로 부과기준일 = 검사일자\n" ) ;
sb . append ( "2. 검사일자 기준 사용본거지법정동코드 앞 4자리와 현재 사용자 조직코드 앞 4자리가 불일치\n" ) ;
sb . append ( "→ 이첩 판정 - 검사일 사용본거지 (처리상태: 03_이첩)\n" ) ;
return sb . toString ( ) ;
}
/ * *
@ -276,17 +480,39 @@ public class ComparisonRemarkBuilder {
String ownerNm , String usgsrhldStdgCd ,
String sggNm , String userOrgCd , String daycnt ) {
StringBuilder sb = new StringBuilder ( ) ;
sb . append ( "[이첩 판정 - 115일 도래지]\n" ) ;
sb . append ( "[이첩 판정 - 115일 도래지 (이첩-2) - 지연]\n\n" ) ;
sb . append ( "=== 기본 정보 ===\n" ) ;
sb . append ( "차량번호: " ) . append ( StringUtil . nvl ( vhclno ) ) . append ( "\n" ) ;
sb . append ( "검사종료일자: " ) . append ( DateUtil . formatDateString ( inspEndYmd ) ) . append ( "\n" ) ;
sb . append ( "소유자명: " ) . append ( StringUtil . nvl ( ownerNm ) ) . append ( "\n" ) ;
sb . append ( "DAYCNT: " ) . append ( StringUtil . nvl ( daycnt ) ) . append ( "일\n" ) ;
sb . append ( "사용본거지법정동코드: " ) . append ( StringUtil . nvl ( usgsrhldStdgCd ) ) . append ( "\n" ) ;
sb . append ( "시군구명: " ) . append ( StringUtil . nvl ( sggNm ) ) . append ( "\n" ) ;
sb . append ( "현재 사용자 조직코드: " ) . append ( StringUtil . nvl ( userOrgCd ) ) . append ( "\n" ) ;
sb . append ( "판정근거: DAYCNT가 115일 초과이고, " ) ;
sb . append ( "검사종료일+115일 기준 사용본거지법정동코드 앞 4자리가 현재 사용자 조직코드 앞 4자리와 불일치하여 이첩 대상임" ) ;
return truncateToMaxLength ( sb . toString ( ) ) ;
sb . append ( "DAYCNT: " ) . append ( StringUtil . nvl ( daycnt ) ) . append ( "일 (115일 초과)\n" ) ;
sb . append ( "부과기준일 계산: 검사종료일자 + 115일 = " ) . append ( DateUtil . formatDateString (
DateUtil . parseDate ( inspEndYmd ) . plusDays ( 115 ) . format ( java . time . format . DateTimeFormatter . ofPattern ( "yyyyMMdd" ) )
) ) . append ( "\n\n" ) ;
sb . append ( "=== API 호출 및 비교 과정 ===\n" ) ;
sb . append ( "자동차기본정보 조회\n" ) ;
sb . append ( " - 조회 기준: 차량번호 + 부과기준일(검사종료일자+115일)(" ) . append ( DateUtil . formatDateString (
DateUtil . parseDate ( inspEndYmd ) . plusDays ( 115 ) . format ( java . time . format . DateTimeFormatter . ofPattern ( "yyyyMMdd" ) )
) ) . append ( ")\n" ) ;
sb . append ( " - 소유자명: " ) . append ( StringUtil . nvl ( ownerNm ) ) . append ( "\n" ) ;
sb . append ( " - 사용본거지법정동코드: " ) . append ( StringUtil . nvl ( usgsrhldStdgCd ) ) . append ( "\n\n" ) ;
sb . append ( "=== 법정동코드 비교 ===\n" ) ;
String legalDong4 = usgsrhldStdgCd ! = null & & usgsrhldStdgCd . length ( ) > = 4 ? usgsrhldStdgCd . substring ( 0 , 4 ) : "" ;
String userOrg4 = userOrgCd ! = null & & userOrgCd . length ( ) > = 4 ? userOrgCd . substring ( 0 , 4 ) : "" ;
sb . append ( "사용본거지법정동코드 앞 4자리: " ) . append ( legalDong4 ) . append ( "\n" ) ;
sb . append ( "현재 사용자 조직코드 앞 4자리: " ) . append ( userOrg4 ) . append ( "\n" ) ;
sb . append ( "코드 불일치 → 이첩 대상\n" ) ;
sb . append ( "시군구코드: " ) . append ( usgsrhldStdgCd ! = null & & usgsrhldStdgCd . length ( ) > = 5 ? usgsrhldStdgCd . substring ( 0 , 5 ) : "" ) . append ( "\n" ) ;
sb . append ( "시군구명: " ) . append ( StringUtil . nvl ( sggNm ) ) . append ( "\n\n" ) ;
sb . append ( "=== 판정 근거 ===\n" ) ;
sb . append ( "1. DAYCNT > 115일(" ) . append ( StringUtil . nvl ( daycnt ) ) . append ( "일)이므로 부과기준일 = 검사종료일자 + 115일\n" ) ;
sb . append ( "2. 부과기준일 기준 사용본거지법정동코드 앞 4자리와 현재 사용자 조직코드 앞 4자리가 불일치\n" ) ;
sb . append ( "→ 이첩 판정 - 115일 도래지 (처리상태: 03_이첩)\n" ) ;
return sb . toString ( ) ;
}
/ * *