diff --git a/app/components/app/action-report/entry-form.vue b/app/components/app/action-report/entry-form.vue new file mode 100644 index 00000000..2479e1c7 --- /dev/null +++ b/app/components/app/action-report/entry-form.vue @@ -0,0 +1,468 @@ + + + + + + {{ section }} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{ section }} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/components/app/action-report/fields/fill-notes.vue b/app/components/app/action-report/fields/fill-notes.vue new file mode 100644 index 00000000..41c948c5 --- /dev/null +++ b/app/components/app/action-report/fields/fill-notes.vue @@ -0,0 +1,65 @@ + + + + + {{ push({ note: '' }) }} + + + + + + + + + + + + + + + diff --git a/app/components/app/action-report/fields/index.ts b/app/components/app/action-report/fields/index.ts new file mode 100644 index 00000000..ea1a0e72 --- /dev/null +++ b/app/components/app/action-report/fields/index.ts @@ -0,0 +1,10 @@ +export { default as FillNotes } from './fill-notes.vue' +export { default as RadioBloods } from './radio-bloods.vue' +export { default as SelectBilling } from './select-billing.vue' +export { default as SelectBirthPlace } from './select-birth-place.vue' +export { default as SelectBirthType } from './select-birth-type.vue' +export { default as SelectOperationSystem } from './select-operation-system.vue' +export { default as SelectOperationType } from './select-operation-type.vue' +export { default as SelectSpecimen } from './select-specimen.vue' +export { default as SelectSurgeryCounter } from './select-surgery-counter.vue' +export { default as SelectSurgeryType } from './select-surgery-type.vue' diff --git a/app/components/app/action-report/fields/radio-bloods.vue b/app/components/app/action-report/fields/radio-bloods.vue new file mode 100644 index 00000000..9bdaa187 --- /dev/null +++ b/app/components/app/action-report/fields/radio-bloods.vue @@ -0,0 +1,101 @@ + + + + + + {{ label }} + + + + + + + + + + + {{ option.label }} + + + + + + + + { + const target = e.target as HTMLInputElement + const v = target.value.replace(/\D/g, '') + amountField.onChange(v) + } + " + /> + + CC + + + + + + + + + + + + + diff --git a/app/components/app/action-report/fields/select-billing.vue b/app/components/app/action-report/fields/select-billing.vue new file mode 100644 index 00000000..f8df074e --- /dev/null +++ b/app/components/app/action-report/fields/select-billing.vue @@ -0,0 +1,68 @@ + + + + + + {{ label }} + + + + + + + + + + + + + diff --git a/app/components/app/action-report/fields/select-birth-place.vue b/app/components/app/action-report/fields/select-birth-place.vue new file mode 100644 index 00000000..b2314129 --- /dev/null +++ b/app/components/app/action-report/fields/select-birth-place.vue @@ -0,0 +1,71 @@ + + + + + + {{ label }} + + + + + + + + + + + + + diff --git a/app/components/app/action-report/fields/select-birth-type.vue b/app/components/app/action-report/fields/select-birth-type.vue new file mode 100644 index 00000000..537e8282 --- /dev/null +++ b/app/components/app/action-report/fields/select-birth-type.vue @@ -0,0 +1,67 @@ + + + + + + {{ label }} + + + + + + + + + + + + + diff --git a/app/components/app/action-report/fields/select-operation-system.vue b/app/components/app/action-report/fields/select-operation-system.vue new file mode 100644 index 00000000..bae300b2 --- /dev/null +++ b/app/components/app/action-report/fields/select-operation-system.vue @@ -0,0 +1,69 @@ + + + + + + {{ label }} + + + + + + + + + + + + + diff --git a/app/components/app/action-report/fields/select-operation-type.vue b/app/components/app/action-report/fields/select-operation-type.vue new file mode 100644 index 00000000..e05a4196 --- /dev/null +++ b/app/components/app/action-report/fields/select-operation-type.vue @@ -0,0 +1,69 @@ + + + + + + {{ label }} + + + + + + + + + + + + + diff --git a/app/components/app/action-report/fields/select-specimen.vue b/app/components/app/action-report/fields/select-specimen.vue new file mode 100644 index 00000000..9be2bb93 --- /dev/null +++ b/app/components/app/action-report/fields/select-specimen.vue @@ -0,0 +1,69 @@ + + + + + + {{ label }} + + + + + + + + + + + + + diff --git a/app/components/app/action-report/fields/select-surgery-counter.vue b/app/components/app/action-report/fields/select-surgery-counter.vue new file mode 100644 index 00000000..2c682529 --- /dev/null +++ b/app/components/app/action-report/fields/select-surgery-counter.vue @@ -0,0 +1,67 @@ + + + + + + {{ label }} + + + + + + + + + + + + + diff --git a/app/components/app/action-report/fields/select-surgery-type.vue b/app/components/app/action-report/fields/select-surgery-type.vue new file mode 100644 index 00000000..2c59438a --- /dev/null +++ b/app/components/app/action-report/fields/select-surgery-type.vue @@ -0,0 +1,69 @@ + + + + + + {{ label }} + + + + + + + + + + + + + diff --git a/app/components/app/action-report/list-history.cfg.ts b/app/components/app/action-report/list-history.cfg.ts new file mode 100644 index 00000000..d943bc7d --- /dev/null +++ b/app/components/app/action-report/list-history.cfg.ts @@ -0,0 +1,88 @@ +import { defineAsyncComponent } from 'vue' + +import { format } from 'date-fns' +import { id } from 'date-fns/locale' + +import type { Config, RecComponent } from '~/components/pub/my-ui/data-table' +import type { ActionReportData } from '~/components/app/action-report/sample' +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-d.vue')) + +export const config: Config = { + cols: [ + { width: 120 }, + { width: 120 }, + { width: 120 }, + { width: 120 }, + { width: 120 }, + { width: 120 }, + { width: 120 }, + { width: 50 }, + ], + + headers: [ + [ + { label: 'TANGGAL LAPORAN' }, + { label: 'DPJP' }, + { label: 'OPERATOR' }, + { label: 'TANGGAL PEMBEDAHAN' }, + { label: 'JENIS OPERASI' }, + { label: 'KODE BILLING' }, + { label: 'SISTEM OPERASI' }, + { label: 'AKSI' }, + ], + ], + + keys: ['reportAt', 'dpjp', 'operator', 'operationAt', 'operationType', 'billing', 'system', 'action'], + + delKeyNames: [ + { key: 'code', label: 'Kode' }, + { key: 'name', label: 'Nama' }, + ], + + parses: { + reportAt: (rec: unknown): unknown => { + const attr = (rec as ActionReportData).reportAt + const result = format(new Date(attr), 'd MMMM yyyy, HH:mm', { locale: id }) + + return result + }, + operationAt: (rec: unknown): unknown => { + const attr = (rec as ActionReportData).operationAt + const result = format(new Date(attr), 'd MMMM yyyy', { locale: id }) + + return result + }, + system: (rec: unknown): unknown => { + return 'Cito' + }, + operator: (rec: unknown): unknown => { + return 'dr. Dewi Arum Sawitri, Sp.An' + }, + billing: (rec: unknown): unknown => { + return 'General' + }, + operationType: (rec: unknown): unknown => { + return 'Besar' + }, + dpjp: (rec: unknown): unknown => { + return 'dr. Irwansyah Kurniawan Sp.Bo' + }, + parent: (rec: unknown): unknown => { + const recX = rec as any + return recX.parent?.name || '-' + }, + }, + + components: { + action(rec, idx) { + const res: RecComponent = { + idx, + rec: rec as object, + component: action, + } + return res + }, + }, + + htmls: {}, +} diff --git a/app/components/app/action-report/list-history.vue b/app/components/app/action-report/list-history.vue new file mode 100644 index 00000000..6ad7dd81 --- /dev/null +++ b/app/components/app/action-report/list-history.vue @@ -0,0 +1,39 @@ + + + + + + + + diff --git a/app/components/app/action-report/list.cfg.ts b/app/components/app/action-report/list.cfg.ts new file mode 100644 index 00000000..13a78728 --- /dev/null +++ b/app/components/app/action-report/list.cfg.ts @@ -0,0 +1,89 @@ +import { defineAsyncComponent } from 'vue' + +import { format } from 'date-fns' +import { id } from 'date-fns/locale' + +import type { Config, RecComponent } from '~/components/pub/my-ui/data-table' +import type { ActionReportData } from '~/components/app/action-report/sample' +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-dud.vue')) + +export const config: Config = { + cols: [ + { width: 120 }, + { width: 120 }, + { width: 120 }, + { width: 120 }, + { width: 120 }, + { width: 120 }, + { width: 120 }, + { width: 50 }, + ], + + headers: [ + [ + { label: 'TANGGAL LAPORAN' }, + { label: 'DPJP' }, + { label: 'OPERATOR' }, + { label: 'TANGGAL PEMBEDAHAN' }, + { label: 'JENIS OPERASI' }, + { label: 'KODE BILLING' }, + { label: 'SISTEM OPERASI' }, + { label: 'AKSI' }, + ], + ], + + keys: ['reportAt', 'dpjp', 'operator', 'operationAt', 'operationType', 'billing', 'system', 'action'], + + delKeyNames: [ + { key: 'id', label: 'ID' }, + { key: 'dokter', label: 'Dokter' }, + { key: 'reportAt', label: 'Tanggal Laporan' }, + ], + + parses: { + reportAt: (rec: unknown): unknown => { + const attr = (rec as ActionReportData).reportAt + const result = format(new Date(attr), 'd MMMM yyyy, HH:mm', { locale: id }) + + return result + }, + operationAt: (rec: unknown): unknown => { + const attr = (rec as ActionReportData).operationAt + const result = format(new Date(attr), 'd MMMM yyyy', { locale: id }) + + return result + }, + system: (rec: unknown): unknown => { + return 'Cito' + }, + operator: (rec: unknown): unknown => { + return 'dr. Dewi Arum Sawitri, Sp.An' + }, + billing: (rec: unknown): unknown => { + return 'General' + }, + operationType: (rec: unknown): unknown => { + return 'Besar' + }, + dpjp: (rec: unknown): unknown => { + return 'dr. Irwansyah Kurniawan Sp.Bo' + }, + parent: (rec: unknown): unknown => { + const recX = rec as any + return recX.parent?.name || '-' + }, + }, + + components: { + action(rec, idx) { + const res: RecComponent = { + idx, + rec: rec as object, + component: action, + } + return res + }, + }, + + htmls: {}, +} diff --git a/app/components/app/action-report/list.vue b/app/components/app/action-report/list.vue new file mode 100644 index 00000000..6ad7dd81 --- /dev/null +++ b/app/components/app/action-report/list.vue @@ -0,0 +1,39 @@ + + + + + + + + diff --git a/app/components/app/action-report/preview.vue b/app/components/app/action-report/preview.vue new file mode 100644 index 00000000..fa113333 --- /dev/null +++ b/app/components/app/action-report/preview.vue @@ -0,0 +1,166 @@ + + + + + {{ format(new Date(), 'd MMMM yyyy, HH:mm', { locale: id }) }} + + + + + Tim Pelaksanaan Tindakan + + + + dr. Marcell Galliard Sp.Gr + Sumitro + Alexis Lewis Carol + Mikel Arteta + + {{ format(new Date(), 'd MMMM yyyy', { locale: id }) }} + + {{ operatorTeam?.actionDiagnosis || '-' }} + Cak Armuji + + + + + + + Tindakan Operatif / Non Operatif Lain + + + + + + + + + + + Data Pelaksanaan Tindakan + + + + dr. Marcell Galliard Sp.Gr + GCASH1128190 + Alexis Lewis Carol + + {{ format(new Date(), 'd MMMM yyyy, HH:mm', { locale: id }) }} + + + {{ format(new Date(), 'd MMMM yyyy, HH:mm', { locale: id }) }} + + 5 menit + + {{ format(new Date(), 'd MMMM yyyy, HH:mm', { locale: id }) }} + + + {{ format(new Date(), 'd MMMM yyyy, HH:mm', { locale: id }) }} + + 5 menit + + 300 CC + - + - + - + - + - + - + - + + + Bersih + 1 (Satu) + Lahir Hidup + RSSA + 18 gram + Normal dan sehat + - + 300 CC + PA + + + {{ item.note }} + + - + + + + + + + + + + + + diff --git a/app/components/app/action-report/sample.ts b/app/components/app/action-report/sample.ts new file mode 100644 index 00000000..b067e859 --- /dev/null +++ b/app/components/app/action-report/sample.ts @@ -0,0 +1,54 @@ +import { addWeeks, formatISO } from 'date-fns' + +export type ActionReportData = { + id: number + reportAt: string + operationAt: string + noRm: string + noBill: string + nama: string + jk: string + alamat: string + klinik: string + dokter: string + caraBayar: string + rujukan: string + ketRujukan: string + asal: string +} + +export const sampleRows: ActionReportData[] = [ + { + id: 1, + reportAt: formatISO(addWeeks(new Date(), -1)), + operationAt: formatISO(addWeeks(new Date(), 1)), + noRm: 'RM23311224', + noBill: '-', + nama: 'Ahmad Baidowi', + jk: 'L', + alamat: 'Jl Jaksa Agung S. No. 9', + klinik: 'Penyakit dalam', + dokter: 'Dr. Andreas Sutaji', + caraBayar: 'JKN', + rujukan: 'Faskes BPJS', + ketRujukan: 'RUMAH SAKIT - RS Lawang Medika - Malang', + asal: 'Rawat Jalan Reguler', + }, + { + id: 2, + reportAt: new Date().toISOString(), + operationAt: formatISO(addWeeks(new Date(), 2)), + noRm: 'RM23455667', + noBill: '-', + nama: 'Abraham Sulaiman', + jk: 'L', + alamat: 'Purwantoro, Blimbing', + klinik: 'Penyakit dalam', + dokter: 'Dr. Andreas Sutaji', + caraBayar: 'JKN', + rujukan: 'Faskes BPJS', + ketRujukan: 'RUMAH SAKIT - RS Lawang Medika - Malang', + asal: 'Rawat Jalan Reguler', + }, + // tambahkan lebih banyak baris contoh jika perlu +] diff --git a/app/components/app/assessment-education/entry-form.vue b/app/components/app/assessment-education/entry.vue similarity index 83% rename from app/components/app/assessment-education/entry-form.vue rename to app/components/app/assessment-education/entry.vue index 1c8b3656..33cfa826 100644 --- a/app/components/app/assessment-education/entry-form.vue +++ b/app/components/app/assessment-education/entry.vue @@ -1,13 +1,17 @@ - - - + }, + validateOnMount: false, +}) + +defineExpose({ + validate, + resetForm, + setValues, + values, +}) + + + + Kebutuhan Edukasi - + + + {}" /> + + diff --git a/app/components/app/assessment-education/list-history.cfg.ts b/app/components/app/assessment-education/list-history.cfg.ts new file mode 100644 index 00000000..c02b3a52 --- /dev/null +++ b/app/components/app/assessment-education/list-history.cfg.ts @@ -0,0 +1,75 @@ +import { defineAsyncComponent } from 'vue' + +import { format } from 'date-fns' +import { id } from 'date-fns/locale' + +import type { Config, RecComponent } from '~/components/pub/my-ui/data-table' +import type { ActionReportData } from '~/components/app/action-report/sample' +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-dud.vue')) + +export const config: Config = { + cols: [{ width: 120 }, { width: 120 }, { width: 120 }, { width: 120 }, { width: 120 }, { width: 50 }], + + headers: [ + [ + { label: 'TANGGAL' }, + { label: 'INFORMASI UMUM' }, + { label: 'EDUKASI KHUSUS' }, + { label: 'RENCANA EDUKASI' }, + { label: 'PELAKSANAAN' }, + { label: 'AKSI' }, + ], + ], + + keys: ['reportAt', 'dpjp', 'operator', 'operationAt', 'operationType', 'action'], + + delKeyNames: [ + { key: 'id', label: 'ID' }, + { key: 'dokter', label: 'Dokter' }, + { key: 'reportAt', label: 'Tanggal Laporan' }, + ], + + parses: { + reportAt: (rec: unknown): unknown => { + const attr = (rec as ActionReportData).reportAt + const result = format(new Date(attr), 'd MMMM yyyy, HH:mm', { locale: id }) + + return result + }, + operationAt: (rec: unknown): unknown => { + return '1 Rencana Edukasi' + }, + system: (rec: unknown): unknown => { + return 'Cito' + }, + operator: (rec: unknown): unknown => { + return '2 Edukasi dipilih' + }, + billing: (rec: unknown): unknown => { + return 'General' + }, + operationType: (rec: unknown): unknown => { + return '-' + }, + dpjp: (rec: unknown): unknown => { + return '3 Informasi Dipilih' + }, + parent: (rec: unknown): unknown => { + const recX = rec as any + return recX.parent?.name || '-' + }, + }, + + components: { + action(rec, idx) { + const res: RecComponent = { + idx, + rec: rec as object, + component: action, + } + return res + }, + }, + + htmls: {}, +} diff --git a/app/components/app/assessment-education/list-history.vue b/app/components/app/assessment-education/list-history.vue new file mode 100644 index 00000000..6ad7dd81 --- /dev/null +++ b/app/components/app/assessment-education/list-history.vue @@ -0,0 +1,39 @@ + + + + + + + + diff --git a/app/components/app/assessment-education/list.cfg.ts b/app/components/app/assessment-education/list.cfg.ts new file mode 100644 index 00000000..c02b3a52 --- /dev/null +++ b/app/components/app/assessment-education/list.cfg.ts @@ -0,0 +1,75 @@ +import { defineAsyncComponent } from 'vue' + +import { format } from 'date-fns' +import { id } from 'date-fns/locale' + +import type { Config, RecComponent } from '~/components/pub/my-ui/data-table' +import type { ActionReportData } from '~/components/app/action-report/sample' +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-dud.vue')) + +export const config: Config = { + cols: [{ width: 120 }, { width: 120 }, { width: 120 }, { width: 120 }, { width: 120 }, { width: 50 }], + + headers: [ + [ + { label: 'TANGGAL' }, + { label: 'INFORMASI UMUM' }, + { label: 'EDUKASI KHUSUS' }, + { label: 'RENCANA EDUKASI' }, + { label: 'PELAKSANAAN' }, + { label: 'AKSI' }, + ], + ], + + keys: ['reportAt', 'dpjp', 'operator', 'operationAt', 'operationType', 'action'], + + delKeyNames: [ + { key: 'id', label: 'ID' }, + { key: 'dokter', label: 'Dokter' }, + { key: 'reportAt', label: 'Tanggal Laporan' }, + ], + + parses: { + reportAt: (rec: unknown): unknown => { + const attr = (rec as ActionReportData).reportAt + const result = format(new Date(attr), 'd MMMM yyyy, HH:mm', { locale: id }) + + return result + }, + operationAt: (rec: unknown): unknown => { + return '1 Rencana Edukasi' + }, + system: (rec: unknown): unknown => { + return 'Cito' + }, + operator: (rec: unknown): unknown => { + return '2 Edukasi dipilih' + }, + billing: (rec: unknown): unknown => { + return 'General' + }, + operationType: (rec: unknown): unknown => { + return '-' + }, + dpjp: (rec: unknown): unknown => { + return '3 Informasi Dipilih' + }, + parent: (rec: unknown): unknown => { + const recX = rec as any + return recX.parent?.name || '-' + }, + }, + + components: { + action(rec, idx) { + const res: RecComponent = { + idx, + rec: rec as object, + component: action, + } + return res + }, + }, + + htmls: {}, +} diff --git a/app/components/app/assessment-education/list.vue b/app/components/app/assessment-education/list.vue new file mode 100644 index 00000000..6ad7dd81 --- /dev/null +++ b/app/components/app/assessment-education/list.vue @@ -0,0 +1,39 @@ + + + + + + + + diff --git a/app/components/app/assessment-education/sample.ts b/app/components/app/assessment-education/sample.ts new file mode 100644 index 00000000..b067e859 --- /dev/null +++ b/app/components/app/assessment-education/sample.ts @@ -0,0 +1,54 @@ +import { addWeeks, formatISO } from 'date-fns' + +export type ActionReportData = { + id: number + reportAt: string + operationAt: string + noRm: string + noBill: string + nama: string + jk: string + alamat: string + klinik: string + dokter: string + caraBayar: string + rujukan: string + ketRujukan: string + asal: string +} + +export const sampleRows: ActionReportData[] = [ + { + id: 1, + reportAt: formatISO(addWeeks(new Date(), -1)), + operationAt: formatISO(addWeeks(new Date(), 1)), + noRm: 'RM23311224', + noBill: '-', + nama: 'Ahmad Baidowi', + jk: 'L', + alamat: 'Jl Jaksa Agung S. No. 9', + klinik: 'Penyakit dalam', + dokter: 'Dr. Andreas Sutaji', + caraBayar: 'JKN', + rujukan: 'Faskes BPJS', + ketRujukan: 'RUMAH SAKIT - RS Lawang Medika - Malang', + asal: 'Rawat Jalan Reguler', + }, + { + id: 2, + reportAt: new Date().toISOString(), + operationAt: formatISO(addWeeks(new Date(), 2)), + noRm: 'RM23455667', + noBill: '-', + nama: 'Abraham Sulaiman', + jk: 'L', + alamat: 'Purwantoro, Blimbing', + klinik: 'Penyakit dalam', + dokter: 'Dr. Andreas Sutaji', + caraBayar: 'JKN', + rujukan: 'Faskes BPJS', + ketRujukan: 'RUMAH SAKIT - RS Lawang Medika - Malang', + asal: 'Rawat Jalan Reguler', + }, + // tambahkan lebih banyak baris contoh jika perlu +] diff --git a/app/components/app/doctor/fields/index.ts b/app/components/app/doctor/fields/index.ts new file mode 100644 index 00000000..32d92f2f --- /dev/null +++ b/app/components/app/doctor/fields/index.ts @@ -0,0 +1 @@ +export { default as SelectDoctor } from './select-doctor.vue' diff --git a/app/components/app/doctor/fields/select-doctor.vue b/app/components/app/doctor/fields/select-doctor.vue new file mode 100644 index 00000000..8921350c --- /dev/null +++ b/app/components/app/doctor/fields/select-doctor.vue @@ -0,0 +1,72 @@ + + + + + + {{ label }} + + + + + + + + + + + + + diff --git a/app/components/content/action-report/entry.vue b/app/components/content/action-report/entry.vue new file mode 100644 index 00000000..a127b804 --- /dev/null +++ b/app/components/content/action-report/entry.vue @@ -0,0 +1,34 @@ + + + + + + + + + diff --git a/app/components/content/action-report/form.vue b/app/components/content/action-report/form.vue new file mode 100644 index 00000000..e6c30c73 --- /dev/null +++ b/app/components/content/action-report/form.vue @@ -0,0 +1,82 @@ + + + + console.log(val)" + @back="goBack" + @error=" + (err: Error) => { + toast({ + title: 'Terjadi Kesalahan', + description: err.message, + variant: 'destructive', + }) + } + " + :doctors="doctors" + :initialValues="reportData" + > + + + + + + Memuat data... + + diff --git a/app/components/content/action-report/list.vue b/app/components/content/action-report/list.vue new file mode 100644 index 00000000..13e2825b --- /dev/null +++ b/app/components/content/action-report/list.vue @@ -0,0 +1,276 @@ + + + + + + Laporan Tindakan + Infomasi laporan tindakan pasien + + + + + + + + + + - + + { + isDialogOpen = true + } + " + /> + + + + { + isDialogOpen = true + } + " + /> + { + goToEntry() + } + " + /> + + + + + + + + + { + isDialogOpen = value + } + " + > + + + + + handleActionRemove( + recItem.id, + () => { + router.go(0) + }, + toast, + ) + " + @cancel="" + > + + {{ console.log(JSON.stringify(record)) }} + + + {{ field.label }}: + {{ record[field.key] }} + + + + + diff --git a/app/components/content/action-report/sample.ts b/app/components/content/action-report/sample.ts new file mode 100644 index 00000000..f368eea6 --- /dev/null +++ b/app/components/content/action-report/sample.ts @@ -0,0 +1,68 @@ +export default { + operatorTeam: { + dpjpId: -1, + operatorName: 'Julian Alvarez', + assistantOperatorName: 'Arda Guller', + instrumentNurseName: 'Kenan Yildiz', + surgeryDate: '2025-11-13T14:29:00', + actionDiagnosis: 'Sprei gratisnya mana', + }, + procedures: [ + { + id: -1, + name: 'Ndase mumet', + code: 'CX1', + }, + ], + operationExecution: { + surgeryType: 'khusus', + billingCode: 'local', + operationSystem: 'cito', + surgeryCleanType: 'kotor', + surgeryNumber: 'retry', + birthPlaceNote: 'out3', + personWeight: 100, + operationDescription: 'asdsadsa1', + birthRemark: 'lahir_hidup', + + operationStartAt: '2025-11-13T14:29:00', + operationEndAt: '2025-11-13T17:29:00', + + anesthesiaStartAt: '2025-11-13T11:29:00', + anesthesiaEndAt: '2025-11-13T18:29:00', + }, + bloodInput: { + type: 'tc', + amount: { + prc: null, + wb: null, + ffp: null, + tc: 3243324, + }, + }, + implant: { + brand: 'Samsung', + name: 'S.Komedi', + companionName: 'When ya', + }, + specimen: { + destination: 'pa', + }, + tissueNotes: [ + { + note: 'Anjai', + }, + { + note: 'Ciee Kaget', + }, + { + note: 'Baper', + }, + { + note: 'Saltink weeh', + }, + { + note: 'Kaburrr', + }, + ], +} diff --git a/app/components/content/action-report/view.vue b/app/components/content/action-report/view.vue new file mode 100644 index 00000000..97508a22 --- /dev/null +++ b/app/components/content/action-report/view.vue @@ -0,0 +1,67 @@ + + + + + diff --git a/app/components/content/assessment-education/add.vue b/app/components/content/assessment-education/add.vue deleted file mode 100644 index 91df6201..00000000 --- a/app/components/content/assessment-education/add.vue +++ /dev/null @@ -1,61 +0,0 @@ - - - - Tambah Asesmen Edukasi - - - - - - diff --git a/app/components/content/assessment-education/entry.vue b/app/components/content/assessment-education/entry.vue new file mode 100644 index 00000000..a127b804 --- /dev/null +++ b/app/components/content/assessment-education/entry.vue @@ -0,0 +1,34 @@ + + + + + + + + + diff --git a/app/components/content/assessment-education/form.vue b/app/components/content/assessment-education/form.vue new file mode 100644 index 00000000..4553d7d5 --- /dev/null +++ b/app/components/content/assessment-education/form.vue @@ -0,0 +1,74 @@ + + + + console.log(val)" + @back="goBack" + @error=" + (err: Error) => { + toast({ + title: 'Terjadi Kesalahan', + description: err.message, + variant: 'destructive', + }) + } + " + :doctors="doctors" + :initialValues="reportData" + /> + + + Memuat data... + + diff --git a/app/components/content/assessment-education/list.vue b/app/components/content/assessment-education/list.vue new file mode 100644 index 00000000..91f5ab5d --- /dev/null +++ b/app/components/content/assessment-education/list.vue @@ -0,0 +1,276 @@ + + + + + + Asesmen Kebutuhan Edukasi + Manajemen asesmen kebutuhan edukasi pasien rawat jalan + + + + + + + + + + - + + { + isDialogOpen = true + } + " + /> + + + + { + isDialogOpen = true + } + " + /> + { + goToEntry() + } + " + /> + + + + + + + + + { + isDialogOpen = value + } + " + > + + + + + handleActionRemove( + recItem.id, + () => { + router.go(0) + }, + toast, + ) + " + @cancel="" + > + + {{ console.log(JSON.stringify(record)) }} + + + {{ field.label }}: + {{ record[field.key] }} + + + + + diff --git a/app/components/content/assessment-education/sample.ts b/app/components/content/assessment-education/sample.ts new file mode 100644 index 00000000..f368eea6 --- /dev/null +++ b/app/components/content/assessment-education/sample.ts @@ -0,0 +1,68 @@ +export default { + operatorTeam: { + dpjpId: -1, + operatorName: 'Julian Alvarez', + assistantOperatorName: 'Arda Guller', + instrumentNurseName: 'Kenan Yildiz', + surgeryDate: '2025-11-13T14:29:00', + actionDiagnosis: 'Sprei gratisnya mana', + }, + procedures: [ + { + id: -1, + name: 'Ndase mumet', + code: 'CX1', + }, + ], + operationExecution: { + surgeryType: 'khusus', + billingCode: 'local', + operationSystem: 'cito', + surgeryCleanType: 'kotor', + surgeryNumber: 'retry', + birthPlaceNote: 'out3', + personWeight: 100, + operationDescription: 'asdsadsa1', + birthRemark: 'lahir_hidup', + + operationStartAt: '2025-11-13T14:29:00', + operationEndAt: '2025-11-13T17:29:00', + + anesthesiaStartAt: '2025-11-13T11:29:00', + anesthesiaEndAt: '2025-11-13T18:29:00', + }, + bloodInput: { + type: 'tc', + amount: { + prc: null, + wb: null, + ffp: null, + tc: 3243324, + }, + }, + implant: { + brand: 'Samsung', + name: 'S.Komedi', + companionName: 'When ya', + }, + specimen: { + destination: 'pa', + }, + tissueNotes: [ + { + note: 'Anjai', + }, + { + note: 'Ciee Kaget', + }, + { + note: 'Baper', + }, + { + note: 'Saltink weeh', + }, + { + note: 'Kaburrr', + }, + ], +} diff --git a/app/components/content/assessment-education/view.vue b/app/components/content/assessment-education/view.vue new file mode 100644 index 00000000..97508a22 --- /dev/null +++ b/app/components/content/assessment-education/view.vue @@ -0,0 +1,67 @@ + + + + + diff --git a/app/handlers/encounter-init.handler.ts b/app/handlers/encounter-init.handler.ts index d70db428..5b0e87c2 100644 --- a/app/handlers/encounter-init.handler.ts +++ b/app/handlers/encounter-init.handler.ts @@ -45,16 +45,18 @@ const MicroLabOrderAsync = defineAsyncComponent(() => import('~/components/conte const CprjAsync = defineAsyncComponent(() => import('~/components/content/cprj/entry.vue')) const RadiologyAsync = defineAsyncComponent(() => import('~/components/content/radiology-order/main.vue')) const ConsultationAsync = defineAsyncComponent(() => import('~/components/content/consultation/list.vue')) -const DocUploadListAsync = defineAsyncComponent(() => import('~/components/content/document-upload/main.vue')) +const DocUploadListAsync = defineAsyncComponent(() => import('~/components/content/document-upload/list.vue')) const GeneralConsentListAsync = defineAsyncComponent(() => import('~/components/content/general-consent/entry.vue')) -const ResumeListAsync = defineAsyncComponent(() => import('~/components/content/resume/main.vue')) -const ControlLetterListAsync = defineAsyncComponent(() => import('~/components/content/control-letter/main.vue')) -const KfrListAsync = defineAsyncComponent(() => import('~/components/content/kfr/main.vue')) -const PrbListAsync = defineAsyncComponent(() => import('~/components/content/prb/main.vue')) -const SurgeryReportListAsync = defineAsyncComponent(() => import('~/components/content/surgery-report/main.vue')) -const VaccineDataListAsync = defineAsyncComponent(() => import('~/components/content/vaccine-data/main.vue')) +const ResumeListAsync = defineAsyncComponent(() => import('~/components/content/resume/list.vue')) +const ControlLetterListAsync = defineAsyncComponent(() => import('~/components/content/control-letter/list.vue')) +const KfrListAsync = defineAsyncComponent(() => import('~/components/content/kfr/list.vue')) +const PrbListAsync = defineAsyncComponent(() => import('~/components/content/prb/list.vue')) +const SurgeryReportListAsync = defineAsyncComponent(() => import('~/components/content/surgery-report/list.vue')) +const VaccineDataListAsync = defineAsyncComponent(() => import('~/components/content/vaccine-data/list.vue')) const InitialNursingStudyAsync = defineAsyncComponent(() => import('~/components/content/initial-nursing/entry.vue')) -const SummaryMedicAsync = defineAsyncComponent(() => import('~/components/content/summary-medic/entry.vue')) +const AssessmentEducationEntryAsync = defineAsyncComponent( + () => import('~/components/content/assessment-education/entry.vue'), +) const defaultKeys: Record = { status: { @@ -63,19 +65,17 @@ const defaultKeys: Record = { classCode: ['ambulatory', 'emergency', 'inpatient'], unit: 'all', }, - // NOTE : HIDDEN UNTIL IT IS READY - // earlyNurseryAssessment: { - // id: 'early-nursery-assessment', - // title: 'Pengkajian Awal Keperawatan', - // classCode: ['ambulatory', 'emergency', 'inpatient'], - // unit: 'all', - // }, + earlyNurseryAssessment: { + id: 'early-nursery-assessment', + title: 'Pengkajian Awal Keperawatan', + classCode: ['ambulatory', 'emergency', 'inpatient'], + unit: 'all', + }, earlyMedicalAssessment: { id: 'early-medical-assessment', title: 'Pengkajian Awal Medis', classCode: ['ambulatory', 'emergency', 'inpatient'], unit: 'all', - afterId: 'early-medical-assessment', }, earlyMedicalRehabAssessment: { id: 'rehab-medical-assessment', @@ -84,27 +84,20 @@ const defaultKeys: Record = { unit: 'rehab', afterId: 'early-medical-assessment', }, - fkr: { - id: 'fkr', - title: 'FKR', - classCode: ['ambulatory', 'emergency', 'inpatient'], - unit: 'all', + functionAssessment: { + id: 'function-assessment', + title: 'Asesmen Fungsi', + classCode: ['ambulatory'], + unit: 'rehab', + afterId: 'rehab-medical-assessment', + }, + therapyProtocol: { + id: 'therapy-protocol', + classCode: ['ambulatory'], + title: 'Protokol Terapi', + unit: 'rehab', + afterId: 'function-assessment', }, - // NOTE: Replaced by FRK - // functionAssessment: { - // id: 'function-assessment', - // title: 'Asesmen Fungsi', - // classCode: ['ambulatory'], - // unit: 'rehab', - // afterId: 'rehab-medical-assessment', - // }, - // therapyProtocol: { - // id: 'therapy-protocol', - // classCode: ['ambulatory'], - // title: 'Protokol Terapi', - // unit: 'rehab', - // afterId: 'function-assessment', - // }, chemotherapyProtocol: { id: 'chemotherapy-protocol', title: 'Protokol Kemoterapi', @@ -227,6 +220,12 @@ const defaultKeys: Record = { classCode: ['ambulatory', 'emergency'], unit: 'all', }, + kfr: { + id: 'kfr', + title: 'KFR', + classCode: ['ambulatory', 'emergency', 'inpatient'], + unit: 'all', + }, refBack: { id: 'reference-back', title: 'PRB', @@ -263,12 +262,6 @@ const defaultKeys: Record = { classCode: ['ambulatory', 'emergency', 'inpatient'], unit: 'all', }, - summaryMedic: { - id: 'summary-medic', - title: 'Profil Ringkasan Medis', - classCode: ['ambulatory', 'emergency', 'inpatient'], - unit: 'all', - }, initialNursingStudy: { id: 'initial-nursing-study', title: 'Kajian Awal Keperawatan', @@ -360,9 +353,12 @@ export function injectComponents(id: string | number, data: EncounterListData, m } } if (currentKeys?.educationAssessment) { - // TODO: add component for education assessment - currentKeys.educationAssessment['component'] = null - currentKeys.educationAssessment['props'] = { encounter_id: id } + currentKeys.educationAssessment['component'] = AssessmentEducationEntryAsync + currentKeys.educationAssessment['props'] = { + encounter: data?.encounter, + type: 'education-assessment', + label: currentKeys.educationAssessment['title'], + } } if (currentKeys?.generalConsent) { currentKeys.generalConsent['component'] = GeneralConsentListAsync @@ -422,9 +418,9 @@ export function injectComponents(id: string | number, data: EncounterListData, m currentKeys.refBack['component'] = PrbListAsync currentKeys.refBack['props'] = { encounter: data?.encounter } } - if (currentKeys?.fkr) { - currentKeys.fkr['component'] = KfrListAsync - currentKeys.fkr['props'] = { encounter: data?.encounter } + if (currentKeys?.kfr) { + currentKeys.kfr['component'] = KfrListAsync + currentKeys.kfr['props'] = { encounter: data?.encounter } } if (currentKeys?.screening) { // TODO: add component for screening @@ -448,10 +444,12 @@ export function injectComponents(id: string | number, data: EncounterListData, m currentKeys.priceList['component'] = null currentKeys.priceList['props'] = { encounter_id: id } } - if (currentKeys?.summaryMedic) { - currentKeys.summaryMedic['component'] = SummaryMedicAsync - currentKeys.summaryMedic['props'] = { encounter_id: id } + + if (currentKeys?.initialNursingStudy) { + currentKeys.initialNursingStudy['component'] = InitialNursingStudyAsync + currentKeys.initialNursingStudy['props'] = { encounter: data?.encounter } } + if (currentKeys?.initialNursingStudy) { currentKeys.initialNursingStudy['component'] = InitialNursingStudyAsync currentKeys.initialNursingStudy['props'] = { encounter: data?.encounter } @@ -512,12 +510,9 @@ export function mapResponseToEncounter(result: any): any { ? result.visitDate : result.registeredAt || result.patient?.registeredAt || null, adm_employee_id: result.adm_employee_id || 0, - adm_employee: result.adm_employee || null, - responsible_nurse_code: result.responsible_nurse_code || null, - responsible_nurse: result.responsible_nurse || null, - appointment_doctor_code: result.appointment_doctor_code || null, + appointment_doctor_id: result.appointment_doctor_id || null, + responsible_doctor_id: result.responsible_doctor_id || null, appointment_doctor: result.appointment_doctor || null, - responsible_doctor_code: result.responsible_doctor_id || null, responsible_doctor: result.responsible_doctor || null, refSource_name: result.refSource_name || null, appointment_id: result.appointment_id || null, @@ -539,13 +534,7 @@ export function mapResponseToEncounter(result: any): any { return mapped } -export function getMenuItems( - id: string | number, - props: any, - user: any, - data: EncounterListData, - meta: any, -) { +export function getMenuItems(id: string | number, props: any, user: any, data: EncounterListData, meta: any) { // const normalClassCode = props.classCode === 'ambulatory' ? 'outpatient' : props.classCode const normalClassCode = props.classCode === 'ambulatory' ? 'ambulatory' : props.classCode const currentKeys = injectComponents(id, data, meta) diff --git a/app/models/_base.ts b/app/models/_base.ts index 6aaa99fc..ed6f7204 100644 --- a/app/models/_base.ts +++ b/app/models/_base.ts @@ -1,4 +1,3 @@ - export interface Base { id: number createdAt: string | null @@ -20,7 +19,9 @@ export interface TreeItem { export function genBase(): Base { return { - id: 0, + // -1 buat mock data + // backend harusnya non-negative/ > 0 (untuk auto increment constraint) jadi harusnya aman ya + id: -1, createdAt: '', updatedAt: '', } diff --git a/app/models/doctor.ts b/app/models/doctor.ts index 297f9372..17c4f803 100644 --- a/app/models/doctor.ts +++ b/app/models/doctor.ts @@ -1,8 +1,8 @@ -import { type Base, genBase } from "./_base" -import { type Employee, genEmployee } from "./employee" -import type { Unit } from "./unit" -import type { Specialist } from "./specialist" -import type { Subspecialist } from "./subspecialist" +import { type Base, genBase } from './_base' +import { type Employee, genEmployee } from './employee' +import type { Unit } from './unit' +import type { Specialist } from './specialist' +import type { Subspecialist } from './subspecialist' export interface Doctor extends Base { employee_id: number diff --git a/app/models/edu-assessment.ts b/app/models/edu-assessment.ts deleted file mode 100644 index 9987f9a7..00000000 --- a/app/models/edu-assessment.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { type Base, genBase } from './_base' - -export type JsonRaw = string - -export interface EduAssessment extends Base { - encounter_id: number - generalEdus: Record - specialEdus: Record - assessments: Record - plan: Record -} - -export function genEduAssessment(): EduAssessment { - return { - ...genBase(), - encounter_id: 0, - generalEdus: {}, - specialEdus: {}, - assessments: {}, - plan: {}, - } -} - -export interface EduAssessmentRaw extends Base { - encounter_id: number - generalEdus: string - specialEdus: string - assessments: string - plan: string -} - -export function genEduAssessmentRaw(): EduAssessmentRaw { - return { - ...genBase(), - encounter_id: 0, - generalEdus: '', - specialEdus: '', - assessments: '', - plan: '', - } -} diff --git a/app/models/encounter.ts b/app/models/encounter.ts index 56ff2af7..95bccff0 100644 --- a/app/models/encounter.ts +++ b/app/models/encounter.ts @@ -52,7 +52,7 @@ export function genEncounter(): Encounter { patient: genPatient(), registeredAt: '', class_code: '', - unit_code: '', + unit_code: 0, unit: genUnit(), visitDate: '', adm_employee_id: 0, diff --git a/app/models/nurse.ts b/app/models/nurse.ts index 5f511781..d5e1f95f 100644 --- a/app/models/nurse.ts +++ b/app/models/nurse.ts @@ -1,9 +1,7 @@ import { type Base, genBase } from "./_base" -import type { Employee } from "./employee" export interface Nurse extends Base { employee_id: number - employee?: Employee ihs_number?: string unit_id: number infra_id: number diff --git a/app/models/person.ts b/app/models/person.ts index 06b313b8..f2c400b6 100644 --- a/app/models/person.ts +++ b/app/models/person.ts @@ -1,7 +1,7 @@ -import { type Base, genBase } from "./_base" -import type { PersonAddress } from "./person-address" -import type { PersonContact } from "./person-contact" -import type { PersonRelative } from "./person-relative" +import { type Base, genBase } from './_base' +import type { PersonAddress } from './person-address' +import type { PersonContact } from './person-contact' +import type { PersonRelative } from './person-relative' import type { Ethnic } from './ethnic' import type { Language } from './language' import type { Regency } from './regency' @@ -43,6 +43,15 @@ export interface Person extends Base { export function genPerson(): Person { return { ...genBase(), - name: '', + frontTitle: '[MOCK] dr. ', + name: 'Agus Iwan Setiawan', + endTitle: 'Sp.Bo', } } + +export function parseName(person: Person): string { + if (!person) return '' + const fullName = [person.frontTitle, person.name, person.endTitle].filter(Boolean).join(' ').trim() + + return fullName +} diff --git a/app/schemas/action-report.schema.ts b/app/schemas/action-report.schema.ts new file mode 100644 index 00000000..cd23eb28 --- /dev/null +++ b/app/schemas/action-report.schema.ts @@ -0,0 +1,121 @@ +import { z } from 'zod' + +const isoDateTime = z + .string() + .min(1, 'Tanggal / waktu wajib diisi') + .refine((val) => { + const date = new Date(val) + return !isNaN(date.getTime()) + }, 'Format tanggal / waktu tidak valid') + +const positiveInt = z.coerce.number().int().nonnegative() + +const OperatorTeamSchema = z.object({ + dpjpId: z.coerce + .number({ + invalid_type_error: 'Silahkan pilih dpjp terlebih dahulu', + }) + .int(), + operatorName: z.string({ + required_error: 'Masukkan nama operator', + }), + assistantOperatorName: z.string({ + required_error: 'Masukkan nama asisten operator', + }), + instrumentNurseName: z.string({ + required_error: 'Masukkan nama instrumentir', + }), + + surgeryDate: isoDateTime, + actionDiagnosis: z.string(), + + postSurgeryNurseId: z.number().int().optional().nullable(), +}) + +const ProcedureSchema = z.object({ + id: z.number().int(), + name: z.string().min(1), + code: z.string().min(1), +}) + +const OperationExecutionSchema = z.object({ + surgeryType: z.enum(['kecil', 'sedang', 'besar', 'khusus'], { required_error: 'Silahkan pilih jenis operasi' }), + billingCode: z.string({ + required_error: 'Silahkan pilih kode billing', + }), + operationSystem: z.enum(['khusus', 'cito', 'efektif', 'urgent'], { required_error: 'Silahkan pilih sistem operasi' }), + + operationStartAt: isoDateTime, + operationEndAt: isoDateTime, + + anesthesiaStartAt: isoDateTime, + anesthesiaEndAt: isoDateTime, + + surgeryCleanType: z.enum(['bersih', 'bersih_terkontaminasi', 'terkontaminasi', 'kotor']).optional(), + surgeryNumber: z.enum(['first', 'retry']).optional(), + + birthPlaceNote: z.string().optional(), + personWeight: positiveInt.optional(), + birthCondition: z.string().optional(), + + operationDescription: z.string({ + required_error: 'Mohon lengkapi uraian operasi', + }), + + bleedingAmountCc: positiveInt.optional(), + + birthRemark: z.enum(['lahir_hidup', 'lahir_mati']).optional(), +}) + +const BloodInputSchema = z + .object({ + type: z.enum(['prc', 'wb', 'ffp', 'tc']), + amount: z.object({ + prc: z.coerce.number().optional(), + wb: z.coerce.number().optional(), + ffp: z.coerce.number().optional(), + tc: z.coerce.number().optional(), + }), + }) + .transform((val) => ({ + type: val.type, + amount: Object.fromEntries( + ['prc', 'wb', 'ffp', 'tc'].map((k) => [k, val.type === k ? (val.amount[k] ?? null) : null]), + ), + })) + +const ImplantSchema = z.object({ + brand: z.string().optional(), + name: z.string().optional(), + stickerNumber: z.string().optional(), + companionName: z.string().optional(), +}) + +const SpecimenSchema = z.object({ + destination: z.string({ + required_error: 'Silahkan pilih specimen', + }), +}) + +const TissueNoteSchema = z.object({ + note: z + .string() + .trim() + .transform((val) => (val === '' ? undefined : val)) + .optional(), +}) + +export const ActionReportSchema = z.object({ + operatorTeam: OperatorTeamSchema, + procedures: z.array(ProcedureSchema).min(1, { message: 'Silahkan pilih prosedur' }), + + operationExecution: OperationExecutionSchema, + + bloodInput: BloodInputSchema.optional(), + implant: ImplantSchema.optional(), + specimen: SpecimenSchema.optional(), + + tissueNotes: z.array(TissueNoteSchema).optional(), +}) + +export type ActionReportFormData = z.infer diff --git a/app/schemas/assessment-education.ts b/app/schemas/assessment-education.ts deleted file mode 100644 index 0fcbca5c..00000000 --- a/app/schemas/assessment-education.ts +++ /dev/null @@ -1,83 +0,0 @@ -import * as z from 'zod' -import { genEduAssessmentRaw, type EduAssessment, type EduAssessmentRaw } from '../models/edu-assessment' -import { serializeKeyToBoolean } from '../lib/clinical.constants' - -const AssessmentEducationSchema = z.object({ - generalEducationNeeds: z - .array(z.string(), { - required_error: 'Mohon pilih setidaknya item', - }) - .min(1, 'Mohon pilih setidaknya item'), - - specificEducationNeeds: z - .array(z.string(), { - required_error: 'Mohon pilih setidaknya item', - }) - .min(1, 'Mohon pilih setidaknya item'), - - learningAbility: z.string({ - required_error: 'Mohon pilih kemampuan belajar', - }), - - learningWillingness: z.string({ - required_error: 'Mohon pilih kemauan belajar', - }), - - barrier: z.string({ - required_error: 'Mohon pilih hambatan', - }), - - learningMethod: z.string({ - required_error: 'Mohon pilih metode pembelajaran', - }), - - language: z.string({ - required_error: 'Mohon pilih bahasa', - }), - - languageBarrier: z.string({ - required_error: 'Mohon pilih hambatan bahasa', - }), - - beliefValue: z.string({ - required_error: 'Mohon pilih keyakinan pada nilai-nilai yang dianut', - }), - - plans: z - .array( - z.object({ - id: z.number(), - value: z.string().nonempty('Mohon masukkan catatan'), - }), - ) - .min(1, 'Minimal 1 catatan rencana studi'), -}) - -type AssessmentEducationFormData = z.infer - -export { AssessmentEducationSchema } -export type { AssessmentEducationFormData } - -export function encode(encounterId: number, formData: AssessmentEducationFormData): EduAssessmentRaw { - let base = genEduAssessmentRaw() - // serialize general data - const general = serializeKeyToBoolean('general', formData.generalEducationNeeds) - const special = serializeKeyToBoolean('special', formData.specificEducationNeeds) - - base.encounter_id = encounterId - base.generalEdus = JSON.stringify(general) - base.specialEdus = JSON.stringify(special) - - base.assessments = JSON.stringify({ - 'learn-ability': formData.learningAbility, - 'learn-will': formData.learningWillingness, - obstacle: formData.barrier, - 'learn-method': formData.learningMethod, - lang: formData.language, - 'lang-obstacle': formData.languageBarrier, - belief: formData.beliefValue, - }) - - base.plan = JSON.stringify(formData.plans) - return base -} diff --git a/app/schemas/encounter.schema.ts b/app/schemas/encounter.schema.ts index 872c1e97..e3c9affc 100644 --- a/app/schemas/encounter.schema.ts +++ b/app/schemas/encounter.schema.ts @@ -4,9 +4,8 @@ import { InternalReferenceSchema } from './internal-reference.schema' // Check In const CheckInSchema = z.object({ // registeredAt: z.string({ required_error: 'Tanggal masuk harus diisi' }), - responsible_doctor_code: z.string({ required_error: 'Dokter harus diisi' }), - // adm_employee_id: z.number({ required_error: 'PJA harus diisi' }).gt(0, 'PJA harus diisi'), - registeredAt: z.string({ required_error: 'waktu harus diisi' }), + responsible_doctor_id: z.number({ required_error: 'Dokter harus diisi' }).gt(0, 'Dokter harus diisi'), + adm_employee_id: z.number({ required_error: 'PJA harus diisi' }).gt(0, 'PJA harus diisi'), }) type CheckInFormData = z.infer
{{ section }}
Kebutuhan Edukasi
Memuat data...
Infomasi laporan tindakan pasien
+ {{ field.label }}: + {{ record[field.key] }} +
Manajemen asesmen kebutuhan edukasi pasien rawat jalan