From 375482e654a01615683867e732ac9e458c7cbe74 Mon Sep 17 00:00:00 2001 From: Lucas Faria Mendes Date: Sun, 16 Aug 2026 20:17:42 -0300 Subject: feat: upload yaba src Signed-off-by: Lucas Faria Mendes --- api/src/modules/incomes/incomes.schema.ts | 38 +++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 api/src/modules/incomes/incomes.schema.ts (limited to 'api/src/modules/incomes/incomes.schema.ts') diff --git a/api/src/modules/incomes/incomes.schema.ts b/api/src/modules/incomes/incomes.schema.ts new file mode 100644 index 0000000..cc661fd --- /dev/null +++ b/api/src/modules/incomes/incomes.schema.ts @@ -0,0 +1,38 @@ +import { z } from 'zod'; + +export const createIncomeSchema = z.object({ + gross_salary: z.number().positive('Salário bruto deve ser positivo'), + /** + * Salário líquido efetivo (após override do usuário). + * Deve ser enviado pelo app após o cálculo de INSS/IRRF. + */ + calculated_net_salary: z.number().nonnegative(), + effective_net_salary: z.number().nonnegative(), + reference_month: z.number().int().min(1).max(12), + reference_year: z.number().int().min(2020).max(2100), + description: z.string().max(255).nullable().optional(), +}); + +export const updateIncomeSchema = z.object({ + gross_salary: z.number().positive().optional(), + calculated_net_salary: z.number().nonnegative().optional(), + effective_net_salary: z.number().nonnegative().optional(), + description: z.string().max(255).nullable().optional(), +}); + +export const incomeParamsSchema = z.object({ + userId: z.coerce.number().int().positive(), + id: z.coerce.number().int().positive(), +}); + +export const incomeUserParamsSchema = z.object({ + userId: z.coerce.number().int().positive(), +}); + +export const incomeQuerySchema = z.object({ + month: z.coerce.number().int().min(1).max(12).optional(), + year: z.coerce.number().int().min(2020).optional(), +}); + +export type CreateIncomeInput = z.infer; +export type UpdateIncomeInput = z.infer; -- cgit v1.2.3