Files
advx/prisma/schema.prisma
T
2025-04-10 23:07:21 -03:00

1070 lines
34 KiB
Plaintext

datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
enum PerfilUsuario {
ADVOGADO_ADMIN
ADVOGADO
ASSISTENTE
ESTAGIARIO
}
model Usuario {
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
nome String @db.VarChar(100)
email String @unique @db.VarChar(100)
senha String @db.VarChar(100)
perfil PerfilUsuario @default(ADVOGADO)
cpf String? @db.VarChar(14)
rg String? @db.VarChar(20)
oab String? @db.VarChar(20)
oabUF String? @db.VarChar(2)
telefone String? @db.VarChar(15)
endereco String? @db.VarChar(200)
numero String? @db.VarChar(10)
complemento String? @db.VarChar(100)
bairro String? @db.VarChar(100)
cidade String? @db.VarChar(100)
estado String? @db.VarChar(2)
cep String? @db.VarChar(9)
ativo Boolean @default(true)
dataCriacao DateTime @default(now())
atendimentos Atendimento[]
agendamentos AgendamentoAtendimento[]
// Adicionar estas relações
tarefasResponsavel Tarefa[] @relation("tarefasResponsavel")
tarefasCriadas Tarefa[] @relation("tarefasCriadas")
comentarios Comentario[]
documentos Documento[]
// Adicionar relações para cálculos judiciais
calculos CalculoJudicial[]
historicoCalculos HistoricoCalculo[]
exportacoes ExportacaoCalculo[]
// Adicionar relação para cálculos de pensão alimentícia
calculosPensaoAlimenticia CalculoPensaoAlimenticia[]
@@map("usuarios")
}
model Cliente {
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
nome String @db.VarChar(100)
email String @db.VarChar(100)
cpfCnpj String @unique @db.VarChar(18)
rg String? @db.VarChar(20)
orgaoEmissor String? @db.VarChar(10)
estadoRg String? @db.Char(2)
usaDNI Boolean @default(false)
possuiFilhos Boolean @default(false)
telefone String @db.VarChar(20)
instagram String? @db.VarChar(50)
dataNascimento DateTime? @db.Date
// Endereço
cep String @db.VarChar(9)
endereco String @db.VarChar(150)
numero String @db.VarChar(10)
complemento String? @db.VarChar(50)
bairro String @db.VarChar(100)
cidade String @db.VarChar(100)
estado String @db.Char(2)
// Informações Pessoais
estadoCivil String? @db.VarChar(20)
profissao String? @db.VarChar(100)
// Informações Financeiras
vinculoEmpregaticio String? @db.VarChar(50)
renda Decimal? @db.Decimal(10, 2)
declaraIR Boolean @default(false)
tipoPrevidencia String? @default("NAO_CONTRIBUI") @db.VarChar(20)
contribuiPrevidencia Boolean @default(false)
// Filiação
nomePai String? @db.VarChar(100)
nomeMae String? @db.VarChar(100)
conjugeNome String? @db.VarChar(100)
conjugeCpf String? @db.VarChar(14)
processos Processo[]
processosAdministrativos ProcessoAdministrativo[]
filhos Filho[]
partesProcesso ParteProcesso[]
dataCriacao DateTime @default(now())
atendimentos Atendimento[]
agendamentos AgendamentoAtendimento[]
tarefas Tarefa[]
// Adicionar relação para cálculos judiciais
calculos CalculoJudicial[]
// Adicionar relação para cálculos de pensão alimentícia
calculosPensaoAlimenticia CalculoPensaoAlimenticia[]
@@map("clientes")
}
model Filho {
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
nome String
dataNascimento DateTime
clienteId String @db.Uuid
cliente Cliente @relation(fields: [clienteId], references: [id])
@@map("filhos")
}
enum NaturezaProcesso {
CIVEL
CRIMINAL
PREVIDENCIARIO
TRABALHISTA
FAMILIA
TRIBUTARIO
ADMINISTRATIVO
}
enum TipoParte {
AUTOR
REU
}
enum StatusProcesso {
INICIAL
EM_ANDAMENTO
SUSPENSO
RECURSO
CONCLUSO
ARQUIVADO
}
enum TipoDiligencia {
CITACAO
INTIMACAO
NOTIFICACAO
PERICIA
OFICIAL_JUSTICA
CARTA_PRECATORIA
OUTROS
}
enum TipoAudiencia {
CONCILIACAO
INSTRUCAO
INICIAL
JULGAMENTO
MEDIACAO
}
enum StatusAtividade {
ATIVO
BAIXADO
SUSPENSO
}
enum TipoParticipacao {
AUTOR
REU
TERCEIRO_INTERESSADO
}
model ParteProcesso {
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
processoId String @db.Uuid
clienteId String? @db.Uuid
tipo String @db.VarChar(20)
nome String @db.VarChar(200)
cpfCnpj String? @db.VarChar(18)
principal Boolean @default(false)
observacoes String?
dataCriacao DateTime @default(now()) @db.Timestamp()
processo Processo @relation(fields: [processoId], references: [id], onDelete: Cascade)
cliente Cliente? @relation(fields: [clienteId], references: [id])
@@index([processoId])
@@index([clienteId])
}
model Processo {
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
numero String @unique
natureza String
valorCausa Decimal? @db.Decimal(15, 2)
// Campos novos
tribunalUF String? @db.VarChar(20)
tribunal String? @db.VarChar(50)
numeroOriginal String? @db.VarChar(50)
// Manter campos antigos
orgaoJulgador String @db.VarChar(100)
orgaoOrigem String? @db.VarChar(100)
nomeContraparte String @db.VarChar(100)
status String @default("INICIAL") @db.VarChar(20)
statusAtividade String @default("ATIVO") @db.VarChar(20)
dataCriacao DateTime @default(now()) @db.Timestamp()
dataAtualizacao DateTime @updatedAt @db.Timestamp()
clienteId String @db.Uuid
tipoParteCliente String @db.VarChar(20)
dadosDatajud Json?
dataAjuizamento DateTime?
classeProcessual String?
assuntos String[]
nivelSigilo Int?
// Relações
cliente Cliente @relation(fields: [clienteId], references: [id])
partes ParteProcesso[]
audiencias Audiencia[]
diligencias Diligencia[]
movimentacoes Movimentacao[]
documentos Documento[]
custas CustaProcessual[]
honorarios Honorario[]
movimentacoesTribunal MovimentacaoTribunal[]
orgaoJulgadorRef OrgaoJulgador? @relation(fields: [orgaoJulgadorId], references: [id])
orgaoJulgadorId String? @db.Uuid
atendimentos Atendimento[]
tarefas Tarefa[]
// Adicionar relação para cálculos judiciais
calculos CalculoJudicial[]
// Adicionar relação para cálculos de pensão alimentícia
calculosPensaoAlimenticia CalculoPensaoAlimenticia[]
resultado ResultadoProcesso @default(NAO_JULGADO)
@@index([clienteId])
@@index([orgaoJulgadorId])
@@index([tribunal])
@@index([tribunalUF])
}
enum StatusProcessoAdministrativo {
INICIAL
EM_ANALISE
EM_RECURSO
FINALIZADO
ARQUIVADO
}
model ProcessoAdministrativo {
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
numero String @unique
descricao String @db.Text
orgao String @db.VarChar(200)
clienteId String @db.Uuid
tipoParteCliente TipoParte
valorPretensao Decimal? @db.Decimal(15, 2)
status StatusProcessoAdministrativo @default(INICIAL)
resultado String? @db.VarChar(100)
observacoes String? @db.Text
dataCriacao DateTime @default(now())
dataAtualizacao DateTime @updatedAt
// Relações
cliente Cliente @relation(fields: [clienteId], references: [id])
movimentacoes MovimentacaoAdministrativa[]
documentos Documento[]
custas CustaAdministrativa[]
@@index([clienteId])
@@map("processos_administrativos")
}
model MovimentacaoAdministrativa {
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
processoId String @db.Uuid
data DateTime
descricao String @db.Text
tipoMovimentacao String @db.VarChar(100)
numero String? @db.VarChar(100)
documentos String[]
observacoes String? @db.Text
dataCriacao DateTime @default(now())
processo ProcessoAdministrativo @relation(fields: [processoId], references: [id], onDelete: Cascade)
@@index([processoId])
@@map("movimentacoes_administrativas")
}
model Audiencia {
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
processoId String @db.Uuid
tipo String @db.VarChar(50)
data DateTime @db.Timestamp()
local String @db.VarChar(200)
modalidade String @default("PRESENCIAL") @db.VarChar(20)
status String @default("AGENDADA") @db.VarChar(20)
linkVirtual String? @db.Text
observacoes String? @db.Text
dataCriacao DateTime @default(now()) @db.Timestamp()
processo Processo @relation(fields: [processoId], references: [id], onDelete: Cascade)
@@index([processoId])
}
model Diligencia {
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
processoId String @db.Uuid
tipo String @db.VarChar(50)
descricao String @db.Text
dataLimite DateTime @db.Timestamp()
status String @default("PENDENTE") @db.VarChar(20)
responsavel String? @db.VarChar(100)
observacoes String? @db.Text
dataCriacao DateTime @default(now()) @db.Timestamp()
processo Processo @relation(fields: [processoId], references: [id], onDelete: Cascade)
@@index([processoId])
}
model Movimentacao {
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
processoId String @db.Uuid
data DateTime @db.Timestamp()
descricao String @db.Text
tipo String @db.VarChar(50)
documento String? @db.Text
dataCriacao DateTime @default(now()) @db.Timestamp()
processo Processo @relation(fields: [processoId], references: [id], onDelete: Cascade)
@@index([processoId])
}
// Manter e atualizar este modelo Documento mais completo
model Documento {
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
nome String @db.VarChar(200)
tipo TipoDocumento
conteudo String @db.Text
url String? @db.Text // Tornar opcional pois nem todo documento terá URL
processoId String? @db.Uuid
processo Processo? @relation(fields: [processoId], references: [id])
processoAdministrativoId String? @db.Uuid // Adicionar este campo
processoAdministrativo ProcessoAdministrativo? @relation(fields: [processoAdministrativoId], references: [id]) // Adicionar esta relação
atendimentoId String? @db.Uuid
atendimento Atendimento? @relation(fields: [atendimentoId], references: [id])
anexoId String? @unique @db.Uuid // Adicionar @unique aqui
anexo Anexo? @relation(fields: [anexoId], references: [id])
criadoPorId String @db.Uuid
criadoPor Usuario @relation(fields: [criadoPorId], references: [id])
criadoEm DateTime @default(now())
atualizadoEm DateTime @updatedAt
protocolo String? @db.VarChar(20) // Renomeado de atendimentoProtocolo
@@index([processoId])
@@index([atendimentoId])
@@index([protocolo])
@@index([processoAdministrativoId]) // Adicionar este índice
@@map("documentos")
}
// Custas e Honorários
enum TipoCustaProcessual {
INICIAL // Custas iniciais do processo
RECURSO // Custas recursais
PERICIA // Honorários periciais
OFICIAL_JUSTICA // Diligência de oficial
CARTA_PRECATORIA // Custas de carta precatória
DEPOSITO_JUDICIAL // Depósito judicial
CERTIDAO // Certidões diversas
DIGITALIZACAO // Serviço de digitalização
CONDUTOR // Despesas com condutor
CORREIOS // Despesas postais
CARTORIO // Custas cartoriais
OUTROS // Outras despesas
}
enum StatusPagamento {
PENDENTE
PARCIALMENTE_PAGO // Novo status
PAGO
VENCIDO
CANCELADO
}
enum FormaPagamento {
VISTA
PARCELADO
ENTRADA_MAIS_PARCELAS
PERCENTUAL_CAUSA
PERCENTUAL_EXITO
PERCENTUAL_CAUSA_COM_ENTRADA // Novo tipo
}
model CustaProcessual {
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
processoId String @db.Uuid
processo Processo @relation(fields: [processoId], references: [id])
tipo TipoCustaProcessual
descricao String @db.VarChar(200)
valor Decimal @db.Decimal(10, 2)
percentual Decimal? @db.Decimal(5, 2) // Percentual se aplicável
status StatusPagamento @default(PENDENTE)
vencimento DateTime?
dataPagamento DateTime?
comprovante String? @db.Text // URL do comprovante
observacoes String? @db.Text
dataCriacao DateTime @default(now())
// Parcelamento
numeroParcelas Int @default(1)
parcelaAtual Int @default(1)
@@index([processoId])
@@map("custas_processuais")
}
model Honorario {
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
processoId String @db.Uuid
processo Processo @relation(fields: [processoId], references: [id])
// Valores e forma de pagamento
valorFixo Decimal? @db.Decimal(10, 2)
percentualCausa Decimal? @db.Decimal(5, 2)
percentualExito Decimal? @db.Decimal(5, 2)
valorEntrada Decimal? @db.Decimal(10, 2)
valorTotalCausa Decimal? @db.Decimal(10, 2)
formaPagamento FormaPagamento @default(VISTA)
// Parcelamento
numeroParcelas Int @default(1)
valorParcela Decimal? @db.Decimal(10, 2)
diaVencimento Int @default(10)
// Controle
status StatusPagamento @default(PENDENTE)
dataContrato DateTime @default(now())
dataVencimento DateTime @db.Timestamp()
dataCriacao DateTime @default(now()) @db.Timestamp()
observacoes String? @db.Text
// Parcelas
parcelas ParcelaHonorario[]
@@index([processoId])
@@map("honorarios")
}
model ParcelaHonorario {
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
honorarioId String @db.Uuid
honorario Honorario @relation(fields: [honorarioId], references: [id], onDelete: Cascade)
numeroParcela Int
valor Decimal @db.Decimal(10, 2)
valorPago Decimal? @db.Decimal(10, 2) // Novo campo
vencimento DateTime
dataPagamento DateTime?
status StatusPagamento @default(PENDENTE)
comprovante String? @db.Text
observacoes String? @db.Text
@@index([honorarioId])
@@map("parcelas_honorario")
}
model ModeloDocumento {
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
nome String @db.VarChar(100)
tipo String @db.VarChar(50)
conteudo String @db.Text
variaveis Json? // Mantido apenas um campo variaveis como Json
cabecalho Boolean @default(true)
rodape Boolean @default(true)
assinatura Boolean @default(true)
dataCriacao DateTime @default(now())
@@map("modelos_documentos")
}
// Novo modelo para configurações de template
model ConfiguracaoDocumento {
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
timbradoUrl String?
timbradoMarginTop Int? @default(100)
timbradoMarginBottom Int? @default(50)
timbradoMarginLeft Int? @default(50)
timbradoMarginRight Int? @default(50)
templatePadrao String?
margensTemplate Json? @default("{\"top\":35,\"bottom\":29,\"left\":25,\"right\":25}")
criadoEm DateTime @default(now())
@@index([criadoEm])
// Adicionar configuração global única
@@map("configuracao_documento")
}
// Controle de Prazos e Alertas
model Alerta {
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
usuarioId String @db.Uuid
tipo String @db.VarChar(50)
mensagem String @db.Text
lido Boolean @default(false)
dataAlerta DateTime
dataCriacao DateTime @default(now())
@@map("alertas")
}
// Integrações com Tribunais
model MovimentacaoTribunal {
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
processoId String @db.Uuid
processo Processo @relation(fields: [processoId], references: [id])
tribunal String @db.VarChar(50)
data DateTime
descricao String
dataCriacao DateTime @default(now())
@@index([processoId])
}
// Novo modelo para órgãos julgadores
model OrgaoJulgador {
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
nome String @unique @db.VarChar(200)
processos Processo[]
dataCriacao DateTime @default(now())
@@map("orgaos_julgadores")
}
enum TipoAtendimento {
INICIAL
RETORNO
ENCAMINHAMENTO
ORIENTACAO
ACORDO
OUTROS
}
model Atendimento {
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
protocolo String @unique
clienteId String @db.Uuid
processoId String? @db.Uuid
tipo TipoAtendimento @default(INICIAL)
titulo String @db.VarChar(200)
conteudo String @db.Text
dataAtendimento DateTime @default(now())
dataCriacao DateTime @default(now())
usuarioId String @db.Uuid
// Novas relações para atendimentos relacionados
atendimentoInicialId String? @db.Uuid
atendimentoInicial Atendimento? @relation("AtendimentosRelacionados", fields: [atendimentoInicialId], references: [id])
atendimentosRelacionados Atendimento[] @relation("AtendimentosRelacionados")
// Relações existentes
cliente Cliente @relation(fields: [clienteId], references: [id])
processo Processo? @relation(fields: [processoId], references: [id])
usuario Usuario @relation(fields: [usuarioId], references: [id])
anexos Anexo[] // Adicionar esta linha para criar a relação bidirecional
agendamento AgendamentoAtendimento[] // Adicionar esta linha
documentos Documento[] // Adicionar esta linha
status String? @default("ATIVO") @db.VarChar(20)
justificativaCancelamento String? @db.Text
dataAtualizacao DateTime? @default(now()) @updatedAt
@@index([clienteId])
@@index([processoId])
@@index([protocolo])
@@index([atendimentoInicialId])
@@map("atendimentos")
}
model Anexo {
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
nome String
url String
tipo String
tamanho Int
atendimento Atendimento? @relation(fields: [atendimentoId], references: [id])
atendimentoId String? @db.Uuid
tarefa Tarefa? @relation(fields: [tarefaId], references: [id])
tarefaId String? @db.Uuid
criadoEm DateTime @default(now())
documento Documento? // Adicionar esta linha
@@index([atendimentoId])
@@index([tarefaId])
}
enum StatusAgendamento {
AGENDADO
CONFIRMADO
CANCELADO
REALIZADO
NAO_COMPARECEU
}
model AgendamentoAtendimento {
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
clienteId String @db.Uuid
usuarioId String @db.Uuid
data DateTime @db.Timestamp()
observacoes String? @db.Text
status StatusAgendamento @default(AGENDADO)
criadoEm DateTime @default(now())
atualizadoEm DateTime @updatedAt
atendimentoId String? @db.Uuid // ID do atendimento quando realizado
cliente Cliente @relation(fields: [clienteId], references: [id])
usuario Usuario @relation(fields: [usuarioId], references: [id])
atendimento Atendimento? @relation(fields: [atendimentoId], references: [id])
@@map("agendamentos_atendimento")
}
model Tarefa {
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid // Usar mesmo padrão das outras tabelas
titulo String
descricao String?
status StatusTarefa
prioridade PrioridadeTarefa
dataInicio DateTime
dataVencimento DateTime
dataConclusao DateTime? // Adicionar este campo
progresso Int @default(0)
responsavel Usuario @relation("tarefasResponsavel", fields: [responsavelId], references: [id])
responsavelId String @db.Uuid
criadoPor Usuario @relation("tarefasCriadas", fields: [criadoPorId], references: [id])
criadoPorId String @db.Uuid
processo Processo? @relation(fields: [processoId], references: [id])
processoId String? @db.Uuid
cliente Cliente? @relation(fields: [clienteId], references: [id])
clienteId String? @db.Uuid
subtarefas SubTarefa[]
anexos Anexo[]
comentarios Comentario[]
etiquetas String[]
criadoEm DateTime @default(now())
atualizadoEm DateTime @updatedAt
@@map("tarefas")
}
model SubTarefa {
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
titulo String
concluida Boolean @default(false)
tarefa Tarefa @relation(fields: [tarefaId], references: [id], onDelete: Cascade)
tarefaId String @db.Uuid
@@map("subtarefas")
}
model Comentario {
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
texto String
criadoPor Usuario @relation(fields: [criadoPorId], references: [id])
criadoPorId String @db.Uuid
tarefa Tarefa @relation(fields: [tarefaId], references: [id], onDelete: Cascade)
tarefaId String @db.Uuid
criadoEm DateTime @default(now())
@@map("comentarios")
}
enum StatusTarefa {
PENDENTE
EM_ANDAMENTO
CONCLUIDA
CANCELADA
}
enum PrioridadeTarefa {
BAIXA
MEDIA
ALTA
URGENTE
}
enum ResultadoProcesso {
NAO_JULGADO
PROCEDENTE
PARCIALMENTE_PROCEDENTE
IMPROCEDENTE
SEM_ANALISE_MERITO
}
enum TipoDocumento {
PETICAO
CONTRATO
PROCURACAO
DECLARACAO
OUTROS
}
model DocumentoModelo {
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
nome String @db.VarChar(200)
descricao String? @db.Text
tipo TipoDocumento
conteudo String @db.Text
variaveis String[] // Array de placeholders para substituição
criadoEm DateTime @default(now())
atualizadoEm DateTime @updatedAt
@@map("documentos_modelos")
}
enum TipoCustaAdministrativa {
TAXA_ADMINISTRATIVA
RECURSO
DILIGENCIA
CERTIDAO
COPIA
OUTROS
}
model CustaAdministrativa {
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
processoId String @db.Uuid
processo ProcessoAdministrativo @relation(fields: [processoId], references: [id], onDelete: Cascade)
tipo TipoCustaAdministrativa
descricao String @db.VarChar(200)
valor Decimal @db.Decimal(10, 2)
status StatusPagamento @default(PENDENTE)
vencimento DateTime?
dataPagamento DateTime?
comprovante String? @db.Text
observacoes String? @db.Text
dataCriacao DateTime @default(now())
numeroParcelas Int @default(1)
parcelaAtual Int @default(1)
@@index([processoId])
@@map("custas_administrativas")
}
enum StatusProva {
PENDENTE
PROCESSANDO
CONCLUIDO
ERRO
}
model Prova {
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
fileName String @db.VarChar(255)
mimeType String @db.VarChar(100)
checksumSha256 String @db.VarChar(64)
checksumSha512 String @db.VarChar(128)
checksumMd5 String @db.VarChar(32)
timestamp String @db.Text
metadata Json
reportPath String @db.VarChar(255)
status StatusProva @default(PENDENTE)
error String? @db.Text
dataCriacao DateTime @default(now())
dataValida DateTime @updatedAt
@@map("provas")
}
// Modelos para o sistema de cálculo judicial
model CalculoJudicial {
id String @id @default(uuid())
titulo String
descricao String?
dataBase DateTime
dataCalculo DateTime @default(now())
valorBase Decimal @db.Decimal(15, 2)
valorCorrigido Decimal @db.Decimal(15, 2)
valorFinal Decimal @db.Decimal(15, 2)
status String @default("RASCUNHO") // RASCUNHO, FINALIZADO, ARQUIVADO
usuarioId String? @db.Uuid
processoId String? @db.Uuid
clienteId String? @db.Uuid
// Relações
usuario Usuario? @relation(fields: [usuarioId], references: [id])
processo Processo? @relation(fields: [processoId], references: [id])
cliente Cliente? @relation(fields: [clienteId], references: [id])
// Componentes do cálculo
correcoes CorrecaoMonetaria[]
juros JuroCalculo[]
multas MultaCalculo[]
honorarios HonorarioCalculo[]
parcelas ParcelaCalculo[]
descontos DescontoCalculo[]
pensaoAlimenticia PensaoAlimenticia?
// Metadados
configuracoes Json?
historico HistoricoCalculo[]
exportacoes ExportacaoCalculo[]
criadoEm DateTime @default(now())
atualizadoEm DateTime @updatedAt
@@map("calculosjudiciais")
}
model CorrecaoMonetaria {
id String @id @default(uuid())
calculoId String
indice String // INPC, IPCA-E, TR, SELIC etc.
dataInicial DateTime
dataFinal DateTime?
valorOriginal Decimal @db.Decimal(15, 2)
valorCorrigido Decimal @db.Decimal(15, 2)
fatorCorrecao Decimal @db.Decimal(15, 6)
calculo CalculoJudicial @relation(fields: [calculoId], references: [id], onDelete: Cascade)
criadoEm DateTime @default(now())
atualizadoEm DateTime @updatedAt
@@map("correcoes_monetarias")
}
model JuroCalculo {
id String @id @default(uuid())
calculoId String
tipo String // SIMPLES, COMPOSTO
taxa Decimal @db.Decimal(8, 6) // Taxa percentual (ex: 0.01 para 1%)
periodicidade String // MENSAL, ANUAL, DIARIO
natureza String // MORATORIO, COMPENSATORIO, CONVENCIONAL, LEGAL
dataInicial DateTime
dataFinal DateTime?
valorBase Decimal @db.Decimal(15, 2)
valorJuros Decimal @db.Decimal(15, 2)
calculo CalculoJudicial @relation(fields: [calculoId], references: [id], onDelete: Cascade)
criadoEm DateTime @default(now())
atualizadoEm DateTime @updatedAt
@@map("juros_calculos")
}
model MultaCalculo {
id String @id @default(uuid())
calculoId String
tipo String // CONTRATUAL, LEGAL
percentual Decimal @db.Decimal(8, 6)
valorBase Decimal @db.Decimal(15, 2)
valorMulta Decimal @db.Decimal(15, 2)
fundamento String? // Artigo de lei ou cláusula contratual
calculo CalculoJudicial @relation(fields: [calculoId], references: [id], onDelete: Cascade)
criadoEm DateTime @default(now())
atualizadoEm DateTime @updatedAt
@@map("multas_calculos")
}
model HonorarioCalculo {
id String @id @default(uuid())
calculoId String
tipo String // CONTRATUAL, SUCUMBENCIAL, EXECUCAO
percentual Decimal @db.Decimal(8, 6)
valorBase Decimal @db.Decimal(15, 2)
valorHonorario Decimal @db.Decimal(15, 2)
fundamento String? // Fundamentação legal ou contratual
calculo CalculoJudicial @relation(fields: [calculoId], references: [id], onDelete: Cascade)
criadoEm DateTime @default(now())
atualizadoEm DateTime @updatedAt
@@map("honorarios_calculos")
}
model ParcelaCalculo {
id String @id @default(uuid())
calculoId String
numero Int
dataVencimento DateTime
valorOriginal Decimal @db.Decimal(15, 2)
valorCorrigido Decimal @db.Decimal(15, 2)
valorJuros Decimal @db.Decimal(15, 2)
valorMulta Decimal @db.Decimal(15, 2)
valorTotal Decimal @db.Decimal(15, 2)
pago Boolean @default(false)
dataPagamento DateTime?
calculo CalculoJudicial @relation(fields: [calculoId], references: [id], onDelete: Cascade)
criadoEm DateTime @default(now())
atualizadoEm DateTime @updatedAt
@@map("parcelas_calculos")
}
model DescontoCalculo {
id String @id @default(uuid())
calculoId String
tipo String // INSS, IRRF, CUSTAS, OUTRO
descricao String?
percentual Decimal? @db.Decimal(8, 6)
valorFixo Decimal? @db.Decimal(15, 2)
valorBase Decimal @db.Decimal(15, 2)
valorDesconto Decimal @db.Decimal(15, 2)
calculo CalculoJudicial @relation(fields: [calculoId], references: [id], onDelete: Cascade)
criadoEm DateTime @default(now())
atualizadoEm DateTime @updatedAt
@@map("descontos_calculos")
}
model HistoricoCalculo {
id String @id @default(uuid())
calculoId String
usuarioId String? @db.Uuid
acao String // CRIACAO, ATUALIZACAO, RECALCULO, EXCLUSAO
descricao String
valorAnterior Decimal? @db.Decimal(15, 2)
valorNovo Decimal? @db.Decimal(15, 2)
metadados Json?
calculo CalculoJudicial @relation(fields: [calculoId], references: [id], onDelete: Cascade)
usuario Usuario? @relation(fields: [usuarioId], references: [id])
criadoEm DateTime @default(now())
@@map("historicos_calculos")
}
model ExportacaoCalculo {
id String @id @default(uuid())
calculoId String
usuarioId String? @db.Uuid
tipo String // PDF, EXCEL, WORD
arquivo String // Caminho do arquivo gerado
calculo CalculoJudicial @relation(fields: [calculoId], references: [id], onDelete: Cascade)
usuario Usuario? @relation(fields: [usuarioId], references: [id])
criadoEm DateTime @default(now())
@@map("exportacoes_calculos")
}
model IndiceMonetario {
id String @id @default(uuid())
nome String // INPC, IPCA-E, TR, SELIC etc.
mesReferencia Int // 1-12 (representando os meses do ano)
anoReferencia Int
valor Decimal @db.Decimal(15, 6)
dataPublicacao DateTime?
fonte String? // IBGE, BACEN, etc.
criadoEm DateTime @default(now())
atualizadoEm DateTime @updatedAt
@@unique([nome, mesReferencia, anoReferencia])
@@map("indices_monetarios")
}
model PensaoAlimenticia {
id String @id @default(uuid())
calculoId String @unique
percentualSalarioMinimo Decimal @db.Decimal(8, 6)
multaPactuada Decimal? @db.Decimal(8, 6)
tipoAtualizacao String @default("INPC") // Tipo de índice para atualização monetária
dataInicial DateTime
dataFinal DateTime?
observacoes String?
calculo CalculoJudicial @relation(fields: [calculoId], references: [id], onDelete: Cascade)
historicoSalarios HistoricoSalarioMinimo[]
parcelasPensao ParcelaPensao[]
criadoEm DateTime @default(now())
atualizadoEm DateTime @updatedAt
@@map("pensoes_alimenticias")
}
model HistoricoSalarioMinimo {
id String @id @default(uuid())
pensaoId String
dataVigencia DateTime
valor Decimal @db.Decimal(15, 2)
pensao PensaoAlimenticia @relation(fields: [pensaoId], references: [id], onDelete: Cascade)
criadoEm DateTime @default(now())
atualizadoEm DateTime @updatedAt
@@map("historico_salario_minimo")
}
model ParcelaPensao {
id String @id @default(uuid())
pensaoId String
competencia DateTime // Mês/ano a que se refere a parcela
valorSalarioMinimo Decimal @db.Decimal(15, 2)
percentual Decimal @db.Decimal(8, 6)
valorOriginal Decimal @db.Decimal(15, 2)
valorCorrigido Decimal @db.Decimal(15, 2)
valorJuros Decimal @db.Decimal(15, 2)
valorMulta Decimal @db.Decimal(15, 2)
valorTotal Decimal @db.Decimal(15, 2)
pago Boolean @default(false)
dataPagamento DateTime?
pensao PensaoAlimenticia @relation(fields: [pensaoId], references: [id], onDelete: Cascade)
criadoEm DateTime @default(now())
atualizadoEm DateTime @updatedAt
@@map("parcelas_pensao")
}
// Atualize o modelo CalculoPensaoAlimenticia para usar o tipo UUID
model CalculoPensaoAlimenticia {
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
titulo String
descricao String?
status String
dataInicial DateTime
dataFinal DateTime?
percentualSalarioMinimo Decimal @db.Decimal(10, 2)
multaPactuada Decimal? @db.Decimal(10, 2)
tipoAtualizacao String
valorCalculado Decimal @db.Decimal(15, 2)
valorMulta Decimal @db.Decimal(15, 2)
valorTotal Decimal @db.Decimal(15, 2)
observacoes String?
// Relações com tipos UUID compatíveis
processo Processo? @relation(fields: [processoId], references: [id])
processoId String? @db.Uuid
cliente Cliente? @relation(fields: [clienteId], references: [id])
clienteId String? @db.Uuid
usuario Usuario @relation(fields: [usuarioId], references: [id])
usuarioId String @db.Uuid
criadoEm DateTime @default(now())
atualizadoEm DateTime @updatedAt
@@map("calculos_pensao_alimenticia")
}