fix: solve entry on encounter

This commit is contained in:
riefive
2025-12-03 10:06:51 +07:00
parent e8c15e189f
commit 42bb79554f
2 changed files with 59 additions and 209 deletions
+51 -173
View File
@@ -40,7 +40,7 @@ const props = defineProps<{
participantGroups?: any[]
seps: any[]
patient?: PatientEntity | null | undefined
// objects?: any
objects?: any
}>()
// Model
@@ -91,17 +91,10 @@ const mode = props.mode !== undefined ? props.mode : 'add'
// SEP validation state from props
const isSepValid = computed(() => props.isSepValid || false)
const isCheckingSep = computed(() => props.isCheckingSep || false)
<<<<<<< HEAD
const doctorOpts = computed(() => {
// Add default option
const defaultOption = [{ label: 'Pilih', value: '' }]
// Add doctors from props
const doctors = props.doctor || []
return [...defaultOption, ...doctors]
})
const isJKNPayment = computed(() => paymentType.value === 'jkn')
const isJKNPayment = computed(() => paymentMethodCode.value === 'jkn')
const debouncedSepNumber = refDebounced(sepNumber, 500)
const debouncedCardNumber = refDebounced(cardNumber, 500)
const unitFullName = ref('') // Unit, specialist, subspecialist
if (mode === 'add') {
// Set default sepDate to current date in YYYY-MM-DD format
@@ -111,25 +104,13 @@ if (mode === 'add') {
const day = String(today.getDate()).padStart(2, '0')
registerDate.value = `${year}-${month}-${day}`
}
=======
// Unit, specialist, subspecialist
const unitFullName = ref('')
watch(() => props.selectedDoctor, (doctor) => {
unitFullName.value = doctor.subspecialist?.name ??
doctor.specialist?.name ??
doctor.unit?.name ??
'tidak diketahui'
model.value!.unit_code = doctor.unit_code || ''
model.value!.specialist_code = doctor.specialist_code || ''
model.value!.subspecialist_code = doctor.subspecialist_code || ''
},
)
// const doctorOpts = computed(() => {
// const defaultOption = [{ label: 'Pilih', value: '' }]
// const doctors = props.doctors || []
// return [...defaultOption, ...doctors]
// })
// watch(doctorCode, (newValue) => {
// // doctor.value = props.doctors?.find(doc => doc.code === newValue)
// unitFullName.value = doctor.value?.subspecialist?.name ??
@@ -141,13 +122,6 @@ watch(() => props.selectedDoctor, (doctor) => {
// // emit('event', 'unit-changed', unitName)
// })
const isJKNPayment = computed(() => paymentMethodCode.value === 'jkn')
>>>>>>> 9a8ee9d90f669a5395b14107d86d9f788118fa92
// async function onFetchChildren(parentId: string): Promise<void> {
// console.log('onFetchChildren', parentId)
// }
// Watch specialist/subspecialist selection to fetch doctors
// watch(subSpecialistCode, async (newValue) => {
// if (newValue) {
@@ -159,6 +133,17 @@ const isJKNPayment = computed(() => paymentMethodCode.value === 'jkn')
// }
// })
watch(() => props.selectedDoctor, (doctor) => {
unitFullName.value = doctor.subspecialist?.name ??
doctor.specialist?.name ??
doctor.unit?.name ??
'tidak diketahui'
model.value!.unit_code = doctor.unit_code || ''
model.value!.specialist_code = doctor.specialist_code || ''
model.value!.subspecialist_code = doctor.subspecialist_code || ''
},
)
watch(debouncedSepNumber, (newValue) => {
emit('event', 'sep-number-changed', newValue)
})
@@ -168,7 +153,6 @@ watch(debouncedCardNumber, (newValue) => {
})
// Sync props to form fields
<<<<<<< HEAD
watch(
() => props.objects,
(objects) => {
@@ -176,43 +160,18 @@ watch(
patientName.value = objects?.patientName || ''
nationalIdentity.value = objects?.nationalIdentity || ''
medicalRecordNumber.value = objects?.medicalRecordNumber || ''
doctorId.value = objects?.doctorId || ''
subSpecialistId.value = objects?.subSpecialistId || ''
doctorCode.value = objects?.doctorCode || ''
// subSpecialistCode.value = objects?.subSpecialistCode || ''
registerDate.value = objects?.registerDate || ''
paymentType.value = objects?.paymentType || ''
paymentMethodCode.value = objects?.paymentMethodCode || ''
patientCategory.value = objects?.patientCategory || ''
cardNumber.value = objects?.cardNumber || ''
sepType.value = objects?.sepType || ''
sepNumber.value = objects?.sepNumber || ''
sepReference.value = objects?.sepReference || ''
sepControlDate.value = objects?.sepControlDate || ''
sepTrafficStatus.value = objects?.sepTrafficStatus || ''
diagnosis.value = objects?.diagnosis || ''
}
},
{ deep: true, immediate: true },
)
=======
// watch(
// () => props.objects,
// (objects) => {
// if (objects && Object.keys(objects).length > 0) {
// patientName.value = objects?.patientName || ''
// nationalIdentity.value = objects?.nationalIdentity || ''
// medicalRecordNumber.value = objects?.medicalRecordNumber || ''
// doctorCode.value = objects?.doctorCode || ''
// subSpecialistCode.value = objects?.subSpecialistCode || ''
// registerDate.value = objects?.registerDate || ''
// paymentMethodCode.value = objects?.paymentMethodCode || ''
// patientCategory.value = objects?.patientCategory || ''
// cardNumber.value = objects?.cardNumber || ''
// sepType.value = objects?.sepType || ''
// sepNumber.value = objects?.sepNumber || ''
// }
// },
// { deep: true, immediate: true },
// )
>>>>>>> 9a8ee9d90f669a5395b14107d86d9f788118fa92
watch(
() => props.patient,
@@ -241,6 +200,10 @@ watch(
},
)
// async function onFetchChildren(parentId: string): Promise<void> {
// console.log('onFetchChildren', parentId)
// }
function onAddSep() {
const formValues = {
patientId: patientId.value || '',
@@ -248,13 +211,8 @@ function onAddSep() {
// subSpecialistCode: subSpecialistCode.value,
registerDate: registerDate.value,
cardNumber: cardNumber.value,
<<<<<<< HEAD
paymentType: paymentType.value,
sepType: sepType.value,
=======
paymentMethodCode: paymentMethodCode.value,
sepType: sepType.value
>>>>>>> 9a8ee9d90f669a5395b14107d86d9f788118fa92
}
emit('event', 'add-sep', formValues)
}
@@ -273,19 +231,6 @@ const onSubmit = handleSubmit((values) => {
const formRef = ref<HTMLFormElement | null>(null)
function submitForm() {
<<<<<<< HEAD
=======
console.log('🔵 submitForm called, formRef:', formRef.value)
console.log('🔵 Form values:', {
doctorCode: doctorCode.value,
// subSpecialistCode: subSpecialistCode.value,
registerDate: registerDate.value,
paymentMethodCode: paymentMethodCode.value,
})
console.log('🔵 Form errors:', errors.value)
console.log('🔵 Form meta:', meta.value)
>>>>>>> 9a8ee9d90f669a5395b14107d86d9f788118fa92
// Trigger form submit using native form submit
// This will trigger validation and onSubmit handler
if (formRef.value) {
@@ -402,29 +347,8 @@ defineExpose({
:colCount="3"
:cellFlex="false"
>
<<<<<<< HEAD
<Cell>
<Label height="compact">
Spesialis / Subspesialis
<span class="text-red-500">*</span>
</Label>
<Field :errMessage="errors.subSpecialistId">
<TreeSelect
id="subSpecialistId"
v-model="subSpecialistId"
v-bind="subSpecialistIdAttrs"
:data="specialists || []"
:on-fetch-children="onFetchChildren"
/>
</Field>
</Cell>
<Cell>
<Label height="compact">
=======
<DE.Cell>
<DE.Label height="compact">
>>>>>>> 9a8ee9d90f669a5395b14107d86d9f788118fa92
Dokter
<span class="text-red-500">*</span>
</DE.Label>
@@ -443,10 +367,6 @@ defineExpose({
</DE.Field>
</DE.Cell>
<<<<<<< HEAD
<Cell>
<Label height="compact">
=======
<DE.Cell>
<DE.Label height="compact">
Spesialis / Subspesialis
@@ -473,7 +393,6 @@ defineExpose({
>
<DE.Cell>
<DE.Label height="compact">
>>>>>>> 9a8ee9d90f669a5395b14107d86d9f788118fa92
Tanggal Daftar
<span class="text-red-500">*</span>
</DE.Label>
@@ -484,26 +403,11 @@ defineExpose({
v-bind="registerDateAttrs"
placeholder="Pilih tanggal"
/>
<<<<<<< HEAD
</Field>
</Cell>
</Block>
<Block
labelSize="thin"
class="!pt-0"
:colCount="3"
:cellFlex="false"
>
<Cell>
<Label height="compact">
=======
</DE.Field>
</DE.Cell>
<DE.Cell>
<DE.Label height="compact">
>>>>>>> 9a8ee9d90f669a5395b14107d86d9f788118fa92
Jenis Pembayaran
<span class="text-red-500">*</span>
</DE.Label>
@@ -542,16 +446,11 @@ defineExpose({
:disabled="isLoading || isReadonly"
placeholder="Pilih Kelompok Peserta"
/>
<<<<<<< HEAD
</Field>
<span class="text-sm text-gray-500">
</DE.Field>
<span class="text-sm text-gray-500">
{{ noteReference }}
</span>
</Cell>
=======
</DE.Field>
</DE.Cell>
>>>>>>> 9a8ee9d90f669a5395b14107d86d9f788118fa92
<DE.Cell>
<DE.Label height="compact">
@@ -566,9 +465,8 @@ defineExpose({
:disabled="isLoading || isReadonly"
placeholder="Masukkan nomor kartu BPJS"
/>
<<<<<<< HEAD
</Field>
<div
</DE.Field>
<div
v-if="isMemberValid"
class="mt-1 flex items-center gap-2"
>
@@ -588,11 +486,7 @@ defineExpose({
/>
<span class="text-sm text-red-500">Tidak aktif</span>
</div>
</Cell>
=======
</DE.Field>
</DE.Cell>
>>>>>>> 9a8ee9d90f669a5395b14107d86d9f788118fa92
<DE.Cell>
<DE.Label height="compact">
@@ -667,8 +561,7 @@ defineExpose({
/>
</Button>
</div>
<<<<<<< HEAD
</Field>
</DE.Field>
<div
v-if="isSepValid"
class="mt-1 flex items-center gap-2"
@@ -682,13 +575,9 @@ defineExpose({
<span class="text-sm text-gray-500">
{{ noteReference }}
</span>
</Cell>
=======
</DE.Field>
</DE.Cell>
>>>>>>> 9a8ee9d90f669a5395b14107d86d9f788118fa92
<Cell>
<DE.Cell>
<FileUpload
field-name="sepFile"
label="Dokumen SEP"
@@ -702,10 +591,9 @@ defineExpose({
<span class="mt-1 text-sm text-gray-500">
{{ noteFile }}
</span>
</Cell>
</DE.Cell>
<<<<<<< HEAD
<Cell>
<DE.Cell>
<FileUpload
field-name="sippFile"
label="Dokumen SIPP"
@@ -719,8 +607,8 @@ defineExpose({
<span class="mt-1 text-sm text-gray-500">
{{ noteFile }}
</span>
</Cell>
</Block>
</DE.Cell>
</DE.Block>
</template>
<template v-if="isSepValid">
@@ -728,13 +616,13 @@ defineExpose({
<!-- Data SEP -->
<h3 class="text-lg font-semibold">Data SEP</h3>
<Block
<DE.Block
labelSize="thin"
class="!pt-0"
:colCount="3"
:cellFlex="false"
>
<Cell>
<DE.Cell>
<Label height="compact">Dengan Rujukan / Surat Kontrol</Label>
<Field>
<Input
@@ -743,42 +631,42 @@ defineExpose({
:disabled="true"
/>
</Field>
</Cell>
</DE.Cell>
<Cell>
<DE.Cell>
<Label height="compact">No. Rujukan / Surat Kontrol</Label>
<Field>
<DE.Field>
<Input
id="sepReference"
v-model="sepNumber"
:disabled="true"
/>
</Field>
</Cell>
</DE.Field>
</DE.Cell>
<Cell>
<DE.Cell>
<Label height="compact">
Tanggal Rujukan / Surat Kontrol
<span class="ml-1 text-red-500">*</span>
</Label>
<Field>
<DE.Field>
<DatepickerSingle
id="sepControlDate"
v-model="sepControlDate"
:disabled="true"
placeholder="Pilih tanggal sep"
/>
</Field>
</Cell>
</Block>
</DE.Field>
</DE.Cell>
</DE.Block>
<Block
<DE.Block
labelSize="thin"
class="!pt-0"
:colCount="3"
:cellFlex="false"
>
<Cell :col-span="2">
<DE.Cell :col-span="2">
<Label height="compact">Diagnosis</Label>
<Field>
<Input
@@ -787,29 +675,19 @@ defineExpose({
:disabled="true"
/>
</Field>
</Cell>
</DE.Cell>
<Cell>
<DE.Cell>
<Label height="compact">Status Kecelakaan</Label>
<Field>
<DE.Field>
<Input
id="sepTrafficStatus"
v-model="sepTrafficStatus"
:disabled="true"
/>
</Field>
</Cell>
</Block>
=======
<FileUpload
field-name="sippFile"
label="Dokumen SIPP"
placeholder="Unggah dokumen SIPP"
:accept="['pdf', 'jpg', 'png']"
:max-size-mb="1"
/>
</DE.Field>
</DE.Cell>
</DE.Block>
>>>>>>> 9a8ee9d90f669a5395b14107d86d9f788118fa92
</template>
</form>
</div>
+8 -36
View File
@@ -11,11 +11,8 @@ import { refDebounced } from '@vueuse/core'
// Handlers
import { getDetail as getDoctorDetail } from '~/services/doctor.service'
import { useEncounterEntry } from '~/handlers/encounter-entry.handler'
<<<<<<< HEAD
import { useIntegrationSepEntry } from '~/handlers/integration-sep-entry.handler'
=======
import { genDoctor, type Doctor } from '~/models/doctor'
>>>>>>> 9a8ee9d90f669a5395b14107d86d9f788118fa92
// Props
const props = defineProps<{
@@ -66,31 +63,14 @@ const { recSepId, openHistory, histories, getMonitoringHistoryMappers } = useInt
const debouncedSepNumber = refDebounced(sepNumber, 500)
const selectedDoctor = ref<Doctor>(genDoctor())
provide('rec_select_id', recSelectId)
provide('table_data_loader', isLoading)
watch(debouncedSepNumber, async (newValue) => {
await getValidateSepNumber(newValue)
})
watch(
() => formObjects.value?.paymentType,
(newValue) => {
isSepValid.value = false
if (newValue !== 'jkn') {
sepNumber.value = ''
}
},
)
onMounted(async () => {
await handleInit()
if (props.id > 0) {
await loadEncounterDetail()
}
})
///// Functions
async function getDoctorInfo(value: string) {
const resp = await getDoctorDetail(value, { includes: 'unit,specialist,subspecialist'})
if (resp.success) {
selectedDoctor.value = resp.body.data
}
}
function handleSavePatient() {
selectedPatientObject.value = null
setTimeout(() => {
@@ -152,7 +132,6 @@ async function handleEvent(menu: string, value?: any) {
}
}
<<<<<<< HEAD
provide('rec_select_id', recSelectId)
provide('rec_sep_id', recSepId)
provide('table_data_loader', isLoading)
@@ -184,15 +163,8 @@ onMounted(async () => {
await handleInit()
if (props.formType === 'edit' && props.id > 0) {
await getFetchEncounterDetail()
=======
async function getDoctorInfo(value: string) {
const resp = await getDoctorDetail(value, { includes: 'unit,specialist,subspecialist'})
if (resp.success) {
selectedDoctor.value = resp.body.data
// console.log(selectedDoctor.value)
>>>>>>> 9a8ee9d90f669a5395b14107d86d9f788118fa92
}
}
})
</script>
<template>