Sistema pessoal de gestão de processos jurídicos com bot no Telegram, dashboard web e inteligência artificial integrada. Desenvolvido para advogados brasileiros que desejam centralizar intimações, prazos e tarefas em um único lugar.
A v1 do JusEasy usava a API da AASP para puxar intimações. Essa API foi descontinuada / não está mais disponível para todos os associados. A versão atual (v2) substituiu essa fonte por leitura direta do Gmail usando IMAP, pegando emails do Recorte Digital da OAB (testado com OAB-ES, mas o parser é genérico para o template Webjur Brasil).
Se você precisa do código antigo que usa AASP, consulte a branch old-AASP. Ela está congelada e não recebe atualizações.
v1 (old-AASP) |
v2 (atual main) |
|
|---|---|---|
| Fonte de intimações | API da AASP | Gmail IMAP (label "OAB-ES") |
| Pré-requisito | Associado AASP/SP com chave de API | Conta Gmail + 2FA + App Password |
| Frequência | Cron 3x/dia (8h, 12h, 16h) | Cron 3x/dia (4h, 7h, 10h — refinável) |
| Custo | Anuidade AASP | Zero |
Tudo o mais (banco, IA, Telegram, dashboard) continua igual.
- 🔔 Captura automática de intimações via email — JusEasy acessa seu Gmail via IMAP, lê emails da OAB com label "OAB-ES", parseia o HTML do Recorte Digital (Webjur Brasil) e cria intimações no banco
- 🤖 Resumo IA de intimações — A IA (Groq) resume cada intimação nova e sugere ação
- 📅 Alertas de prazos — Notifica prazos dos próximos 3 dias antes que vençam
- 📋 Resumo diário inteligente — Envia resumo pela manhã somente se houver tarefas, intimações não lidas ou urgências
- 📁 Gestão de processos — Cadastre, edite e arquive processos com número CNJ; auto-criação de processo quando uma intimação chega para um número novo
- 📝 Tarefas e prazos — Crie tarefas com prioridade, tipo e data de vencimento
- 🧠 Consulta jurídica com IA — Use o comando
/iapara tirar dúvidas com contexto do processo - 🌐 Dashboard web — Interface moderna com Tailwind CSS, acessível via navegador, responsiva mobile
| Serviço | Obrigatório | Finalidade | Custo |
|---|---|---|---|
| Supabase | ✅ | Banco de dados PostgreSQL | Gratuito |
| Telegram @BotFather | ✅ | Criar o bot | Gratuito |
| Conta Gmail com 2FA | ✅ | Recebe os emails do Recorte Digital + App Password para IMAP | Gratuito |
| Cadastro no Recorte Digital da sua OAB Estadual | ✅ | Recebe as intimações por email | Anuidade OAB |
| Groq | ⭐ Recomendado | IA para resumos e consultas | Gratuito |
| Docker | ✅ | Deploy da aplicação | Gratuito |
git clone https://github.com/helioneto144/JusEasy.git
cd JusEasy
cp .env.example .env- Acesse supabase.com e crie um projeto
- Vá em SQL Editor e execute o SQL abaixo para criar as tabelas:
-- Tabela de processos
create table processos (
id uuid primary key default gen_random_uuid(),
numero text unique not null,
vara text,
comarca text,
assunto text,
sintese text,
partes jsonb default '{"autor": [], "reu": []}',
valor_causa numeric(15,2),
data_distribuicao date,
status text default 'em_andamento',
arquivado boolean default false,
created_at timestamptz default now(),
updated_at timestamptz default now()
);
-- Tabela de intimações
create table intimacoes (
id uuid primary key default gen_random_uuid(),
processo_id uuid,
data_disponibilizacao date not null,
data_publicacao date,
diario_oficial text,
caderno text,
pagina integer,
conteudo text not null,
numero_intimacao text,
hash_conteudo text unique,
lida boolean default false,
created_at timestamptz default now()
);
-- Tabela de tarefas
create table tarefas (
id uuid primary key default gen_random_uuid(),
processo_id uuid,
titulo text not null,
descricao text,
data_vencimento date not null,
hora_vencimento time,
concluida boolean default false,
prioridade text default 'media',
tipo text,
notificado boolean default false,
created_at timestamptz default now()
);
-- Tabela de notas (anotações livres em processos)
create table notas (
id uuid primary key default gen_random_uuid(),
processo_id uuid references processos(id) on delete cascade,
conteudo text not null,
created_at timestamptz default now()
);
-- Tabela de emails recebidos (auditoria + buffer pra parser)
create table emails_recebidos (
id uuid primary key default gen_random_uuid(),
from_addr text,
subject text,
body_html text,
body_text text,
message_id text,
imap_uid text,
received_at_source text,
processed boolean default false,
parse_error text,
intimacoes_count integer default 0,
received_at timestamptz default now()
);
create unique index idx_emails_recebidos_message_id
on emails_recebidos(message_id) where message_id <> '';
create index idx_emails_recebidos_processed
on emails_recebidos(processed) where processed = false;-
Em Project Settings > API, copie:
- Project URL →
SUPABASE_URL - anon public key →
SUPABASE_ANON_KEY
- Project URL →
-
Em Project Settings > Database, copie a Connection string (Transaction mode) →
DATABASE_URL
- Abra o Telegram e converse com @BotFather
- Envie
/newbote siga as instruções - Copie o token gerado →
TELEGRAM_BOT_TOKEN - Para obter seu Chat ID:
- Envie qualquer mensagem para o seu bot
- Acesse:
https://api.telegram.org/bot<SEU_TOKEN>/getUpdates - Procure por
"chat": {"id": NUMERO}→ esse número é oTELEGRAM_CHAT_ID
Esse passo substitui a chave AASP da v1.
-
Ativar 2FA em https://myaccount.google.com/security (necessário para gerar App Password)
-
App:
Mail· Device:Other→ digiteJusEasy -
Copie a senha de 16 caracteres gerada (ex:
abcd efgh ijkl mnop) — remova os espaços ao colar no.env -
Criar filtro Gmail para aplicar a label
OAB-ESaos emails do Recorte Digital:- Gmail → Settings (engrenagem) → See all settings → Filters and Blocked Addresses → Create a new filter
- From: o remetente do Recorte Digital da sua OAB Estadual.
Exemplo OAB-ES:
oabes@recortedigital.adv.br - Clique em Create filter
- ☑ Apply the label: criar nova label
OAB-ES - ☑ Also apply filter to matching conversations (para pegar emails antigos também)
- Salvar
O parser foi testado com o Recorte Digital da OAB-ES (template Webjur Brasil). Outras OABs estaduais que usem o mesmo serviço (Webjur Brasil) devem funcionar sem mudanças. Se sua OAB usa template diferente, será necessário ajustar
app/services/email_parser.py.
- Acesse console.groq.com e crie uma conta gratuita
- Vá em API Keys e crie uma nova chave
- Copie a chave → use como
GROQ_API_KEYeAI_API_KEY
A Groq oferece um plano gratuito generoso, mais que suficiente para uso pessoal.
Edite o arquivo .env com todas as credenciais obtidas:
# Supabase
SUPABASE_URL=https://seu-projeto.supabase.co
SUPABASE_ANON_KEY=sua-anon-key
DATABASE_URL=postgresql://postgres.seu-projeto:senha@host:6543/postgres
# Gmail IMAP (substitui AASP)
GMAIL_USER=seu-email@gmail.com
GMAIL_APP_PASSWORD=abcdefghijklmnop
GMAIL_IMAP_HOST=imap.gmail.com
GMAIL_IMAP_LABEL=OAB-ES
# Feature flags
AASP_ENABLED=false # mantenha false se não tem chave AASP
OAB_ES_ENABLED=true # ativa o pipeline de processamento
# Telegram
TELEGRAM_BOT_TOKEN=1234567890:AAExxxxxxxxxxxxxxxx
TELEGRAM_CHAT_ID=123456789
# IA (Groq)
GROQ_API_KEY=gsk_xxxxxxxxxxxxxxxx
GROQ_BASE_URL=https://api.groq.com/openai/v1
GROQ_MODEL=llama-3.3-70b-versatile
AI_API_KEY=gsk_xxxxxxxxxxxxxxxx
AI_BASE_URL=https://api.groq.com/openai/v1
AI_MODEL=llama-3.3-70b-versatile
# Geral
TIMEZONE=America/Sao_Paulo
APP_URL=http://SEU-IP-OU-DOMINIO:8000Sobre AASP: se você ainda tem chave AASP e quer usar paralelo (improvável), preencha
AASP_API_KEYeAASP_ENABLED=true. O hash de deduplicação garante que não duplica intimações entre as duas fontes.
docker compose up -d --buildAcesse o dashboard em http://localhost:8000 (ou o IP do seu servidor).
Para ver os logs:
docker logs oracle --tail 50 -fEndpoints administrativos para testar:
# 1. Testar conexão IMAP (sem ler emails)
curl http://localhost:8000/api/gmail-test
# Esperado: {"ok":true,"label_existe":true,...}
# 2. Disparar coleta manual (lê UNSEEN com label OAB-ES, processa, notifica Telegram)
curl -X POST http://localhost:8000/api/check-gmail
# Esperado: {"status":"checked","emails_novos":N}
# 3. Reprocessar emails já no banco (debug)
curl -X POST http://localhost:8000/api/admin/reprocess-emails
# 4. Buscar emails antigos por subject (admin)
curl -X POST "http://localhost:8000/api/admin/gmail-fetch-by-subject?subject=Public.%201."Após receber pelo menos 1 email com Public. 1. (ou maior) no subject:
- Você recebe notificação Telegram com o trecho da intimação + botões interativos
- Você recebe resumo IA (Groq) em até 3 linhas
- A intimação aparece no dashboard
/intimacoese fica vinculada ao processo (auto-criado se for número CNJ novo)
| Comando | Descrição |
|---|---|
/start |
Menu principal com todos os comandos |
/status |
Resumo: processos, intimações não lidas, tarefas urgentes |
/stats |
Estatísticas detalhadas (ativos/arquivados, concluídas semana) |
/resumo |
Dispara o resumo diário manualmente |
/intimacoes |
Lista as últimas intimações não lidas |
/processos |
Lista os processos cadastrados |
/processo NUMERO |
Detalhes de um processo (ex: /processo 1234567-00.2024.8.26.0100) |
/tarefas |
Lista tarefas pendentes |
/prazos |
Tarefas agrupadas por urgência |
/hoje |
Tarefas com vencimento hoje |
/semana |
Tarefas para os próximos 7 dias |
/calendario |
Visão semanal: tarefas + intimações por dia |
/tarefa TITULO|DATA|TIPO|PRIORIDADE |
Cria tarefa (ex: /tarefa Contestação|2025-05-10|prazo|urgente) |
/nota NUMERO TEXTO |
Adiciona anotação a um processo |
/busca TERMO |
Busca em processos, intimações e tarefas |
/ia [NUMERO] PERGUNTA |
Consulta jurídica com IA (ex: /ia 1234... Qual o prazo para recurso?) |
/yaml NUMERO |
Exporta o processo em YAML para análise externa |
prazo · audiencia · peticao · recurso
urgente · alta · media · baixa
Interface responsiva (mobile + desktop) com sidebar colapsável:
- Dashboard — visão geral, contadores, mini-calendário semanal, próximos prazos
- Processos — lista com filtros, busca, status (em andamento, audiência marcada, recurso, etc)
- Detalhes do Processo — timeline cronológica de intimações + tarefas + notas, dropdown de status, edição inline
- Intimações — listagem com filtro lidas/não lidas, paginação
- Tarefas — Kanban por prioridade + tabela completa, conclusão e exclusão
- Busca global (Cmd+K na sidebar) — pesquisa em processos, intimações e tarefas
| Variável | Obrigatória | Descrição |
|---|---|---|
SUPABASE_URL |
✅ | URL do projeto Supabase |
SUPABASE_ANON_KEY |
✅ | Chave anon do Supabase |
DATABASE_URL |
✅ | Connection string PostgreSQL |
GMAIL_USER |
✅ | Email Gmail que recebe os emails da OAB |
GMAIL_APP_PASSWORD |
✅ | App Password de 16 chars (sem espaços) |
GMAIL_IMAP_LABEL |
— | Label do filtro Gmail (padrão: OAB-ES) |
OAB_ES_ENABLED |
✅ | true para ativar o pipeline de email |
AASP_ENABLED |
— | true se você ainda tem chave AASP (legado) |
AASP_API_KEY |
— | Chave AASP (só se AASP_ENABLED=true) |
TELEGRAM_BOT_TOKEN |
✅ | Token do bot criado no @BotFather |
TELEGRAM_CHAT_ID |
✅ | ID do chat que receberá as notificações |
GROQ_API_KEY |
⭐ | Chave Groq para resumos de intimações |
AI_API_KEY |
⭐ | Chave para o comando /ia (pode ser a mesma Groq) |
APP_URL |
— | URL pública da aplicação (padrão: http://localhost:8000) |
TIMEZONE |
— | Fuso horário (padrão: America/Sao_Paulo) |
Mais detalhes do setup IMAP em docs/oab-es-email.md.
- Backend: FastAPI + Python 3.11
- Banco de dados: Supabase (PostgreSQL)
- Bot Telegram: python-telegram-bot v21
- Agendamento: APScheduler (CronTrigger 4h/7h/10h America/Sao_Paulo)
- IMAP: imap-tools (login via App Password)
- Parser HTML: BeautifulSoup4 (template Webjur Brasil OAB-ES)
- IA: Groq (llama-3.3-70b-versatile)
- Frontend: Tailwind CSS + HTMX + Alpine.js (responsivo)
- Deploy: Docker + Docker Compose
main— versão atual (Gmail IMAP / OAB-ES). Recebe novos commits.old-AASP— versão antiga que usa a API da AASP. Congelada, não recebe atualizações. Use se ainda tem acesso à API e prefere essa fonte.
MIT — sinta-se livre para usar, modificar e distribuir.
Desenvolvido por Helio Menezes Neto