import { z } from "zod/v4"; /** * Este esquema es para validar los datos del formulario de actualización de cliente. * No tiene por qué coincidir con el shape de la entidad ni con el de la API. * Solo define los campos que se muestran en el formulario y sus validaciones. * * Reglas: * - no meter transformaciones silenciosas raras en el esquema (ej: .toUpperCase()) * - nombres en camelCase * - tipos orientados a UI/form * - sin campos de solo lectura que no se editen * - sin shape DTO * - sin detalles impuestos por el widget */ export const CustomerUpdateFormSchema = z.object({ reference: z.string().optional().or(z.literal("")), isCompany: z.boolean(), name: z.string().min(1, "El nombre es obligatorio"), tradeName: z.string().optional().or(z.literal("")), tin: z.string(), defaultTaxes: z.array(z.string()), street: z.string().optional().or(z.literal("")), street2: z.string().optional().or(z.literal("")), city: z.string().optional().or(z.literal("")), province: z.string().optional().or(z.literal("")), postalCode: z.string().optional().or(z.literal("")), country: z.string().min(1, "El país es obligatorio").optional().or(z.literal("")), primaryEmail: z.email("Email inválido").optional().or(z.literal("")), secondaryEmail: z.email("Email inválido").optional().or(z.literal("")), primaryPhone: z.string().optional().or(z.literal("")), secondaryPhone: z.string().optional().or(z.literal("")), primaryMobile: z.string().optional().or(z.literal("")), secondaryMobile: z.string().optional().or(z.literal("")), fax: z.string().optional().or(z.literal("")), website: z.url("URL inválida").optional().or(z.literal("")), legalRecord: z.string().optional().or(z.literal("")), languageCode: z.string().min(1, "El idioma es obligatorio"), currencyCode: z.string().min(1, "La moneda es obligatoria"), });