133 lines
5.1 KiB
TypeScript
133 lines
5.1 KiB
TypeScript
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,
|
|
}
|
|
}
|