339 lines
8.1 KiB
Plaintext
339 lines
8.1 KiB
Plaintext
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])
|
|
}
|