73 lines
1.9 KiB
TypeScript
73 lines
1.9 KiB
TypeScript
import { z } from 'zod'
|
|
|
|
const dateStringSchema = z.string().min(1)
|
|
|
|
export const chemotherapySchema = z.object({
|
|
// Data Pasien
|
|
namaPasien: z.string({
|
|
required_error: 'Nama pasien harus diisi',
|
|
}).min(1, 'Nama pasien harus diisi'),
|
|
|
|
tanggalLahir: z.string({
|
|
required_error: 'Tanggal lahir harus diisi',
|
|
}).min(1, 'Tanggal lahir harus diisi'),
|
|
|
|
noRM: z.string({
|
|
required_error: 'Nomor RM harus diisi',
|
|
}).min(1, 'Nomor RM harus diisi'),
|
|
|
|
alamat: z.string({
|
|
required_error: 'Alamat harus diisi',
|
|
}).min(1, 'Alamat harus diisi'),
|
|
|
|
beratBadan: z.union([
|
|
z.string(),
|
|
z.number()
|
|
]).transform(val => val === '' ? null : Number(val))
|
|
.refine(val => val === null || (val >= 0 && val <= 500), {
|
|
message: 'Berat badan harus di antara 0-500 kg',
|
|
}),
|
|
|
|
tinggiBadan: z.union([
|
|
z.string(),
|
|
z.number()
|
|
]).transform(val => val === '' ? null : Number(val))
|
|
.refine(val => val === null || (val >= 0 && val <= 300), {
|
|
message: 'Tinggi badan harus di antara 0-300 cm',
|
|
}),
|
|
|
|
diagnosa: z.string({
|
|
required_error: 'Diagnosa harus dipilih',
|
|
}).min(1, 'Diagnosa harus dipilih'),
|
|
|
|
// Protokol Kemoterapi
|
|
siklus: z.string({
|
|
required_error: 'Siklus harus diisi',
|
|
}).min(1, 'Siklus harus diisi'),
|
|
|
|
periodeAwal: z.string({
|
|
required_error: 'Periode awal harus diisi',
|
|
}).min(1, 'Periode awal harus diisi'),
|
|
|
|
periodeAkhir: dateStringSchema.refine((val) => {
|
|
if (!val) return false
|
|
const date = new Date(val)
|
|
return !isNaN(date.getTime())
|
|
}, {
|
|
message: 'Format tanggal tidak valid'
|
|
}),
|
|
|
|
tanggalKemoterapi: dateStringSchema.refine((val) => {
|
|
if (!val) return false
|
|
const date = new Date(val)
|
|
return !isNaN(date.getTime())
|
|
}, {
|
|
message: 'Format tanggal tidak valid'
|
|
}),
|
|
|
|
dokterKRJ: z.string({
|
|
required_error: 'Dokter harus dipilih',
|
|
}).refine(val => val !== '', {
|
|
message: 'Dokter harus dipilih',
|
|
}),
|
|
}) |