From 3eb9dde21ddb3d9ad2416ad567d2ce54d3dfacf9 Mon Sep 17 00:00:00 2001 From: Munawwirul Jamal <57973347+munaja@users.noreply.github.com> Date: Wed, 8 Oct 2025 00:03:36 +0700 Subject: [PATCH] Dev cleaning (#106) --- .editorconfig | 30 + .env.example | 1 + .prettierrc.json | 11 + .vscode/launch.json | 15 + README-nuxt.md | 75 + README.md | 109 +- app/app.vue | 25 + app/assets/css/main.css | 378 + .../app/assesment-function/entry-form.vue | 47 + .../app/assesment-function/list-cfg.ts | 119 + .../app/assesment-function/list.vue | 19 + .../app/assesment-function/picker.vue | 0 .../app/assesment-function/search.vue | 0 app/components/app/auth/login.vue | 74 + app/components/app/bed/entry-form.vue | 105 + app/components/app/bed/list-cfg.ts | 47 + app/components/app/bed/list.vue | 36 + app/components/app/building/entry-form.vue | 108 + app/components/app/building/list-cfg.ts | 37 + app/components/app/building/list.vue | 41 + app/components/app/chamber/entry-form.vue | 105 + app/components/app/chamber/list-cfg.ts | 47 + app/components/app/chamber/list.vue | 36 + app/components/app/counter/entry-form.vue | 108 + app/components/app/counter/list-cfg.ts | 37 + app/components/app/counter/list.vue | 41 + app/components/app/division/entry-form.vue | 125 + app/components/app/division/list-cfg.ts | 47 + app/components/app/division/list.vue | 41 + app/components/app/doctor/entry-form.vue | 48 + app/components/app/doctor/list-cfg.ts | 114 + app/components/app/doctor/list.vue | 19 + app/components/app/doctor/picker.vue | 0 app/components/app/doctor/search.vue | 0 app/components/app/doctor/status-badge.vue | 29 + app/components/app/employee/entry-form.vue | 49 + app/components/app/employee/list-cfg.ts | 109 + app/components/app/employee/list.vue | 19 + app/components/app/employee/picker.vue | 0 app/components/app/employee/search.vue | 0 app/components/app/encounter/entry-form.vue | 356 + app/components/app/encounter/filter.vue | 114 + app/components/app/encounter/list-cfg.ts | 131 + app/components/app/encounter/list.vue | 19 + app/components/app/encounter/picker.vue | 0 app/components/app/encounter/quick-info.vue | 83 + app/components/app/encounter/search.vue | 0 app/components/app/encounter/status-badge.vue | 29 + app/components/app/encounter/status.vue | 6 + app/components/app/equipment/entry-form.vue | 126 + app/components/app/equipment/list-cfg.ts | 43 + app/components/app/equipment/list.vue | 40 + app/components/app/floor/entry-form.vue | 125 + app/components/app/floor/list-cfg.ts | 44 + app/components/app/floor/list.vue | 41 + app/components/app/icd/entry-form.vue | 43 + app/components/app/icd/list-cfg.ts | 131 + app/components/app/icd/list.vue | 19 + app/components/app/icd/multiselect-picker.vue | 20 + app/components/app/icd/preview.vue | 46 + app/components/app/icd/search.vue | 0 app/components/app/icd/status-badge.vue | 29 + .../app/installation/entry-form.vue | 119 + app/components/app/installation/list-cfg.ts | 51 + app/components/app/installation/list.vue | 41 + app/components/app/item-price/entry-form.vue | 50 + app/components/app/item-price/list-cfg.ts | 46 + app/components/app/item-price/list.vue | 19 + app/components/app/item-price/picker.vue | 0 app/components/app/item-price/search.vue | 0 .../app/item-price/status-badge.vue | 29 + app/components/app/item/entry-form.vue | 68 + app/components/app/item/list-cfg.ts | 46 + app/components/app/item/list.vue | 19 + app/components/app/item/picker.vue | 0 app/components/app/item/search.vue | 0 app/components/app/item/status-badge.vue | 29 + app/components/app/laborant/entry-form.vue | 31 + app/components/app/laborant/list-cfg.ts | 114 + app/components/app/laborant/list.vue | 19 + app/components/app/laborant/picker.vue | 0 app/components/app/laborant/search.vue | 0 app/components/app/laborant/status-badge.vue | 29 + .../app/medicine-group/entry-form.vue | 96 + app/components/app/medicine-group/list-cfg.ts | 37 + app/components/app/medicine-group/list.vue | 40 + .../app/medicine-method/entry-form.vue | 96 + .../app/medicine-method/list-cfg.ts | 37 + app/components/app/medicine-method/list.vue | 40 + app/components/app/medicine/entry-form.vue | 196 + app/components/app/medicine/list-cfg.ts | 59 + app/components/app/medicine/list.vue | 40 + app/components/app/medicine/picker.vue | 0 app/components/app/medicine/search.vue | 0 app/components/app/medicine/status-badge.vue | 29 + app/components/app/nurse/entry-form.vue | 31 + app/components/app/nurse/list-cfg.ts | 114 + app/components/app/nurse/list.vue | 19 + app/components/app/nurse/picker.vue | 0 app/components/app/nurse/search.vue | 0 app/components/app/nurse/status-badge.vue | 29 + .../app/nutritionist/entry-form.vue | 31 + app/components/app/nutritionist/list-cfg.ts | 114 + app/components/app/nutritionist/list.vue | 19 + app/components/app/nutritionist/picker.vue | 0 app/components/app/nutritionist/search.vue | 0 .../app/nutritionist/status-badge.vue | 29 + .../app/patient/_common/input-file.vue | 58 + .../patient/_common/input-patient-name.vue | 102 + .../_common/radio-communication-barrier.vue | 94 + .../app/patient/_common/radio-disability.vue | 94 + .../app/patient/_common/radio-gender.vue | 92 + .../app/patient/_common/radio-nationality.vue | 94 + .../app/patient/_common/select-disability.vue | 81 + .../app/patient/_common/select-dob.vue | 142 + .../app/patient/_common/select-education.vue | 88 + .../app/patient/_common/select-ethnicity.vue | 86 + .../app/patient/_common/select-job.vue | 155 + .../app/patient/_common/select-lang.vue | 82 + .../patient/_common/select-marital-status.vue | 78 + .../app/patient/_common/select-religion.vue | 86 + app/components/app/patient/entry-form.vue | 225 + app/components/app/patient/list-cfg.ts | 100 + app/components/app/patient/list.vue | 36 + app/components/app/patient/picker.vue | 20 + app/components/app/patient/preview.vue | 153 + app/components/app/patient/search.vue | 0 app/components/app/patient/status-badge.vue | 29 + .../_common/radio-residence.vue | 95 + .../_common/select-district.vue | 63 + .../person-address/_common/select-postal.vue | 76 + .../_common/select-province.vue | 69 + .../person-address/_common/select-regency.vue | 65 + .../person-address/_common/select-village.vue | 64 + .../person-address/entry-form-relative.vue | 369 + .../app/person-address/entry-form.vue | 268 + .../_common/select-contact-type.vue | 71 + .../app/person-contact/entry-form.vue | 110 + .../_common/select-relations.vue | 65 + .../person-relative/_common/table-head.vue | 22 + .../app/person-relative/entry-form.vue | 155 + .../person/_common/radio-parents-input.vue | 94 + app/components/app/person/entry-form.vue | 476 + .../app/person/family-parents-form.vue | 167 + app/components/app/pharmacist/entry-form.vue | 31 + app/components/app/pharmacist/list-cfg.ts | 114 + app/components/app/pharmacist/list.vue | 19 + app/components/app/pharmacist/picker.vue | 0 app/components/app/pharmacist/search.vue | 0 .../app/pharmacist/status-badge.vue | 29 + .../app/prescription-item/list-entry.ts | 66 + .../app/prescription-item/list-entry.vue | 19 + app/components/app/prescription/entry.vue | 32 + app/components/app/prescription/list.vue | 42 + .../registration/sep-prosedur/entry-form.vue | 47 + .../registration/sep-prosedur/list-cfg.ts | 112 + .../rehab/registration/sep-prosedur/list.vue | 19 + .../registration/sep-prosedur/picker.vue | 0 .../registration/sep-prosedur/search.vue | 0 app/components/app/room/entry-form.vue | 195 + app/components/app/room/list-cfg.ts | 61 + app/components/app/room/list.vue | 41 + .../app/satusehat/badge-patient.vue | 13 + app/components/app/satusehat/badge-status.vue | 29 + app/components/app/satusehat/badge.vue | 36 + .../app/satusehat/button-action.vue | 16 + app/components/app/satusehat/card-summary.vue | 19 + app/components/app/satusehat/entry-form.vue | 47 + app/components/app/satusehat/list-cfg.ts | 78 + app/components/app/satusehat/list.vue | 14 + app/components/app/satusehat/picker.vue | 51 + app/components/app/satusehat/search.vue | 12 + app/components/app/sep/entry-form.vue | 282 + app/components/app/sep/list-cfg.ts | 78 + app/components/app/sep/list.vue | 34 + app/components/app/sep/small-entry.vue | 218 + app/components/app/sep/table-history-sep.vue | 81 + .../app/sep/table-search-letter.vue | 104 + .../app/sep/table-search-patient.vue | 100 + app/components/app/soapi/early-entry.vue | 222 + .../app/soapi/early-rehab-entry.vue | 101 + app/components/app/soapi/entry.vue | 28 + app/components/app/soapi/function-entry.vue | 172 + app/components/app/soapi/list-cfg.ts | 119 + app/components/app/soapi/list.vue | 19 + app/components/app/soapi/picker.vue | 0 app/components/app/soapi/search.vue | 0 .../app/specialist-intern/entry-form.vue | 106 + app/components/app/specialist/entry-form.vue | 143 + app/components/app/specialist/list-cfg.ts | 48 + app/components/app/specialist/list.vue | 41 + .../app/subspecialist/entry-form.vue | 144 + app/components/app/subspecialist/list-cfg.ts | 48 + app/components/app/subspecialist/list.vue | 41 + app/components/app/tools/entry-form.vue | 118 + app/components/app/tools/list-cfg.ts | 48 + app/components/app/tools/list.vue | 40 + app/components/app/unit/entry-form.vue | 120 + app/components/app/unit/list-cfg.ts | 48 + app/components/app/unit/list.vue | 41 + app/components/app/uom/entry-form.vue | 96 + app/components/app/uom/list-cfg.ts | 46 + app/components/app/uom/list.vue | 40 + app/components/app/user/entry-form.vue | 37 + app/components/app/user/list-cfg.ts | 109 + app/components/app/user/list.vue | 19 + app/components/app/user/picker.vue | 0 app/components/app/user/search.vue | 0 app/components/app/warehouse/entry-form.vue | 105 + app/components/app/warehouse/list-cfg.ts | 47 + app/components/app/warehouse/list.vue | 36 + .../content/assesment-function/add.vue | 3 + .../content/assesment-function/list.vue | 64 + app/components/content/auth/login.vue | 48 + app/components/content/bed/list.vue | 8 + app/components/content/building/list.vue | 162 + app/components/content/chamber/list.vue | 8 + app/components/content/counter/list.vue | 152 + app/components/content/dashboard/index.vue | 181 + app/components/content/division/list.vue | 205 + app/components/content/employee/entry.vue | 57 + app/components/content/employee/list.vue | 63 + app/components/content/encounter/entry.vue | 51 + app/components/content/encounter/list.vue | 109 + app/components/content/encounter/process.vue | 71 + app/components/content/equipment/list.vue | 175 + app/components/content/floor/list.vue | 166 + app/components/content/installation/list.vue | 175 + app/components/content/item-price/list.vue | 71 + app/components/content/item/list.vue | 71 + .../content/medicine-group/list.vue | 171 + .../content/medicine-method/list.vue | 171 + app/components/content/medicine/entry.vue | 16 + app/components/content/medicine/list.vue | 181 + app/components/content/patient/detail.vue | 83 + app/components/content/patient/entry.vue | 180 + app/components/content/patient/list.vue | 216 + app/components/content/prescription/list.vue | 69 + .../content/rehab/registration/home.vue | 86 + .../rehab/registration/sep-prosedur/add.vue | 3 + .../rehab/registration/sep-prosedur/list.vue | 64 + app/components/content/room/list.vue | 200 + app/components/content/satusehat/const.ts | 97 + app/components/content/satusehat/list.vue | 225 + .../content/satusehat/schema.query.ts | 23 + app/components/content/sep/entry.vue | 113 + app/components/content/sep/list.vue | 250 + app/components/content/soapi/entry.vue | 16 + app/components/content/soapi/form.vue | 36 + app/components/content/soapi/list.vue | 66 + .../content/specialist-intern/entry.vue | 49 + .../content/specialist-intern/list.vue | 63 + app/components/content/specialist/list.vue | 176 + app/components/content/subspecialist/list.vue | 176 + app/components/content/tools/list.vue | 176 + app/components/content/unit/list.vue | 171 + app/components/content/uom/list.vue | 169 + app/components/content/user/entry.vue | 34 + app/components/content/user/list.vue | 63 + app/components/content/warehouse/list.vue | 8 + app/components/layout/AppSidebar.vue | 88 + app/components/layout/Auth.vue | 31 + app/components/layout/Header.vue | 62 + app/components/layout/SidebarNavFooter.vue | 96 + app/components/layout/SidebarNavGroup.vue | 55 + app/components/layout/SidebarNavHeader.vue | 40 + app/components/layout/SidebarNavLink.vue | 42 + app/components/layout/ThemeToggle.vue | 15 + app/components/pub/my-ui/breadcrumb/index.vue | 33 + .../pub/my-ui/comp-tab/comp-tab.vue | 43 + app/components/pub/my-ui/comp-tab/type.ts | 6 + .../pub/my-ui/confirmation/README.md | 137 + .../pub/my-ui/confirmation/confirmation.vue | 99 + .../confirmation/record-confirmation.vue | 131 + .../pub/my-ui/data-table/data-table.vue | 137 + app/components/pub/my-ui/data-table/type.ts | 4 + .../pub/my-ui/data/dropdown-action-du.vue | 70 + .../pub/my-ui/data/dropdown-action-ducd.vue | 90 + .../pub/my-ui/data/dropdown-action-dud.vue | 83 + .../pub/my-ui/data/dropdown-action-pdud.vue | 96 + .../pub/my-ui/data/dropdown-action-ud.vue | 75 + app/components/pub/my-ui/data/types.ts | 109 + app/components/pub/my-ui/doc-entry/block.vue | 79 + app/components/pub/my-ui/doc-entry/cell.vue | 42 + app/components/pub/my-ui/doc-entry/colon.vue | 7 + app/components/pub/my-ui/doc-entry/field.vue | 14 + app/components/pub/my-ui/doc-entry/index.ts | 4 + app/components/pub/my-ui/doc-entry/label.vue | 39 + app/components/pub/my-ui/error/error.vue | 51 + app/components/pub/my-ui/form/block.vue | 11 + app/components/pub/my-ui/form/combobox.vue | 149 + .../pub/my-ui/form/datepicker-single.vue | 57 + app/components/pub/my-ui/form/field-group.vue | 44 + app/components/pub/my-ui/form/field.vue | 18 + app/components/pub/my-ui/form/input-base.vue | 82 + app/components/pub/my-ui/form/label.vue | 68 + app/components/pub/my-ui/form/select.vue | 171 + .../pub/my-ui/form/view/detail-row.vue | 20 + .../pub/my-ui/form/view/detail-section.vue | 22 + app/components/pub/my-ui/modal/dialog.vue | 55 + app/components/pub/my-ui/modal/modal.vue | 51 + app/components/pub/my-ui/nav-content/ba.vue | 28 + .../pub/my-ui/nav-footer/ba-dr-su-pr.vue | 32 + .../pub/my-ui/nav-footer/ba-dr-su.vue | 28 + .../pub/my-ui/nav-footer/ba-ed-de-pri.vue | 32 + .../pub/my-ui/nav-footer/ba-ed-de.vue | 28 + .../pub/my-ui/nav-footer/ba-ed-pri.vue | 28 + app/components/pub/my-ui/nav-footer/ba-ed.vue | 39 + app/components/pub/my-ui/nav-footer/ba-su.vue | 36 + .../pub/my-ui/nav-header/filter.vue | 93 + .../pub/my-ui/nav-header/header.vue | 143 + app/components/pub/my-ui/nav-header/prep.vue | 70 + .../pub/my-ui/nav-header/search.vue | 42 + .../pub/my-ui/pagination/pagination-view.vue | 24 + .../pub/my-ui/pagination/pagination.type.ts | 13 + .../pub/my-ui/pagination/pagination.vue | 131 + .../pub/my-ui/select-tree/command-item.vue | 27 + app/components/pub/my-ui/select-tree/leaf.vue | 40 + .../pub/my-ui/select-tree/tree-node.vue | 116 + .../pub/my-ui/select-tree/tree-select.vue | 91 + .../pub/my-ui/select-tree/tree-view.vue | 55 + app/components/pub/my-ui/select-tree/type.ts | 6 + .../my-ui/service-status/service-status.vue | 72 + .../pub/my-ui/service-status/type.ts | 7 + .../pub/my-ui/summary-card/summary-card.vue | 71 + app/components/pub/my-ui/summary-card/type.ts | 7 + app/components/pub/ui/accordion/Accordion.vue | 19 + .../pub/ui/accordion/AccordionContent.vue | 26 + .../pub/ui/accordion/AccordionItem.vue | 26 + .../pub/ui/accordion/AccordionTrigger.vue | 41 + app/components/pub/ui/accordion/index.ts | 4 + .../pub/ui/alert-dialog/AlertDialog.vue | 15 + .../pub/ui/alert-dialog/AlertDialogAction.vue | 23 + .../pub/ui/alert-dialog/AlertDialogCancel.vue | 23 + .../ui/alert-dialog/AlertDialogContent.vue | 43 + .../alert-dialog/AlertDialogDescription.vue | 27 + .../pub/ui/alert-dialog/AlertDialogFooter.vue | 21 + .../pub/ui/alert-dialog/AlertDialogHeader.vue | 16 + .../pub/ui/alert-dialog/AlertDialogTitle.vue | 24 + .../ui/alert-dialog/AlertDialogTrigger.vue | 12 + app/components/pub/ui/alert-dialog/index.ts | 9 + app/components/pub/ui/alert/Alert.vue | 18 + .../pub/ui/alert/AlertDescription.vue | 14 + app/components/pub/ui/alert/AlertTitle.vue | 14 + app/components/pub/ui/alert/index.ts | 24 + .../pub/ui/aspect-ratio/AspectRatio.vue | 12 + app/components/pub/ui/aspect-ratio/index.ts | 1 + app/components/pub/ui/avatar/Avatar.vue | 23 + .../pub/ui/avatar/AvatarFallback.vue | 12 + app/components/pub/ui/avatar/AvatarImage.vue | 10 + app/components/pub/ui/avatar/index.ts | 25 + app/components/pub/ui/badge/Badge.vue | 18 + app/components/pub/ui/badge/index.ts | 26 + .../pub/ui/breadcrumb/Breadcrumb.vue | 13 + .../pub/ui/breadcrumb/BreadcrumbEllipsis.vue | 22 + .../pub/ui/breadcrumb/BreadcrumbItem.vue | 16 + .../pub/ui/breadcrumb/BreadcrumbLink.vue | 20 + .../pub/ui/breadcrumb/BreadcrumbList.vue | 16 + .../pub/ui/breadcrumb/BreadcrumbPage.vue | 19 + .../pub/ui/breadcrumb/BreadcrumbSeparator.vue | 21 + app/components/pub/ui/breadcrumb/index.ts | 7 + app/components/pub/ui/button/Button.vue | 28 + app/components/pub/ui/button/index.ts | 36 + app/components/pub/ui/calendar/Calendar.vue | 73 + .../pub/ui/calendar/CalendarCell.vue | 26 + .../pub/ui/calendar/CalendarCellTrigger.vue | 41 + .../pub/ui/calendar/CalendarGrid.vue | 26 + .../pub/ui/calendar/CalendarGridBody.vue | 12 + .../pub/ui/calendar/CalendarGridHead.vue | 12 + .../pub/ui/calendar/CalendarGridRow.vue | 23 + .../pub/ui/calendar/CalendarHeadCell.vue | 23 + .../pub/ui/calendar/CalendarHeader.vue | 23 + .../pub/ui/calendar/CalendarHeading.vue | 29 + .../pub/ui/calendar/CalendarNextButton.vue | 34 + .../pub/ui/calendar/CalendarPrevButton.vue | 34 + app/components/pub/ui/calendar/index.ts | 12 + app/components/pub/ui/card/Card.vue | 21 + app/components/pub/ui/card/CardContent.vue | 14 + .../pub/ui/card/CardDescription.vue | 14 + app/components/pub/ui/card/CardFooter.vue | 14 + app/components/pub/ui/card/CardHeader.vue | 14 + app/components/pub/ui/card/CardTitle.vue | 18 + app/components/pub/ui/card/index.ts | 6 + app/components/pub/ui/carousel/Carousel.vue | 45 + .../pub/ui/carousel/CarouselContent.vue | 30 + .../pub/ui/carousel/CarouselItem.vue | 24 + .../pub/ui/carousel/CarouselNext.vue | 31 + .../pub/ui/carousel/CarouselPrevious.vue | 31 + app/components/pub/ui/carousel/index.ts | 10 + app/components/pub/ui/carousel/interface.ts | 20 + app/components/pub/ui/carousel/useCarousel.ts | 59 + .../pub/ui/chart-area/AreaChart.vue | 138 + app/components/pub/ui/chart-area/index.ts | 66 + app/components/pub/ui/chart-bar/BarChart.vue | 117 + app/components/pub/ui/chart-bar/index.ts | 66 + .../pub/ui/chart-donut/DonutChart.vue | 102 + app/components/pub/ui/chart-donut/index.ts | 39 + .../pub/ui/chart-line/LineChart.vue | 107 + app/components/pub/ui/chart-line/index.ts | 66 + .../pub/ui/chart/ChartCrosshair.vue | 45 + app/components/pub/ui/chart/ChartLegend.vue | 50 + .../pub/ui/chart/ChartSingleTooltip.vue | 66 + app/components/pub/ui/chart/ChartTooltip.vue | 40 + app/components/pub/ui/chart/index.ts | 18 + app/components/pub/ui/chart/interface.ts | 64 + app/components/pub/ui/checkbox/Checkbox.vue | 33 + app/components/pub/ui/checkbox/index.ts | 1 + .../pub/ui/collapsible/Collapsible.vue | 15 + .../pub/ui/collapsible/CollapsibleContent.vue | 12 + .../pub/ui/collapsible/CollapsibleTrigger.vue | 12 + app/components/pub/ui/collapsible/index.ts | 3 + app/components/pub/ui/command/Command.vue | 31 + .../pub/ui/command/CommandDialog.vue | 27 + .../pub/ui/command/CommandEmpty.vue | 21 + .../pub/ui/command/CommandGroup.vue | 30 + .../pub/ui/command/CommandInput.vue | 35 + app/components/pub/ui/command/CommandItem.vue | 27 + app/components/pub/ui/command/CommandList.vue | 28 + .../pub/ui/command/CommandSeparator.vue | 24 + .../pub/ui/command/CommandShortcut.vue | 14 + app/components/pub/ui/command/index.ts | 9 + .../pub/ui/context-menu/ContextMenu.vue | 15 + .../context-menu/ContextMenuCheckboxItem.vue | 41 + .../ui/context-menu/ContextMenuContent.vue | 37 + .../pub/ui/context-menu/ContextMenuGroup.vue | 12 + .../pub/ui/context-menu/ContextMenuItem.vue | 35 + .../pub/ui/context-menu/ContextMenuLabel.vue | 27 + .../pub/ui/context-menu/ContextMenuPortal.vue | 12 + .../ui/context-menu/ContextMenuRadioGroup.vue | 19 + .../ui/context-menu/ContextMenuRadioItem.vue | 41 + .../ui/context-menu/ContextMenuSeparator.vue | 22 + .../ui/context-menu/ContextMenuShortcut.vue | 14 + .../pub/ui/context-menu/ContextMenuSub.vue | 19 + .../ui/context-menu/ContextMenuSubContent.vue | 36 + .../ui/context-menu/ContextMenuSubTrigger.vue | 36 + .../ui/context-menu/ContextMenuTrigger.vue | 14 + app/components/pub/ui/context-menu/index.ts | 14 + app/components/pub/ui/dialog/Dialog.vue | 15 + app/components/pub/ui/dialog/DialogClose.vue | 12 + .../pub/ui/dialog/DialogContent.vue | 51 + .../pub/ui/dialog/DialogDescription.vue | 26 + app/components/pub/ui/dialog/DialogFooter.vue | 19 + app/components/pub/ui/dialog/DialogHeader.vue | 16 + .../pub/ui/dialog/DialogScrollContent.vue | 60 + app/components/pub/ui/dialog/DialogTitle.vue | 31 + .../pub/ui/dialog/DialogTrigger.vue | 12 + app/components/pub/ui/dialog/index.ts | 9 + app/components/pub/ui/drawer/Drawer.vue | 19 + .../pub/ui/drawer/DrawerContent.vue | 29 + .../pub/ui/drawer/DrawerDescription.vue | 21 + app/components/pub/ui/drawer/DrawerFooter.vue | 14 + app/components/pub/ui/drawer/DrawerHeader.vue | 14 + .../pub/ui/drawer/DrawerOverlay.vue | 19 + app/components/pub/ui/drawer/DrawerTitle.vue | 21 + app/components/pub/ui/drawer/index.ts | 8 + .../pub/ui/dropdown-menu/DropdownMenu.vue | 15 + .../DropdownMenuCheckboxItem.vue | 41 + .../ui/dropdown-menu/DropdownMenuContent.vue | 39 + .../ui/dropdown-menu/DropdownMenuGroup.vue | 12 + .../pub/ui/dropdown-menu/DropdownMenuItem.vue | 30 + .../ui/dropdown-menu/DropdownMenuLabel.vue | 26 + .../dropdown-menu/DropdownMenuRadioGroup.vue | 19 + .../dropdown-menu/DropdownMenuRadioItem.vue | 42 + .../dropdown-menu/DropdownMenuSeparator.vue | 24 + .../ui/dropdown-menu/DropdownMenuShortcut.vue | 14 + .../pub/ui/dropdown-menu/DropdownMenuSub.vue | 19 + .../dropdown-menu/DropdownMenuSubContent.vue | 31 + .../dropdown-menu/DropdownMenuSubTrigger.vue | 35 + .../ui/dropdown-menu/DropdownMenuTrigger.vue | 14 + app/components/pub/ui/dropdown-menu/index.ts | 16 + app/components/pub/ui/form/FormControl.vue | 17 + .../pub/ui/form/FormDescription.vue | 21 + app/components/pub/ui/form/FormItem.vue | 20 + app/components/pub/ui/form/FormLabel.vue | 18 + app/components/pub/ui/form/FormMessage.vue | 16 + app/components/pub/ui/form/index.ts | 7 + app/components/pub/ui/form/injectionKeys.ts | 3 + app/components/pub/ui/form/useFormField.ts | 29 + .../pub/ui/hover-card/HoverCard.vue | 15 + .../pub/ui/hover-card/HoverCardContent.vue | 43 + .../pub/ui/hover-card/HoverCardTrigger.vue | 12 + app/components/pub/ui/hover-card/index.ts | 3 + app/components/pub/ui/input/Input.vue | 32 + app/components/pub/ui/input/index.ts | 1 + app/components/pub/ui/label/Label.vue | 29 + app/components/pub/ui/label/index.ts | 1 + app/components/pub/ui/menubar/Menubar.vue | 36 + .../pub/ui/menubar/MenubarCheckboxItem.vue | 40 + .../pub/ui/menubar/MenubarContent.vue | 45 + .../pub/ui/menubar/MenubarGroup.vue | 12 + app/components/pub/ui/menubar/MenubarItem.vue | 36 + .../pub/ui/menubar/MenubarLabel.vue | 14 + app/components/pub/ui/menubar/MenubarMenu.vue | 12 + .../pub/ui/menubar/MenubarRadioGroup.vue | 20 + .../pub/ui/menubar/MenubarRadioItem.vue | 40 + .../pub/ui/menubar/MenubarSeparator.vue | 21 + .../pub/ui/menubar/MenubarShortcut.vue | 14 + app/components/pub/ui/menubar/MenubarSub.vue | 20 + .../pub/ui/menubar/MenubarSubContent.vue | 40 + .../pub/ui/menubar/MenubarSubTrigger.vue | 31 + .../pub/ui/menubar/MenubarTrigger.vue | 31 + app/components/pub/ui/menubar/index.ts | 15 + .../pub/ui/navigation-menu/NavigationMenu.vue | 35 + .../navigation-menu/NavigationMenuContent.vue | 35 + .../NavigationMenuIndicator.vue | 26 + .../ui/navigation-menu/NavigationMenuItem.vue | 12 + .../ui/navigation-menu/NavigationMenuLink.vue | 19 + .../ui/navigation-menu/NavigationMenuList.vue | 31 + .../navigation-menu/NavigationMenuTrigger.vue | 37 + .../NavigationMenuViewport.vue | 35 + .../pub/ui/navigation-menu/index.ts | 12 + .../pub/ui/number-field/NumberField.vue | 24 + .../ui/number-field/NumberFieldContent.vue | 14 + .../ui/number-field/NumberFieldDecrement.vue | 26 + .../ui/number-field/NumberFieldIncrement.vue | 26 + .../pub/ui/number-field/NumberFieldInput.vue | 8 + app/components/pub/ui/number-field/index.ts | 5 + .../pub/ui/pagination/PaginationEllipsis.vue | 24 + .../pub/ui/pagination/PaginationFirst.vue | 31 + .../pub/ui/pagination/PaginationLast.vue | 31 + .../pub/ui/pagination/PaginationNext.vue | 31 + .../pub/ui/pagination/PaginationPrev.vue | 31 + app/components/pub/ui/pagination/index.ts | 10 + app/components/pub/ui/pin-input/PinInput.vue | 25 + .../pub/ui/pin-input/PinInputGroup.vue | 20 + .../pub/ui/pin-input/PinInputInput.vue | 20 + .../pub/ui/pin-input/PinInputSeparator.vue | 15 + app/components/pub/ui/pin-input/index.ts | 4 + app/components/pub/ui/popover/Popover.vue | 15 + .../pub/ui/popover/PopoverContent.vue | 49 + .../pub/ui/popover/PopoverTrigger.vue | 12 + app/components/pub/ui/popover/index.ts | 3 + app/components/pub/ui/progress/Progress.vue | 41 + app/components/pub/ui/progress/index.ts | 1 + .../pub/ui/radio-group/RadioGroup.vue | 27 + .../pub/ui/radio-group/RadioGroupItem.vue | 38 + app/components/pub/ui/radio-group/index.ts | 2 + .../pub/ui/range-calendar/RangeCalendar.vue | 63 + .../ui/range-calendar/RangeCalendarCell.vue | 26 + .../RangeCalendarCellTrigger.vue | 43 + .../ui/range-calendar/RangeCalendarGrid.vue | 26 + .../range-calendar/RangeCalendarGridBody.vue | 12 + .../range-calendar/RangeCalendarGridHead.vue | 12 + .../range-calendar/RangeCalendarGridRow.vue | 23 + .../range-calendar/RangeCalendarHeadCell.vue | 23 + .../ui/range-calendar/RangeCalendarHeader.vue | 23 + .../range-calendar/RangeCalendarHeading.vue | 29 + .../RangeCalendarNextButton.vue | 35 + .../RangeCalendarPrevButton.vue | 35 + app/components/pub/ui/range-calendar/index.ts | 12 + .../pub/ui/resizable/ResizableHandle.vue | 28 + .../pub/ui/resizable/ResizablePanelGroup.vue | 23 + app/components/pub/ui/resizable/index.ts | 3 + .../pub/ui/scroll-area/ScrollArea.vue | 32 + .../pub/ui/scroll-area/ScrollBar.vue | 32 + app/components/pub/ui/scroll-area/index.ts | 2 + app/components/pub/ui/select/Select.vue | 55 + .../pub/ui/select/SelectContent.vue | 56 + app/components/pub/ui/select/SelectGroup.vue | 21 + app/components/pub/ui/select/SelectItem.vue | 45 + .../pub/ui/select/SelectItemText.vue | 12 + app/components/pub/ui/select/SelectLabel.vue | 14 + .../pub/ui/select/SelectScrollDownButton.vue | 25 + .../pub/ui/select/SelectScrollUpButton.vue | 25 + .../pub/ui/select/SelectSeparator.vue | 19 + .../pub/ui/select/SelectTrigger.vue | 34 + app/components/pub/ui/select/SelectValue.vue | 12 + app/components/pub/ui/select/index.ts | 11 + app/components/pub/ui/separator/Separator.vue | 40 + app/components/pub/ui/separator/index.ts | 1 + app/components/pub/ui/sheet/Sheet.vue | 15 + app/components/pub/ui/sheet/SheetClose.vue | 12 + app/components/pub/ui/sheet/SheetContent.vue | 64 + .../pub/ui/sheet/SheetDescription.vue | 24 + app/components/pub/ui/sheet/SheetFooter.vue | 19 + app/components/pub/ui/sheet/SheetHeader.vue | 16 + app/components/pub/ui/sheet/SheetTitle.vue | 24 + app/components/pub/ui/sheet/SheetTrigger.vue | 12 + app/components/pub/ui/sheet/index.ts | 32 + app/components/pub/ui/sidebar/Sidebar.vue | 100 + .../pub/ui/sidebar/SidebarContent.vue | 17 + .../pub/ui/sidebar/SidebarFooter.vue | 17 + .../pub/ui/sidebar/SidebarGroup.vue | 17 + .../pub/ui/sidebar/SidebarGroupAction.vue | 27 + .../pub/ui/sidebar/SidebarGroupContent.vue | 17 + .../pub/ui/sidebar/SidebarGroupLabel.vue | 24 + .../pub/ui/sidebar/SidebarHeader.vue | 17 + .../pub/ui/sidebar/SidebarInput.vue | 20 + .../pub/ui/sidebar/SidebarInset.vue | 20 + app/components/pub/ui/sidebar/SidebarMenu.vue | 17 + .../pub/ui/sidebar/SidebarMenuAction.vue | 35 + .../pub/ui/sidebar/SidebarMenuBadge.vue | 25 + .../pub/ui/sidebar/SidebarMenuButton.vue | 54 + .../pub/ui/sidebar/SidebarMenuButtonChild.vue | 36 + .../pub/ui/sidebar/SidebarMenuItem.vue | 17 + .../pub/ui/sidebar/SidebarMenuSkeleton.vue | 27 + .../pub/ui/sidebar/SidebarMenuSub.vue | 21 + .../pub/ui/sidebar/SidebarMenuSubButton.vue | 35 + .../pub/ui/sidebar/SidebarMenuSubItem.vue | 9 + .../pub/ui/sidebar/SidebarProvider.vue | 102 + app/components/pub/ui/sidebar/SidebarRail.vue | 33 + .../pub/ui/sidebar/SidebarSeparator.vue | 15 + .../pub/ui/sidebar/SidebarTrigger.vue | 21 + app/components/pub/ui/sidebar/index.ts | 52 + app/components/pub/ui/sidebar/utils.ts | 19 + app/components/pub/ui/skeleton/Skeleton.vue | 14 + app/components/pub/ui/skeleton/index.ts | 1 + app/components/pub/ui/slider/Slider.vue | 37 + app/components/pub/ui/slider/index.ts | 1 + app/components/pub/ui/sonner/Sonner.vue | 23 + app/components/pub/ui/sonner/index.ts | 1 + app/components/pub/ui/stepper/Stepper.vue | 32 + .../pub/ui/stepper/StepperDescription.vue | 24 + .../pub/ui/stepper/StepperIndicator.vue | 36 + app/components/pub/ui/stepper/StepperItem.vue | 28 + .../pub/ui/stepper/StepperSeparator.vue | 32 + .../pub/ui/stepper/StepperTitle.vue | 24 + .../pub/ui/stepper/StepperTrigger.vue | 27 + app/components/pub/ui/stepper/index.ts | 7 + app/components/pub/ui/switch/Switch.vue | 38 + app/components/pub/ui/switch/index.ts | 1 + app/components/pub/ui/table/Table.vue | 16 + app/components/pub/ui/table/TableBody.vue | 14 + app/components/pub/ui/table/TableCaption.vue | 14 + app/components/pub/ui/table/TableCell.vue | 21 + app/components/pub/ui/table/TableEmpty.vue | 39 + app/components/pub/ui/table/TableFooter.vue | 14 + app/components/pub/ui/table/TableHead.vue | 14 + app/components/pub/ui/table/TableHeader.vue | 14 + app/components/pub/ui/table/TableRow.vue | 14 + app/components/pub/ui/table/index.ts | 8 + .../pub/ui/table/separator/Separator.vue | 40 + .../pub/ui/table/separator/index.ts | 1 + app/components/pub/ui/tabs/Tabs.vue | 15 + app/components/pub/ui/tabs/TabsContent.vue | 24 + app/components/pub/ui/tabs/TabsList.vue | 27 + app/components/pub/ui/tabs/TabsTrigger.vue | 29 + app/components/pub/ui/tabs/index.ts | 4 + .../pub/ui/tags-input/TagsInput.vue | 24 + .../pub/ui/tags-input/TagsInputInput.vue | 21 + .../pub/ui/tags-input/TagsInputItem.vue | 24 + .../pub/ui/tags-input/TagsInputItemDelete.vue | 25 + .../pub/ui/tags-input/TagsInputItemText.vue | 21 + app/components/pub/ui/tags-input/index.ts | 5 + app/components/pub/ui/textarea/Textarea.vue | 24 + app/components/pub/ui/textarea/index.ts | 1 + app/components/pub/ui/toast/Toast.vue | 31 + app/components/pub/ui/toast/ToastAction.vue | 21 + app/components/pub/ui/toast/ToastClose.vue | 24 + .../pub/ui/toast/ToastDescription.vue | 21 + app/components/pub/ui/toast/ToastProvider.vue | 12 + app/components/pub/ui/toast/ToastTitle.vue | 21 + app/components/pub/ui/toast/ToastViewport.vue | 19 + app/components/pub/ui/toast/Toaster.vue | 30 + app/components/pub/ui/toast/index.ts | 39 + app/components/pub/ui/toast/use-toast.ts | 165 + .../pub/ui/toggle-group/ToggleGroup.vue | 38 + .../pub/ui/toggle-group/ToggleGroupItem.vue | 45 + app/components/pub/ui/toggle-group/index.ts | 2 + app/components/pub/ui/toggle/Toggle.vue | 39 + app/components/pub/ui/toggle/index.ts | 28 + app/components/pub/ui/tooltip/Tooltip.vue | 15 + .../pub/ui/tooltip/TooltipContent.vue | 33 + .../pub/ui/tooltip/TooltipProvider.vue | 12 + .../pub/ui/tooltip/TooltipTrigger.vue | 12 + app/components/pub/ui/tooltip/index.ts | 4 + app/composables/README-useFormErrors.md | 73 + app/composables/useFormErrors.ts | 107 + app/composables/usePaginatedList.ts | 181 + app/composables/useQueryMode.ts | 25 + app/composables/useRBAC.ts | 49 + app/composables/useTheme.ts | 31 + app/composables/useXfetch.ts | 75 + app/error.vue | 14 + app/handlers/_handler.ts | 260 + app/handlers/device.handler.ts | 24 + app/handlers/division-position.handler.ts | 24 + app/handlers/division.handler.ts | 24 + app/handlers/infra.handler.ts | 24 + app/handlers/installation.handler.ts | 24 + app/handlers/material.handler.ts | 24 + app/handlers/medicine-group.handler.ts | 21 + app/handlers/medicine-method.handler.ts | 24 + app/handlers/medicine.handler.ts | 24 + app/handlers/specialist.handler.ts | 24 + app/handlers/subspecialist.handler.ts | 24 + app/handlers/unit.handler.ts | 25 + app/handlers/uom.handler.ts | 26 + app/layouts/blank.vue | 9 + app/layouts/default.vue | 77 + app/lib/constants.ts | 265 + app/lib/page-permission.ts | 44 + app/lib/utils.ts | 96 + app/middleware/auth.global.ts | 11 + app/middleware/rbac.ts | 32 + app/models/_ai_prompt.txt | 30 + app/models/_base.ts | 49 + app/models/adime.ts | 18 + app/models/ambulatory.ts | 14 + app/models/appointment.ts | 24 + app/models/chemo.ts | 20 + app/models/device-order-item.ts | 16 + app/models/device-order.ts | 15 + app/models/device.ts | 16 + app/models/division-position.ts | 18 + app/models/division.ts | 18 + app/models/doctor-fee.ts | 18 + app/models/doctor.ts | 57 + app/models/emergency.ts | 15 + app/models/employee.ts | 46 + app/models/encounter-payment.ts | 18 + app/models/encounter.ts | 39 + app/models/ethnic.ts | 14 + app/models/infra.ts | 10 + app/models/inpatient.ts | 16 + app/models/installation.ts | 42 + app/models/insurance-company.ts | 20 + app/models/item-price.ts | 41 + app/models/item.ts | 50 + app/models/laborant.ts | 13 + app/models/language.ts | 14 + app/models/material-order-item.ts | 15 + app/models/material-order.ts | 15 + app/models/material.ts | 18 + app/models/mcu-order-item.ts | 17 + app/models/mcu-order-sub-item.ts | 16 + app/models/mcu-order.ts | 23 + app/models/mcu-src-category.ts | 16 + app/models/mcu-src.ts | 18 + app/models/mcu-sub-src.ts | 18 + app/models/medication-item-dist.ts | 17 + app/models/medication-item.ts | 28 + app/models/medication.ts | 17 + app/models/medicine-group.ts | 38 + app/models/medicine-method.ts | 38 + app/models/medicine.ts | 65 + app/models/medicinemix-item.ts | 47 + app/models/medicinemix.ts | 37 + app/models/midwife.ts | 13 + app/models/nurse.ts | 17 + app/models/nutrition-exam.ts | 15 + app/models/nutritionist.ts | 17 + app/models/patient-insurance.ts | 16 + app/models/patient.ts | 137 + app/models/person-address.ts | 21 + app/models/person-contact.ts | 16 + app/models/person-relative.ts | 14 + app/models/person.ts | 36 + app/models/pharmachist.ts | 13 + app/models/practice-schedule.ts | 23 + app/models/prescription-item.ts | 69 + app/models/prescription.ts | 56 + app/models/province.ts | 14 + app/models/queue.ts | 22 + app/models/regency.ts | 16 + app/models/role.ts | 22 + app/models/sbar.ts | 17 + app/models/soapi.ts | 18 + app/models/specialist-intern.ts | 25 + app/models/specialist.ts | 16 + app/models/subspecialist.ts | 16 + app/models/triage.ts | 32 + app/models/unit.ts | 16 + app/models/uom.ts | 16 + app/models/user.ts | 17 + app/pages/(error)/401.vue | 26 + app/pages/(error)/403.vue | 34 + app/pages/(error)/404.vue | 34 + app/pages/(error)/500.vue | 33 + app/pages/(error)/503.vue | 26 + app/pages/(features)/bpjs/sep/add.vue | 41 + app/pages/(features)/bpjs/sep/index.vue | 40 + .../(features)/client/patient/[id]/edit.vue | 42 + .../(features)/client/patient/[id]/index.vue | 43 + app/pages/(features)/client/patient/add.vue | 43 + app/pages/(features)/client/patient/index.vue | 43 + app/pages/(features)/common/uom/index.vue | 40 + app/pages/(features)/doctor/add.vue | 41 + app/pages/(features)/doctor/index.vue | 40 + .../(features)/human-src/employee/add.vue | 41 + .../(features)/human-src/employee/index.vue | 40 + .../human-src/specialist-intern/add.vue | 41 + .../human-src/specialist-intern/index.vue | 40 + .../integration/satusehat/[id]/detail.vue | 9 + .../integration/satusehat/[id]/edit.vue | 9 + .../(features)/integration/satusehat/add.vue | 40 + .../integration/satusehat/index.vue | 39 + .../(features)/org-src/division/index.vue | 39 + .../(features)/org-src/installation/index.vue | 39 + .../(features)/org-src/specialist/index.vue | 39 + .../org-src/subspecialist/index.vue | 39 + app/pages/(features)/org-src/unit/index.vue | 39 + .../outpatient/examination-queue/index.vue | 3 + .../outpatient/examination/index.vue | 3 + .../outpatient/registration-queue/index.vue | 3 + .../outpatient/registration/index.vue | 3 + .../rehab/encounter/[id]/detail.vue | 41 + .../(features)/rehab/encounter/[id]/edit.vue | 41 + .../rehab/encounter/[id]/process.vue | 41 + app/pages/(features)/rehab/encounter/add.vue | 41 + .../(features)/rehab/encounter/index.vue | 40 + .../rehab/examination-queue/index.vue | 3 + .../(features)/rehab/examination/index.vue | 3 + .../rehab/registration-queue/index.vue | 5 + .../registration-queue/sep-prosedur/add.vue | 40 + .../rehab/registration/[id]/detail.vue | 41 + .../rehab/registration/[id]/edit.vue | 41 + .../(features)/rehab/registration/add.vue | 41 + .../(features)/rehab/registration/index.vue | 40 + .../(features)/service-src/bed/index.vue | 24 + .../(features)/service-src/building/index.vue | 24 + .../(features)/service-src/chamber/index.vue | 24 + .../(features)/service-src/counter/index.vue | 39 + .../(features)/service-src/floor/index.vue | 24 + .../(features)/service-src/room/index.vue | 24 + .../service-src/warehouse/index.vue | 24 + .../tools-equipment-src/equipment/index.vue | 38 + .../medicine-method/index.vue | 38 + .../medicine-type/index.vue | 38 + .../medicine/[id]/edit.vue | 41 + .../tools-equipment-src/medicine/add.vue | 41 + .../tools-equipment-src/medicine/index.vue | 38 + .../tools-equipment-src/tools/index.vue | 38 + app/pages/_dev/index.vue | 102 + app/pages/_dev/play.vue | 54 + app/pages/_dev/prescription/list.vue | 41 + app/pages/_dev/user/entry.vue | 10 + app/pages/_dev/user/list.vue | 81 + app/pages/auth/login.vue | 17 + app/pages/index.vue | 17 + app/plugins/persist.client.ts | 5 + app/schemas/auth.schema.ts | 0 app/schemas/base.schema.ts | 12 + app/schemas/device.schema.ts | 13 + app/schemas/division.schema.ts | 18 + app/schemas/infra.schema.ts | 20 + app/schemas/installation.schema.ts | 9 + app/schemas/material.schema.ts | 14 + app/schemas/medicine.schema.ts | 13 + app/schemas/patient.schema.ts | 114 + app/schemas/person-address-relative.schema.ts | 27 + app/schemas/person-address.schema.ts | 32 + app/schemas/person-contact.schema.ts | 15 + app/schemas/person-family.schema.ts | 33 + app/schemas/person-relative.schema.ts | 20 + app/schemas/specialist.schema.ts | 16 + app/schemas/subspecialist.schema.ts | 19 + app/schemas/unit.schema.ts | 19 + app/schemas/uom.schema.ts | 4 + app/services/_crud-base.ts | 77 + app/services/auth.service.ts | 0 app/services/device.service.ts | 25 + app/services/division-position.service.ts | 25 + app/services/division.service.ts | 61 + app/services/encounter.service.ts | 48 + app/services/infra.service.ts | 42 + app/services/installation.service.ts | 41 + app/services/material.service.ts | 25 + app/services/medicine-group.service.ts | 41 + app/services/medicine-method.service.ts | 41 + app/services/medicine.service.ts | 25 + app/services/patient.service.ts | 79 + app/services/specialist.service.ts | 41 + app/services/subspecialist.service.ts | 41 + app/services/unit.service.ts | 41 + app/services/uom.service.ts | 41 + app/stores/user.ts | 32 + app/types/error.ts | 27 + app/types/form.ts | 7 + app/types/index.d.ts | 16 + components.json | 18 + eslint.config.js | 55 + nuxt.config.ts | 74 + package.json | 73 + pnpm-lock.yaml | 11753 ++++++++++++++++ public/favicon.ico | Bin 0 -> 4286 bytes public/robots.txt | 2 + public/rss-login-page.jpg | Bin 0 -> 501565 bytes public/rssa-logo.png | Bin 0 -> 31692 bytes public/side-menu-items/doc.json | 116 + public/side-menu-items/lab.json | 58 + public/side-menu-items/miw.json | 32 + public/side-menu-items/nur.json | 95 + public/side-menu-items/nut.json | 67 + public/side-menu-items/pha.json | 75 + public/side-menu-items/reg.json | 75 + public/side-menu-items/sys.json | 361 + server/api/[...req].ts | 45 + server/api/v1/authentication/login.post.ts | 45 + tailwind.config.ts | 86 + tsconfig.json | 11 + uno.config.ts | 33 + 892 files changed, 51326 insertions(+), 1 deletion(-) create mode 100644 .editorconfig create mode 100644 .env.example create mode 100644 .prettierrc.json create mode 100644 .vscode/launch.json create mode 100644 README-nuxt.md create mode 100644 app/app.vue create mode 100644 app/assets/css/main.css create mode 100644 app/components/app/assesment-function/entry-form.vue create mode 100644 app/components/app/assesment-function/list-cfg.ts create mode 100644 app/components/app/assesment-function/list.vue create mode 100644 app/components/app/assesment-function/picker.vue create mode 100644 app/components/app/assesment-function/search.vue create mode 100644 app/components/app/auth/login.vue create mode 100644 app/components/app/bed/entry-form.vue create mode 100644 app/components/app/bed/list-cfg.ts create mode 100644 app/components/app/bed/list.vue create mode 100644 app/components/app/building/entry-form.vue create mode 100644 app/components/app/building/list-cfg.ts create mode 100644 app/components/app/building/list.vue create mode 100644 app/components/app/chamber/entry-form.vue create mode 100644 app/components/app/chamber/list-cfg.ts create mode 100644 app/components/app/chamber/list.vue create mode 100644 app/components/app/counter/entry-form.vue create mode 100644 app/components/app/counter/list-cfg.ts create mode 100644 app/components/app/counter/list.vue create mode 100644 app/components/app/division/entry-form.vue create mode 100644 app/components/app/division/list-cfg.ts create mode 100644 app/components/app/division/list.vue create mode 100644 app/components/app/doctor/entry-form.vue create mode 100644 app/components/app/doctor/list-cfg.ts create mode 100644 app/components/app/doctor/list.vue create mode 100644 app/components/app/doctor/picker.vue create mode 100644 app/components/app/doctor/search.vue create mode 100644 app/components/app/doctor/status-badge.vue create mode 100644 app/components/app/employee/entry-form.vue create mode 100644 app/components/app/employee/list-cfg.ts create mode 100644 app/components/app/employee/list.vue create mode 100644 app/components/app/employee/picker.vue create mode 100644 app/components/app/employee/search.vue create mode 100644 app/components/app/encounter/entry-form.vue create mode 100644 app/components/app/encounter/filter.vue create mode 100644 app/components/app/encounter/list-cfg.ts create mode 100644 app/components/app/encounter/list.vue create mode 100644 app/components/app/encounter/picker.vue create mode 100644 app/components/app/encounter/quick-info.vue create mode 100644 app/components/app/encounter/search.vue create mode 100644 app/components/app/encounter/status-badge.vue create mode 100644 app/components/app/encounter/status.vue create mode 100644 app/components/app/equipment/entry-form.vue create mode 100644 app/components/app/equipment/list-cfg.ts create mode 100644 app/components/app/equipment/list.vue create mode 100644 app/components/app/floor/entry-form.vue create mode 100644 app/components/app/floor/list-cfg.ts create mode 100644 app/components/app/floor/list.vue create mode 100644 app/components/app/icd/entry-form.vue create mode 100644 app/components/app/icd/list-cfg.ts create mode 100644 app/components/app/icd/list.vue create mode 100644 app/components/app/icd/multiselect-picker.vue create mode 100644 app/components/app/icd/preview.vue create mode 100644 app/components/app/icd/search.vue create mode 100644 app/components/app/icd/status-badge.vue create mode 100644 app/components/app/installation/entry-form.vue create mode 100644 app/components/app/installation/list-cfg.ts create mode 100644 app/components/app/installation/list.vue create mode 100644 app/components/app/item-price/entry-form.vue create mode 100644 app/components/app/item-price/list-cfg.ts create mode 100644 app/components/app/item-price/list.vue create mode 100644 app/components/app/item-price/picker.vue create mode 100644 app/components/app/item-price/search.vue create mode 100644 app/components/app/item-price/status-badge.vue create mode 100644 app/components/app/item/entry-form.vue create mode 100644 app/components/app/item/list-cfg.ts create mode 100644 app/components/app/item/list.vue create mode 100644 app/components/app/item/picker.vue create mode 100644 app/components/app/item/search.vue create mode 100644 app/components/app/item/status-badge.vue create mode 100644 app/components/app/laborant/entry-form.vue create mode 100644 app/components/app/laborant/list-cfg.ts create mode 100644 app/components/app/laborant/list.vue create mode 100644 app/components/app/laborant/picker.vue create mode 100644 app/components/app/laborant/search.vue create mode 100644 app/components/app/laborant/status-badge.vue create mode 100644 app/components/app/medicine-group/entry-form.vue create mode 100644 app/components/app/medicine-group/list-cfg.ts create mode 100644 app/components/app/medicine-group/list.vue create mode 100644 app/components/app/medicine-method/entry-form.vue create mode 100644 app/components/app/medicine-method/list-cfg.ts create mode 100644 app/components/app/medicine-method/list.vue create mode 100644 app/components/app/medicine/entry-form.vue create mode 100644 app/components/app/medicine/list-cfg.ts create mode 100644 app/components/app/medicine/list.vue create mode 100644 app/components/app/medicine/picker.vue create mode 100644 app/components/app/medicine/search.vue create mode 100644 app/components/app/medicine/status-badge.vue create mode 100644 app/components/app/nurse/entry-form.vue create mode 100644 app/components/app/nurse/list-cfg.ts create mode 100644 app/components/app/nurse/list.vue create mode 100644 app/components/app/nurse/picker.vue create mode 100644 app/components/app/nurse/search.vue create mode 100644 app/components/app/nurse/status-badge.vue create mode 100644 app/components/app/nutritionist/entry-form.vue create mode 100644 app/components/app/nutritionist/list-cfg.ts create mode 100644 app/components/app/nutritionist/list.vue create mode 100644 app/components/app/nutritionist/picker.vue create mode 100644 app/components/app/nutritionist/search.vue create mode 100644 app/components/app/nutritionist/status-badge.vue create mode 100644 app/components/app/patient/_common/input-file.vue create mode 100644 app/components/app/patient/_common/input-patient-name.vue create mode 100644 app/components/app/patient/_common/radio-communication-barrier.vue create mode 100644 app/components/app/patient/_common/radio-disability.vue create mode 100644 app/components/app/patient/_common/radio-gender.vue create mode 100644 app/components/app/patient/_common/radio-nationality.vue create mode 100644 app/components/app/patient/_common/select-disability.vue create mode 100644 app/components/app/patient/_common/select-dob.vue create mode 100644 app/components/app/patient/_common/select-education.vue create mode 100644 app/components/app/patient/_common/select-ethnicity.vue create mode 100644 app/components/app/patient/_common/select-job.vue create mode 100644 app/components/app/patient/_common/select-lang.vue create mode 100644 app/components/app/patient/_common/select-marital-status.vue create mode 100644 app/components/app/patient/_common/select-religion.vue create mode 100644 app/components/app/patient/entry-form.vue create mode 100644 app/components/app/patient/list-cfg.ts create mode 100644 app/components/app/patient/list.vue create mode 100644 app/components/app/patient/picker.vue create mode 100644 app/components/app/patient/preview.vue create mode 100644 app/components/app/patient/search.vue create mode 100644 app/components/app/patient/status-badge.vue create mode 100644 app/components/app/person-address/_common/radio-residence.vue create mode 100644 app/components/app/person-address/_common/select-district.vue create mode 100644 app/components/app/person-address/_common/select-postal.vue create mode 100644 app/components/app/person-address/_common/select-province.vue create mode 100644 app/components/app/person-address/_common/select-regency.vue create mode 100644 app/components/app/person-address/_common/select-village.vue create mode 100644 app/components/app/person-address/entry-form-relative.vue create mode 100644 app/components/app/person-address/entry-form.vue create mode 100644 app/components/app/person-contact/_common/select-contact-type.vue create mode 100644 app/components/app/person-contact/entry-form.vue create mode 100644 app/components/app/person-relative/_common/select-relations.vue create mode 100644 app/components/app/person-relative/_common/table-head.vue create mode 100644 app/components/app/person-relative/entry-form.vue create mode 100644 app/components/app/person/_common/radio-parents-input.vue create mode 100644 app/components/app/person/entry-form.vue create mode 100644 app/components/app/person/family-parents-form.vue create mode 100644 app/components/app/pharmacist/entry-form.vue create mode 100644 app/components/app/pharmacist/list-cfg.ts create mode 100644 app/components/app/pharmacist/list.vue create mode 100644 app/components/app/pharmacist/picker.vue create mode 100644 app/components/app/pharmacist/search.vue create mode 100644 app/components/app/pharmacist/status-badge.vue create mode 100644 app/components/app/prescription-item/list-entry.ts create mode 100644 app/components/app/prescription-item/list-entry.vue create mode 100644 app/components/app/prescription/entry.vue create mode 100644 app/components/app/prescription/list.vue create mode 100644 app/components/app/rehab/registration/sep-prosedur/entry-form.vue create mode 100644 app/components/app/rehab/registration/sep-prosedur/list-cfg.ts create mode 100644 app/components/app/rehab/registration/sep-prosedur/list.vue create mode 100644 app/components/app/rehab/registration/sep-prosedur/picker.vue create mode 100644 app/components/app/rehab/registration/sep-prosedur/search.vue create mode 100644 app/components/app/room/entry-form.vue create mode 100644 app/components/app/room/list-cfg.ts create mode 100644 app/components/app/room/list.vue create mode 100644 app/components/app/satusehat/badge-patient.vue create mode 100644 app/components/app/satusehat/badge-status.vue create mode 100644 app/components/app/satusehat/badge.vue create mode 100644 app/components/app/satusehat/button-action.vue create mode 100644 app/components/app/satusehat/card-summary.vue create mode 100644 app/components/app/satusehat/entry-form.vue create mode 100644 app/components/app/satusehat/list-cfg.ts create mode 100644 app/components/app/satusehat/list.vue create mode 100644 app/components/app/satusehat/picker.vue create mode 100644 app/components/app/satusehat/search.vue create mode 100644 app/components/app/sep/entry-form.vue create mode 100644 app/components/app/sep/list-cfg.ts create mode 100644 app/components/app/sep/list.vue create mode 100644 app/components/app/sep/small-entry.vue create mode 100644 app/components/app/sep/table-history-sep.vue create mode 100644 app/components/app/sep/table-search-letter.vue create mode 100644 app/components/app/sep/table-search-patient.vue create mode 100644 app/components/app/soapi/early-entry.vue create mode 100644 app/components/app/soapi/early-rehab-entry.vue create mode 100644 app/components/app/soapi/entry.vue create mode 100644 app/components/app/soapi/function-entry.vue create mode 100644 app/components/app/soapi/list-cfg.ts create mode 100644 app/components/app/soapi/list.vue create mode 100644 app/components/app/soapi/picker.vue create mode 100644 app/components/app/soapi/search.vue create mode 100644 app/components/app/specialist-intern/entry-form.vue create mode 100644 app/components/app/specialist/entry-form.vue create mode 100644 app/components/app/specialist/list-cfg.ts create mode 100644 app/components/app/specialist/list.vue create mode 100644 app/components/app/subspecialist/entry-form.vue create mode 100644 app/components/app/subspecialist/list-cfg.ts create mode 100644 app/components/app/subspecialist/list.vue create mode 100644 app/components/app/tools/entry-form.vue create mode 100644 app/components/app/tools/list-cfg.ts create mode 100644 app/components/app/tools/list.vue create mode 100644 app/components/app/unit/entry-form.vue create mode 100644 app/components/app/unit/list-cfg.ts create mode 100644 app/components/app/unit/list.vue create mode 100644 app/components/app/uom/entry-form.vue create mode 100644 app/components/app/uom/list-cfg.ts create mode 100644 app/components/app/uom/list.vue create mode 100644 app/components/app/user/entry-form.vue create mode 100644 app/components/app/user/list-cfg.ts create mode 100644 app/components/app/user/list.vue create mode 100644 app/components/app/user/picker.vue create mode 100644 app/components/app/user/search.vue create mode 100644 app/components/app/warehouse/entry-form.vue create mode 100644 app/components/app/warehouse/list-cfg.ts create mode 100644 app/components/app/warehouse/list.vue create mode 100644 app/components/content/assesment-function/add.vue create mode 100644 app/components/content/assesment-function/list.vue create mode 100644 app/components/content/auth/login.vue create mode 100644 app/components/content/bed/list.vue create mode 100644 app/components/content/building/list.vue create mode 100644 app/components/content/chamber/list.vue create mode 100644 app/components/content/counter/list.vue create mode 100644 app/components/content/dashboard/index.vue create mode 100644 app/components/content/division/list.vue create mode 100644 app/components/content/employee/entry.vue create mode 100644 app/components/content/employee/list.vue create mode 100644 app/components/content/encounter/entry.vue create mode 100644 app/components/content/encounter/list.vue create mode 100644 app/components/content/encounter/process.vue create mode 100644 app/components/content/equipment/list.vue create mode 100644 app/components/content/floor/list.vue create mode 100644 app/components/content/installation/list.vue create mode 100644 app/components/content/item-price/list.vue create mode 100644 app/components/content/item/list.vue create mode 100644 app/components/content/medicine-group/list.vue create mode 100644 app/components/content/medicine-method/list.vue create mode 100644 app/components/content/medicine/entry.vue create mode 100644 app/components/content/medicine/list.vue create mode 100644 app/components/content/patient/detail.vue create mode 100644 app/components/content/patient/entry.vue create mode 100644 app/components/content/patient/list.vue create mode 100644 app/components/content/prescription/list.vue create mode 100644 app/components/content/rehab/registration/home.vue create mode 100644 app/components/content/rehab/registration/sep-prosedur/add.vue create mode 100644 app/components/content/rehab/registration/sep-prosedur/list.vue create mode 100644 app/components/content/room/list.vue create mode 100644 app/components/content/satusehat/const.ts create mode 100644 app/components/content/satusehat/list.vue create mode 100644 app/components/content/satusehat/schema.query.ts create mode 100644 app/components/content/sep/entry.vue create mode 100644 app/components/content/sep/list.vue create mode 100644 app/components/content/soapi/entry.vue create mode 100644 app/components/content/soapi/form.vue create mode 100644 app/components/content/soapi/list.vue create mode 100644 app/components/content/specialist-intern/entry.vue create mode 100644 app/components/content/specialist-intern/list.vue create mode 100644 app/components/content/specialist/list.vue create mode 100644 app/components/content/subspecialist/list.vue create mode 100644 app/components/content/tools/list.vue create mode 100644 app/components/content/unit/list.vue create mode 100644 app/components/content/uom/list.vue create mode 100644 app/components/content/user/entry.vue create mode 100644 app/components/content/user/list.vue create mode 100644 app/components/content/warehouse/list.vue create mode 100644 app/components/layout/AppSidebar.vue create mode 100644 app/components/layout/Auth.vue create mode 100644 app/components/layout/Header.vue create mode 100644 app/components/layout/SidebarNavFooter.vue create mode 100644 app/components/layout/SidebarNavGroup.vue create mode 100644 app/components/layout/SidebarNavHeader.vue create mode 100644 app/components/layout/SidebarNavLink.vue create mode 100644 app/components/layout/ThemeToggle.vue create mode 100644 app/components/pub/my-ui/breadcrumb/index.vue create mode 100644 app/components/pub/my-ui/comp-tab/comp-tab.vue create mode 100644 app/components/pub/my-ui/comp-tab/type.ts create mode 100644 app/components/pub/my-ui/confirmation/README.md create mode 100644 app/components/pub/my-ui/confirmation/confirmation.vue create mode 100644 app/components/pub/my-ui/confirmation/record-confirmation.vue create mode 100644 app/components/pub/my-ui/data-table/data-table.vue create mode 100644 app/components/pub/my-ui/data-table/type.ts create mode 100644 app/components/pub/my-ui/data/dropdown-action-du.vue create mode 100644 app/components/pub/my-ui/data/dropdown-action-ducd.vue create mode 100644 app/components/pub/my-ui/data/dropdown-action-dud.vue create mode 100644 app/components/pub/my-ui/data/dropdown-action-pdud.vue create mode 100644 app/components/pub/my-ui/data/dropdown-action-ud.vue create mode 100644 app/components/pub/my-ui/data/types.ts create mode 100644 app/components/pub/my-ui/doc-entry/block.vue create mode 100644 app/components/pub/my-ui/doc-entry/cell.vue create mode 100644 app/components/pub/my-ui/doc-entry/colon.vue create mode 100644 app/components/pub/my-ui/doc-entry/field.vue create mode 100644 app/components/pub/my-ui/doc-entry/index.ts create mode 100644 app/components/pub/my-ui/doc-entry/label.vue create mode 100644 app/components/pub/my-ui/error/error.vue create mode 100644 app/components/pub/my-ui/form/block.vue create mode 100644 app/components/pub/my-ui/form/combobox.vue create mode 100644 app/components/pub/my-ui/form/datepicker-single.vue create mode 100644 app/components/pub/my-ui/form/field-group.vue create mode 100644 app/components/pub/my-ui/form/field.vue create mode 100644 app/components/pub/my-ui/form/input-base.vue create mode 100644 app/components/pub/my-ui/form/label.vue create mode 100644 app/components/pub/my-ui/form/select.vue create mode 100644 app/components/pub/my-ui/form/view/detail-row.vue create mode 100644 app/components/pub/my-ui/form/view/detail-section.vue create mode 100644 app/components/pub/my-ui/modal/dialog.vue create mode 100644 app/components/pub/my-ui/modal/modal.vue create mode 100644 app/components/pub/my-ui/nav-content/ba.vue create mode 100644 app/components/pub/my-ui/nav-footer/ba-dr-su-pr.vue create mode 100644 app/components/pub/my-ui/nav-footer/ba-dr-su.vue create mode 100644 app/components/pub/my-ui/nav-footer/ba-ed-de-pri.vue create mode 100644 app/components/pub/my-ui/nav-footer/ba-ed-de.vue create mode 100644 app/components/pub/my-ui/nav-footer/ba-ed-pri.vue create mode 100644 app/components/pub/my-ui/nav-footer/ba-ed.vue create mode 100644 app/components/pub/my-ui/nav-footer/ba-su.vue create mode 100644 app/components/pub/my-ui/nav-header/filter.vue create mode 100644 app/components/pub/my-ui/nav-header/header.vue create mode 100644 app/components/pub/my-ui/nav-header/prep.vue create mode 100644 app/components/pub/my-ui/nav-header/search.vue create mode 100644 app/components/pub/my-ui/pagination/pagination-view.vue create mode 100644 app/components/pub/my-ui/pagination/pagination.type.ts create mode 100644 app/components/pub/my-ui/pagination/pagination.vue create mode 100644 app/components/pub/my-ui/select-tree/command-item.vue create mode 100644 app/components/pub/my-ui/select-tree/leaf.vue create mode 100644 app/components/pub/my-ui/select-tree/tree-node.vue create mode 100644 app/components/pub/my-ui/select-tree/tree-select.vue create mode 100644 app/components/pub/my-ui/select-tree/tree-view.vue create mode 100644 app/components/pub/my-ui/select-tree/type.ts create mode 100644 app/components/pub/my-ui/service-status/service-status.vue create mode 100644 app/components/pub/my-ui/service-status/type.ts create mode 100644 app/components/pub/my-ui/summary-card/summary-card.vue create mode 100644 app/components/pub/my-ui/summary-card/type.ts create mode 100644 app/components/pub/ui/accordion/Accordion.vue create mode 100644 app/components/pub/ui/accordion/AccordionContent.vue create mode 100644 app/components/pub/ui/accordion/AccordionItem.vue create mode 100644 app/components/pub/ui/accordion/AccordionTrigger.vue create mode 100644 app/components/pub/ui/accordion/index.ts create mode 100644 app/components/pub/ui/alert-dialog/AlertDialog.vue create mode 100644 app/components/pub/ui/alert-dialog/AlertDialogAction.vue create mode 100644 app/components/pub/ui/alert-dialog/AlertDialogCancel.vue create mode 100644 app/components/pub/ui/alert-dialog/AlertDialogContent.vue create mode 100644 app/components/pub/ui/alert-dialog/AlertDialogDescription.vue create mode 100644 app/components/pub/ui/alert-dialog/AlertDialogFooter.vue create mode 100644 app/components/pub/ui/alert-dialog/AlertDialogHeader.vue create mode 100644 app/components/pub/ui/alert-dialog/AlertDialogTitle.vue create mode 100644 app/components/pub/ui/alert-dialog/AlertDialogTrigger.vue create mode 100644 app/components/pub/ui/alert-dialog/index.ts create mode 100644 app/components/pub/ui/alert/Alert.vue create mode 100644 app/components/pub/ui/alert/AlertDescription.vue create mode 100644 app/components/pub/ui/alert/AlertTitle.vue create mode 100644 app/components/pub/ui/alert/index.ts create mode 100644 app/components/pub/ui/aspect-ratio/AspectRatio.vue create mode 100644 app/components/pub/ui/aspect-ratio/index.ts create mode 100644 app/components/pub/ui/avatar/Avatar.vue create mode 100644 app/components/pub/ui/avatar/AvatarFallback.vue create mode 100644 app/components/pub/ui/avatar/AvatarImage.vue create mode 100644 app/components/pub/ui/avatar/index.ts create mode 100644 app/components/pub/ui/badge/Badge.vue create mode 100644 app/components/pub/ui/badge/index.ts create mode 100644 app/components/pub/ui/breadcrumb/Breadcrumb.vue create mode 100644 app/components/pub/ui/breadcrumb/BreadcrumbEllipsis.vue create mode 100644 app/components/pub/ui/breadcrumb/BreadcrumbItem.vue create mode 100644 app/components/pub/ui/breadcrumb/BreadcrumbLink.vue create mode 100644 app/components/pub/ui/breadcrumb/BreadcrumbList.vue create mode 100644 app/components/pub/ui/breadcrumb/BreadcrumbPage.vue create mode 100644 app/components/pub/ui/breadcrumb/BreadcrumbSeparator.vue create mode 100644 app/components/pub/ui/breadcrumb/index.ts create mode 100644 app/components/pub/ui/button/Button.vue create mode 100644 app/components/pub/ui/button/index.ts create mode 100644 app/components/pub/ui/calendar/Calendar.vue create mode 100644 app/components/pub/ui/calendar/CalendarCell.vue create mode 100644 app/components/pub/ui/calendar/CalendarCellTrigger.vue create mode 100644 app/components/pub/ui/calendar/CalendarGrid.vue create mode 100644 app/components/pub/ui/calendar/CalendarGridBody.vue create mode 100644 app/components/pub/ui/calendar/CalendarGridHead.vue create mode 100644 app/components/pub/ui/calendar/CalendarGridRow.vue create mode 100644 app/components/pub/ui/calendar/CalendarHeadCell.vue create mode 100644 app/components/pub/ui/calendar/CalendarHeader.vue create mode 100644 app/components/pub/ui/calendar/CalendarHeading.vue create mode 100644 app/components/pub/ui/calendar/CalendarNextButton.vue create mode 100644 app/components/pub/ui/calendar/CalendarPrevButton.vue create mode 100644 app/components/pub/ui/calendar/index.ts create mode 100644 app/components/pub/ui/card/Card.vue create mode 100644 app/components/pub/ui/card/CardContent.vue create mode 100644 app/components/pub/ui/card/CardDescription.vue create mode 100644 app/components/pub/ui/card/CardFooter.vue create mode 100644 app/components/pub/ui/card/CardHeader.vue create mode 100644 app/components/pub/ui/card/CardTitle.vue create mode 100644 app/components/pub/ui/card/index.ts create mode 100644 app/components/pub/ui/carousel/Carousel.vue create mode 100644 app/components/pub/ui/carousel/CarouselContent.vue create mode 100644 app/components/pub/ui/carousel/CarouselItem.vue create mode 100644 app/components/pub/ui/carousel/CarouselNext.vue create mode 100644 app/components/pub/ui/carousel/CarouselPrevious.vue create mode 100644 app/components/pub/ui/carousel/index.ts create mode 100644 app/components/pub/ui/carousel/interface.ts create mode 100644 app/components/pub/ui/carousel/useCarousel.ts create mode 100644 app/components/pub/ui/chart-area/AreaChart.vue create mode 100644 app/components/pub/ui/chart-area/index.ts create mode 100644 app/components/pub/ui/chart-bar/BarChart.vue create mode 100644 app/components/pub/ui/chart-bar/index.ts create mode 100644 app/components/pub/ui/chart-donut/DonutChart.vue create mode 100644 app/components/pub/ui/chart-donut/index.ts create mode 100644 app/components/pub/ui/chart-line/LineChart.vue create mode 100644 app/components/pub/ui/chart-line/index.ts create mode 100644 app/components/pub/ui/chart/ChartCrosshair.vue create mode 100644 app/components/pub/ui/chart/ChartLegend.vue create mode 100644 app/components/pub/ui/chart/ChartSingleTooltip.vue create mode 100644 app/components/pub/ui/chart/ChartTooltip.vue create mode 100644 app/components/pub/ui/chart/index.ts create mode 100644 app/components/pub/ui/chart/interface.ts create mode 100644 app/components/pub/ui/checkbox/Checkbox.vue create mode 100644 app/components/pub/ui/checkbox/index.ts create mode 100644 app/components/pub/ui/collapsible/Collapsible.vue create mode 100644 app/components/pub/ui/collapsible/CollapsibleContent.vue create mode 100644 app/components/pub/ui/collapsible/CollapsibleTrigger.vue create mode 100644 app/components/pub/ui/collapsible/index.ts create mode 100644 app/components/pub/ui/command/Command.vue create mode 100644 app/components/pub/ui/command/CommandDialog.vue create mode 100644 app/components/pub/ui/command/CommandEmpty.vue create mode 100644 app/components/pub/ui/command/CommandGroup.vue create mode 100644 app/components/pub/ui/command/CommandInput.vue create mode 100644 app/components/pub/ui/command/CommandItem.vue create mode 100644 app/components/pub/ui/command/CommandList.vue create mode 100644 app/components/pub/ui/command/CommandSeparator.vue create mode 100644 app/components/pub/ui/command/CommandShortcut.vue create mode 100644 app/components/pub/ui/command/index.ts create mode 100644 app/components/pub/ui/context-menu/ContextMenu.vue create mode 100644 app/components/pub/ui/context-menu/ContextMenuCheckboxItem.vue create mode 100644 app/components/pub/ui/context-menu/ContextMenuContent.vue create mode 100644 app/components/pub/ui/context-menu/ContextMenuGroup.vue create mode 100644 app/components/pub/ui/context-menu/ContextMenuItem.vue create mode 100644 app/components/pub/ui/context-menu/ContextMenuLabel.vue create mode 100644 app/components/pub/ui/context-menu/ContextMenuPortal.vue create mode 100644 app/components/pub/ui/context-menu/ContextMenuRadioGroup.vue create mode 100644 app/components/pub/ui/context-menu/ContextMenuRadioItem.vue create mode 100644 app/components/pub/ui/context-menu/ContextMenuSeparator.vue create mode 100644 app/components/pub/ui/context-menu/ContextMenuShortcut.vue create mode 100644 app/components/pub/ui/context-menu/ContextMenuSub.vue create mode 100644 app/components/pub/ui/context-menu/ContextMenuSubContent.vue create mode 100644 app/components/pub/ui/context-menu/ContextMenuSubTrigger.vue create mode 100644 app/components/pub/ui/context-menu/ContextMenuTrigger.vue create mode 100644 app/components/pub/ui/context-menu/index.ts create mode 100644 app/components/pub/ui/dialog/Dialog.vue create mode 100644 app/components/pub/ui/dialog/DialogClose.vue create mode 100644 app/components/pub/ui/dialog/DialogContent.vue create mode 100644 app/components/pub/ui/dialog/DialogDescription.vue create mode 100644 app/components/pub/ui/dialog/DialogFooter.vue create mode 100644 app/components/pub/ui/dialog/DialogHeader.vue create mode 100644 app/components/pub/ui/dialog/DialogScrollContent.vue create mode 100644 app/components/pub/ui/dialog/DialogTitle.vue create mode 100644 app/components/pub/ui/dialog/DialogTrigger.vue create mode 100644 app/components/pub/ui/dialog/index.ts create mode 100644 app/components/pub/ui/drawer/Drawer.vue create mode 100644 app/components/pub/ui/drawer/DrawerContent.vue create mode 100644 app/components/pub/ui/drawer/DrawerDescription.vue create mode 100644 app/components/pub/ui/drawer/DrawerFooter.vue create mode 100644 app/components/pub/ui/drawer/DrawerHeader.vue create mode 100644 app/components/pub/ui/drawer/DrawerOverlay.vue create mode 100644 app/components/pub/ui/drawer/DrawerTitle.vue create mode 100644 app/components/pub/ui/drawer/index.ts create mode 100644 app/components/pub/ui/dropdown-menu/DropdownMenu.vue create mode 100644 app/components/pub/ui/dropdown-menu/DropdownMenuCheckboxItem.vue create mode 100644 app/components/pub/ui/dropdown-menu/DropdownMenuContent.vue create mode 100644 app/components/pub/ui/dropdown-menu/DropdownMenuGroup.vue create mode 100644 app/components/pub/ui/dropdown-menu/DropdownMenuItem.vue create mode 100644 app/components/pub/ui/dropdown-menu/DropdownMenuLabel.vue create mode 100644 app/components/pub/ui/dropdown-menu/DropdownMenuRadioGroup.vue create mode 100644 app/components/pub/ui/dropdown-menu/DropdownMenuRadioItem.vue create mode 100644 app/components/pub/ui/dropdown-menu/DropdownMenuSeparator.vue create mode 100644 app/components/pub/ui/dropdown-menu/DropdownMenuShortcut.vue create mode 100644 app/components/pub/ui/dropdown-menu/DropdownMenuSub.vue create mode 100644 app/components/pub/ui/dropdown-menu/DropdownMenuSubContent.vue create mode 100644 app/components/pub/ui/dropdown-menu/DropdownMenuSubTrigger.vue create mode 100644 app/components/pub/ui/dropdown-menu/DropdownMenuTrigger.vue create mode 100644 app/components/pub/ui/dropdown-menu/index.ts create mode 100644 app/components/pub/ui/form/FormControl.vue create mode 100644 app/components/pub/ui/form/FormDescription.vue create mode 100644 app/components/pub/ui/form/FormItem.vue create mode 100644 app/components/pub/ui/form/FormLabel.vue create mode 100644 app/components/pub/ui/form/FormMessage.vue create mode 100644 app/components/pub/ui/form/index.ts create mode 100644 app/components/pub/ui/form/injectionKeys.ts create mode 100644 app/components/pub/ui/form/useFormField.ts create mode 100644 app/components/pub/ui/hover-card/HoverCard.vue create mode 100644 app/components/pub/ui/hover-card/HoverCardContent.vue create mode 100644 app/components/pub/ui/hover-card/HoverCardTrigger.vue create mode 100644 app/components/pub/ui/hover-card/index.ts create mode 100644 app/components/pub/ui/input/Input.vue create mode 100644 app/components/pub/ui/input/index.ts create mode 100644 app/components/pub/ui/label/Label.vue create mode 100644 app/components/pub/ui/label/index.ts create mode 100644 app/components/pub/ui/menubar/Menubar.vue create mode 100644 app/components/pub/ui/menubar/MenubarCheckboxItem.vue create mode 100644 app/components/pub/ui/menubar/MenubarContent.vue create mode 100644 app/components/pub/ui/menubar/MenubarGroup.vue create mode 100644 app/components/pub/ui/menubar/MenubarItem.vue create mode 100644 app/components/pub/ui/menubar/MenubarLabel.vue create mode 100644 app/components/pub/ui/menubar/MenubarMenu.vue create mode 100644 app/components/pub/ui/menubar/MenubarRadioGroup.vue create mode 100644 app/components/pub/ui/menubar/MenubarRadioItem.vue create mode 100644 app/components/pub/ui/menubar/MenubarSeparator.vue create mode 100644 app/components/pub/ui/menubar/MenubarShortcut.vue create mode 100644 app/components/pub/ui/menubar/MenubarSub.vue create mode 100644 app/components/pub/ui/menubar/MenubarSubContent.vue create mode 100644 app/components/pub/ui/menubar/MenubarSubTrigger.vue create mode 100644 app/components/pub/ui/menubar/MenubarTrigger.vue create mode 100644 app/components/pub/ui/menubar/index.ts create mode 100644 app/components/pub/ui/navigation-menu/NavigationMenu.vue create mode 100644 app/components/pub/ui/navigation-menu/NavigationMenuContent.vue create mode 100644 app/components/pub/ui/navigation-menu/NavigationMenuIndicator.vue create mode 100644 app/components/pub/ui/navigation-menu/NavigationMenuItem.vue create mode 100644 app/components/pub/ui/navigation-menu/NavigationMenuLink.vue create mode 100644 app/components/pub/ui/navigation-menu/NavigationMenuList.vue create mode 100644 app/components/pub/ui/navigation-menu/NavigationMenuTrigger.vue create mode 100644 app/components/pub/ui/navigation-menu/NavigationMenuViewport.vue create mode 100644 app/components/pub/ui/navigation-menu/index.ts create mode 100644 app/components/pub/ui/number-field/NumberField.vue create mode 100644 app/components/pub/ui/number-field/NumberFieldContent.vue create mode 100644 app/components/pub/ui/number-field/NumberFieldDecrement.vue create mode 100644 app/components/pub/ui/number-field/NumberFieldIncrement.vue create mode 100644 app/components/pub/ui/number-field/NumberFieldInput.vue create mode 100644 app/components/pub/ui/number-field/index.ts create mode 100644 app/components/pub/ui/pagination/PaginationEllipsis.vue create mode 100644 app/components/pub/ui/pagination/PaginationFirst.vue create mode 100644 app/components/pub/ui/pagination/PaginationLast.vue create mode 100644 app/components/pub/ui/pagination/PaginationNext.vue create mode 100644 app/components/pub/ui/pagination/PaginationPrev.vue create mode 100644 app/components/pub/ui/pagination/index.ts create mode 100644 app/components/pub/ui/pin-input/PinInput.vue create mode 100644 app/components/pub/ui/pin-input/PinInputGroup.vue create mode 100644 app/components/pub/ui/pin-input/PinInputInput.vue create mode 100644 app/components/pub/ui/pin-input/PinInputSeparator.vue create mode 100644 app/components/pub/ui/pin-input/index.ts create mode 100644 app/components/pub/ui/popover/Popover.vue create mode 100644 app/components/pub/ui/popover/PopoverContent.vue create mode 100644 app/components/pub/ui/popover/PopoverTrigger.vue create mode 100644 app/components/pub/ui/popover/index.ts create mode 100644 app/components/pub/ui/progress/Progress.vue create mode 100644 app/components/pub/ui/progress/index.ts create mode 100644 app/components/pub/ui/radio-group/RadioGroup.vue create mode 100644 app/components/pub/ui/radio-group/RadioGroupItem.vue create mode 100644 app/components/pub/ui/radio-group/index.ts create mode 100644 app/components/pub/ui/range-calendar/RangeCalendar.vue create mode 100644 app/components/pub/ui/range-calendar/RangeCalendarCell.vue create mode 100644 app/components/pub/ui/range-calendar/RangeCalendarCellTrigger.vue create mode 100644 app/components/pub/ui/range-calendar/RangeCalendarGrid.vue create mode 100644 app/components/pub/ui/range-calendar/RangeCalendarGridBody.vue create mode 100644 app/components/pub/ui/range-calendar/RangeCalendarGridHead.vue create mode 100644 app/components/pub/ui/range-calendar/RangeCalendarGridRow.vue create mode 100644 app/components/pub/ui/range-calendar/RangeCalendarHeadCell.vue create mode 100644 app/components/pub/ui/range-calendar/RangeCalendarHeader.vue create mode 100644 app/components/pub/ui/range-calendar/RangeCalendarHeading.vue create mode 100644 app/components/pub/ui/range-calendar/RangeCalendarNextButton.vue create mode 100644 app/components/pub/ui/range-calendar/RangeCalendarPrevButton.vue create mode 100644 app/components/pub/ui/range-calendar/index.ts create mode 100644 app/components/pub/ui/resizable/ResizableHandle.vue create mode 100644 app/components/pub/ui/resizable/ResizablePanelGroup.vue create mode 100644 app/components/pub/ui/resizable/index.ts create mode 100644 app/components/pub/ui/scroll-area/ScrollArea.vue create mode 100644 app/components/pub/ui/scroll-area/ScrollBar.vue create mode 100644 app/components/pub/ui/scroll-area/index.ts create mode 100644 app/components/pub/ui/select/Select.vue create mode 100644 app/components/pub/ui/select/SelectContent.vue create mode 100644 app/components/pub/ui/select/SelectGroup.vue create mode 100644 app/components/pub/ui/select/SelectItem.vue create mode 100644 app/components/pub/ui/select/SelectItemText.vue create mode 100644 app/components/pub/ui/select/SelectLabel.vue create mode 100644 app/components/pub/ui/select/SelectScrollDownButton.vue create mode 100644 app/components/pub/ui/select/SelectScrollUpButton.vue create mode 100644 app/components/pub/ui/select/SelectSeparator.vue create mode 100644 app/components/pub/ui/select/SelectTrigger.vue create mode 100644 app/components/pub/ui/select/SelectValue.vue create mode 100644 app/components/pub/ui/select/index.ts create mode 100644 app/components/pub/ui/separator/Separator.vue create mode 100644 app/components/pub/ui/separator/index.ts create mode 100644 app/components/pub/ui/sheet/Sheet.vue create mode 100644 app/components/pub/ui/sheet/SheetClose.vue create mode 100644 app/components/pub/ui/sheet/SheetContent.vue create mode 100644 app/components/pub/ui/sheet/SheetDescription.vue create mode 100644 app/components/pub/ui/sheet/SheetFooter.vue create mode 100644 app/components/pub/ui/sheet/SheetHeader.vue create mode 100644 app/components/pub/ui/sheet/SheetTitle.vue create mode 100644 app/components/pub/ui/sheet/SheetTrigger.vue create mode 100644 app/components/pub/ui/sheet/index.ts create mode 100644 app/components/pub/ui/sidebar/Sidebar.vue create mode 100644 app/components/pub/ui/sidebar/SidebarContent.vue create mode 100644 app/components/pub/ui/sidebar/SidebarFooter.vue create mode 100644 app/components/pub/ui/sidebar/SidebarGroup.vue create mode 100644 app/components/pub/ui/sidebar/SidebarGroupAction.vue create mode 100644 app/components/pub/ui/sidebar/SidebarGroupContent.vue create mode 100644 app/components/pub/ui/sidebar/SidebarGroupLabel.vue create mode 100644 app/components/pub/ui/sidebar/SidebarHeader.vue create mode 100644 app/components/pub/ui/sidebar/SidebarInput.vue create mode 100644 app/components/pub/ui/sidebar/SidebarInset.vue create mode 100644 app/components/pub/ui/sidebar/SidebarMenu.vue create mode 100644 app/components/pub/ui/sidebar/SidebarMenuAction.vue create mode 100644 app/components/pub/ui/sidebar/SidebarMenuBadge.vue create mode 100644 app/components/pub/ui/sidebar/SidebarMenuButton.vue create mode 100644 app/components/pub/ui/sidebar/SidebarMenuButtonChild.vue create mode 100644 app/components/pub/ui/sidebar/SidebarMenuItem.vue create mode 100644 app/components/pub/ui/sidebar/SidebarMenuSkeleton.vue create mode 100644 app/components/pub/ui/sidebar/SidebarMenuSub.vue create mode 100644 app/components/pub/ui/sidebar/SidebarMenuSubButton.vue create mode 100644 app/components/pub/ui/sidebar/SidebarMenuSubItem.vue create mode 100644 app/components/pub/ui/sidebar/SidebarProvider.vue create mode 100644 app/components/pub/ui/sidebar/SidebarRail.vue create mode 100644 app/components/pub/ui/sidebar/SidebarSeparator.vue create mode 100644 app/components/pub/ui/sidebar/SidebarTrigger.vue create mode 100644 app/components/pub/ui/sidebar/index.ts create mode 100644 app/components/pub/ui/sidebar/utils.ts create mode 100644 app/components/pub/ui/skeleton/Skeleton.vue create mode 100644 app/components/pub/ui/skeleton/index.ts create mode 100644 app/components/pub/ui/slider/Slider.vue create mode 100644 app/components/pub/ui/slider/index.ts create mode 100644 app/components/pub/ui/sonner/Sonner.vue create mode 100644 app/components/pub/ui/sonner/index.ts create mode 100644 app/components/pub/ui/stepper/Stepper.vue create mode 100644 app/components/pub/ui/stepper/StepperDescription.vue create mode 100644 app/components/pub/ui/stepper/StepperIndicator.vue create mode 100644 app/components/pub/ui/stepper/StepperItem.vue create mode 100644 app/components/pub/ui/stepper/StepperSeparator.vue create mode 100644 app/components/pub/ui/stepper/StepperTitle.vue create mode 100644 app/components/pub/ui/stepper/StepperTrigger.vue create mode 100644 app/components/pub/ui/stepper/index.ts create mode 100644 app/components/pub/ui/switch/Switch.vue create mode 100644 app/components/pub/ui/switch/index.ts create mode 100644 app/components/pub/ui/table/Table.vue create mode 100644 app/components/pub/ui/table/TableBody.vue create mode 100644 app/components/pub/ui/table/TableCaption.vue create mode 100644 app/components/pub/ui/table/TableCell.vue create mode 100644 app/components/pub/ui/table/TableEmpty.vue create mode 100644 app/components/pub/ui/table/TableFooter.vue create mode 100644 app/components/pub/ui/table/TableHead.vue create mode 100644 app/components/pub/ui/table/TableHeader.vue create mode 100644 app/components/pub/ui/table/TableRow.vue create mode 100644 app/components/pub/ui/table/index.ts create mode 100644 app/components/pub/ui/table/separator/Separator.vue create mode 100644 app/components/pub/ui/table/separator/index.ts create mode 100644 app/components/pub/ui/tabs/Tabs.vue create mode 100644 app/components/pub/ui/tabs/TabsContent.vue create mode 100644 app/components/pub/ui/tabs/TabsList.vue create mode 100644 app/components/pub/ui/tabs/TabsTrigger.vue create mode 100644 app/components/pub/ui/tabs/index.ts create mode 100644 app/components/pub/ui/tags-input/TagsInput.vue create mode 100644 app/components/pub/ui/tags-input/TagsInputInput.vue create mode 100644 app/components/pub/ui/tags-input/TagsInputItem.vue create mode 100644 app/components/pub/ui/tags-input/TagsInputItemDelete.vue create mode 100644 app/components/pub/ui/tags-input/TagsInputItemText.vue create mode 100644 app/components/pub/ui/tags-input/index.ts create mode 100644 app/components/pub/ui/textarea/Textarea.vue create mode 100644 app/components/pub/ui/textarea/index.ts create mode 100644 app/components/pub/ui/toast/Toast.vue create mode 100644 app/components/pub/ui/toast/ToastAction.vue create mode 100644 app/components/pub/ui/toast/ToastClose.vue create mode 100644 app/components/pub/ui/toast/ToastDescription.vue create mode 100644 app/components/pub/ui/toast/ToastProvider.vue create mode 100644 app/components/pub/ui/toast/ToastTitle.vue create mode 100644 app/components/pub/ui/toast/ToastViewport.vue create mode 100644 app/components/pub/ui/toast/Toaster.vue create mode 100644 app/components/pub/ui/toast/index.ts create mode 100644 app/components/pub/ui/toast/use-toast.ts create mode 100644 app/components/pub/ui/toggle-group/ToggleGroup.vue create mode 100644 app/components/pub/ui/toggle-group/ToggleGroupItem.vue create mode 100644 app/components/pub/ui/toggle-group/index.ts create mode 100644 app/components/pub/ui/toggle/Toggle.vue create mode 100644 app/components/pub/ui/toggle/index.ts create mode 100644 app/components/pub/ui/tooltip/Tooltip.vue create mode 100644 app/components/pub/ui/tooltip/TooltipContent.vue create mode 100644 app/components/pub/ui/tooltip/TooltipProvider.vue create mode 100644 app/components/pub/ui/tooltip/TooltipTrigger.vue create mode 100644 app/components/pub/ui/tooltip/index.ts create mode 100644 app/composables/README-useFormErrors.md create mode 100644 app/composables/useFormErrors.ts create mode 100644 app/composables/usePaginatedList.ts create mode 100644 app/composables/useQueryMode.ts create mode 100644 app/composables/useRBAC.ts create mode 100644 app/composables/useTheme.ts create mode 100644 app/composables/useXfetch.ts create mode 100644 app/error.vue create mode 100644 app/handlers/_handler.ts create mode 100644 app/handlers/device.handler.ts create mode 100644 app/handlers/division-position.handler.ts create mode 100644 app/handlers/division.handler.ts create mode 100644 app/handlers/infra.handler.ts create mode 100644 app/handlers/installation.handler.ts create mode 100644 app/handlers/material.handler.ts create mode 100644 app/handlers/medicine-group.handler.ts create mode 100644 app/handlers/medicine-method.handler.ts create mode 100644 app/handlers/medicine.handler.ts create mode 100644 app/handlers/specialist.handler.ts create mode 100644 app/handlers/subspecialist.handler.ts create mode 100644 app/handlers/unit.handler.ts create mode 100644 app/handlers/uom.handler.ts create mode 100644 app/layouts/blank.vue create mode 100644 app/layouts/default.vue create mode 100644 app/lib/constants.ts create mode 100644 app/lib/page-permission.ts create mode 100644 app/lib/utils.ts create mode 100644 app/middleware/auth.global.ts create mode 100644 app/middleware/rbac.ts create mode 100644 app/models/_ai_prompt.txt create mode 100644 app/models/_base.ts create mode 100644 app/models/adime.ts create mode 100644 app/models/ambulatory.ts create mode 100644 app/models/appointment.ts create mode 100644 app/models/chemo.ts create mode 100644 app/models/device-order-item.ts create mode 100644 app/models/device-order.ts create mode 100644 app/models/device.ts create mode 100644 app/models/division-position.ts create mode 100644 app/models/division.ts create mode 100644 app/models/doctor-fee.ts create mode 100644 app/models/doctor.ts create mode 100644 app/models/emergency.ts create mode 100644 app/models/employee.ts create mode 100644 app/models/encounter-payment.ts create mode 100644 app/models/encounter.ts create mode 100644 app/models/ethnic.ts create mode 100644 app/models/infra.ts create mode 100644 app/models/inpatient.ts create mode 100644 app/models/installation.ts create mode 100644 app/models/insurance-company.ts create mode 100644 app/models/item-price.ts create mode 100644 app/models/item.ts create mode 100644 app/models/laborant.ts create mode 100644 app/models/language.ts create mode 100644 app/models/material-order-item.ts create mode 100644 app/models/material-order.ts create mode 100644 app/models/material.ts create mode 100644 app/models/mcu-order-item.ts create mode 100644 app/models/mcu-order-sub-item.ts create mode 100644 app/models/mcu-order.ts create mode 100644 app/models/mcu-src-category.ts create mode 100644 app/models/mcu-src.ts create mode 100644 app/models/mcu-sub-src.ts create mode 100644 app/models/medication-item-dist.ts create mode 100644 app/models/medication-item.ts create mode 100644 app/models/medication.ts create mode 100644 app/models/medicine-group.ts create mode 100644 app/models/medicine-method.ts create mode 100644 app/models/medicine.ts create mode 100644 app/models/medicinemix-item.ts create mode 100644 app/models/medicinemix.ts create mode 100644 app/models/midwife.ts create mode 100644 app/models/nurse.ts create mode 100644 app/models/nutrition-exam.ts create mode 100644 app/models/nutritionist.ts create mode 100644 app/models/patient-insurance.ts create mode 100644 app/models/patient.ts create mode 100644 app/models/person-address.ts create mode 100644 app/models/person-contact.ts create mode 100644 app/models/person-relative.ts create mode 100644 app/models/person.ts create mode 100644 app/models/pharmachist.ts create mode 100644 app/models/practice-schedule.ts create mode 100644 app/models/prescription-item.ts create mode 100644 app/models/prescription.ts create mode 100644 app/models/province.ts create mode 100644 app/models/queue.ts create mode 100644 app/models/regency.ts create mode 100644 app/models/role.ts create mode 100644 app/models/sbar.ts create mode 100644 app/models/soapi.ts create mode 100644 app/models/specialist-intern.ts create mode 100644 app/models/specialist.ts create mode 100644 app/models/subspecialist.ts create mode 100644 app/models/triage.ts create mode 100644 app/models/unit.ts create mode 100644 app/models/uom.ts create mode 100644 app/models/user.ts create mode 100644 app/pages/(error)/401.vue create mode 100644 app/pages/(error)/403.vue create mode 100644 app/pages/(error)/404.vue create mode 100644 app/pages/(error)/500.vue create mode 100644 app/pages/(error)/503.vue create mode 100644 app/pages/(features)/bpjs/sep/add.vue create mode 100644 app/pages/(features)/bpjs/sep/index.vue create mode 100644 app/pages/(features)/client/patient/[id]/edit.vue create mode 100644 app/pages/(features)/client/patient/[id]/index.vue create mode 100644 app/pages/(features)/client/patient/add.vue create mode 100644 app/pages/(features)/client/patient/index.vue create mode 100644 app/pages/(features)/common/uom/index.vue create mode 100644 app/pages/(features)/doctor/add.vue create mode 100644 app/pages/(features)/doctor/index.vue create mode 100644 app/pages/(features)/human-src/employee/add.vue create mode 100644 app/pages/(features)/human-src/employee/index.vue create mode 100644 app/pages/(features)/human-src/specialist-intern/add.vue create mode 100644 app/pages/(features)/human-src/specialist-intern/index.vue create mode 100644 app/pages/(features)/integration/satusehat/[id]/detail.vue create mode 100644 app/pages/(features)/integration/satusehat/[id]/edit.vue create mode 100644 app/pages/(features)/integration/satusehat/add.vue create mode 100644 app/pages/(features)/integration/satusehat/index.vue create mode 100644 app/pages/(features)/org-src/division/index.vue create mode 100644 app/pages/(features)/org-src/installation/index.vue create mode 100644 app/pages/(features)/org-src/specialist/index.vue create mode 100644 app/pages/(features)/org-src/subspecialist/index.vue create mode 100644 app/pages/(features)/org-src/unit/index.vue create mode 100644 app/pages/(features)/outpatient/examination-queue/index.vue create mode 100644 app/pages/(features)/outpatient/examination/index.vue create mode 100644 app/pages/(features)/outpatient/registration-queue/index.vue create mode 100644 app/pages/(features)/outpatient/registration/index.vue create mode 100644 app/pages/(features)/rehab/encounter/[id]/detail.vue create mode 100644 app/pages/(features)/rehab/encounter/[id]/edit.vue create mode 100644 app/pages/(features)/rehab/encounter/[id]/process.vue create mode 100644 app/pages/(features)/rehab/encounter/add.vue create mode 100644 app/pages/(features)/rehab/encounter/index.vue create mode 100644 app/pages/(features)/rehab/examination-queue/index.vue create mode 100644 app/pages/(features)/rehab/examination/index.vue create mode 100644 app/pages/(features)/rehab/registration-queue/index.vue create mode 100644 app/pages/(features)/rehab/registration-queue/sep-prosedur/add.vue create mode 100644 app/pages/(features)/rehab/registration/[id]/detail.vue create mode 100644 app/pages/(features)/rehab/registration/[id]/edit.vue create mode 100644 app/pages/(features)/rehab/registration/add.vue create mode 100644 app/pages/(features)/rehab/registration/index.vue create mode 100644 app/pages/(features)/service-src/bed/index.vue create mode 100644 app/pages/(features)/service-src/building/index.vue create mode 100644 app/pages/(features)/service-src/chamber/index.vue create mode 100644 app/pages/(features)/service-src/counter/index.vue create mode 100644 app/pages/(features)/service-src/floor/index.vue create mode 100644 app/pages/(features)/service-src/room/index.vue create mode 100644 app/pages/(features)/service-src/warehouse/index.vue create mode 100644 app/pages/(features)/tools-equipment-src/equipment/index.vue create mode 100644 app/pages/(features)/tools-equipment-src/medicine-method/index.vue create mode 100644 app/pages/(features)/tools-equipment-src/medicine-type/index.vue create mode 100644 app/pages/(features)/tools-equipment-src/medicine/[id]/edit.vue create mode 100644 app/pages/(features)/tools-equipment-src/medicine/add.vue create mode 100644 app/pages/(features)/tools-equipment-src/medicine/index.vue create mode 100644 app/pages/(features)/tools-equipment-src/tools/index.vue create mode 100644 app/pages/_dev/index.vue create mode 100644 app/pages/_dev/play.vue create mode 100644 app/pages/_dev/prescription/list.vue create mode 100644 app/pages/_dev/user/entry.vue create mode 100644 app/pages/_dev/user/list.vue create mode 100644 app/pages/auth/login.vue create mode 100644 app/pages/index.vue create mode 100644 app/plugins/persist.client.ts create mode 100644 app/schemas/auth.schema.ts create mode 100644 app/schemas/base.schema.ts create mode 100644 app/schemas/device.schema.ts create mode 100644 app/schemas/division.schema.ts create mode 100644 app/schemas/infra.schema.ts create mode 100644 app/schemas/installation.schema.ts create mode 100644 app/schemas/material.schema.ts create mode 100644 app/schemas/medicine.schema.ts create mode 100644 app/schemas/patient.schema.ts create mode 100644 app/schemas/person-address-relative.schema.ts create mode 100644 app/schemas/person-address.schema.ts create mode 100644 app/schemas/person-contact.schema.ts create mode 100644 app/schemas/person-family.schema.ts create mode 100644 app/schemas/person-relative.schema.ts create mode 100644 app/schemas/specialist.schema.ts create mode 100644 app/schemas/subspecialist.schema.ts create mode 100644 app/schemas/unit.schema.ts create mode 100644 app/schemas/uom.schema.ts create mode 100644 app/services/_crud-base.ts create mode 100644 app/services/auth.service.ts create mode 100644 app/services/device.service.ts create mode 100644 app/services/division-position.service.ts create mode 100644 app/services/division.service.ts create mode 100644 app/services/encounter.service.ts create mode 100644 app/services/infra.service.ts create mode 100644 app/services/installation.service.ts create mode 100644 app/services/material.service.ts create mode 100644 app/services/medicine-group.service.ts create mode 100644 app/services/medicine-method.service.ts create mode 100644 app/services/medicine.service.ts create mode 100644 app/services/patient.service.ts create mode 100644 app/services/specialist.service.ts create mode 100644 app/services/subspecialist.service.ts create mode 100644 app/services/unit.service.ts create mode 100644 app/services/uom.service.ts create mode 100644 app/stores/user.ts create mode 100644 app/types/error.ts create mode 100644 app/types/form.ts create mode 100644 app/types/index.d.ts create mode 100644 components.json create mode 100644 eslint.config.js create mode 100644 nuxt.config.ts create mode 100644 package.json create mode 100644 pnpm-lock.yaml create mode 100644 public/favicon.ico create mode 100644 public/robots.txt create mode 100644 public/rss-login-page.jpg create mode 100644 public/rssa-logo.png create mode 100644 public/side-menu-items/doc.json create mode 100644 public/side-menu-items/lab.json create mode 100644 public/side-menu-items/miw.json create mode 100644 public/side-menu-items/nur.json create mode 100644 public/side-menu-items/nut.json create mode 100644 public/side-menu-items/pha.json create mode 100644 public/side-menu-items/reg.json create mode 100644 public/side-menu-items/sys.json create mode 100644 server/api/[...req].ts create mode 100644 server/api/v1/authentication/login.post.ts create mode 100644 tailwind.config.ts create mode 100644 tsconfig.json create mode 100644 uno.config.ts diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..6e16f543 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,30 @@ +# top-most EditorConfig file +root = true + +# Default settings for all files +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +indent_style = space +indent_size = 2 +trim_trailing_whitespace = true + +# For Markdown files, don't trim trailing whitespace (karena kadang dipakai untuk line break) +[*.md] +trim_trailing_whitespace = false + +# For JSON, YAML, and config files +[*.{json,yml,yaml}] +indent_style = space +indent_size = 2 + +# For JS, TS, Vue files +[*.{js,ts,vue}] +indent_style = space +indent_size = 2 + +# For CSS, SCSS, PostCSS +[*.{css,scss,pcss}] +indent_style = space +indent_size = 2 diff --git a/.env.example b/.env.example new file mode 100644 index 00000000..b6721291 --- /dev/null +++ b/.env.example @@ -0,0 +1 @@ +API_ORIGIN= diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 00000000..bff36007 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,11 @@ +{ + "useTabs": false, + "tabWidth": 2, + "singleQuote": true, + "trailingComma": "all", + "printWidth": 120, + "semi": false, + "plugins": ["prettier-plugin-tailwindcss"], + "htmlWhitespaceSensitivity": "ignore", + "singleAttributePerLine": true +} diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 00000000..4b1147d4 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,15 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "chrome", + "request": "launch", + "name": "Launch Chrome against localhost", + "url": "http://localhost:3000", + "webRoot": "${workspaceFolder}" + } + ] +} diff --git a/README-nuxt.md b/README-nuxt.md new file mode 100644 index 00000000..25b58212 --- /dev/null +++ b/README-nuxt.md @@ -0,0 +1,75 @@ +# Nuxt Minimal Starter + +Look at the [Nuxt documentation](https://nuxt.com/docs/getting-started/introduction) to learn more. + +## Setup + +Make sure to install dependencies: + +```bash +# npm +npm install + +# pnpm +pnpm install + +# yarn +yarn install + +# bun +bun install +``` + +## Development Server + +Start the development server on `http://localhost:3000`: + +```bash +# npm +npm run dev + +# pnpm +pnpm dev + +# yarn +yarn dev + +# bun +bun run dev +``` + +## Production + +Build the application for production: + +```bash +# npm +npm run build + +# pnpm +pnpm build + +# yarn +yarn build + +# bun +bun run build +``` + +Locally preview production build: + +```bash +# npm +npm run preview + +# pnpm +pnpm preview + +# yarn +yarn preview + +# bun +bun run preview +``` + +Check out the [deployment documentation](https://nuxt.com/docs/getting-started/deployment) for more information. diff --git a/README.md b/README.md index 078e8c9a..45e4a4e5 100644 --- a/README.md +++ b/README.md @@ -2,4 +2,111 @@ RSSA - Front End -If you see this, the development is still not merged yet. Please check another branch. +> [!IMPORTANT] +> Read this following instructions before doing your job + +## Framework Guide + +- [Vue Style Guide](https://vuejs.org/style-guide) +- [Nuxt Style Guide](https://nuxt.com/docs/4.x/guide) +- [Shadcn Vue @radix-ui](https://radix.shadcn-vue.com/) + +## Configuration + +- `nuxt.config.ts`
Nuxt configuration file +- `.env`
Some environment variables + +## Directory Structure for `app/` + +- `app.vue`: Main layout +- `components` : Contains all reusable UI components. +- `components/content` : Entry point for business logic and workflows. Pages or routes call these content components to handle API requests and process application logic +- `components/app` : View-layer components that manage and present data. These are used within `content/` to render or handle specific parts of the UI, and return results back to the content +- `components/pub` : Public/shared components used across different parts of the app. +- `composables` : Contains reusable logic and utility functions (e.g. composables, hooks).. +- `layouts` : Reusable UI layout patterns used across pages. +- `models` : Contains data definitions or interfaces. +- `schemas` : Contains JSON schemas used for validation. +- `services` : Contains reusable API calls and business logic. + + +## Directory Structure for `app/pages` + +- `pages/auth` : Authentication related pages. +- `pages/(features)` : Grouped feature modules that reflect specific business content or domains. + +## Directory Structure for `server/` + +- `server/api` : API or proxy requests + +## Workflows + +The basic development workflow follows these steps: + +### Define Your Data in `models/` + +- Create data definitions or interfaces. +- These should represent the structure of the data used across your app. + +### Build UI Components in `components/app` + +- Create reusable UI and app specific components. +- Keep components pure, avoid making HTTP requests directly within them. +- They receive data via props and emit events upward. + +### Business Logic in `components/content` + +- This layer connects the UI with the logic (API calls, validations, navigation). +- It composes components from `components/app/`, `components/pub/`, and other content. +- Also responsible for managing state, side effects, and interactions. + +### Create Pages in `pages/` + +- Define permissions and guards for each page. +- Pages load the appropriate content from `components/content/`. +- They do not contain UI or logic directly, just route level layout or guards. + +### Validation + +- UI level validation in `components/app`. help users avoid mistakes before submitting. + - Lightweight/instant validation related to UX. + - Basic formatting (email regex, numeric-only, password length). + - Showing error messages directly under the field. + +- Business level validation in `components/flow`. cannot rely only on the UI, since it often requires server-side checks or rules that may change. + - More complex validation rules tied to business logic. + +## Code Conventions + +- Under the script setup block, putting things in group with the following order: + - Imports → all dependencies, sorted by external, alias (~), and relative imports. + - Props & Emits → clearly define component inputs & outputs. + - State & Computed → all ref, reactive, and computed variables grouped together. + - Lifecycle Hooks → grouped by mounting → updating → unmounting order. + - Functions → async first (fetching, API calls), then utility & event handlers. + - Watchers → if needed, put them at the bottom. + - Template → keep clean and minimal logic, use methods/computed instead of inline JS. +- Declaration Naming + - Uses PascalCase for `type` naming + - Uses camelCase for `variable` and `const` naming + - Underscore can be used to indicates that a variable has derived from an attribute of an object
+ for example: `person_name` indicates it is an attribute `name` from object `person` +- Looping + - Uses `i`, `j`, `k` as variable for `for` looping index + - Uses `item` as object instantition for `forEach` loop callback + - Uses `item` as object instantition for `v-for` loop callback in the template + +## Git Workflows + +The basic git workflow follows these steps: + +1. Create a new branch on `dev` + - branch name should be `feat/` or `fix/` +2. Make your changes +3. Commit your changes + - commit msg format: `[type]: [description]` + - `type` can be `feat`, `fix`, `docs`, `style`, `refactor`, `perf`, `test`, `build`, `ci`, `chore`, `revert` + - `description` should be a brief description of the changes + - Example: `feat: add new feature` +4. Push your changes to `dev` +5. Create a pull request from `dev` to `main` diff --git a/app/app.vue b/app/app.vue new file mode 100644 index 00000000..46d6ca88 --- /dev/null +++ b/app/app.vue @@ -0,0 +1,25 @@ + + + diff --git a/app/assets/css/main.css b/app/assets/css/main.css new file mode 100644 index 00000000..b5064af7 --- /dev/null +++ b/app/assets/css/main.css @@ -0,0 +1,378 @@ +/* SIMRS RSSA Design System - Pure CSS (No Tailwind) */ + +/* CSS Variables */ +:root { + /* Medical Theme Colors */ + --background: 230 20% 98%; + --foreground: 210 20% 15%; + --card: 0 0% 100%; + --card-foreground: 210 20% 15%; + --popover: 0 0% 100%; + --popover-foreground: 210 20% 15%; + + /* Primary - Medical Green */ + --primary: 26 89% 57%; + --primary-foreground: 0 0% 100%; + --primary-hover: 26, 92%, 65%; + + /* Secondary - Clean Blue */ + --secondary: 210 50% 96%; + --secondary-foreground: 210 20% 20%; + --muted: 210 25% 95%; + --muted-foreground: 210 15% 50%; + + /* Accent - Neutral Gray */ + --accent: 210 40% 96%; + --accent-foreground: 222.2 84% 4.9%; + --destructive: 0 75% 55%; + --destructive-foreground: 0 0% 100%; + --border: 210 20% 88%; + --input: 210 20% 95%; + --ring: 150 75% 35%; + + /* Medical Status Colors */ + --success: 150 75% 40%; + --success-foreground: 0 0% 100%; + --warning: 45 95% 60%; + --warning-foreground: 210 20% 15%; + --info: 210 100% 50%; + --info-foreground: 0 0% 100%; + + /* Gradients */ + --gradient-primary: linear-gradient(135deg, hsl(150 75% 35%), hsl(150 75% 45%)); + --gradient-medical: linear-gradient(135deg, hsl(150 75% 35%), hsl(210 100% 50%)); + --gradient-subtle: linear-gradient(180deg, hsl(210 20% 98%), hsl(210 25% 95%)); + + /* Shadows */ + --shadow-medical: 0 4px 20px -4px hsl(150 75% 35% / 0.15); + --shadow-card: 0 2px 10px -2px hsl(210 20% 15% / 0.1); + --shadow-glow: 0 0 30px hsl(150 75% 35% / 0.2); + + /* Transitions */ + --transition-smooth: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); + --transition-fast: all 0.15s ease-out; + + /* Border Radius */ + --radius: 0.5rem; + --radius-lg: var(--radius); + --radius-md: calc(var(--radius) - 2px); + --radius-sm: calc(var(--radius) - 4px); + + /* Sidebar */ + --sidebar-background: 0 0% 98%; + --sidebar-foreground: 240 5.3% 26.1%; + --sidebar-primary: 240 5.9% 10%; + --sidebar-primary-foreground: 0 0% 98%; + --sidebar-accent: 240 4.8% 95.9%; + --sidebar-accent-foreground: 240 5.9% 10%; + --sidebar-border: 220 13% 91%; + --sidebar-ring: 217.2 91.2% 59.8%; +} + +.dark { + --background: 210 25% 8%; + --foreground: 210 20% 95%; + --card: 210 25% 10%; + --card-foreground: 210 20% 95%; + --popover: 210 25% 10%; + --popover-foreground: 210 20% 95%; + --primary: 26 89% 57%; + --primary-foreground: 0 0% 100%; + --primary-hover: 26, 92%, 65%; + --secondary: 210 25% 15%; + --secondary-foreground: 210 20% 90%; + --muted: 210 25% 15%; + --muted-foreground: 210 15% 65%; + --accent: 210 100% 55%; + --accent-foreground: 0 0% 100%; + --destructive: 0 75% 60%; + --destructive-foreground: 0 0% 100%; + --border: 210 25% 20%; + --input: 210 25% 15%; + --ring: 150 75% 45%; + --success: 150 75% 50%; + --warning: 45 95% 65%; + --info: 210 100% 60%; + --gradient-primary: linear-gradient(135deg, hsl(150 75% 45%), hsl(150 75% 55%)); + --gradient-medical: linear-gradient(135deg, hsl(150 75% 45%), hsl(210 100% 55%)); + --gradient-subtle: linear-gradient(180deg, hsl(210 25% 8%), hsl(210 25% 12%)); + --sidebar-background: 240 5.9% 10%; + --sidebar-foreground: 240 4.8% 95.9%; + --sidebar-primary: 224.3 76.3% 48%; + --sidebar-primary-foreground: 0 0% 100%; + --sidebar-accent: 240 3.7% 15.9%; + --sidebar-accent-foreground: 240 4.8% 95.9%; + --sidebar-border: 240 3.7% 15.9%; + --sidebar-ring: 217.2 91.2% 59.8%; +} + +/* Keyframes for Animations */ +@keyframes accordion-down { + from { + height: 0; + } + to { + height: var(--radix-accordion-content-height); + } +} + +@keyframes accordion-up { + from { + height: var(--radix-accordion-content-height); + } + to { + height: 0; + } +} + +@keyframes fadeIn { + 0% { + opacity: 0; + transform: translateY(10px); + } + 100% { + opacity: 1; + transform: translateY(0); + } +} + +@keyframes slideUp { + 0% { + transform: translateY(100%); + } + 100% { + transform: translateY(0); + } +} + +@keyframes pulseMedical { + 0%, + 100% { + box-shadow: 0 0 0 0 hsl(var(--primary) / 0.4); + } + 50% { + box-shadow: 0 0 0 10px hsl(var(--primary) / 0); + } +} + +/* Base Styles */ +* { + border-color: hsl(var(--border)); + box-sizing: border-box; +} + +body { + /* background-color: hsl(var(--background)); */ + /* background-color: hsl(var(--background), 0.5); */ + color: hsl(var(--foreground)); + line-height: 1.5; + margin: 0; +} + +body { + @apply bg-slate-100 dark:bg-slate-800 ; +} + +body, table, label { + @apply md:!text-xs xl:!text-sm 2xl:!text-sm; +} + +/* Container */ +.container { + width: 100%; + margin: 0 auto; + padding: 0 2rem; +} + +@media (min-width: 1400px) { + .container { + max-width: 1400px; + } +} + +/* Color Classes */ +.bg-background { + background-color: hsl(var(--background)); +} +.bg-foreground { + background-color: hsl(var(--foreground)); +} +.bg-card { + background-color: hsl(var(--card)); +} +.bg-primary { + background-color: hsl(var(--primary)); +} +.bg-secondary { + background-color: hsl(var(--secondary)); +} +.bg-accent { + background-color: hsl(var(--accent)); +} +.bg-destructive { + background-color: hsl(var(--destructive)); +} +.bg-muted { + background-color: hsl(var(--muted)); +} +.bg-success { + background-color: hsl(var(--success)); +} +.bg-warning { + background-color: hsl(var(--warning)); +} +.bg-info { + background-color: hsl(var(--info)); +} + +.text-background { + color: hsl(var(--background)); +} +.text-foreground { + color: hsl(var(--foreground)); +} +.text-card { + color: hsl(var(--card)); +} +.text-primary { + color: hsl(var(--primary)); +} +.text-secondary { + color: hsl(var(--secondary)); +} +.text-accent { + color: hsl(var(--accent)); +} +.text-destructive { + color: hsl(var(--destructive)); +} +.text-muted { + color: hsl(var(--muted)); +} +.text-success { + color: hsl(var(--success)); +} +.text-warning { + color: hsl(var(--warning)); +} +.text-info { + color: hsl(var(--info)); +} + +.text-primary-foreground { + color: hsl(var(--primary-foreground)); +} +.text-secondary-foreground { + color: hsl(var(--secondary-foreground)); +} +.text-accent-foreground { + color: hsl(var(--accent-foreground)); +} +.text-destructive-foreground { + color: hsl(var(--destructive-foreground)); +} +.text-muted-foreground { + color: hsl(var(--muted-foreground)); +} +.text-success-foreground { + color: hsl(var(--success-foreground)); +} +.text-warning-foreground { + color: hsl(var(--warning-foreground)); +} +.text-info-foreground { + color: hsl(var(--info-foreground)); +} + +.border-primary { + border-color: hsl(var(--primary)); +} +.border-secondary { + border-color: hsl(var(--secondary)); +} +.border-accent { + border-color: hsl(var(--accent)); +} +.border-destructive { + border-color: hsl(var(--destructive)); +} +.border-input { + border-color: hsl(var(--input)); +} + +/* Sidebar Colors */ +.bg-sidebar { + background-color: hsl(var(--sidebar-background)); +} +.text-sidebar { + color: hsl(var(--sidebar-foreground)); +} +.bg-sidebar-primary { + background-color: hsl(var(--sidebar-primary)); +} +.text-sidebar-primary { + color: hsl(var(--sidebar-primary)); +} +.bg-sidebar-accent { + background-color: hsl(var(--sidebar-accent)); +} +.text-sidebar-accent { + color: hsl(var(--sidebar-accent)); +} +.border-sidebar { + border-color: hsl(var(--sidebar-border)); +} + +/* Background Images */ +.bg-gradient-medical { + background-image: var(--gradient-medical); +} +.bg-gradient-primary { + background-image: var(--gradient-primary); +} +.bg-gradient-subtle { + background-image: var(--gradient-subtle); +} + +/* Border Radius */ +.rounded-sm { + border-radius: var(--radius-sm); +} + +/* Form Error Styling */ +.field-error-info { + font-size: 0.75rem; + margin-left: 0.25rem; + color: hsl(var(--destructive)); + /* font-size: 0.875rem; */ + margin-top: 0.25rem; + min-height: 1rem; /* Reserve space to prevent CLS */ + line-height: 1.25; +} + +/* .rounded-md { border-radius: var */ + +/* Dashboard grid utility */ +.dashboard-grid { + display: grid; + gap: 1rem; +} + +@media (min-width: 768px) { + .dashboard-grid { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } +} + +@media (min-width: 1024px) { + .dashboard-grid { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } +} + +@media (min-width: 1280px) { + .dashboard-grid { + grid-template-columns: repeat(4, minmax(0, 1fr)); + gap: 1.25rem; + } +} diff --git a/app/components/app/assesment-function/entry-form.vue b/app/components/app/assesment-function/entry-form.vue new file mode 100644 index 00000000..5768c6a0 --- /dev/null +++ b/app/components/app/assesment-function/entry-form.vue @@ -0,0 +1,47 @@ + + + diff --git a/app/components/app/assesment-function/list-cfg.ts b/app/components/app/assesment-function/list-cfg.ts new file mode 100644 index 00000000..460cacd9 --- /dev/null +++ b/app/components/app/assesment-function/list-cfg.ts @@ -0,0 +1,119 @@ +import type { + Col, + KeyLabel, + RecComponent, + RecStrFuncComponent, + RecStrFuncUnknown, + Th, +} from '~/components/pub/my-ui/data/types' +import { defineAsyncComponent } from 'vue' + +type SmallDetailDto = any + +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-dud.vue')) + +export const cols: Col[] = [ + {}, + {}, + {}, + { width: 100 }, + { width: 120 }, + {}, + {}, + {}, + { width: 100 }, + { width: 100 }, + {}, + { width: 50 }, +] + +export const header: Th[][] = [ + [ + { label: 'Nama' }, + { label: 'Rekam Medis' }, + { label: 'KTP' }, + { label: 'Tgl Lahir' }, + { label: 'Umur' }, + { label: 'JK' }, + { label: 'Pendidikan' }, + { label: 'Status' }, + { label: '' }, + ], +] + +export const keys = [ + 'name', + 'medicalRecord_number', + 'identity_number', + 'birth_date', + 'patient_age', + 'gender', + 'education', + 'status', + 'action', +] + +export const delKeyNames: KeyLabel[] = [ + { key: 'code', label: 'Kode' }, + { key: 'name', label: 'Nama' }, +] + +export const funcParsed: RecStrFuncUnknown = { + name: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + return `${recX.firstName} ${recX.middleName || ''} ${recX.lastName || ''}` + }, + identity_number: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + if (recX.identity_number?.substring(0, 5) === 'BLANK') { + return '(TANPA NIK)' + } + return recX.identity_number + }, + birth_date: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + if (typeof recX.birth_date == 'object' && recX.birth_date) { + return (recX.birth_date as Date).toLocaleDateString() + } else if (typeof recX.birth_date == 'string') { + return (recX.birth_date as string).substring(0, 10) + } + return recX.birth_date + }, + patient_age: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + return recX.birth_date?.split('T')[0] + }, + gender: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + if (typeof recX?.gender_code !== 'number' && recX?.gender_code !== '') { + return 'Tidak Diketahui' + } + return recX.gender_code + }, + education: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + if (typeof recX.education_code == 'number' && recX.education_code >= 0) { + return recX.education_code + } else if (typeof recX.education_code) { + return recX.education_code + } + return '-' + }, +} + +export const funcComponent: RecStrFuncComponent = { + action(rec, idx) { + const res: RecComponent = { + idx, + rec: rec as object, + component: action, + } + return res + }, +} + +export const funcHtml: RecStrFuncUnknown = { + patient_address(_rec) { + return '-' + }, +} diff --git a/app/components/app/assesment-function/list.vue b/app/components/app/assesment-function/list.vue new file mode 100644 index 00000000..b9a74929 --- /dev/null +++ b/app/components/app/assesment-function/list.vue @@ -0,0 +1,19 @@ + + + diff --git a/app/components/app/assesment-function/picker.vue b/app/components/app/assesment-function/picker.vue new file mode 100644 index 00000000..e69de29b diff --git a/app/components/app/assesment-function/search.vue b/app/components/app/assesment-function/search.vue new file mode 100644 index 00000000..e69de29b diff --git a/app/components/app/auth/login.vue b/app/components/app/auth/login.vue new file mode 100644 index 00000000..29fb60b4 --- /dev/null +++ b/app/components/app/auth/login.vue @@ -0,0 +1,74 @@ + + + diff --git a/app/components/app/bed/entry-form.vue b/app/components/app/bed/entry-form.vue new file mode 100644 index 00000000..fb851aa4 --- /dev/null +++ b/app/components/app/bed/entry-form.vue @@ -0,0 +1,105 @@ + + + diff --git a/app/components/app/bed/list-cfg.ts b/app/components/app/bed/list-cfg.ts new file mode 100644 index 00000000..5174e69a --- /dev/null +++ b/app/components/app/bed/list-cfg.ts @@ -0,0 +1,47 @@ +import type { + Col, + KeyLabel, + RecComponent, + RecStrFuncComponent, + RecStrFuncUnknown, + Th, +} from '~/components/pub/my-ui/data/types' +import { defineAsyncComponent } from 'vue' + +type SmallDetailDto = any + +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-dud.vue')) + +export const cols: Col[] = [{ width: 100 }, {}, {}, { width: 50 }] + +export const header: Th[][] = [[{ label: 'Kode' }, { label: 'Nama' }, { label: 'Counter Induk' }, { label: '' }]] + +export const keys = ['code', 'name', 'parent', 'action'] + +export const delKeyNames: KeyLabel[] = [ + { key: 'code', label: 'Kode' }, + { key: 'name', label: 'Nama' }, +] + +export const funcParsed: RecStrFuncUnknown = { + parent: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + return recX.parent?.name || '-' + }, +} + +export const funcComponent: RecStrFuncComponent = { + action(rec, idx) { + const res: RecComponent = { + idx, + rec: rec as object, + component: action, + props: { + size: 'sm', + }, + } + return res + }, +} + +export const funcHtml: RecStrFuncUnknown = {} diff --git a/app/components/app/bed/list.vue b/app/components/app/bed/list.vue new file mode 100644 index 00000000..af63d76e --- /dev/null +++ b/app/components/app/bed/list.vue @@ -0,0 +1,36 @@ + + + diff --git a/app/components/app/building/entry-form.vue b/app/components/app/building/entry-form.vue new file mode 100644 index 00000000..c2851e2d --- /dev/null +++ b/app/components/app/building/entry-form.vue @@ -0,0 +1,108 @@ + + + diff --git a/app/components/app/building/list-cfg.ts b/app/components/app/building/list-cfg.ts new file mode 100644 index 00000000..905ec837 --- /dev/null +++ b/app/components/app/building/list-cfg.ts @@ -0,0 +1,37 @@ +import type { + Col, + KeyLabel, + RecComponent, + RecStrFuncComponent, + RecStrFuncUnknown, + Th, +} from '~/components/pub/my-ui/data/types' +import { defineAsyncComponent } from 'vue' + +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-dud.vue')) + +export const cols: Col[] = [{}, {}, { width: 50 }] + +export const header: Th[][] = [[{ label: 'Kode' }, { label: 'Nama' }, { label: '' }]] + +export const keys = ['code', 'name', 'action'] + +export const delKeyNames: KeyLabel[] = [ + { key: 'code', label: 'Kode' }, + { key: 'name', label: 'Nama' }, +] + +export const funcParsed: RecStrFuncUnknown = {} + +export const funcComponent: RecStrFuncComponent = { + action(rec, idx) { + const res: RecComponent = { + idx, + rec: rec as object, + component: action, + } + return res + }, +} + +export const funcHtml: RecStrFuncUnknown = {} diff --git a/app/components/app/building/list.vue b/app/components/app/building/list.vue new file mode 100644 index 00000000..e1b056ce --- /dev/null +++ b/app/components/app/building/list.vue @@ -0,0 +1,41 @@ + + + diff --git a/app/components/app/chamber/entry-form.vue b/app/components/app/chamber/entry-form.vue new file mode 100644 index 00000000..fb851aa4 --- /dev/null +++ b/app/components/app/chamber/entry-form.vue @@ -0,0 +1,105 @@ + + + diff --git a/app/components/app/chamber/list-cfg.ts b/app/components/app/chamber/list-cfg.ts new file mode 100644 index 00000000..5174e69a --- /dev/null +++ b/app/components/app/chamber/list-cfg.ts @@ -0,0 +1,47 @@ +import type { + Col, + KeyLabel, + RecComponent, + RecStrFuncComponent, + RecStrFuncUnknown, + Th, +} from '~/components/pub/my-ui/data/types' +import { defineAsyncComponent } from 'vue' + +type SmallDetailDto = any + +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-dud.vue')) + +export const cols: Col[] = [{ width: 100 }, {}, {}, { width: 50 }] + +export const header: Th[][] = [[{ label: 'Kode' }, { label: 'Nama' }, { label: 'Counter Induk' }, { label: '' }]] + +export const keys = ['code', 'name', 'parent', 'action'] + +export const delKeyNames: KeyLabel[] = [ + { key: 'code', label: 'Kode' }, + { key: 'name', label: 'Nama' }, +] + +export const funcParsed: RecStrFuncUnknown = { + parent: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + return recX.parent?.name || '-' + }, +} + +export const funcComponent: RecStrFuncComponent = { + action(rec, idx) { + const res: RecComponent = { + idx, + rec: rec as object, + component: action, + props: { + size: 'sm', + }, + } + return res + }, +} + +export const funcHtml: RecStrFuncUnknown = {} diff --git a/app/components/app/chamber/list.vue b/app/components/app/chamber/list.vue new file mode 100644 index 00000000..af63d76e --- /dev/null +++ b/app/components/app/chamber/list.vue @@ -0,0 +1,36 @@ + + + diff --git a/app/components/app/counter/entry-form.vue b/app/components/app/counter/entry-form.vue new file mode 100644 index 00000000..c2851e2d --- /dev/null +++ b/app/components/app/counter/entry-form.vue @@ -0,0 +1,108 @@ + + + diff --git a/app/components/app/counter/list-cfg.ts b/app/components/app/counter/list-cfg.ts new file mode 100644 index 00000000..905ec837 --- /dev/null +++ b/app/components/app/counter/list-cfg.ts @@ -0,0 +1,37 @@ +import type { + Col, + KeyLabel, + RecComponent, + RecStrFuncComponent, + RecStrFuncUnknown, + Th, +} from '~/components/pub/my-ui/data/types' +import { defineAsyncComponent } from 'vue' + +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-dud.vue')) + +export const cols: Col[] = [{}, {}, { width: 50 }] + +export const header: Th[][] = [[{ label: 'Kode' }, { label: 'Nama' }, { label: '' }]] + +export const keys = ['code', 'name', 'action'] + +export const delKeyNames: KeyLabel[] = [ + { key: 'code', label: 'Kode' }, + { key: 'name', label: 'Nama' }, +] + +export const funcParsed: RecStrFuncUnknown = {} + +export const funcComponent: RecStrFuncComponent = { + action(rec, idx) { + const res: RecComponent = { + idx, + rec: rec as object, + component: action, + } + return res + }, +} + +export const funcHtml: RecStrFuncUnknown = {} diff --git a/app/components/app/counter/list.vue b/app/components/app/counter/list.vue new file mode 100644 index 00000000..e1b056ce --- /dev/null +++ b/app/components/app/counter/list.vue @@ -0,0 +1,41 @@ + + + diff --git a/app/components/app/division/entry-form.vue b/app/components/app/division/entry-form.vue new file mode 100644 index 00000000..c58d83ac --- /dev/null +++ b/app/components/app/division/entry-form.vue @@ -0,0 +1,125 @@ + + + diff --git a/app/components/app/division/list-cfg.ts b/app/components/app/division/list-cfg.ts new file mode 100644 index 00000000..d5479579 --- /dev/null +++ b/app/components/app/division/list-cfg.ts @@ -0,0 +1,47 @@ +import type { + Col, + KeyLabel, + RecComponent, + RecStrFuncComponent, + RecStrFuncUnknown, + Th, +} from '~/components/pub/my-ui/data/types' +import { defineAsyncComponent } from 'vue' + +type SmallDetailDto = any + +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-ud.vue')) + +export const cols: Col[] = [{}, {}, {}, { width: 50 }] + +export const header: Th[][] = [[{ label: 'Kode' }, { label: 'Nama' }, { label: 'Divisi Induk' }, { label: '' }]] + +export const keys = ['code', 'name', 'parent', 'action'] + +export const delKeyNames: KeyLabel[] = [ + { key: 'code', label: 'Kode' }, + { key: 'name', label: 'Nama' }, +] + +export const funcParsed: RecStrFuncUnknown = { + parent: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + return recX.parent?.name || '-' + }, +} + +export const funcComponent: RecStrFuncComponent = { + action(rec, idx) { + const res: RecComponent = { + idx, + rec: rec as object, + component: action, + props: { + size: 'sm', + }, + } + return res + }, +} + +export const funcHtml: RecStrFuncUnknown = {} diff --git a/app/components/app/division/list.vue b/app/components/app/division/list.vue new file mode 100644 index 00000000..e1b056ce --- /dev/null +++ b/app/components/app/division/list.vue @@ -0,0 +1,41 @@ + + + diff --git a/app/components/app/doctor/entry-form.vue b/app/components/app/doctor/entry-form.vue new file mode 100644 index 00000000..24584074 --- /dev/null +++ b/app/components/app/doctor/entry-form.vue @@ -0,0 +1,48 @@ + + + diff --git a/app/components/app/doctor/list-cfg.ts b/app/components/app/doctor/list-cfg.ts new file mode 100644 index 00000000..14c9cf0d --- /dev/null +++ b/app/components/app/doctor/list-cfg.ts @@ -0,0 +1,114 @@ +import type { + Col, + KeyLabel, + RecComponent, + RecStrFuncComponent, + RecStrFuncUnknown, + Th, +} from '~/components/pub/my-ui/data/types' +import { defineAsyncComponent } from 'vue' + +type SmallDetailDto = any + +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-dud.vue')) +const statusBadge = defineAsyncComponent(() => import('./status-badge.vue')) + +const _doctorStatus = { + 0: 'Tidak Aktif', + 1: 'Aktif', +} + +export const cols: Col[] = [ + { width: 100 }, + { width: 250 }, + {}, + { width: 100 }, + { width: 100 }, + {}, + {}, + {}, + { width: 120 }, + { width: 100 }, + {}, + {}, +] + +export const header: Th[][] = [ + [ + { label: 'Kode JKN' }, + { label: 'Nama' }, + { label: 'No KTP' }, + { label: 'No SIP' }, + { label: 'No IHS' }, + { label: 'Telpon' }, + { label: 'Fee Ranap' }, + { label: 'Fee Rajal' }, + { label: 'Status' }, + { label: '' }, + ], +] + +export const keys = [ + 'bpjs_code', + 'name', + 'identity_number', + 'sip_no', + 'ihs_number', + 'phone', + 'inPatient_itemPrice', + 'outPatient_itemPrice', + 'status', + 'action', +] + +export const delKeyNames: KeyLabel[] = [ + { key: 'code', label: 'Kode' }, + { key: 'name', label: 'Nama' }, +] + +export const funcParsed: RecStrFuncUnknown = { + name: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + return `${recX.frontTitle} ${recX.name} ${recX.endTitle}`.trim() + }, + identity_number: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + if (recX.identity_number?.substring(0, 5) === 'BLANK') { + return '(TANPA NIK)' + } + return recX.identity_number + }, + inPatient_itemPrice: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + return Number(recX.inPatient_itemPrice.price).toLocaleString('id-ID') + }, + outPatient_itemPrice: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + return Number(recX.outPatient_itemPrice.price).toLocaleString('id-ID') + }, +} + +export const funcComponent: RecStrFuncComponent = { + action(rec, idx) { + const res: RecComponent = { + idx, + rec: rec as object, + component: action, + } + return res + }, + status(rec, idx) { + const res: RecComponent = { + idx, + rec: rec as object, + component: statusBadge, + } + return res + }, +} + +export const funcHtml: RecStrFuncUnknown = { + patient_address(_rec) { + return '-' + }, +} diff --git a/app/components/app/doctor/list.vue b/app/components/app/doctor/list.vue new file mode 100644 index 00000000..b9a74929 --- /dev/null +++ b/app/components/app/doctor/list.vue @@ -0,0 +1,19 @@ + + + diff --git a/app/components/app/doctor/picker.vue b/app/components/app/doctor/picker.vue new file mode 100644 index 00000000..e69de29b diff --git a/app/components/app/doctor/search.vue b/app/components/app/doctor/search.vue new file mode 100644 index 00000000..e69de29b diff --git a/app/components/app/doctor/status-badge.vue b/app/components/app/doctor/status-badge.vue new file mode 100644 index 00000000..32cdfbca --- /dev/null +++ b/app/components/app/doctor/status-badge.vue @@ -0,0 +1,29 @@ + + + diff --git a/app/components/app/employee/entry-form.vue b/app/components/app/employee/entry-form.vue new file mode 100644 index 00000000..8ccf0916 --- /dev/null +++ b/app/components/app/employee/entry-form.vue @@ -0,0 +1,49 @@ + + + diff --git a/app/components/app/employee/list-cfg.ts b/app/components/app/employee/list-cfg.ts new file mode 100644 index 00000000..69ee9962 --- /dev/null +++ b/app/components/app/employee/list-cfg.ts @@ -0,0 +1,109 @@ +import type { + Col, + KeyLabel, + RecComponent, + RecStrFuncComponent, + RecStrFuncUnknown, + Th, +} from '~/components/pub/my-ui/data/types' +import { defineAsyncComponent } from 'vue' + +type SmallDetailDto = any + +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-dud.vue')) + +const doctorStatus = { + 0: 'Tidak Aktif', + 1: 'Aktif', +} + +export const cols: Col[] = [ + { width: 100 }, + { width: 250 }, + {}, + { width: 100 }, + { width: 100 }, + {}, + {}, + {}, + { width: 100 }, + { width: 100 }, + { width: 100 }, + { width: 50 }, +] + +export const header: Th[][] = [ + [ + { label: 'Kode JKN' }, + { label: 'Nama' }, + { label: 'No KTP' }, + { label: 'No SIP' }, + { label: 'No IHS' }, + { label: 'Telpon' }, + { label: 'Fee Ranap' }, + { label: 'Fee Rajal' }, + { label: 'Status' }, + ], +] + +export const keys = [ + 'bpjs_code', + 'name', + 'identity_number', + 'sip_no', + 'ihs_number', + 'phone', + 'inPatient_itemPrice', + 'outPatient_itemPrice', + 'status', + 'action', +] + +export const delKeyNames: KeyLabel[] = [ + { key: 'code', label: 'Kode' }, + { key: 'name', label: 'Nama' }, +] + +export const funcParsed: RecStrFuncUnknown = { + name: (rec: unknown): unknown => { + console.log(rec) + const recX = rec as SmallDetailDto + return `${recX.frontTitle} ${recX.name} ${recX.endTitle}`.trim() + }, + identity_number: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + if (recX.identity_number?.substring(0, 5) === 'BLANK') { + return '(TANPA NIK)' + } + return recX.identity_number + }, + inPatient_itemPrice: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + return Number(recX.inPatient_itemPrice.price).toLocaleString('id-ID') + }, + outPatient_itemPrice: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + return Number(recX.outPatient_itemPrice.price).toLocaleString('id-ID') + }, + status: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + return doctorStatus[recX.status_code as keyof typeof doctorStatus] + }, +} + +export const funcComponent: RecStrFuncComponent = { + action(rec, idx) { + const res: RecComponent = { + idx, + rec: rec as object, + component: action, + } + return res + }, +} + +export const funcHtml: RecStrFuncUnknown = { + patient_address(_rec) { + return '-' + }, +} diff --git a/app/components/app/employee/list.vue b/app/components/app/employee/list.vue new file mode 100644 index 00000000..b9a74929 --- /dev/null +++ b/app/components/app/employee/list.vue @@ -0,0 +1,19 @@ + + + diff --git a/app/components/app/employee/picker.vue b/app/components/app/employee/picker.vue new file mode 100644 index 00000000..e69de29b diff --git a/app/components/app/employee/search.vue b/app/components/app/employee/search.vue new file mode 100644 index 00000000..e69de29b diff --git a/app/components/app/encounter/entry-form.vue b/app/components/app/encounter/entry-form.vue new file mode 100644 index 00000000..6f2ad074 --- /dev/null +++ b/app/components/app/encounter/entry-form.vue @@ -0,0 +1,356 @@ + + + diff --git a/app/components/app/encounter/filter.vue b/app/components/app/encounter/filter.vue new file mode 100644 index 00000000..31ec4476 --- /dev/null +++ b/app/components/app/encounter/filter.vue @@ -0,0 +1,114 @@ + + + diff --git a/app/components/app/encounter/list-cfg.ts b/app/components/app/encounter/list-cfg.ts new file mode 100644 index 00000000..0ca6a92c --- /dev/null +++ b/app/components/app/encounter/list-cfg.ts @@ -0,0 +1,131 @@ +import type { + Col, + KeyLabel, + RecComponent, + RecStrFuncComponent, + RecStrFuncUnknown, + Th, +} from '~/components/pub/my-ui/data/types' +import { defineAsyncComponent } from 'vue' + +type SmallDetailDto = any + +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-pdud.vue')) +const statusBadge = defineAsyncComponent(() => import('./status-badge.vue')) + +export const cols: Col[] = [ + {}, + {}, + {}, + { width: 100 }, + { width: 120 }, + {}, + {}, + {}, + { width: 100 }, + { width: 100 }, + {}, + { width: 50 }, +] + +export const header: Th[][] = [ + [ + { label: 'Nama' }, + { label: 'Rekam Medis' }, + { label: 'KTP' }, + { label: 'Tgl Lahir' }, + { label: 'Umur' }, + { label: 'JK' }, + { label: 'Pendidikan' }, + { label: 'Status' }, + { label: '' }, + ], +] + +export const keys = [ + 'name', + 'medicalRecord_number', + 'identity_number', + 'birth_date', + 'patient_age', + 'gender', + 'education', + 'status', + 'action', +] + +export const delKeyNames: KeyLabel[] = [ + { key: 'code', label: 'Kode' }, + { key: 'name', label: 'Nama' }, +] + +export const funcParsed: RecStrFuncUnknown = { + name: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + return `${recX.firstName} ${recX.middleName || ''} ${recX.lastName || ''}` + }, + identity_number: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + if (recX.identity_number?.substring(0, 5) === 'BLANK') { + return '(TANPA NIK)' + } + return recX.identity_number + }, + birth_date: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + if (typeof recX.birth_date == 'object' && recX.birth_date) { + return (recX.birth_date as Date).toLocaleDateString() + } else if (typeof recX.birth_date == 'string') { + return (recX.birth_date as string).substring(0, 10) + } + return recX.birth_date + }, + patient_age: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + return recX.birth_date?.split('T')[0] + }, + gender: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + if (typeof recX?.gender_code !== 'number' && recX?.gender_code !== '') { + return 'Tidak Diketahui' + } + return recX.gender_code + }, + education: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + if (typeof recX.education_code == 'number' && recX.education_code >= 0) { + return recX.education_code + } else if (typeof recX.education_code) { + return recX.education_code + } + return '-' + }, +} + +export const funcComponent: RecStrFuncComponent = { + action(rec, idx) { + const res: RecComponent = { + idx, + rec: rec as object, + component: action, + } + return res + }, + status(rec, idx) { + if (rec.status === null) { + rec.status_code = 0 + } + const res: RecComponent = { + idx, + rec: rec as object, + component: statusBadge, + } + return res + }, +} + +export const funcHtml: RecStrFuncUnknown = { + patient_address(_rec) { + return '-' + }, +} diff --git a/app/components/app/encounter/list.vue b/app/components/app/encounter/list.vue new file mode 100644 index 00000000..b9a74929 --- /dev/null +++ b/app/components/app/encounter/list.vue @@ -0,0 +1,19 @@ + + + diff --git a/app/components/app/encounter/picker.vue b/app/components/app/encounter/picker.vue new file mode 100644 index 00000000..e69de29b diff --git a/app/components/app/encounter/quick-info.vue b/app/components/app/encounter/quick-info.vue new file mode 100644 index 00000000..56f40e79 --- /dev/null +++ b/app/components/app/encounter/quick-info.vue @@ -0,0 +1,83 @@ + + + diff --git a/app/components/app/encounter/search.vue b/app/components/app/encounter/search.vue new file mode 100644 index 00000000..e69de29b diff --git a/app/components/app/encounter/status-badge.vue b/app/components/app/encounter/status-badge.vue new file mode 100644 index 00000000..32cdfbca --- /dev/null +++ b/app/components/app/encounter/status-badge.vue @@ -0,0 +1,29 @@ + + + diff --git a/app/components/app/encounter/status.vue b/app/components/app/encounter/status.vue new file mode 100644 index 00000000..e45c0a78 --- /dev/null +++ b/app/components/app/encounter/status.vue @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/app/components/app/equipment/entry-form.vue b/app/components/app/equipment/entry-form.vue new file mode 100644 index 00000000..5ff92ad2 --- /dev/null +++ b/app/components/app/equipment/entry-form.vue @@ -0,0 +1,126 @@ + + + diff --git a/app/components/app/equipment/list-cfg.ts b/app/components/app/equipment/list-cfg.ts new file mode 100644 index 00000000..8f3ff7e5 --- /dev/null +++ b/app/components/app/equipment/list-cfg.ts @@ -0,0 +1,43 @@ +import type { Col, KeyLabel, RecComponent, RecStrFuncComponent, Th } from '~/components/pub/my-ui/data/types' +import { defineAsyncComponent } from 'vue' + +type SmallDetailDto = any + +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-dud.vue')) + +export const cols: Col[] = [{ width: 100 }, { width: 250 }, { width: 100 }, { width: 100 }, { width: 50 }] + +export const header: Th[][] = [ + [{ label: 'Kode' }, { label: 'Nama' }, { label: 'Stok' }, { label: 'Satuan' }, { label: '' }], +] + +export const keys = ['code', 'name', 'stock', 'uom_code', 'action'] + +export const delKeyNames: KeyLabel[] = [ + { key: 'code', label: 'Kode' }, + { key: 'name', label: 'Nama' }, +] + +export const funcParsed: Record any> = { + name: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + return `${recX.name}`.trim() + }, + uom_code: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + return recX.uom_code + }, +} + +export const funcComponent: RecStrFuncComponent = { + action(rec, idx) { + const res: RecComponent = { + idx, + rec: rec as object, + component: action, + } + return res + }, +} + +export const funcHtml: Record any> = {} diff --git a/app/components/app/equipment/list.vue b/app/components/app/equipment/list.vue new file mode 100644 index 00000000..3af2b398 --- /dev/null +++ b/app/components/app/equipment/list.vue @@ -0,0 +1,40 @@ + + + diff --git a/app/components/app/floor/entry-form.vue b/app/components/app/floor/entry-form.vue new file mode 100644 index 00000000..19468df5 --- /dev/null +++ b/app/components/app/floor/entry-form.vue @@ -0,0 +1,125 @@ + + + diff --git a/app/components/app/floor/list-cfg.ts b/app/components/app/floor/list-cfg.ts new file mode 100644 index 00000000..33b1a8af --- /dev/null +++ b/app/components/app/floor/list-cfg.ts @@ -0,0 +1,44 @@ +import type { + Col, + KeyLabel, + RecComponent, + RecStrFuncComponent, + RecStrFuncUnknown, + Th, +} from '~/components/pub/my-ui/data/types' +import { defineAsyncComponent } from 'vue' + +type SmallDetailDto = any + +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-dud.vue')) + +export const cols: Col[] = [{}, {}, {}, { width: 50 }] + +export const header: Th[][] = [[{ label: 'Kode' }, { label: 'Nama' }, { label: 'Gedung' }, { label: '' }]] + +export const keys = ['code', 'name', 'parent', 'action'] + +export const delKeyNames: KeyLabel[] = [ + { key: 'code', label: 'Kode' }, + { key: 'name', label: 'Nama' }, +] + +export const funcParsed: RecStrFuncUnknown = { + parent: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + return recX.parent?.name || '-' + }, +} + +export const funcComponent: RecStrFuncComponent = { + action(rec, idx) { + const res: RecComponent = { + idx, + rec: rec as object, + component: action, + } + return res + }, +} + +export const funcHtml: RecStrFuncUnknown = {} diff --git a/app/components/app/floor/list.vue b/app/components/app/floor/list.vue new file mode 100644 index 00000000..e1b056ce --- /dev/null +++ b/app/components/app/floor/list.vue @@ -0,0 +1,41 @@ + + + diff --git a/app/components/app/icd/entry-form.vue b/app/components/app/icd/entry-form.vue new file mode 100644 index 00000000..7c850a16 --- /dev/null +++ b/app/components/app/icd/entry-form.vue @@ -0,0 +1,43 @@ + + + diff --git a/app/components/app/icd/list-cfg.ts b/app/components/app/icd/list-cfg.ts new file mode 100644 index 00000000..c74ef59b --- /dev/null +++ b/app/components/app/icd/list-cfg.ts @@ -0,0 +1,131 @@ +import type { + Col, + KeyLabel, + RecComponent, + RecStrFuncComponent, + RecStrFuncUnknown, + Th, +} from '~/components/pub/my-ui/data/types' +import { defineAsyncComponent } from 'vue' + +type SmallDetailDto = any + +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-dud.vue')) +const statusBadge = defineAsyncComponent(() => import('./status-badge.vue')) + +export const cols: Col[] = [ + {}, + {}, + {}, + { width: 100 }, + { width: 120 }, + {}, + {}, + {}, + { width: 100 }, + { width: 100 }, + {}, + { width: 50 }, +] + +export const header: Th[][] = [ + [ + { label: 'Nama' }, + { label: 'Rekam Medis' }, + { label: 'KTP' }, + { label: 'Tgl Lahir' }, + { label: 'Umur' }, + { label: 'JK' }, + { label: 'Pendidikan' }, + { label: 'Status' }, + { label: '' }, + ], +] + +export const keys = [ + 'name', + 'medicalRecord_number', + 'identity_number', + 'birth_date', + 'patient_age', + 'gender', + 'education', + 'status', + 'action', +] + +export const delKeyNames: KeyLabel[] = [ + { key: 'code', label: 'Kode' }, + { key: 'name', label: 'Nama' }, +] + +export const funcParsed: RecStrFuncUnknown = { + name: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + return `${recX.firstName} ${recX.middleName || ''} ${recX.lastName || ''}` + }, + identity_number: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + if (recX.identity_number?.substring(0, 5) === 'BLANK') { + return '(TANPA NIK)' + } + return recX.identity_number + }, + birth_date: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + if (typeof recX.birth_date == 'object' && recX.birth_date) { + return (recX.birth_date as Date).toLocaleDateString() + } else if (typeof recX.birth_date == 'string') { + return (recX.birth_date as string).substring(0, 10) + } + return recX.birth_date + }, + patient_age: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + return recX.birth_date?.split('T')[0] + }, + gender: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + if (typeof recX?.gender_code !== 'number' && recX?.gender_code !== '') { + return 'Tidak Diketahui' + } + return recX.gender_code + }, + education: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + if (typeof recX.education_code == 'number' && recX.education_code >= 0) { + return recX.education_code + } else if (typeof recX.education_code) { + return recX.education_code + } + return '-' + }, +} + +export const funcComponent: RecStrFuncComponent = { + action(rec, idx) { + const res: RecComponent = { + idx, + rec: rec as object, + component: action, + } + return res + }, + status(rec, idx) { + if (rec.status === null) { + rec.status_code = 0 + } + const res: RecComponent = { + idx, + rec: rec as object, + component: statusBadge, + } + return res + }, +} + +export const funcHtml: RecStrFuncUnknown = { + patient_address(_rec) { + return '-' + }, +} diff --git a/app/components/app/icd/list.vue b/app/components/app/icd/list.vue new file mode 100644 index 00000000..b9a74929 --- /dev/null +++ b/app/components/app/icd/list.vue @@ -0,0 +1,19 @@ + + + diff --git a/app/components/app/icd/multiselect-picker.vue b/app/components/app/icd/multiselect-picker.vue new file mode 100644 index 00000000..9a08bb86 --- /dev/null +++ b/app/components/app/icd/multiselect-picker.vue @@ -0,0 +1,20 @@ + + + diff --git a/app/components/app/icd/preview.vue b/app/components/app/icd/preview.vue new file mode 100644 index 00000000..36bb193c --- /dev/null +++ b/app/components/app/icd/preview.vue @@ -0,0 +1,46 @@ + + + diff --git a/app/components/app/icd/search.vue b/app/components/app/icd/search.vue new file mode 100644 index 00000000..e69de29b diff --git a/app/components/app/icd/status-badge.vue b/app/components/app/icd/status-badge.vue new file mode 100644 index 00000000..32cdfbca --- /dev/null +++ b/app/components/app/icd/status-badge.vue @@ -0,0 +1,29 @@ + + + diff --git a/app/components/app/installation/entry-form.vue b/app/components/app/installation/entry-form.vue new file mode 100644 index 00000000..9d57b434 --- /dev/null +++ b/app/components/app/installation/entry-form.vue @@ -0,0 +1,119 @@ + + + diff --git a/app/components/app/installation/list-cfg.ts b/app/components/app/installation/list-cfg.ts new file mode 100644 index 00000000..e6fc5d47 --- /dev/null +++ b/app/components/app/installation/list-cfg.ts @@ -0,0 +1,51 @@ +import type { + Col, + KeyLabel, + RecComponent, + RecStrFuncComponent, + RecStrFuncUnknown, + Th, +} from '~/components/pub/my-ui/data/types' +import { defineAsyncComponent } from 'vue' + +type SmallDetailDto = any + +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-ud.vue')) + +export const cols: Col[] = [{}, {}, {}, { width: 50 }] + +export const header: Th[][] = [[{ label: 'Kode' }, { label: 'Nama' }, { label: 'Encounter Class' }, { label: '' }]] + +export const keys = ['code', 'name', 'encounterClass_code', 'action'] + +export const delKeyNames: KeyLabel[] = [ + { key: 'code', label: 'Kode' }, + { key: 'name', label: 'Nama' }, +] + +export const funcParsed: RecStrFuncUnknown = { + name: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + return `${recX.name}`.trim() + }, +} + +export const funcComponent: RecStrFuncComponent = { + action(rec, idx) { + const res: RecComponent = { + idx, + rec: rec as object, + component: action, + props: { + size: 'sm', + }, + } + return res + }, +} + +export const funcHtml: RecStrFuncUnknown = { + patient_address(_rec) { + return '-' + }, +} \ No newline at end of file diff --git a/app/components/app/installation/list.vue b/app/components/app/installation/list.vue new file mode 100644 index 00000000..e1b056ce --- /dev/null +++ b/app/components/app/installation/list.vue @@ -0,0 +1,41 @@ + + + diff --git a/app/components/app/item-price/entry-form.vue b/app/components/app/item-price/entry-form.vue new file mode 100644 index 00000000..f2f55d76 --- /dev/null +++ b/app/components/app/item-price/entry-form.vue @@ -0,0 +1,50 @@ + + + diff --git a/app/components/app/item-price/list-cfg.ts b/app/components/app/item-price/list-cfg.ts new file mode 100644 index 00000000..c26856bf --- /dev/null +++ b/app/components/app/item-price/list-cfg.ts @@ -0,0 +1,46 @@ +import type { + Col, + KeyLabel, + RecComponent, + RecStrFuncComponent, + RecStrFuncUnknown, + Th, +} from '~/components/pub/my-ui/data/types' +import { defineAsyncComponent } from 'vue' + +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-dud.vue')) + +const _doctorStatus = { + 0: 'Tidak Aktif', + 1: 'Aktif', +} + +export const cols: Col[] = [{}, {}, { width: 50 }] + +export const header: Th[][] = [[{ label: 'Kode' }, { label: 'Nama' }, { label: 'Aksi' }]] + +export const keys = ['code', 'name', 'action'] + +export const delKeyNames: KeyLabel[] = [ + { key: 'code', label: 'Kode' }, + { key: 'name', label: 'Nama' }, +] + +export const funcParsed: RecStrFuncUnknown = {} + +export const funcComponent: RecStrFuncComponent = { + action(rec, idx) { + const res: RecComponent = { + idx, + rec: rec as object, + component: action, + } + return res + }, +} + +export const funcHtml: RecStrFuncUnknown = { + patient_address(_rec) { + return '-' + }, +} diff --git a/app/components/app/item-price/list.vue b/app/components/app/item-price/list.vue new file mode 100644 index 00000000..b9a74929 --- /dev/null +++ b/app/components/app/item-price/list.vue @@ -0,0 +1,19 @@ + + + diff --git a/app/components/app/item-price/picker.vue b/app/components/app/item-price/picker.vue new file mode 100644 index 00000000..e69de29b diff --git a/app/components/app/item-price/search.vue b/app/components/app/item-price/search.vue new file mode 100644 index 00000000..e69de29b diff --git a/app/components/app/item-price/status-badge.vue b/app/components/app/item-price/status-badge.vue new file mode 100644 index 00000000..32cdfbca --- /dev/null +++ b/app/components/app/item-price/status-badge.vue @@ -0,0 +1,29 @@ + + + diff --git a/app/components/app/item/entry-form.vue b/app/components/app/item/entry-form.vue new file mode 100644 index 00000000..7ddc930b --- /dev/null +++ b/app/components/app/item/entry-form.vue @@ -0,0 +1,68 @@ + + + diff --git a/app/components/app/item/list-cfg.ts b/app/components/app/item/list-cfg.ts new file mode 100644 index 00000000..c26856bf --- /dev/null +++ b/app/components/app/item/list-cfg.ts @@ -0,0 +1,46 @@ +import type { + Col, + KeyLabel, + RecComponent, + RecStrFuncComponent, + RecStrFuncUnknown, + Th, +} from '~/components/pub/my-ui/data/types' +import { defineAsyncComponent } from 'vue' + +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-dud.vue')) + +const _doctorStatus = { + 0: 'Tidak Aktif', + 1: 'Aktif', +} + +export const cols: Col[] = [{}, {}, { width: 50 }] + +export const header: Th[][] = [[{ label: 'Kode' }, { label: 'Nama' }, { label: 'Aksi' }]] + +export const keys = ['code', 'name', 'action'] + +export const delKeyNames: KeyLabel[] = [ + { key: 'code', label: 'Kode' }, + { key: 'name', label: 'Nama' }, +] + +export const funcParsed: RecStrFuncUnknown = {} + +export const funcComponent: RecStrFuncComponent = { + action(rec, idx) { + const res: RecComponent = { + idx, + rec: rec as object, + component: action, + } + return res + }, +} + +export const funcHtml: RecStrFuncUnknown = { + patient_address(_rec) { + return '-' + }, +} diff --git a/app/components/app/item/list.vue b/app/components/app/item/list.vue new file mode 100644 index 00000000..b9a74929 --- /dev/null +++ b/app/components/app/item/list.vue @@ -0,0 +1,19 @@ + + + diff --git a/app/components/app/item/picker.vue b/app/components/app/item/picker.vue new file mode 100644 index 00000000..e69de29b diff --git a/app/components/app/item/search.vue b/app/components/app/item/search.vue new file mode 100644 index 00000000..e69de29b diff --git a/app/components/app/item/status-badge.vue b/app/components/app/item/status-badge.vue new file mode 100644 index 00000000..32cdfbca --- /dev/null +++ b/app/components/app/item/status-badge.vue @@ -0,0 +1,29 @@ + + + diff --git a/app/components/app/laborant/entry-form.vue b/app/components/app/laborant/entry-form.vue new file mode 100644 index 00000000..c9d54963 --- /dev/null +++ b/app/components/app/laborant/entry-form.vue @@ -0,0 +1,31 @@ + + + diff --git a/app/components/app/laborant/list-cfg.ts b/app/components/app/laborant/list-cfg.ts new file mode 100644 index 00000000..14c9cf0d --- /dev/null +++ b/app/components/app/laborant/list-cfg.ts @@ -0,0 +1,114 @@ +import type { + Col, + KeyLabel, + RecComponent, + RecStrFuncComponent, + RecStrFuncUnknown, + Th, +} from '~/components/pub/my-ui/data/types' +import { defineAsyncComponent } from 'vue' + +type SmallDetailDto = any + +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-dud.vue')) +const statusBadge = defineAsyncComponent(() => import('./status-badge.vue')) + +const _doctorStatus = { + 0: 'Tidak Aktif', + 1: 'Aktif', +} + +export const cols: Col[] = [ + { width: 100 }, + { width: 250 }, + {}, + { width: 100 }, + { width: 100 }, + {}, + {}, + {}, + { width: 120 }, + { width: 100 }, + {}, + {}, +] + +export const header: Th[][] = [ + [ + { label: 'Kode JKN' }, + { label: 'Nama' }, + { label: 'No KTP' }, + { label: 'No SIP' }, + { label: 'No IHS' }, + { label: 'Telpon' }, + { label: 'Fee Ranap' }, + { label: 'Fee Rajal' }, + { label: 'Status' }, + { label: '' }, + ], +] + +export const keys = [ + 'bpjs_code', + 'name', + 'identity_number', + 'sip_no', + 'ihs_number', + 'phone', + 'inPatient_itemPrice', + 'outPatient_itemPrice', + 'status', + 'action', +] + +export const delKeyNames: KeyLabel[] = [ + { key: 'code', label: 'Kode' }, + { key: 'name', label: 'Nama' }, +] + +export const funcParsed: RecStrFuncUnknown = { + name: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + return `${recX.frontTitle} ${recX.name} ${recX.endTitle}`.trim() + }, + identity_number: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + if (recX.identity_number?.substring(0, 5) === 'BLANK') { + return '(TANPA NIK)' + } + return recX.identity_number + }, + inPatient_itemPrice: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + return Number(recX.inPatient_itemPrice.price).toLocaleString('id-ID') + }, + outPatient_itemPrice: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + return Number(recX.outPatient_itemPrice.price).toLocaleString('id-ID') + }, +} + +export const funcComponent: RecStrFuncComponent = { + action(rec, idx) { + const res: RecComponent = { + idx, + rec: rec as object, + component: action, + } + return res + }, + status(rec, idx) { + const res: RecComponent = { + idx, + rec: rec as object, + component: statusBadge, + } + return res + }, +} + +export const funcHtml: RecStrFuncUnknown = { + patient_address(_rec) { + return '-' + }, +} diff --git a/app/components/app/laborant/list.vue b/app/components/app/laborant/list.vue new file mode 100644 index 00000000..b9a74929 --- /dev/null +++ b/app/components/app/laborant/list.vue @@ -0,0 +1,19 @@ + + + diff --git a/app/components/app/laborant/picker.vue b/app/components/app/laborant/picker.vue new file mode 100644 index 00000000..e69de29b diff --git a/app/components/app/laborant/search.vue b/app/components/app/laborant/search.vue new file mode 100644 index 00000000..e69de29b diff --git a/app/components/app/laborant/status-badge.vue b/app/components/app/laborant/status-badge.vue new file mode 100644 index 00000000..32cdfbca --- /dev/null +++ b/app/components/app/laborant/status-badge.vue @@ -0,0 +1,29 @@ + + + diff --git a/app/components/app/medicine-group/entry-form.vue b/app/components/app/medicine-group/entry-form.vue new file mode 100644 index 00000000..38aaeb8f --- /dev/null +++ b/app/components/app/medicine-group/entry-form.vue @@ -0,0 +1,96 @@ + + + + diff --git a/app/components/app/medicine-group/list-cfg.ts b/app/components/app/medicine-group/list-cfg.ts new file mode 100644 index 00000000..b9f068e9 --- /dev/null +++ b/app/components/app/medicine-group/list-cfg.ts @@ -0,0 +1,37 @@ +import type { + Col, + KeyLabel, + RecComponent, + RecStrFuncComponent, + RecStrFuncUnknown, + Th, +} from '~/components/pub/my-ui/data/types' +import { defineAsyncComponent } from 'vue' + +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-dud.vue')) + +export const cols: Col[] = [{}, {}, { width: 50 }] + +export const header: Th[][] = [[{ label: 'Kode' }, { label: 'Nama' }, { label: 'Aksi' }]] + +export const keys = ['code', 'name', 'action'] + +export const delKeyNames: KeyLabel[] = [ + { key: 'code', label: 'Kode' }, + { key: 'name', label: 'Nama' }, +] + +export const funcParsed: RecStrFuncUnknown = {} + +export const funcComponent: RecStrFuncComponent = { + action(rec, idx) { + const res: RecComponent = { + idx, + rec: rec as object, + component: action, + } + return res + }, +} + +export const funcHtml: RecStrFuncUnknown = {} diff --git a/app/components/app/medicine-group/list.vue b/app/components/app/medicine-group/list.vue new file mode 100644 index 00000000..3af2b398 --- /dev/null +++ b/app/components/app/medicine-group/list.vue @@ -0,0 +1,40 @@ + + + diff --git a/app/components/app/medicine-method/entry-form.vue b/app/components/app/medicine-method/entry-form.vue new file mode 100644 index 00000000..cccfe1c4 --- /dev/null +++ b/app/components/app/medicine-method/entry-form.vue @@ -0,0 +1,96 @@ + + + + diff --git a/app/components/app/medicine-method/list-cfg.ts b/app/components/app/medicine-method/list-cfg.ts new file mode 100644 index 00000000..b9f068e9 --- /dev/null +++ b/app/components/app/medicine-method/list-cfg.ts @@ -0,0 +1,37 @@ +import type { + Col, + KeyLabel, + RecComponent, + RecStrFuncComponent, + RecStrFuncUnknown, + Th, +} from '~/components/pub/my-ui/data/types' +import { defineAsyncComponent } from 'vue' + +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-dud.vue')) + +export const cols: Col[] = [{}, {}, { width: 50 }] + +export const header: Th[][] = [[{ label: 'Kode' }, { label: 'Nama' }, { label: 'Aksi' }]] + +export const keys = ['code', 'name', 'action'] + +export const delKeyNames: KeyLabel[] = [ + { key: 'code', label: 'Kode' }, + { key: 'name', label: 'Nama' }, +] + +export const funcParsed: RecStrFuncUnknown = {} + +export const funcComponent: RecStrFuncComponent = { + action(rec, idx) { + const res: RecComponent = { + idx, + rec: rec as object, + component: action, + } + return res + }, +} + +export const funcHtml: RecStrFuncUnknown = {} diff --git a/app/components/app/medicine-method/list.vue b/app/components/app/medicine-method/list.vue new file mode 100644 index 00000000..3af2b398 --- /dev/null +++ b/app/components/app/medicine-method/list.vue @@ -0,0 +1,40 @@ + + + diff --git a/app/components/app/medicine/entry-form.vue b/app/components/app/medicine/entry-form.vue new file mode 100644 index 00000000..66ef4afb --- /dev/null +++ b/app/components/app/medicine/entry-form.vue @@ -0,0 +1,196 @@ + + + diff --git a/app/components/app/medicine/list-cfg.ts b/app/components/app/medicine/list-cfg.ts new file mode 100644 index 00000000..77993d55 --- /dev/null +++ b/app/components/app/medicine/list-cfg.ts @@ -0,0 +1,59 @@ +import type { + Col, + KeyLabel, + RecComponent, + RecStrFuncComponent, + RecStrFuncUnknown, + Th, +} from '~/components/pub/my-ui/data/types' +import { defineAsyncComponent } from 'vue' + +type SmallDetailDto = any + +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-dud.vue')) + +export const cols: Col[] = [{}, {}, {}, {}, {}, {}, { width: 50 }] + +export const header: Th[][] = [ + [ + { label: 'Kode' }, + { label: 'Name' }, + { label: 'Golongan' }, + { label: 'Metode Pemberian' }, + { label: "Satuan" }, + { label: 'Stok' }, + { label: 'Aksi' }, + ], +] + +export const keys = ['code', 'name', 'group', 'method', 'unit', 'stock', 'action'] + +export const delKeyNames: KeyLabel[] = [ + { key: 'code', label: 'Kode' }, + { key: 'name', label: 'Nama' }, +] + +export const funcParsed: RecStrFuncUnknown = { + group: (rec: unknown): unknown => { + return (rec as SmallDetailDto).medicineGroup?.name || '-' + }, + method: (rec: unknown): unknown => { + return (rec as SmallDetailDto).medicineMethod?.name || '-' + }, + unit: (rec: unknown): unknown => { + return (rec as SmallDetailDto).uom?.name || '-' + }, +} + +export const funcComponent: RecStrFuncComponent = { + action: (rec: unknown, idx: number): RecComponent => { + const res: RecComponent = { + idx, + rec: rec as object, + component: action, + } + return res + }, +} + +export const funcHtml: RecStrFuncUnknown = {} diff --git a/app/components/app/medicine/list.vue b/app/components/app/medicine/list.vue new file mode 100644 index 00000000..3af2b398 --- /dev/null +++ b/app/components/app/medicine/list.vue @@ -0,0 +1,40 @@ + + + diff --git a/app/components/app/medicine/picker.vue b/app/components/app/medicine/picker.vue new file mode 100644 index 00000000..e69de29b diff --git a/app/components/app/medicine/search.vue b/app/components/app/medicine/search.vue new file mode 100644 index 00000000..e69de29b diff --git a/app/components/app/medicine/status-badge.vue b/app/components/app/medicine/status-badge.vue new file mode 100644 index 00000000..32cdfbca --- /dev/null +++ b/app/components/app/medicine/status-badge.vue @@ -0,0 +1,29 @@ + + + diff --git a/app/components/app/nurse/entry-form.vue b/app/components/app/nurse/entry-form.vue new file mode 100644 index 00000000..c9d54963 --- /dev/null +++ b/app/components/app/nurse/entry-form.vue @@ -0,0 +1,31 @@ + + + diff --git a/app/components/app/nurse/list-cfg.ts b/app/components/app/nurse/list-cfg.ts new file mode 100644 index 00000000..14c9cf0d --- /dev/null +++ b/app/components/app/nurse/list-cfg.ts @@ -0,0 +1,114 @@ +import type { + Col, + KeyLabel, + RecComponent, + RecStrFuncComponent, + RecStrFuncUnknown, + Th, +} from '~/components/pub/my-ui/data/types' +import { defineAsyncComponent } from 'vue' + +type SmallDetailDto = any + +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-dud.vue')) +const statusBadge = defineAsyncComponent(() => import('./status-badge.vue')) + +const _doctorStatus = { + 0: 'Tidak Aktif', + 1: 'Aktif', +} + +export const cols: Col[] = [ + { width: 100 }, + { width: 250 }, + {}, + { width: 100 }, + { width: 100 }, + {}, + {}, + {}, + { width: 120 }, + { width: 100 }, + {}, + {}, +] + +export const header: Th[][] = [ + [ + { label: 'Kode JKN' }, + { label: 'Nama' }, + { label: 'No KTP' }, + { label: 'No SIP' }, + { label: 'No IHS' }, + { label: 'Telpon' }, + { label: 'Fee Ranap' }, + { label: 'Fee Rajal' }, + { label: 'Status' }, + { label: '' }, + ], +] + +export const keys = [ + 'bpjs_code', + 'name', + 'identity_number', + 'sip_no', + 'ihs_number', + 'phone', + 'inPatient_itemPrice', + 'outPatient_itemPrice', + 'status', + 'action', +] + +export const delKeyNames: KeyLabel[] = [ + { key: 'code', label: 'Kode' }, + { key: 'name', label: 'Nama' }, +] + +export const funcParsed: RecStrFuncUnknown = { + name: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + return `${recX.frontTitle} ${recX.name} ${recX.endTitle}`.trim() + }, + identity_number: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + if (recX.identity_number?.substring(0, 5) === 'BLANK') { + return '(TANPA NIK)' + } + return recX.identity_number + }, + inPatient_itemPrice: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + return Number(recX.inPatient_itemPrice.price).toLocaleString('id-ID') + }, + outPatient_itemPrice: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + return Number(recX.outPatient_itemPrice.price).toLocaleString('id-ID') + }, +} + +export const funcComponent: RecStrFuncComponent = { + action(rec, idx) { + const res: RecComponent = { + idx, + rec: rec as object, + component: action, + } + return res + }, + status(rec, idx) { + const res: RecComponent = { + idx, + rec: rec as object, + component: statusBadge, + } + return res + }, +} + +export const funcHtml: RecStrFuncUnknown = { + patient_address(_rec) { + return '-' + }, +} diff --git a/app/components/app/nurse/list.vue b/app/components/app/nurse/list.vue new file mode 100644 index 00000000..b9a74929 --- /dev/null +++ b/app/components/app/nurse/list.vue @@ -0,0 +1,19 @@ + + + diff --git a/app/components/app/nurse/picker.vue b/app/components/app/nurse/picker.vue new file mode 100644 index 00000000..e69de29b diff --git a/app/components/app/nurse/search.vue b/app/components/app/nurse/search.vue new file mode 100644 index 00000000..e69de29b diff --git a/app/components/app/nurse/status-badge.vue b/app/components/app/nurse/status-badge.vue new file mode 100644 index 00000000..32cdfbca --- /dev/null +++ b/app/components/app/nurse/status-badge.vue @@ -0,0 +1,29 @@ + + + diff --git a/app/components/app/nutritionist/entry-form.vue b/app/components/app/nutritionist/entry-form.vue new file mode 100644 index 00000000..c9d54963 --- /dev/null +++ b/app/components/app/nutritionist/entry-form.vue @@ -0,0 +1,31 @@ + + + diff --git a/app/components/app/nutritionist/list-cfg.ts b/app/components/app/nutritionist/list-cfg.ts new file mode 100644 index 00000000..14c9cf0d --- /dev/null +++ b/app/components/app/nutritionist/list-cfg.ts @@ -0,0 +1,114 @@ +import type { + Col, + KeyLabel, + RecComponent, + RecStrFuncComponent, + RecStrFuncUnknown, + Th, +} from '~/components/pub/my-ui/data/types' +import { defineAsyncComponent } from 'vue' + +type SmallDetailDto = any + +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-dud.vue')) +const statusBadge = defineAsyncComponent(() => import('./status-badge.vue')) + +const _doctorStatus = { + 0: 'Tidak Aktif', + 1: 'Aktif', +} + +export const cols: Col[] = [ + { width: 100 }, + { width: 250 }, + {}, + { width: 100 }, + { width: 100 }, + {}, + {}, + {}, + { width: 120 }, + { width: 100 }, + {}, + {}, +] + +export const header: Th[][] = [ + [ + { label: 'Kode JKN' }, + { label: 'Nama' }, + { label: 'No KTP' }, + { label: 'No SIP' }, + { label: 'No IHS' }, + { label: 'Telpon' }, + { label: 'Fee Ranap' }, + { label: 'Fee Rajal' }, + { label: 'Status' }, + { label: '' }, + ], +] + +export const keys = [ + 'bpjs_code', + 'name', + 'identity_number', + 'sip_no', + 'ihs_number', + 'phone', + 'inPatient_itemPrice', + 'outPatient_itemPrice', + 'status', + 'action', +] + +export const delKeyNames: KeyLabel[] = [ + { key: 'code', label: 'Kode' }, + { key: 'name', label: 'Nama' }, +] + +export const funcParsed: RecStrFuncUnknown = { + name: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + return `${recX.frontTitle} ${recX.name} ${recX.endTitle}`.trim() + }, + identity_number: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + if (recX.identity_number?.substring(0, 5) === 'BLANK') { + return '(TANPA NIK)' + } + return recX.identity_number + }, + inPatient_itemPrice: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + return Number(recX.inPatient_itemPrice.price).toLocaleString('id-ID') + }, + outPatient_itemPrice: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + return Number(recX.outPatient_itemPrice.price).toLocaleString('id-ID') + }, +} + +export const funcComponent: RecStrFuncComponent = { + action(rec, idx) { + const res: RecComponent = { + idx, + rec: rec as object, + component: action, + } + return res + }, + status(rec, idx) { + const res: RecComponent = { + idx, + rec: rec as object, + component: statusBadge, + } + return res + }, +} + +export const funcHtml: RecStrFuncUnknown = { + patient_address(_rec) { + return '-' + }, +} diff --git a/app/components/app/nutritionist/list.vue b/app/components/app/nutritionist/list.vue new file mode 100644 index 00000000..b9a74929 --- /dev/null +++ b/app/components/app/nutritionist/list.vue @@ -0,0 +1,19 @@ + + + diff --git a/app/components/app/nutritionist/picker.vue b/app/components/app/nutritionist/picker.vue new file mode 100644 index 00000000..e69de29b diff --git a/app/components/app/nutritionist/search.vue b/app/components/app/nutritionist/search.vue new file mode 100644 index 00000000..e69de29b diff --git a/app/components/app/nutritionist/status-badge.vue b/app/components/app/nutritionist/status-badge.vue new file mode 100644 index 00000000..32cdfbca --- /dev/null +++ b/app/components/app/nutritionist/status-badge.vue @@ -0,0 +1,29 @@ + + + diff --git a/app/components/app/patient/_common/input-file.vue b/app/components/app/patient/_common/input-file.vue new file mode 100644 index 00000000..38ad6cea --- /dev/null +++ b/app/components/app/patient/_common/input-file.vue @@ -0,0 +1,58 @@ + + + diff --git a/app/components/app/patient/_common/input-patient-name.vue b/app/components/app/patient/_common/input-patient-name.vue new file mode 100644 index 00000000..fbc57351 --- /dev/null +++ b/app/components/app/patient/_common/input-patient-name.vue @@ -0,0 +1,102 @@ + + + diff --git a/app/components/app/patient/_common/radio-communication-barrier.vue b/app/components/app/patient/_common/radio-communication-barrier.vue new file mode 100644 index 00000000..463b3659 --- /dev/null +++ b/app/components/app/patient/_common/radio-communication-barrier.vue @@ -0,0 +1,94 @@ + + + diff --git a/app/components/app/patient/_common/radio-disability.vue b/app/components/app/patient/_common/radio-disability.vue new file mode 100644 index 00000000..312c3730 --- /dev/null +++ b/app/components/app/patient/_common/radio-disability.vue @@ -0,0 +1,94 @@ + + + diff --git a/app/components/app/patient/_common/radio-gender.vue b/app/components/app/patient/_common/radio-gender.vue new file mode 100644 index 00000000..108b1d22 --- /dev/null +++ b/app/components/app/patient/_common/radio-gender.vue @@ -0,0 +1,92 @@ + + + diff --git a/app/components/app/patient/_common/radio-nationality.vue b/app/components/app/patient/_common/radio-nationality.vue new file mode 100644 index 00000000..9c0eef1d --- /dev/null +++ b/app/components/app/patient/_common/radio-nationality.vue @@ -0,0 +1,94 @@ + + + diff --git a/app/components/app/patient/_common/select-disability.vue b/app/components/app/patient/_common/select-disability.vue new file mode 100644 index 00000000..de65a07f --- /dev/null +++ b/app/components/app/patient/_common/select-disability.vue @@ -0,0 +1,81 @@ + + + diff --git a/app/components/app/patient/_common/select-dob.vue b/app/components/app/patient/_common/select-dob.vue new file mode 100644 index 00000000..938bd254 --- /dev/null +++ b/app/components/app/patient/_common/select-dob.vue @@ -0,0 +1,142 @@ + + + diff --git a/app/components/app/patient/_common/select-education.vue b/app/components/app/patient/_common/select-education.vue new file mode 100644 index 00000000..33caac16 --- /dev/null +++ b/app/components/app/patient/_common/select-education.vue @@ -0,0 +1,88 @@ + + + diff --git a/app/components/app/patient/_common/select-ethnicity.vue b/app/components/app/patient/_common/select-ethnicity.vue new file mode 100644 index 00000000..a4231571 --- /dev/null +++ b/app/components/app/patient/_common/select-ethnicity.vue @@ -0,0 +1,86 @@ + + + diff --git a/app/components/app/patient/_common/select-job.vue b/app/components/app/patient/_common/select-job.vue new file mode 100644 index 00000000..b9804bb5 --- /dev/null +++ b/app/components/app/patient/_common/select-job.vue @@ -0,0 +1,155 @@ + + + diff --git a/app/components/app/patient/_common/select-lang.vue b/app/components/app/patient/_common/select-lang.vue new file mode 100644 index 00000000..aadf9313 --- /dev/null +++ b/app/components/app/patient/_common/select-lang.vue @@ -0,0 +1,82 @@ + + + diff --git a/app/components/app/patient/_common/select-marital-status.vue b/app/components/app/patient/_common/select-marital-status.vue new file mode 100644 index 00000000..cb3b56fb --- /dev/null +++ b/app/components/app/patient/_common/select-marital-status.vue @@ -0,0 +1,78 @@ + + + diff --git a/app/components/app/patient/_common/select-religion.vue b/app/components/app/patient/_common/select-religion.vue new file mode 100644 index 00000000..069e3575 --- /dev/null +++ b/app/components/app/patient/_common/select-religion.vue @@ -0,0 +1,86 @@ + + + diff --git a/app/components/app/patient/entry-form.vue b/app/components/app/patient/entry-form.vue new file mode 100644 index 00000000..e3587988 --- /dev/null +++ b/app/components/app/patient/entry-form.vue @@ -0,0 +1,225 @@ + + + diff --git a/app/components/app/patient/list-cfg.ts b/app/components/app/patient/list-cfg.ts new file mode 100644 index 00000000..4fbdf694 --- /dev/null +++ b/app/components/app/patient/list-cfg.ts @@ -0,0 +1,100 @@ +import type { + Col, + KeyLabel, + RecComponent, + RecStrFuncComponent, + RecStrFuncUnknown, + Th, +} from '~/components/pub/my-ui/data/types' +import type { PatientEntity } 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 cols: Col[] = [{}, {}, {}, {}, {}, {}, {}, { width: 5 }] + +export const header: Th[][] = [ + [ + { label: 'Nama' }, + { label: 'NIK' }, + { label: 'Tgl Lahir' }, + { label: 'Umur' }, + { label: 'Jenis Kelamin' }, + { label: 'Pendidikan' }, + { label: '' }, + ], +] + +export const keys = ['name', 'identity_number', 'birth_date', 'patient_age', 'gender', 'education', 'action'] + +export const delKeyNames: KeyLabel[] = [ + { key: 'code', label: 'Kode' }, + { key: 'name', label: 'Nama' }, +] + +export const funcParsed: RecStrFuncUnknown = { + name: (rec: unknown): unknown => { + const { person } = rec as PatientEntity + return person.name.trim() + }, + identity_number: (rec: unknown): unknown => { + const { person } = rec as PatientEntity + + if (person?.residentIdentityNumber?.substring(0, 5) === 'BLANK') { + return '(TANPA NIK)' + } + return person.residentIdentityNumber + }, + birth_date: (rec: unknown): unknown => { + const { person } = rec as PatientEntity + + if (typeof person.birthDate == 'object' && person.birthDate) { + return (person.birthDate as Date).toLocaleDateString() + } 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 PatientEntity + return calculateAge(person.birthDate) + }, + gender: (rec: unknown): unknown => { + const { person } = rec as PatientEntity + + 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 PatientEntity + 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 '-' + }, +} + +export const funcComponent: RecStrFuncComponent = { + action(rec, idx) { + const res: RecComponent = { + idx, + rec: rec as object, + component: action, + } + return res + }, +} + +export const funcHtml: RecStrFuncUnknown = { + patient_address(_rec) { + return '-' + }, +} diff --git a/app/components/app/patient/list.vue b/app/components/app/patient/list.vue new file mode 100644 index 00000000..53558b2b --- /dev/null +++ b/app/components/app/patient/list.vue @@ -0,0 +1,36 @@ + + + diff --git a/app/components/app/patient/picker.vue b/app/components/app/patient/picker.vue new file mode 100644 index 00000000..5789ef6b --- /dev/null +++ b/app/components/app/patient/picker.vue @@ -0,0 +1,20 @@ + + + diff --git a/app/components/app/patient/preview.vue b/app/components/app/patient/preview.vue new file mode 100644 index 00000000..ec3d8b6d --- /dev/null +++ b/app/components/app/patient/preview.vue @@ -0,0 +1,153 @@ + + + + + diff --git a/app/components/app/patient/search.vue b/app/components/app/patient/search.vue new file mode 100644 index 00000000..e69de29b diff --git a/app/components/app/patient/status-badge.vue b/app/components/app/patient/status-badge.vue new file mode 100644 index 00000000..32cdfbca --- /dev/null +++ b/app/components/app/patient/status-badge.vue @@ -0,0 +1,29 @@ + + + diff --git a/app/components/app/person-address/_common/radio-residence.vue b/app/components/app/person-address/_common/radio-residence.vue new file mode 100644 index 00000000..f6e429a8 --- /dev/null +++ b/app/components/app/person-address/_common/radio-residence.vue @@ -0,0 +1,95 @@ + + + diff --git a/app/components/app/person-address/_common/select-district.vue b/app/components/app/person-address/_common/select-district.vue new file mode 100644 index 00000000..97b50e4e --- /dev/null +++ b/app/components/app/person-address/_common/select-district.vue @@ -0,0 +1,63 @@ + + + diff --git a/app/components/app/person-address/_common/select-postal.vue b/app/components/app/person-address/_common/select-postal.vue new file mode 100644 index 00000000..84df7b33 --- /dev/null +++ b/app/components/app/person-address/_common/select-postal.vue @@ -0,0 +1,76 @@ + + + diff --git a/app/components/app/person-address/_common/select-province.vue b/app/components/app/person-address/_common/select-province.vue new file mode 100644 index 00000000..bf984154 --- /dev/null +++ b/app/components/app/person-address/_common/select-province.vue @@ -0,0 +1,69 @@ + + + diff --git a/app/components/app/person-address/_common/select-regency.vue b/app/components/app/person-address/_common/select-regency.vue new file mode 100644 index 00000000..bb2202d3 --- /dev/null +++ b/app/components/app/person-address/_common/select-regency.vue @@ -0,0 +1,65 @@ + + + diff --git a/app/components/app/person-address/_common/select-village.vue b/app/components/app/person-address/_common/select-village.vue new file mode 100644 index 00000000..561fa9b6 --- /dev/null +++ b/app/components/app/person-address/_common/select-village.vue @@ -0,0 +1,64 @@ + + + diff --git a/app/components/app/person-address/entry-form-relative.vue b/app/components/app/person-address/entry-form-relative.vue new file mode 100644 index 00000000..1c8c91a7 --- /dev/null +++ b/app/components/app/person-address/entry-form-relative.vue @@ -0,0 +1,369 @@ + + + diff --git a/app/components/app/person-address/entry-form.vue b/app/components/app/person-address/entry-form.vue new file mode 100644 index 00000000..a26381d8 --- /dev/null +++ b/app/components/app/person-address/entry-form.vue @@ -0,0 +1,268 @@ + + + diff --git a/app/components/app/person-contact/_common/select-contact-type.vue b/app/components/app/person-contact/_common/select-contact-type.vue new file mode 100644 index 00000000..d6f8fe24 --- /dev/null +++ b/app/components/app/person-contact/_common/select-contact-type.vue @@ -0,0 +1,71 @@ + + + diff --git a/app/components/app/person-contact/entry-form.vue b/app/components/app/person-contact/entry-form.vue new file mode 100644 index 00000000..5fa451b4 --- /dev/null +++ b/app/components/app/person-contact/entry-form.vue @@ -0,0 +1,110 @@ + + + diff --git a/app/components/app/person-relative/_common/select-relations.vue b/app/components/app/person-relative/_common/select-relations.vue new file mode 100644 index 00000000..179976bf --- /dev/null +++ b/app/components/app/person-relative/_common/select-relations.vue @@ -0,0 +1,65 @@ + + + diff --git a/app/components/app/person-relative/_common/table-head.vue b/app/components/app/person-relative/_common/table-head.vue new file mode 100644 index 00000000..1994147e --- /dev/null +++ b/app/components/app/person-relative/_common/table-head.vue @@ -0,0 +1,22 @@ + + + diff --git a/app/components/app/person-relative/entry-form.vue b/app/components/app/person-relative/entry-form.vue new file mode 100644 index 00000000..411fab37 --- /dev/null +++ b/app/components/app/person-relative/entry-form.vue @@ -0,0 +1,155 @@ + + + diff --git a/app/components/app/person/_common/radio-parents-input.vue b/app/components/app/person/_common/radio-parents-input.vue new file mode 100644 index 00000000..bd8b6f15 --- /dev/null +++ b/app/components/app/person/_common/radio-parents-input.vue @@ -0,0 +1,94 @@ + + + diff --git a/app/components/app/person/entry-form.vue b/app/components/app/person/entry-form.vue new file mode 100644 index 00000000..a9a9c6cf --- /dev/null +++ b/app/components/app/person/entry-form.vue @@ -0,0 +1,476 @@ + + + diff --git a/app/components/app/person/family-parents-form.vue b/app/components/app/person/family-parents-form.vue new file mode 100644 index 00000000..e5ac4a46 --- /dev/null +++ b/app/components/app/person/family-parents-form.vue @@ -0,0 +1,167 @@ + + + diff --git a/app/components/app/pharmacist/entry-form.vue b/app/components/app/pharmacist/entry-form.vue new file mode 100644 index 00000000..4d7fde87 --- /dev/null +++ b/app/components/app/pharmacist/entry-form.vue @@ -0,0 +1,31 @@ + + + diff --git a/app/components/app/pharmacist/list-cfg.ts b/app/components/app/pharmacist/list-cfg.ts new file mode 100644 index 00000000..14c9cf0d --- /dev/null +++ b/app/components/app/pharmacist/list-cfg.ts @@ -0,0 +1,114 @@ +import type { + Col, + KeyLabel, + RecComponent, + RecStrFuncComponent, + RecStrFuncUnknown, + Th, +} from '~/components/pub/my-ui/data/types' +import { defineAsyncComponent } from 'vue' + +type SmallDetailDto = any + +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-dud.vue')) +const statusBadge = defineAsyncComponent(() => import('./status-badge.vue')) + +const _doctorStatus = { + 0: 'Tidak Aktif', + 1: 'Aktif', +} + +export const cols: Col[] = [ + { width: 100 }, + { width: 250 }, + {}, + { width: 100 }, + { width: 100 }, + {}, + {}, + {}, + { width: 120 }, + { width: 100 }, + {}, + {}, +] + +export const header: Th[][] = [ + [ + { label: 'Kode JKN' }, + { label: 'Nama' }, + { label: 'No KTP' }, + { label: 'No SIP' }, + { label: 'No IHS' }, + { label: 'Telpon' }, + { label: 'Fee Ranap' }, + { label: 'Fee Rajal' }, + { label: 'Status' }, + { label: '' }, + ], +] + +export const keys = [ + 'bpjs_code', + 'name', + 'identity_number', + 'sip_no', + 'ihs_number', + 'phone', + 'inPatient_itemPrice', + 'outPatient_itemPrice', + 'status', + 'action', +] + +export const delKeyNames: KeyLabel[] = [ + { key: 'code', label: 'Kode' }, + { key: 'name', label: 'Nama' }, +] + +export const funcParsed: RecStrFuncUnknown = { + name: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + return `${recX.frontTitle} ${recX.name} ${recX.endTitle}`.trim() + }, + identity_number: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + if (recX.identity_number?.substring(0, 5) === 'BLANK') { + return '(TANPA NIK)' + } + return recX.identity_number + }, + inPatient_itemPrice: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + return Number(recX.inPatient_itemPrice.price).toLocaleString('id-ID') + }, + outPatient_itemPrice: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + return Number(recX.outPatient_itemPrice.price).toLocaleString('id-ID') + }, +} + +export const funcComponent: RecStrFuncComponent = { + action(rec, idx) { + const res: RecComponent = { + idx, + rec: rec as object, + component: action, + } + return res + }, + status(rec, idx) { + const res: RecComponent = { + idx, + rec: rec as object, + component: statusBadge, + } + return res + }, +} + +export const funcHtml: RecStrFuncUnknown = { + patient_address(_rec) { + return '-' + }, +} diff --git a/app/components/app/pharmacist/list.vue b/app/components/app/pharmacist/list.vue new file mode 100644 index 00000000..b9a74929 --- /dev/null +++ b/app/components/app/pharmacist/list.vue @@ -0,0 +1,19 @@ + + + diff --git a/app/components/app/pharmacist/picker.vue b/app/components/app/pharmacist/picker.vue new file mode 100644 index 00000000..e69de29b diff --git a/app/components/app/pharmacist/search.vue b/app/components/app/pharmacist/search.vue new file mode 100644 index 00000000..e69de29b diff --git a/app/components/app/pharmacist/status-badge.vue b/app/components/app/pharmacist/status-badge.vue new file mode 100644 index 00000000..32cdfbca --- /dev/null +++ b/app/components/app/pharmacist/status-badge.vue @@ -0,0 +1,29 @@ + + + diff --git a/app/components/app/prescription-item/list-entry.ts b/app/components/app/prescription-item/list-entry.ts new file mode 100644 index 00000000..c257b46a --- /dev/null +++ b/app/components/app/prescription-item/list-entry.ts @@ -0,0 +1,66 @@ +import type { + Col, + KeyLabel, + RecComponent, + RecStrFuncComponent, + RecStrFuncUnknown, + Th, +} from '~/components/pub/my-ui/data/types' +import { defineAsyncComponent } from 'vue' + +type SmallDetailDto = any + +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-dud.vue')) + +export const cols: Col[] = [{}, {}, {}, {}, {}, {}, { width: 50 }] + +export const header: Th[][] = [ + [ + { label: 'Nama' }, + { label: 'Bentuk' }, + { label: 'Freq' }, + { label: 'Dosis' }, + { label: 'Interval' }, + { label: 'Total' }, + { label: '' }, + ], +] + +export const keys = ['name', 'uom_code', 'frequency', 'multiplier', 'interval', 'total', 'action'] + +export const delKeyNames: KeyLabel[] = [ + { key: 'code', label: 'Kode' }, + { key: 'name', label: 'Nama' }, +] + +export const funcParsed: RecStrFuncUnknown = { + cateogry: (rec: unknown): unknown => { + return (rec as SmallDetailDto).medicineCategory?.name || '-' + }, + group: (rec: unknown): unknown => { + return (rec as SmallDetailDto).medicineGroup?.name || '-' + }, + method: (rec: unknown): unknown => { + return (rec as SmallDetailDto).medicineMethod?.name || '-' + }, + unit: (rec: unknown): unknown => { + return (rec as SmallDetailDto).medicineUnit?.name || '-' + }, +} + +export const funcComponent: RecStrFuncComponent = { + action: (rec: unknown, idx: number): RecComponent => { + const res: RecComponent = { + idx, + rec: rec as object, + component: action, + } + return res + }, +} + +export const funcHtml: RecStrFuncUnknown = { + // (_rec) { + // return '-' + // }, +} diff --git a/app/components/app/prescription-item/list-entry.vue b/app/components/app/prescription-item/list-entry.vue new file mode 100644 index 00000000..e5feecba --- /dev/null +++ b/app/components/app/prescription-item/list-entry.vue @@ -0,0 +1,19 @@ + + + diff --git a/app/components/app/prescription/entry.vue b/app/components/app/prescription/entry.vue new file mode 100644 index 00000000..3b4acf28 --- /dev/null +++ b/app/components/app/prescription/entry.vue @@ -0,0 +1,32 @@ + diff --git a/app/components/app/prescription/list.vue b/app/components/app/prescription/list.vue new file mode 100644 index 00000000..6fe27d39 --- /dev/null +++ b/app/components/app/prescription/list.vue @@ -0,0 +1,42 @@ + diff --git a/app/components/app/rehab/registration/sep-prosedur/entry-form.vue b/app/components/app/rehab/registration/sep-prosedur/entry-form.vue new file mode 100644 index 00000000..5768c6a0 --- /dev/null +++ b/app/components/app/rehab/registration/sep-prosedur/entry-form.vue @@ -0,0 +1,47 @@ + + + diff --git a/app/components/app/rehab/registration/sep-prosedur/list-cfg.ts b/app/components/app/rehab/registration/sep-prosedur/list-cfg.ts new file mode 100644 index 00000000..754d2dfb --- /dev/null +++ b/app/components/app/rehab/registration/sep-prosedur/list-cfg.ts @@ -0,0 +1,112 @@ +import type { Col, KeyLabel, RecComponent, RecStrFuncComponent, RecStrFuncUnknown, Th } from '~/components/pub/my-ui/data/types' +import { defineAsyncComponent } from 'vue' + +type SmallDetailDto = any + +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-dud.vue')) + +export const cols: Col[] = [ + {}, + {}, + {}, + { width: 100 }, + { width: 120 }, + {}, + {}, + {}, + { width: 100 }, + { width: 100 }, + {}, + { width: 50 }, +] + +export const header: Th[][] = [ + [ + { label: 'Nama' }, + { label: 'Rekam Medis' }, + { label: 'KTP' }, + { label: 'Tgl Lahir' }, + { label: 'Umur' }, + { label: 'JK' }, + { label: 'Pendidikan' }, + { label: 'Status' }, + { label: '' }, + ], +] + +export const keys = [ + 'name', + 'medicalRecord_number', + 'identity_number', + 'birth_date', + 'patient_age', + 'gender', + 'education', + 'status', + 'action', +] + +export const delKeyNames: KeyLabel[] = [ + { key: 'code', label: 'Kode' }, + { key: 'name', label: 'Nama' }, +] + +export const funcParsed: RecStrFuncUnknown = { + name: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + return `${recX.firstName} ${recX.middleName || ''} ${recX.lastName || ''}` + }, + identity_number: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + if (recX.identity_number?.substring(0, 5) === 'BLANK') { + return '(TANPA NIK)' + } + return recX.identity_number + }, + birth_date: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + if (typeof recX.birth_date == 'object' && recX.birth_date) { + return (recX.birth_date as Date).toLocaleDateString() + } else if (typeof recX.birth_date == 'string') { + return (recX.birth_date as string).substring(0, 10) + } + return recX.birth_date + }, + patient_age: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + return recX.birth_date?.split('T')[0] + }, + gender: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + if (typeof recX?.gender_code !== 'number' && recX?.gender_code !== '') { + return 'Tidak Diketahui' + } + return recX.gender_code + }, + education: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + if (typeof recX.education_code == 'number' && recX.education_code >= 0) { + return recX.education_code + } else if (typeof recX.education_code) { + return recX.education_code + } + return '-' + }, +} + +export const funcComponent: RecStrFuncComponent = { + action(rec, idx) { + const res: RecComponent = { + idx, + rec: rec as object, + component: action, + } + return res + }, +} + +export const funcHtml: RecStrFuncUnknown = { + patient_address(_rec) { + return '-' + }, +} diff --git a/app/components/app/rehab/registration/sep-prosedur/list.vue b/app/components/app/rehab/registration/sep-prosedur/list.vue new file mode 100644 index 00000000..b9a74929 --- /dev/null +++ b/app/components/app/rehab/registration/sep-prosedur/list.vue @@ -0,0 +1,19 @@ + + + diff --git a/app/components/app/rehab/registration/sep-prosedur/picker.vue b/app/components/app/rehab/registration/sep-prosedur/picker.vue new file mode 100644 index 00000000..e69de29b diff --git a/app/components/app/rehab/registration/sep-prosedur/search.vue b/app/components/app/rehab/registration/sep-prosedur/search.vue new file mode 100644 index 00000000..e69de29b diff --git a/app/components/app/room/entry-form.vue b/app/components/app/room/entry-form.vue new file mode 100644 index 00000000..6f4e7708 --- /dev/null +++ b/app/components/app/room/entry-form.vue @@ -0,0 +1,195 @@ + + + diff --git a/app/components/app/room/list-cfg.ts b/app/components/app/room/list-cfg.ts new file mode 100644 index 00000000..98e7eb50 --- /dev/null +++ b/app/components/app/room/list-cfg.ts @@ -0,0 +1,61 @@ +import type { + Col, + KeyLabel, + RecComponent, + RecStrFuncComponent, + RecStrFuncUnknown, + Th, +} from '~/components/pub/my-ui/data/types' +import { defineAsyncComponent } from 'vue' + +type SmallDetailDto = any + +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-dud.vue')) + +export const cols: Col[] = [{}, {}, {}, {}, {}, { width: 50 }] + +export const header: Th[][] = [ + [ + { label: 'Kode' }, + { label: 'Nama' }, + { label: 'Spesialis' }, + { label: 'Sub Spesialis' }, + { label: 'Unit' }, + { label: '' }, + ], +] + +export const keys = ['code', 'name', 'specialist', 'subspecialist', 'unit', 'action'] + +export const delKeyNames: KeyLabel[] = [ + { key: 'code', label: 'Kode' }, + { key: 'name', label: 'Nama' }, +] + +export const funcParsed: RecStrFuncUnknown = { + specialist: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + return recX.specialist?.name || '-' + }, + subspecialist: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + return recX.subspecialist?.name || '-' + }, + unit: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + return recX.unit?.name || '-' + }, +} + +export const funcComponent: RecStrFuncComponent = { + action(rec, idx) { + const res: RecComponent = { + idx, + rec: rec as object, + component: action, + } + return res + }, +} + +export const funcHtml: RecStrFuncUnknown = {} diff --git a/app/components/app/room/list.vue b/app/components/app/room/list.vue new file mode 100644 index 00000000..e1b056ce --- /dev/null +++ b/app/components/app/room/list.vue @@ -0,0 +1,41 @@ + + + diff --git a/app/components/app/satusehat/badge-patient.vue b/app/components/app/satusehat/badge-patient.vue new file mode 100644 index 00000000..41202aaf --- /dev/null +++ b/app/components/app/satusehat/badge-patient.vue @@ -0,0 +1,13 @@ + + + diff --git a/app/components/app/satusehat/badge-status.vue b/app/components/app/satusehat/badge-status.vue new file mode 100644 index 00000000..5ff492f0 --- /dev/null +++ b/app/components/app/satusehat/badge-status.vue @@ -0,0 +1,29 @@ + + + diff --git a/app/components/app/satusehat/badge.vue b/app/components/app/satusehat/badge.vue new file mode 100644 index 00000000..197cb084 --- /dev/null +++ b/app/components/app/satusehat/badge.vue @@ -0,0 +1,36 @@ + + + diff --git a/app/components/app/satusehat/button-action.vue b/app/components/app/satusehat/button-action.vue new file mode 100644 index 00000000..f8ee85ec --- /dev/null +++ b/app/components/app/satusehat/button-action.vue @@ -0,0 +1,16 @@ + + + diff --git a/app/components/app/satusehat/card-summary.vue b/app/components/app/satusehat/card-summary.vue new file mode 100644 index 00000000..531e24d2 --- /dev/null +++ b/app/components/app/satusehat/card-summary.vue @@ -0,0 +1,19 @@ + + + diff --git a/app/components/app/satusehat/entry-form.vue b/app/components/app/satusehat/entry-form.vue new file mode 100644 index 00000000..5768c6a0 --- /dev/null +++ b/app/components/app/satusehat/entry-form.vue @@ -0,0 +1,47 @@ + + + diff --git a/app/components/app/satusehat/list-cfg.ts b/app/components/app/satusehat/list-cfg.ts new file mode 100644 index 00000000..d287a38b --- /dev/null +++ b/app/components/app/satusehat/list-cfg.ts @@ -0,0 +1,78 @@ +import type { Col, KeyLabel, RecComponent, RecStrFuncComponent, RecStrFuncUnknown, Th } from '../../pub/nav/types' +import { defineAsyncComponent } from 'vue' + +type SmallDetailDto = any + +export const rowType = { + 1: 'Patient', + 2: 'Encounter', + 3: 'Observation', +} + +export const rowStatus = { + 0: 'Gagal', + 1: 'Pending', + 2: 'Terkirim', +} + +const patientBadge = defineAsyncComponent(() => import('./badge-patient.vue')) +const statusBadge = defineAsyncComponent(() => import('./badge-status.vue')) + +export const cols: Col[] = [ + { width: 100 }, + { width: 100 }, + { width: 100 }, + { width: 100 }, + { width: 100 }, + { width: 100 }, +] + +export const header: Th[][] = [ + [ + { label: 'ID' }, + { label: 'Jenis' }, + { label: 'Pasien' }, + { label: 'Status' }, + { label: 'Terakhir Update' }, + { label: 'FHIR ID' }, + ], +] + +export const keys = ['id', 'resource_type', 'patient', 'status', 'updated_at', 'fhir_id'] + +export const delKeyNames: KeyLabel[] = [ + { key: 'code', label: 'Kode' }, + { key: 'name', label: 'Nama' }, +] + +export const funcParsed: RecStrFuncUnknown = { + name: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + return `${recX.firstName} ${recX.middleName || ''} ${recX.lastName || ''}` + }, +} + +export const funcComponent: RecStrFuncComponent = { + patient(rec, idx) { + const res: RecComponent = { + idx, + rec: rec as object, + component: patientBadge, + } + return res + }, + status(rec, idx) { + const res: RecComponent = { + idx, + rec: rec as object, + component: statusBadge, + } + return res + }, +} + +export const funcHtml: RecStrFuncUnknown = { + patient_address(_rec) { + return '-' + }, +} diff --git a/app/components/app/satusehat/list.vue b/app/components/app/satusehat/list.vue new file mode 100644 index 00000000..3e3fe4cb --- /dev/null +++ b/app/components/app/satusehat/list.vue @@ -0,0 +1,14 @@ + + + diff --git a/app/components/app/satusehat/picker.vue b/app/components/app/satusehat/picker.vue new file mode 100644 index 00000000..29f282d7 --- /dev/null +++ b/app/components/app/satusehat/picker.vue @@ -0,0 +1,51 @@ + + + diff --git a/app/components/app/satusehat/search.vue b/app/components/app/satusehat/search.vue new file mode 100644 index 00000000..9e2d2405 --- /dev/null +++ b/app/components/app/satusehat/search.vue @@ -0,0 +1,12 @@ + + + diff --git a/app/components/app/sep/entry-form.vue b/app/components/app/sep/entry-form.vue new file mode 100644 index 00000000..9aea7c31 --- /dev/null +++ b/app/components/app/sep/entry-form.vue @@ -0,0 +1,282 @@ + + +