128 lines
5.5 KiB
TypeScript
128 lines
5.5 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'
|
|
import { getList as getMemberList } from '~/services/vclaim-member.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 : ''
|
|
})
|
|
|
|
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
|
|
valueObjects.value = {
|
|
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 || '-',
|
|
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 || '-',
|
|
diagnosisName: 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.kdStatusKecelakaan || '',
|
|
trafficAccidentName: response.nmstatusKecelakaan || '',
|
|
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 || '-',
|
|
}
|
|
if (valueObjects.value?.cardNumber !== '-') {
|
|
const resultMember = await getMemberList({
|
|
mode: 'by-card',
|
|
number: valueObjects.value.cardNumber,
|
|
date: new Date().toISOString().substring(0, 10),
|
|
})
|
|
if (resultMember && resultMember.success && resultMember.body) {
|
|
const memberRaws = resultMember.body?.response || null
|
|
valueObjects.value['nationalIdentity'] = memberRaws?.peserta?.nik || ''
|
|
valueObjects.value['phoneNumber'] = memberRaws?.peserta?.mr?.noTelepon || ''
|
|
valueObjects.value['classLevel'] = memberRaws?.peserta?.hakKelas?.kode || ''
|
|
valueObjects.value['status'] = memberRaws?.statusPeserta?.kode || ''
|
|
}
|
|
}
|
|
} 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,
|
|
}
|
|
}
|