From d5c06add1d3c9cb8239007c066838356a33042d1 Mon Sep 17 00:00:00 2001 From: riefive Date: Thu, 6 Nov 2025 14:16:20 +0700 Subject: [PATCH] feat(sep): adjust entry in encounter --- app/components/app/encounter/entry-form.vue | 47 ++++++++++----------- app/components/content/encounter/entry.vue | 30 ++++++++++--- app/components/content/sep/entry.vue | 38 +++++++++++++++++ app/components/content/sep/list.vue | 27 +----------- 4 files changed, 85 insertions(+), 57 deletions(-) diff --git a/app/components/app/encounter/entry-form.vue b/app/components/app/encounter/entry-form.vue index 117f0c3a..7c9ba923 100644 --- a/app/components/app/encounter/entry-form.vue +++ b/app/components/app/encounter/entry-form.vue @@ -56,6 +56,7 @@ const [sepNumber, sepNumberAttrs] = defineField('sepNumber') const [patientName, patientNameAttrs] = defineField('patientName') const [nationalIdentity, nationalIdentityAttrs] = defineField('nationalIdentity') const [medicalRecordNumber, medicalRecordNumberAttrs] = defineField('medicalRecordNumber') +const patientId = ref('') const mode = props.isLoading !== undefined ? props.isLoading : false const isReadonly = props.isReadonly !== undefined ? props.isReadonly : false @@ -105,6 +106,7 @@ watch(props, (value) => { } if (Object.keys(patient).length > 0) { + patientId.value = patient?.id ? String(patient.id) : '' patientName.value = patient?.person?.name || '' nationalIdentity.value = patient?.person?.residentIdentityNumber || '' medicalRecordNumber.value = patient?.number || '' @@ -113,15 +115,12 @@ watch(props, (value) => { function onAddSep() { const formValues = { - patientName: patientName.value, - nationalIdentity: nationalIdentity.value, - medicalRecordNumber: medicalRecordNumber.value, - doctorId: doctorId.value, + doctorCode: doctorId.value, + subSpecialistCode: subSpecialistId.value, registerDate: registerDate.value, paymentType: paymentType.value, - bpjsNumber: bpjsNumber.value, - sepType: sepType.value, - sepNumber: sepNumber.value, + cardNumber: bpjsNumber.value, + sepType: sepType.value } emit('event', 'add-sep', formValues) } @@ -226,22 +225,6 @@ const onSubmit = handleSubmit((values) => { :colCount="3" :cellFlex="false" > - - - - - - - + + + + + + + { :accept="['pdf', 'jpg', 'png']" :max-size-mb="1" /> - + () +const route = useRoute() const openPatient = ref(false) const isLoading = reactive({ isTableLoading: false, @@ -56,11 +57,20 @@ function toKebabCase(str: string): string { function toNavigateSep(values: any) { const queryParams = new URLSearchParams() + if (values['subSpecialistCode']) { + const isSub = isSubspecialist(values['subSpecialistCode'], specialistsTree.value) + if (!isSub) { + values['specialistCode'] = values['subSpecialistCode'] + delete values['subSpecialistCode'] + } + } + Object.keys(values).forEach((field) => { if (values[field]) { queryParams.append(toKebabCase(field), values[field]) } }) + navigateTo('/integration/bpjs/sep/add' + `?${queryParams.toString()}`) } @@ -72,8 +82,7 @@ function handleEvent(menu: string, value?: any) { } else if (menu === 'add') { navigateTo('/client/patient/add') } else if (menu === 'add-sep') { - console.log('formValues', value) - toNavigateSep({ resource: 'encounter', isService: 'false', ...value }) + toNavigateSep({ sourcePath: route.path, resource: 'encounter', isService: 'false', ...value }) } else if (menu === 'save') { console.log('Save encounter:', value) } else if (menu === 'cancel') { @@ -116,13 +125,19 @@ function isSubspecialist(value: string, items: TreeItem[]): boolean { return false } -async function handleFetchDoctors(subSpecialistId: string) { +async function handleFetchDoctors(subSpecialistId: string | null = null) { try { - // Check if the selected value is a subspecialist or specialist - const isSub = isSubspecialist(subSpecialistId, specialistsTree.value) - // Build filter based on selection type const filterParams: any = { 'page-size': 100, includes: 'employee-Person' } + + if (!subSpecialistId) { + const doctors = await getDoctorValueLabelList(filterParams) + doctorsList.value = doctors + return + } + + // Check if the selectd value is a subspecialist or specialist + const isSub = isSubspecialist(subSpecialistId, specialistsTree.value) if (isSub) { // If selected is subspecialist, filter by subspecialist-id @@ -142,7 +157,7 @@ async function handleFetchDoctors(subSpecialistId: string) { function handleFetch(value?: any) { if (value?.subSpecialistId) { - handleFetchDoctors(value.subSpecialistId) + // handleFetchDoctors(value.subSpecialistId) } } @@ -160,6 +175,7 @@ async function handleInit() { label: participantGroups[item], })) as any // Fetch tree data + await handleFetchDoctors() await handleFetchSpecialists() } diff --git a/app/components/content/sep/entry.vue b/app/components/content/sep/entry.vue index 1ecdc047..896ad827 100644 --- a/app/components/content/sep/entry.vue +++ b/app/components/content/sep/entry.vue @@ -78,6 +78,7 @@ const classLevelUpgradesList = ref>([]) const classPaySourcesList = ref>([]) const isServiceHidden = ref(false) const isSaveLoading = ref(false) +const isLetterReadonly = ref(false) const resourceType = ref('') async function getMonitoringHistoryMappers() { @@ -158,6 +159,38 @@ async function getLetterMappers(admissionType: string, search: string) { }, ] } else { + // lettersRaw.asalFaskes + // lettersRaw.peserta.hakKelas?.kode + // lettersRaw.peserta.mr?.noMR + // lettersRaw.peserta.mr?.noTelepon + // lettersRaw.peserta?.nama + // lettersRaw.peserta?.noKartu + // lettersRaw.poliRujukan?.kode + // lettersRaw.rujukan?.pelayanan?.kode + // lettersRaw.rujukan?.poliRujukan?.kode + // lettersRaw.diagAwal + + // 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 || '', @@ -167,6 +200,9 @@ async function getLetterMappers(admissionType: string, search: string) { bpjsCardNo: lettersRaw.rujukan.peserta.noKartu || '', clinic: lettersRaw.rujukan.poliRujukan.nama || '', doctor: '', + information: { + + } }, ] } @@ -208,11 +244,13 @@ async function handleEvent(menu: string, value: any) { return } if (menu === 'search-letter') { + isLetterReadonly.value = false getLetterMappers(value.admissionType, value.search).then(() => { if (letters.value.length > 0) { const copyObjects = { ...selectedObjects.value } selectedObjects.value = {} selectedLetter.value = letters.value[0].letterNumber + isLetterReadonly.value = true setTimeout(() => { selectedObjects.value = copyObjects selectedObjects.value['letterDate'] = letters.value[0].plannedDate diff --git a/app/components/content/sep/list.vue b/app/components/content/sep/list.vue index b791de77..013b076a 100644 --- a/app/components/content/sep/list.vue +++ b/app/components/content/sep/list.vue @@ -46,31 +46,6 @@ function handlePageChange(page: number) { const data = ref([]) -const dataBpjs = { - noSEP: '1323R0010825V027605', - tglSEP: '2025-08-28', - noKartu: '0001966915168 (MR. 11274212)', - nama: 'Kenzie', - tglLahir: '2010-01-25', - kelamin: 'Laki-laki', - telepon: '085854487311', - spesialis: 'HEMODIALISA', - dokter: 'dr. Nursam, SpPD-KGH', - faskes: 'RS Saiful Anwar', - diagnosa: 'Penyakit ginjal kronis, stadium 5', - catatan: 'Riwayat HEMODIALISA di RSUD DR. SAIFUL ANWAR', - peserta: { jenisPeserta: 'PEKERJA MANDIRI' }, - jenisRawat: 'R. Jalan', - jenisKunjungan: 'Kunjungan Kontrol (ulangan)', - poliPerujuk: '-', - kelasHak: '-', - kelasRawat: 'Kelas 3', - penjamin: '-', - qrCodeUrl: '/dummy-qr.png', - cetakanKe: 1, - tglCetak: '28-08-2025 07:10:30 WIB', -} - const refSearchNav: RefSearchNav = { onClick: () => { // open filter modal @@ -154,7 +129,7 @@ async function getSepList() { await getMonitoringVisitMappers() } -function exportCsv() { +function exportCsv() { console.log('Ekspor CSV dipilih') // tambahkan logic untuk generate CSV }