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;