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") } model WebProofSession { id String @id @default(cuid()) sessionId String @unique targetUrl String description String? status String @default("PENDENTE") metadata Json? environment Json? screenshots String[] sessionHash String? contentHash String? pageHash String? reportPath String? networkData Json? trustedTimestamp String? error String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt processedAt DateTime? @@index([sessionId]) @@index([status]) @@index([createdAt]) @@index([contentHash]) @@map("web_proof_sessions") }