import { z } from 'zod'; /** * Campos numéricos ficam como `z.number()` puro (sem `coerce`/`preprocess`) * de propósito — a conversão string→number do `` * acontece no `register(...)` do react-hook-form (`valueAsNumber`/ * `setValueAs`), não no schema. Misturar as duas coisas faz o tipo de * entrada do formulário (`z.input`) divergir do tipo de saída (`z.infer`) e * quebra a inferência de tipos do `zodResolver`. */ const optionalInt = z.number().int().min(1, 'Deve ser pelo menos 1').optional(); /** Espelha `CreatePlanoDto`/`UpdatePlanoDto` (`src/modules/planos/dto/`). */ export const planoSchema = z.object({ nome: z.string().min(2, 'Informe pelo menos 2 caracteres'), descricao: z.string().optional(), valor_mensal: z.number('Informe um valor').positive('O valor deve ser maior que zero'), limite_customers: optionalInt, limite_usuarios: optionalInt, limite_instancias_whatsapp: optionalInt, }); export type PlanoFormValues = z.infer;