Uecko_ERP/modules/customers/src/web/update/entities/customer-update-form.schema.ts
2026-04-20 21:15:35 +02:00

61 lines
1.7 KiB
TypeScript

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,
});