enum BillingProvider { STRIPE MERCADOPAGO PAYPAL } enum BillingStatus { TRIAL ACTIVE PAST_DUE CANCELED SUSPENDED } model ComplexBilling { complexId String @id @map("complex_id") @db.Uuid status BillingStatus @default(TRIAL) planCode String @map("plan_code") @db.VarChar(10) currency String @db.VarChar(3) provider BillingProvider? providerCustomerId String? @map("provider_customer_id") providerSubscriptionId String? @map("provider_subscription_id") providerPreapprovalId String? @map("provider_preapproval_id") currentPeriodStart DateTime? @map("current_period_start") currentPeriodEnd DateTime? @map("current_period_end") trialEndsAt DateTime? @map("trial_ends_at") canceledAt DateTime? @map("canceled_at") suspendedAt DateTime? @map("suspended_at") createdAt DateTime @default(now()) @map("created_at") updatedAt DateTime @updatedAt @map("updated_at") complex Complex @relation(fields: [complexId], references: [id], onDelete: Cascade) events BillingEvent[] @@map("complex_billings") } model BillingEvent { id String @id @db.Uuid complexId String @map("complex_id") @db.Uuid eventType String @map("event_type") @db.VarChar(100) provider BillingProvider providerEventId String? @unique @map("provider_event_id") providerData Json? @map("provider_data") previousStatus BillingStatus? @map("previous_status") newStatus BillingStatus? @map("new_status") processedAt DateTime @default(now()) @map("processed_at") billing ComplexBilling @relation(fields: [complexId], references: [complexId]) @@index([provider, providerEventId]) @@index([complexId]) @@map("billing_events") }