+import { ErrorMessage } from 'vee-validate'
+import { cn } from '~/lib/utils'
+
+const props = defineProps<{
+ name: string
+ class?: string
+}>()
+
+
+
+
+
+ {{ message }}
+
+
+
diff --git a/app/components/pub/ui/form/index.ts b/app/components/pub/ui/form/index.ts
index 1a3be118..67c55c94 100644
--- a/app/components/pub/ui/form/index.ts
+++ b/app/components/pub/ui/form/index.ts
@@ -1,3 +1,4 @@
+export { default as ArrayMessage } from './array-message.vue'
export { default as FormControl } from './FormControl.vue'
export { default as FormDescription } from './FormDescription.vue'
export { default as FormItem } from './FormItem.vue'
diff --git a/app/schemas/treatment-report.schema.ts b/app/schemas/treatment-report.schema.ts
index dbaa9c23..02d60820 100644
--- a/app/schemas/treatment-report.schema.ts
+++ b/app/schemas/treatment-report.schema.ts
@@ -1,24 +1,34 @@
import { z } from 'zod'
-const isoDateTime = z.string().min(1, 'Tanggal / waktu wajib diisi')
+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')
+ .transform((val) => new Date(val).toISOString())
+
const positiveInt = z.coerce.number().int().nonnegative()
const OperatorTeamSchema = z.object({
dpjpId: z.coerce
.number({
- invalid_type_error: 'Dokter Pemeriksa wajib diisi',
+ invalid_type_error: 'Silahkan pilih dpjp terlebih dahulu',
})
.int(),
- operatorId: z.coerce
- .number({
- invalid_type_error: 'Operator wajib diisi',
- })
- .int(),
- assistantOperatorId: z.coerce.number().int().optional().nullable(),
- instrumentNurseId: z.coerce.number().int().optional().nullable(),
+ 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().min(1),
+ actionDiagnosis: z.string(),
postSurgeryNurseId: z.number().int().optional().nullable(),
})
@@ -58,17 +68,22 @@ const OperationExecutionSchema = z.object({
birthRemark: z.enum(['lahir_hidup', 'lahir_mati']).optional(),
})
-const BloodComponentSchema = z.object({
- used: z.boolean().default(false),
- volumeCc: positiveInt.optional(),
-})
-
-const BloodInputSchema = z.object({
- prc: BloodComponentSchema,
- ffp: BloodComponentSchema,
- wb: BloodComponentSchema,
- tc: BloodComponentSchema,
-})
+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(),
@@ -85,15 +100,15 @@ const SpecimenSchema = z.object({
const TissueNoteSchema = z.object({
note: z
- .string({
- required_error: 'Masukkan deskripsi catatan',
- })
- .min(1, { message: 'Setidaknya diperlukan 1 catatan' }),
+ .string()
+ .trim()
+ .transform((val) => (val === '' ? undefined : val))
+ .optional(),
})
export const TreatmentReportSchema = z.object({
operatorTeam: OperatorTeamSchema,
- procedures: z.array(ProcedureSchema).min(1),
+ procedures: z.array(ProcedureSchema).min(1, { message: 'Silahkan pilih prosedur' }),
operationExecution: OperationExecutionSchema,