-
+
No. RM
@@ -50,7 +54,10 @@ if (props.data.responsible_doctor) {
-
+
Tgl. Kunjungan
@@ -72,9 +79,17 @@ if (props.data.responsible_doctor) {
-
+
- Billing
+
+ Billing
+
Rp. 000.000
diff --git a/app/components/app/encounter/status.vue b/app/components/app/encounter/status.vue
deleted file mode 100644
index e45c0a78..00000000
--- a/app/components/app/encounter/status.vue
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
- Hello World!!!
-
\ No newline at end of file
diff --git a/app/components/app/icd/list-cfg.ts b/app/components/app/icd/list-cfg.ts
index c413e737..44a43eb4 100644
--- a/app/components/app/icd/list-cfg.ts
+++ b/app/components/app/icd/list-cfg.ts
@@ -7,94 +7,18 @@ const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dr
const statusBadge = defineAsyncComponent(() => import('./status-badge.vue'))
export const config: Config = {
- cols: [
- {},
- {},
- {},
- { width: 100 },
- { width: 120 },
- {},
- {},
- {},
- { width: 100 },
- { width: 100 },
- {},
- { width: 50 },
- ],
+ cols: [{}, {}, {}, {}],
- headers: [
- [
- { label: 'Nama' },
- { label: 'Rekam Medis' },
- { label: 'KTP' },
- { label: 'Tgl Lahir' },
- { label: 'Umur' },
- { label: 'JK' },
- { label: 'Pendidikan' },
- { label: 'Status' },
- { label: '' },
- ],
- ],
+ headers: [[{ label: 'Kode' }, { label: 'Nama (FHIR)' }, { label: 'Nama (ID)' }, { label: '' }]],
- keys: [
- 'name',
- 'medicalRecord_number',
- 'identity_number',
- 'birth_date',
- 'patient_age',
- 'gender',
- 'education',
- 'status',
- 'action',
- ],
+ keys: ['code', 'name', 'indName', 'action'],
delKeyNames: [
{ key: 'code', label: 'Kode' },
{ key: 'name', label: 'Nama' },
],
- parses: {
- 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 '-'
- },
- },
+ parses: {},
components: {
action(rec, idx) {
diff --git a/app/components/app/icd/multiselect-picker.vue b/app/components/app/icd/multiselect-picker.vue
index ce4dbd80..e8f03084 100644
--- a/app/components/app/icd/multiselect-picker.vue
+++ b/app/components/app/icd/multiselect-picker.vue
@@ -2,7 +2,7 @@
import { config } from './list-cfg'
defineProps<{ data: any[] }>()
-const modelValue = defineModel()
+const modelValue = defineModel('modelValue', { default: [] })
diff --git a/app/components/app/icd/preview.vue b/app/components/app/icd/preview.vue
index 36bb193c..3c3d7d1f 100644
--- a/app/components/app/icd/preview.vue
+++ b/app/components/app/icd/preview.vue
@@ -1,8 +1,5 @@
@@ -30,12 +27,19 @@ function removeItem(id: number) {
-
+
{{ i + 1 }}
- {{ item.diagnosa }}
- {{ item.icd }}
+ {{ item.code }}
+ {{ item.name }}
-
diff --git a/app/components/app/installation-position/entry-detail.vue b/app/components/app/installation-position/entry-detail.vue
new file mode 100644
index 00000000..a6bfd113
--- /dev/null
+++ b/app/components/app/installation-position/entry-detail.vue
@@ -0,0 +1,192 @@
+
+
+
+
+
diff --git a/app/components/app/installation-position/entry-form.vue b/app/components/app/installation-position/entry-form.vue
new file mode 100644
index 00000000..4f7885a1
--- /dev/null
+++ b/app/components/app/installation-position/entry-form.vue
@@ -0,0 +1,207 @@
+
+
+
+
+
diff --git a/app/components/app/installation-position/list.cfg.ts b/app/components/app/installation-position/list.cfg.ts
new file mode 100644
index 00000000..fe3f6c9c
--- /dev/null
+++ b/app/components/app/installation-position/list.cfg.ts
@@ -0,0 +1,65 @@
+import type { Config, RecComponent } from '~/components/pub/my-ui/data-table'
+import { defineAsyncComponent } from 'vue'
+import type { DivisionPosition } from '~/models/division-position'
+
+type SmallDetailDto = any
+
+const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-ud.vue'))
+
+export const config: Config = {
+ cols: [{}, {}, {}, {}, {}, { width: 50 }],
+
+ headers: [
+ [
+ { label: 'Kode Posisi' },
+ { label: 'Nama Posisi' },
+ { label: 'Nama Instalasi ' },
+ { label: 'Karyawan' },
+ { label: 'Status Kepala' },
+ { label: '' },
+ ],
+ ],
+
+ keys: ['code', 'name', 'installation.name', 'employee', 'head', 'action'],
+
+ delKeyNames: [
+ { key: 'code', label: 'Kode' },
+ { key: 'name', label: 'Nama' },
+ ],
+
+ parses: {
+ division: (rec: unknown): unknown => {
+ const recX = rec as SmallDetailDto
+ return recX.division?.name || '-'
+ },
+ employee: (rec: unknown): unknown => {
+ const recX = rec as DivisionPosition
+ const fullName = [recX.employee?.person.frontTitle, recX.employee?.person.name, recX.employee?.person.endTitle]
+ .filter(Boolean)
+ .join(' ')
+ .trim()
+
+ return fullName || '-'
+ },
+ head: (rec: unknown): unknown => {
+ const recX = rec as SmallDetailDto
+ return recX.headStatus ? 'Ya' : 'Tidak'
+ },
+ },
+
+ components: {
+ action(rec, idx) {
+ const res: RecComponent = {
+ idx,
+ rec: rec as object,
+ component: action,
+ props: {
+ size: 'sm',
+ },
+ }
+ return res
+ },
+ },
+
+ htmls: {},
+}
diff --git a/app/components/app/installation-position/list.vue b/app/components/app/installation-position/list.vue
new file mode 100644
index 00000000..6ad7dd81
--- /dev/null
+++ b/app/components/app/installation-position/list.vue
@@ -0,0 +1,39 @@
+
+
+
+
+
diff --git a/app/components/app/installation/detail/index.vue b/app/components/app/installation/detail/index.vue
new file mode 100644
index 00000000..8a668d1c
--- /dev/null
+++ b/app/components/app/installation/detail/index.vue
@@ -0,0 +1,34 @@
+
+
+
+ {{ installation.code || '-' }}
+ {{ installation.name || '-' }}
+
+
+
diff --git a/app/components/app/installation/detail/list.cfg.ts b/app/components/app/installation/detail/list.cfg.ts
new file mode 100644
index 00000000..bf341ff9
--- /dev/null
+++ b/app/components/app/installation/detail/list.cfg.ts
@@ -0,0 +1,65 @@
+import type { Config, RecComponent } from '~/components/pub/my-ui/data-table'
+import { defineAsyncComponent } from 'vue'
+import type { DivisionPosition } from '~/models/division-position'
+
+type SmallDetailDto = any
+
+const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-ud.vue'))
+
+export const config: Config = {
+ cols: [{}, {}, {}, {}, {}, { width: 50 }],
+
+ headers: [
+ [
+ { label: '#' },
+ { label: 'Kode Posisi' },
+ { label: 'Nama Posisi' },
+ { label: 'Karyawan' },
+ { label: 'Status Kepala' },
+ { label: '' },
+ ],
+ ],
+
+ keys: ['index', 'code', 'name', 'employee', 'head', 'action'],
+
+ delKeyNames: [
+ { key: 'code', label: 'Kode' },
+ { key: 'name', label: 'Nama' },
+ ],
+
+ parses: {
+ division: (rec: unknown): unknown => {
+ const recX = rec as SmallDetailDto
+ return recX.division?.name || '-'
+ },
+ employee: (rec: unknown): unknown => {
+ const recX = rec as DivisionPosition
+ const fullName = [recX.employee?.person.frontTitle, recX.employee?.person.name, recX.employee?.person.endTitle]
+ .filter(Boolean)
+ .join(' ')
+ .trim()
+
+ return fullName || '-'
+ },
+ head: (rec: unknown): unknown => {
+ const recX = rec as SmallDetailDto
+ return recX.headStatus ? 'Ya' : 'Tidak'
+ },
+ },
+
+ components: {
+ action(rec, idx) {
+ const res: RecComponent = {
+ idx,
+ rec: rec as object,
+ component: action,
+ props: {
+ size: 'sm',
+ },
+ }
+ return res
+ },
+ },
+
+ htmls: {},
+}
diff --git a/app/components/app/installation/detail/list.vue b/app/components/app/installation/detail/list.vue
new file mode 100644
index 00000000..b5884cfd
--- /dev/null
+++ b/app/components/app/installation/detail/list.vue
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
diff --git a/app/components/app/installation/list-cfg.ts b/app/components/app/installation/list.cfg.ts
similarity index 83%
rename from app/components/app/installation/list-cfg.ts
rename to app/components/app/installation/list.cfg.ts
index f64ecea8..e2a39d80 100644
--- a/app/components/app/installation/list-cfg.ts
+++ b/app/components/app/installation/list.cfg.ts
@@ -3,19 +3,12 @@ import { defineAsyncComponent } from 'vue'
type SmallDetailDto = any
-const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-ud.vue'))
+const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-dud.vue'))
export const config: Config = {
cols: [{}, {}, {}, { width: 50 }],
- headers: [
- [
- { label: 'Kode' },
- { label: 'Nama' },
- { label: 'Encounter Class' },
- { label: '' },
- ],
- ],
+ headers: [[{ label: 'Kode' }, { label: 'Nama' }, { label: 'Encounter Class' }, { label: '' }]],
keys: ['code', 'name', 'encounterClass_code', 'action'],
diff --git a/app/components/app/installation/list.vue b/app/components/app/installation/list.vue
index 1be60a60..6ad7dd81 100644
--- a/app/components/app/installation/list.vue
+++ b/app/components/app/installation/list.vue
@@ -6,7 +6,7 @@ import PaginationView from '~/components/pub/my-ui/pagination/pagination-view.vu
import type { PaginationMeta } from '~/components/pub/my-ui/pagination/pagination.type'
// Configs
-import { config } from './list-cfg'
+import { config } from './list.cfg'
interface Props {
data: any[]
@@ -31,6 +31,9 @@ function handlePageChange(page: number) {
:rows="data"
:skeleton-size="paginationMeta?.pageSize"
/>
-
+
diff --git a/app/components/app/mcu-order-item/list-entry.cfg.ts b/app/components/app/mcu-order-item/list-entry.cfg.ts
new file mode 100644
index 00000000..89d85dce
--- /dev/null
+++ b/app/components/app/mcu-order-item/list-entry.cfg.ts
@@ -0,0 +1,43 @@
+import type { Config } from '~/components/pub/my-ui/data-table'
+import { defineAsyncComponent } from 'vue'
+
+const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-dud.vue'))
+const input = defineAsyncComponent(() => import('~/components/pub/ui/input/Input.vue'))
+
+export const config: Config = {
+ cols: [{}, {}, { classVal: '!p-0.5' }, { width: 50 }],
+
+ headers: [
+ [
+ { label: 'Nama' },
+ { label: 'Jenis' },
+ { label: 'Catatan' },
+ { label: '' },
+ ],
+ ],
+
+ keys: ['mcuSrc.name', 'mcuSrc.mcuSrcCategory.name', 'note'],
+
+ delKeyNames: [
+ { key: 'mcuSrc.name', label: 'Nama' },
+ ],
+
+ components: {
+ note(rec, idx) {
+ return {
+ idx,
+ rec: rec as object,
+ component: input,
+ }
+ },
+ action(rec, idx) {
+ return {
+ idx,
+ rec: rec as object,
+ component: action,
+ }
+ },
+ },
+
+ htmls: {},
+}
diff --git a/app/components/app/mcu-order-item/list-entry.vue b/app/components/app/mcu-order-item/list-entry.vue
new file mode 100644
index 00000000..6c93c5ac
--- /dev/null
+++ b/app/components/app/mcu-order-item/list-entry.vue
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+ Pilih Item
+
+
+
diff --git a/app/components/app/mcu-order-item/list.cfg.ts b/app/components/app/mcu-order-item/list.cfg.ts
new file mode 100644
index 00000000..2b054379
--- /dev/null
+++ b/app/components/app/mcu-order-item/list.cfg.ts
@@ -0,0 +1,18 @@
+import type { Config } from '~/components/pub/my-ui/data-table'
+
+export const config: Config = {
+ cols: [{}, {}],
+
+ headers: [
+ [
+ { label: 'Nama' },
+ { label: 'Jenis' },
+ ],
+ ],
+
+ keys: ['mcuSrc.name', 'mcuSrcCategory.name'],
+
+ delKeyNames: [
+ { key: 'mcuSrc.name', label: 'Nama' },
+ ],
+}
diff --git a/app/components/app/mcu-order-item/list.vue b/app/components/app/mcu-order-item/list.vue
new file mode 100644
index 00000000..ef7438c6
--- /dev/null
+++ b/app/components/app/mcu-order-item/list.vue
@@ -0,0 +1,20 @@
+
+
+
+
+
diff --git a/app/components/app/mcu-order/detail.vue b/app/components/app/mcu-order/detail.vue
new file mode 100644
index 00000000..fe161595
--- /dev/null
+++ b/app/components/app/mcu-order/detail.vue
@@ -0,0 +1,32 @@
+
+
+
+
+ Order {{ data?.createdAt?.substring(0, 10) }} - {{ data.status_code }}
+
+
+
+
+ DPJP
+
+ {{ data?.doctor?.employee?.person?.name || '.........' }}
+
+
+
+
+ PPDS
+
+ ...........
+
+
+
+
+
\ No newline at end of file
diff --git a/app/components/app/mcu-order/entry.vue b/app/components/app/mcu-order/entry.vue
new file mode 100644
index 00000000..e69de29b
diff --git a/app/components/app/mcu-order/list-pk.vue b/app/components/app/mcu-order/list-pk.vue
new file mode 100644
index 00000000..df296419
--- /dev/null
+++ b/app/components/app/mcu-order/list-pk.vue
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+ Order #{{ data.length - idx }} - {{ item.createdAt?.substring(0, 10) }} - {{ item.status_code }}
+
+
+
+ DPJP
+
+ {{ item.doctor?.employee?.person?.name || '........' }}
+
+
+
+ PPDS
+
+ ...........
+
+
+
+
+
+
+
+
diff --git a/app/components/app/mcu-order/list.vue b/app/components/app/mcu-order/list.vue
new file mode 100644
index 00000000..df296419
--- /dev/null
+++ b/app/components/app/mcu-order/list.vue
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+ Order #{{ data.length - idx }} - {{ item.createdAt?.substring(0, 10) }} - {{ item.status_code }}
+
+
+
+ DPJP
+
+ {{ item.doctor?.employee?.person?.name || '........' }}
+
+
+
+ PPDS
+
+ ...........
+
+
+
+
+
+
+
+
diff --git a/app/components/app/mcu-src-category/switcher.vue b/app/components/app/mcu-src-category/switcher.vue
new file mode 100644
index 00000000..78c54acb
--- /dev/null
+++ b/app/components/app/mcu-src-category/switcher.vue
@@ -0,0 +1,35 @@
+
+
+
+
+
+ Kategori
+
+
+
+ {{ item.name }}
+
+
+
+
diff --git a/app/components/app/mcu-src/picker-accordion.vue b/app/components/app/mcu-src/picker-accordion.vue
new file mode 100644
index 00000000..a42834f9
--- /dev/null
+++ b/app/components/app/mcu-src/picker-accordion.vue
@@ -0,0 +1,49 @@
+
+
+
+
+
diff --git a/app/components/app/medicine-mix/list-entry.ts b/app/components/app/medicine-mix/list-entry.ts
new file mode 100644
index 00000000..03202670
--- /dev/null
+++ b/app/components/app/medicine-mix/list-entry.ts
@@ -0,0 +1,50 @@
+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: "Dosis" },
+ { label: 'Satuan' },
+ { label: '' },
+ ],
+]
+
+export const keys = ['name', 'dose', 'uom.name', '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_code || '-'
+ },
+}
+
+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-mix/list-entry.vue b/app/components/app/medicine-mix/list-entry.vue
new file mode 100644
index 00000000..ba0fa689
--- /dev/null
+++ b/app/components/app/medicine-mix/list-entry.vue
@@ -0,0 +1,35 @@
+
+
+
+
+
diff --git a/app/components/app/patient/list-cfg.patient.ts b/app/components/app/patient/list-cfg.patient.ts
new file mode 100644
index 00000000..3c77bfaa
--- /dev/null
+++ b/app/components/app/patient/list-cfg.patient.ts
@@ -0,0 +1,41 @@
+import type { Config } from '~/components/pub/my-ui/data-table'
+import { defineAsyncComponent } from 'vue'
+
+const SelectedRadio = defineAsyncComponent(() => import('~/components/pub/my-ui/data/select-radio.vue'))
+
+export interface PatientData {
+ id: string
+ identity: string
+ number: string
+ bpjs: string
+ name: string
+}
+
+export const config: Config = {
+ cols: [{ width: 50 }, { width: 100 }, { width: 100 }, { width: 100 }, { width: 100 }],
+
+ headers: [
+ [{ label: '' }, { label: 'NO. KTP' }, { label: 'NO. RM' }, { label: 'NO. KARTU BPJS' }, { label: 'NAMA PASIEN' }],
+ ],
+
+ keys: ['check', 'identity', 'number', 'bpjs', 'name'],
+
+ delKeyNames: [
+ { key: 'code', label: 'Kode' },
+ { key: 'name', label: 'Nama' },
+ ],
+
+ parses: {},
+
+ components: {
+ check(rec, idx) {
+ return {
+ idx,
+ rec: { ...rec as object, menu: 'patient' },
+ component: SelectedRadio,
+ }
+ },
+ },
+
+ htmls: {},
+}
diff --git a/app/components/app/patient/list-patient.vue b/app/components/app/patient/list-patient.vue
new file mode 100644
index 00000000..2b9902f2
--- /dev/null
+++ b/app/components/app/patient/list-patient.vue
@@ -0,0 +1,38 @@
+
+
+
+
+
+
diff --git a/app/components/app/patient/view-patient.vue b/app/components/app/patient/view-patient.vue
new file mode 100644
index 00000000..e24554b7
--- /dev/null
+++ b/app/components/app/patient/view-patient.vue
@@ -0,0 +1,126 @@
+
+
+
+
+
diff --git a/app/components/app/prescription-item/list-entry.vue b/app/components/app/prescription-item/list-entry.vue
index 5b496b2b..422ebba7 100644
--- a/app/components/app/prescription-item/list-entry.vue
+++ b/app/components/app/prescription-item/list-entry.vue
@@ -1,14 +1,30 @@
-
+
+
+
+ Tambah Racikan
+
+
+
+ Tambah Non Racikan
+
+
diff --git a/app/components/app/prescription-item/list.cfg.ts b/app/components/app/prescription-item/list.cfg.ts
new file mode 100644
index 00000000..fd980bb1
--- /dev/null
+++ b/app/components/app/prescription-item/list.cfg.ts
@@ -0,0 +1,41 @@
+import type { Config } from '~/components/pub/my-ui/data-table'
+import { defineAsyncComponent } from 'vue'
+
+type SmallDetailDto = any
+
+export const config: Config = {
+ cols: [{}, {}, {}, {}, {}, {}],
+
+ headers: [
+ [
+ { label: 'Nama' },
+ { label: 'Bentuk' },
+ { label: 'Freq' },
+ { label: 'Dosis' },
+ { label: 'Interval' },
+ { label: 'Total' },
+ ],
+ ],
+
+ keys: ['name', 'uom_code', 'frequency', 'multiplier', 'interval', 'total'],
+
+ delKeyNames: [
+ { key: 'code', label: 'Kode' },
+ { key: 'name', label: 'Nama' },
+ ],
+
+ parses: {
+ 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 || '-'
+ },
+ },
+}
diff --git a/app/components/app/prescription-item/list.vue b/app/components/app/prescription-item/list.vue
new file mode 100644
index 00000000..ed64b09e
--- /dev/null
+++ b/app/components/app/prescription-item/list.vue
@@ -0,0 +1,20 @@
+
+
+
+
+
diff --git a/app/components/app/prescription-item/mix-entry.vue b/app/components/app/prescription-item/mix-entry.vue
new file mode 100644
index 00000000..d9b4881e
--- /dev/null
+++ b/app/components/app/prescription-item/mix-entry.vue
@@ -0,0 +1,113 @@
+
+
+
+
+
+ Nama
+
+
+
+ Frequensi
+
+
+
+ Dosis
+
+
+
+ Sediaan
+
+
+
+ Total
+
+
+
+ Cara Pakai
+
+
+
+ Daftar Obat
+
+
+
+ Nama
+ Dosis
+ Satuan
+ ..
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Belum ada data
+
+
+
+
+
+
+
+ Tambah
+
+
+
+
+
+
+
diff --git a/app/components/app/prescription-item/non-mix-entry.vue b/app/components/app/prescription-item/non-mix-entry.vue
new file mode 100644
index 00000000..25970646
--- /dev/null
+++ b/app/components/app/prescription-item/non-mix-entry.vue
@@ -0,0 +1,90 @@
+
+
+
+
+
+ Nama
+
+
+
+ Frequensi
+
+
+
+ Dosis
+
+
+
+ Sediaan
+
+
+
+ Interval
+
+
+
+
+
+ Total
+
+
+
+
+
+ Cara Pakai
+
+
+
+
+
+
+
+
diff --git a/app/components/app/prescription/detail.vue b/app/components/app/prescription/detail.vue
new file mode 100644
index 00000000..694eb9a1
--- /dev/null
+++ b/app/components/app/prescription/detail.vue
@@ -0,0 +1,32 @@
+
+
+
+
+ Order {{ data.issuedAt?.substring(0, 10) || data.createdAt?.substring(0, 10) }} - {{ data.status_code }}
+
+
+
+
+ DPJP
+
+ {{ data.doctor?.employee?.person?.name || '.........' }}
+
+
+
+
+ PPDS
+
+ ...........
+
+
+
+
+
\ No newline at end of file
diff --git a/app/components/app/prescription/entry.vue b/app/components/app/prescription/entry.vue
index 3b4acf28..ef8756e8 100644
--- a/app/components/app/prescription/entry.vue
+++ b/app/components/app/prescription/entry.vue
@@ -1,32 +1,36 @@
-
-
-
- DPJP
-
-
-
-
-
-
- Tgl Order
-
-
-
-
-
- DPJP
-
-
-
-
-
-
- Status
-
-
-
-
-
+
diff --git a/app/components/app/prescription/list-entry.vue b/app/components/app/prescription/list-entry.vue
new file mode 100644
index 00000000..aa768000
--- /dev/null
+++ b/app/components/app/prescription/list-entry.vue
@@ -0,0 +1,88 @@
+
+
+
+
+ Memuat data..
+
+
+
+
+
+
+
+
+ Order #{{ data.length - idx }}
+
+ 2025-01-01
+
+
+
+ Status
+
+ {{ item.status_code }}
+
+
+
+
+
+
+
+ DPJP
+
+ {{ item.doctor?.employee?.person.name }}
+
+
+
+ PPDS
+
+ {{ item.specialistIntern?.person.name }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/components/app/prescription/list-with-sub.vue b/app/components/app/prescription/list-with-sub.vue
new file mode 100644
index 00000000..14bc1785
--- /dev/null
+++ b/app/components/app/prescription/list-with-sub.vue
@@ -0,0 +1,56 @@
+
+
+
+
+
Belum Ada Data
+
+
+
+ Tambah Order
+
+
+
+
+
+
+
+
+ Order #1
+
+
+ 2025-01-01
+
+
+
+ Status
+
+
+ Status
+
+
+
+
+
+
+
+ DPJP
+
+
+ Nama Dokter
+
+
+
+ PPDS
+
+
+ Nama PPDS
+
+
+
+
+
+
diff --git a/app/components/app/prescription/list.vue b/app/components/app/prescription/list.vue
index 6fe27d39..ae5126ca 100644
--- a/app/components/app/prescription/list.vue
+++ b/app/components/app/prescription/list.vue
@@ -1,5 +1,37 @@
+
+
-
+
Belum Ada Data
@@ -8,35 +40,33 @@
-
-
+
+
+ Order #{{ data.length - idx }} - {{ item.issuedAt?.substring(0, 10) || item.createdAt?.substring(0, 10) }} - {{ item.status_code }}
+
+
+
+ DPJP
+
+ {{ item.doctor?.employee?.person?.name || '-' }}
+
+
+
+ PPDS
+
+ ...........
+
+
+
+
+
+
+
+
diff --git a/app/components/app/sep/entry-form.vue b/app/components/app/sep/entry-form.vue
index e48d23ec..35956ad7 100644
--- a/app/components/app/sep/entry-form.vue
+++ b/app/components/app/sep/entry-form.vue
@@ -1,91 +1,245 @@
-
-
diff --git a/app/components/app/sep/table-history-sep.vue b/app/components/app/sep/table-history-sep.vue
deleted file mode 100644
index bfe00e51..00000000
--- a/app/components/app/sep/table-history-sep.vue
+++ /dev/null
@@ -1,81 +0,0 @@
-
-
-
-
-
diff --git a/app/components/app/sep/table-search-letter.vue b/app/components/app/sep/table-search-letter.vue
deleted file mode 100644
index 64e65ff6..00000000
--- a/app/components/app/sep/table-search-letter.vue
+++ /dev/null
@@ -1,104 +0,0 @@
-
-
-
-
-
diff --git a/app/components/app/sep/table-search-patient.vue b/app/components/app/sep/table-search-patient.vue
deleted file mode 100644
index 13a78651..00000000
--- a/app/components/app/sep/table-search-patient.vue
+++ /dev/null
@@ -1,100 +0,0 @@
-
-
-
-
-
diff --git a/app/components/app/sep/view-history.vue b/app/components/app/sep/view-history.vue
new file mode 100644
index 00000000..a6a6091c
--- /dev/null
+++ b/app/components/app/sep/view-history.vue
@@ -0,0 +1,46 @@
+
+
+
+
+
diff --git a/app/components/app/sep/view-letter.vue b/app/components/app/sep/view-letter.vue
new file mode 100644
index 00000000..e1c0ecf2
--- /dev/null
+++ b/app/components/app/sep/view-letter.vue
@@ -0,0 +1,128 @@
+
+
+
+
+
diff --git a/app/components/app/soapi/early-entry.vue b/app/components/app/soapi/early-entry.vue
index c5697a7a..4d2367be 100644
--- a/app/components/app/soapi/early-entry.vue
+++ b/app/components/app/soapi/early-entry.vue
@@ -4,24 +4,67 @@ import Cell from '~/components/pub/my-ui/doc-entry/cell.vue'
import Field from '~/components/pub/my-ui/doc-entry/field.vue'
import Label from '~/components/pub/my-ui/doc-entry/label.vue'
+// Helpers
+import type z from 'zod'
+import { toTypedSchema } from '@vee-validate/zod'
+import { useForm } from 'vee-validate'
+import { genBase } from '~/models/_base'
+
const props = defineProps<{
+ modelValue: any
+ schema: z.ZodSchema
excludeFields?: string[]
+ isReadonly?: boolean
}>()
-const emits = defineEmits(['click'])
+const emit = defineEmits<{
+ (e: 'update:modelValue', val: any): void
+ (e: 'submit', val: any): void
+}>()
-const subject = ref({
- 'prim-compl': '',
- 'sec-compl': '',
- 'cur-disea-hist': '',
- 'pas-disea-hist': '',
- 'fam-disea-hist': '',
- 'alg-hist': '',
- 'alg-react': '',
- 'med-hist': '',
- 'blood-type': '',
+// Setup form
+const {
+ validate: _validate,
+ defineField,
+ handleSubmit,
+ errors,
+ values,
+} = useForm({
+ validationSchema: toTypedSchema(props.schema),
+ initialValues: props.modelValue,
})
+watch(values, (val) => emit('update:modelValue', val), { deep: true })
+
+const [primaryComplaint, primaryComplaintAttrs] = defineField('prim-compl')
+const [curDiseaseHistory, curDiseaseHistoryAttrs] = defineField('cur-disea-hist')
+const [systolic, systolicAttrs] = defineField('syst-bp')
+const [diastolic, diastolicAttrs] = defineField('diast-bp')
+const [pulse, pulseAttrs] = defineField('pulse')
+const [respiratoryRate, respiratoryRateAttrs] = defineField('resp-rate')
+const [temperature, temperatureAttrs] = defineField('temp')
+const [weight, weightAttrs] = defineField('weight')
+const [height, heightAttrs] = defineField('height')
+const [bloodGroup, bloodGroupAttrs] = defineField('reflect-fisio')
+const [physicalExamination, physicalExaminationAttrs] = defineField('reflect-pato')
+const [diagnosisMedical, diagnosisMedicalAttrs] = defineField('autonom-neuron')
+const [medicalPlan, medicalPlanAttrs] = defineField('medical-act')
+const [therapy, therapyAttrs] = defineField('therapy')
+
+const validate = async () => {
+ const result = await _validate()
+ console.log('Component validate() result:', result)
+
+ return {
+ valid: true,
+ data: result.values,
+ errors: result.errors,
+ }
+}
+
+defineExpose({ validate })
+const icdPreview = inject('icdPreview')
+
const isExcluded = (key: string) => props.excludeFields?.includes(key)
@@ -34,11 +77,17 @@ const isExcluded = (key: string) => props.excludeFields?.includes(key)
-
+
-
+
@@ -50,11 +99,17 @@ const isExcluded = (key: string) => props.excludeFields?.includes(key)
-
+
-
+
@@ -66,11 +121,17 @@ const isExcluded = (key: string) => props.excludeFields?.includes(key)
-
+
-
+
@@ -79,88 +140,141 @@ const isExcluded = (key: string) => props.excludeFields?.includes(key)
-
-
-
+
+
|
|
-
+
|
-
+
|
-
+
|
-
+
|
-
+
|
-
+
|
-
+
|
-
+
|
-
+
|
-
+
|
@@ -171,9 +285,10 @@ const isExcluded = (key: string) => props.excludeFields?.includes(key)
+ Pilih Diagnosa
+ + Pilih Diagnosa
+
@@ -183,37 +298,47 @@ const isExcluded = (key: string) => props.excludeFields?.includes(key)
+ Pilih Prosedur
+ + Pilih Prosedur
+
-
+
|
-
+
|
-
+
|
diff --git a/app/components/app/soapi/early-rehab-entry.vue b/app/components/app/soapi/early-rehab-entry.vue
index 61beb0f3..e4ec3114 100644
--- a/app/components/app/soapi/early-rehab-entry.vue
+++ b/app/components/app/soapi/early-rehab-entry.vue
@@ -4,24 +4,89 @@ import Cell from '~/components/pub/my-ui/doc-entry/cell.vue'
import Field from '~/components/pub/my-ui/doc-entry/field.vue'
import Label from '~/components/pub/my-ui/doc-entry/label.vue'
+// Helpers
+import type z from 'zod'
+import { toTypedSchema } from '@vee-validate/zod'
+import { useForm } from 'vee-validate'
+import { genBase } from '~/models/_base'
+
const props = defineProps<{
+ modelValue: any
+ schema: z.ZodSchema
excludeFields?: string[]
+ isReadonly?: boolean
}>()
-const emits = defineEmits(['click'])
+const emit = defineEmits<{
+ (e: 'update:modelValue', val: any): void
+ (e: 'submit', val: any): void
+}>()
-const subject = ref({
- 'prim-compl': '',
- 'sec-compl': '',
- 'cur-disea-hist': '',
- 'pas-disea-hist': '',
- 'fam-disea-hist': '',
- 'alg-hist': '',
- 'alg-react': '',
- 'med-hist': '',
- 'blood-type': '',
+// Setup form
+const {
+ validate: _validate,
+ defineField,
+ handleSubmit,
+ errors,
+ values,
+} = useForm({
+ validationSchema: toTypedSchema(props.schema),
+ initialValues: props.modelValue,
})
+watch(values, (val) => emit('update:modelValue', val), { deep: true })
+
+const [primaryComplaint, primaryComplaintAttrs] = defineField('prim-compl')
+const [medicalPlan, medicalPlanAttrs] = defineField('medical-plan')
+const [diagnosisMedical, diagnosisMedicalAttrs] = defineField('diagnosis-medical')
+const [rehabTrouble, rehabTroubleAttrs] = defineField('rehab-trouble')
+const [medicalTrouble, medicalTroubleAttrs] = defineField('medical-trouble')
+const [physicModal, physicModalAttrs] = defineField('physic-modal')
+const [exercise, exerciseAttrs] = defineField('exercise')
+const [orthoPesa, orthoPesaAttrs] = defineField('ortho-pesa')
+const [education, educationAttrs] = defineField('education')
+const [other, otherAttrs] = defineField('other')
+const [cranialis, cranialisAttrs] = defineField('cranialis')
+const [sensoris, sensorisAttrs] = defineField('sensoris')
+const [reflectFisio, reflectFisioAttrs] = defineField('reflect-fisio')
+const [reflectPato, reflectPatoAttrs] = defineField('reflect-pato')
+const [otonom, otonomAttrs] = defineField('otonom')
+const [localis, localisAttrs] = defineField('localis')
+const [medicalTrial, medicalTrialAttrs] = defineField('medical-trial')
+const [therapy, therapyAttrs] = defineField('therapy')
+const [systolic, systolicAttrs] = defineField('syst-bp')
+const [diastolic, diastolicAttrs] = defineField('diast-bp')
+const [pulse, pulseAttrs] = defineField('pulse')
+const [gcs, gcsAttrs] = defineField('gcs')
+const [respiratoryRate, respiratoryRateAttrs] = defineField('respiratory-rate')
+const [temperature, temperatureAttrs] = defineField('temperature')
+const [weight, weightAttrs] = defineField('weight')
+const [height, heightAttrs] = defineField('height')
+const [ambulance, ambulanceAttrs] = defineField('ambulance')
+const [gait, gaitAttrs] = defineField('gait')
+const [neckRom, neckRomAttrs] = defineField('neck-rom')
+const [bodyRom, bodyRomAttrs] = defineField('body-rom')
+const [agaRom, agaRomAttrs] = defineField('aga-rom')
+const [agbRom, agbRomAttrs] = defineField('agb-rom')
+const [neckMmt, neckMmtAttrs] = defineField('neck-mmt')
+const [bodyMmt, bodyMmtAttrs] = defineField('body-mmt')
+const [agaMmt, agaMmtAttrs] = defineField('aga-mmt')
+const [agbMmt, agbMmtAttrs] = defineField('agb-mmt')
+
+const validate = async () => {
+ const result = await _validate()
+ console.log('Component validate() result:', result)
+
+ return {
+ valid: true,
+ data: result.values,
+ errors: result.errors,
+ }
+}
+
+defineExpose({ validate })
+const icdPreview = inject('icdPreview')
+
const isExcluded = (key: string) => props.excludeFields?.includes(key)
@@ -36,8 +101,11 @@ const isExcluded = (key: string) => props.excludeFields?.includes(key)
-
-
+
+
|
@@ -46,21 +114,30 @@ const isExcluded = (key: string) => props.excludeFields?.includes(key)
-
+
|
-
+
|
-
+
|
@@ -77,22 +154,36 @@ const isExcluded = (key: string) => props.excludeFields?.includes(key)
-
-
+
+
|
-
+
|
-
+
|
@@ -100,14 +191,21 @@ const isExcluded = (key: string) => props.excludeFields?.includes(key)
-
+
|
-
+
props.excludeFields?.includes(key)
|
-
+
|
@@ -144,21 +245,30 @@ const isExcluded = (key: string) => props.excludeFields?.includes(key)
-
+
|
-
+
|
-
+
|
@@ -166,13 +276,19 @@ const isExcluded = (key: string) => props.excludeFields?.includes(key)
-
+
|
-
+
|
@@ -187,13 +303,19 @@ const isExcluded = (key: string) => props.excludeFields?.includes(key)
-
+
|
-
+
|
@@ -201,13 +323,19 @@ const isExcluded = (key: string) => props.excludeFields?.includes(key)
-
+
|
-
+
|
@@ -222,13 +350,19 @@ const isExcluded = (key: string) => props.excludeFields?.includes(key)
-
+
|
-
+
|
@@ -236,13 +370,19 @@ const isExcluded = (key: string) => props.excludeFields?.includes(key)
-
+
|
-
+
|
@@ -256,7 +396,10 @@ const isExcluded = (key: string) => props.excludeFields?.includes(key)
-
+
|
@@ -271,7 +414,10 @@ const isExcluded = (key: string) => props.excludeFields?.includes(key)
-
+
|
@@ -286,13 +432,19 @@ const isExcluded = (key: string) => props.excludeFields?.includes(key)
-
+
|
-
+
|
@@ -301,10 +453,18 @@ const isExcluded = (key: string) => props.excludeFields?.includes(key)
Diagnosa Fungsional (ICD-X)
+
+
+ + Pilih Prosedur
+
@@ -316,21 +476,30 @@ const isExcluded = (key: string) => props.excludeFields?.includes(key)
-
+
|
-
+
|
-
+
|
@@ -338,13 +507,19 @@ const isExcluded = (key: string) => props.excludeFields?.includes(key)
-
+
|
-
+
|
diff --git a/app/components/app/soapi/entry.vue b/app/components/app/soapi/entry.vue
index ced3e3d8..e7eecf32 100644
--- a/app/components/app/soapi/entry.vue
+++ b/app/components/app/soapi/entry.vue
@@ -1,28 +1,48 @@
-
+
diff --git a/app/components/app/soapi/function-entry.vue b/app/components/app/soapi/function-entry.vue
index 98d35663..01276c03 100644
--- a/app/components/app/soapi/function-entry.vue
+++ b/app/components/app/soapi/function-entry.vue
@@ -4,24 +4,90 @@ import Cell from '~/components/pub/my-ui/doc-entry/cell.vue'
import Field from '~/components/pub/my-ui/doc-entry/field.vue'
import Label from '~/components/pub/my-ui/doc-entry/label.vue'
+// Helpers
+import type z from 'zod'
+import { toTypedSchema } from '@vee-validate/zod'
+import { useForm } from 'vee-validate'
+import { genBase } from '~/models/_base'
+
const props = defineProps<{
+ modelValue: any
+ schema: z.ZodSchema
excludeFields?: string[]
+ isReadonly?: boolean
}>()
-const emits = defineEmits(['click'])
+const emit = defineEmits<{
+ (e: 'update:modelValue', val: any): void
+ (e: 'submit', val: any): void
+}>()
-const subject = ref({
- 'prim-compl': '',
- 'sec-compl': '',
- 'cur-disea-hist': '',
- 'pas-disea-hist': '',
- 'fam-disea-hist': '',
- 'alg-hist': '',
- 'alg-react': '',
- 'med-hist': '',
- 'blood-type': '',
+// Setup form
+const {
+ validate: _validate,
+ defineField,
+ handleSubmit,
+ errors,
+ values,
+} = useForm({
+ validationSchema: toTypedSchema(props.schema),
+ initialValues: props.modelValue,
})
+watch(values, (val) => emit('update:modelValue', val), { deep: true })
+
+const [primaryComplaint, primaryComplaintAttrs] = defineField('prim-compl')
+const [pastDisease, pastDiseaseAttrs] = defineField('past-disease')
+const [currentDisease, currentDiseaseAttrs] = defineField('current-disease')
+const [gcs, gcsAttrs] = defineField('gcs')
+const [respiratoryRate, respiratoryRateAttrs] = defineField('respiratory-rate')
+const [respiratoryRateType, respiratoryRateTypeAttrs] = defineField('respiratory-rate-type')
+const [pulse, pulseAttrs] = defineField('pulse')
+const [pulseType, pulseTypeAttrs] = defineField('pulse-type')
+const [rightArmBp, rightArmBpAttrs] = defineField('right-arm-bp')
+const [leftArmBp, leftArmBpAttrs] = defineField('left-arm-bp')
+const [axillaryTemp, axillaryTempAttrs] = defineField('axillary-temp')
+const [rektalTemp, rektalTempAttrs] = defineField('rektal-temp')
+const [skin, skinAttrs] = defineField('skin')
+const [head, headAttrs] = defineField('head')
+const [ear, earAttrs] = defineField('ear')
+const [nose, noseAttrs] = defineField('nose')
+const [oralCavity, oralCavityAttrs] = defineField('oral-cavity')
+const [eye, eyeAttrs] = defineField('eye')
+const [otherBodyPart, otherBodyPartAttrs] = defineField('other-body-part')
+const [neck, neckAttrs] = defineField('neck')
+const [thyroid, thyroidAttrs] = defineField('thyroid')
+const [thorax, thoraxAttrs] = defineField('thorax')
+const [heart, heartAttrs] = defineField('heart')
+const [lung, lungAttrs] = defineField('lung')
+const [abdomen, abdomenAttrs] = defineField('abdomen')
+const [heart2, heart2Attrs] = defineField('heart2')
+const [lien, lienAttrs] = defineField('lien')
+const [back, backAttrs] = defineField('back')
+const [extremity, extremityAttrs] = defineField('extremity')
+const [gender, genderAttrs] = defineField('gender')
+const [rectum, rectumAttrs] = defineField('rectum')
+const [systemSyaraf, systemSyarafAttrs] = defineField('system-syaraf')
+const [nervousSystem, nervousSystemAttrs] = defineField('nervous-system')
+const [cardioRespiratory, cardioRespiratoryAttrs] = defineField('cardio-respiratory')
+const [imaging, imagingAttrs] = defineField('imaging')
+const [laboratory, laboratoryAttrs] = defineField('laboratory')
+
+const validate = async () => {
+ const result = await _validate()
+ console.log('Component validate() result:', result)
+
+ return {
+ valid: true,
+ data: result.values,
+ errors: result.errors,
+ }
+}
+
+defineExpose({ validate })
+
+const icdPreview = inject('icdPreview')
+
const isExcluded = (key: string) => props.excludeFields?.includes(key)
const disorders = ref([])
const therapies = ref([])
@@ -55,8 +121,11 @@ const therapyOptions = ['Terapi Latihan', 'Modalitas Fisik', 'Protesa/Ortosa', '
-
-
+
+
|
@@ -65,14 +134,20 @@ const therapyOptions = ['Terapi Latihan', 'Modalitas Fisik', 'Protesa/Ortosa', '
-
+
|
-
+
|
@@ -86,7 +161,7 @@ const therapyOptions = ['Terapi Latihan', 'Modalitas Fisik', 'Protesa/Ortosa', '
-
+
|
@@ -100,7 +175,10 @@ const therapyOptions = ['Terapi Latihan', 'Modalitas Fisik', 'Protesa/Ortosa', '
-
+
|
@@ -108,14 +186,20 @@ const therapyOptions = ['Terapi Latihan', 'Modalitas Fisik', 'Protesa/Ortosa', '
-
+
|
-
+
|
@@ -123,13 +207,19 @@ const therapyOptions = ['Terapi Latihan', 'Modalitas Fisik', 'Protesa/Ortosa', '
-
+
|
-
+
|
@@ -137,13 +227,19 @@ const therapyOptions = ['Terapi Latihan', 'Modalitas Fisik', 'Protesa/Ortosa', '
-
+
|
-
+
|
@@ -151,13 +247,19 @@ const therapyOptions = ['Terapi Latihan', 'Modalitas Fisik', 'Protesa/Ortosa', '
-
+
|
-
+
|
@@ -172,7 +274,10 @@ const therapyOptions = ['Terapi Latihan', 'Modalitas Fisik', 'Protesa/Ortosa', '
-
+
|
@@ -183,19 +288,28 @@ const therapyOptions = ['Terapi Latihan', 'Modalitas Fisik', 'Protesa/Ortosa', '
-
+
|
-
+
|
-
+
|
@@ -204,19 +318,28 @@ const therapyOptions = ['Terapi Latihan', 'Modalitas Fisik', 'Protesa/Ortosa', '
-
+
|
-
+
|
-
+
|
@@ -227,13 +350,19 @@ const therapyOptions = ['Terapi Latihan', 'Modalitas Fisik', 'Protesa/Ortosa', '
-
+
|
-
+
|
@@ -250,19 +379,28 @@ const therapyOptions = ['Terapi Latihan', 'Modalitas Fisik', 'Protesa/Ortosa', '
|
-
+
|
-
+
|
-
+
|
@@ -281,19 +419,28 @@ const therapyOptions = ['Terapi Latihan', 'Modalitas Fisik', 'Protesa/Ortosa', '
-
+
|
-
+
|
-
+
|
@@ -312,19 +459,28 @@ const therapyOptions = ['Terapi Latihan', 'Modalitas Fisik', 'Protesa/Ortosa', '
-
+
|
-
+
|
-
+
|
@@ -332,13 +488,19 @@ const therapyOptions = ['Terapi Latihan', 'Modalitas Fisik', 'Protesa/Ortosa', '
-
+
|
-
+
|
@@ -348,13 +510,19 @@ const therapyOptions = ['Terapi Latihan', 'Modalitas Fisik', 'Protesa/Ortosa', '
-
+
|
-
+
|
@@ -369,13 +537,19 @@ const therapyOptions = ['Terapi Latihan', 'Modalitas Fisik', 'Protesa/Ortosa', '
-
+
|
-
+
|
@@ -386,33 +560,33 @@ const therapyOptions = ['Terapi Latihan', 'Modalitas Fisik', 'Protesa/Ortosa', '
+ Pilih Prosedur
-
+
+ |
+
+ Diagnosa Fungsional (ICD-X)
+
+ + Pilih Prosedur
+
+
Diagnosa Medis (ICD-X)
+ Pilih Prosedur
-
-
-
- Diagnosa Medis (ICD-X)
-
- + Pilih Prosedur
-
-
+
diff --git a/app/components/app/soapi/list-cfg.ts b/app/components/app/soapi/list-cfg.ts
index 6fa11bda..648297c4 100644
--- a/app/components/app/soapi/list-cfg.ts
+++ b/app/components/app/soapi/list-cfg.ts
@@ -6,46 +6,21 @@ type SmallDetailDto = any
const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-dud.vue'))
export const config: Config = {
- cols: [
- {},
- {},
- {},
- { width: 100 },
- { width: 120 },
- {},
- {},
- {},
- { width: 100 },
- { width: 100 },
- {},
- { width: 50 },
- ],
+ cols: [{}, {}, {}, { width: 100 }, { width: 120 }, {}, {}, {}, { width: 100 }, { width: 100 }, {}, { width: 50 }],
headers: [
[
- { label: 'Nama' },
- { label: 'Rekam Medis' },
- { label: 'KTP' },
- { label: 'Tgl Lahir' },
- { label: 'Umur' },
- { label: 'JK' },
- { label: 'Pendidikan' },
+ { label: 'Tanggal' },
+ { label: 'DPJP' },
+ { label: 'Keluhan & Riwayat' },
+ { label: 'Pemeriksaan' },
+ { label: 'Diagnosa' },
{ label: 'Status' },
- { label: '' },
+ { label: 'Aksi' },
],
],
- keys: [
- 'name',
- 'medicalRecord_number',
- 'identity_number',
- 'birth_date',
- 'patient_age',
- 'gender',
- 'education',
- 'status',
- 'action',
- ],
+ keys: ['time', 'employee_id', 'main_complaint', 'encounter_id', 'diagnose', 'status', 'action'],
delKeyNames: [
{ key: 'code', label: 'Kode' },
@@ -53,45 +28,34 @@ export const config: Config = {
],
parses: {
- name: (rec: unknown): unknown => {
- const recX = rec as SmallDetailDto
- return `${recX.firstName} ${recX.middleName || ''} ${recX.lastName || ''}`
+ time(rec: any) {
+ return rec.time ? new Date(rec.time).toLocaleDateString() : ''
},
- identity_number: (rec: unknown): unknown => {
- const recX = rec as SmallDetailDto
- if (recX.identity_number?.substring(0, 5) === 'BLANK') {
- return '(TANPA NIK)'
+ main_complaint(rec: any) {
+ const { value } = rec ?? {}
+
+ if (typeof value !== 'string') return '-'
+
+ try {
+ const parsed = JSON.parse(value)
+ console.log('parsed', parsed)
+ return parsed?.['prim-compl'] || '-'
+ } catch {
+ return '-'
}
- 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.substring(0, 10)
+ diagnose(rec: any) {
+ const { value } = rec ?? {}
+
+ if (typeof value !== 'string') return '-'
+
+ try {
+ const parsed = JSON.parse(value)
+ const diagnose = parsed?.diagnose || []
+ return diagnose.map((d: any) => d.name).join(', ')
+ } catch {
+ return '-'
}
- 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 !== 'undefined') {
- return recX.education_code
- }
- return '-'
},
},
diff --git a/app/components/app/specialist-position/entry-detail.vue b/app/components/app/specialist-position/entry-detail.vue
new file mode 100644
index 00000000..f21ff65f
--- /dev/null
+++ b/app/components/app/specialist-position/entry-detail.vue
@@ -0,0 +1,192 @@
+
+
+
+
+
diff --git a/app/components/app/specialist-position/entry-form.vue b/app/components/app/specialist-position/entry-form.vue
new file mode 100644
index 00000000..be031219
--- /dev/null
+++ b/app/components/app/specialist-position/entry-form.vue
@@ -0,0 +1,207 @@
+
+
+
+
+
diff --git a/app/components/app/specialist-position/list.cfg.ts b/app/components/app/specialist-position/list.cfg.ts
new file mode 100644
index 00000000..35f49c20
--- /dev/null
+++ b/app/components/app/specialist-position/list.cfg.ts
@@ -0,0 +1,61 @@
+import type { Config, RecComponent } from '~/components/pub/my-ui/data-table'
+import { defineAsyncComponent } from 'vue'
+import type { DivisionPosition } from '~/models/division-position'
+
+type SmallDetailDto = any
+
+const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-ud.vue'))
+
+export const config: Config = {
+ cols: [{}, {}, {}, {}, {}, { width: 50 }],
+
+ headers: [
+ [
+ { label: 'Kode Posisi' },
+ { label: 'Nama Posisi' },
+ { label: 'Nama Spesialis ' },
+ { label: 'Karyawan' },
+ { label: 'Status Kepala' },
+ { label: '' },
+ ],
+ ],
+
+ keys: ['code', 'name', 'specialist.name', 'employee', 'head', 'action'],
+
+ delKeyNames: [
+ { key: 'code', label: 'Kode' },
+ { key: 'name', label: 'Nama' },
+ ],
+
+ parses: {
+ employee: (rec: unknown): unknown => {
+ const recX = rec as DivisionPosition
+ const fullName = [recX.employee?.person.frontTitle, recX.employee?.person.name, recX.employee?.person.endTitle]
+ .filter(Boolean)
+ .join(' ')
+ .trim()
+
+ return fullName || '-'
+ },
+ head: (rec: unknown): unknown => {
+ const recX = rec as SmallDetailDto
+ return recX.headStatus ? 'Ya' : 'Tidak'
+ },
+ },
+
+ components: {
+ action(rec, idx) {
+ const res: RecComponent = {
+ idx,
+ rec: rec as object,
+ component: action,
+ props: {
+ size: 'sm',
+ },
+ }
+ return res
+ },
+ },
+
+ htmls: {},
+}
diff --git a/app/components/app/specialist-position/list.vue b/app/components/app/specialist-position/list.vue
new file mode 100644
index 00000000..6ad7dd81
--- /dev/null
+++ b/app/components/app/specialist-position/list.vue
@@ -0,0 +1,39 @@
+
+
+
+
+
diff --git a/app/components/app/specialist/detail/index.vue b/app/components/app/specialist/detail/index.vue
new file mode 100644
index 00000000..3f32a78f
--- /dev/null
+++ b/app/components/app/specialist/detail/index.vue
@@ -0,0 +1,37 @@
+
+
+
+ {{ specialist.code || '-' }}
+ {{ specialist.name || '-' }}
+
+ {{ [specialist.unit?.code, specialist.unit?.name].filter(Boolean).join(' / ') || '-' }}
+
+
+
+
diff --git a/app/components/app/specialist/detail/list.cfg.ts b/app/components/app/specialist/detail/list.cfg.ts
new file mode 100644
index 00000000..8faf9e61
--- /dev/null
+++ b/app/components/app/specialist/detail/list.cfg.ts
@@ -0,0 +1,61 @@
+import type { Config, RecComponent } from '~/components/pub/my-ui/data-table'
+import { defineAsyncComponent } from 'vue'
+import type { UnitPosition } from '~/models/unit-position'
+
+type SmallDetailDto = any
+
+const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-ud.vue'))
+
+export const config: Config = {
+ cols: [{}, {}, {}, {}, {}, { width: 50 }],
+
+ headers: [
+ [
+ { label: '#' },
+ { label: 'Kode Posisi' },
+ { label: 'Nama Posisi' },
+ { label: 'Karyawan' },
+ { label: 'Status Kepala' },
+ { label: '' },
+ ],
+ ],
+
+ keys: ['index', 'code', 'name', 'employee', 'head', 'action'],
+
+ delKeyNames: [
+ { key: 'code', label: 'Kode' },
+ { key: 'name', label: 'Nama' },
+ ],
+
+ parses: {
+ employee: (rec: unknown): unknown => {
+ const recX = rec as UnitPosition
+ const fullName = [recX.employee?.person.frontTitle, recX.employee?.person.name, recX.employee?.person.endTitle]
+ .filter(Boolean)
+ .join(' ')
+ .trim()
+
+ return fullName || '-'
+ },
+ head: (rec: unknown): unknown => {
+ const recX = rec as SmallDetailDto
+ return recX.headStatus ? 'Ya' : 'Tidak'
+ },
+ },
+
+ components: {
+ action(rec, idx) {
+ const res: RecComponent = {
+ idx,
+ rec: rec as object,
+ component: action,
+ props: {
+ size: 'sm',
+ },
+ }
+ return res
+ },
+ },
+
+ htmls: {},
+}
diff --git a/app/components/app/specialist/detail/list.vue b/app/components/app/specialist/detail/list.vue
new file mode 100644
index 00000000..da83e7ca
--- /dev/null
+++ b/app/components/app/specialist/detail/list.vue
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
diff --git a/app/components/app/specialist/list-cfg.ts b/app/components/app/specialist/list-cfg.ts
index 8ed75f28..010358c4 100644
--- a/app/components/app/specialist/list-cfg.ts
+++ b/app/components/app/specialist/list-cfg.ts
@@ -8,16 +8,9 @@ const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dr
export const config: Config = {
cols: [{}, {}, {}, { width: 50 }],
- headers: [
- [
- { label: 'Kode' },
- { label: 'Nama' },
- { label: 'Unit' },
- { label: '' },
- ],
- ],
+ headers: [[{ label: 'Kode' }, { label: 'Nama' }, { label: 'Nama Unit' }, { label: '' }]],
- keys: ['code', 'name', 'unit', 'action'],
+ keys: ['code', 'name', 'unit.name', 'action'],
delKeyNames: [
{ key: 'code', label: 'Kode' },
@@ -29,10 +22,6 @@ export const config: Config = {
const recX = rec as SmallDetailDto
return `${recX.name}`.trim()
},
- unit: (rec: unknown): unknown => {
- const recX = rec as SmallDetailDto
- return recX.unit_id || '-'
- },
},
components: {
diff --git a/app/components/app/subspecialist-position/entry-detail.vue b/app/components/app/subspecialist-position/entry-detail.vue
new file mode 100644
index 00000000..fd3f91b7
--- /dev/null
+++ b/app/components/app/subspecialist-position/entry-detail.vue
@@ -0,0 +1,192 @@
+
+
+
+
+
diff --git a/app/components/app/subspecialist-position/entry-form.vue b/app/components/app/subspecialist-position/entry-form.vue
new file mode 100644
index 00000000..c897b2f5
--- /dev/null
+++ b/app/components/app/subspecialist-position/entry-form.vue
@@ -0,0 +1,207 @@
+
+
+
+
+
diff --git a/app/components/app/subspecialist-position/list.cfg.ts b/app/components/app/subspecialist-position/list.cfg.ts
new file mode 100644
index 00000000..028bc7bf
--- /dev/null
+++ b/app/components/app/subspecialist-position/list.cfg.ts
@@ -0,0 +1,65 @@
+import type { Config, RecComponent } from '~/components/pub/my-ui/data-table'
+import { defineAsyncComponent } from 'vue'
+import type { SubSpecialistPosition } from '~/models/subspecialist-position'
+
+type SmallDetailDto = any
+
+const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-ud.vue'))
+
+export const config: Config = {
+ cols: [{}, {}, {}, {}, {}, { width: 50 }],
+
+ headers: [
+ [
+ { label: 'Kode Posisi' },
+ { label: 'Nama Posisi' },
+ { label: 'Nama Sub Spesialis ' },
+ { label: 'Karyawan' },
+ { label: 'Status Kepala' },
+ { label: '' },
+ ],
+ ],
+
+ keys: ['code', 'name', 'subspecialist', 'employee', 'head', 'action'],
+
+ delKeyNames: [
+ { key: 'code', label: 'Kode' },
+ { key: 'name', label: 'Nama' },
+ ],
+
+ parses: {
+ subspecialist: (rec: unknown): unknown => {
+ const recX = rec as SubSpecialistPosition
+ return recX.subspecialist?.name || '-'
+ },
+ employee: (rec: unknown): unknown => {
+ const recX = rec as SubSpecialistPosition
+ const fullName = [recX.employee?.person.frontTitle, recX.employee?.person.name, recX.employee?.person.endTitle]
+ .filter(Boolean)
+ .join(' ')
+ .trim()
+
+ return fullName || '-'
+ },
+ head: (rec: unknown): unknown => {
+ const recX = rec as SmallDetailDto
+ return recX.headStatus ? 'Ya' : 'Tidak'
+ },
+ },
+
+ components: {
+ action(rec, idx) {
+ const res: RecComponent = {
+ idx,
+ rec: rec as object,
+ component: action,
+ props: {
+ size: 'sm',
+ },
+ }
+ return res
+ },
+ },
+
+ htmls: {},
+}
diff --git a/app/components/app/subspecialist-position/list.vue b/app/components/app/subspecialist-position/list.vue
new file mode 100644
index 00000000..6ad7dd81
--- /dev/null
+++ b/app/components/app/subspecialist-position/list.vue
@@ -0,0 +1,39 @@
+
+
+
+
+
diff --git a/app/components/app/subspecialist/detail/index.vue b/app/components/app/subspecialist/detail/index.vue
new file mode 100644
index 00000000..154acf75
--- /dev/null
+++ b/app/components/app/subspecialist/detail/index.vue
@@ -0,0 +1,49 @@
+
+
+
+ {{ subspecialist.code || '-' }}
+ {{ subspecialist.name || '-' }}
+
+ {{ [subspecialist.specialist?.code, subspecialist.specialist?.name].filter(Boolean).join(' / ') || '-' }}
+
+
+ {{
+ [subspecialist.specialist?.unit?.code, subspecialist.specialist?.unit?.name].filter(Boolean).join(' / ') || '-'
+ }}
+
+
+ {{
+ [subspecialist.specialist?.unit?.installation?.code, subspecialist.specialist?.unit?.installation?.name]
+ .filter(Boolean)
+ .join(' / ') || '-'
+ }}
+
+
+
+
diff --git a/app/components/app/subspecialist/detail/list.cfg.ts b/app/components/app/subspecialist/detail/list.cfg.ts
new file mode 100644
index 00000000..8faf9e61
--- /dev/null
+++ b/app/components/app/subspecialist/detail/list.cfg.ts
@@ -0,0 +1,61 @@
+import type { Config, RecComponent } from '~/components/pub/my-ui/data-table'
+import { defineAsyncComponent } from 'vue'
+import type { UnitPosition } from '~/models/unit-position'
+
+type SmallDetailDto = any
+
+const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-ud.vue'))
+
+export const config: Config = {
+ cols: [{}, {}, {}, {}, {}, { width: 50 }],
+
+ headers: [
+ [
+ { label: '#' },
+ { label: 'Kode Posisi' },
+ { label: 'Nama Posisi' },
+ { label: 'Karyawan' },
+ { label: 'Status Kepala' },
+ { label: '' },
+ ],
+ ],
+
+ keys: ['index', 'code', 'name', 'employee', 'head', 'action'],
+
+ delKeyNames: [
+ { key: 'code', label: 'Kode' },
+ { key: 'name', label: 'Nama' },
+ ],
+
+ parses: {
+ employee: (rec: unknown): unknown => {
+ const recX = rec as UnitPosition
+ const fullName = [recX.employee?.person.frontTitle, recX.employee?.person.name, recX.employee?.person.endTitle]
+ .filter(Boolean)
+ .join(' ')
+ .trim()
+
+ return fullName || '-'
+ },
+ head: (rec: unknown): unknown => {
+ const recX = rec as SmallDetailDto
+ return recX.headStatus ? 'Ya' : 'Tidak'
+ },
+ },
+
+ components: {
+ action(rec, idx) {
+ const res: RecComponent = {
+ idx,
+ rec: rec as object,
+ component: action,
+ props: {
+ size: 'sm',
+ },
+ }
+ return res
+ },
+ },
+
+ htmls: {},
+}
diff --git a/app/components/app/subspecialist/detail/list.vue b/app/components/app/subspecialist/detail/list.vue
new file mode 100644
index 00000000..11431e25
--- /dev/null
+++ b/app/components/app/subspecialist/detail/list.vue
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
diff --git a/app/components/app/subspecialist/list-cfg.ts b/app/components/app/subspecialist/list-cfg.ts
index 7e9e7b79..99d34169 100644
--- a/app/components/app/subspecialist/list-cfg.ts
+++ b/app/components/app/subspecialist/list-cfg.ts
@@ -8,16 +8,9 @@ const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dr
export const config: Config = {
cols: [{}, {}, {}, { width: 50 }],
- headers: [
- [
- { label: 'Kode' },
- { label: 'Nama' },
- { label: 'Specialis' },
- { label: '' },
- ],
- ],
+ headers: [[{ label: 'Kode' }, { label: 'Nama' }, { label: 'Specialis' }, { label: '' }]],
- keys: ['code', 'name', 'specialist', 'action'],
+ keys: ['code', 'name', 'specialist.name', 'action'],
delKeyNames: [
{ key: 'code', label: 'Kode' },
diff --git a/app/components/app/subspecialist/list.vue b/app/components/app/subspecialist/list.vue
index 1be60a60..2f7908cb 100644
--- a/app/components/app/subspecialist/list.vue
+++ b/app/components/app/subspecialist/list.vue
@@ -31,6 +31,9 @@ function handlePageChange(page: number) {
:rows="data"
:skeleton-size="paginationMeta?.pageSize"
/>
-
+
|
diff --git a/app/components/app/unit-position/entry-detail.vue b/app/components/app/unit-position/entry-detail.vue
new file mode 100644
index 00000000..fb84e41a
--- /dev/null
+++ b/app/components/app/unit-position/entry-detail.vue
@@ -0,0 +1,192 @@
+
+
+
+
+
diff --git a/app/components/app/unit-position/entry-form.vue b/app/components/app/unit-position/entry-form.vue
new file mode 100644
index 00000000..b6ab8609
--- /dev/null
+++ b/app/components/app/unit-position/entry-form.vue
@@ -0,0 +1,206 @@
+
+
+
+
+
diff --git a/app/components/app/unit-position/list.cfg.ts b/app/components/app/unit-position/list.cfg.ts
new file mode 100644
index 00000000..fb5e319b
--- /dev/null
+++ b/app/components/app/unit-position/list.cfg.ts
@@ -0,0 +1,61 @@
+import type { Config, RecComponent } from '~/components/pub/my-ui/data-table'
+import { defineAsyncComponent } from 'vue'
+import type { UnitPosition } from '~/models/unit-position'
+
+type SmallDetailDto = any
+
+const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-ud.vue'))
+
+export const config: Config = {
+ cols: [{}, {}, {}, {}, {}, { width: 50 }],
+
+ headers: [
+ [
+ { label: 'Kode Posisi' },
+ { label: 'Nama Posisi' },
+ { label: 'Nama Unit ' },
+ { label: 'Karyawan' },
+ { label: 'Status Kepala' },
+ { label: '' },
+ ],
+ ],
+
+ keys: ['code', 'name', 'unit.name', 'employee', 'head', 'action'],
+
+ delKeyNames: [
+ { key: 'code', label: 'Kode' },
+ { key: 'name', label: 'Nama' },
+ ],
+
+ parses: {
+ employee: (rec: unknown): unknown => {
+ const recX = rec as UnitPosition
+ const fullName = [recX.employee?.person.frontTitle, recX.employee?.person.name, recX.employee?.person.endTitle]
+ .filter(Boolean)
+ .join(' ')
+ .trim()
+
+ return fullName || '-'
+ },
+ head: (rec: unknown): unknown => {
+ const recX = rec as SmallDetailDto
+ return recX.headStatus ? 'Ya' : 'Tidak'
+ },
+ },
+
+ components: {
+ action(rec, idx) {
+ const res: RecComponent = {
+ idx,
+ rec: rec as object,
+ component: action,
+ props: {
+ size: 'sm',
+ },
+ }
+ return res
+ },
+ },
+
+ htmls: {},
+}
diff --git a/app/components/app/unit-position/list.vue b/app/components/app/unit-position/list.vue
new file mode 100644
index 00000000..6ad7dd81
--- /dev/null
+++ b/app/components/app/unit-position/list.vue
@@ -0,0 +1,39 @@
+
+
+
+
+
diff --git a/app/components/app/unit/detail/index.vue b/app/components/app/unit/detail/index.vue
new file mode 100644
index 00000000..9b38aa2b
--- /dev/null
+++ b/app/components/app/unit/detail/index.vue
@@ -0,0 +1,35 @@
+
+
+
+ {{ unit.code || '-' }}
+ {{ unit.name || '-' }}
+
+
+
+
diff --git a/app/components/app/unit/detail/list.cfg.ts b/app/components/app/unit/detail/list.cfg.ts
new file mode 100644
index 00000000..8faf9e61
--- /dev/null
+++ b/app/components/app/unit/detail/list.cfg.ts
@@ -0,0 +1,61 @@
+import type { Config, RecComponent } from '~/components/pub/my-ui/data-table'
+import { defineAsyncComponent } from 'vue'
+import type { UnitPosition } from '~/models/unit-position'
+
+type SmallDetailDto = any
+
+const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-ud.vue'))
+
+export const config: Config = {
+ cols: [{}, {}, {}, {}, {}, { width: 50 }],
+
+ headers: [
+ [
+ { label: '#' },
+ { label: 'Kode Posisi' },
+ { label: 'Nama Posisi' },
+ { label: 'Karyawan' },
+ { label: 'Status Kepala' },
+ { label: '' },
+ ],
+ ],
+
+ keys: ['index', 'code', 'name', 'employee', 'head', 'action'],
+
+ delKeyNames: [
+ { key: 'code', label: 'Kode' },
+ { key: 'name', label: 'Nama' },
+ ],
+
+ parses: {
+ employee: (rec: unknown): unknown => {
+ const recX = rec as UnitPosition
+ const fullName = [recX.employee?.person.frontTitle, recX.employee?.person.name, recX.employee?.person.endTitle]
+ .filter(Boolean)
+ .join(' ')
+ .trim()
+
+ return fullName || '-'
+ },
+ head: (rec: unknown): unknown => {
+ const recX = rec as SmallDetailDto
+ return recX.headStatus ? 'Ya' : 'Tidak'
+ },
+ },
+
+ components: {
+ action(rec, idx) {
+ const res: RecComponent = {
+ idx,
+ rec: rec as object,
+ component: action,
+ props: {
+ size: 'sm',
+ },
+ }
+ return res
+ },
+ },
+
+ htmls: {},
+}
diff --git a/app/components/app/unit/detail/list.vue b/app/components/app/unit/detail/list.vue
new file mode 100644
index 00000000..f878d14c
--- /dev/null
+++ b/app/components/app/unit/detail/list.vue
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
diff --git a/app/components/content/chemotherapy/admin-list.vue b/app/components/content/chemotherapy/admin-list.vue
new file mode 100644
index 00000000..be6d5810
--- /dev/null
+++ b/app/components/content/chemotherapy/admin-list.vue
@@ -0,0 +1,150 @@
+
+
+
+
+
+
+
Administrasi Pasien Rawat Jalan Kemoterapi
+
+ Manajemen pendaftaran serta monitoring terapi pasien tindakan rawat jalan
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ dateRangeDisplay }}
+
+
+
+
+
+
+
+
+
+
+ Filter
+
+
+
+
+
+
+
+
diff --git a/app/components/content/chemotherapy/list.vue b/app/components/content/chemotherapy/list.vue
new file mode 100644
index 00000000..d4104f03
--- /dev/null
+++ b/app/components/content/chemotherapy/list.vue
@@ -0,0 +1,75 @@
+
+
+
+
+
+
Daftar Kunjungan Rawat Jalan Kemoterapi
+
+ Manajemen pendaftaran serta monitoring terapi pasien tindakan rawat jalan
+
+
+
+
+
+
+
+
diff --git a/app/components/content/chemotherapy/process.vue b/app/components/content/chemotherapy/process.vue
new file mode 100644
index 00000000..7f355b4b
--- /dev/null
+++ b/app/components/content/chemotherapy/process.vue
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/app/components/content/chemotherapy/protocol.vue b/app/components/content/chemotherapy/protocol.vue
new file mode 100644
index 00000000..82050d79
--- /dev/null
+++ b/app/components/content/chemotherapy/protocol.vue
@@ -0,0 +1,106 @@
+
+
+
+
+
diff --git a/app/components/content/chemotherapy/verification.vue b/app/components/content/chemotherapy/verification.vue
new file mode 100644
index 00000000..3243547a
--- /dev/null
+++ b/app/components/content/chemotherapy/verification.vue
@@ -0,0 +1,241 @@
+
+
+
+
+
+
+
+
+ Kembali ke Administrasi Kunjungan
+
+
+
+
+
+
Data Pasien:
+
+
+
+
+ No. RM:
+ {{ patientData.noRm }}
+
+
+ Nama:
+ {{ patientData.nama }}
+
+
+ Jenis Pembayaran:
+ {{ patientData.jenisPembayaran }}
+
+
+ No Billing:
+ {{ patientData.noBilling }}
+
+
+
+
+
+ Tanggal Lahir / Usia:
+ {{ patientData.tanggalLahir }} / {{ patientData.usia }}
+
+
+ Jenis Kelamin:
+ {{ patientData.jenisKelamin }}
+
+
+ Diagnosis:
+ {{ patientData.diagnosis }}
+
+
+ Klinik:
+ {{ patientData.klinik }}
+
+
+
+
+
+
+
+
Verifikasi Jadwal Pasien
+
+ Pantau riwayat masuk, dokter penanggung jawab, dan status pasien secara real-time.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ dateRangeDisplay }}
+
+
+
+
+
+
+
+
+
+
+ Filter
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/components/content/cp-lab-order/entry.vue b/app/components/content/cp-lab-order/entry.vue
new file mode 100644
index 00000000..4d0aa002
--- /dev/null
+++ b/app/components/content/cp-lab-order/entry.vue
@@ -0,0 +1,155 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/components/content/cp-lab-order/list.vue b/app/components/content/cp-lab-order/list.vue
new file mode 100644
index 00000000..73b9361c
--- /dev/null
+++ b/app/components/content/cp-lab-order/list.vue
@@ -0,0 +1,169 @@
+
+
+
+
+
+
+
+ handleActionRemove(recId, getMyList, toast)"
+ @cancel=""
+ />
+
diff --git a/app/components/content/cp-lab-order/main.vue b/app/components/content/cp-lab-order/main.vue
new file mode 100644
index 00000000..033d093f
--- /dev/null
+++ b/app/components/content/cp-lab-order/main.vue
@@ -0,0 +1,16 @@
+
+
+
+
+
+
diff --git a/app/components/content/device-order/list.vue b/app/components/content/device-order/list.vue
index 8c53f244..1d0bd0fa 100644
--- a/app/components/content/device-order/list.vue
+++ b/app/components/content/device-order/list.vue
@@ -34,11 +34,10 @@ import {
//
import { getList } from '~/services/device-order.service'
-import type { Encounter } from '~/models/encounter'
// Props
interface Props {
- encounter: Encounter
+ encounter_id: number
}
const props = defineProps
()
@@ -64,7 +63,8 @@ const {
sort: 'createdAt:asc',
'page-number': params['page-number'] || 0,
'page-size': params['page-size'] || 10,
- includes: 'encounter',
+ // includes: 'encounter',
+ includes: 'parent,childrens',
})
return { success: result.success || false, body: result.body || {} }
},
@@ -90,13 +90,18 @@ const headerPrep: HeaderPrep = {
icon: 'i-lucide-plus',
onClick: async () => {
const data = {
- encounter_id: props.encounter.id,
+ encounter_id: props.encounter_id,
}
const dateResp = await handleActionSave(data, getMyList, () => {}, () => {})
if (dateResp.success) {
const currentData = dateResp.body.data || []
// goToEntry()
}
+ recItem.value = null
+ recId.value = 0
+ isReadonly.value = false
+ // await handleActionSave(recItem, getMyList, () => {}, () => {})
+ goToEntry()
},
},
}
diff --git a/app/components/content/division-position/list.vue b/app/components/content/division-position/list.vue
index 019e64a9..4fa8605d 100644
--- a/app/components/content/division-position/list.vue
+++ b/app/components/content/division-position/list.vue
@@ -54,6 +54,7 @@ const {
sort: 'createdAt:asc',
'page-number': params['page-number'] || 0,
'page-size': params['page-size'] || 10,
+ includes: 'division,Employee.Person',
})
return { success: result.success || false, body: result.body || {} }
},
@@ -61,7 +62,7 @@ const {
})
const headerPrep: HeaderPrep = {
- title: 'Divisi',
+ title: 'Divisi - Posisi',
icon: 'i-lucide-box',
refSearchNav: {
placeholder: 'Cari (min. 3 karakter)...',
@@ -105,12 +106,12 @@ watch([recId, recAction], () => {
switch (recAction.value) {
case ActionEvents.showDetail:
getCurrentDivisionDetail(recId.value)
- title.value = 'Detail Divisi'
+ title.value = 'Detail Divisi Position'
isReadonly.value = true
break
case ActionEvents.showEdit:
getCurrentDivisionDetail(recId.value)
- title.value = 'Edit Divisi'
+ title.value = 'Edit Divisi Position'
isReadonly.value = false
break
case ActionEvents.showConfirmDelete:
@@ -120,9 +121,19 @@ watch([recId, recAction], () => {
})
onMounted(async () => {
- divisions.value = await getDivisionLabelList({ sort: 'createdAt:asc', 'page-size': 100 })
- employees.value = await getEmployeeLabelList({ sort: 'createdAt:asc', 'page-size': 100 })
- await getDivisionList()
+ try {
+ divisions.value = await getDivisionLabelList({ sort: 'createdAt:asc', 'page-size': 100 })
+ employees.value = await getEmployeeLabelList({ sort: 'createdAt:asc', 'page-size': 100, includes: 'person' })
+ await getDivisionList()
+ } catch (err) {
+ console.log(err)
+ // show toast
+ toast({
+ title: 'Terjadi Kesalahan',
+ description: 'Terjadi kesalahan saat memuat data',
+ variant: 'destructive',
+ })
+ }
})
@@ -142,7 +153,7 @@ onMounted(async () => {