feat(sep): add class form

This commit is contained in:
riefive
2025-10-23 12:15:55 +07:00
parent 891c67d6ff
commit 7f0e7bee4a
5 changed files with 318 additions and 103 deletions
+192 -100
View File
@@ -33,109 +33,201 @@ const ERROR_MESSAGES = {
accidentDistrict: 'Kecamatan Kejadian lalu lintas wajib diisi',
suplesi: 'Suplesi wajib diisi',
suplesiNumber: 'Nomor Suplesi wajib diisi',
classLevel: 'Kelas Rawat wajib diisi',
classLevelUpgrade: 'Kelas Rawat Naik wajib diisi',
classPaySource: 'Pembiayaan wajib diisi',
responsiblePerson: 'Penanggung Jawab wajib diisi',
},
}
const IntegrationBpjsSchema = z.object({
sepDate: z.string({ required_error: ERROR_MESSAGES.required.sepDate }).min(1, ERROR_MESSAGES.required.sepDate),
serviceType: z
.string({ required_error: ERROR_MESSAGES.required.serviceType })
.min(1, ERROR_MESSAGES.required.serviceType)
.optional(),
admissionType: z
.string({ required_error: ERROR_MESSAGES.required.admissionType })
.min(1, ERROR_MESSAGES.required.admissionType),
bpjsNumber: z
.string({ required_error: ERROR_MESSAGES.required.bpjsNumber })
.min(1, ERROR_MESSAGES.required.bpjsNumber),
nationalId: z
.string({ required_error: ERROR_MESSAGES.required.nationalId })
.min(1, ERROR_MESSAGES.required.nationalId),
medicalRecordNumber: z
.string({ required_error: ERROR_MESSAGES.required.medicalRecordNumber })
.min(1, ERROR_MESSAGES.required.medicalRecordNumber),
patientName: z
.string({ required_error: ERROR_MESSAGES.required.patientName })
.min(1, ERROR_MESSAGES.required.patientName),
phoneNumber: z
.string({ required_error: ERROR_MESSAGES.required.phoneNumber })
.min(1, ERROR_MESSAGES.required.phoneNumber),
referralLetterNumber: z
.string({ required_error: ERROR_MESSAGES.required.referralLetterNumber })
.min(1, ERROR_MESSAGES.required.referralLetterNumber),
referralLetterDate: z
.string({ required_error: ERROR_MESSAGES.required.referralLetterDate })
.min(1, ERROR_MESSAGES.required.referralLetterDate),
fromClinic: z
.string({ required_error: ERROR_MESSAGES.required.fromClinic })
.min(1, ERROR_MESSAGES.required.fromClinic)
.optional(),
destinationClinic: z
.string({ required_error: ERROR_MESSAGES.required.destinationClinic })
.min(1, ERROR_MESSAGES.required.destinationClinic),
attendingDoctor: z
.string({ required_error: ERROR_MESSAGES.required.attendingDoctor })
.min(1, ERROR_MESSAGES.required.attendingDoctor),
initialDiagnosis: z
.string({ required_error: ERROR_MESSAGES.required.initialDiagnosis })
.min(1, ERROR_MESSAGES.required.initialDiagnosis),
cob: z.string({ required_error: ERROR_MESSAGES.required.cob }).min(1, ERROR_MESSAGES.required.cob),
cataract: z.string({ required_error: ERROR_MESSAGES.required.cataract }).min(1, ERROR_MESSAGES.required.cataract),
clinicExcecutive: z
.string({ required_error: ERROR_MESSAGES.required.clinicExcecutive })
.min(1, ERROR_MESSAGES.required.clinicExcecutive),
procedureType: z
.string({ required_error: ERROR_MESSAGES.required.procedureType })
.min(1, ERROR_MESSAGES.required.procedureType).optional(),
supportCode: z
.string({ required_error: ERROR_MESSAGES.required.supportCode })
.min(1, ERROR_MESSAGES.required.supportCode).optional(),
note: z.string({ required_error: ERROR_MESSAGES.required.note }).min(1, ERROR_MESSAGES.required.note).optional(),
trafficAccident: z
.string({ required_error: ERROR_MESSAGES.required.trafficAccident })
.min(1, ERROR_MESSAGES.required.trafficAccident)
.optional(),
purposeOfVisit: z
.string({ required_error: ERROR_MESSAGES.required.purposeOfVisit })
.min(1, ERROR_MESSAGES.required.purposeOfVisit)
.optional(),
serviceAssessment: z
.string({ required_error: ERROR_MESSAGES.required.serviceAssessment })
.min(1, ERROR_MESSAGES.required.serviceAssessment)
.optional(),
lpNumber: z
.string({ required_error: ERROR_MESSAGES.required.lpNumber })
.min(1, ERROR_MESSAGES.required.lpNumber)
.optional(),
accidentDate: z
.string({ required_error: ERROR_MESSAGES.required.accidentDate })
.min(1, ERROR_MESSAGES.required.accidentDate)
.optional(),
accidentNote: z
.string({ required_error: ERROR_MESSAGES.required.accidentNote })
.min(1, ERROR_MESSAGES.required.accidentNote)
.optional(),
accidentProvince: z
.string({ required_error: ERROR_MESSAGES.required.accidentProvince })
.min(1, ERROR_MESSAGES.required.accidentProvince)
.optional(),
accidentCity: z
.string({ required_error: ERROR_MESSAGES.required.accidentCity })
.min(1, ERROR_MESSAGES.required.accidentCity)
.optional(),
accidentDistrict: z
.string({ required_error: ERROR_MESSAGES.required.accidentDistrict })
.min(1, ERROR_MESSAGES.required.accidentDistrict)
.optional(),
suplesi: z
.string({ required_error: ERROR_MESSAGES.required.suplesi })
.min(1, ERROR_MESSAGES.required.suplesi)
.optional(),
suplesiNumber: z
.string({ required_error: ERROR_MESSAGES.required.suplesiNumber })
.min(1, ERROR_MESSAGES.required.suplesiNumber)
.optional(),
})
const IntegrationBpjsSchema = z
.object({
sepDate: z.string({ required_error: ERROR_MESSAGES.required.sepDate }).min(1, ERROR_MESSAGES.required.sepDate),
serviceType: z
.string({ required_error: ERROR_MESSAGES.required.serviceType })
.min(1, ERROR_MESSAGES.required.serviceType)
.optional(),
admissionType: z
.string({ required_error: ERROR_MESSAGES.required.admissionType })
.min(1, ERROR_MESSAGES.required.admissionType),
bpjsNumber: z
.string({ required_error: ERROR_MESSAGES.required.bpjsNumber })
.min(1, ERROR_MESSAGES.required.bpjsNumber),
nationalId: z
.string({ required_error: ERROR_MESSAGES.required.nationalId })
.min(1, ERROR_MESSAGES.required.nationalId),
medicalRecordNumber: z
.string({ required_error: ERROR_MESSAGES.required.medicalRecordNumber })
.min(1, ERROR_MESSAGES.required.medicalRecordNumber),
patientName: z
.string({ required_error: ERROR_MESSAGES.required.patientName })
.min(1, ERROR_MESSAGES.required.patientName),
phoneNumber: z
.string({ required_error: ERROR_MESSAGES.required.phoneNumber })
.min(1, ERROR_MESSAGES.required.phoneNumber),
referralLetterNumber: z
.string({ required_error: ERROR_MESSAGES.required.referralLetterNumber })
.min(1, ERROR_MESSAGES.required.referralLetterNumber),
referralLetterDate: z
.string({ required_error: ERROR_MESSAGES.required.referralLetterDate })
.min(1, ERROR_MESSAGES.required.referralLetterDate),
fromClinic: z
.string({ required_error: ERROR_MESSAGES.required.fromClinic })
.min(1, ERROR_MESSAGES.required.fromClinic)
.optional(),
destinationClinic: z
.string({ required_error: ERROR_MESSAGES.required.destinationClinic })
.min(1, ERROR_MESSAGES.required.destinationClinic),
attendingDoctor: z
.string({ required_error: ERROR_MESSAGES.required.attendingDoctor })
.min(1, ERROR_MESSAGES.required.attendingDoctor),
initialDiagnosis: z
.string({ required_error: ERROR_MESSAGES.required.initialDiagnosis })
.min(1, ERROR_MESSAGES.required.initialDiagnosis),
cob: z.string({ required_error: ERROR_MESSAGES.required.cob }).min(1, ERROR_MESSAGES.required.cob),
cataract: z.string({ required_error: ERROR_MESSAGES.required.cataract }).min(1, ERROR_MESSAGES.required.cataract),
clinicExcecutive: z
.string({ required_error: ERROR_MESSAGES.required.clinicExcecutive })
.min(1, ERROR_MESSAGES.required.clinicExcecutive),
procedureType: z
.string({ required_error: ERROR_MESSAGES.required.procedureType })
.min(1, ERROR_MESSAGES.required.procedureType)
.optional(),
supportCode: z
.string({ required_error: ERROR_MESSAGES.required.supportCode })
.min(1, ERROR_MESSAGES.required.supportCode)
.optional(),
note: z.string({ required_error: ERROR_MESSAGES.required.note }).min(1, ERROR_MESSAGES.required.note).optional(),
trafficAccident: z
.string({ required_error: ERROR_MESSAGES.required.trafficAccident })
.min(1, ERROR_MESSAGES.required.trafficAccident)
.optional(),
purposeOfVisit: z
.string({ required_error: ERROR_MESSAGES.required.purposeOfVisit })
.min(1, ERROR_MESSAGES.required.purposeOfVisit)
.optional(),
serviceAssessment: z
.string({ required_error: ERROR_MESSAGES.required.serviceAssessment })
.min(1, ERROR_MESSAGES.required.serviceAssessment)
.optional(),
lpNumber: z.string({ required_error: ERROR_MESSAGES.required.lpNumber }).optional(),
accidentDate: z.string({ required_error: ERROR_MESSAGES.required.accidentDate }).optional(),
accidentNote: z.string({ required_error: ERROR_MESSAGES.required.accidentNote }).optional(),
accidentProvince: z.string({ required_error: ERROR_MESSAGES.required.accidentProvince }).optional(),
accidentCity: z.string({ required_error: ERROR_MESSAGES.required.accidentCity }).optional(),
accidentDistrict: z.string({ required_error: ERROR_MESSAGES.required.accidentDistrict }).optional(),
suplesi: z.string({ required_error: ERROR_MESSAGES.required.suplesi }).optional(),
suplesiNumber: z.string({ required_error: ERROR_MESSAGES.required.suplesiNumber }).optional(),
classLevel: z.string({ required_error: ERROR_MESSAGES.required.classLevel }).optional(),
classLevelUpgrade: z.string({ required_error: ERROR_MESSAGES.required.classLevelUpgrade }).optional(),
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'],
},
)
type IntegrationBpjsFormData = z.infer<typeof IntegrationBpjsSchema>