generator client { provider = "prisma-client-js" } datasource db { provider = "postgresql" url = env("DATABASE_URL") } model User { id String @id @default(uuid()) email String @unique passwordHash String fullName String? phone String? companyName String? addressLine1 String? addressLine2 String? city String? state String? postalCode String? country String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt accounts Account[] rules Rule[] exports ExportLog[] auditLogs AuditLog[] } model Account { id String @id @default(uuid()) userId String institutionName String accountType String mask String? plaidAccessToken String? plaidItemId String? plaidAccountId String? @unique currentBalance Decimal? availableBalance Decimal? isoCurrencyCode String? lastBalanceSync DateTime? isActive Boolean @default(true) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt user User @relation(fields: [userId], references: [id]) transactionsRaw TransactionRaw[] } model TransactionRaw { id String @id @default(uuid()) accountId String bankTransactionId String @unique date DateTime amount Decimal description String rawPayload Json ingestedAt DateTime @default(now()) source String account Account @relation(fields: [accountId], references: [id]) derived TransactionDerived? ruleExecutions RuleExecution[] } model TransactionDerived { id String @id @default(uuid()) rawTransactionId String @unique userCategory String? userNotes String? isHidden Boolean @default(false) modifiedAt DateTime @default(now()) modifiedBy String raw TransactionRaw @relation(fields: [rawTransactionId], references: [id]) } model Rule { id String @id @default(uuid()) userId String name String priority Int conditions Json actions Json isActive Boolean @default(true) createdAt DateTime @default(now()) user User @relation(fields: [userId], references: [id]) executions RuleExecution[] } model RuleExecution { id String @id @default(uuid()) ruleId String transactionId String executedAt DateTime @default(now()) result Json rule Rule @relation(fields: [ruleId], references: [id]) transaction TransactionRaw @relation(fields: [transactionId], references: [id]) } model ExportLog { id String @id @default(uuid()) userId String filters Json rowCount Int createdAt DateTime @default(now()) user User @relation(fields: [userId], references: [id]) } model AuditLog { id String @id @default(uuid()) userId String action String metadata Json createdAt DateTime @default(now()) user User @relation(fields: [userId], references: [id]) }