import { z } from 'zod'; /** Item da venda no formulário — inclui campos de exibição (`nome`/`valor_catalogo`) não enviados à API. */ export const saleItemFormSchema = z.object({ product_service_id: z.string().min(1, 'Selecione um produto'), nome: z.string(), quantidade: z.number().positive('Informe uma quantidade válida'), valor_unitario: z.number().nonnegative('Informe um valor válido'), valor_catalogo: z.number(), }); export type SaleItemFormValues = z.infer; export const saleParcelaFormSchema = z.object({ valor: z.number().positive('Informe um valor válido'), vencimento: z.string().min(1, 'Informe o vencimento'), }); export type SaleParcelaFormValues = z.infer; /** * Campos "de topo" da venda. A validação cruzada entre modo de parcelas e * soma-bate-com-total (mesma regra do backend, `sales.service.ts`) é * calculada ao vivo no componente, não aqui — dá pra mostrar a diferença * de forma incremental enquanto o usuário edita, em vez de só no submit. */ export const saleFormSchema = z.object({ customer_id: z.string().min(1, 'Selecione um cliente'), data_venda: z.string().min(1, 'Informe a data da venda'), desconto: z.number().min(0, 'O desconto não pode ser negativo'), observacoes: z.string().optional(), itens: z.array(saleItemFormSchema).min(1, 'Adicione pelo menos um item'), modoParcelas: z.enum(['automatico', 'manual']), numeroParcelas: z.number().int().min(1).optional(), parcelasManuais: z.array(saleParcelaFormSchema).optional(), }); export type SaleFormValues = z.infer;