import { CountryCodeSchema, CurrencyCodeSchema, LandPhoneSchema, LanguageCodeSchema, MobilePhoneSchema, PostalCodeSchema, TinSchema, URLSchema, } from "@erp/core"; 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 * - acepta "" en campos opcionales * - 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(), isCompany: z.boolean(), name: z.string().min(1, "El nombre es obligatorio"), tradeName: z.string(), tin: TinSchema, defaultTaxes: z.array(z.string()), street: z.string(), street2: z.string(), city: z.string(), province: z.string(), postalCode: PostalCodeSchema.or(z.literal("")), country: CountryCodeSchema.or(z.literal("")), primaryEmail: z.email("Email inválido").or(z.literal("")), secondaryEmail: z.email("Email inválido").or(z.literal("")), primaryPhone: LandPhoneSchema.or(z.literal("")), secondaryPhone: LandPhoneSchema.or(z.literal("")), primaryMobile: MobilePhoneSchema.or(z.literal("")), secondaryMobile: MobilePhoneSchema.or(z.literal("")), fax: LandPhoneSchema.or(z.literal("")).or(z.literal("")), website: URLSchema.or(z.literal("")).or(z.literal("")), legalRecord: z.string().or(z.literal("")), languageCode: LanguageCodeSchema, currencyCode: CurrencyCodeSchema, });