feat: create integration-sep file
This commit is contained in:
@@ -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,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user