195 lines
4.6 KiB
Text
195 lines
4.6 KiB
Text
generator client {
|
|
provider = "prisma-client-js"
|
|
}
|
|
|
|
datasource db {
|
|
provider = "postgresql"
|
|
url = env("DATABASE_URL")
|
|
}
|
|
|
|
enum BillingCycle {
|
|
MONTHLY
|
|
YEARLY
|
|
}
|
|
|
|
enum SubscriptionStatus {
|
|
ACTIVE
|
|
PAST_DUE
|
|
CANCELED
|
|
TRIAL
|
|
}
|
|
|
|
enum InvoiceStatus {
|
|
PENDING
|
|
PAID
|
|
OVERDUE
|
|
CANCELED
|
|
}
|
|
|
|
enum PaymentStatus {
|
|
PENDING
|
|
CONFIRMED
|
|
FAILED
|
|
CANCELED
|
|
}
|
|
|
|
enum FiscalStatus {
|
|
DRAFT
|
|
ISSUED
|
|
CANCELED
|
|
}
|
|
|
|
enum DealStage {
|
|
LEAD
|
|
PROPOSAL
|
|
NEGOTIATION
|
|
WON
|
|
LOST
|
|
}
|
|
|
|
model Tenant {
|
|
id String @id @default(uuid())
|
|
name String
|
|
taxId String?
|
|
status String @default("ACTIVE")
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
subscriptions Subscription[]
|
|
invoices Invoice[]
|
|
payments Payment[]
|
|
fiscalDocs FiscalDocument[]
|
|
crmCompanies CrmCompany[]
|
|
crmContacts CrmContact[]
|
|
crmDeals CrmDeal[]
|
|
}
|
|
|
|
model Plan {
|
|
id String @id @default(uuid())
|
|
name String
|
|
priceCents Int
|
|
billingCycle BillingCycle
|
|
softLimit Int?
|
|
hardLimit Int?
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
subscriptions Subscription[]
|
|
}
|
|
|
|
model Subscription {
|
|
id String @id @default(uuid())
|
|
tenantId String
|
|
planId String
|
|
status SubscriptionStatus @default(ACTIVE)
|
|
startDate DateTime
|
|
nextDueDate DateTime
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
tenant Tenant @relation(fields: [tenantId], references: [id])
|
|
plan Plan @relation(fields: [planId], references: [id])
|
|
invoices Invoice[]
|
|
|
|
@@index([tenantId])
|
|
@@index([planId])
|
|
}
|
|
|
|
model Invoice {
|
|
id String @id @default(uuid())
|
|
tenantId String
|
|
subscriptionId String?
|
|
amountCents Int
|
|
dueDate DateTime
|
|
status InvoiceStatus @default(PENDING)
|
|
paidAt DateTime?
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
tenant Tenant @relation(fields: [tenantId], references: [id])
|
|
subscription Subscription? @relation(fields: [subscriptionId], references: [id])
|
|
payments Payment[]
|
|
|
|
@@index([tenantId])
|
|
@@index([subscriptionId])
|
|
}
|
|
|
|
model Payment {
|
|
id String @id @default(uuid())
|
|
tenantId String
|
|
invoiceId String
|
|
gateway String
|
|
method String
|
|
externalId String?
|
|
status PaymentStatus @default(PENDING)
|
|
amountCents Int
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
invoice Invoice @relation(fields: [invoiceId], references: [id])
|
|
tenant Tenant @relation(fields: [tenantId], references: [id])
|
|
|
|
@@index([tenantId])
|
|
@@index([invoiceId])
|
|
@@unique([gateway, externalId])
|
|
}
|
|
|
|
model FiscalDocument {
|
|
id String @id @default(uuid())
|
|
tenantId String
|
|
invoiceId String?
|
|
number String?
|
|
status FiscalStatus @default(DRAFT)
|
|
pdfUrl String?
|
|
xmlUrl String?
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
tenant Tenant @relation(fields: [tenantId], references: [id])
|
|
invoice Invoice? @relation(fields: [invoiceId], references: [id])
|
|
|
|
@@index([tenantId])
|
|
@@index([invoiceId])
|
|
}
|
|
|
|
model CrmCompany {
|
|
id String @id @default(uuid())
|
|
tenantId String
|
|
name String
|
|
segment String?
|
|
website String?
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
tenant Tenant @relation(fields: [tenantId], references: [id])
|
|
contacts CrmContact[]
|
|
deals CrmDeal[]
|
|
|
|
@@index([tenantId])
|
|
}
|
|
|
|
model CrmContact {
|
|
id String @id @default(uuid())
|
|
tenantId String
|
|
companyId String?
|
|
name String
|
|
email String?
|
|
phone String?
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
tenant Tenant @relation(fields: [tenantId], references: [id])
|
|
company CrmCompany? @relation(fields: [companyId], references: [id])
|
|
|
|
@@index([tenantId])
|
|
@@index([companyId])
|
|
}
|
|
|
|
model CrmDeal {
|
|
id String @id @default(uuid())
|
|
tenantId String
|
|
companyId String?
|
|
name String
|
|
stage DealStage @default(LEAD)
|
|
valueCents Int
|
|
expectedAt DateTime?
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
tenant Tenant @relation(fields: [tenantId], references: [id])
|
|
company CrmCompany? @relation(fields: [companyId], references: [id])
|
|
|
|
@@index([tenantId])
|
|
@@index([companyId])
|
|
}
|