From 973931ec2f7cdd447263e5cb9caa44638b846008 Mon Sep 17 00:00:00 2001 From: riefive Date: Fri, 28 Nov 2025 16:02:11 +0700 Subject: [PATCH] feat: enhance SEP entry and detail handling with new link mode and save functionality --- app/components/app/sep/action-history.vue | 2 +- app/components/app/sep/entry-form.vue | 38 +++++++ app/components/content/sep/entry.vue | 15 ++- .../integration-sep-detail.handler.ts | 106 ++++++++---------- app/handlers/integration-sep-entry.handler.ts | 3 + .../bpjs-vclaim/sep/[id]/detail.vue | 26 +++++ .../integration/bpjs-vclaim/sep/[id]/link.vue | 26 +++++ .../integration/bpjs-vclaim/sep/add.vue | 21 +--- .../integration/bpjs-vclaim/sep/index.vue | 18 +-- 9 files changed, 160 insertions(+), 95 deletions(-) create mode 100644 app/pages/(features)/integration/bpjs-vclaim/sep/[id]/detail.vue create mode 100644 app/pages/(features)/integration/bpjs-vclaim/sep/[id]/link.vue diff --git a/app/components/app/sep/action-history.vue b/app/components/app/sep/action-history.vue index 9fa18840..0524f0b1 100644 --- a/app/components/app/sep/action-history.vue +++ b/app/components/app/sep/action-history.vue @@ -14,7 +14,7 @@ const recSepId = inject('rec_sep_id') as Ref function handleSelection() { recSepId.value = record.sepNumber || '' - const pathUrl = `/integration/bpjs-vclaim/sep/${record.sepNumber || ''}/detail` + const pathUrl = `/integration/bpjs-vclaim/sep/${record.sepNumber || ''}/link` router.push({ path: pathUrl }) } diff --git a/app/components/app/sep/entry-form.vue b/app/components/app/sep/entry-form.vue index fb809ee5..009b099d 100644 --- a/app/components/app/sep/entry-form.vue +++ b/app/components/app/sep/entry-form.vue @@ -47,6 +47,7 @@ const props = defineProps<{ cities: any[] districts: any[] specialists?: TreeItem[] + sepNumber?: string objects?: any values?: any }>() @@ -129,6 +130,14 @@ async function onFetchChildren(parentId: string): Promise { console.log('onFetchChildren', parentId) } +const onBack = () => { + emit('event', 'back') +} + +const onSaveNumber = () => { + emit('event', 'save-sep-number', { sepNumber: props.sepNumber}) +} + // Submit handler const onSubmit = handleSubmit((values) => { console.log('✅ Validated form values:', JSON.stringify(values, null, 2)) @@ -966,6 +975,7 @@ onMounted(() => {
+ +
diff --git a/app/components/content/sep/entry.vue b/app/components/content/sep/entry.vue index d091e833..67d2a7ad 100644 --- a/app/components/content/sep/entry.vue +++ b/app/components/content/sep/entry.vue @@ -9,6 +9,7 @@ import AppViewLetter from '~/components/app/sep/view-letter.vue' // Handler import { useIntegrationSepEntry } from '~/handlers/integration-sep-entry.handler' +import { useIntegrationSepDetail } from '~/handlers/integration-sep-detail.handler' const { histories, @@ -55,8 +56,18 @@ const { handleInit, } = useIntegrationSepEntry() +const { valueObjects, getSepDetail } = useIntegrationSepDetail() + +const props = defineProps<{ + mode: 'add' | 'edit' | 'detail' | 'link' +}>() + onMounted(async () => { await handleInit() + if (['detail', 'link'].includes(props.mode)) { + await getSepDetail() + selectedObjects.value = { ...selectedObjects.value, ...valueObjects.value } + } }) @@ -66,10 +77,10 @@ onMounted(async () => { name="i-lucide-panel-bottom" class="me-2" /> - Tambah - SEP + {{ ['detail', 'link'].includes(props.mode) ? 'Detail' : 'Tambah' }} SEP 0) { - // formObjects.value.patientName = response.peserta?.nama || '-' - // formObjects.value.medicalRecordNumber = response.peserta?.noMr || '-' - // formObjects.value.cardNumber = response.peserta?.noKartu || '-' - // formObjects.value.registerDate = response.tglSep || null - // formObjects.value.sepReference = response.noSep || '-' - // formObjects.value.sepControlDate = response.tglSep || null - // formObjects.value.sepTrafficStatus = response.nmstatusKecelakaan || '-' - // formObjects.value.diagnosis = response.diagnosa || '-' - // vclaimReference.value = { - // noSep: response.noSep || sepNumberValue.trim(), - // tglRujukan: response.tglSep ? new Date(response.tglSep).toISOString() : null, - // ppkDirujuk: response.noRujukan || 'rssa', - // jnsPelayanan: - // response.jnsPelayanan === 'Rawat Jalan' ? '2' : response.jnsPelayanan === 'Rawat Inap' ? '1' : null, - // catatan: response.catatan || '', - // diagRujukan: response.diagnosa || '', - // tipeRujukan: response.tujuanKunj?.kode ?? '0', - // poliRujukan: response.poli || '', - // user: userStore.user?.user_name || '', - // } - // } - valueObjects.value = { - noSep: response.noSep || noSep.value, - tglRujukan: response.tglSep ? new Date(response.tglSep).toISOString().split('T')[0] : '', - ppkDirujuk: response.noRujukan || '', - jnsPelayanan: mapServiceCodeToLabel(response.jnsPelayanan), - catatan: response.catatan || '', - diagRujukan: response.diagnosa || '', - tipeRujukan: response.tujuanKunj?.kode ?? '0', - poliRujukan: response.poli || '', - user: response.dpjp?.kdDPJP || response.dpjp?.nmDPJP || '', - // Additional fields dari response - patientName: response.peserta?.nama || '-', - medicalRecordNumber: response.peserta?.noMr || '-', + sepNumber: response.noSep || noSep.value, + eSep: response.eSEP === 'True' ? 'yes' : 'no', + serviceType: response.jnsPelayanan === 'Rawat Jalan' ? '2' : response.jnsPelayanan === 'Rawat Inap' ? '1' : null, + sepDate: response.tglSep ? new Date(response.tglSep).toISOString().split('T')[0] : '', cardNumber: response.peserta?.noKartu || '-', - diagnosis: response.diagnosa || '-', - sepReference: response.noSep || '-', - sepControlDate: response.tglSep || null, - sepTrafficStatus: response.nmstatusKecelakaan || '-', - kelasRawat: response.kelasRawat || '-', - referralNumber: response.noRujukan || '-', + patientName: response.peserta?.nama || '-', + phoneNumber: response.peserta?.noTelp || '-', + medicalRecordNumber: response.peserta?.noMr || '-', + memberInsurance: response.peserta?.asuransi || '-', + memberClass: response.peserta?.hakKelas || '-', + memberGender: response.peserta?.kelamin || '-', + memberBirthDate: response.peserta?.tglLahir || '-', + memberType: response.peserta?.jnsPeserta || '-', + referralLetterNumber: response.noRujukan || '-', + initialDiagnosis: response.diagnosa || '-', + attendingDoctor: response.dpjp?.kdDPJP || '-', + attendingDoctorName: response.dpjp?.nmDPJP || '-', + polyName: response.poli || '-', + cob: response.cob === '1' ? 'yes' : 'no', + cataract: response.katarak === '1' ? 'yes' : 'no', + clinicExcecutive: response.poliEksekutif === '1' ? 'yes' : 'no', + procedureType: response.flagProcedure?.kode || '-', + procedureTypeName: response.flagProcedure?.nama || '-', + supportCode: response.kdPenunjang?.kode || '-', + supportCodeName: response.kdPenunjang?.nama || '-', + note: response.catatan || response.informasi || '-', + classLevel: response.kelasRawat || '-', + classLevelUpgrade: response.klsRawat?.klsRawatNaik || '-', + classPaySource: response.klsRawat?.pembiayaan || '-', + responsiblePerson: response.klsRawat?.penanggungJawab || response.penjamin || '-', + purposeOfVisit: response.tujuanKunj?.kode || '-', + purposeOfVisitName: response.tujuanKunj?.nama || '-', + serviceAssessment: response.assestmenPel?.kode || '-', + serviceAssessmentName: response.assestmenPel?.nama || '-', + trafficAccident: response.nmstatusKecelakaan || '', + trafficAccidentCode: response.kdStatusKecelakaan || '', + lpNumber: response.kontrol?.noSurat || '-', + accidentDate: response.lokasiKejadian?.tglKejadian || '-', + accidentNote: response.lokasiKejadian?.ketKejadian || '-', + accidentProvince: response.lokasiKejadian?.kdProp || '-', + accidentCity: response.lokasiKejadian?.kdKab || '-', + accidentDistrict: response.lokasiKejadian?.kdKec || '-', + accidentLocation: response.lokasiKejadian?.lokasi || '-', + suplesi: response.jnsPelayanan === 'Rawat Jalan' ? 'yes' : 'no', + suplesiNumber: response.jnsPelayanan === 'Rawat Jalan' ? response.noRujukan || '-' : '-', + controlLetterNumber: response.kontrol?.noSurat || '-', + controlLetterDoctor: response.kontrol?.kdDokter || '-', + controlLetterDoctorName: response.kontrol?.nmDokter || '-', } } else { toast({ diff --git a/app/handlers/integration-sep-entry.handler.ts b/app/handlers/integration-sep-entry.handler.ts index 65bcabb5..c08bac64 100644 --- a/app/handlers/integration-sep-entry.handler.ts +++ b/app/handlers/integration-sep-entry.handler.ts @@ -442,6 +442,9 @@ export function useIntegrationSepEntry() { if (menu === 'back') { navigateTo('/integration/bpjs-vclaim/sep') } + if (menu === 'save-sep-number') { + navigateTo({ path: resourcePath.value, query: { 'sep-number': value.sepNumber || '' } }) + } if (menu === 'save-sep') { isSaveLoading.value = true diff --git a/app/pages/(features)/integration/bpjs-vclaim/sep/[id]/detail.vue b/app/pages/(features)/integration/bpjs-vclaim/sep/[id]/detail.vue new file mode 100644 index 00000000..7e9f4bcf --- /dev/null +++ b/app/pages/(features)/integration/bpjs-vclaim/sep/[id]/detail.vue @@ -0,0 +1,26 @@ + + + diff --git a/app/pages/(features)/integration/bpjs-vclaim/sep/[id]/link.vue b/app/pages/(features)/integration/bpjs-vclaim/sep/[id]/link.vue new file mode 100644 index 00000000..c2f28e7b --- /dev/null +++ b/app/pages/(features)/integration/bpjs-vclaim/sep/[id]/link.vue @@ -0,0 +1,26 @@ + + + diff --git a/app/pages/(features)/integration/bpjs-vclaim/sep/add.vue b/app/pages/(features)/integration/bpjs-vclaim/sep/add.vue index 0658780b..0adf6527 100644 --- a/app/pages/(features)/integration/bpjs-vclaim/sep/add.vue +++ b/app/pages/(features)/integration/bpjs-vclaim/sep/add.vue @@ -1,7 +1,6 @@ diff --git a/app/pages/(features)/integration/bpjs-vclaim/sep/index.vue b/app/pages/(features)/integration/bpjs-vclaim/sep/index.vue index d99dbb5d..fdba73fc 100644 --- a/app/pages/(features)/integration/bpjs-vclaim/sep/index.vue +++ b/app/pages/(features)/integration/bpjs-vclaim/sep/index.vue @@ -1,7 +1,6 @@