From 5b1c69fd773c47d9dc381c0740174fa13c72899b Mon Sep 17 00:00:00 2001 From: riefive Date: Mon, 10 Nov 2025 14:55:40 +0700 Subject: [PATCH] feat(encounter): implement letter data mapping for SEP form submission and enhance referral handling --- app/components/content/sep/entry.vue | 136 ++++++++++++++++++++++----- app/services/vclaim-sep.service.ts | 10 +- 2 files changed, 121 insertions(+), 25 deletions(-) diff --git a/app/components/content/sep/entry.vue b/app/components/content/sep/entry.vue index 3a916c4d..1451dfe8 100644 --- a/app/components/content/sep/entry.vue +++ b/app/components/content/sep/entry.vue @@ -167,25 +167,6 @@ async function getLetterMappers(admissionType: string, search: string) { }, ] } else { - // integrate ke sep --- - // "rujukan": { - // "noRujukan": "0212R0300625B000006", // rujukan?.noKunjungan - // "ppkRujukan": "0212R030", - // "tglRujukan": "2025-06-26", - // "asalRujukan": "2" // asalFaskes - // }, - // "jnsPelayanan": "2", - // "ppkPelayanan": "1323R001", - // "poli": { - // "tujuan": "URO", // rujukan?.poliRujukan?.kode - // }, - // "klsRawat": { - // "pembiayaan": "", - // "klsRawatHak": "2", // peserta.hakKelas?.kode - // "klsRawatNaik": "", - // "penanggungJawab": "" - // }, - letters.value = [ { letterNumber: lettersRaw?.rujukan?.noKunjungan || '', @@ -205,6 +186,7 @@ async function getLetterMappers(admissionType: string, search: string) { patientName: lettersRaw?.rujukan?.peserta?.nama || '', patientPhone: lettersRaw?.rujukan?.peserta?.mr?.noTelepon || '', medicalRecordNumber: lettersRaw?.rujukan?.peserta?.mr?.noMR || '', + ppkRujukan: lettersRaw?.rujukan?.provPerujuk?.kode || '', }, }, ] @@ -258,6 +240,89 @@ function handleSaveLetter() { } } +/** + * Map letter data to form fields for save-sep + * Maps data from letters.value[0].information to selectedObjects and form values + */ +function mapLetterDataToForm(formValues: any): any { + if (selectedAdmissionType.value === '3' || letters.value.length === 0) { + return formValues + } + + const letterData = letters.value[0] + const info = letterData.information || {} + + // Map data to selectedObjects for form population + if (info.cardNumber) { + selectedObjects.value['cardNumber'] = info.cardNumber + } + if (info.medicalRecordNumber) { + selectedObjects.value['medicalRecordNumber'] = info.medicalRecordNumber + } + if (info.patientPhone) { + selectedObjects.value['phoneNumber'] = info.patientPhone + } + if (info.classLevel) { + selectedObjects.value['classLevel'] = info.classLevel + } + + // Map data to formValues for makeSepData + const mappedValues = { ...formValues } + + // response.rujukan.peserta.noKartu → cardNumber (noKartu) + if (info.cardNumber) { + mappedValues.cardNumber = info.cardNumber + } + + // response.rujukan.tglKunjungan → referralLetterDate (rujukan.tglRujukan) + if (letterData.plannedDate) { + mappedValues.referralLetterDate = letterData.plannedDate + } + + // response.rujukan.noKunjungan → referralLetterNumber (rujukan.noRujukan) + if (letterData.letterNumber) { + mappedValues.referralLetterNumber = letterData.letterNumber + } + + // response.rujukan.provPerujuk.kode → fromClinic (rujukan.ppkRujukan) + if (info.ppkRujukan) { + mappedValues.referralTo = info.ppkRujukan + } + + // response.asalFaskes → asalRujukan (1 = Faskes 1, 2 = Faskes RS) + // Map facility to referralFrom (asalRujukan) + if (info.facility) { + mappedValues.referralFrom = info.facility + } + + // response.rujukan.diagnosa.kode → initialDiagnosis (diagAwal) + if (info.diagnoses) { + mappedValues.initialDiagnosis = info.diagnoses + } + + // response.rujukan.poliRujukan.kode → destinationClinic (poli.tujuan) + if (info.poly) { + mappedValues.destinationClinic = info.poly + } + + // response.rujukan.peserta.hakKelas.kode → classLevel (klsRawat.klsRawatHak) + if (info.classLevel) { + mappedValues.classLevel = info.classLevel + } + + // response.rujukan.peserta.mr.noMR → medicalRecordNumber (noMR) + if (info.medicalRecordNumber) { + mappedValues.medicalRecordNumber = info.medicalRecordNumber + } + + // response.rujukan.peserta.mr.noTelepon → phoneNumber (noTelp) + if (info.patientPhone) { + mappedValues.phoneNumber = info.patientPhone + } + + return mappedValues +} + async function handleSavePatient() { selectedPatientObject.value = null await getPatientInternalMappers(selectedPatient.value) @@ -326,8 +391,37 @@ async function handleEvent(menu: string, value: any) { } if (menu === 'save-sep') { isSaveLoading.value = true - // value.destinationClinic = value.destinationClinic || '' - createSep(makeSepData(value)) + + // Map letter data to form if admissionType !== '3' and letters.value has data + let mappedValues = value + if (selectedAdmissionType.value !== '3') { + if (letters.value.length > 0) { + // Map data from letters.value to form values + mappedValues = mapLetterDataToForm(value) + } else { + // Fallback: use getPatientExternalMappers if letters.value is empty + // Get card number from form values or selectedObjects + const cardNumberToSearch = value.cardNumber || selectedObjects.value['cardNumber'] || '' + if (cardNumberToSearch && cardNumberToSearch !== '-') { + await getPatientExternalMappers(cardNumberToSearch, 'by-card') + // Update mappedValues with data from getPatientExternalMappers + if (selectedObjects.value['cardNumber']) { + mappedValues.cardNumber = selectedObjects.value['cardNumber'] + } + if (selectedObjects.value['medicalRecordNumber']) { + mappedValues.medicalRecordNumber = selectedObjects.value['medicalRecordNumber'] + } + if (selectedObjects.value['phoneNumber']) { + mappedValues.phoneNumber = selectedObjects.value['phoneNumber'] + } + if (selectedObjects.value['classLevel']) { + mappedValues.classLevel = selectedObjects.value['classLevel'] + } + } + } + } + + createSep(makeSepData(mappedValues)) .then((res) => { const body = res?.body const code = body?.metaData?.code diff --git a/app/services/vclaim-sep.service.ts b/app/services/vclaim-sep.service.ts index fdccc9c4..7d54d771 100644 --- a/app/services/vclaim-sep.service.ts +++ b/app/services/vclaim-sep.service.ts @@ -55,10 +55,12 @@ export function makeSepData( kodeDPJP: ['3'].includes(data.admissionType)? data.attendingDoctor : '', }, rujukan: { - asalRujukan: ['2'].includes(data.admissionType) ? data?.referralFrom || '' : '', - tglRujukan: ['2'].includes(data.admissionType) ? data?.referralLetterDate || '' : '', - noRujukan: ['2'].includes(data.admissionType) ? data?.referralLetterNumber || '' : '', - ppkRujukan: ['2'].includes(data.admissionType) ? data?.referralTo || '' : '', + // Handle referral data for admissionType !== '3' + // asalRujukan: 1 = Faskes 1, 2 = Faskes RS + asalRujukan: !['3'].includes(data.admissionType) ? data?.referralFrom || '' : '', + tglRujukan: !['3'].includes(data.admissionType) ? data?.referralLetterDate || '' : '', + noRujukan: !['3'].includes(data.admissionType) ? data?.referralLetterNumber || '' : '', + ppkRujukan: !['3'].includes(data.admissionType) ? data?.referralTo || '' : '', }, klsRawat: { klsRawatHak: data.classLevel || '',