diff --git a/app/components/app/general-consent/entry.vue b/app/components/app/general-consent/entry.vue new file mode 100644 index 00000000..75e30cec --- /dev/null +++ b/app/components/app/general-consent/entry.vue @@ -0,0 +1,214 @@ + + + diff --git a/app/components/app/general-consent/list.cfg.ts b/app/components/app/general-consent/list.cfg.ts new file mode 100644 index 00000000..c2f57c54 --- /dev/null +++ b/app/components/app/general-consent/list.cfg.ts @@ -0,0 +1,82 @@ +import type { Config, RecComponent, RecStrFuncComponent, RecStrFuncUnknown } from '~/components/pub/my-ui/data-table' +import { defineAsyncComponent } from 'vue' +import type { GeneralConsent } from '~/models/general-consent' + +type SmallDetailDto = any + +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-ud.vue')) +export const config: Config = { + cols: [{ width: 100 }, {}, {}, {}, { width: 50 }], + headers: [ + [ + { label: 'Tanggal' }, + { label: 'Anggota Keluarga' }, + { label: 'Penanggung Jawab' }, + { label: 'Pemberi Informasi' }, + { label: 'Saksi 1' }, + { label: 'Saksi 2' }, + { label: '' }, + ], + ], + keys: ['date', 'relatives', 'responsible', 'informant', 'witness1', 'witness2', 'action'], + delKeyNames: [ + { key: 'data', label: 'Tanggal' }, + { key: 'dstDoctor.name', label: 'Dokter' }, + ], + parses: { + date(rec) { + const recX = rec as GeneralConsent + return recX?.createdAt?.substring(0, 10) || '-' + }, + relatives(rec) { + const recX = rec as GeneralConsent + const parsed = JSON.parse(recX?.value || '{}') + return parsed?.relatives?.join(', ') || '-' + }, + responsible(rec) { + const recX = rec as GeneralConsent + const parsed = JSON.parse(recX?.value || '{}') + return parsed?.responsible || '-' + }, + informant(rec) { + const recX = rec as GeneralConsent + const parsed = JSON.parse(recX?.value || '{}') + return parsed?.informant || '-' + }, + witness1(rec) { + const recX = rec as GeneralConsent + const parsed = JSON.parse(recX?.value || '{}') + return parsed?.witness1 || '-' + }, + witness2(rec) { + const recX = rec as GeneralConsent + const parsed = JSON.parse(recX?.value || '{}') + return parsed?.witness2 || '-' + }, + action(rec, idx) { + const res: RecComponent = { + idx, + rec: rec as object, + component: action, + props: { + size: 'sm', + }, + } + return res + }, + }, + components: { + action(rec, idx) { + const res: RecComponent = { + idx, + rec: rec as object, + component: action, + props: { + size: 'sm', + }, + } + return res + }, + } as RecStrFuncComponent, + htmls: {} as RecStrFuncUnknown, +} diff --git a/app/components/app/general-consent/list.vue b/app/components/app/general-consent/list.vue new file mode 100644 index 00000000..46f595f5 --- /dev/null +++ b/app/components/app/general-consent/list.vue @@ -0,0 +1,34 @@ + + + diff --git a/app/components/content/encounter/process.vue b/app/components/content/encounter/process.vue index 318026e3..42d8b746 100644 --- a/app/components/content/encounter/process.vue +++ b/app/components/content/encounter/process.vue @@ -18,6 +18,7 @@ import Prescription from '~/components/content/prescription/main.vue' import CpLabOrder from '~/components/content/cp-lab-order/main.vue' import Radiology from '~/components/content/radiology-order/main.vue' import Consultation from '~/components/content/consultation/list.vue' +import GeneralConsentList from '~/components/content/general-consent/entry.vue' import ResumeList from '~/components/content/resume/list.vue' import ControlLetterList from '~/components/content/control-letter/list.vue' @@ -62,7 +63,7 @@ const tabs: TabItem[] = [ }, { value: 'therapy-protocol', label: 'Protokol Terapi' }, { value: 'education-assessment', label: 'Asesmen Kebutuhan Edukasi' }, - { value: 'consent', label: 'General Consent' }, + { value: 'consent', label: 'General Consent', component: GeneralConsentList, props: { encounter: data } }, { value: 'patient-note', label: 'CPRJ' }, { value: 'prescription', label: 'Order Obat', component: Prescription, props: { encounter_id: data.id } }, { value: 'device', label: 'Order Alkes' }, diff --git a/app/components/content/general-consent/entry.vue b/app/components/content/general-consent/entry.vue new file mode 100644 index 00000000..5769e967 --- /dev/null +++ b/app/components/content/general-consent/entry.vue @@ -0,0 +1,36 @@ + + + diff --git a/app/components/content/general-consent/form.vue b/app/components/content/general-consent/form.vue new file mode 100644 index 00000000..738adca1 --- /dev/null +++ b/app/components/content/general-consent/form.vue @@ -0,0 +1,185 @@ + + diff --git a/app/components/content/general-consent/list.vue b/app/components/content/general-consent/list.vue new file mode 100644 index 00000000..4cf269ee --- /dev/null +++ b/app/components/content/general-consent/list.vue @@ -0,0 +1,179 @@ + + + diff --git a/app/composables/useQueryCRUD.ts b/app/composables/useQueryCRUD.ts index a48e9a2b..f81649bd 100644 --- a/app/composables/useQueryCRUD.ts +++ b/app/composables/useQueryCRUD.ts @@ -19,7 +19,17 @@ export function useQueryCRUDMode(key: string = 'mode') { }) const goToEntry = () => (mode.value = 'entry') - const backToList = () =>(mode.value = 'list') + const backToList = () => { + router.push({ + path: route.path, + query: { + ...route.query, + mode: 'list', + // HAPUS record-id + 'record-id': undefined, + }, + }) + } return { mode, goToEntry, backToList } } diff --git a/app/handlers/general-consent.handler.ts b/app/handlers/general-consent.handler.ts new file mode 100644 index 00000000..2f949f3f --- /dev/null +++ b/app/handlers/general-consent.handler.ts @@ -0,0 +1,24 @@ +// Handlers +import { genCrudHandler } from '~/handlers/_handler' + +// Services +import { create, update, remove } from '~/services/general-consent.service' + +export const { + recId, + recAction, + recItem, + isReadonly, + isProcessing, + isFormEntryDialogOpen, + isRecordConfirmationOpen, + onResetState, + handleActionSave, + handleActionEdit, + handleActionRemove, + handleCancelForm, +} = genCrudHandler({ + create, + update, + remove, +}) diff --git a/app/models/general-consent.ts b/app/models/general-consent.ts new file mode 100644 index 00000000..fe3ac97a --- /dev/null +++ b/app/models/general-consent.ts @@ -0,0 +1,49 @@ +export interface GeneralConsent { + id: number + encounter_id: number + value: string +} + +export interface ValueCreateDto { + relatives: string[] + responsibleName: string + responsiblePhone: string + informant: string + witness1: string + witness2: string +} + +export interface CreateDto { + encounter_id: number + value: string +} + +export interface UpdateDto { + id: number + problem: string + unit_id: number +} + +export interface DeleteDto { + id: number +} + +export function genCreateDto(): CreateDto { + return { + encounter_id: 0, + problem: '', + unit_id: 0, + } +} + +export function genConsultation(): GeneralConsent { + return { + id: 0, + encounter_id: 0, + unit_id: 0, + doctor_id: 0, + problem: '', + solution: '', + repliedAt: '', + } +} diff --git a/app/schemas/_generate-file.ts b/app/schemas/_generate-file.ts new file mode 100644 index 00000000..0e0b05fc --- /dev/null +++ b/app/schemas/_generate-file.ts @@ -0,0 +1,5 @@ +export interface GenerateFile { + entityType_code: string + ref_id: number + type_code: string +} diff --git a/app/schemas/general-consent.schema.ts b/app/schemas/general-consent.schema.ts new file mode 100644 index 00000000..e06c7240 --- /dev/null +++ b/app/schemas/general-consent.schema.ts @@ -0,0 +1,16 @@ +import { z } from 'zod' +import type { CreateDto } from '~/models/general-consent' + +const GeneralConsentSchema = z.object({ + relatives: z.array(z.object({ name: z.string(), phone: z.string() })), + responsibleName: z.string().optional(), + responsiblePhone: z.string().optional(), + informant: z.string().optional(), + witness1: z.string().optional(), + witness2: z.string().optional(), +}) + +type GeneralConsentFormData = z.infer & CreateDto + +export { GeneralConsentSchema } +export type { GeneralConsentFormData } diff --git a/app/services/general-consent.service.ts b/app/services/general-consent.service.ts new file mode 100644 index 00000000..2a6611fc --- /dev/null +++ b/app/services/general-consent.service.ts @@ -0,0 +1,23 @@ +import * as base from './_crud-base' + +const path = '/api/v1/general-consent' + +export function create(data: any) { + return base.create(path, data) +} + +export function getList(params: any = null) { + return base.getList(path, params) +} + +export function getDetail(id: number | string) { + return base.getDetail(path, id) +} + +export function update(id: number | string, data: any) { + return base.update(path, id, data) +} + +export function remove(id: number | string) { + return base.remove(path, id) +} diff --git a/app/services/generate-file.service.ts b/app/services/generate-file.service.ts new file mode 100644 index 00000000..5849e3d0 --- /dev/null +++ b/app/services/generate-file.service.ts @@ -0,0 +1,15 @@ +import * as base from './_crud-base' + +const path = '/api/v1/generate-file' + +export function create(data: any) { + return base.create(path, data) +} + +export function getList(params: any = null) { + return base.getList(path, params) +} + +export function getDetail(id: number | string) { + return base.getDetail(path, id) +}