diff --git a/app/components/app/encounter/entry-form.vue b/app/components/app/encounter/entry-form.vue
index 1ac00703..a735a554 100644
--- a/app/components/app/encounter/entry-form.vue
+++ b/app/components/app/encounter/entry-form.vue
@@ -50,7 +50,7 @@ const [subSpecialistId, subSpecialistIdAttrs] = defineField('subSpecialistId')
const [registerDate, registerDateAttrs] = defineField('registerDate')
const [paymentType, paymentTypeAttrs] = defineField('paymentType')
const [patientCategory, patientCategoryAttrs] = defineField('patientCategory')
-const [bpjsNumber, bpjsNumberAttrs] = defineField('bpjsNumber')
+const [cardNumber, cardNumberAttrs] = defineField('cardNumber')
const [sepType, sepTypeAttrs] = defineField('sepType')
const [sepNumber, sepNumberAttrs] = defineField('sepNumber')
const [patientName, patientNameAttrs] = defineField('patientName')
@@ -100,7 +100,7 @@ watch(props, (value) => {
registerDate.value = objects?.registerDate || ''
paymentType.value = objects?.paymentType || ''
patientCategory.value = objects?.patientCategory || ''
- bpjsNumber.value = objects?.bpjsNumber || ''
+ cardNumber.value = objects?.cardNumber || ''
sepType.value = objects?.sepType || ''
sepNumber.value = objects?.sepNumber || ''
}
@@ -119,7 +119,7 @@ function onAddSep() {
doctorCode: doctorId.value,
subSpecialistCode: subSpecialistId.value,
registerDate: registerDate.value,
- cardNumber: bpjsNumber.value,
+ cardNumber: cardNumber.value,
paymentType: paymentType.value,
sepType: sepType.value
}
@@ -331,11 +331,11 @@ const onSubmit = handleSubmit((values) => {
No. Kartu BPJS
*
-
+
diff --git a/app/components/app/sep/entry-form.vue b/app/components/app/sep/entry-form.vue
index 914f7860..0a646cd4 100644
--- a/app/components/app/sep/entry-form.vue
+++ b/app/components/app/sep/entry-form.vue
@@ -67,7 +67,7 @@ const { handleSubmit, errors, defineField } = useForm({
const [sepDate, sepDateAttrs] = defineField('sepDate')
const [serviceType, serviceTypeAttrs] = defineField('serviceType')
const [admissionType, admissionTypeAttrs] = defineField('admissionType')
-const [bpjsNumber, bpjsNumberAttrs] = defineField('bpjsNumber')
+const [cardNumber, cardNumberAttrs] = defineField('cardNumber')
const [nationalId, nationalIdAttrs] = defineField('nationalId')
const [medicalRecordNumber, medicalRecordNumberAttrs] = defineField('medicalRecordNumber')
const [patientName, patientNameAttrs] = defineField('patientName')
@@ -115,7 +115,7 @@ const isShowPatient = ref(props.isShowPatient || false)
const isDateReload = ref(false)
// Debounced search for bpjsNumber and nationalId
-const debouncedBpjsNumber = refDebounced(bpjsNumber, 500)
+const debouncedCardNumber = refDebounced(cardNumber, 500)
const debouncedNationalId = refDebounced(nationalId, 500)
if (mode === 'add') {
@@ -142,7 +142,7 @@ watch(props, (value) => {
const objects = value.objects || ({} as any)
if (Object.keys(objects).length > 0) {
sepDate.value = objects?.registerDate || new Date().toISOString().substring(0, 10)
- bpjsNumber.value = objects?.bpjsNumber || '-'
+ cardNumber.value = objects?.cardNumber || '-'
nationalId.value = objects?.nationalIdentity || '-'
medicalRecordNumber.value = objects?.medicalRecordNumber || '-'
patientName.value = objects?.patientName || '-'
@@ -161,7 +161,7 @@ watch(props, (value) => {
}, 100)
}
if (Object.keys(patient).length > 0) {
- bpjsNumber.value = '-'
+ cardNumber.value = '-'
nationalId.value = patient?.person?.residentIdentityNumber || '-'
medicalRecordNumber.value = patient?.number || '-'
patientName.value = patient?.person?.name || '-'
@@ -170,15 +170,15 @@ watch(props, (value) => {
})
// Watch debounced search values
-watch(debouncedBpjsNumber, (newValue) => {
+watch(debouncedCardNumber, (newValue) => {
if (newValue && newValue !== '-' && newValue.length >= 3) {
- emit('event', 'search-patient-by-identifier', { text: newValue, type: 'bpjs' })
+ emit('event', 'search-patient-by-identifier', { text: newValue, type: 'cardNumber' })
}
})
watch(debouncedNationalId, (newValue) => {
if (newValue && newValue !== '-' && newValue.length >= 3) {
- emit('event', 'search-patient-by-identifier', { text: newValue, type: 'nationalId' })
+ emit('event', 'search-patient-by-identifier', { text: newValue, type: 'indentity' })
}
})
@@ -282,11 +282,11 @@ onMounted(() => {
No. Kartu BPJS
*
-
+
diff --git a/app/components/content/sep/entry.vue b/app/components/content/sep/entry.vue
index 4518df27..143948a1 100644
--- a/app/components/content/sep/entry.vue
+++ b/app/components/content/sep/entry.vue
@@ -186,7 +186,6 @@ async function getLetterMappers(admissionType: string, search: string) {
// "penanggungJawab": ""
// },
-
letters.value = [
{
letterNumber: lettersRaw?.rujukan?.noKunjungan || '',
@@ -206,18 +205,39 @@ async function getLetterMappers(admissionType: string, search: string) {
patientName: lettersRaw?.rujukan?.peserta?.nama || '',
patientPhone: lettersRaw?.rujukan?.peserta?.mr?.noTelepon || '',
medicalRecordNumber: lettersRaw?.rujukan?.peserta?.mr?.noMR || '',
- }
+ },
},
]
}
}
}
-function handleSavePatient() {
- selectedPatientObject.value = null
- setTimeout(() => {
- getPatientCurrent(selectedPatient.value)
- }, 150)
+async function getPatientInternalMappers(id: string) {
+ try {
+ await getPatientCurrent(id)
+ if (selectedPatientObject.value) {
+ const patient = selectedPatientObject.value
+ selectedObjects.value['cardNumber'] = '-'
+ selectedObjects.value['patientName'] = patient?.person?.name || '-'
+ selectedObjects.value['nationalIdentity'] = patient?.person?.residentIdentityNumber || '-'
+ selectedObjects.value['medicalRecordNumber'] = patient?.number || '-'
+ selectedObjects.value['phoneNumber'] = patient?.person?.contacts?.[0]?.value || '-'
+ }
+ } catch (err) {
+ console.error('Failed to load patient from query params:', err)
+ }
+}
+
+async function getPatientExternalMappers(id: string, type: string) {
+ try {
+ const resultMember = await getMemberList({
+ mode: type,
+ number: id,
+ date: new Date().toISOString().substring(0, 10),
+ })
+ } catch (err) {
+ console.error('Failed to load patient from query params:', err)
+ }
}
function handleSaveLetter() {
@@ -228,6 +248,11 @@ function handleSaveLetter() {
}
}
+async function handleSavePatient() {
+ selectedPatientObject.value = null
+ await getPatientInternalMappers(selectedPatient.value)
+}
+
async function handleEvent(menu: string, value: any) {
if (menu === 'admission-type') {
selectedAdmissionType.value = value
@@ -251,8 +276,22 @@ async function handleEvent(menu: string, value: any) {
const text = value.text
const type = value.type
const prevCardNumber = selectedPatientObject.value?.person?.residentIdentityNumber || ''
- if (type === 'nationalId' && text !== prevCardNumber) {
- getPatientByIdentifierSearch(text)
+ if (type === 'indentity' && text !== prevCardNumber) {
+ await getPatientByIdentifierSearch(text)
+ const resultMember = await getMemberList({
+ mode: 'by-identity',
+ number: text,
+ date: new Date().toISOString().substring(0, 10),
+ })
+ console.log(resultMember)
+ }
+ if (type === 'cardNumber' && text !== prevCardNumber) {
+ const resultMember = await getMemberList({
+ mode: 'by-card',
+ number: text,
+ date: new Date().toISOString().substring(0, 10),
+ })
+ console.log(resultMember)
}
return
}
@@ -419,20 +458,22 @@ async function handleInit() {
if (queries['doctor-code']) selectedObjects.value['doctorCode'] = queries['doctor-code']
if (queries['specialist-code']) selectedObjects.value['subSpecialistCode'] = queries['specialist-code']
if (queries['sub-specialist-code']) selectedObjects.value['subSpecialistCode'] = queries['sub-specialist-code']
- if (queries['bpjs-number']) selectedObjects.value['bpjsNumber'] = queries['bpjs-number']
+ if (queries['card-number']) selectedObjects.value['cardNumber'] = queries['card-number']
if (queries['register-date']) selectedObjects.value['registerDate'] = queries['register-date']
if (queries['sep-type']) selectedObjects.value['sepType'] = queries['sep-type']
if (queries['sep-number']) selectedObjects.value['sepNumber'] = queries['sep-number']
if (queries['register-date']) selectedObjects.value['registerDate'] = queries['register-date']
if (queries['payment-type']) selectedObjects.value['paymentType'] = queries['payment-type']
- // Load patient data if identifier is provided
if (queries['patient-id']) {
- try {
- await getPatientCurrent(queries['patient-id'])
- console.log(selectedPatientObject.value)
- } catch (err) {
- console.error('Failed to load patient from query params:', err)
- }
+ await getPatientInternalMappers(queries['patient-id'])
+ }
+ if (queries['card-number']) {
+ const resultMember = await getMemberList({
+ mode: 'by-card',
+ number: queries['card-number'],
+ date: new Date().toISOString().substring(0, 10),
+ })
+ console.log(resultMember)
}
delete selectedObjects.value['is-service']
}
@@ -473,7 +514,6 @@ onMounted(async () => {
:class-level-upgrades="classLevelUpgradesList"
:class-pay-sources="classPaySourcesList"
:specialists="specialistsTree"
- :patient="selectedPatientObject"
:objects="selectedObjects"
@fetch="handleFetch"
@event="handleEvent"
diff --git a/app/schemas/integration-bpjs.schema.ts b/app/schemas/integration-bpjs.schema.ts
index 2a0626b9..47206edf 100644
--- a/app/schemas/integration-bpjs.schema.ts
+++ b/app/schemas/integration-bpjs.schema.ts
@@ -5,7 +5,7 @@ const ERROR_MESSAGES = {
sepDate: 'Tanggal wajib diisi',
serviceType: 'Jenis Pelayanan wajib diisi',
admissionType: 'Jenis Pendaftaran wajib diisi',
- bpjsNumber: 'No. Kartu BPJS wajib diisi',
+ cardNumber: 'No. Kartu BPJS wajib diisi',
nationalId: 'Nomor ID wajib diisi',
medicalRecordNumber: 'Nomor Rekam Medis wajib diisi',
patientName: 'Nama wajib diisi',
@@ -51,9 +51,9 @@ const IntegrationBpjsSchema = z
admissionType: z
.string({ required_error: ERROR_MESSAGES.required.admissionType })
.min(1, ERROR_MESSAGES.required.admissionType),
- bpjsNumber: z
- .string({ required_error: ERROR_MESSAGES.required.bpjsNumber })
- .min(1, ERROR_MESSAGES.required.bpjsNumber),
+ cardNumber: z
+ .string({ required_error: ERROR_MESSAGES.required.cardNumber })
+ .min(1, ERROR_MESSAGES.required.cardNumber),
nationalId: z
.string({ required_error: ERROR_MESSAGES.required.nationalId })
.min(1, ERROR_MESSAGES.required.nationalId),
diff --git a/app/schemas/integration-encounter.schema.ts b/app/schemas/integration-encounter.schema.ts
index 7f76a792..32327328 100644
--- a/app/schemas/integration-encounter.schema.ts
+++ b/app/schemas/integration-encounter.schema.ts
@@ -7,7 +7,7 @@ const ERROR_MESSAGES = {
paymentType: 'Jenis Pembayaran wajib diisi',
subSpecialistId: 'Subspesialis wajib diisi',
patientCategory: 'Kelompok Peserta wajib diisi',
- bpjsNumber: 'No. Kartu BPJS wajib diisi',
+ cardNumber: 'No. Kartu BPJS wajib diisi',
sepType: 'Jenis SEP wajib diisi',
sepNumber: 'No. SEP wajib diisi',
},
@@ -42,9 +42,9 @@ const IntegrationEncounterSchema = z
.string()
.min(1, ERROR_MESSAGES.required.patientCategory)
.optional(),
- bpjsNumber: z
+ cardNumber: z
.string()
- .min(1, ERROR_MESSAGES.required.bpjsNumber)
+ .min(1, ERROR_MESSAGES.required.cardNumber)
.optional(),
sepType: z
.string()
@@ -88,15 +88,15 @@ const IntegrationEncounterSchema = z
)
.refine(
(data) => {
- // If payment type is jkn, then bpjs number is required
+ // If payment type is jkn, then card number is required
if (data.paymentType === 'jkn') {
- return data.bpjsNumber && data.bpjsNumber.trim() !== ''
+ return data.cardNumber && data.cardNumber.trim() !== ''
}
return true
},
{
- message: ERROR_MESSAGES.required.bpjsNumber,
- path: ['bpjsNumber'],
+ message: ERROR_MESSAGES.required.cardNumber,
+ path: ['cardNumber'],
},
)
.refine(