feat(encounter): implement letter data mapping for SEP form submission and enhance referral handling

This commit is contained in:
riefive
2025-11-10 14:55:40 +07:00
parent 4439a88b37
commit 5b1c69fd77
2 changed files with 121 additions and 25 deletions
+115 -21
View File
@@ -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
+6 -4
View File
@@ -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 || '',