-
-
-
-
-
+
+
+
+
-
-
@@ -42,45 +35,24 @@ function handleClick(value: 1 | 2) {
diff --git a/app/components/pub/my-ui/menus/submenu.vue b/app/components/pub/my-ui/menus/submenu.vue
index ecfeb054..fb9fdfd9 100644
--- a/app/components/pub/my-ui/menus/submenu.vue
+++ b/app/components/pub/my-ui/menus/submenu.vue
@@ -4,6 +4,9 @@ import { type EncounterItem } from "~/handlers/encounter-init.handler";
const props = defineProps<{
initialActiveMenu: string
data: EncounterItem[]
+ canCreate?: boolean
+ canUpdate?: boolean
+ canDelete?: boolean
}>()
const activeMenu = ref(props.initialActiveMenu)
@@ -38,7 +41,11 @@ function changeMenu(value: string) {
class="flex-1 rounded-md border bg-white p-4 shadow-sm dark:bg-neutral-950">
+ v-bind="data.find((m) => m.id === activeMenu)?.props"
+ :can-create="canCreate"
+ :can-update="canUpdate"
+ :can-delete="canDelete"
+ />
diff --git a/app/const/page-permission/ambulatory.ts b/app/const/page-permission/ambulatory.ts
index c77b59a4..af7692e6 100644
--- a/app/const/page-permission/ambulatory.ts
+++ b/app/const/page-permission/ambulatory.ts
@@ -20,6 +20,7 @@ export const permissions: Record
> = {
'emp|pha': ['R'],
'emp|lab': ['R'],
'emp|rad': ['R'],
+ 'emp|scr': ['R'],
},
'/ambulatory/encounter/add': {
'emp|reg': ['C', 'R', 'U', 'D'],
@@ -34,6 +35,7 @@ export const permissions: Record> = {
'emp|pha': ['R'],
'emp|lab': ['R'],
'emp|rad': ['R'],
+ 'emp|scr': ['R'],
},
'/ambulatory/encounter/[id]/edit': {
'emp|reg': ['C', 'R', 'U', 'D'],
@@ -47,6 +49,7 @@ export const permissions: Record> = {
'emp|pha': ['R'],
'emp|lab': ['R'],
'emp|rad': ['R'],
+ 'emp|scr': ['R'],
},
'/ambulatory/encounter/[id]/process?menu=status': {
'emp|doc': ['R'],
@@ -57,6 +60,18 @@ export const permissions: Record> = {
'emp|pha': ['R'],
'emp|lab': ['R'],
'emp|rad': ['R'],
+ 'emp|scr': ['R'],
+ },
+ '/ambulatory/encounter/[id]/process?menu=rehab-medical-assessment': {
+ 'emp|doc': ['R', 'U'],
+ 'emp|nur': ['R'],
+ 'emp|thr': ['R'],
+ 'emp|miw': ['R'],
+ 'emp|nut': ['R'],
+ 'emp|pha': ['R'],
+ 'emp|lab': ['R'],
+ 'emp|rad': ['R'],
+ 'emp|scr': ['R'],
},
'/ambulatory/encounter/[id]/process?menu=early-medical-assessment': {
'emp|doc': ['R', 'U'],
@@ -67,8 +82,20 @@ export const permissions: Record> = {
'emp|pha': ['R'],
'emp|lab': ['R'],
'emp|rad': ['R'],
+ 'emp|scr': ['R'],
},
- '/ambulatory/encounter/[id]/process?menu=fkr': {
+ '/ambulatory/encounter/[id]/process?menu=early-nurse-assessment': {
+ 'emp|doc': ['R'],
+ 'emp|nur': ['R', 'U'],
+ 'emp|thr': ['R'],
+ 'emp|miw': ['R'],
+ 'emp|nut': ['R'],
+ 'emp|pha': ['R'],
+ 'emp|lab': ['R'],
+ 'emp|rad': ['R'],
+ 'emp|scr': ['R'],
+ },
+ '/ambulatory/encounter/[id]/process?menu=kfr': {
'emp|doc': ['R', 'U'],
'emp|nur': ['R'],
'emp|thr': ['R'],
@@ -77,6 +104,7 @@ export const permissions: Record> = {
'emp|pha': ['R'],
'emp|lab': ['R'],
'emp|rad': ['R'],
+ 'emp|scr': ['R'],
},
'/ambulatory/encounter/[id]/process?menu=education-assessment': {
'emp|doc': ['R', 'U'],
@@ -87,6 +115,7 @@ export const permissions: Record> = {
'emp|pha': ['R'],
'emp|lab': ['R'],
'emp|rad': ['R'],
+ 'emp|scr': ['R'],
},
'/ambulatory/encounter/[id]/process?menu=general-consent': {
'emp|doc': ['R'],
@@ -97,6 +126,7 @@ export const permissions: Record> = {
'emp|pha': ['R'],
'emp|lab': ['R'],
'emp|rad': ['R'],
+ 'emp|scr': ['R'],
},
'/ambulatory/encounter/[id]/process?menu=patient-amb-note': {
'emp|doc': ['R'],
@@ -107,6 +137,7 @@ export const permissions: Record> = {
'emp|pha': ['R'],
'emp|lab': ['R'],
'emp|rad': ['R'],
+ 'emp|scr': ['R'],
},
'/ambulatory/encounter/[id]/process?menu=prescription': {
'emp|doc': ['R', 'U'],
@@ -117,6 +148,7 @@ export const permissions: Record> = {
'emp|pha': ['R'],
'emp|lab': ['R'],
'emp|rad': ['R'],
+ 'emp|scr': ['R'],
},
'/ambulatory/encounter/[id]/process?menu=device-order': {
'emp|doc': ['R', 'U'],
@@ -127,6 +159,7 @@ export const permissions: Record> = {
'emp|pha': ['R'],
'emp|lab': ['R'],
'emp|rad': ['R'],
+ 'emp|scr': ['R'],
},
'/ambulatory/encounter/[id]/process?menu=radiology-order': {
'emp|doc': ['R', 'U'],
@@ -137,6 +170,7 @@ export const permissions: Record> = {
'emp|pha': ['R'],
'emp|lab': ['R'],
'emp|rad': ['R'],
+ 'emp|scr': ['R'],
},
'/ambulatory/encounter/[id]/process?menu=cp-lab-order': {
'emp|doc': ['R', 'U'],
@@ -147,6 +181,7 @@ export const permissions: Record> = {
'emp|pha': ['R'],
'emp|lab': ['R'],
'emp|rad': ['R'],
+ 'emp|scr': ['R'],
},
'/ambulatory/encounter/[id]/process?menu=micro-lab-order': {
'emp|doc': ['R', 'U'],
@@ -157,6 +192,7 @@ export const permissions: Record> = {
'emp|pha': ['R'],
'emp|lab': ['R'],
'emp|rad': ['R'],
+ 'emp|scr': ['R'],
},
'/ambulatory/encounter/[id]/process?menu=ap-lab-order': {
'emp|doc': ['R', 'U'],
@@ -167,6 +203,161 @@ export const permissions: Record> = {
'emp|pha': ['R'],
'emp|lab': ['R'],
'emp|rad': ['R'],
+ 'emp|scr': ['R'],
+ },
+ '/ambulatory/encounter/[id]/process?menu=inpatient-letter': {
+ 'emp|doc': ['R', 'U'],
+ 'emp|nur': ['R', 'U'],
+ 'emp|thr': ['R'],
+ 'emp|miw': ['R'],
+ 'emp|nut': ['R'],
+ 'emp|pha': ['R'],
+ 'emp|lab': ['R'],
+ 'emp|rad': ['R'],
+ 'emp|scr': ['R'],
+ },
+ '/ambulatory/encounter/[id]/process?menu=reference-back': {
+ 'emp|doc': ['R', 'U'],
+ 'emp|nur': ['R', 'U'],
+ 'emp|thr': ['R'],
+ 'emp|miw': ['R'],
+ 'emp|nut': ['R'],
+ 'emp|pha': ['R'],
+ 'emp|lab': ['R'],
+ 'emp|rad': ['R'],
+ 'emp|scr': ['R'],
+ },
+ '/ambulatory/encounter/[id]/process?menu=procedure-room-order': {
+ 'emp|doc': ['R', 'U'],
+ 'emp|nur': ['R', 'U'],
+ 'emp|thr': ['R'],
+ 'emp|miw': ['R'],
+ 'emp|nut': ['R'],
+ 'emp|pha': ['R'],
+ 'emp|lab': ['R'],
+ 'emp|rad': ['R'],
+ 'emp|scr': ['R'],
+ },
+ '/ambulatory/encounter/[id]/process?menu=mcu-result': {
+ 'emp|doc': ['R', 'U'],
+ 'emp|nur': ['R', 'U'],
+ 'emp|thr': ['R'],
+ 'emp|miw': ['R'],
+ 'emp|nut': ['R'],
+ 'emp|pha': ['R'],
+ 'emp|lab': ['R'],
+ 'emp|rad': ['R'],
+ 'emp|scr': ['R'],
+ },
+ '/ambulatory/encounter/[id]/process?menu=action-report': {
+ 'emp|doc': ['R', 'U'],
+ 'emp|nur': ['R', 'U'],
+ 'emp|thr': ['R'],
+ 'emp|miw': ['R'],
+ 'emp|nut': ['R'],
+ 'emp|pha': ['R'],
+ 'emp|lab': ['R'],
+ 'emp|rad': ['R'],
+ 'emp|scr': ['R'],
+ },
+ '/ambulatory/encounter/[id]/process?menu=surgery-report': {
+ 'emp|doc': ['R', 'U'],
+ 'emp|nur': ['R', 'U'],
+ 'emp|thr': ['R'],
+ 'emp|miw': ['R'],
+ 'emp|nut': ['R'],
+ 'emp|pha': ['R'],
+ 'emp|lab': ['R'],
+ 'emp|rad': ['R'],
+ 'emp|scr': ['R'],
+ },
+ '/ambulatory/encounter/[id]/process?menu=vaccine-data': {
+ 'emp|doc': ['R', 'U'],
+ 'emp|nur': ['R', 'U'],
+ 'emp|thr': ['R'],
+ 'emp|miw': ['R'],
+ 'emp|nut': ['R'],
+ 'emp|pha': ['R'],
+ 'emp|lab': ['R'],
+ 'emp|rad': ['R'],
+ 'emp|scr': ['R'],
+ },
+ '/ambulatory/encounter/[id]/process?menu=consultation': {
+ 'emp|doc': ['R', 'U'],
+ 'emp|nur': ['R', 'U'],
+ 'emp|thr': ['R'],
+ 'emp|miw': ['R'],
+ 'emp|nut': ['R'],
+ 'emp|pha': ['R'],
+ 'emp|lab': ['R'],
+ 'emp|rad': ['R'],
+ 'emp|scr': ['R'],
+ },
+ '/ambulatory/encounter/[id]/process?menu=control-letter': {
+ 'emp|doc': ['R', 'U'],
+ 'emp|nur': ['R', 'U'],
+ 'emp|thr': ['R'],
+ 'emp|miw': ['R'],
+ 'emp|nut': ['R'],
+ 'emp|pha': ['R'],
+ 'emp|lab': ['R'],
+ 'emp|rad': ['R'],
+ 'emp|scr': ['R'],
+ },
+ '/ambulatory/encounter/[id]/process?menu=screening': {
+ 'emp|doc': ['R'],
+ 'emp|nur': ['R'],
+ 'emp|thr': ['R'],
+ 'emp|miw': ['R'],
+ 'emp|nut': ['R'],
+ 'emp|pha': ['R'],
+ 'emp|lab': ['R'],
+ 'emp|rad': ['R'],
+ 'emp|scr': ['R', 'U'],
+ },
+ '/ambulatory/encounter/[id]/process?menu=supporting-document': {
+ 'emp|doc': ['R', 'U'],
+ 'emp|nur': ['R'],
+ 'emp|thr': ['R'],
+ 'emp|miw': ['R'],
+ 'emp|nut': ['R'],
+ 'emp|pha': ['R'],
+ 'emp|lab': ['R'],
+ 'emp|rad': ['R'],
+ 'emp|scr': ['R'],
+ },
+ '/ambulatory/encounter/[id]/process?menu=resume': {
+ 'emp|doc': ['R', 'U'],
+ 'emp|nur': ['R'],
+ 'emp|thr': ['R'],
+ 'emp|miw': ['R'],
+ 'emp|nut': ['R'],
+ 'emp|pha': ['R'],
+ 'emp|lab': ['R'],
+ 'emp|rad': ['R'],
+ 'emp|scr': ['R'],
+ },
+ '/ambulatory/encounter/[id]/process?menu=amb-resume': {
+ 'emp|doc': ['R', 'U'],
+ 'emp|nur': ['R'],
+ 'emp|thr': ['R'],
+ 'emp|miw': ['R'],
+ 'emp|nut': ['R'],
+ 'emp|pha': ['R'],
+ 'emp|lab': ['R'],
+ 'emp|rad': ['R'],
+ 'emp|scr': ['R'],
+ },
+ '/ambulatory/encounter/[id]/process?menu=price-list': {
+ 'emp|doc': ['R', 'U'],
+ 'emp|nur': ['R'],
+ 'emp|thr': ['R'],
+ 'emp|miw': ['R'],
+ 'emp|nut': ['R'],
+ 'emp|pha': ['R'],
+ 'emp|lab': ['R'],
+ 'emp|rad': ['R'],
+ 'emp|scr': ['R'],
},
'/ambulatory/consulation': {
'emp|doc': ['R'],
diff --git a/app/handlers/encounter-init.handler.ts b/app/handlers/encounter-init.handler.ts
index 5e7e271c..2aa76a5f 100644
--- a/app/handlers/encounter-init.handler.ts
+++ b/app/handlers/encounter-init.handler.ts
@@ -30,13 +30,12 @@ export interface EncounterListData {
}
const StatusAsync = defineAsyncComponent(() => import('~/components/content/encounter/status.vue'))
-const AssesmentFunctionListAsync = defineAsyncComponent(() => import('~/components/content/soapi/entry.vue'))
+const EarlyMedicalRehabAssessmentListAsync = defineAsyncComponent(() => import('~/components/content/soapi/entry.vue'))
const EarlyMedicalAssesmentListAsync = defineAsyncComponent(() => import('~/components/content/soapi/entry.vue'))
-const EarlyMedicalRehabListAsync = defineAsyncComponent(() => import('~/components/content/soapi/entry.vue'))
+const initialNursesAssessmentAsync = defineAsyncComponent(() => import('~/components/content/initial-nursing/entry.vue'))
+const AssesmentFunctionListAsync = defineAsyncComponent(() => import('~/components/content/soapi/entry.vue'))
const ChemoProtocolListAsync = defineAsyncComponent(() => import('~/components/app/chemotherapy/list.protocol.vue'))
-const ChemoMedicineProtocolListAsync = defineAsyncComponent(
- () => import('~/components/app/chemotherapy/list.medicine.vue'),
-)
+const ChemoMedicineProtocolListAsync = defineAsyncComponent(() => import('~/components/app/chemotherapy/list.medicine.vue'))
const DeviceOrderAsync = defineAsyncComponent(() => import('~/components/content/device-order/main.vue'))
const PrescriptionAsync = defineAsyncComponent(() => import('~/components/content/prescription/main.vue'))
const CpLabOrderAsync = defineAsyncComponent(() => import('~/components/content/cp-lab-order/main.vue'))
@@ -54,7 +53,6 @@ const KfrListAsync = defineAsyncComponent(() => import('~/components/content/kfr
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 AssessmentEducationEntryAsync = defineAsyncComponent(
() => import('~/components/content/assessment-education/entry.vue'),
)
@@ -68,18 +66,6 @@ const defaultKeys: Record = {
classCode: ['ambulatory', 'emergency', 'inpatient'],
unit: 'all',
},
- // earlyNurseryAssessment: {
- // id: 'early-nursery-assessment',
- // title: 'Pengkajian Awal Keperawatan',
- // classCode: ['ambulatory', 'emergency', 'inpatient'],
- // unit: 'all',
- // },
- earlyMedicalAssessment: {
- id: 'early-medical-assessment',
- title: 'Pengkajian Awal Medis',
- classCode: ['ambulatory', 'emergency', 'inpatient'],
- unit: 'all',
- },
earlyMedicalRehabAssessment: {
id: 'rehab-medical-assessment',
title: 'Pengkajian Awal Medis Rehabilitasi Medis',
@@ -87,21 +73,14 @@ const defaultKeys: Record = {
unit: 'rehab',
afterId: 'early-medical-assessment',
},
- // functionAssessment: {
- // id: 'function-assessment',
- // title: 'Asesmen Fungsi',
- // classCode: ['ambulatory'],
- // unit: 'rehab',
- // afterId: 'rehab-medical-assessment',
- // },
- // therapyProtocol: {
- // id: 'therapy-protocol',
- // classCode: ['ambulatory'],
- // title: 'Protokol Terapi',
- // unit: 'rehab',
- // afterId: 'function-assessment',
- initialNursingStudy: {
- id: 'initial-nursing-study',
+ earlyMedicalAssessment: {
+ id: 'early-medical-assessment',
+ title: 'Pengkajian Awal Medis',
+ classCode: ['ambulatory', 'emergency', 'inpatient'],
+ unit: 'all',
+ },
+ initialNursesAssessment: {
+ id: 'early-nurse-assessment',
title: 'Kajian Awal Keperawatan',
classCode: ['ambulatory', 'emergency', 'inpatient'],
unit: 'all',
@@ -270,7 +249,7 @@ const defaultKeys: Record = {
classCode: ['ambulatory', 'emergency', 'inpatient'],
unit: 'all',
},
- // initialNursingStudy: {
+ // initialNursesAssessment: {
// id: 'initial-nursing-study',
// title: 'Kajian Awal Keperawatan',
// classCode: ['ambulatory', 'emergency', 'inpatient'],
@@ -329,7 +308,7 @@ export function injectComponents(id: string | number, data: EncounterListData, m
}
}
if (currentKeys?.earlyMedicalRehabAssessment) {
- currentKeys.earlyMedicalRehabAssessment['component'] = EarlyMedicalRehabListAsync
+ currentKeys.earlyMedicalRehabAssessment['component'] = EarlyMedicalRehabAssessmentListAsync
currentKeys.earlyMedicalRehabAssessment['props'] = {
encounter: data?.encounter,
type: 'early-rehab',
@@ -459,21 +438,10 @@ export function injectComponents(id: string | number, data: EncounterListData, m
currentKeys.priceList['props'] = { encounter_id: id }
}
- if (currentKeys?.initialNursingStudy) {
- currentKeys.initialNursingStudy['component'] = InitialNursingStudyAsync
- currentKeys.initialNursingStudy['props'] = { encounter: data?.encounter }
+ if (currentKeys?.initialNursesAssessment) {
+ currentKeys.initialNursesAssessment['component'] = initialNursesAssessmentAsync
+ currentKeys.initialNursesAssessment['props'] = { encounter: data?.encounter }
}
-
- if (currentKeys?.initialNursingStudy) {
- currentKeys.initialNursingStudy['component'] = InitialNursingStudyAsync
- currentKeys.initialNursingStudy['props'] = { encounter: data?.encounter }
- }
-
- if (currentKeys?.initialNursingStudy) {
- currentKeys.initialNursingStudy['component'] = InitialNursingStudyAsync
- currentKeys.initialNursingStudy['props'] = { encounter: data?.encounter }
- }
-
if (currentKeys?.actionReport) {
currentKeys.actionReport['component'] = ActionReportEntryAsync
currentKeys.actionReport['props'] = {
@@ -537,6 +505,9 @@ export function mapResponseToEncounter(result: any): any {
? result.visitDate
: result.registeredAt || result.patient?.registeredAt || null,
adm_employee_id: result.adm_employee_id || 0,
+ adm_employee: result.adm_employee || null,
+ responsible_nurse_id: result.responsible_nurse_id || null,
+ responsible_nurse: result.responsible_nurse || null,
appointment_doctor_id: result.appointment_doctor_id || null,
responsible_doctor_id: result.responsible_doctor_id || null,
appointment_doctor: result.appointment_doctor || null,
@@ -599,7 +570,7 @@ export function getMenuItems(id: string | number, props: any, user: any, data: E
const currentUnitItems: any = currentListItems[`${unitCode}`]
if (!currentUnitItems) return []
let menus = []
- if (currentUnitItems.roles && currentUnitItems.roles?.includes(user.activeRole)) {
+ if (currentUnitItems.roles && currentUnitItems.roles && user.activeRole in currentUnitItems.roles) {
menus = [...currentUnitItems.items]
} else {
menus = unitCode !== 'all' && currentUnitItems?.items ? [...currentUnitItems.items] : [...currentUnitItems]
diff --git a/app/models/encounter.ts b/app/models/encounter.ts
index 95bccff0..56ff2af7 100644
--- a/app/models/encounter.ts
+++ b/app/models/encounter.ts
@@ -52,7 +52,7 @@ export function genEncounter(): Encounter {
patient: genPatient(),
registeredAt: '',
class_code: '',
- unit_code: 0,
+ unit_code: '',
unit: genUnit(),
visitDate: '',
adm_employee_id: 0,
diff --git a/app/models/nurse.ts b/app/models/nurse.ts
index d5e1f95f..5f511781 100644
--- a/app/models/nurse.ts
+++ b/app/models/nurse.ts
@@ -1,7 +1,9 @@
import { type Base, genBase } from "./_base"
+import type { Employee } from "./employee"
export interface Nurse extends Base {
employee_id: number
+ employee?: Employee
ihs_number?: string
unit_id: number
infra_id: number
diff --git a/app/pages/(features)/ambulatory/encounter/[id]/process.vue b/app/pages/(features)/ambulatory/encounter/[id]/process.vue
index 355bc9ec..e476621d 100644
--- a/app/pages/(features)/ambulatory/encounter/[id]/process.vue
+++ b/app/pages/(features)/ambulatory/encounter/[id]/process.vue
@@ -31,12 +31,12 @@ useHead({
const route = useRoute()
const menu = computed(() => route.query.menu as string | undefined)
const accessKey = computed(() => `/ambulatory/encounter/[id]/process` + (menu.value ? `?menu=${menu.value}` : ''))
-const roleAccess: Record = permissions[accessKey.value] || {}
-const hasAccess = getPageAccess(roleAccess, 'read') || true
-const canCreate = hasCreateAccess(roleAccess)
-const canRead = hasReadAccess(roleAccess)
-const canUpdate = hasUpdateAccess(roleAccess)
-const canDelete = hasDeleteAccess(roleAccess)
+const roleAccess = computed(() => permissions[accessKey.value] || {})
+const hasAccess = computed(() => getPageAccess(roleAccess.value, 'read'))
+const canCreate = computed(() => getPageAccess(roleAccess.value, 'create'))
+const canRead = computed(() => getPageAccess(roleAccess.value, 'read'))
+const canUpdate = computed(() => getPageAccess(roleAccess.value, 'update'))
+const canDelete = computed(() => getPageAccess(roleAccess.value, 'delete'))