diff --git a/app/components/app/sep/entry-form.vue b/app/components/app/sep/entry-form.vue
index 1ef55b58..bfef617c 100644
--- a/app/components/app/sep/entry-form.vue
+++ b/app/components/app/sep/entry-form.vue
@@ -36,6 +36,9 @@ const props = defineProps<{
procedures: any[]
assessments: any[]
supportCodes: any[]
+ classLevels: any[]
+ classLevelUpgrades: any[]
+ classPaySources: any[]
provinces: any[]
cities: any[]
districts: any[]
@@ -78,6 +81,10 @@ const [clinicExcecutive, clinicExcecutiveAttrs] = defineField('clinicExcecutive'
const [procedureType, procedureTypeAttrs] = defineField('procedureType')
const [supportCode, supportCodeAttrs] = defineField('supportCode')
const [note, noteAttrs] = defineField('note')
+const [classLevel, classLevelAttrs] = defineField('classLevel')
+const [classLevelUpgrade, classLevelUpgradeAttrs] = defineField('classLevelUpgrade')
+const [classPaySource, classPaySourceAttrs] = defineField('classPaySource')
+const [responsiblePerson, responsiblePersonAttrs] = defineField('responsiblePerson')
const [accident, accidentAttrs] = defineField('trafficAccident')
const [purposeOfVisit, purposeOfVisitAttrs] = defineField('purposeOfVisit')
const [serviceAssessment, serviceAssessmentAttrs] = defineField('serviceAssessment')
@@ -469,6 +476,78 @@ watch(props, (value) => {
+
+ |
+
+
+
+
+ |
+
+
+
+
+
+
+ |
+
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ |
+
+
+
>([])
const provincesList = ref>([])
const citiesList = ref>([])
const districtsList = ref>([])
+const classLevelsList = ref>([])
+const classLevelUpgradesList = ref>([])
+const classPaySourcesList = ref>([])
const isPatientsLoading = ref(false)
const paginationMeta = ref({
recordCount: 0,
@@ -341,6 +347,18 @@ async function handleInit() {
value: item.toString(),
label: `${item.toString()} - ${supportCodes[item]}`,
})) as any
+ classLevelsList.value = Object.keys(classLevels).map((item) => ({
+ value: item.toString(),
+ label: classLevels[item],
+ })) as any
+ classLevelUpgradesList.value = Object.keys(classLevelUpgrades).map((item) => ({
+ value: item.toString(),
+ label: classLevelUpgrades[item],
+ })) as any
+ classPaySourcesList.value = Object.keys(classPaySources).map((item) => ({
+ value: item.toString(),
+ label: classPaySources[item],
+ })) as any
}
onMounted(async () => {
@@ -376,6 +394,9 @@ onMounted(async () => {
:provinces="provincesList"
:cities="citiesList"
:districts="districtsList"
+ :class-levels="classLevelsList"
+ :class-level-upgrades="classLevelUpgradesList"
+ :class-pay-sources="classPaySourcesList"
:patient="selectedPatientObject"
@fetch="handleFetch"
@event="handleEvent"
diff --git a/app/lib/constants.vclaim.ts b/app/lib/constants.vclaim.ts
index bc8162be..f3022fe4 100644
--- a/app/lib/constants.vclaim.ts
+++ b/app/lib/constants.vclaim.ts
@@ -10,6 +10,29 @@ export const registerMethods: Record = {
'4': 'Rujukan Internal',
}
+export const classLevels: Record = {
+ '1': 'Kelas 1',
+ '2': 'Kelas 2',
+ '3': 'Kelas 3',
+}
+
+export const classLevelUpgrades: Record = {
+ '1': 'VVIP',
+ '2': 'VIP',
+ '3': 'Kelas 1',
+ '4': 'Kelas 2',
+ '5': 'Kelas 3',
+ '6': 'ICCU',
+ '7': 'ICU',
+ '8': 'Diatas Kelas 1',
+};
+
+export const classPaySources: Record = {
+ '1': 'Pribadi',
+ '2': 'Pemberi Kerja',
+ '3': 'Asuransi Kesehatan Tambahan'
+}
+
export const procedureTypes: Record = {
'0': 'Prosedur tidak berkelanjutan',
'1': 'Prosedur dan terapi berkelanjutan',
@@ -24,7 +47,7 @@ export const purposeOfVisits: Record = {
export const trafficAccidents: Record = {
'0': 'Bukan Kecelakaan lalu lintas [BKLL]',
'1': 'KLL dan Bukan Kecelakaan Kerja [BKK]',
- '2': 'KLL',
+ '2': 'KLL dan KK',
'3': 'KK',
}
diff --git a/app/schemas/integration-bpjs.schema.ts b/app/schemas/integration-bpjs.schema.ts
index 57e4d56f..c98c32de 100644
--- a/app/schemas/integration-bpjs.schema.ts
+++ b/app/schemas/integration-bpjs.schema.ts
@@ -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
diff --git a/app/services/vclaim-sep.service.ts b/app/services/vclaim-sep.service.ts
index b54f278f..efda6160 100644
--- a/app/services/vclaim-sep.service.ts
+++ b/app/services/vclaim-sep.service.ts
@@ -53,8 +53,8 @@ export function makeSepData(data: IntegrationBpjsFormData) {
kdPenunjang: data.supportCode || '',
assesmentPel: data.serviceAssessment || '',
skdp: {
- noSurat: '0208R0060825K000001',
- kodeDPJP: '6546',
+ noSurat: '', // 0208R0060825K000001
+ kodeDPJP: '', // 6546
},
dpjpLayan: '000002',
noTelp: data.phoneNumber || '',