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/combobox/index.ts b/app/components/pub/my-ui/combobox/index.ts index 82a3b3cd..e4864f7f 100644 --- a/app/components/pub/my-ui/combobox/index.ts +++ b/app/components/pub/my-ui/combobox/index.ts @@ -20,4 +20,17 @@ export function recStrToItem(input: Record): Item[] { return items } +export function objectsToItems(input: object[], key = 'id', label = 'name'): Item[] { + const items: Item[] = [] + for (const item of input) { + if (item.hasOwnProperty(key) && item.hasOwnProperty(label)) { + items.push({ + value: item[key as keyof typeof item], // the hasOwnProperty check should be enough + label: item[label as keyof typeof item], // the hasOwnProperty check should be enough + }) + } + } + return items +} + export { default as Combobox } from './combobox.vue' diff --git a/app/components/pub/my-ui/confirmation/confirmation.vue b/app/components/pub/my-ui/confirmation/confirmation.vue index 590f328d..b5c328aa 100644 --- a/app/components/pub/my-ui/confirmation/confirmation.vue +++ b/app/components/pub/my-ui/confirmation/confirmation.vue @@ -71,7 +71,7 @@ function handleCancel() {
-
+

diff --git a/app/components/pub/my-ui/data-table/data-table.vue b/app/components/pub/my-ui/data-table/data-table.vue index f3e2ef43..431df276 100644 --- a/app/components/pub/my-ui/data-table/data-table.vue +++ b/app/components/pub/my-ui/data-table/data-table.vue @@ -22,7 +22,7 @@ const selected = ref([]) function toggleSelection(row: any, event?: Event) { if (event) event.stopPropagation() // cegah event bubble ke TableRow - const isMultiple = props.selectMode === 'multi' || props.selectMode === 'multiple' + const isMultiple = props.selectMode === 'multiple' // props.selectMode === 'multi' || // gunakan pembanding berdasarkan id atau stringify data const findIndex = selected.value.findIndex((r) => JSON.stringify(r) === JSON.stringify(row)) @@ -128,7 +128,7 @@ function handleActionCellClick(event: Event, _cellRef: string) { 'bg-green-50': props.selectMode === 'single' && selected.some((r) => JSON.stringify(r) === JSON.stringify(row)), 'bg-blue-50': - (props.selectMode === 'multi' || props.selectMode === 'multiple') && + (props.selectMode === 'multiple') && // props.selectMode === 'multi' || selected.some((r) => JSON.stringify(r) === JSON.stringify(row)), }" @click="toggleSelection(row)" diff --git a/app/components/pub/my-ui/data/types.ts b/app/components/pub/my-ui/data/types.ts index 18f97c03..d665257d 100644 --- a/app/components/pub/my-ui/data/types.ts +++ b/app/components/pub/my-ui/data/types.ts @@ -8,6 +8,7 @@ export interface ListItemDto { } export type ComponentType = Component +export type ComponentWithProps = { component: Component, props: Record } export interface ButtonNav { variant?: 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link' @@ -41,17 +42,23 @@ export interface RefSearchNav { onClear: () => void } +export interface RefExportNav { + onExportPdf?: () => void + onExportCsv?: () => void + onExportExcel?: () => void +} + // prepared header for relatively common usage export interface HeaderPrep { title?: string icon?: string + components?: ComponentWithProps[] refSearchNav?: RefSearchNav quickSearchNav?: QuickSearchNav filterNav?: ButtonNav addNav?: ButtonNav printNav?: ButtonNav } - export interface KeyLabel { key: string label: string diff --git a/app/components/pub/my-ui/form/input-base.vue b/app/components/pub/my-ui/form/input-base.vue index aeb4a4af..a3743734 100644 --- a/app/components/pub/my-ui/form/input-base.vue +++ b/app/components/pub/my-ui/form/input-base.vue @@ -19,6 +19,8 @@ const props = defineProps<{ maxLength?: number isRequired?: boolean isDisabled?: boolean + rightLabel?: string + bottomLabel?: string }>() function handleInput(event: Event) { @@ -61,7 +63,7 @@ function handleInput(event: Event) { v-slot="{ componentField }" :name="fieldName" > - + +

{{ rightLabel }}

+

{{ bottomLabel }}

diff --git a/app/components/pub/my-ui/nav-footer/ba-dr-su.vue b/app/components/pub/my-ui/nav-footer/ba-dr-su.vue index 4598817b..8c292758 100644 --- a/app/components/pub/my-ui/nav-footer/ba-dr-su.vue +++ b/app/components/pub/my-ui/nav-footer/ba-dr-su.vue @@ -1,10 +1,12 @@ + + diff --git a/app/components/pub/my-ui/nav-header/filter.vue b/app/components/pub/my-ui/nav-header/filter.vue index ab28620b..74f6d8dc 100644 --- a/app/components/pub/my-ui/nav-header/filter.vue +++ b/app/components/pub/my-ui/nav-header/filter.vue @@ -5,11 +5,13 @@ import type { Ref } from 'vue' import type { DateRange } from 'radix-vue' import { CalendarDate, DateFormatter, getLocalTimeZone } from '@internationalized/date' import { cn } from '~/lib/utils' -import type { HeaderPrep, RefSearchNav } from '~/components/pub/my-ui/data/types' +import type { HeaderPrep, RefExportNav, RefSearchNav } from '~/components/pub/my-ui/data/types' const props = defineProps<{ prep: HeaderPrep refSearchNav?: RefSearchNav + enableExport?: boolean + refExportNav?: RefExportNav }>() // function emitSearchNavClick() { @@ -57,7 +59,7 @@ function onFilterClick() { diff --git a/app/components/pub/my-ui/nav-header/prep.vue b/app/components/pub/my-ui/nav-header/prep.vue index 63535847..7aa5e4f2 100644 --- a/app/components/pub/my-ui/nav-header/prep.vue +++ b/app/components/pub/my-ui/nav-header/prep.vue @@ -30,15 +30,24 @@ function btnClick() {
- {{ props.prep.title }} + {{ prep.title }}
+
+ +
+import { ref, inject } from "vue" +// import Toggle from '~/components/pub/ui/toggle/Toggle.vue' + +const props = defineProps<{ + label: string, + providedKey?: string, + variant?: 'default' | 'outline' | null | undefined +}>() + +const model = defineModel() +const provideKey = props.providedKey || 'toggle-provide' +const { updateProvidedVal } = inject(provideKey) + +watch(model, (newVal) => { + updateProvidedVal(newVal) +}) + + + diff --git a/app/components/pub/ui/button/index.ts b/app/components/pub/ui/button/index.ts index c4063089..43c75876 100644 --- a/app/components/pub/ui/button/index.ts +++ b/app/components/pub/ui/button/index.ts @@ -19,7 +19,7 @@ export const buttonVariants = cva( link: 'text-primary underline-offset-4 hover:underline', }, size: { - default: 'md:h8 2xl:h-9 px-4 py-2', + default: 'md:h-8 2xl:h-9 px-4 py-2', xs: 'h-7 rounded px-2', sm: 'h-8 rounded-md px-3 text-xs', lg: 'h-10 rounded-md px-8', diff --git a/app/components/pub/ui/toggle/index.ts b/app/components/pub/ui/toggle/index.ts index 07acae50..9486e903 100644 --- a/app/components/pub/ui/toggle/index.ts +++ b/app/components/pub/ui/toggle/index.ts @@ -4,16 +4,16 @@ import { cva } from 'class-variance-authority' export { default as Toggle } from './Toggle.vue' export const toggleVariants = cva( - 'inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors hover:bg-muted hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground', + 'inline-flex items-center justify-center rounded-md text-xs 2xl:text-sm font-medium transition-colors hover:bg-muted hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground', { variants: { variant: { default: 'bg-transparent', outline: - 'border border-input bg-transparent shadow-sm hover:bg-accent hover:text-accent-foreground', + 'border border-slate-300 bg-transparent shadow-sm hover:bg-accent hover:text-accent-foreground', }, size: { - default: 'h-9 px-3', + default: 'md:h-8 2xl:h-9 px-3', sm: 'h-8 px-2', lg: 'h-10 px-3', }, diff --git a/app/handlers/control-letter.handler.ts b/app/handlers/control-letter.handler.ts new file mode 100644 index 00000000..b096a178 --- /dev/null +++ b/app/handlers/control-letter.handler.ts @@ -0,0 +1,24 @@ +// Handlers +import { genCrudHandler } from '~/handlers/_handler' + +// Services +import { create, update, remove } from '~/services/control-letter.service' + +export const { + recId, + recAction, + recItem, + isReadonly, + isProcessing, + isFormEntryDialogOpen, + isRecordConfirmationOpen, + onResetState, + handleActionSave, + handleActionEdit, + handleActionRemove, + handleCancelForm, +} = genCrudHandler({ + create, + update, + remove, +}) diff --git a/app/lib/date.ts b/app/lib/date.ts index 6bbfff7b..1d01b162 100644 --- a/app/lib/date.ts +++ b/app/lib/date.ts @@ -64,4 +64,17 @@ export function getFormatDateId(date: Date) { const mm = monthsInId[date.getMonth()] const yyyy = date.getFullYear() return `${dd} ${mm} ${yyyy}` +} + return { + idFormat, + extFormat + }; +} + +export function formatDateYyyyMmDd(isoDateString: string): string { + const date = new Date(isoDateString); + const year = date.getFullYear(); + const month = String(date.getMonth() + 1).padStart(2, '0'); + const day = String(date.getDate()).padStart(2, '0'); + return `${year}-${month}-${day}`; } diff --git a/app/models/control-letter.ts b/app/models/control-letter.ts new file mode 100644 index 00000000..8f520212 --- /dev/null +++ b/app/models/control-letter.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 ControlLetter 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 genControlLetter(): ControlLetter { + 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/doctor.ts b/app/models/doctor.ts index 3f517476..1b631907 100644 --- a/app/models/doctor.ts +++ b/app/models/doctor.ts @@ -8,10 +8,11 @@ export interface Doctor extends Base { employee: Employee ihs_number: string sip_number: string - unit_id?: number - specialist_id?: number + code?: string + unit_icode?: number + specialist_icode?: number specialist?: Specialist - subspecialist_id?: number + subspecialist_icode?: number subspecialist?: Subspecialist bpjs_code?: string } @@ -21,9 +22,9 @@ export interface CreateDto { employee_id: number ihs_number: string sip_number: string - unit_id?: number - specialist_id?: number - subspecialist_id?: number + unit_code?: number + specialist_code?: number + subspecialist_code?: number bpjs_code: string } diff --git a/app/pages/(features)/integration/bpjs/control-letter/index.vue b/app/pages/(features)/integration/bpjs/control-letter/index.vue new file mode 100644 index 00000000..8dcb9006 --- /dev/null +++ b/app/pages/(features)/integration/bpjs/control-letter/index.vue @@ -0,0 +1,40 @@ + + + diff --git a/app/pages/(features)/integration/bpjs/sep/add.vue b/app/pages/(features)/integration/bpjs/sep/add.vue index 5db12aac..0658780b 100644 --- a/app/pages/(features)/integration/bpjs/sep/add.vue +++ b/app/pages/(features)/integration/bpjs/sep/add.vue @@ -22,12 +22,12 @@ const { checkRole, hasCreateAccess } = useRBAC() // Check if user has access to this page const hasAccess = checkRole(roleAccess) -if (!hasAccess) { - throw createError({ - statusCode: 403, - statusMessage: 'Access denied', - }) -} +// if (!hasAccess) { +// throw createError({ +// statusCode: 403, +// statusMessage: 'Access denied', +// }) +// } // Define permission-based computed properties const canCreate = true // hasCreateAccess(roleAccess) diff --git a/app/pages/(features)/integration/bpjs/sep/index.vue b/app/pages/(features)/integration/bpjs/sep/index.vue index b8ec57c4..d99dbb5d 100644 --- a/app/pages/(features)/integration/bpjs/sep/index.vue +++ b/app/pages/(features)/integration/bpjs/sep/index.vue @@ -22,9 +22,9 @@ const { checkRole, hasReadAccess } = useRBAC() // Check if user has access to this page const hasAccess = checkRole(roleAccess) -if (!hasAccess) { - navigateTo('/403') -} +// if (!hasAccess) { +// navigateTo('/403') +// } // Define permission-based computed properties const canRead = true // hasReadAccess(roleAccess) diff --git a/app/pages/(features)/outpatient/encounter/[id]/index.vue b/app/pages/(features)/outpatient/encounter/[id]/index.vue new file mode 100644 index 00000000..1864cf2c --- /dev/null +++ b/app/pages/(features)/outpatient/encounter/[id]/index.vue @@ -0,0 +1,41 @@ + + + diff --git a/app/pages/(features)/rehab/encounter/[id]/control-letter/[control_letter_id]/edit.vue b/app/pages/(features)/rehab/encounter/[id]/control-letter/[control_letter_id]/edit.vue new file mode 100644 index 00000000..cc5d182f --- /dev/null +++ b/app/pages/(features)/rehab/encounter/[id]/control-letter/[control_letter_id]/edit.vue @@ -0,0 +1,41 @@ + + + diff --git a/app/pages/(features)/rehab/encounter/[id]/control-letter/[control_letter_id]/index.vue b/app/pages/(features)/rehab/encounter/[id]/control-letter/[control_letter_id]/index.vue new file mode 100644 index 00000000..612315ad --- /dev/null +++ b/app/pages/(features)/rehab/encounter/[id]/control-letter/[control_letter_id]/index.vue @@ -0,0 +1,41 @@ + + + diff --git a/app/pages/(features)/rehab/encounter/[id]/control-letter/add.vue b/app/pages/(features)/rehab/encounter/[id]/control-letter/add.vue new file mode 100644 index 00000000..1070a29f --- /dev/null +++ b/app/pages/(features)/rehab/encounter/[id]/control-letter/add.vue @@ -0,0 +1,42 @@ + + + diff --git a/app/pages/(features)/rehab/encounter/[id]/process.vue b/app/pages/(features)/rehab/encounter/[id]/process.vue index 3fa7525a..abd0efa7 100644 --- a/app/pages/(features)/rehab/encounter/[id]/process.vue +++ b/app/pages/(features)/rehab/encounter/[id]/process.vue @@ -22,15 +22,15 @@ const { checkRole, hasCreateAccess } = useRBAC() // Check if user has access to this page const hasAccess = checkRole(roleAccess) -if (!hasAccess) { - throw createError({ - statusCode: 403, - statusMessage: 'Access denied', - }) -} +// if (!hasAccess) { +// throw createError({ +// statusCode: 403, +// statusMessage: 'Access denied', +// }) +// } // Define permission-based computed properties -const canCreate = hasCreateAccess(roleAccess) +const canCreate = true // hasCreateAccess(roleAccess)