diff --git a/app/components/app/encounter/entry-form.vue b/app/components/app/encounter/entry-form.vue index 34497de7..9950a3dd 100644 --- a/app/components/app/encounter/entry-form.vue +++ b/app/components/app/encounter/entry-form.vue @@ -23,6 +23,7 @@ import { paymentMethodCodes } from '~/const/key-val/common' // App things import { genEncounter, type Encounter } from '~/models/encounter' +import { se } from 'date-fns/locale' // Props const props = defineProps<{ @@ -48,7 +49,7 @@ const model = defineModel() model.value = genEncounter() // Common preparation -const defaultCBItems = [{ label: 'Pilih', value: '' }]; +const defaultCBItems = [{ label: 'Pilih', value: '' }] const paymentMethodItems = CB.recStrToItem(paymentMethodCodes) // Emit preparation @@ -95,7 +96,10 @@ const isInsurancePayment = computed(() => ['insurance', 'jkn'].includes(paymentM const isDateLoading = ref(false) const debouncedSepNumber = refDebounced(sepNumber, 500) const debouncedCardNumber = refDebounced(cardNumber, 500) +const sepFileReview = ref(null) +const sippFileReview = ref(null) const unitFullName = ref('') // Unit, specialist, subspecialist +const formRef = ref(null) // Expose submit method for parent component if (mode === 'add') { // Set default sepDate to current date in YYYY-MM-DD format @@ -106,11 +110,10 @@ if (mode === 'add') { registerDate.value = `${year}-${month}-${day}` } -watch(() => props.selectedDoctor, (doctor) => { - unitFullName.value = doctor.subspecialist?.name ?? - doctor.specialist?.name ?? - doctor.unit?.name ?? - 'tidak diketahui' +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 || '' @@ -126,12 +129,13 @@ watch( nationalIdentity.value = objects?.nationalIdentity || '' medicalRecordNumber.value = objects?.medicalRecordNumber || '' doctorCode.value = objects?.doctorCode || '' - // subSpecialistCode.value = objects?.subSpecialistCode || '' paymentMethodCode.value = objects?.paymentMethodCode || '' patientCategory.value = objects?.patientCategory || '' cardNumber.value = objects?.cardNumber || '' sepType.value = objects?.sepType || '' sepNumber.value = objects?.sepNumber || '' + sepFileReview.value = objects?.sepFileReview || '' + sippFileReview.value = objects?.sippFileReview || '' isDateLoading.value = true setTimeout(() => { registerDate.value = objects?.registerDate || '' @@ -181,11 +185,12 @@ function onAddSep() { const formValues = { patientId: patientId.value || '', doctorCode: doctorCode.value, - // subSpecialistCode: subSpecialistCode.value, registerDate: registerDate.value, cardNumber: cardNumber.value, paymentMethodCode: paymentMethodCode.value, - sepType: sepType.value + sepFile: sepFile.value, + sippFile: sippFile.value, + sepType: sepType.value, } emit('event', 'add-sep', formValues) } @@ -196,12 +201,20 @@ function onSearchSep() { // Submit handler const onSubmit = handleSubmit((values) => { - console.log('✅ Validated form values:', JSON.stringify(values, null, 2)) - emit('event', 'save', values) + let payload: any = values + if (props.mode === 'edit') { + payload = { + ...payload, + sepFileReview: sepFileReview.value, + sippFileReview: sippFileReview.value, + } + } + emit('event', 'save', payload) }) -// Expose submit method for parent component -const formRef = ref(null) +function openFile(path: string) { + window.open(path, '_blank') +} function submitForm() { // Trigger form submit using native form submit @@ -346,7 +359,10 @@ defineExpose({ * - + @@ -414,7 +430,7 @@ defineExpose({ placeholder="Pilih Kelompok Peserta" /> - + {{ noteReference }} @@ -433,7 +449,7 @@ defineExpose({ placeholder="Masukkan nomor kartu BPJS" /> -
@@ -553,11 +569,20 @@ defineExpose({ :max-size-mb="1" v-model="sepFile" v-bind="sepFileAttrs" - @file-selected="(file: any) => { console.log(file) }" + @file-selected="() => {}" /> {{ noteFile }} +

+ + {{ sepFileReview?.fileName }} + +

@@ -569,11 +594,20 @@ defineExpose({ :max-size-mb="1" v-model="sippFile" v-bind="sippFileAttrs" - @file-selected="(file: any) => { console.log(file) }" + @file-selected="() => {}" /> {{ noteFile }} +

+ + {{ sippFileReview?.fileName }} + +

@@ -591,13 +625,13 @@ defineExpose({ > - + - + @@ -635,13 +669,13 @@ defineExpose({ > - + - + diff --git a/app/components/app/encounter/filter-nav.vue b/app/components/app/encounter/filter-nav.vue index 947148aa..8f4c850e 100644 --- a/app/components/app/encounter/filter-nav.vue +++ b/app/components/app/encounter/filter-nav.vue @@ -18,25 +18,13 @@ const props = defineProps<{ onExportCsv?: () => void }>() -// function emitSearchNavClick() { -// props.refSearchNav?.onClick() -// } -// -// function onInput(event: Event) { -// props.refSearchNav?.onInput((event.target as HTMLInputElement).value) -// } -// -// function btnClick() { -// props.prep?.addNav?.onClick?.() -// } +const emit = defineEmits<{ + apply: [filters: { personName: string; startDate: string; endDate: string }] +}>() const searchQuery = ref('') const isRoleRegistration = props.activePositon === 'registration' const isRoleMedical = props.activePositon === 'medical' -const dateRange = ref<{ from: Date | null; to: Date | null }>({ - from: new Date(), - to: new Date(), -}) const df = new DateFormatter('en-US', { dateStyle: 'medium', @@ -49,31 +37,47 @@ const todayCalendar = new CalendarDate(today.getFullYear(), today.getMonth() + 1 // Get date 1 month ago const oneMonthAgo = new Date(today) oneMonthAgo.setMonth(today.getMonth() - 1) -const oneMonthAgoCalendar = new CalendarDate(oneMonthAgo.getFullYear(), oneMonthAgo.getMonth() + 1, oneMonthAgo.getDate()) +const oneMonthAgoCalendar = new CalendarDate( + oneMonthAgo.getFullYear(), + oneMonthAgo.getMonth() + 1, + oneMonthAgo.getDate(), +) const value = ref({ start: oneMonthAgoCalendar, end: todayCalendar, }) as Ref -// function onFilterClick() { -// console.log('Search:', searchQuery.value) -// console.log('Date Range:', dateRange.value) -// props.refSearchNav?.onClick() -// } +function onFilterClick() { + const startDate = value.value.start ? value.value.start.toString() : '' + const endDate = value.value.end ? value.value.end.toString() : startDate + + emit('apply', { + personName: searchQuery.value, + startDate, + endDate, + }) +} - + @@ -99,28 +103,32 @@ const value = ref({ - - - - Ekspor PDF - - - Ekspor CSV - - - Ekspor Excel - + Ekspor PDF + Ekspor CSV + Ekspor Excel diff --git a/app/components/app/prb/_common/btn-history.vue b/app/components/app/prb/_common/btn-history.vue new file mode 100644 index 00000000..972eab8e --- /dev/null +++ b/app/components/app/prb/_common/btn-history.vue @@ -0,0 +1,21 @@ + + + \ No newline at end of file diff --git a/app/components/app/prb/_common/filter.vue b/app/components/app/prb/_common/filter.vue new file mode 100644 index 00000000..d5e99b30 --- /dev/null +++ b/app/components/app/prb/_common/filter.vue @@ -0,0 +1,73 @@ + + + diff --git a/app/components/app/prb/_common/select-date.vue b/app/components/app/prb/_common/select-date.vue new file mode 100644 index 00000000..d94d04eb --- /dev/null +++ b/app/components/app/prb/_common/select-date.vue @@ -0,0 +1,119 @@ + + + diff --git a/app/components/app/prb/_common/select-dpjp.vue b/app/components/app/prb/_common/select-dpjp.vue new file mode 100644 index 00000000..9e83e64f --- /dev/null +++ b/app/components/app/prb/_common/select-dpjp.vue @@ -0,0 +1,86 @@ + + + diff --git a/app/components/app/prb/_common/select-medicine-form.vue b/app/components/app/prb/_common/select-medicine-form.vue new file mode 100644 index 00000000..9e83e64f --- /dev/null +++ b/app/components/app/prb/_common/select-medicine-form.vue @@ -0,0 +1,86 @@ + + + diff --git a/app/components/app/prb/_common/select-medicine.vue b/app/components/app/prb/_common/select-medicine.vue new file mode 100644 index 00000000..9e83e64f --- /dev/null +++ b/app/components/app/prb/_common/select-medicine.vue @@ -0,0 +1,86 @@ + + + diff --git a/app/components/app/prb/_common/select-program.vue b/app/components/app/prb/_common/select-program.vue new file mode 100644 index 00000000..cde3fb66 --- /dev/null +++ b/app/components/app/prb/_common/select-program.vue @@ -0,0 +1,77 @@ + + + diff --git a/app/components/app/prb/bpjs-list.cfg.ts b/app/components/app/prb/bpjs-list.cfg.ts new file mode 100644 index 00000000..92d68f73 --- /dev/null +++ b/app/components/app/prb/bpjs-list.cfg.ts @@ -0,0 +1,60 @@ +import type { Config } from '~/components/pub/my-ui/data-table' +import type { Patient } from '~/models/patient' +import { defineAsyncComponent } from 'vue' +import { educationCodes, genderCodes } from '~/lib/constants' +import { calculateAge } from '~/lib/utils' + +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-upd.vue')) + +export const config: Config = { + cols: [{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {width: 50}, ], + + headers: [ + [ + { label: 'No. PRB' }, + { label: 'No. RM' }, + { label: 'Nama Pasien' }, + { label: 'Jenis Kelamin' }, + { label: 'Alamat' }, + { label: 'Klinik' }, + { label: 'Nama Dokter' }, + { label: 'Tanggal' }, + { label: 'Program PRB' }, + { label: 'No. SEP' }, + { label: 'Action' }, + ], + ], + + keys: ['date', 'name1', 'name2', 'name3', 'name4', 'name5', 'name6', 'name7', 'name8', 'name9', 'action'], + + delKeyNames: [ + { key: 'code', label: 'Kode' }, + { key: 'name', label: 'Nama' }, + ], + + parses: { + date: (rec: unknown): unknown => { + const date = (rec as any).date + if (typeof date == 'object' && date) { + return (date as Date).toLocaleDateString('id-ID') + } else if (typeof date == 'string') { + return (date as string).substring(0, 10) + } + return date + }, + }, + + components: { + action(rec, idx) { + return { + idx, + rec: rec as object, + component: action, + } + }, + }, + + htmls: { + + }, +} diff --git a/app/components/app/prb/detail.vue b/app/components/app/prb/detail.vue new file mode 100644 index 00000000..7e40366d --- /dev/null +++ b/app/components/app/prb/detail.vue @@ -0,0 +1,62 @@ + + + + + diff --git a/app/components/app/prb/entry.vue b/app/components/app/prb/entry.vue new file mode 100644 index 00000000..4658578a --- /dev/null +++ b/app/components/app/prb/entry.vue @@ -0,0 +1,102 @@ + + + diff --git a/app/components/app/prb/history-list.cfg.ts b/app/components/app/prb/history-list.cfg.ts new file mode 100644 index 00000000..6f571af3 --- /dev/null +++ b/app/components/app/prb/history-list.cfg.ts @@ -0,0 +1,62 @@ +import type { Config } from '~/components/pub/my-ui/data-table' +import { defineAsyncComponent } from 'vue' + +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-print.vue')) +const statusBadge = defineAsyncComponent(() => import('~/components/pub/my-ui/badge/status-badge.vue')) + +export const config: Config = { + cols: [{}, {}, {}, {}, {}, {}, {width: 100}, {width: 50}, ], + + headers: [ + [ + { label: 'Tgl Diterbitkan' }, + { label: 'Kode Obat' }, + { label: 'Nama Obat' }, + { label: 'Signa' }, + { label: 'Jumlah' }, + { label: 'Durasi Pemberian' }, + { label: 'status' }, + { label: 'Action' }, + ], + ], + + keys: ['date', 'name1', 'name2', 'name3', 'name4', 'name5', 'status', 'action'], + + delKeyNames: [ + { key: 'code', label: 'Kode' }, + { key: 'name', label: 'Nama' }, + ], + + parses: { + date: (rec: unknown): unknown => { + const date = (rec as any).date + if (typeof date == 'object' && date) { + return (date as Date).toLocaleDateString('id-ID') + } else if (typeof date == 'string') { + return (date as string).substring(0, 10) + } + return date + }, + }, + + components: { + action(rec, idx) { + return { + idx, + rec: rec as object, + component: action, + } + }, + status(rec, idx) { + return { + idx, + rec: rec as object, + component: statusBadge, + } + }, + }, + + htmls: { + + }, +} diff --git a/app/components/app/prb/history-list.vue b/app/components/app/prb/history-list.vue new file mode 100644 index 00000000..20cc7eaf --- /dev/null +++ b/app/components/app/prb/history-list.vue @@ -0,0 +1,35 @@ + + + \ No newline at end of file diff --git a/app/components/app/prb/list.cfg.ts b/app/components/app/prb/list.cfg.ts new file mode 100644 index 00000000..4da07cdd --- /dev/null +++ b/app/components/app/prb/list.cfg.ts @@ -0,0 +1,56 @@ +import type { Config } from '~/components/pub/my-ui/data-table' +import type { Patient } from '~/models/patient' +import { defineAsyncComponent } from 'vue' +import { educationCodes, genderCodes } from '~/lib/constants' +import { calculateAge } from '~/lib/utils' + +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-upd.vue')) + +export const config: Config = { + cols: [{}, {}, {}, {}, {}, {}, {width: 50}, ], + + headers: [ + [ + { label: 'Tgl Diterbitkan' }, + { label: 'Kode Obat' }, + { label: 'Nama Obat' }, + { label: 'Signa' }, + { label: 'Jumlah' }, + { label: 'Durasi Pemberian' }, + { label: 'Action' }, + ], + ], + + keys: ['date', 'name1', 'name2', 'name3', 'name4', 'name5', 'action'], + + delKeyNames: [ + { key: 'code', label: 'Kode' }, + { key: 'name', label: 'Nama' }, + ], + + parses: { + date: (rec: unknown): unknown => { + const date = (rec as any).date + if (typeof date == 'object' && date) { + return (date as Date).toLocaleDateString('id-ID') + } else if (typeof date == 'string') { + return (date as string).substring(0, 10) + } + return date + }, + }, + + components: { + action(rec, idx) { + return { + idx, + rec: rec as object, + component: action, + } + }, + }, + + htmls: { + + }, +} diff --git a/app/components/app/prb/list.vue b/app/components/app/prb/list.vue new file mode 100644 index 00000000..5e51b50f --- /dev/null +++ b/app/components/app/prb/list.vue @@ -0,0 +1,34 @@ + + + diff --git a/app/components/app/prb/obat-picker/form.vue b/app/components/app/prb/obat-picker/form.vue new file mode 100644 index 00000000..510cae69 --- /dev/null +++ b/app/components/app/prb/obat-picker/form.vue @@ -0,0 +1,114 @@ + + + \ No newline at end of file diff --git a/app/components/app/prb/obat-picker/picker-dialog.vue b/app/components/app/prb/obat-picker/picker-dialog.vue new file mode 100644 index 00000000..69ea3b90 --- /dev/null +++ b/app/components/app/prb/obat-picker/picker-dialog.vue @@ -0,0 +1,140 @@ + + + diff --git a/app/components/app/prb/sep-picker/list.cfg.ts b/app/components/app/prb/sep-picker/list.cfg.ts new file mode 100644 index 00000000..5a928e2d --- /dev/null +++ b/app/components/app/prb/sep-picker/list.cfg.ts @@ -0,0 +1,83 @@ +import type { Config } from '~/components/pub/my-ui/data-table' +import { defineAsyncComponent } from 'vue' + +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-choose.vue')) +const statusBadge = defineAsyncComponent(() => import('~/components/pub/my-ui/badge/status-badge.vue')) + +export const config: Config = { + cols: [ + { width: 120 }, // TGL. SEP + { width: 150 }, // NO. SEP + { width: 120 }, // PELAYANAN + { width: 100 }, // JALUR + { width: 150 }, // NO. RM + { width: 200 }, // NAMA PASIEN + { width: 150 }, // NO. KARTU BPJS + { width: 150 }, // NO. SURAT KONTROL + { width: 150 }, // TGL SURAT KONTROL + { width: 150 }, // KLINIK TUJUAN + { width: 200 }, // DPJP + { width: 200 }, // DIAGNOSIS AWAL + { width: 100 }, // AKSI + ], + + headers: [ + [ + { label: 'TGL. SEP' }, + { label: 'NO. SEP' }, + { label: 'PELAYANAN' }, + { label: 'JALUR' }, + { label: 'NO. RM' }, + { label: 'NAMA PASIEN' }, + { label: 'NO. KARTU BPJS' }, + { label: 'NO. SURAT KONTROL' }, + { label: 'TGL SURAT KONTROL' }, + { label: 'KLINIK TUJUAN' }, + { label: 'DPJP' }, + { label: 'DIAGNOSIS AWAL' }, + { label: 'AKSI' }, + ], + ], + + keys: [ + 'letterDate', + 'letterNumber', + 'serviceType', + 'flow', + 'medicalRecordNumber', + 'patientName', + 'cardNumber', + 'controlLetterNumber', + 'controlLetterDate', + 'clinicDestination', + 'attendingDoctor', + 'diagnosis', + 'action', + ], + + delKeyNames: [ + { key: 'letterNumber', label: 'NO. SEP' }, + { key: 'patientName', label: 'Nama Pasien' }, + ], + + parses: {}, + + components: { + action(rec, idx) { + return { + idx, + rec: rec as object, + component: action, + } + }, + status(rec, idx) { + return { + idx, + rec: rec as object, + component: statusBadge, + } + }, + }, + + htmls: {}, +} \ No newline at end of file diff --git a/app/components/app/prb/sep-picker/list.vue b/app/components/app/prb/sep-picker/list.vue new file mode 100644 index 00000000..9c8aa593 --- /dev/null +++ b/app/components/app/prb/sep-picker/list.vue @@ -0,0 +1,53 @@ + + + diff --git a/app/components/app/prb/sep-picker/picker-dialog.vue b/app/components/app/prb/sep-picker/picker-dialog.vue new file mode 100644 index 00000000..efb32023 --- /dev/null +++ b/app/components/app/prb/sep-picker/picker-dialog.vue @@ -0,0 +1,141 @@ + + + diff --git a/app/components/app/sep/entry-form.vue b/app/components/app/sep/entry-form.vue index f921d633..594d2f02 100644 --- a/app/components/app/sep/entry-form.vue +++ b/app/components/app/sep/entry-form.vue @@ -142,7 +142,6 @@ const onSaveNumber = () => { // Submit handler const onSubmit = handleSubmit((values) => { - console.log('✅ Validated form values:', JSON.stringify(values, null, 2)) emit('event', 'save-sep', values) }) diff --git a/app/components/app/vaccine-data/_common/select-date.vue b/app/components/app/vaccine-data/_common/select-date.vue new file mode 100644 index 00000000..d94d04eb --- /dev/null +++ b/app/components/app/vaccine-data/_common/select-date.vue @@ -0,0 +1,119 @@ + + + diff --git a/app/components/app/vaccine-data/_common/select-vaccine-type.vue b/app/components/app/vaccine-data/_common/select-vaccine-type.vue new file mode 100644 index 00000000..cde3fb66 --- /dev/null +++ b/app/components/app/vaccine-data/_common/select-vaccine-type.vue @@ -0,0 +1,77 @@ + + + diff --git a/app/components/app/vaccine-data/detail.vue b/app/components/app/vaccine-data/detail.vue new file mode 100644 index 00000000..2c79e461 --- /dev/null +++ b/app/components/app/vaccine-data/detail.vue @@ -0,0 +1,68 @@ + + + + + diff --git a/app/components/app/vaccine-data/entry.vue b/app/components/app/vaccine-data/entry.vue new file mode 100644 index 00000000..4b8f291b --- /dev/null +++ b/app/components/app/vaccine-data/entry.vue @@ -0,0 +1,82 @@ + + + diff --git a/app/components/app/vaccine-data/list-doctor.cfg.ts b/app/components/app/vaccine-data/list-doctor.cfg.ts new file mode 100644 index 00000000..be938aa5 --- /dev/null +++ b/app/components/app/vaccine-data/list-doctor.cfg.ts @@ -0,0 +1,53 @@ +import type { Config } from '~/components/pub/my-ui/data-table' +import { defineAsyncComponent } from 'vue' +import actionDoctor from '~/components/pub/my-ui/data/dropdown-action-dd.vue' +import actionNursePhysio from '~/components/pub/my-ui/data/dropdown-action-detail.vue' + +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-dd.vue')) + +export const config: Config = { + cols: [{}, {}, {}, {}, {width: 50}, ], + + headers: [ + [ + { label: 'Jenis Vaksin' }, + { label: 'Tanggal Pemberian Vaksin' }, + { label: 'Tanggal Kedaluwarsa Vaksin' }, + { label: 'Dosis Ke' }, + { label: 'Action' }, + ], + ], + + keys: ['name1', 'date', 'date', 'name2', 'action'], + + delKeyNames: [ + { key: 'code', label: 'Kode' }, + { key: 'name', label: 'Nama' }, + ], + + parses: { + date: (rec: unknown): unknown => { + const date = (rec as any).date + if (typeof date == 'object' && date) { + return (date as Date).toLocaleDateString('id-ID') + } else if (typeof date == 'string') { + return (date as string).substring(0, 10) + } + return date + }, + }, + + components: { + action(rec, idx) { + return { + idx, + rec: rec as object, + component: action, + } + }, + }, + + htmls: { + + }, +} diff --git a/app/components/app/vaccine-data/list-nurse-physio.cfg.ts b/app/components/app/vaccine-data/list-nurse-physio.cfg.ts new file mode 100644 index 00000000..acfc698c --- /dev/null +++ b/app/components/app/vaccine-data/list-nurse-physio.cfg.ts @@ -0,0 +1,53 @@ +import type { Config } from '~/components/pub/my-ui/data-table' +import { defineAsyncComponent } from 'vue' +import actionDoctor from '~/components/pub/my-ui/data/dropdown-action-dd.vue' +import actionNursePhysio from '~/components/pub/my-ui/data/dropdown-action-detail.vue' + +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-detail.vue')) + +export const config: Config = { + cols: [{}, {}, {}, {}, {width: 50}, ], + + headers: [ + [ + { label: 'Jenis Vaksin' }, + { label: 'Tanggal Pemberian Vaksin' }, + { label: 'Tanggal Kedaluwarsa Vaksin' }, + { label: 'Dosis Ke' }, + { label: 'Action' }, + ], + ], + + keys: ['name1', 'date', 'date', 'name2', 'action'], + + delKeyNames: [ + { key: 'code', label: 'Kode' }, + { key: 'name', label: 'Nama' }, + ], + + parses: { + date: (rec: unknown): unknown => { + const date = (rec as any).date + if (typeof date == 'object' && date) { + return (date as Date).toLocaleDateString('id-ID') + } else if (typeof date == 'string') { + return (date as string).substring(0, 10) + } + return date + }, + }, + + components: { + action(rec, idx) { + return { + idx, + rec: rec as object, + component: action, + } + }, + }, + + htmls: { + + }, +} diff --git a/app/components/app/vaccine-data/list.vue b/app/components/app/vaccine-data/list.vue new file mode 100644 index 00000000..7960112b --- /dev/null +++ b/app/components/app/vaccine-data/list.vue @@ -0,0 +1,41 @@ + + + diff --git a/app/components/content/control-letter/list.vue b/app/components/content/control-letter/list.vue index 9be22012..5a879eb4 100644 --- a/app/components/content/control-letter/list.vue +++ b/app/components/content/control-letter/list.vue @@ -143,7 +143,7 @@ watch([recId, recAction, timestamp], () => { break case ActionEvents.showEdit: - if(pagePermission.canUpdate){ + if(pagePermission.canUpdate){ navigateTo({ name: 'rehab-encounter-id-control-letter-control_letter_id-edit', params: { id: encounterId, "control_letter_id": recId.value }, @@ -186,7 +186,7 @@ watch([recId, recAction, timestamp], () => { @click="isHistoryDialogOpen = true"> Riwayat Program Nasional
- + @@ -212,7 +212,7 @@ watch([recId, recAction, timestamp], () => { - + ({}) const activeServicePosition = ref(getServicePosition(getActiveRole())) const isLoading = reactive({ summary: false, @@ -99,27 +104,30 @@ provide('rec_action', recAction) provide('rec_item', recItem) provide('table_data_loader', isLoading) -watch(getActiveRole, (role? : string) => { +watch(getActiveRole, (role?: string) => { activeServicePosition.value = getServicePosition(role) }) -watch(() => recAction.value, () => { - const basePath = `/${props.classCode}/encounter` - if (recAction.value === ActionEvents.showConfirmDelete) { - isRecordConfirmationOpen.value = true - } else if (recAction.value === ActionEvents.showCancel) { - isRecordCancelOpen.value = true - } else if (recAction.value === ActionEvents.showDetail) { - navigateTo(`${basePath}/${recId.value}/detail`) - } else if (recAction.value === ActionEvents.showEdit) { - navigateTo(`${basePath}/${recId.value}/edit`) - } else if (recAction.value === ActionEvents.showProcess) { - navigateTo(`${basePath}/${recId.value}/process`) - } else if (recAction.value === ActionEvents.showConfirmDelete) { - isRecordConfirmationOpen.value = true - } - recAction.value = '' // reset -}) +watch( + () => recAction.value, + () => { + const basePath = `/${props.classCode}/encounter` + if (recAction.value === ActionEvents.showConfirmDelete) { + isRecordConfirmationOpen.value = true + } else if (recAction.value === ActionEvents.showCancel) { + isRecordCancelOpen.value = true + } else if (recAction.value === ActionEvents.showDetail) { + navigateTo(`${basePath}/${recId.value}/detail`) + } else if (recAction.value === ActionEvents.showEdit) { + navigateTo(`${basePath}/${recId.value}/edit`) + } else if (recAction.value === ActionEvents.showProcess) { + navigateTo(`${basePath}/${recId.value}/process`) + } else if (recAction.value === ActionEvents.showConfirmDelete) { + isRecordConfirmationOpen.value = true + } + recAction.value = '' // reset + }, +) onMounted(() => { getPatientList() @@ -128,13 +136,16 @@ onMounted(() => { /////// Functions async function getPatientList() { isLoading.isTableLoading = true + const includesParams = + 'patient,patient-person,patient-person-addresses,unit,Appointment_Doctor,Appointment_Doctor-employee,Appointment_Doctor-employee-person,Responsible_Doctor,Responsible_Doctor-employee,Responsible_Doctor-employee-person' + data.value = [] try { - const params: any = { includes: 'patient,patient-person' } + const params: any = { includes: includesParams, ...filterParams.value } if (props.classCode) { - params['class-code'] = props.classCode + params.class_code = props.classCode } if (props.subClassCode) { - params['sub-class-code'] = props.subClassCode + params.sub_class_code = props.subClassCode } const result = await getEncounterList(params) if (result.success) { @@ -148,6 +159,15 @@ async function getPatientList() { } } +function handleFilterApply(filters: { personName: string; startDate: string; endDate: string }) { + filterParams.value = { + 'person-name': filters.personName, + 'start-date': filters.startDate, + 'end-date': filters.endDate, + } + getPatientList() +} + // Handle confirmation result async function handleConfirmCancel(record: any, action: string) { if (action === 'deactivate' && record?.id) { @@ -243,7 +263,7 @@ function handleRemoveConfirmation() { - + diff --git a/app/components/content/encounter/process-bu.vue b/app/components/content/encounter/process-bu.vue index 02fc7495..8285d5e6 100644 --- a/app/components/content/encounter/process-bu.vue +++ b/app/components/content/encounter/process-bu.vue @@ -26,6 +26,7 @@ import DocUploadList from '~/components/content/document-upload/list.vue' import GeneralConsentList from '~/components/content/general-consent/entry.vue' import ResumeList from '~/components/content/resume/list.vue' import ControlLetterList from '~/components/content/control-letter/list.vue' +import VaccineDataList from '~/components/content/vaccine-data/list.vue' const route = useRoute() const router = useRouter() @@ -96,6 +97,7 @@ const tabs: TabItem[] = [ component: DocUploadList, props: { encounter: data }, }, + { value: 'vaccine-data', label: 'Data Vaksin', component: VaccineDataList, props: { encounter: data } }, ] diff --git a/app/components/content/encounter/process.vue b/app/components/content/encounter/process.vue index c5e0a5e4..244d2b7e 100644 --- a/app/components/content/encounter/process.vue +++ b/app/components/content/encounter/process.vue @@ -214,4 +214,4 @@ async function getData() { @change-menu="activeMenu = $event" /> - + \ No newline at end of file diff --git a/app/components/content/prb/bpjs-list.vue b/app/components/content/prb/bpjs-list.vue new file mode 100644 index 00000000..8ce0d050 --- /dev/null +++ b/app/components/content/prb/bpjs-list.vue @@ -0,0 +1,225 @@ + + + diff --git a/app/components/content/prb/detail.vue b/app/components/content/prb/detail.vue new file mode 100644 index 00000000..4de8f260 --- /dev/null +++ b/app/components/content/prb/detail.vue @@ -0,0 +1,65 @@ + + + diff --git a/app/components/content/prb/entry.vue b/app/components/content/prb/entry.vue new file mode 100644 index 00000000..244c49b0 --- /dev/null +++ b/app/components/content/prb/entry.vue @@ -0,0 +1,160 @@ + + + + + diff --git a/app/components/content/prb/list.vue b/app/components/content/prb/list.vue new file mode 100644 index 00000000..a1c09696 --- /dev/null +++ b/app/components/content/prb/list.vue @@ -0,0 +1,202 @@ + + + diff --git a/app/components/content/vaccine-data/detail.vue b/app/components/content/vaccine-data/detail.vue new file mode 100644 index 00000000..fd977b39 --- /dev/null +++ b/app/components/content/vaccine-data/detail.vue @@ -0,0 +1,65 @@ + + + diff --git a/app/components/content/vaccine-data/entry.vue b/app/components/content/vaccine-data/entry.vue new file mode 100644 index 00000000..60fe3775 --- /dev/null +++ b/app/components/content/vaccine-data/entry.vue @@ -0,0 +1,159 @@ + + + + + diff --git a/app/components/content/vaccine-data/list.vue b/app/components/content/vaccine-data/list.vue new file mode 100644 index 00000000..a701271e --- /dev/null +++ b/app/components/content/vaccine-data/list.vue @@ -0,0 +1,165 @@ + + + diff --git a/app/components/pub/my-ui/data/dropdown-action-choose.vue b/app/components/pub/my-ui/data/dropdown-action-choose.vue new file mode 100644 index 00000000..8fb63f33 --- /dev/null +++ b/app/components/pub/my-ui/data/dropdown-action-choose.vue @@ -0,0 +1,30 @@ + + + diff --git a/app/components/pub/my-ui/data/dropdown-action-detail.vue b/app/components/pub/my-ui/data/dropdown-action-detail.vue new file mode 100644 index 00000000..b695fb5c --- /dev/null +++ b/app/components/pub/my-ui/data/dropdown-action-detail.vue @@ -0,0 +1,30 @@ + + + diff --git a/app/components/pub/my-ui/data/dropdown-action-print.vue b/app/components/pub/my-ui/data/dropdown-action-print.vue new file mode 100644 index 00000000..99a7da03 --- /dev/null +++ b/app/components/pub/my-ui/data/dropdown-action-print.vue @@ -0,0 +1,31 @@ + + + diff --git a/app/components/pub/my-ui/data/dropdown-action-upd.vue b/app/components/pub/my-ui/data/dropdown-action-upd.vue new file mode 100644 index 00000000..611e53d2 --- /dev/null +++ b/app/components/pub/my-ui/data/dropdown-action-upd.vue @@ -0,0 +1,94 @@ + + + diff --git a/app/handlers/encounter-entry.handler.ts b/app/handlers/encounter-entry.handler.ts index cc5eda23..5f632ac2 100644 --- a/app/handlers/encounter-entry.handler.ts +++ b/app/handlers/encounter-entry.handler.ts @@ -13,6 +13,9 @@ import { genDoctor, type Doctor } from '~/models/doctor' // Stores import { useUserStore } from '~/stores/user' +// Handlers +import { uploadAttachmentCustom } from '~/handlers/supporting-document.handler' + // Services import { getList as getSpecialistList, @@ -26,7 +29,6 @@ import { } from '~/services/encounter.service' import { getList as getMemberList } from '~/services/vclaim-member.service' import { getList as getSepList } from '~/services/vclaim-sep.service' -import { uploadAttachment } from '~/services/supporting-document.service' // Handlers import { @@ -468,6 +470,19 @@ export function useEncounterEntry(props: { if (formData.subSpecialistId) { await handleFetchDoctors(formData.subSpecialistId) } + if (encounter.encounterDocuments && Array.isArray(encounter.encounterDocuments)) { + let sepFileReview = {} + let sippFileReview = {} + for (const doc of encounter.encounterDocuments) { + if (doc.type_code === 'vclaim-sep') { + sepFileReview = { id: doc.id, fileName: doc.fileName, filePath: doc.filePath, type: doc.type_code } + } else if (doc.type_code === 'vclaim-sipp') { + sippFileReview = { id: doc.id, fileName: doc.fileName, filePath: doc.filePath, type: doc.type_code } + } + } + formData.sepFileReview = sepFileReview + formData.sippFileReview = sippFileReview + } formObjects.value = { ...formData } } @@ -501,6 +516,8 @@ export function useEncounterEntry(props: { const visitDateValue = formValues.visitDate || formValues.registeredAt || formValues.registerDate || '' const memberNumber = formValues.member_number ?? formValues.cardNumber ?? formValues.memberNumber ?? null const refNumber = formValues.ref_number ?? formValues.sepNumber ?? formValues.refNumber ?? null + sepFile.value = formValues.sepFile || null + sippFile.value = formValues.sippFile || null let paymentMethodCode = formValues.paymentMethod_code ?? null if (!paymentMethodCode) { @@ -517,7 +534,7 @@ export function useEncounterEntry(props: { const payload: any = { patient_id: patientId, - appointment_doctor_code: formValues.doctorId || null, + appointment_doctor_code: formValues.doctor_code || null, class_code: props.classCode || '', subClass_code: props.subClassCode || '', infra_id: formValues.infra_id ?? null, @@ -545,18 +562,21 @@ export function useEncounterEntry(props: { if (paymentMethodCode) { payload.paymentMethod_code = paymentMethodCode } + if (!payload.vclaimReference) { + payload.vclaimReference = { + noSep: refNumber, + } + } if (paymentMethodCode === 'insurance') { payload.insuranceCompany_id = formValues.insuranceCompany_id ?? null if (memberNumber) payload.member_number = memberNumber - // if (refNumber) payload.ref_number = refNumber if (formValues.refTypeCode) payload.refTypeCode = formValues.refTypeCode if (formValues.vclaimReference) payload.vclaimReference = formValues.vclaimReference } else { if (paymentMethodCode === 'membership' && memberNumber) { payload.member_number = memberNumber } - // if (refNumber) payload.ref_number = refNumber } if (isAdmin && props.classCode === 'ambulatory') { @@ -573,16 +593,26 @@ export function useEncounterEntry(props: { } if (result.success) { - console.log(result) - console.log(sepFile.value) - console.log(sippFile.value) - // const encounterId = isEditMode.value ? props.id : result.body?.data?.id - if (patientId) { + const encounterId = isEditMode.value ? props.id : result.body?.data?.id + + if (encounterId) { if (sepFile.value) { - await uploadAttachment(sepFile.value, patientId, 'vclaim-sep') + await uploadAttachmentCustom({ + id: isEditMode.value && formValues.sepFileReview ? formValues.sepFileReview.id : null, + file: sepFile.value, + refId: encounterId, + entityTypeCode: 'encounter', + type: 'vclaim-sep', + }) } if (sippFile.value) { - await uploadAttachment(sippFile.value, patientId, 'vclaim-sipp') + await uploadAttachmentCustom({ + id: isEditMode.value && formValues.sippFileReview ? formValues.sippFileReview.id : null, + file: sippFile.value, + refId: encounterId, + entityTypeCode: 'encounter', + type: 'vclaim-sipp', + }) } } @@ -620,8 +650,6 @@ export function useEncounterEntry(props: { paymentsList, sepsList, sepNumber, - sepFile, - sippFile, participantGroupsList, specialistsTree, doctorsList, diff --git a/app/handlers/encounter-init.handler.ts b/app/handlers/encounter-init.handler.ts index dd04ce47..37f83605 100644 --- a/app/handlers/encounter-init.handler.ts +++ b/app/handlers/encounter-init.handler.ts @@ -49,6 +49,10 @@ const DocUploadListAsync = defineAsyncComponent(() => import('~/components/conte const GeneralConsentListAsync = defineAsyncComponent(() => import('~/components/content/general-consent/entry.vue')) const ResumeListAsync = defineAsyncComponent(() => import('~/components/content/resume/list.vue')) const ControlLetterListAsync = defineAsyncComponent(() => import('~/components/content/control-letter/list.vue')) +const KfrListAsync = defineAsyncComponent(() => import('~/components/content/kfr/list.vue')) +const PrbListAsync = defineAsyncComponent(() => import('~/components/content/prb/list.vue')) +const SurgeryReportListAsync = defineAsyncComponent(() => import('~/components/content/surgery-report/list.vue')) +const VaccineDataListAsync = defineAsyncComponent(() => import('~/components/content/vaccine-data/list.vue')) const InitialNursingStudyAsync = defineAsyncComponent(() => import('~/components/content/initial-nursing/entry.vue')) const defaultKeys: Record = { @@ -189,8 +193,8 @@ const defaultKeys: Record = { classCode: ['ambulatory', 'emergency', 'inpatient'], unit: 'all', }, - vacsinData: { - id: 'vacsin-data', + vaccineData: { + id: 'vaccine-data', title: 'Data Vaksin', classCode: ['ambulatory', 'emergency', 'inpatient'], unit: 'all', @@ -213,6 +217,12 @@ const defaultKeys: Record = { classCode: ['ambulatory', 'emergency'], unit: 'all', }, + fkr: { + id: 'fkr', + title: 'FKR', + classCode: ['ambulatory', 'emergency', 'inpatient'], + unit: 'all', + }, refBack: { id: 'reference-back', title: 'PRB', @@ -394,15 +404,31 @@ export function injectComponents(id: string | number, data: EncounterListData, m currentKeys.resume['component'] = ResumeListAsync currentKeys.resume['props'] = { encounter_id: id } } - if (currentKeys?.control) { - currentKeys.control['component'] = ControlLetterListAsync - currentKeys.control['props'] = { encounter: data?.encounter } + if (currentKeys?.controlLetter) { + currentKeys.controlLetter['component'] = ControlLetterListAsync + currentKeys.controlLetter['props'] = { encounter: data?.encounter } + } + if (currentKeys?.refBack) { + currentKeys.refBack['component'] = PrbListAsync + currentKeys.refBack['props'] = { encounter: data?.encounter } + } + if (currentKeys?.fkr) { + currentKeys.fkr['component'] = KfrListAsync + currentKeys.fkr['props'] = { encounter: data?.encounter } } if (currentKeys?.screening) { // TODO: add component for screening currentKeys.screening['component'] = null currentKeys.screening['props'] = { encounter_id: id } } + if (currentKeys?.surgeryReport) { + currentKeys.surgeryReport['component'] = SurgeryReportListAsync + currentKeys.surgeryReport['props'] = { encounter: data?.encounter } + } + if (currentKeys?.vaccineData) { + currentKeys.vaccineData['component'] = VaccineDataListAsync + currentKeys.vaccineData['props'] = { encounter: data?.encounter } + } if (currentKeys?.supportingDocument) { currentKeys.supportingDocument['component'] = DocUploadListAsync currentKeys.supportingDocument['props'] = { encounter_id: id } @@ -497,7 +523,13 @@ export function mapResponseToEncounter(result: any): any { return mapped } -export function getMenuItems(id: string | number, props: any, user: any, data: EncounterListData, meta: any) { +export function getMenuItems( + id: string | number, + props: any, + user: any, + data: EncounterListData, + meta: any, +) { // const normalClassCode = props.classCode === 'ambulatory' ? 'outpatient' : props.classCode const normalClassCode = props.classCode === 'ambulatory' ? 'ambulatory' : props.classCode const currentKeys = injectComponents(id, data, meta) diff --git a/app/handlers/integration-sep-entry.handler.ts b/app/handlers/integration-sep-entry.handler.ts index 7569980a..d9ce2e31 100644 --- a/app/handlers/integration-sep-entry.handler.ts +++ b/app/handlers/integration-sep-entry.handler.ts @@ -256,6 +256,8 @@ export function useIntegrationSepEntry() { }, ] } else { + const destA = lettersRaw?.rujukan?.provPerujuk?.Kode + const destB = lettersRaw?.rujukan?.provPerujuk?.kode letters.value = [ { letterNumber: lettersRaw?.rujukan?.noKunjungan || '', @@ -276,7 +278,7 @@ export function useIntegrationSepEntry() { patientName: lettersRaw?.rujukan?.peserta?.nama || '', patientPhone: lettersRaw?.rujukan?.peserta?.mr?.noTelepon || '', medicalRecordNumber: lettersRaw?.rujukan?.peserta?.mr?.noMR || '', - destination: lettersRaw?.rujukan?.provPerujuk?.kode || '', + destination: destA || destB || '', }, }, ] @@ -480,7 +482,7 @@ export function useIntegrationSepEntry() { } if (!value.destinationClinic) { - mappedValues.destinationClinic = selectedObjects.value['destination'] || '' + mappedValues.referralTo = selectedObjects.value['destination'] || '' } if (!value.clinicExcecutive) { mappedValues.clinicExcecutive = 'no' diff --git a/app/handlers/prb.handler.ts b/app/handlers/prb.handler.ts new file mode 100644 index 00000000..bfff163b --- /dev/null +++ b/app/handlers/prb.handler.ts @@ -0,0 +1,24 @@ +// Handlers +import { genCrudHandler } from '~/handlers/_handler' + +// Services +import { create, update, remove } from '~/services/prb.service' + +export const { + recId, + recAction, + recItem, + isReadonly, + isProcessing, + isFormEntryDialogOpen, + isRecordConfirmationOpen, + onResetState, + handleActionSave, + handleActionEdit, + handleActionRemove, + handleCancelForm, +} = genCrudHandler({ + create, + update, + remove, +}) diff --git a/app/handlers/supporting-document.handler.ts b/app/handlers/supporting-document.handler.ts index 70b29612..87ff864a 100644 --- a/app/handlers/supporting-document.handler.ts +++ b/app/handlers/supporting-document.handler.ts @@ -22,3 +22,17 @@ export const { update, remove, }) + +export async function uploadAttachmentCustom(payload: any) { + const { user } = useUserStore() + + const formData = new FormData() + formData.append('content', payload.file) + formData.append('entityType_code', payload.entityTypeCode) + formData.append('type_code', payload.type) + formData.append('ref_id', payload.refId) + formData.append('upload_employee_id', user.employee_id) + + const response = payload.id ? await update(payload.id, formData) : await create(formData) + return response?.body?.data +} diff --git a/app/handlers/vaccine-data.handler.ts b/app/handlers/vaccine-data.handler.ts new file mode 100644 index 00000000..7f5fa1b6 --- /dev/null +++ b/app/handlers/vaccine-data.handler.ts @@ -0,0 +1,24 @@ +// Handlers +import { genCrudHandler } from '~/handlers/_handler' + +// Services +import { create, update, remove } from '~/services/vaccine-data.service' + +export const { + recId, + recAction, + recItem, + isReadonly, + isProcessing, + isFormEntryDialogOpen, + isRecordConfirmationOpen, + onResetState, + handleActionSave, + handleActionEdit, + handleActionRemove, + handleCancelForm, +} = genCrudHandler({ + create, + update, + remove, +}) diff --git a/app/lib/constants.ts b/app/lib/constants.ts index cd62f150..b827ef40 100644 --- a/app/lib/constants.ts +++ b/app/lib/constants.ts @@ -488,4 +488,16 @@ export const SpecimenTypeOptList: { label: string; value: SpecimenType }[] = [ { label: 'Mikrobiologi', value: 'mikrobiologi' }, { label: 'Laborat', value: 'laborat' }, { label: 'Tidak perlu', value: 'tidak perlu' }, +] + +export type PrbProgramType = "ashma" | "diabetes mellitus" | "hipertensi" | "penyakit jantung" | "ppok" | "schizopherenia" | "stroke" | "systemic lupus erythematosus" +export const PrbProgramTypeOptList: { label: string; value: PrbProgramType }[] = [ + { label: 'ASHMA', value: 'ashma' }, + { label: 'Diabetes Mellitus', value: 'diabetes mellitus' }, + { label: 'Hipertensi', value: 'hipertensi' }, + { label: 'Penyakit Jantung', value: 'penyakit jantung' }, + { label: 'PPOK (Penyakit Paru Obstruktif Kronik)', value: 'ppok' }, + { label: 'Schizopherenia', value: 'schizopherenia' }, + { label: 'Stroke', value: 'stroke' }, + { label: 'Systemic Lupus Erythematosus', value: 'systemic lupus erythematosus' }, ] \ No newline at end of file diff --git a/app/lib/utils.ts b/app/lib/utils.ts index e201a439..180320ae 100644 --- a/app/lib/utils.ts +++ b/app/lib/utils.ts @@ -1,5 +1,6 @@ import type { ClassValue } from 'clsx' import { clsx } from 'clsx' +import { format } from 'date-fns' import { twMerge } from 'tailwind-merge' import { toast } from '~/components/pub/ui/toast' @@ -106,6 +107,11 @@ export function calculateAge(birthDate: Date | string | null | undefined): strin } } +export function formatDateToDatetimeLocal(inputDate: Date) { + const formattedString = format(inputDate, "yyyy-MM-dd'T'HH:mm") + return formattedString +} + /** * Converts a plain JavaScript object (including File objects) into a FormData instance. diff --git a/app/models/prb.ts b/app/models/prb.ts new file mode 100644 index 00000000..2997b5b3 --- /dev/null +++ b/app/models/prb.ts @@ -0,0 +1,37 @@ +import { type Base, genBase } from "./_base" +import { genDoctor, type Doctor } from "./doctor" +import { genEncounter, type Encounter } from "./encounter" +import { genSpecialist, type Specialist } from "./specialist" +import { genSubspecialist, type Subspecialist } from "./subspecialist" +import { genUnit, type Unit } from "./unit" + +export interface Prb extends Base { + encounter_id: number + encounter: Encounter + unit_id: number + unit: Unit + specialist_id: number + specialist: Specialist + subspecialist_id: number + subspecialist: Subspecialist + doctor_id: number + doctor: Doctor + date: '' +} + +export function genPrb(): Prb { + return { + ...genBase(), + encounter_id: 0, + encounter: genEncounter(), + unit_id: 0, + unit: genUnit(), + specialist_id: 0, + specialist: genSpecialist(), + subspecialist_id: 0, + subspecialist: genSubspecialist(), + doctor_id: 0, + doctor: genDoctor(), + date: '' + } +} diff --git a/app/models/vaccine-data.ts b/app/models/vaccine-data.ts new file mode 100644 index 00000000..86032b2a --- /dev/null +++ b/app/models/vaccine-data.ts @@ -0,0 +1,37 @@ +import { type Base, genBase } from "./_base" +import { genDoctor, type Doctor } from "./doctor" +import { genEncounter, type Encounter } from "./encounter" +import { genSpecialist, type Specialist } from "./specialist" +import { genSubspecialist, type Subspecialist } from "./subspecialist" +import { genUnit, type Unit } from "./unit" + +export interface VaccineData extends Base { + encounter_id: number + encounter: Encounter + unit_id: number + unit: Unit + specialist_id: number + specialist: Specialist + subspecialist_id: number + subspecialist: Subspecialist + doctor_id: number + doctor: Doctor + date: '' +} + +export function genVaccineData(): VaccineData { + return { + ...genBase(), + encounter_id: 0, + encounter: genEncounter(), + unit_id: 0, + unit: genUnit(), + specialist_id: 0, + specialist: genSpecialist(), + subspecialist_id: 0, + subspecialist: genSubspecialist(), + doctor_id: 0, + doctor: genDoctor(), + date: '' + } +} diff --git a/app/pages/(features)/integration/bpjs/prb/[prb_id]/edit.vue b/app/pages/(features)/integration/bpjs/prb/[prb_id]/edit.vue new file mode 100644 index 00000000..abf741bf --- /dev/null +++ b/app/pages/(features)/integration/bpjs/prb/[prb_id]/edit.vue @@ -0,0 +1,41 @@ + + + diff --git a/app/pages/(features)/integration/bpjs/prb/[prb_id]/index.vue b/app/pages/(features)/integration/bpjs/prb/[prb_id]/index.vue new file mode 100644 index 00000000..1d66b563 --- /dev/null +++ b/app/pages/(features)/integration/bpjs/prb/[prb_id]/index.vue @@ -0,0 +1,41 @@ + + + diff --git a/app/pages/(features)/integration/bpjs/prb/add.vue b/app/pages/(features)/integration/bpjs/prb/add.vue new file mode 100644 index 00000000..19b029f9 --- /dev/null +++ b/app/pages/(features)/integration/bpjs/prb/add.vue @@ -0,0 +1,41 @@ + + + diff --git a/app/pages/(features)/integration/bpjs/prb/index.vue b/app/pages/(features)/integration/bpjs/prb/index.vue new file mode 100644 index 00000000..7a6ca683 --- /dev/null +++ b/app/pages/(features)/integration/bpjs/prb/index.vue @@ -0,0 +1,41 @@ + + + diff --git a/app/pages/(features)/rehab/encounter/[id]/document-upload/[document_id]/edit.vue b/app/pages/(features)/rehab/encounter/[id]/document-upload/[document_id]/edit.vue new file mode 100644 index 00000000..e06920ba --- /dev/null +++ b/app/pages/(features)/rehab/encounter/[id]/document-upload/[document_id]/edit.vue @@ -0,0 +1,41 @@ + + + \ No newline at end of file diff --git a/app/pages/(features)/rehab/encounter/[id]/document-upload/add.vue b/app/pages/(features)/rehab/encounter/[id]/document-upload/add.vue new file mode 100644 index 00000000..fcc7432e --- /dev/null +++ b/app/pages/(features)/rehab/encounter/[id]/document-upload/add.vue @@ -0,0 +1,42 @@ + + + \ No newline at end of file diff --git a/app/pages/(features)/rehab/encounter/[id]/prb/[prb_id]/edit.vue b/app/pages/(features)/rehab/encounter/[id]/prb/[prb_id]/edit.vue new file mode 100644 index 00000000..e1059769 --- /dev/null +++ b/app/pages/(features)/rehab/encounter/[id]/prb/[prb_id]/edit.vue @@ -0,0 +1,41 @@ + + + diff --git a/app/pages/(features)/rehab/encounter/[id]/prb/[prb_id]/index.vue b/app/pages/(features)/rehab/encounter/[id]/prb/[prb_id]/index.vue new file mode 100644 index 00000000..1d66b563 --- /dev/null +++ b/app/pages/(features)/rehab/encounter/[id]/prb/[prb_id]/index.vue @@ -0,0 +1,41 @@ + + + diff --git a/app/pages/(features)/rehab/encounter/[id]/prb/add.vue b/app/pages/(features)/rehab/encounter/[id]/prb/add.vue new file mode 100644 index 00000000..b168fcb5 --- /dev/null +++ b/app/pages/(features)/rehab/encounter/[id]/prb/add.vue @@ -0,0 +1,41 @@ + + + diff --git a/app/pages/(features)/rehab/encounter/[id]/process.vue b/app/pages/(features)/rehab/encounter/[id]/process.vue index 68cc7c02..49a5dd6d 100644 --- a/app/pages/(features)/rehab/encounter/[id]/process.vue +++ b/app/pages/(features)/rehab/encounter/[id]/process.vue @@ -35,7 +35,7 @@ const pagePermission = getPagePermissions(roleAccess)