mbois gak rek?

This commit is contained in:
Khafid Prayoga
2025-12-08 12:19:14 +07:00
parent b5846adb7e
commit 52a6935d07
47 changed files with 3304 additions and 297 deletions

No files matched your search

+121
View File
@@ -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<typeof ActionReportSchema>
-83
View File
@@ -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<typeof AssessmentEducationSchema>
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
}
+2 -3
View File
@@ -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<typeof CheckInSchema>