From ae995fef1de9737f370b0e35b7f95f7abb9d322e Mon Sep 17 00:00:00 2001 From: riefive Date: Fri, 24 Oct 2025 13:12:40 +0700 Subject: [PATCH] refactor(integration-bpjs): update validation logic for accident-related fields --- app/schemas/integration-bpjs.schema.ts | 225 +++++++++++++------------ 1 file changed, 120 insertions(+), 105 deletions(-) diff --git a/app/schemas/integration-bpjs.schema.ts b/app/schemas/integration-bpjs.schema.ts index 3018db5a..a25c90c0 100644 --- a/app/schemas/integration-bpjs.schema.ts +++ b/app/schemas/integration-bpjs.schema.ts @@ -123,111 +123,126 @@ const IntegrationBpjsSchema = z classPaySource: z.string({ required_error: ERROR_MESSAGES.required.classPaySource }).optional(), responsiblePerson: z.string({ required_error: ERROR_MESSAGES.required.responsiblePerson }).optional(), }) - // .refine( - // (data) => { - // return data.trafficAccident !== '' && data.accidentDate && data.accidentDate.trim() !== '' - // }, - // { - // message: ERROR_MESSAGES.required.accidentDate, - // path: ['accidentDate'], - // }, - // ) - // .refine( - // (data) => { - // return data.trafficAccident !== '' && data.accidentProvince && data.accidentProvince.trim() !== '' - // }, - // { - // message: ERROR_MESSAGES.required.accidentProvince, - // path: ['accidentProvince'], - // }, - // ) - // .refine( - // (data) => { - // return data.trafficAccident !== '' && data.accidentCity && data.accidentCity.trim() !== '' - // }, - // { - // message: ERROR_MESSAGES.required.accidentCity, - // path: ['accidentCity'], - // }, - // ) - // .refine( - // (data) => { - // return data.trafficAccident !== '' && data.accidentDistrict && data.accidentDistrict.trim() !== '' - // }, - // { - // message: ERROR_MESSAGES.required.accidentDistrict, - // path: ['accidentDistrict'], - // }, - // ) - // .refine( - // (data) => { - // return data.trafficAccident !== '' && data.suplesi && data.suplesi.trim() !== '' - // }, - // { - // message: ERROR_MESSAGES.required.suplesi, - // path: ['suplesi'], - // }, - // ) - // .refine( - // (data) => { - // return ( - // data.trafficAccident !== '' && - // data.suplesi?.trim() === 'yes' && - // data.suplesiNumber && - // data.suplesiNumber.trim() !== '' - // ) - // }, - // { - // message: ERROR_MESSAGES.required.suplesiNumber, - // path: ['suplesiNumber'], - // }, - // ) - // .refine( - // (data) => { - // return data.serviceType === '1' && data.classLevel && data.classLevel.trim() !== '' - // }, - // { - // message: ERROR_MESSAGES.required.classLevel, - // path: ['classLevel'], - // }, - // ) - // .refine( - // (data) => { - // return data.serviceType === '1' && data.classLevelUpgrade && data.classLevelUpgrade.trim() !== '' - // }, - // { - // message: ERROR_MESSAGES.required.classLevelUpgrade, - // path: ['classLevelUpgrade'], - // }, - // ) - // .refine( - // (data) => { - // return ( - // data.serviceType === '1' && - // data.classLevelUpgrade?.trim() !== '' && - // data.classPaySource && - // data.classPaySource.trim() !== '' - // ) - // }, - // { - // message: ERROR_MESSAGES.required.classLevelUpgrade, - // path: ['classPaySource'], - // }, - // ) - // .refine( - // (data) => { - // return ( - // data.serviceType === '1' && - // data.classPaySource?.trim() !== '' && - // data.responsiblePerson && - // data.responsiblePerson.trim() !== '' - // ) - // }, - // { - // message: ERROR_MESSAGES.required.responsiblePerson, - // path: ['responsiblePerson'], - // }, - // ) + .refine( + (data) => { + if (data.trafficAccident && data.trafficAccident.trim() !== '') { + return data.accidentDate && data.accidentDate.trim() !== '' + } + return true + }, + { + message: ERROR_MESSAGES.required.accidentDate, + path: ['accidentDate'], + }, + ) + .refine( + (data) => { + if (data.trafficAccident && data.trafficAccident.trim() !== '') { + return data.accidentProvince && data.accidentProvince.trim() !== '' + } + return true + }, + { + message: ERROR_MESSAGES.required.accidentProvince, + path: ['accidentProvince'], + }, + ) + .refine( + (data) => { + if (data.trafficAccident && data.trafficAccident.trim() !== '') { + return data.accidentCity && data.accidentCity.trim() !== '' + } + return true + }, + { + message: ERROR_MESSAGES.required.accidentCity, + path: ['accidentCity'], + }, + ) + .refine( + (data) => { + if (data.trafficAccident && data.trafficAccident.trim() !== '') { + return data.accidentDistrict && data.accidentDistrict.trim() !== '' + } + return true + }, + { + message: ERROR_MESSAGES.required.accidentDistrict, + path: ['accidentDistrict'], + }, + ) + .refine( + (data) => { + if (data.trafficAccident && data.trafficAccident.trim() !== '') { + return data.suplesi && data.suplesi.trim() !== '' + } + return true + }, + { + message: ERROR_MESSAGES.required.suplesi, + path: ['suplesi'], + }, + ) + .refine( + (data) => { + if (data.trafficAccident && data.trafficAccident.trim() !== '' && data.suplesi?.trim() === 'yes') { + return data.suplesiNumber && data.suplesiNumber.trim() !== '' + } + return true + }, + { + message: ERROR_MESSAGES.required.suplesiNumber, + path: ['suplesiNumber'], + }, + ) + .refine( + (data) => { + if (data.serviceType === '1') { + return data.classLevel && data.classLevel.trim() !== '' + } + return true + }, + { + message: ERROR_MESSAGES.required.classLevel, + path: ['classLevel'], + }, + ) + .refine( + (data) => { + if (data.serviceType === '1') { + return data.classLevelUpgrade && data.classLevelUpgrade.trim() !== '' + } + return true + }, + { + message: ERROR_MESSAGES.required.classLevelUpgrade, + path: ['classLevelUpgrade'], + }, + ) + .refine( + (data) => { + if (data.serviceType === '1' && data.classLevelUpgrade?.trim() !== '') { + return data.classPaySource && data.classPaySource.trim() !== '' + } + return true + }, + { + message: ERROR_MESSAGES.required.classPaySource, + path: ['classPaySource'], + }, + ) + .refine( + (data) => { + if (data.serviceType === '1' && data.classPaySource?.trim() !== '') { + return data.responsiblePerson && data.responsiblePerson.trim() !== '' + } + return true + }, + { + message: ERROR_MESSAGES.required.responsiblePerson, + path: ['responsiblePerson'], + }, + ) type IntegrationBpjsFormData = z.infer