diff --git a/app/assets/svg/wavey-fingerprint.svg b/app/assets/svg/wavey-fingerprint.svg new file mode 100644 index 00000000..b281297f --- /dev/null +++ b/app/assets/svg/wavey-fingerprint.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/components/app/resume/_common/print-btn.vue b/app/components/app/resume/_common/print-btn.vue new file mode 100644 index 00000000..5688d007 --- /dev/null +++ b/app/components/app/resume/_common/print-btn.vue @@ -0,0 +1,22 @@ + + + \ No newline at end of file diff --git a/app/components/app/resume/_common/select-arrangement.vue b/app/components/app/resume/_common/select-arrangement.vue new file mode 100644 index 00000000..7e236ff0 --- /dev/null +++ b/app/components/app/resume/_common/select-arrangement.vue @@ -0,0 +1,70 @@ + + + diff --git a/app/components/app/resume/_common/select-concious-level.vue b/app/components/app/resume/_common/select-concious-level.vue new file mode 100644 index 00000000..0852195b --- /dev/null +++ b/app/components/app/resume/_common/select-concious-level.vue @@ -0,0 +1,70 @@ + + + diff --git a/app/components/app/resume/_common/select-date.vue b/app/components/app/resume/_common/select-date.vue new file mode 100644 index 00000000..74245e7e --- /dev/null +++ b/app/components/app/resume/_common/select-date.vue @@ -0,0 +1,121 @@ + + + diff --git a/app/components/app/resume/_common/select-death-cause.vue b/app/components/app/resume/_common/select-death-cause.vue new file mode 100644 index 00000000..a155b139 --- /dev/null +++ b/app/components/app/resume/_common/select-death-cause.vue @@ -0,0 +1,71 @@ + + + diff --git a/app/components/app/resume/_common/select-faskes.vue b/app/components/app/resume/_common/select-faskes.vue new file mode 100644 index 00000000..0852195b --- /dev/null +++ b/app/components/app/resume/_common/select-faskes.vue @@ -0,0 +1,70 @@ + + + diff --git a/app/components/app/resume/_common/select-following-arrangement.vue b/app/components/app/resume/_common/select-following-arrangement.vue new file mode 100644 index 00000000..0852195b --- /dev/null +++ b/app/components/app/resume/_common/select-following-arrangement.vue @@ -0,0 +1,70 @@ + + + diff --git a/app/components/app/resume/_common/select-hospital-leave-condition.vue b/app/components/app/resume/_common/select-hospital-leave-condition.vue new file mode 100644 index 00000000..0852195b --- /dev/null +++ b/app/components/app/resume/_common/select-hospital-leave-condition.vue @@ -0,0 +1,70 @@ + + + diff --git a/app/components/app/resume/_common/select-hospital-leave-method.vue b/app/components/app/resume/_common/select-hospital-leave-method.vue new file mode 100644 index 00000000..0852195b --- /dev/null +++ b/app/components/app/resume/_common/select-hospital-leave-method.vue @@ -0,0 +1,70 @@ + + + diff --git a/app/components/app/resume/_common/select-icd-10.vue b/app/components/app/resume/_common/select-icd-10.vue new file mode 100644 index 00000000..0852195b --- /dev/null +++ b/app/components/app/resume/_common/select-icd-10.vue @@ -0,0 +1,70 @@ + + + diff --git a/app/components/app/resume/_common/select-icd-9.vue b/app/components/app/resume/_common/select-icd-9.vue new file mode 100644 index 00000000..0852195b --- /dev/null +++ b/app/components/app/resume/_common/select-icd-9.vue @@ -0,0 +1,70 @@ + + + diff --git a/app/components/app/resume/_common/select-national-program-service-status.vue b/app/components/app/resume/_common/select-national-program-service-status.vue new file mode 100644 index 00000000..0852195b --- /dev/null +++ b/app/components/app/resume/_common/select-national-program-service-status.vue @@ -0,0 +1,70 @@ + + + diff --git a/app/components/app/resume/_common/select-national-program-service.vue b/app/components/app/resume/_common/select-national-program-service.vue new file mode 100644 index 00000000..0852195b --- /dev/null +++ b/app/components/app/resume/_common/select-national-program-service.vue @@ -0,0 +1,70 @@ + + + diff --git a/app/components/app/resume/_common/select-pain-scale.vue b/app/components/app/resume/_common/select-pain-scale.vue new file mode 100644 index 00000000..0852195b --- /dev/null +++ b/app/components/app/resume/_common/select-pain-scale.vue @@ -0,0 +1,70 @@ + + + diff --git a/app/components/app/resume/_common/select-primary-diagnosis.vue b/app/components/app/resume/_common/select-primary-diagnosis.vue new file mode 100644 index 00000000..0852195b --- /dev/null +++ b/app/components/app/resume/_common/select-primary-diagnosis.vue @@ -0,0 +1,70 @@ + + + diff --git a/app/components/app/resume/_common/select-secondary-diagnosis.vue b/app/components/app/resume/_common/select-secondary-diagnosis.vue new file mode 100644 index 00000000..a155b139 --- /dev/null +++ b/app/components/app/resume/_common/select-secondary-diagnosis.vue @@ -0,0 +1,71 @@ + + + diff --git a/app/components/app/resume/_common/verify-badge.vue b/app/components/app/resume/_common/verify-badge.vue new file mode 100644 index 00000000..8a999895 --- /dev/null +++ b/app/components/app/resume/_common/verify-badge.vue @@ -0,0 +1,67 @@ + + + \ No newline at end of file diff --git a/app/components/app/resume/add.vue b/app/components/app/resume/add.vue new file mode 100644 index 00000000..d5fa3370 --- /dev/null +++ b/app/components/app/resume/add.vue @@ -0,0 +1,482 @@ + + + diff --git a/app/components/app/resume/history-list/action-history-dialog.vue b/app/components/app/resume/history-list/action-history-dialog.vue new file mode 100644 index 00000000..5602016e --- /dev/null +++ b/app/components/app/resume/history-list/action-history-dialog.vue @@ -0,0 +1,66 @@ + + + \ No newline at end of file diff --git a/app/components/app/resume/history-list/action-list.cfg.ts b/app/components/app/resume/history-list/action-list.cfg.ts new file mode 100644 index 00000000..2dad3e6a --- /dev/null +++ b/app/components/app/resume/history-list/action-list.cfg.ts @@ -0,0 +1,94 @@ +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-dvvp.vue')) + +export const config: Config = { + cols: [{width: 140}, {}, {}, {width: 140}, {width: 10},], + + headers: [ + [ + { label: 'Tanggal/Jam' }, + { label: 'Dokter' }, + { label: 'Tempat Layanan' }, + { label: 'Jenis' }, + { label: 'Jenis Pemeriksaan' }, + { label: 'Tanggal/Jam' }, + ], + ], + + keys: ['birth_date', 'person.name', 'person.name', 'person.name', 'person.name', 'birth_date',], + + 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, + } + }, + }, + + htmls: { + patient_address(_rec) { + return '-' + }, + }, +} diff --git a/app/components/app/resume/history-list/consultation-history-dialog.vue b/app/components/app/resume/history-list/consultation-history-dialog.vue new file mode 100644 index 00000000..ad1e777e --- /dev/null +++ b/app/components/app/resume/history-list/consultation-history-dialog.vue @@ -0,0 +1,66 @@ + + + \ No newline at end of file diff --git a/app/components/app/resume/history-list/consultation-list.cfg.ts b/app/components/app/resume/history-list/consultation-list.cfg.ts new file mode 100644 index 00000000..196c208c --- /dev/null +++ b/app/components/app/resume/history-list/consultation-list.cfg.ts @@ -0,0 +1,51 @@ +import type { Config } from '~/components/pub/my-ui/data-table' +import type { Patient } from '~/models/patient' +import { defineAsyncComponent } from 'vue' + +const lampiranBtn = defineAsyncComponent(() => import('../_common/print-btn.vue')) + +export const config: Config = { + cols: [{}, {}, {}, {}, {},], + + headers: [ + [ + { label: 'Tanggal/Jam' }, + { label: 'Dokter' }, + { label: 'Tempat Layanan' }, + { label: 'KSM' }, + { label: 'Tanggal/Jam' }, + { label: 'Tujuan' }, + { label: 'Dokter' }, + { label: 'Berkas' }, + ], + ], + + keys: ['birth_date', 'person.name', 'person.name', 'person.name', 'person.name', 'birth_date','person.name', 'action', ], + + parses: { + 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 + }, + }, + + components: { + action(rec, idx) { + return { + idx, + rec: rec as object, + component: lampiranBtn, + } + }, + }, + + htmls: { + + }, +} diff --git a/app/components/app/resume/history-list/farmacy-history-dialog.vue b/app/components/app/resume/history-list/farmacy-history-dialog.vue new file mode 100644 index 00000000..53bf3875 --- /dev/null +++ b/app/components/app/resume/history-list/farmacy-history-dialog.vue @@ -0,0 +1,66 @@ + + + \ No newline at end of file diff --git a/app/components/app/resume/history-list/farmacy-list.cfg.ts b/app/components/app/resume/history-list/farmacy-list.cfg.ts new file mode 100644 index 00000000..75ea1e80 --- /dev/null +++ b/app/components/app/resume/history-list/farmacy-list.cfg.ts @@ -0,0 +1,39 @@ +import type { Config } from '~/components/pub/my-ui/data-table' +import type { Patient } from '~/models/patient' + +export const config: Config = { + cols: [{}, {}, {}, {}, {},], + + headers: [ + [ + { label: 'Tanggal Order' }, + { label: 'No Resep' }, + { label: 'Tempat Layanan' }, + { label: 'Nama Obat' }, + { label: 'Tanggal Disetujui' }, + ], + ], + + keys: ['birth_date', 'person.name', 'person.name', 'person.name', 'birth_date',], + + parses: { + 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 + }, + }, + + components: { + + }, + + htmls: { + + }, +} diff --git a/app/components/app/resume/history-list/national-program-history-dialog.vue b/app/components/app/resume/history-list/national-program-history-dialog.vue new file mode 100644 index 00000000..cc702227 --- /dev/null +++ b/app/components/app/resume/history-list/national-program-history-dialog.vue @@ -0,0 +1,65 @@ + + + \ No newline at end of file diff --git a/app/components/app/resume/history-list/national-program-list.cfg.ts b/app/components/app/resume/history-list/national-program-list.cfg.ts new file mode 100644 index 00000000..fe6d3ea0 --- /dev/null +++ b/app/components/app/resume/history-list/national-program-list.cfg.ts @@ -0,0 +1,30 @@ +import type { Config } from '~/components/pub/my-ui/data-table' +import type { Patient } from '~/models/patient' + +export const config: Config = { + cols: [{}, {}, {}, {}, {},], + + headers: [ + [ + { label: 'Nomor' }, + { label: 'Layanan Program Nasional' }, + { label: 'Status' }, + ], + ], + + keys: ['person.name', 'person.name', 'person.name',], + + parses: { + // birth_date: (rec: unknown): unknown => { + + // }, + }, + + components: { + + }, + + htmls: { + + }, +} diff --git a/app/components/app/resume/history-list/supporting-history-dialog.vue b/app/components/app/resume/history-list/supporting-history-dialog.vue new file mode 100644 index 00000000..32fb4508 --- /dev/null +++ b/app/components/app/resume/history-list/supporting-history-dialog.vue @@ -0,0 +1,66 @@ + + + \ No newline at end of file diff --git a/app/components/app/resume/history-list/supporting-list.cfg.ts b/app/components/app/resume/history-list/supporting-list.cfg.ts new file mode 100644 index 00000000..f005042d --- /dev/null +++ b/app/components/app/resume/history-list/supporting-list.cfg.ts @@ -0,0 +1,39 @@ +import type { Config } from '~/components/pub/my-ui/data-table' +import type { Patient } from '~/models/patient' + +export const config: Config = { + cols: [{}, {}, {}, {}, {},], + + headers: [ + [ + { label: 'Tanggal Order' }, + { label: 'No Lab' }, + { label: 'Nama Pemeriksaan' }, + { label: 'Tanggal Pemeriksaan' }, + ], + ], + + keys: ['birth_date', 'person.name', 'person.name', 'birth_date',], + + parses: { + 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 + }, + }, + + components: { + }, + + htmls: { + // patient_address(_rec) { + // return '-' + // }, + }, +} diff --git a/app/components/app/resume/list.cfg.ts b/app/components/app/resume/list.cfg.ts new file mode 100644 index 00000000..b756b1ee --- /dev/null +++ b/app/components/app/resume/list.cfg.ts @@ -0,0 +1,101 @@ +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-dvvp.vue')) +const statusBadge = defineAsyncComponent(() => import('./_common/verify-badge.vue')) + +export const config: Config = { + cols: [{width: 140}, {}, {}, {width: 140}, {width: 10},], + + headers: [ + [ + { label: 'Tgl Simpan' }, + { label: 'DPJP' }, + { label: 'KSM' }, + { label: 'Status' }, + { label: 'Action' }, + ], + ], + + keys: ['birth_date', 'number', 'person.name', '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/resume/list.vue b/app/components/app/resume/list.vue new file mode 100644 index 00000000..0d62cc6c --- /dev/null +++ b/app/components/app/resume/list.vue @@ -0,0 +1,31 @@ + + + \ No newline at end of file diff --git a/app/components/app/resume/verify-dialog.vue b/app/components/app/resume/verify-dialog.vue new file mode 100644 index 00000000..ca4fb554 --- /dev/null +++ b/app/components/app/resume/verify-dialog.vue @@ -0,0 +1,98 @@ + + + \ No newline at end of file diff --git a/app/components/content/encounter/process.vue b/app/components/content/encounter/process.vue index 23640af7..318026e3 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 ResumeList from '~/components/content/resume/list.vue' import ControlLetterList from '~/components/content/control-letter/list.vue' const route = useRoute() @@ -72,6 +73,8 @@ const tabs: TabItem[] = [ { value: 'medical-action', label: 'Order Ruang Tindakan' }, { value: 'mcu-result', label: 'Hasil Penunjang' }, { value: 'consultation', label: 'Konsultasi', component: Consultation, props: { encounter: data } }, + { value: 'resume', label: 'Resume', component: ResumeList, props: { encounter: data } }, + { value: 'control', label: 'Surat Kontrol' }, { value: 'resume', label: 'Resume' }, { value: 'control', label: 'Surat Kontrol', component: ControlLetterList, props: { encounter: data } }, { value: 'screening', label: 'Skrinning MPP' }, diff --git a/app/components/content/resume/add.vue b/app/components/content/resume/add.vue new file mode 100644 index 00000000..6fda4bf8 --- /dev/null +++ b/app/components/content/resume/add.vue @@ -0,0 +1,200 @@ + + + diff --git a/app/components/content/resume/list.vue b/app/components/content/resume/list.vue new file mode 100644 index 00000000..4b5b5001 --- /dev/null +++ b/app/components/content/resume/list.vue @@ -0,0 +1,215 @@ + + + \ No newline at end of file diff --git a/app/components/pub/my-ui/data/dropdown-action-dvvp.vue b/app/components/pub/my-ui/data/dropdown-action-dvvp.vue new file mode 100644 index 00000000..00e15096 --- /dev/null +++ b/app/components/pub/my-ui/data/dropdown-action-dvvp.vue @@ -0,0 +1,103 @@ + + + diff --git a/app/components/pub/my-ui/data/types.ts b/app/components/pub/my-ui/data/types.ts index cf251cc8..a27b0cc8 100644 --- a/app/components/pub/my-ui/data/types.ts +++ b/app/components/pub/my-ui/data/types.ts @@ -78,6 +78,9 @@ export const ActionEvents = { showEdit: 'showEdit', showDetail: 'showDetail', showProcess: 'showProcess', + showVerify: 'showVerify', + showValidate: 'showValidate', + showPrint: 'showPrint', } export interface DataTableLoader { diff --git a/app/components/pub/my-ui/form/input-base.vue b/app/components/pub/my-ui/form/input-base.vue index a3743734..c31b2073 100644 --- a/app/components/pub/my-ui/form/input-base.vue +++ b/app/components/pub/my-ui/form/input-base.vue @@ -63,14 +63,14 @@ function handleInput(event: Event) { v-slot="{ componentField }" :name="fieldName" > - + -

{{ bottomLabel }}

+

{{ bottomLabel }}

diff --git a/app/components/pub/my-ui/form/text-area-input.vue b/app/components/pub/my-ui/form/text-area-input.vue new file mode 100644 index 00000000..c7b7c794 --- /dev/null +++ b/app/components/pub/my-ui/form/text-area-input.vue @@ -0,0 +1,86 @@ + + +