aboutsummaryrefslogtreecommitdiff
path: root/api/src/db/schema/incomes.ts
diff options
context:
space:
mode:
authorLucas Faria Mendes <lucas.fariamo08@gmail.com>2026-08-16 23:17:42 +0000
committerLucas Faria Mendes <lucas.fariamo08@gmail.com>2026-08-16 23:17:42 +0000
commit375482e654a01615683867e732ac9e458c7cbe74 (patch)
tree12d1b31b8deb6bf8590bcdbc2cfb52dcc553e006 /api/src/db/schema/incomes.ts
parent2c2dfba45357bbd205a59145ae55a2779c911ae0 (diff)
downloadyaba-master.tar.gz
yaba-master.zip
feat: upload yaba srcHEADmaster
Signed-off-by: Lucas Faria Mendes <lucas.fariamo08@gmail.com>
Diffstat (limited to 'api/src/db/schema/incomes.ts')
-rw-r--r--api/src/db/schema/incomes.ts51
1 files changed, 51 insertions, 0 deletions
diff --git a/api/src/db/schema/incomes.ts b/api/src/db/schema/incomes.ts
new file mode 100644
index 0000000..f502cb9
--- /dev/null
+++ b/api/src/db/schema/incomes.ts
@@ -0,0 +1,51 @@
+import { sql } from 'drizzle-orm';
+import { integer, real, sqliteTable, text } from 'drizzle-orm/sqlite-core';
+import { users } from './users';
+
+/**
+ * Tabela de rendas/salários.
+ * Armazena o histórico de salários por mês/ano, permitindo que o usuário
+ * tenha registros diferentes para cada período (ex: aumento de salário em julho).
+ */
+export const incomes = sqliteTable('incomes', {
+ id: integer('id').primaryKey({ autoIncrement: true }),
+
+ user_id: integer('user_id')
+ .notNull()
+ .references(() => users.id, { onDelete: 'cascade' }),
+
+ /** Salário bruto do período (em R$) */
+ gross_salary: real('gross_salary').notNull(),
+
+ /**
+ * Salário líquido calculado automaticamente pelo app (INSS + IRRF).
+ * Armazenado para fins de histórico e auditoria.
+ */
+ calculated_net_salary: real('calculated_net_salary').notNull(),
+
+ /**
+ * Salário líquido efetivo usado no cálculo do saldo.
+ * Pode diferir do calculado caso o usuário tenha feito um override manual.
+ */
+ effective_net_salary: real('effective_net_salary').notNull(),
+
+ /** Mês de referência (1-12) */
+ reference_month: integer('reference_month').notNull(),
+
+ /** Ano de referência (ex: 2025) */
+ reference_year: integer('reference_year').notNull(),
+
+ /** Observações opcionais (ex: "13º salário", "PLR") */
+ description: text('description'),
+
+ created_at: text('created_at')
+ .notNull()
+ .default(sql`(strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))`),
+
+ updated_at: text('updated_at')
+ .notNull()
+ .default(sql`(strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))`),
+});
+
+export type Income = typeof incomes.$inferSelect;
+export type NewIncome = typeof incomes.$inferInsert;