-
Dossiê: Representação de um processo judicial no sistema Apoia.
-
Ementa: Resumo estruturado de uma decisão judicial, gerado pela IA conforme padrões específicos (e.g., Resolução CNJ).
-
Eproc: Sistema de processo judicial eletrônico com o qual a Apoia se integra.
-
JWE (JSON Web Encryption): Padrão de criptografia usado para proteger os tokens de autenticação da API, garantindo a confidencialidade das informações.
-
JWT (JSON Web Token): Token compacto e autossuficiente usado para transmitir informações de forma segura entre as partes como um objeto JSON.
-
Knex.js: Construtor de consultas SQL para Node.js, utilizado pela Apoia para interagir com o banco de dados (MySQL/PostgreSQL).
-
MNI (Modelo Nacional de Interoperabilidade): Padrão definido pelo Conselho Nacional de Justiça (CNJ) para a comunicação e troca de informações entre os sistemas do Poder Judiciário brasileiro.
-
Next.js: Framework de desenvolvimento web React utilizado como base para a construção da aplicação Apoia.
-
NextAuth.js: Biblioteca de autenticação para aplicações Next.js, responsável por gerenciar o login e as sessões dos usuários.
-
Peça Processual: Cada um dos documentos que compõem um processo judicial (ex: petição inicial, contestação, sentença).
-
Prompt: Conjunto de instruções ou um texto de entrada fornecido a um modelo de IA generativa para direcionar a geração de uma resposta específica.
-
Triagem: Análise inicial de um conjunto de processos para classificá-los ou resumi-los, uma das principais funcionalidades da Apoia.
-
Vercel AI SDK: Kit de desenvolvimento de software utilizado para facilitar a integração com diferentes modelos e provedores de IA generativa.
-
WSDL (Web Services Description Language): Linguagem baseada em XML usada para descrever as funcionalidades de um serviço web, utilizada na integração com o MNI.
- Glossário
- Introdução
- Objetivo
- Visão Geral do Sistema
- Público-Alvo
- Escopo
- Documentação Técnica
- Código-Fonte
- Testes
- Relatório de cobertura e resultados de testes unitários e de integração
- Relatório de análise estática de código (SONAR)
- Relatório de testes de capacidade
- Arquitetura (diagrama)
- Configuração
- Banco de Dados
- Arquitetura de Banco de Dados
- Regras de negócio e triggers
- Biblioteca de Dados
- Procedimento Operacionais
- Segurança da Informação
A Apoia é uma ferramenta de inteligência artificial generativa que auxilia na análise e gestão de processos judiciais. Originalmente concebida para a triagem de acervos, a ferramenta evoluiu para incorporar diversas funcionalidades que otimizam o trabalho de profissionais do direito.
O objetivo deste manual é fornecer um guia completo para a operação da Apoia, abrangendo desde a sua configuração inicial até a utilização de suas funcionalidades mais avançadas.
Apoia é uma ferramenta de inteligência artificial generativa originalmente desenvolvida para auxiliar na triagem de acervos. Ela analisa documentos de processos e gera resumos das principais peças e gera um relatório sobre acervo.
A Apoia também pode ser utilizada para realizar uma Síntese do Processo on-line, a partir da informação do número do processo.
Outros recursos disponíveis são a geração de ementas conforme Resolução 156/2024 do CNJ e a revisão de textos por inteligência artificial.
Magistrados, servidores e outros profissionais do sistema de justiça que necessitam de ferramentas para otimizar a análise e gestão de processos judiciais.
Este manual cobre as seguintes áreas:
- Configuração e instalação da Apoia
- Visão geral da arquitetura do sistema
- Funcionalidades e casos de uso
- Procedimentos operacionais e de segurança
A principal documentação técnica da Apoia é o arquivo README.md, que se encontra na raiz do projeto. Ele contém informações detalhadas sobre a arquitetura, configuração e como executar a aplicação em diferentes ambientes.
O código-fonte da Apoia está localizado no repositório https://github.com/trf2-jus-br/apoia. A estrutura do projeto é baseada em Next.js e TypeScript.
A Apoia utiliza o Jest para a execução de testes unitários e de integração. Os seguintes scripts estão disponíveis no arquivo package.json:
npm test: Executa todos os testes.npm run test:watch: Executa os testes em modo de observação, ideal para desenvolvimento.npm run test:coverage: Gera um relatório de cobertura de testes.
Os testes unitários da Apoia cobrem as seguintes áreas críticas da aplicação:
-
Processamento de Templates de IA (
ai-template.test.ts): Garante que a sintaxe customizada de templates (com snippets e condicionais) é corretamente pré-processada antes de ser enviada para os modelos de IA. -
Anonimização de Nomes (
name-anonymizer.test.ts): Valida a função de anonimização de nomes, assegurando que nomes próprios são corretamente identificados e substituídos por iniciais, preservando a estrutura do texto. -
Correspondência de Documentos (
documentMatcher.test.ts): Testa a lógica de comparação de documentos, garantindo que documentos similares são corretamente identificados e associados com base na similaridade de conteúdo (Jaccard). -
Padrões de Documentos (
pattern.test.ts): Cobre a lógica de reconhecimento de sequências de documentos em um processo. Estes testes validam o funcionamento dos operadoresEXACT,OR,ANYeSOME, que são usados para identificar se um processo segue um fluxo processual pré-definido (ex: Petição Inicial -> Contestação -> Sentença).
Para gerar o relatório de cobertura, execute o comando npm run test:coverage. O relatório será gerado na pasta coverage.
Ainda não foi realizado.
Ainda não foi realizado.
graph TD
%% Usuario
subgraph Usuario
A[Usuario via Browser]
end
%% Apoia (Aplicacao Next.js)
subgraph Apoia
B[Frontend React NextJS]
C[Backend API Routes]
D[Autenticacao NextAuthJS]
E[Logica de Negocio lib]
F[Banco de Dados MySQL ou PostgreSQL]
end
%% Servicos Externos
subgraph Servicos Externos
G[Sistemas Judiciais Eproc MNI]
H[Modelos de IA OpenAI Google]
I[Service Discovery Eureka]
J[Provedor de Identidade Keycloak]
end
%% Fluxos
A -->|HTTPS| B
B -->|Chamadas API| C
C -->|Fluxo de login| D
D -->|Autentica com| J
C -->|Executa| E
E -->|Consulta dados judiciais| G
E -->|Chamada IA| H
E -->|Leitura Escrita| F
C -->|Registra-se| I
- Usuário (Browser): O ponto de entrada, onde o usuário interage com a aplicação.
- Apoia (Aplicação Next.js):
- Frontend: A interface com a qual o usuário interage, construída em React e Next.js.
- Backend (API Routes): A camada de API que responde às solicitações do frontend, também parte da aplicação Next.js.
- Autenticação (NextAuth.js): Gerencia o login e as sessões dos usuários, podendo se conectar a provedores externos como o Keycloak.
- Lógica de Negócio (lib/): O núcleo da aplicação, onde residem as regras para processar documentos, interagir com a IA e com o banco de dados.
- Banco de Dados: Armazena os dados da aplicação, como usuários, processos, gerações de IA e lotes.
- Serviços Externos:
- Sistemas Judiciais (Eproc/MNI): De onde a Apoia busca os dados e documentos dos processos.
- Modelos de IA: Os serviços de inteligência artificial generativa que a Apoia consome.
- Service Discovery (Eureka): Onde a aplicação se registra para ser descoberta em um ambiente de microsserviços (opcional).
- Provedor de Identidade (Keycloak): Usado para autenticação centralizada.
A configuração da Apoia é realizada através de variáveis de ambiente. Em um ambiente de desenvolvimento, estas variáveis podem ser definidas em um arquivo .env.local na raiz do projeto.
As principais configurações incluem:
- Conexão com sistemas processuais (MNI): Definição dos sistemas (TRF2, JFRJ, etc.) e seus respectivos endpoints WSDL.
- Modelo de Inteligência Artificial: Seleção do modelo de IA a ser utilizado (ex: GPT-4, Claude, Gemini).
- Chaves de API: Configuração das chaves de API para os serviços de IA.
- Nível de Confidencialidade: Restrição de acesso a documentos sigilosos.
- Autenticação (NextAuth): Configuração do NextAuth para autenticação de usuários.
- Tokens JWT: Configuração de segredos e emissores para tokens JWT.
- Banco de Dados: Configuração da conexão com o banco de dados (MySQL ou PostgreSQL).
Para uma lista completa e detalhada de todas as variáveis de ambiente, consulte o arquivo README.md.
A Apoia utiliza um banco de dados para armazenar relatórios de triagem e respostas de IA (opcional). A aplicação é compatível com MySQL e PostgreSQL.
O esquema do banco de dados, chamado apoia, é composto por várias tabelas que armazenam informações sobre usuários, sistemas, modelos de IA, processos, documentos e interações com a inteligência artificial. As principais tabelas são:
- ia_user: Armazena informações sobre os usuários do sistema.
- ia_system: Cadastra os sistemas processuais com os quais a Apoia se integra.
- ia_model: Mantém um registro dos modelos de IA disponíveis.
- ia_prompt: Armazena os prompts utilizados para interagir com os modelos de IA.
- ia_dossier: Representa os processos judiciais.
- ia_document: Armazena informações sobre os documentos dos processos.
- ia_generation: Guarda as respostas geradas pelos modelos de IA.
- ia_batch: Permite o processamento de processos em lote.
- ia_user_daily_usage: Registra o uso diário da API por usuário e tribunal.
erDiagram
ia_system {
int id PK
varchar code
}
ia_dossier {
int id PK
int system_id FK
varchar code
}
ia_document {
int id PK
int dossier_id FK
varchar code
text content
}
ia_generation {
int id PK
varchar model
varchar prompt
text generation
}
ia_batch {
int id PK
varchar name
}
ia_batch_dossier {
int id PK
int batch_id FK
int dossier_id FK
}
ia_batch_dossier_item {
int id PK
int batch_dossier_id FK
int document_id FK
int generation_id FK
}
ia_system ||--o{ ia_dossier : "contém"
ia_dossier ||--o{ ia_document : "contém"
ia_batch ||--o{ ia_batch_dossier : "agrupa"
ia_dossier }o--|| ia_batch_dossier : "é agrupado em"
ia_batch_dossier ||--o{ ia_batch_dossier_item : "possui"
ia_document }o--|| ia_batch_dossier_item : "é item de"
ia_generation }o--|| ia_batch_dossier_item : "é item de"
O banco de dados não utiliza triggers. A lógica de negócio é implementada na camada de aplicação.
A Apoia utiliza uma biblioteca de prompts para interagir com os modelos de IA. Esses prompts são armazenados em arquivos de texto no formato Markdown (.md) no diretório prompts/. Cada arquivo .md pode conter as seguintes seções:
- SYSTEM PROMPT: Instruções de alto nível para o modelo de IA.
- PROMPT: O prompt principal a ser enviado para o modelo.
- JSON SCHEMA: Um esquema JSON que define a estrutura da resposta esperada do modelo.
- FORMAT: Instruções de formatação para a saída.
Essa abordagem permite que os prompts sejam facilmente editados e versionados sem a necessidade de alterar o código-fonte da aplicação.
Os principais procedimentos operacionais da Apoia são:
-
Análise de Processo:
- O usuário informa o número do processo.
- A Apoia se conecta ao sistema processual (via MNI) ou diretemente ao Datalake do CNJ para obter os dados e documentos do processo.
- As peças do processo são enviadas para o modelo de IA, juntamente com os prompts adequados para a geração de resumos, análises e outros "produtos".
- Os resultados são exibidos para o usuário e armazenados no banco de dados para referência futura.
-
Processamento em Lote:
- O usuário pode enviar uma lista de processos para serem analisados em lote.
- A Apoia processa cada processo individualmente, seguindo o mesmo fluxo da análise de processo.
- Os resultados são armazenados no banco de dados e podem ser consultados posteriormente.
-
Geração de Ementas:
- O usuário fornece o texto de uma decisão ou acórdão.
- A Apoia utiliza um prompt específico para gerar uma ementa no formato da Resolução 156/2024 do CNJ.
-
Revisão de Textos:
- O usuário insere um texto a ser revisado.
- A Apoia utiliza um modelo de IA para revisar o texto, sugerindo melhorias na gramática, estilo e clareza.
A segurança da informação na Apoia é tratada em várias camadas:
-
Autenticação: A autenticação de usuários é realizada através do NextAuth, que suporta provedores como Keycloak e credenciais locais. Isso garante que apenas usuários autorizados tenham acesso ao sistema.
-
Autorização: O acesso a determinadas funcionalidades pode ser restrito com base nos papéis e permissões do usuário.
-
Tokens JWT: A comunicação com a API é protegida por tokens JWE (JSON Web Encryption), que garantem a confidencialidade e a integridade dos dados transmitidos.
-
Anonimização: A Apoia possui um módulo de anonimização que remove informações sensíveis de documentos antes de enviá-los para os modelos de IA. Isso inclui a remoção de nomes, números de documentos, endereços e outras informações de identificação pessoal.
-
Nível de Confidencialidade: É possível configurar um nível máximo de confidencialidade para os documentos que podem ser acessados pela Apoia, impedindo o processamento de documentos sigilosos.
-
Segredos de Aplicação: Todas as chaves de API, segredos de JWT e outras informações sensíveis são armazenadas em variáveis de ambiente e não são expostas no código-fonte.