From superjurista-dev
Cria skill customizada de download do PJE para qualquer tribunal, usando engenharia reversa de HAR. Ideal ao adaptar pje-download para tribunal diferente do TRF5, com HAR disponível.
How this skill is triggered — by the user, by Claude, or both
Slash command
/superjurista-dev:criar-pje-downloadgeneral-purposeThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
<identidade>
<quando_usar>
- Usuario quer baixar processos de tribunal diferente do TRF5
- Usuario menciona "criar skill para [tribunal]"
- Usuario tem arquivo HAR do PJE de outro tribunal
- Usuario quer adaptar pje-download para seu tribunal
- Se o tribunal for TRF5, usar skill pje-download diretamente
- Se usuario so quer baixar (nao criar skill), usar skill existente
</quando_usar>
**HAR de Listagem (obrigatorio):**
```
1. Abra o PJE do seu tribunal no navegador
2. Faca login com certificado digital
3. Abra DevTools (F12) -> aba Network
4. Marque "Preserve log" para nao perder requisicoes
5. Navegue ate o Painel do Usuario
6. Aguarde carregar a lista de processos
7. Clique direito na lista -> "Save all as HAR"
8. Salve como: pje_listagem.har
```
**HAR de Download (recomendado):**
```
1. Com DevTools ainda aberto
2. Clique em um processo da lista
3. Solicite download dos autos digitais
4. Aguarde o PDF comecar a baixar
5. Salve novo HAR: pje_download.har
```
**Alternativa: Chrome MCP**
Se o usuario tiver Chrome MCP configurado:
```
1. Usar mcp__claude-in-chrome__read_network_requests
2. Navegar pelo PJE logado
3. Capturar requisicoes em tempo real
```
Ler o HAR e identificar o dominio base do PJE.
**Padroes comuns de URL:**
| Tribunal | Padrao 1G | Padrao 2G |
|----------|-----------|-----------|
| TRF1 | pje1g.trf1.jus.br | pje2g.trf1.jus.br |
| TRF2 | pje.trf2.jus.br | pje2g.trf2.jus.br |
| TRF3 | pje1g.trf3.jus.br | pje2g.trf3.jus.br |
| TRF4 | pje.trf4.jus.br | - |
| TRF5 | pje1g.trf5.jus.br | pje2g.trf5.jus.br |
| TRTs | pje.trtN.jus.br | - |
| TJs | pje.tjXX.jus.br | - |
**O que procurar no HAR:**
```python
# Buscar em entries[].request.url
# Filtrar por: /pje/seam/resource/rest/
# Exemplo: https://pje1g.trf5.jus.br/pje/seam/resource/rest/...
BASE_URL = extrair_dominio(url) # https://pje1g.trf5.jus.br
```
Os cookies sao a chave da autenticacao. Identificar quais sao obrigatorios.
**Cookies universais do PJE:**
| Cookie | Funcao | Obrigatorio |
|--------|--------|-------------|
| JSESSIONID | Sessao do servidor | SIM |
| KEYCLOAK_IDENTITY | Token SSO | SIM (se usar Keycloak) |
| KEYCLOAK_SESSION | Sessao SSO | SIM (se usar Keycloak) |
| dtCookie | Monitoramento | Nao |
**Cookies especificos do tribunal:**
Procurar cookies com nome do tribunal (ex: `trf5017e3f72`).
Estes sao identificadores de sessao sticky/load balancer.
**O que procurar no HAR:**
```python
# Em entries[].request.cookies
# Listar todos os cookies unicos
# Marcar quais aparecem em TODAS as requisicoes bem-sucedidas
```
Alguns tribunais exigem headers customizados.
**Headers comuns do PJE:**
| Header | Valor Exemplo | Funcao |
|--------|---------------|--------|
| X-pje-legacy-app | pje-trf5-1g | Identificador da aplicacao |
| X-pje-usuario-localizacao | 12345 | ID da lotacao do usuario |
| X-pje-cookies | [cookie string] | Cookies em header (redundante) |
| Origin | https://pje1g.trf5.jus.br | CORS |
| Referer | https://frontend-prd.trf5.jus.br/ | Pagina de origem |
**ATENCAO: Authorization**
```
NUNCA enviar header Authorization com Bearer token para endpoints de download!
A API REST do PJE usa APENAS cookies para autenticacao de sessao.
Enviar Authorization causa erro 401.
```
**O que procurar no HAR:**
```python
# Em entries[].request.headers
# Filtrar headers que comecam com "X-pje"
# Anotar valores estaticos vs dinamicos
```
Identificar os endpoints da API REST e paginas JSF.
**Endpoints REST (JSON):**
```
# Listagem de processos
GET /pje/seam/resource/rest/pje-legacy/painelUsuario/recuperarProcessosTarefaPendenteComCriterios/{tarefa}/false
# Gerar chave de acesso
GET /pje/seam/resource/rest/pje-legacy/painelUsuario/gerarChaveAcessoProcesso/{idProcesso}
# Buscar por numero CNJ
GET /pje/seam/resource/rest/pje-legacy/api/processoPublico/consultarProcessoPorNumero/{numeroCNJ}
```
**Endpoints JSF (HTML/PDF):**
```
# Lista de autos digitais (HTML com ViewState)
GET /pje/Processo/ConsultaProcesso/Detalhe/listAutosDigitais.seam?ca={chaveAcesso}
# Download de documento
GET /pje/Processo/ConsultaDocumento/listView.seam?idProcessoDocumento={id}
```
**O que procurar no HAR:**
```python
# Filtrar entries por:
# - URL contem "/pje/seam/resource/rest/" (API REST)
# - URL contem ".seam" (paginas JSF)
# - mimeType == "application/pdf" (downloads)
```
Consolidar descobertas em um arquivo de configuracao.
**Criar: config_tribunal.json**
```json
{
"tribunal": "TRF1",
"instancia": "1g",
"base_url": "https://pje1g.trf1.jus.br",
"frontend_url": "https://frontend-prd.trf1.jus.br",
"headers": {
"X-pje-legacy-app": "pje-trf1-1g",
"Origin": "https://pje1g.trf1.jus.br"
},
"cookies_obrigatorios": [
"JSESSIONID",
"KEYCLOAK_IDENTITY",
"trf1xxxxxxxx"
],
"endpoints": {
"listar_processos": "/pje/seam/resource/rest/pje-legacy/painelUsuario/recuperarProcessosTarefaPendenteComCriterios/{tarefa}/false",
"gerar_chave": "/pje/seam/resource/rest/pje-legacy/painelUsuario/gerarChaveAcessoProcesso/{id}",
"autos_digitais": "/pje/Processo/ConsultaProcesso/Detalhe/listAutosDigitais.seam"
},
"tarefas": {
"sentenca": "Elaboracao de Sentenca - Minutar",
"decisao": "Elaboracao de decisao - Minutar"
}
}
```
Usar os scripts do TRF5 como base, substituindo valores hardcoded.
**Arquivo: criar script de listagem**
```python
# Substituir no template:
# - BASE_URL = config["base_url"]
# - X-pje-legacy-app = config["headers"]["X-pje-legacy-app"]
# - Referer/Origin = config["frontend_url"]
```
**Consultar referencias:**
- `references/template-scripts.md` - Templates dos scripts parametrizaveis
- `references/analise-har.md` - Guia completo de analise de HAR
**Estrutura de saida:**
```
.claude/skills/pje-download-{tribunal}/
├── SKILL.md
├── config.json
└── scripts/
├── listar_processos.py
├── baixar_pdfs.py
└── extrair_cookies_har.py
```
Testar a skill criada com sessao ativa do usuario.
**Checklist de validacao:**
- [ ] Extrai cookies do HAR corretamente
- [ ] Lista processos da fila escolhida
- [ ] Obtem chave de acesso do processo
- [ ] Baixa PDF dos autos digitais
- [ ] Trata erro de sessao expirada
**Teste minimo:**
```bash
# 1. Extrair cookies
python scripts/extrair_cookies_har.py --har ~/Downloads/pje.har --output session.json
# 2. Listar 1 processo
python scripts/listar_processos.py --cookies session.json --limite 1
# 3. Baixar 1 processo
python scripts/baixar_pdfs.py --cookies session.json --processos processos.json --limite 1
```
O PJE usa duas camadas de autenticacao:
1. **API REST** - Para operacoes de listagem e metadados (JSON)
2. **Sessao JSF** - Para navegacao e download (HTML/PDF com ViewState)
Ambas compartilham cookies, mas a sessao JSF expira mais rapido (~30min).
Todos os tribunais que usam PJE 2.x seguem o mesmo padrao de endpoints.
A diferenca esta em: dominio, cookies de load balancer, e headers X-pje-*.
NUNCA enviar header `Authorization: Bearer` para endpoints de download.
A API REST aceita Bearer, mas as paginas JSF retornam 401 se receber Auth.
Criar scripts com credenciais hardcoded
Tentar adivinhar cookies ou tokens
Ignorar erros de sessao expirada
Documentar o tribunal e versao do PJE
Incluir tratamento de erro 401/403
Validar HAR antes de extrair dados
**Entrada:** HAR com 847 requisicoes do PJE TRF1
**Descobertas:**
- BASE_URL: https://pje1g.trf1.jus.br
- Cookie especifico: trf1a7b8c9d0
- Header: X-pje-legacy-app: pje-trf1-1g
**Saida:** Skill pje-download-trf1 funcional
**Entrada:** HAR de TJ estadual sem KEYCLOAK_IDENTITY
**Descobertas:**
- Autenticacao via JSESSIONID apenas
- Cookie de sessao: TJSPJSESSIONID
- Sem headers X-pje (versao mais antiga)
**Adaptacao:** Script simplificado sem validacao Keycloak
- `references/analise-har.md` - Guia detalhado de analise de HAR
- `references/template-scripts.md` - Templates parametrizaveis dos scripts Python
npx claudepluginhub georgemarmelstein/superjurista-devCreates MCP servers for scraping Brazilian court jurisprudence from sites without public REST APIs. Detects JSF/AJAX forms, discovers boolean syntax, and generates MCP tools.
Automates browser interactions via Chrome DevTools Protocol. Screenshots, clicks, types, navigates, reads page accessibility trees, extracts text, and executes JavaScript in web pages. Use when the user asks to interact with a website, test a web app, fill web forms, scrape web content, or automate browser tasks.
Parses court SMS messages (service, filing, hearing notices) to extract case numbers, parties, and download links, then downloads documents and archives them to case directories.