diff --git a/app/components/app/bpjs/control-letter/_common/dropdown-action.vue b/app/components/app/bpjs/control-letter/_common/dropdown-action.vue new file mode 100644 index 00000000..9086c883 --- /dev/null +++ b/app/components/app/bpjs/control-letter/_common/dropdown-action.vue @@ -0,0 +1,90 @@ + + + diff --git a/app/components/app/bpjs/control-letter/_common/history-dialog.vue b/app/components/app/bpjs/control-letter/_common/history-dialog.vue new file mode 100644 index 00000000..00d7b32f --- /dev/null +++ b/app/components/app/bpjs/control-letter/_common/history-dialog.vue @@ -0,0 +1,49 @@ + + + \ No newline at end of file diff --git a/app/components/app/bpjs/control-letter/_common/select-date-range.vue b/app/components/app/bpjs/control-letter/_common/select-date-range.vue new file mode 100644 index 00000000..114f8542 --- /dev/null +++ b/app/components/app/bpjs/control-letter/_common/select-date-range.vue @@ -0,0 +1,104 @@ + + + diff --git a/app/components/app/bpjs/control-letter/_common/select-destination-polyclinic.vue b/app/components/app/bpjs/control-letter/_common/select-destination-polyclinic.vue new file mode 100644 index 00000000..0852195b --- /dev/null +++ b/app/components/app/bpjs/control-letter/_common/select-destination-polyclinic.vue @@ -0,0 +1,70 @@ + + + diff --git a/app/components/app/bpjs/control-letter/_common/select-origin-polyclinic.vue b/app/components/app/bpjs/control-letter/_common/select-origin-polyclinic.vue new file mode 100644 index 00000000..0852195b --- /dev/null +++ b/app/components/app/bpjs/control-letter/_common/select-origin-polyclinic.vue @@ -0,0 +1,70 @@ + + + diff --git a/app/components/app/bpjs/control-letter/filter.vue b/app/components/app/bpjs/control-letter/filter.vue new file mode 100644 index 00000000..50005069 --- /dev/null +++ b/app/components/app/bpjs/control-letter/filter.vue @@ -0,0 +1,128 @@ + + + diff --git a/app/components/app/bpjs/control-letter/list.cfg.ts b/app/components/app/bpjs/control-letter/list.cfg.ts new file mode 100644 index 00000000..8eb7e5f4 --- /dev/null +++ b/app/components/app/bpjs/control-letter/list.cfg.ts @@ -0,0 +1,108 @@ +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('./_common/dropdown-action.vue')) +const statusBadge = defineAsyncComponent(() => import('~/components/pub/my-ui/badge/status-badge.vue')) + +export const config: Config = { + cols: [{}, {}, {}, {},{}, {}, {}, {}, {}, {width: 90},{width: 10},], + + headers: [ + [ + { label: 'No Surat' }, + { label: 'No MR' }, + { label: 'Nama' }, + { label: 'Tgl Rencana Kontrol' }, + { label: 'Tgl Penerbitan' }, + { label: 'Klinik Asal' }, + { label: 'Klinik Tujuan' }, + { label: 'DPJP' }, + { label: 'No SEP Asal' }, + { label: 'Status' }, + { label: 'Action' }, + ], + ], + + keys: ['birth_date', 'number', 'person.name', 'birth_date', 'birth_date', + 'birth_date', 'number', 'person.name', 'birth_date', 'status', 'action'], + + delKeyNames: [ + { key: 'code', label: 'Kode' }, + { key: 'name', label: 'Nama' }, + ], + + parses: { + patientId: (rec: unknown): unknown => { + const patient = rec as Patient + return patient.number + }, + identity_number: (rec: unknown): unknown => { + const { person } = rec as Patient + + if (person.nationality == 'WNA') { + return person.passportNumber + } + + return person.residentIdentityNumber || '-' + }, + birth_date: (rec: unknown): unknown => { + const { person } = rec as Patient + + if (typeof person.birthDate == 'object' && person.birthDate) { + return (person.birthDate as Date).toLocaleDateString('id-ID') + } else if (typeof person.birthDate == 'string') { + return (person.birthDate as string).substring(0, 10) + } + return person.birthDate + }, + patient_age: (rec: unknown): unknown => { + const { person } = rec as Patient + return calculateAge(person.birthDate) + }, + gender: (rec: unknown): unknown => { + const { person } = rec as Patient + + if (typeof person.gender_code == 'number' && person.gender_code >= 0) { + return person.gender_code + } else if (typeof person.gender_code === 'string' && person.gender_code) { + return genderCodes[person.gender_code] || '-' + } + return '-' + }, + education: (rec: unknown): unknown => { + const { person } = rec as Patient + if (typeof person.education_code == 'number' && person.education_code >= 0) { + return person.education_code + } else if (typeof person.education_code === 'string' && person.education_code) { + return educationCodes[person.education_code] || '-' + } + return '-' + }, + }, + + components: { + action(rec, idx) { + return { + idx, + rec: rec as object, + component: action, + } + }, + status(rec, idx) { + return { + idx, + rec: rec as object, + component: statusBadge, + } + }, + }, + + htmls: { + patient_address(_rec) { + return '-' + }, + }, +} diff --git a/app/components/app/bpjs/control-letter/list.vue b/app/components/app/bpjs/control-letter/list.vue new file mode 100644 index 00000000..8274e752 --- /dev/null +++ b/app/components/app/bpjs/control-letter/list.vue @@ -0,0 +1,31 @@ + + + diff --git a/app/components/app/control-letter/_common/select-date.vue b/app/components/app/control-letter/_common/select-date.vue new file mode 100644 index 00000000..057d0a63 --- /dev/null +++ b/app/components/app/control-letter/_common/select-date.vue @@ -0,0 +1,116 @@ + + + diff --git a/app/components/app/control-letter/_common/select-dpjp.vue b/app/components/app/control-letter/_common/select-dpjp.vue new file mode 100644 index 00000000..2053ebdb --- /dev/null +++ b/app/components/app/control-letter/_common/select-dpjp.vue @@ -0,0 +1,98 @@ + + + diff --git a/app/components/app/control-letter/_common/select-specialist.vue b/app/components/app/control-letter/_common/select-specialist.vue new file mode 100644 index 00000000..cd5ee923 --- /dev/null +++ b/app/components/app/control-letter/_common/select-specialist.vue @@ -0,0 +1,98 @@ + + + diff --git a/app/components/app/control-letter/_common/select-subspecialist.vue b/app/components/app/control-letter/_common/select-subspecialist.vue new file mode 100644 index 00000000..61567c0c --- /dev/null +++ b/app/components/app/control-letter/_common/select-subspecialist.vue @@ -0,0 +1,97 @@ + + + diff --git a/app/components/app/control-letter/_common/select-unit.vue b/app/components/app/control-letter/_common/select-unit.vue new file mode 100644 index 00000000..afe0ca0a --- /dev/null +++ b/app/components/app/control-letter/_common/select-unit.vue @@ -0,0 +1,85 @@ + + + diff --git a/app/components/app/control-letter/entry-form.vue b/app/components/app/control-letter/entry-form.vue new file mode 100644 index 00000000..2517e8b1 --- /dev/null +++ b/app/components/app/control-letter/entry-form.vue @@ -0,0 +1,94 @@ + + + diff --git a/app/components/app/control-letter/list.cfg.ts b/app/components/app/control-letter/list.cfg.ts new file mode 100644 index 00000000..3eb7bd84 --- /dev/null +++ b/app/components/app/control-letter/list.cfg.ts @@ -0,0 +1,64 @@ +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-dud.vue')) + +export const config: Config = { + cols: [{width: 180}, {}, {}, {}, {}, {width: 30},], + + headers: [ + [ + { label: 'Tgl Rencana Kontrol' }, + { label: 'Spesialis' }, + { label: 'Sub Spesialis' }, + { label: 'DPJP' }, + { label: 'Status SEP' }, + { label: 'Action' }, + ], + ], + + keys: ['date', 'specialist.name', 'subspecialist.name', 'doctor.employee.person.name', 'sep_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 + }, + specialist_subspecialist: (rec: unknown): unknown => { + return '-' + }, + dpjp: (rec: unknown): unknown => { + // const { person } = rec as Patient + return '-' + }, + }, + + components: { + action(rec, idx) { + return { + idx, + rec: rec as object, + component: action, + } + }, + }, + + htmls: { + sep_status(_rec) { + return 'SEP Internal' + }, + }, +} diff --git a/app/components/app/control-letter/list.vue b/app/components/app/control-letter/list.vue new file mode 100644 index 00000000..8274e752 --- /dev/null +++ b/app/components/app/control-letter/list.vue @@ -0,0 +1,31 @@ + + + diff --git a/app/components/app/control-letter/preview.vue b/app/components/app/control-letter/preview.vue new file mode 100644 index 00000000..e10a2b91 --- /dev/null +++ b/app/components/app/control-letter/preview.vue @@ -0,0 +1,54 @@ + + + + + diff --git a/app/components/content/bpjs/control-letter/list.vue b/app/components/content/bpjs/control-letter/list.vue new file mode 100644 index 00000000..66ed00a5 --- /dev/null +++ b/app/components/content/bpjs/control-letter/list.vue @@ -0,0 +1,220 @@ + + + diff --git a/app/components/content/control-letter/add.vue b/app/components/content/control-letter/add.vue new file mode 100644 index 00000000..44f03a2f --- /dev/null +++ b/app/components/content/control-letter/add.vue @@ -0,0 +1,133 @@ + + + + + diff --git a/app/components/content/control-letter/detail.vue b/app/components/content/control-letter/detail.vue new file mode 100644 index 00000000..d9019d57 --- /dev/null +++ b/app/components/content/control-letter/detail.vue @@ -0,0 +1,79 @@ + + + diff --git a/app/components/content/control-letter/edit.vue b/app/components/content/control-letter/edit.vue new file mode 100644 index 00000000..99a5c282 --- /dev/null +++ b/app/components/content/control-letter/edit.vue @@ -0,0 +1,162 @@ + + + + + diff --git a/app/components/content/control-letter/list.vue b/app/components/content/control-letter/list.vue new file mode 100644 index 00000000..c9353057 --- /dev/null +++ b/app/components/content/control-letter/list.vue @@ -0,0 +1,176 @@ + + + diff --git a/app/components/content/encounter/process.vue b/app/components/content/encounter/process.vue index 77c5b1f6..23640af7 100644 --- a/app/components/content/encounter/process.vue +++ b/app/components/content/encounter/process.vue @@ -18,6 +18,7 @@ import Prescription from '~/components/content/prescription/main.vue' import CpLabOrder from '~/components/content/cp-lab-order/main.vue' import Radiology from '~/components/content/radiology-order/main.vue' import Consultation from '~/components/content/consultation/list.vue' +import ControlLetterList from '~/components/content/control-letter/list.vue' const route = useRoute() const router = useRouter() @@ -72,7 +73,7 @@ const tabs: TabItem[] = [ { value: 'mcu-result', label: 'Hasil Penunjang' }, { value: 'consultation', label: 'Konsultasi', component: Consultation, props: { encounter: data } }, { value: 'resume', label: 'Resume' }, - { value: 'control', label: 'Surat Kontrol' }, + { value: 'control', label: 'Surat Kontrol', component: ControlLetterList, props: { encounter: data } }, { value: 'screening', label: 'Skrinning MPP' }, { value: 'supporting-document', label: 'Upload Dokumen Pendukung' }, ] diff --git a/app/components/pub/my-ui/alert/warning-alert.vue b/app/components/pub/my-ui/alert/warning-alert.vue new file mode 100644 index 00000000..afdbe7ae --- /dev/null +++ b/app/components/pub/my-ui/alert/warning-alert.vue @@ -0,0 +1,27 @@ + + + \ No newline at end of file diff --git a/app/components/pub/my-ui/badge/status-badge.vue b/app/components/pub/my-ui/badge/status-badge.vue new file mode 100644 index 00000000..ba8a7ea6 --- /dev/null +++ b/app/components/pub/my-ui/badge/status-badge.vue @@ -0,0 +1,26 @@ + + + diff --git a/app/components/pub/my-ui/confirmation/confirmation.vue b/app/components/pub/my-ui/confirmation/confirmation.vue index 590f328d..928d7827 100644 --- a/app/components/pub/my-ui/confirmation/confirmation.vue +++ b/app/components/pub/my-ui/confirmation/confirmation.vue @@ -8,6 +8,8 @@ interface ConfirmationProps { message?: string confirmText?: string cancelText?: string + noTrueSlot?: boolean + skipClosingMessage?: boolean variant?: 'default' | 'destructive' | 'warning' size?: 'sm' | 'md' | 'lg' | 'xl' } @@ -72,19 +74,21 @@ function handleCancel() {
-
+
-

- {{ message }} -

+ {{ message }} {{ !noTrueSlot ? ' dengan informasi sebagai berikut:' : '.' }}
-
+
+
+ Lanjutkan Proses? +
+