Dev cleaning (#106)

This commit is contained in:
Munawwirul Jamal
2025-10-08 00:03:36 +07:00
committed by GitHub
parent 7fdd5c61f0
commit 3eb9dde21d
892 changed files with 51326 additions and 1 deletions

No files matched your search

View File
+12
View File
@@ -0,0 +1,12 @@
import { z } from 'zod'
import type { CodeName } from '~/models/_base'
const BaseSchema = z.object({
code: z.string({ required_error: 'Kode harus diisi' }).min(1, 'Kode minimum 1 karakter'),
name: z.string({ required_error: 'Nama harus diisi' }).min(1, 'Nama minimum 1 karakter'),
})
type BaseFormData = z.infer<typeof BaseSchema> & CodeName
export { BaseSchema }
export type { BaseFormData }
+13
View File
@@ -0,0 +1,13 @@
import { z } from 'zod'
import type { Device } from '~/models/device'
const DeviceSchema = z.object({
code: z.string({ required_error: 'Kode harus diisi' }).min(1, 'Kode minimum 1 karakter'),
name: z.string({ required_error: 'Nama harus diisi' }).min(1, 'Nama minimum 1 karakter'),
uom_code: z.string({ required_error: 'Kode unit harus diisi' }).min(1, 'Kode unit harus diisi'),
})
type DeviceFormData = z.infer<typeof DeviceSchema> & Device
export { DeviceSchema }
export type { DeviceFormData }
+18
View File
@@ -0,0 +1,18 @@
import { z } from 'zod'
import type { Division } from '~/models/division'
import type { DivisionPosition } from '~/models/division-position'
const DivisionSchema = z.object({
code: z.string({ required_error: 'Kode harus diisi' }).min(1, 'Kode minimum 1 karakter'),
name: z.string({ required_error: 'Nama harus diisi' }).min(1, 'Nama minimum 1 karakter'),
parent_id: z.union([
z.string({ required_error: 'Divisi Induk harus diisi' }),
z.number({ required_error: 'Divisi Induk harus diisi' })
]).optional().nullable(),
division_id: z.string({ required_error: 'Divisi Induk harus diisi' }).optional().nullable(),
})
type DivisionFormData = z.infer<typeof DivisionSchema> & (Division | DivisionPosition)
export { DivisionSchema }
export type { DivisionFormData }
+20
View File
@@ -0,0 +1,20 @@
import { z } from 'zod'
import type { Infra } from '~/models/infra'
const InfraSchema = z.object({
code: z.string({ required_error: 'Kode harus diisi' }).min(1, 'Kode minimum 1 karakter'),
name: z.string({ required_error: 'Nama harus diisi' }).min(1, 'Nama minimum 1 karakter'),
infraGroup_code: z.string().min(1, 'Infra Group harus diisi'),
parent_id: z
.union([z.string({ required_error: 'Induk harus diisi' }), z.number({ required_error: 'Induk harus diisi' })])
.optional()
.nullable(),
specialist_id: z.union([z.string(), z.number()]).nullable().optional(),
subspecialist_id: z.union([z.string(), z.number()]).nullable().optional(),
unit_id: z.union([z.string(), z.number()]).nullable().optional(),
})
type InfraFormData = z.infer<typeof InfraSchema> & Infra
export { InfraSchema }
export type { InfraFormData }
+9
View File
@@ -0,0 +1,9 @@
import { z } from 'zod'
export const InstallationSchema = z.object({
code: z.string().min(1, 'Kode wajib diisi'),
name: z.string().min(1, 'Nama wajib diisi'),
encounterClass_code: z.string().min(1, 'Encounter Class wajib diisi').optional(),
})
export type InstallationFormData = z.infer<typeof InstallationSchema>
+14
View File
@@ -0,0 +1,14 @@
import { z } from 'zod'
import type { Material } from '~/models/material'
const MaterialSchema = z.object({
code: z.string({ required_error: 'Kode harus diisi' }).min(1, 'Kode minimum 1 karakter'),
name: z.string({ required_error: 'Nama harus diisi' }).min(1, 'Nama minimum 1 karakter'),
uom_code: z.string({ required_error: 'Kode unit harus diisi' }).min(1, 'Kode unit harus diisi'),
stock: z.preprocess((val) => Number(val), z.number({ invalid_type_error: 'Stok harus berupa angka' }).min(1, 'Stok harus lebih besar dari 0')),
})
type MaterialFormData = z.infer<typeof MaterialSchema> & Material
export { MaterialSchema }
export type { MaterialFormData }
+13
View File
@@ -0,0 +1,13 @@
import { z } from 'zod'
export const MedicineSchema = z.object({
code: z.string({ required_error: 'Kode harus diisi' }).min(1, 'Kode minimal 1 karakter'),
name: z.string({ required_error: 'Nama harus diisi' }).min(1, 'Nama minimal 1 karakter'),
medicineGroup_code: z.string({ required_error: 'Kelompok obat harus diisi' }).min(1, 'Kelompok obat harus diisi'),
medicineMethod_code: z.string({ required_error: 'Metode pemberian harus diisi' }).min(1, 'Metode pemberian harus diisi'),
uom_code: z.string({ required_error: 'Satuan harus diisi' }).min(1, 'Satuan harus diisi'),
infra_id: z.number().nullable().optional(),
stock: z.preprocess((val) => Number(val), z.number({ invalid_type_error: 'Stok harus berupa angka' }).min(1, 'Stok harus lebih besar dari 0')),
})
export type MedicineFormData = z.infer<typeof MedicineSchema>
+114
View File
@@ -0,0 +1,114 @@
import { z } from 'zod'
const CommunicationBarrierSchema = z
.enum(['YA', 'TIDAK'], {
required_error: 'Mohon lengkapi Status Hambatan Berkomunikasi',
})
.transform((val) => val === 'YA')
const PatientSchema = z
.object({
// Data Diri Pasien
identityNumber: z
.string({
required_error: 'Mohon lengkapi NIK',
})
.min(16, 'NIK harus berupa angka 16 digit')
.regex(/^\d+$/, 'NIK harus berupa angka 16 digit'),
// identityCardFile: z.instanceof(File, { message: 'File KTP harus dipilih' }),
// familyCardFile: z.instanceof(File, { message: 'File KK harus dipilih' }),
// Informasi Dasar
alias: z.string({
required_error: 'Mohon pilih sapaan',
}),
fullName: z.string({
required_error: 'Mohon lengkapi Nama',
}),
birthPlace: z
.string({
required_error: 'Mohon lengkapi Tempat Lahir',
})
.min(1, 'Mohon lengkapi Tempat Lahir'),
birthDate: z
.string({
required_error: 'Mohon lengkapi Tanggal Lahir',
})
.refine(
(date) => {
// Jika kosong, return false untuk required validation
if (!date || date.trim() === '') return false
// Jika ada isi, validasi format tanggal
try {
const dateObj = new Date(date)
// Cek apakah tanggal valid dan tahun >= 1900
return !isNaN(dateObj.getTime()) && dateObj.getFullYear() >= 1900
} catch {
return false
}
},
{
message: 'Mohon lengkapi Tanggal Lahir dengan format yang valid',
},
)
.transform((dateStr) => new Date(dateStr).toISOString()),
// Jenis Kelamin & Status
gender: z.string({
required_error: 'Pilih Jenis Kelamin',
}),
maritalStatus: z.enum(['TIDAK_DIKETAHUI', 'BELUM_KAWIN', 'KAWIN', 'CERAI_HIDUP', 'CERAI_MATI'], {
required_error: 'Pilih Status Perkawinan',
}),
// Informasi Lokasi & Sosial
job: z
.string({
required_error: 'Mohon lengkapi Pekerjaan',
})
.min(1),
nationality: z.string({
required_error: 'Pilih Kebangsaan',
}),
language: z.string({
required_error: 'Mohon pilih Preferensi Bahasa',
}),
education: z
.string({
required_error: 'Mohon lengkapi Pendidikan',
})
.min(1),
religion: z
.string({
required_error: 'Pilih Kepercayaan',
})
.min(1),
ethnicity: z.string().optional(),
// Disabilitas
disability: z.enum(['YA', 'TIDAK'], {
required_error: 'Mohon lengkapi Status Disabilitas',
}),
disabilityType: z.string().optional(),
// Informasi Kontak
passportNumber: z.string().optional(),
communicationBarrier: CommunicationBarrierSchema,
note: z.string().optional(),
drivingLicenseNumber: z.string().optional(),
})
.refine((data) => (data.disability === 'TIDAK' ? !data.disabilityType : true), {
message: "DisabilityType hanya boleh diisi jika disability = 'YA'",
path: ['disabilityType'],
})
.refine((data) => (data.disability === 'YA' ? !!data.disabilityType?.trim() : true), {
message: 'Mohon pilih Jenis Disabilitas',
path: ['disabilityType'],
})
type PatientFormData = z.infer<typeof PatientSchema>
export { PatientSchema }
export type { PatientFormData }
@@ -0,0 +1,27 @@
import { z } from 'zod'
import { PersonAddressSchema } from './person-address.schema'
// Schema untuk alamat opsional ketika isSameAddress = '1'
const OptionalAddressSchema = PersonAddressSchema.partial()
// Schema untuk alamat required ketika isSameAddress = '0'
const RequiredAddressSchema = PersonAddressSchema
const PersonAddressRelativeSchema = z.discriminatedUnion('isSameAddress', [
z
.object({
isSameAddress: z.literal('1').default('1'),
})
.merge(OptionalAddressSchema),
z
.object({
isSameAddress: z.literal('0'),
})
.merge(RequiredAddressSchema),
])
type PersonAddressRelativeFormData = z.infer<typeof PersonAddressRelativeSchema>
export { PersonAddressRelativeSchema }
export type { PersonAddressRelativeFormData }
+32
View File
@@ -0,0 +1,32 @@
import { z } from 'zod'
const PersonAddressSchema = z.object({
address: z.string({
required_error: 'Mohon lengkapi alamat',
}),
province_code: z.string({
required_error: 'Mohon pilih provinsi',
}),
regency_code: z.string({
required_error: 'Mohon pilih kabupaten/kota',
}),
district_code: z.string({
required_error: 'Mohon pilih kecamatan',
}),
village_code: z.string({
required_error: 'Mohon pilih kelurahan',
}),
// diganti postalCode, zipCode hanya beberapa negara, kurang universal
postalCode: z.string({
required_error: 'Mohon lengkapi kode pos',
}),
// .min(5, 'Kode pos harus berupa angka 5 digit')
// .regex(/^\d+$/, 'Kode pos harus berupa angka 5 digit'),
rt: z.string().optional(),
rw: z.string().optional(),
})
type PersonAddressFormData = z.infer<typeof PersonAddressSchema>
export { PersonAddressSchema }
export type { PersonAddressFormData }
+15
View File
@@ -0,0 +1,15 @@
import { z } from 'zod'
const PersonContactBaseSchema = z.object({
contactType: z.string().min(1, 'Mohon pilih tipe kontak'),
contactNumber: z.string().min(8, 'Nomor minimal 8 digit'),
})
const PersonContactListSchema = z.object({
contacts: z.array(PersonContactBaseSchema).min(1, 'Minimal 1 kontak'),
})
type PersonContactFormData = z.infer<typeof PersonContactListSchema>
export { PersonContactListSchema, PersonContactBaseSchema }
export type { PersonContactFormData }
+33
View File
@@ -0,0 +1,33 @@
import { z } from 'zod'
const PersonFamilySchema = z.object({
relation: z.enum(['mother', 'father', 'guardian', 'emergency_contact']),
name: z
.string({
required_error: 'Mohon lengkapi nama',
})
.min(1, 'Mohon lengkapi nama'),
education: z
.string({
required_error: 'Mohon pilih pendidikan',
})
.min(1, 'Mohon pilih pendidikan'),
occupation: z.string().optional(),
})
const PersonFamiliesSchema = z.discriminatedUnion('shareFamilyData', [
z.object({
shareFamilyData: z.literal('0'),
families: z.array(PersonFamilySchema).optional().default([]),
}),
z.object({
shareFamilyData: z.literal('1'),
families: z.array(PersonFamilySchema).min(1, 'Minimal 1 kontak keluarga'),
}),
])
type PersonFamilyFormData = z.infer<typeof PersonFamilySchema>
type PersonFamiliesFormData = z.infer<typeof PersonFamiliesSchema>
export { PersonFamilySchema, PersonFamiliesSchema }
export type { PersonFamilyFormData, PersonFamiliesFormData }
+20
View File
@@ -0,0 +1,20 @@
import { z } from 'zod'
const ResponsibleContactPersonSchema = z.object({
relation: z.string({ required_error: 'Pilih jenis Penanggung Jawab' }).min(1, 'Pilih jenis Penanggung Jawab'),
name: z.string({ required_error: 'Mohon lengkapi Nama' }).min(3, 'Mohon lengkapi Nama'),
address: z.string({ required_error: 'Mohon lengkapi Alamat' }).min(3, 'Mohon lengkapi Alamat'),
phone: z
.string({ required_error: 'Mohon lengkapi Nomor HP' })
.min(8, 'Nomor HP minimal 10 digit')
.max(15, 'Nomor HP maksimal 15 digit'),
})
const ResponsiblePersonSchema = z.object({
contacts: z.array(ResponsibleContactPersonSchema).min(1, 'Minimal harus ada 1 penanggung jawab'),
})
type PersonRelativeFormData = z.infer<typeof ResponsiblePersonSchema>
export { ResponsiblePersonSchema }
export type { PersonRelativeFormData }
+16
View File
@@ -0,0 +1,16 @@
import { z } from 'zod'
import type { Specialist } from '~/models/specialist'
const SpecialistSchema = z.object({
code: z.string({ required_error: 'Kode harus diisi' }).min(1, 'Kode minimum 1 karakter'),
name: z.string({ required_error: 'Nama harus diisi' }).min(1, 'Nama minimum 1 karakter'),
unit_id: z
.union([z.string({ required_error: 'Unit harus diisi' }), z.number({ required_error: 'Unit harus diisi' })])
.optional()
.nullable(),
})
type SpecialistFormData = z.infer<typeof SpecialistSchema> & Specialist
export { SpecialistSchema }
export type { SpecialistFormData }
+19
View File
@@ -0,0 +1,19 @@
import { z } from 'zod'
import type { Subspecialist } from '~/models/subspecialist'
const SubspecialistSchema = z.object({
code: z.string({ required_error: 'Kode harus diisi' }).min(1, 'Kode minimum 1 karakter'),
name: z.string({ required_error: 'Nama harus diisi' }).min(1, 'Nama minimum 1 karakter'),
specialist_id: z
.union([
z.string({ required_error: 'Spesialis harus diisi' }),
z.number({ required_error: 'Spesialis harus diisi' }),
])
.optional()
.nullable(),
})
type SubspecialistFormData = z.infer<typeof SubspecialistSchema> & Subspecialist
export { SubspecialistSchema }
export type { SubspecialistFormData }
+19
View File
@@ -0,0 +1,19 @@
import { z } from 'zod'
import type { Unit } from '~/models/unit'
const UnitSchema = z.object({
code: z.string({ required_error: 'Kode harus diisi' }).min(1, 'Kode minimum 1 karakter'),
name: z.string({ required_error: 'Nama harus diisi' }).min(1, 'Nama minimum 1 karakter'),
installation_id: z
.union([
z.string({ required_error: 'Instalasi harus diisi' }),
z.number({ required_error: 'Instalasi harus diisi' }),
])
.optional()
.nullable(),
})
type UnitFormData = z.infer<typeof UnitSchema> & Unit
export { UnitSchema }
export type { UnitFormData }
+4
View File
@@ -0,0 +1,4 @@
import { BaseSchema, type BaseFormData } from './my-ui.schema'
export { BaseSchema as UomSchema }
export type { BaseFormData as UomFormData }