Uecko_ERP/modules/customers/src/web/update/entities/customer-update-form.schema.ts

49 lines
1.8 KiB
TypeScript
Raw Normal View History

2026-04-03 22:06:54 +00:00
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({
2026-04-03 22:52:56 +00:00
reference: z.string().optional().or(z.literal("")),
2026-04-03 22:06:54 +00:00
isCompany: z.boolean(),
name: z.string().min(1, "El nombre es obligatorio"),
2026-04-03 22:52:56 +00:00
tradeName: z.string().optional().or(z.literal("")),
2026-04-03 22:06:54 +00:00
tin: z.string(),
defaultTaxes: z.array(z.string()),
2026-04-03 22:52:56 +00:00
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("")),
2026-04-03 22:06:54 +00:00
2026-04-03 22:52:56 +00:00
primaryEmail: z.email("Email inválido").optional().or(z.literal("")),
secondaryEmail: z.email("Email inválido").optional().or(z.literal("")),
2026-04-03 22:06:54 +00:00
2026-04-03 22:52:56 +00:00
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("")),
2026-04-03 22:06:54 +00:00
2026-04-03 22:52:56 +00:00
fax: z.string().optional().or(z.literal("")),
website: z.url("URL inválida").optional().or(z.literal("")),
legalRecord: z.string().optional().or(z.literal("")),
2026-04-03 22:06:54 +00:00
languageCode: z.string().min(1, "El idioma es obligatorio"),
currencyCode: z.string().min(1, "La moneda es obligatoria"),
});