feat: create integration-sep file

This commit is contained in:
riefive
2025-11-27 16:09:37 +07:00
parent d8f2e30bd6
commit 7605493d09
2 changed files with 132 additions and 2 deletions
@@ -155,7 +155,6 @@ onMounted(async () => {
@event="handleEvent"
@fetch="handleFetch"
/>
<AppViewPatient
v-model:open="openPatient"
v-model:selected="selectedPatient"
@@ -174,7 +173,6 @@ onMounted(async () => {
"
@save="handleSavePatient"
/>
<!-- Footer Actions -->
<div class="mt-6 flex justify-end gap-2 border-t border-t-slate-300 pt-4">
<Button
@@ -0,0 +1,132 @@
import { ref, computed } from 'vue'
import { useRoute } from 'vue-router'
import { toast } from '~/components/pub/ui/toast'
import { getList as getSepList } from '~/services/vclaim-sep.service'
export function useIntegrationSepDetail() {
const route = useRoute()
const isLoading = ref(false)
const sepData = ref<any>(null)
const valueObjects = ref<any>({})
const noSep = computed(() => {
return typeof route.params.id === 'string' ? route.params.id : ''
})
function mapServiceCodeToLabel(value: any): string | null {
if (!value) return null
const s = String(value).toLowerCase()
if (s.includes('jalan')) return '2'
if (s.includes('inap')) return '1'
if (/^\d+$/.test(String(value))) return String(value)
return String(value)
}
async function getSepDetail() {
if (!noSep.value) {
toast({
title: 'Gagal',
description: 'No SEP tidak ditemukan di URL',
variant: 'destructive',
})
return
}
try {
isLoading.value = true
const result = await getSepList({ number: noSep.value })
if (result.success && result.body?.response) {
const response = result.body.response
sepData.value = response
// Map response to form objects
// patientName.value = objects?.patientName || ''
// nationalIdentity.value = objects?.nationalIdentity || ''
// medicalRecordNumber.value = objects?.medicalRecordNumber || ''
// doctorId.value = objects?.doctorId || ''
// subSpecialistId.value = objects?.subSpecialistId || ''
// registerDate.value = objects?.registerDate || ''
// paymentType.value = objects?.paymentType || ''
// patientCategory.value = objects?.patientCategory || ''
// cardNumber.value = objects?.cardNumber || ''
// sepType.value = objects?.sepType || ''
// sepNumber.value = objects?.sepNumber || ''
// sepReference.value = objects?.sepReference || ''
// sepControlDate.value = objects?.sepControlDate || ''
// sepTrafficStatus.value = objects?.sepTrafficStatus || ''
// diagnosis.value = objects?.diagnosis || ''
// if (Object.keys(response).length > 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 || '-',
cardNumber: response.peserta?.noKartu || '-',
diagnosis: response.diagnosa || '-',
sepReference: response.noSep || '-',
sepControlDate: response.tglSep || null,
sepTrafficStatus: response.nmstatusKecelakaan || '-',
kelasRawat: response.kelasRawat || '-',
referralNumber: response.noRujukan || '-',
}
} else {
toast({
title: 'Gagal',
description: 'Data SEP tidak ditemukan',
variant: 'destructive',
})
await navigateTo('/integration/bpjs-vclaim/sep')
}
} catch (error: any) {
console.error('Error loading SEP detail:', error)
toast({
title: 'Gagal',
description: error?.message || 'Gagal memuat data SEP',
variant: 'destructive',
})
await navigateTo('/integration/bpjs-vclaim/sep')
} finally {
isLoading.value = false
}
}
return {
isLoading,
noSep,
sepData,
valueObjects,
getSepDetail,
}
}