Initial commit: LexMind - Plataforma Jurídica Inteligente
This commit is contained in:
338
prisma/schema.prisma
Normal file
338
prisma/schema.prisma
Normal file
@@ -0,0 +1,338 @@
|
||||
generator client {
|
||||
provider = "prisma-client-js"
|
||||
}
|
||||
|
||||
datasource db {
|
||||
provider = "postgresql"
|
||||
url = env("DATABASE_URL")
|
||||
}
|
||||
|
||||
model User {
|
||||
id String @id @default(cuid())
|
||||
name String
|
||||
email String @unique
|
||||
password String
|
||||
role UserRole @default(FREE)
|
||||
plan Plan @default(FREE)
|
||||
oabNumber String?
|
||||
oabState String?
|
||||
phone String?
|
||||
avatar String?
|
||||
credits Int @default(5)
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
stripeCustomerId String?
|
||||
stripePriceId String?
|
||||
stripeSubscriptionId String?
|
||||
apiKeys ApiKey[]
|
||||
chats Chat[]
|
||||
contractAudits ContractAudit[]
|
||||
documents Document[]
|
||||
prazos Prazo[]
|
||||
subscriptions Subscription[]
|
||||
templates Template[]
|
||||
usageLogs UsageLog[]
|
||||
uploads Upload[]
|
||||
processAnalyses ProcessAnalysis[]
|
||||
processosMonitorados ProcessoMonitorado[]
|
||||
}
|
||||
|
||||
model ApiKey {
|
||||
id String @id @default(cuid())
|
||||
key String @unique
|
||||
name String
|
||||
userId String
|
||||
active Boolean @default(true)
|
||||
createdAt DateTime @default(now())
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
}
|
||||
|
||||
model Document {
|
||||
id String @id @default(cuid())
|
||||
userId String
|
||||
type DocumentType
|
||||
title String
|
||||
prompt String
|
||||
content String
|
||||
wordCount Int @default(0)
|
||||
status DocumentStatus @default(GENERATING)
|
||||
area LegalArea
|
||||
tokens Int @default(0)
|
||||
cost Float @default(0)
|
||||
createdAt DateTime @default(now())
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
}
|
||||
|
||||
model Template {
|
||||
id String @id @default(cuid())
|
||||
name String
|
||||
description String
|
||||
type DocumentType
|
||||
area LegalArea
|
||||
prompt String
|
||||
isPublic Boolean @default(false)
|
||||
userId String?
|
||||
createdAt DateTime @default(now())
|
||||
user User? @relation(fields: [userId], references: [id])
|
||||
}
|
||||
|
||||
model Jurisprudencia {
|
||||
id String @id @default(cuid())
|
||||
tribunal String
|
||||
numero String
|
||||
ementa String
|
||||
data String
|
||||
area String
|
||||
relator String
|
||||
orgaoJulgador String
|
||||
tags String
|
||||
}
|
||||
|
||||
model Chat {
|
||||
id String @id @default(cuid())
|
||||
userId String
|
||||
title String
|
||||
createdAt DateTime @default(now())
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
messages ChatMessage[]
|
||||
}
|
||||
|
||||
model ChatMessage {
|
||||
id String @id @default(cuid())
|
||||
chatId String
|
||||
role MessageRole
|
||||
content String
|
||||
tokens Int @default(0)
|
||||
createdAt DateTime @default(now())
|
||||
chat Chat @relation(fields: [chatId], references: [id], onDelete: Cascade)
|
||||
}
|
||||
|
||||
model Subscription {
|
||||
id String @id @default(cuid())
|
||||
userId String
|
||||
plan Plan
|
||||
status SubscriptionStatus @default(ACTIVE)
|
||||
startDate DateTime @default(now())
|
||||
endDate DateTime?
|
||||
stripeId String?
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
}
|
||||
|
||||
model UsageLog {
|
||||
id String @id @default(cuid())
|
||||
userId String
|
||||
type UsageType
|
||||
tokens Int @default(0)
|
||||
cost Float @default(0)
|
||||
createdAt DateTime @default(now())
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
}
|
||||
|
||||
model Prazo {
|
||||
id String @id @default(cuid())
|
||||
userId String
|
||||
title String
|
||||
description String?
|
||||
processNumber String?
|
||||
court String?
|
||||
deadline DateTime
|
||||
alertDays Int @default(3)
|
||||
status PrazoStatus @default(PENDENTE)
|
||||
priority PrazoPriority @default(MEDIA)
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
}
|
||||
|
||||
model ContractAudit {
|
||||
id String @id @default(cuid())
|
||||
userId String
|
||||
title String
|
||||
content String
|
||||
analysis Json?
|
||||
status AuditStatus @default(PENDING)
|
||||
riskScore Int?
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
}
|
||||
|
||||
|
||||
model Upload {
|
||||
id String @id @default(cuid())
|
||||
userId String
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
filename String
|
||||
key String
|
||||
size Int
|
||||
mimeType String
|
||||
createdAt DateTime @default(now())
|
||||
}
|
||||
|
||||
enum UserRole {
|
||||
ADMIN
|
||||
ADVOGADO
|
||||
FREE
|
||||
}
|
||||
|
||||
enum Plan {
|
||||
FREE
|
||||
PRO
|
||||
ENTERPRISE
|
||||
STARTER
|
||||
}
|
||||
|
||||
enum DocumentType {
|
||||
PETICAO_INICIAL
|
||||
CONTESTACAO
|
||||
APELACAO
|
||||
RECURSO
|
||||
CONTRATO
|
||||
PARECER
|
||||
IMPUGNACAO
|
||||
HABEAS_CORPUS
|
||||
MANDADO_SEGURANCA
|
||||
OUTROS
|
||||
}
|
||||
|
||||
enum LegalArea {
|
||||
CIVIL
|
||||
TRABALHISTA
|
||||
PENAL
|
||||
TRIBUTARIO
|
||||
FAMILIA
|
||||
EMPRESARIAL
|
||||
CONSUMIDOR
|
||||
ADMINISTRATIVO
|
||||
}
|
||||
|
||||
enum DocumentStatus {
|
||||
GENERATING
|
||||
COMPLETED
|
||||
ERROR
|
||||
}
|
||||
|
||||
enum MessageRole {
|
||||
USER
|
||||
ASSISTANT
|
||||
}
|
||||
|
||||
enum SubscriptionStatus {
|
||||
ACTIVE
|
||||
CANCELLED
|
||||
EXPIRED
|
||||
}
|
||||
|
||||
enum UsageType {
|
||||
DOCUMENT
|
||||
CHAT
|
||||
JURISPRUDENCIA
|
||||
}
|
||||
|
||||
enum PrazoStatus {
|
||||
PENDENTE
|
||||
CONCLUIDO
|
||||
VENCIDO
|
||||
CANCELADO
|
||||
}
|
||||
|
||||
enum PrazoPriority {
|
||||
ALTA
|
||||
MEDIA
|
||||
BAIXA
|
||||
}
|
||||
|
||||
enum AuditStatus {
|
||||
PENDING
|
||||
ANALYZING
|
||||
DONE
|
||||
ERROR
|
||||
}
|
||||
|
||||
model ProcessAnalysis {
|
||||
id String @id @default(cuid())
|
||||
userId String
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
title String
|
||||
filename String
|
||||
fileKey String
|
||||
fileSize Int
|
||||
extractedText String @db.Text
|
||||
analysis String @db.Text
|
||||
summary String? @db.Text
|
||||
status String @default("PENDING")
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
}
|
||||
|
||||
// ===== MONITORAMENTO DE PUBLICAÇÕES =====
|
||||
|
||||
model ProcessoMonitorado {
|
||||
id String @id @default(cuid())
|
||||
userId String
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
numeroProcesso String // Ex: 0001234-56.2024.8.26.0100
|
||||
tribunal String // Ex: TJSP, TRF3, STJ
|
||||
vara String?
|
||||
comarca String?
|
||||
parteAutora String?
|
||||
parteRe String?
|
||||
status ProcessoStatus @default(ATIVO)
|
||||
|
||||
// Dados do processo (buscados da API DataJud)
|
||||
classe String?
|
||||
assunto String?
|
||||
dataAjuizamento DateTime?
|
||||
orgaoJulgador String?
|
||||
grau String?
|
||||
valorCausa Float?
|
||||
ultimaAtualizacao DateTime?
|
||||
dadosCompletos Json? // JSON com todos os dados brutos da API
|
||||
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
publicacoes Publicacao[]
|
||||
andamentos Andamento[]
|
||||
}
|
||||
|
||||
model Publicacao {
|
||||
id String @id @default(cuid())
|
||||
processoId String
|
||||
processo ProcessoMonitorado @relation(fields: [processoId], references: [id], onDelete: Cascade)
|
||||
dataPublicacao DateTime
|
||||
diario String // Ex: DJe, DOU, DOESP
|
||||
conteudo String @db.Text
|
||||
tipo TipoPublicacao
|
||||
prazoCalculado DateTime?
|
||||
prazoTipo String? // Ex: "15 dias úteis", "5 dias"
|
||||
visualizado Boolean @default(false)
|
||||
createdAt DateTime @default(now())
|
||||
}
|
||||
|
||||
enum ProcessoStatus {
|
||||
ATIVO
|
||||
ARQUIVADO
|
||||
SUSPENSO
|
||||
}
|
||||
|
||||
enum TipoPublicacao {
|
||||
INTIMACAO
|
||||
CITACAO
|
||||
SENTENCA
|
||||
DESPACHO
|
||||
ACORDAO
|
||||
OUTROS
|
||||
}
|
||||
|
||||
model Andamento {
|
||||
id String @id @default(cuid())
|
||||
processoId String
|
||||
processo ProcessoMonitorado @relation(fields: [processoId], references: [id], onDelete: Cascade)
|
||||
codigo Int
|
||||
nome String
|
||||
dataHora DateTime
|
||||
complemento String?
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
@@unique([processoId, codigo, dataHora])
|
||||
}
|
||||
Reference in New Issue
Block a user