feat(sep): search member through vclaim
This commit is contained in:
No files matched your search
@@ -50,7 +50,7 @@ const [subSpecialistId, subSpecialistIdAttrs] = defineField('subSpecialistId')
|
|||||||
const [registerDate, registerDateAttrs] = defineField('registerDate')
|
const [registerDate, registerDateAttrs] = defineField('registerDate')
|
||||||
const [paymentType, paymentTypeAttrs] = defineField('paymentType')
|
const [paymentType, paymentTypeAttrs] = defineField('paymentType')
|
||||||
const [patientCategory, patientCategoryAttrs] = defineField('patientCategory')
|
const [patientCategory, patientCategoryAttrs] = defineField('patientCategory')
|
||||||
const [bpjsNumber, bpjsNumberAttrs] = defineField('bpjsNumber')
|
const [cardNumber, cardNumberAttrs] = defineField('cardNumber')
|
||||||
const [sepType, sepTypeAttrs] = defineField('sepType')
|
const [sepType, sepTypeAttrs] = defineField('sepType')
|
||||||
const [sepNumber, sepNumberAttrs] = defineField('sepNumber')
|
const [sepNumber, sepNumberAttrs] = defineField('sepNumber')
|
||||||
const [patientName, patientNameAttrs] = defineField('patientName')
|
const [patientName, patientNameAttrs] = defineField('patientName')
|
||||||
@@ -100,7 +100,7 @@ watch(props, (value) => {
|
|||||||
registerDate.value = objects?.registerDate || ''
|
registerDate.value = objects?.registerDate || ''
|
||||||
paymentType.value = objects?.paymentType || ''
|
paymentType.value = objects?.paymentType || ''
|
||||||
patientCategory.value = objects?.patientCategory || ''
|
patientCategory.value = objects?.patientCategory || ''
|
||||||
bpjsNumber.value = objects?.bpjsNumber || ''
|
cardNumber.value = objects?.cardNumber || ''
|
||||||
sepType.value = objects?.sepType || ''
|
sepType.value = objects?.sepType || ''
|
||||||
sepNumber.value = objects?.sepNumber || ''
|
sepNumber.value = objects?.sepNumber || ''
|
||||||
}
|
}
|
||||||
@@ -119,7 +119,7 @@ function onAddSep() {
|
|||||||
doctorCode: doctorId.value,
|
doctorCode: doctorId.value,
|
||||||
subSpecialistCode: subSpecialistId.value,
|
subSpecialistCode: subSpecialistId.value,
|
||||||
registerDate: registerDate.value,
|
registerDate: registerDate.value,
|
||||||
cardNumber: bpjsNumber.value,
|
cardNumber: cardNumber.value,
|
||||||
paymentType: paymentType.value,
|
paymentType: paymentType.value,
|
||||||
sepType: sepType.value
|
sepType: sepType.value
|
||||||
}
|
}
|
||||||
@@ -331,11 +331,11 @@ const onSubmit = handleSubmit((values) => {
|
|||||||
No. Kartu BPJS
|
No. Kartu BPJS
|
||||||
<span class="text-red-500">*</span>
|
<span class="text-red-500">*</span>
|
||||||
</Label>
|
</Label>
|
||||||
<Field :errMessage="errors.bpjsNumber">
|
<Field :errMessage="errors.cardNumber">
|
||||||
<Input
|
<Input
|
||||||
id="bpjsNumber"
|
id="cardNumber"
|
||||||
v-model="bpjsNumber"
|
v-model="cardNumber"
|
||||||
v-bind="bpjsNumberAttrs"
|
v-bind="cardNumberAttrs"
|
||||||
:disabled="isLoading || isReadonly"
|
:disabled="isLoading || isReadonly"
|
||||||
placeholder="Masukkan nomor kartu BPJS"
|
placeholder="Masukkan nomor kartu BPJS"
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ const { handleSubmit, errors, defineField } = useForm<IntegrationBpjsFormData>({
|
|||||||
const [sepDate, sepDateAttrs] = defineField('sepDate')
|
const [sepDate, sepDateAttrs] = defineField('sepDate')
|
||||||
const [serviceType, serviceTypeAttrs] = defineField('serviceType')
|
const [serviceType, serviceTypeAttrs] = defineField('serviceType')
|
||||||
const [admissionType, admissionTypeAttrs] = defineField('admissionType')
|
const [admissionType, admissionTypeAttrs] = defineField('admissionType')
|
||||||
const [bpjsNumber, bpjsNumberAttrs] = defineField('bpjsNumber')
|
const [cardNumber, cardNumberAttrs] = defineField('cardNumber')
|
||||||
const [nationalId, nationalIdAttrs] = defineField('nationalId')
|
const [nationalId, nationalIdAttrs] = defineField('nationalId')
|
||||||
const [medicalRecordNumber, medicalRecordNumberAttrs] = defineField('medicalRecordNumber')
|
const [medicalRecordNumber, medicalRecordNumberAttrs] = defineField('medicalRecordNumber')
|
||||||
const [patientName, patientNameAttrs] = defineField('patientName')
|
const [patientName, patientNameAttrs] = defineField('patientName')
|
||||||
@@ -115,7 +115,7 @@ const isShowPatient = ref(props.isShowPatient || false)
|
|||||||
const isDateReload = ref(false)
|
const isDateReload = ref(false)
|
||||||
|
|
||||||
// Debounced search for bpjsNumber and nationalId
|
// Debounced search for bpjsNumber and nationalId
|
||||||
const debouncedBpjsNumber = refDebounced(bpjsNumber, 500)
|
const debouncedCardNumber = refDebounced(cardNumber, 500)
|
||||||
const debouncedNationalId = refDebounced(nationalId, 500)
|
const debouncedNationalId = refDebounced(nationalId, 500)
|
||||||
|
|
||||||
if (mode === 'add') {
|
if (mode === 'add') {
|
||||||
@@ -142,7 +142,7 @@ watch(props, (value) => {
|
|||||||
const objects = value.objects || ({} as any)
|
const objects = value.objects || ({} as any)
|
||||||
if (Object.keys(objects).length > 0) {
|
if (Object.keys(objects).length > 0) {
|
||||||
sepDate.value = objects?.registerDate || new Date().toISOString().substring(0, 10)
|
sepDate.value = objects?.registerDate || new Date().toISOString().substring(0, 10)
|
||||||
bpjsNumber.value = objects?.bpjsNumber || '-'
|
cardNumber.value = objects?.cardNumber || '-'
|
||||||
nationalId.value = objects?.nationalIdentity || '-'
|
nationalId.value = objects?.nationalIdentity || '-'
|
||||||
medicalRecordNumber.value = objects?.medicalRecordNumber || '-'
|
medicalRecordNumber.value = objects?.medicalRecordNumber || '-'
|
||||||
patientName.value = objects?.patientName || '-'
|
patientName.value = objects?.patientName || '-'
|
||||||
@@ -161,7 +161,7 @@ watch(props, (value) => {
|
|||||||
}, 100)
|
}, 100)
|
||||||
}
|
}
|
||||||
if (Object.keys(patient).length > 0) {
|
if (Object.keys(patient).length > 0) {
|
||||||
bpjsNumber.value = '-'
|
cardNumber.value = '-'
|
||||||
nationalId.value = patient?.person?.residentIdentityNumber || '-'
|
nationalId.value = patient?.person?.residentIdentityNumber || '-'
|
||||||
medicalRecordNumber.value = patient?.number || '-'
|
medicalRecordNumber.value = patient?.number || '-'
|
||||||
patientName.value = patient?.person?.name || '-'
|
patientName.value = patient?.person?.name || '-'
|
||||||
@@ -170,15 +170,15 @@ watch(props, (value) => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
// Watch debounced search values
|
// Watch debounced search values
|
||||||
watch(debouncedBpjsNumber, (newValue) => {
|
watch(debouncedCardNumber, (newValue) => {
|
||||||
if (newValue && newValue !== '-' && newValue.length >= 3) {
|
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) => {
|
watch(debouncedNationalId, (newValue) => {
|
||||||
if (newValue && newValue !== '-' && newValue.length >= 3) {
|
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
|
No. Kartu BPJS
|
||||||
<span class="text-red-500">*</span>
|
<span class="text-red-500">*</span>
|
||||||
</Label>
|
</Label>
|
||||||
<Field :errMessage="errors.bpjsNumber">
|
<Field :errMessage="errors.cardNumber">
|
||||||
<Input
|
<Input
|
||||||
id="bpjsNumber"
|
id="cardNumber"
|
||||||
v-model="bpjsNumber"
|
v-model="cardNumber"
|
||||||
v-bind="bpjsNumberAttrs"
|
v-bind="cardNumberAttrs"
|
||||||
:disabled="false"
|
:disabled="false"
|
||||||
/>
|
/>
|
||||||
</Field>
|
</Field>
|
||||||
|
|||||||
@@ -186,7 +186,6 @@ async function getLetterMappers(admissionType: string, search: string) {
|
|||||||
// "penanggungJawab": ""
|
// "penanggungJawab": ""
|
||||||
// },
|
// },
|
||||||
|
|
||||||
|
|
||||||
letters.value = [
|
letters.value = [
|
||||||
{
|
{
|
||||||
letterNumber: lettersRaw?.rujukan?.noKunjungan || '',
|
letterNumber: lettersRaw?.rujukan?.noKunjungan || '',
|
||||||
@@ -206,18 +205,39 @@ async function getLetterMappers(admissionType: string, search: string) {
|
|||||||
patientName: lettersRaw?.rujukan?.peserta?.nama || '',
|
patientName: lettersRaw?.rujukan?.peserta?.nama || '',
|
||||||
patientPhone: lettersRaw?.rujukan?.peserta?.mr?.noTelepon || '',
|
patientPhone: lettersRaw?.rujukan?.peserta?.mr?.noTelepon || '',
|
||||||
medicalRecordNumber: lettersRaw?.rujukan?.peserta?.mr?.noMR || '',
|
medicalRecordNumber: lettersRaw?.rujukan?.peserta?.mr?.noMR || '',
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleSavePatient() {
|
async function getPatientInternalMappers(id: string) {
|
||||||
selectedPatientObject.value = null
|
try {
|
||||||
setTimeout(() => {
|
await getPatientCurrent(id)
|
||||||
getPatientCurrent(selectedPatient.value)
|
if (selectedPatientObject.value) {
|
||||||
}, 150)
|
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() {
|
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) {
|
async function handleEvent(menu: string, value: any) {
|
||||||
if (menu === 'admission-type') {
|
if (menu === 'admission-type') {
|
||||||
selectedAdmissionType.value = value
|
selectedAdmissionType.value = value
|
||||||
@@ -251,8 +276,22 @@ async function handleEvent(menu: string, value: any) {
|
|||||||
const text = value.text
|
const text = value.text
|
||||||
const type = value.type
|
const type = value.type
|
||||||
const prevCardNumber = selectedPatientObject.value?.person?.residentIdentityNumber || ''
|
const prevCardNumber = selectedPatientObject.value?.person?.residentIdentityNumber || ''
|
||||||
if (type === 'nationalId' && text !== prevCardNumber) {
|
if (type === 'indentity' && text !== prevCardNumber) {
|
||||||
getPatientByIdentifierSearch(text)
|
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
|
return
|
||||||
}
|
}
|
||||||
@@ -419,20 +458,22 @@ async function handleInit() {
|
|||||||
if (queries['doctor-code']) selectedObjects.value['doctorCode'] = queries['doctor-code']
|
if (queries['doctor-code']) selectedObjects.value['doctorCode'] = queries['doctor-code']
|
||||||
if (queries['specialist-code']) selectedObjects.value['subSpecialistCode'] = queries['specialist-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['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['register-date']) selectedObjects.value['registerDate'] = queries['register-date']
|
||||||
if (queries['sep-type']) selectedObjects.value['sepType'] = queries['sep-type']
|
if (queries['sep-type']) selectedObjects.value['sepType'] = queries['sep-type']
|
||||||
if (queries['sep-number']) selectedObjects.value['sepNumber'] = queries['sep-number']
|
if (queries['sep-number']) selectedObjects.value['sepNumber'] = queries['sep-number']
|
||||||
if (queries['register-date']) selectedObjects.value['registerDate'] = queries['register-date']
|
if (queries['register-date']) selectedObjects.value['registerDate'] = queries['register-date']
|
||||||
if (queries['payment-type']) selectedObjects.value['paymentType'] = queries['payment-type']
|
if (queries['payment-type']) selectedObjects.value['paymentType'] = queries['payment-type']
|
||||||
// Load patient data if identifier is provided
|
|
||||||
if (queries['patient-id']) {
|
if (queries['patient-id']) {
|
||||||
try {
|
await getPatientInternalMappers(queries['patient-id'])
|
||||||
await getPatientCurrent(queries['patient-id'])
|
}
|
||||||
console.log(selectedPatientObject.value)
|
if (queries['card-number']) {
|
||||||
} catch (err) {
|
const resultMember = await getMemberList({
|
||||||
console.error('Failed to load patient from query params:', err)
|
mode: 'by-card',
|
||||||
}
|
number: queries['card-number'],
|
||||||
|
date: new Date().toISOString().substring(0, 10),
|
||||||
|
})
|
||||||
|
console.log(resultMember)
|
||||||
}
|
}
|
||||||
delete selectedObjects.value['is-service']
|
delete selectedObjects.value['is-service']
|
||||||
}
|
}
|
||||||
@@ -473,7 +514,6 @@ onMounted(async () => {
|
|||||||
:class-level-upgrades="classLevelUpgradesList"
|
:class-level-upgrades="classLevelUpgradesList"
|
||||||
:class-pay-sources="classPaySourcesList"
|
:class-pay-sources="classPaySourcesList"
|
||||||
:specialists="specialistsTree"
|
:specialists="specialistsTree"
|
||||||
:patient="selectedPatientObject"
|
|
||||||
:objects="selectedObjects"
|
:objects="selectedObjects"
|
||||||
@fetch="handleFetch"
|
@fetch="handleFetch"
|
||||||
@event="handleEvent"
|
@event="handleEvent"
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ const ERROR_MESSAGES = {
|
|||||||
sepDate: 'Tanggal wajib diisi',
|
sepDate: 'Tanggal wajib diisi',
|
||||||
serviceType: 'Jenis Pelayanan wajib diisi',
|
serviceType: 'Jenis Pelayanan wajib diisi',
|
||||||
admissionType: 'Jenis Pendaftaran wajib diisi',
|
admissionType: 'Jenis Pendaftaran wajib diisi',
|
||||||
bpjsNumber: 'No. Kartu BPJS wajib diisi',
|
cardNumber: 'No. Kartu BPJS wajib diisi',
|
||||||
nationalId: 'Nomor ID wajib diisi',
|
nationalId: 'Nomor ID wajib diisi',
|
||||||
medicalRecordNumber: 'Nomor Rekam Medis wajib diisi',
|
medicalRecordNumber: 'Nomor Rekam Medis wajib diisi',
|
||||||
patientName: 'Nama wajib diisi',
|
patientName: 'Nama wajib diisi',
|
||||||
@@ -51,9 +51,9 @@ const IntegrationBpjsSchema = z
|
|||||||
admissionType: z
|
admissionType: z
|
||||||
.string({ required_error: ERROR_MESSAGES.required.admissionType })
|
.string({ required_error: ERROR_MESSAGES.required.admissionType })
|
||||||
.min(1, ERROR_MESSAGES.required.admissionType),
|
.min(1, ERROR_MESSAGES.required.admissionType),
|
||||||
bpjsNumber: z
|
cardNumber: z
|
||||||
.string({ required_error: ERROR_MESSAGES.required.bpjsNumber })
|
.string({ required_error: ERROR_MESSAGES.required.cardNumber })
|
||||||
.min(1, ERROR_MESSAGES.required.bpjsNumber),
|
.min(1, ERROR_MESSAGES.required.cardNumber),
|
||||||
nationalId: z
|
nationalId: z
|
||||||
.string({ required_error: ERROR_MESSAGES.required.nationalId })
|
.string({ required_error: ERROR_MESSAGES.required.nationalId })
|
||||||
.min(1, ERROR_MESSAGES.required.nationalId),
|
.min(1, ERROR_MESSAGES.required.nationalId),
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ const ERROR_MESSAGES = {
|
|||||||
paymentType: 'Jenis Pembayaran wajib diisi',
|
paymentType: 'Jenis Pembayaran wajib diisi',
|
||||||
subSpecialistId: 'Subspesialis wajib diisi',
|
subSpecialistId: 'Subspesialis wajib diisi',
|
||||||
patientCategory: 'Kelompok Peserta wajib diisi',
|
patientCategory: 'Kelompok Peserta wajib diisi',
|
||||||
bpjsNumber: 'No. Kartu BPJS wajib diisi',
|
cardNumber: 'No. Kartu BPJS wajib diisi',
|
||||||
sepType: 'Jenis SEP wajib diisi',
|
sepType: 'Jenis SEP wajib diisi',
|
||||||
sepNumber: 'No. SEP wajib diisi',
|
sepNumber: 'No. SEP wajib diisi',
|
||||||
},
|
},
|
||||||
@@ -42,9 +42,9 @@ const IntegrationEncounterSchema = z
|
|||||||
.string()
|
.string()
|
||||||
.min(1, ERROR_MESSAGES.required.patientCategory)
|
.min(1, ERROR_MESSAGES.required.patientCategory)
|
||||||
.optional(),
|
.optional(),
|
||||||
bpjsNumber: z
|
cardNumber: z
|
||||||
.string()
|
.string()
|
||||||
.min(1, ERROR_MESSAGES.required.bpjsNumber)
|
.min(1, ERROR_MESSAGES.required.cardNumber)
|
||||||
.optional(),
|
.optional(),
|
||||||
sepType: z
|
sepType: z
|
||||||
.string()
|
.string()
|
||||||
@@ -88,15 +88,15 @@ const IntegrationEncounterSchema = z
|
|||||||
)
|
)
|
||||||
.refine(
|
.refine(
|
||||||
(data) => {
|
(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') {
|
if (data.paymentType === 'jkn') {
|
||||||
return data.bpjsNumber && data.bpjsNumber.trim() !== ''
|
return data.cardNumber && data.cardNumber.trim() !== ''
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
message: ERROR_MESSAGES.required.bpjsNumber,
|
message: ERROR_MESSAGES.required.cardNumber,
|
||||||
path: ['bpjsNumber'],
|
path: ['cardNumber'],
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
.refine(
|
.refine(
|
||||||
|
|||||||
Reference in New Issue
Block a user