import { z } from "zod/v4"; import { PersonPhotoVersionSchema } from "../../person-photo"; const OptionalText = z.string().max(100).nullable(); export const PersonFieldsSchema = z.strictObject({ name: z .string() .min(1) .max(100) .refine((value) => value.trim().length > 0), position: OptionalText, email: z.email().max(254).nullable(), phone: z.string().min(3).max(50).nullable(), active: z.boolean(), isContact: z.boolean(), }); export const PersonSchema = PersonFieldsSchema.extend({ id: z.uuid(), companyId: z.uuid(), photoVersion: PersonPhotoVersionSchema.nullable().optional() }); export type PersonDTO = z.infer; export const DepartmentFieldsSchema = z.strictObject({ name: z .string() .min(1) .max(100) .refine((value) => value.trim().length > 0), active: z.boolean(), }); export const DepartmentSchema = DepartmentFieldsSchema.extend({ id: z.uuid(), companyId: z.uuid(), }); export type DepartmentDTO = z.infer; export const AssignmentFieldsSchema = z.strictObject({ position: OptionalText, startDate: z.iso.date(), endDate: z.iso.date().nullable(), isPrimary: z.boolean(), }); export const AssignmentRevisionSchema = AssignmentFieldsSchema.extend({ id: z.uuid(), recordedAt: z.iso.datetime(), }); export const DepartmentAssignmentSchema = AssignmentFieldsSchema.extend({ id: z.uuid(), companyId: z.uuid(), personId: z.uuid(), departmentId: z.uuid(), history: z.array(AssignmentRevisionSchema), }); export type DepartmentAssignmentDTO = z.infer;