feat(encounter): implement letter data mapping for SEP form submission and enhance referral handling
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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 || '',
|
||||
|
||||
Reference in New Issue
Block a user