diff --git a/app/components/app/encounter/check-in-entry.vue b/app/components/app/encounter/check-in-entry.vue new file mode 100644 index 00000000..ad7de5d6 --- /dev/null +++ b/app/components/app/encounter/check-in-entry.vue @@ -0,0 +1,107 @@ + + + + + \ No newline at end of file diff --git a/app/components/app/encounter/check-in-view.vue b/app/components/app/encounter/check-in-view.vue new file mode 100644 index 00000000..a3b6ab53 --- /dev/null +++ b/app/components/app/encounter/check-in-view.vue @@ -0,0 +1,56 @@ + + + + + \ No newline at end of file diff --git a/app/components/app/encounter/checkout-entry.vue b/app/components/app/encounter/check-out-entry.vue similarity index 53% rename from app/components/app/encounter/checkout-entry.vue rename to app/components/app/encounter/check-out-entry.vue index fa75911b..fb8b4333 100644 --- a/app/components/app/encounter/checkout-entry.vue +++ b/app/components/app/encounter/check-out-entry.vue @@ -1,5 +1,6 @@ \ No newline at end of file diff --git a/app/models/death-cause.ts b/app/models/death-cause.ts new file mode 100644 index 00000000..0f04609a --- /dev/null +++ b/app/models/death-cause.ts @@ -0,0 +1,6 @@ +export interface DeathCause { + id: bigint; + encounter_id: bigint; + value: any; // json mapped to 'any' type +} + \ No newline at end of file diff --git a/app/models/encounter.ts b/app/models/encounter.ts index 681a2ac9..fb2c0b04 100644 --- a/app/models/encounter.ts +++ b/app/models/encounter.ts @@ -1,5 +1,7 @@ +import type { DeathCause } from "./death-cause" import { type Doctor, genDoctor } from "./doctor" import { genEmployee, type Employee } from "./employee" +import type { InternalReference } from "./internal-reference" import { type Patient, genPatient } from "./patient" import type { Specialist } from "./specialist" import type { Subspecialist } from "./subspecialist" @@ -29,8 +31,11 @@ export interface Encounter { earlyEducation?: string medicalDischargeEducation: string admDischargeEducation?: string - dischargeMethod_code?: string + discharge_method_code?: string discharge_reason?: string + discharge_date?: string + internalReferences?: InternalReference[] + deathCause?: DeathCause status_code: string } diff --git a/app/models/internal-reference.ts b/app/models/internal-reference.ts new file mode 100644 index 00000000..8af315a8 --- /dev/null +++ b/app/models/internal-reference.ts @@ -0,0 +1,12 @@ +export interface InternalReference { + id: number; + encounter_id: number; + unit_id: number; // smallint mapped to number + doctor_id: number; // int mapped to number +} + +export interface CreateDto { + encounter_id: number; + unit_id: number; // smallint mapped to number + doctor_id: number; // int mapped to number +} \ No newline at end of file diff --git a/app/schemas/encounter.schema.ts b/app/schemas/encounter.schema.ts index 49636222..e3c9affc 100644 --- a/app/schemas/encounter.schema.ts +++ b/app/schemas/encounter.schema.ts @@ -1,31 +1,48 @@ import { z } from 'zod' +import { InternalReferenceSchema } from './internal-reference.schema' // Check In const CheckInSchema = z.object({ - registeredAt: z.string({ required_error: 'Tanggal masuk harus diisi' }), + // registeredAt: z.string({ required_error: 'Tanggal masuk 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 -// Check Out Consul Polis -const ConsulPoliesSchema = z.object({ - unit_id: z.number(), - responsible_doctor_id: z.number(), - -}) -type ConsulPoliesFormData = z.infer - // Checkout const CheckOutSchema = z.object({ - dischargeMethod_code: z.string({ required_error: 'Metode pulang harus diisi' }), - // unit_id: z.number(), - consulPolies: z.array(ConsulPoliesSchema), - responsible_doctor_id: z.number(), - + discharge_method_code: z.string({ required_error: 'Metode pulang harus diisi' }), + discharge_date: z.string({ required_error: 'Tanggal pulang harus diisi' }), }) type CheckOutFormData = z.infer +// CheckoutDeath +const CheckOutDeathSchema = z.object({ + discharge_method_code: z.string({ required_error: 'Metode pulang harus diisi' }), + discharge_date: z.string({ required_error: 'Tanggal pulang harus diisi' }), + death_cause: z.array(z.string()).nonempty(), +}) +type CheckOutDeathFormData = z.infer + +// CheckoutDeath +const CheckOutInternalReferenceSchema = z.object({ + discharge_method_code: z.string({ required_error: 'Metode pulang harus diisi' }), + discharge_date: z.string({ required_error: 'Tanggal pulang harus diisi' }), + internalReferences: z.array(InternalReferenceSchema).nonempty(), +}) +type CheckOutInternalReferenceFormData = z.infer + + // Exports -export { CheckInSchema, CheckOutSchema } -export type { CheckInFormData, CheckOutFormData, ConsulPoliesFormData } +export { + CheckInSchema, + CheckOutSchema, + CheckOutDeathSchema, + CheckOutInternalReferenceSchema +} +export type { + CheckInFormData, + CheckOutFormData, + CheckOutDeathFormData, + CheckOutInternalReferenceFormData +} diff --git a/app/schemas/internal-reference.schema.ts b/app/schemas/internal-reference.schema.ts new file mode 100644 index 00000000..eae75319 --- /dev/null +++ b/app/schemas/internal-reference.schema.ts @@ -0,0 +1,12 @@ +import { z } from 'zod' +import type { InternalReference } from '~/models/internal-reference' + +const InternalReferenceSchema = z.object({ + 'unit_id': z.number({ required_error: 'Kode harus diisi' }).min(1, 'Kode minimum 1 karakter'), + 'doctor_id': z.number({ required_error: 'Kode harus diisi' }).min(1, 'Kode minimum 1 karakter'), +}) + +type InternalReferenceFormData = z.infer & Partial + +export { InternalReferenceSchema } +export type { InternalReferenceFormData } diff --git a/app/services/doctor.service.ts b/app/services/doctor.service.ts index 34f21f1a..64ab22e9 100644 --- a/app/services/doctor.service.ts +++ b/app/services/doctor.service.ts @@ -2,7 +2,7 @@ import * as base from './_crud-base' import type { Doctor } from "~/models/doctor"; -const path = '/api/v1/device' +const path = '/api/v1/doctor' const name = 'device' export function create(data: any) { diff --git a/app/services/employee.service.ts b/app/services/employee.service.ts index d3691c83..366ef71e 100644 --- a/app/services/employee.service.ts +++ b/app/services/employee.service.ts @@ -31,7 +31,7 @@ export async function getValueLabelList(params: any = null): Promise<{ value: st const resultData = result.body?.data || [] data = resultData.map((item: any) => ({ value: item.id ? Number(item.id) : item.code, - label: item.name, + label: item.person.name, })) } return data diff --git a/app/services/encounter.service.ts b/app/services/encounter.service.ts index cd7c28ed..6e42fd41 100644 --- a/app/services/encounter.service.ts +++ b/app/services/encounter.service.ts @@ -1,4 +1,5 @@ // Base +import type { CheckInFormData } from '~/schemas/encounter.schema' import * as base from './_crud-base' // Constants @@ -46,3 +47,16 @@ export function getValueLabelListConstants() { .filter(([key]) => allowed.includes(key)) .map(([key, value]) => ({ value: key, label: value })) } + +export async function checkIn(id: number, data: CheckInFormData) { + try { + const resp = await xfetch(`${path}/${id}/check-in`, 'PATCH', data) + const result: any = {} + result.success = resp.success + result.body = (resp.body as Record) || {} + return result + } catch (error) { + console.error(`Error putting ${name}:`, error) + throw new Error(`Failed to put ${name}`) + } +} \ No newline at end of file