117 lines
7.5 KiB
Markdown
117 lines
7.5 KiB
Markdown
# Pet16704 — Linha do Tempo Processual
|
||
|
||
Visualização interativa da linha do tempo dos autos vinculados **Pet16704** (STF) — um ponto por
|
||
documento, agrupado pela instituição de origem (Relatoria, PGR, Polícia Federal, Partes e Defesas,
|
||
Secretaria e Cartório) e posicionado pela data real de juntada.
|
||
|
||
**Ver a página publicada:** (preencha aqui o link do GitHub Pages depois do primeiro deploy)
|
||
|
||
## Por que isso existe
|
||
|
||
O material de origem trazia um `gitGraph` do Mermaid com um commit por documento (3.437 no total).
|
||
Isso não escala: o Mermaid posiciona commits em sequência fixa, sem eixo temporal real, e o SVG
|
||
gerado saía em **16.368 × 40 px** — ilegível. As descrições também vinham truncadas em ~100
|
||
caracteres pelas tags do Mermaid.
|
||
|
||
Este projeto troca aquele gráfico por uma timeline de verdade:
|
||
|
||
- eixo X com datas reais (não sequência de commits) e zoom/pan sobre o período;
|
||
- uma faixa de visão geral (histograma mensal empilhado por instituição) para navegar entre o
|
||
período parado (2018–2025) e a explosão de atividade em 2026;
|
||
- textos completos, sem truncamento, extraídos de `TIMELINE.md`;
|
||
- filtros por instituição, tipo de documento e pessoas mencionadas;
|
||
- uma visão em tabela (ordenável, pesquisável) como alternativa acessível ao gráfico.
|
||
|
||
## Estrutura do repositório
|
||
|
||
```
|
||
web/index.html página estática (self-contained: HTML + CSS + JS, sem build step)
|
||
web/docs.json um registro por documento (id, instituição, data, texto completo, tipo, pessoas)
|
||
web/people.json catálogo de pessoas identificadas: {key, count, role}
|
||
PESSOAS.md o mesmo catálogo, em tabelas markdown agrupadas por papel processual
|
||
pipeline/ scripts e dados intermediários da extração (referência, não é preciso rodar nada)
|
||
parte1/, parte2/ resumos dos autos vinculados a Pet16704 (um .md por processo + um INDEX.md geral)
|
||
```
|
||
|
||
Para rodar localmente: `python3 -m http.server 8000` **na raiz do repositório** e abrir
|
||
`http://localhost:8000/web/index.html` (servir a partir de dentro de `web/` quebra o botão de
|
||
resumo do processo, que busca `../parte1/`\ `../parte2/` um nível acima)
|
||
(precisa de um servidor por causa do `fetch()` de `docs.json`/`people.json` — abrir o arquivo direto
|
||
via `file://` não funciona nos navegadores).
|
||
|
||
Na linha do tempo, clicar (ou tocar, no celular) em um ponto abre ao lado o resumo completo daquele
|
||
documento — data, instituição, tipo, texto integral, pessoas mencionadas e arquivo-fonte. Passar o
|
||
mouse sobre um ponto, sem clicar, mostra só uma prévia rápida (tooltip).
|
||
|
||
## Como os dados foram montados
|
||
|
||
1. **`docs.json`** — cruzamento de duas fontes do dump original (`gitgraph.md` para a instituição
|
||
de cada documento, `TIMELINE.md` para data/texto completo/arquivo-fonte). Ver
|
||
`pipeline/extract.py`.
|
||
|
||
2. **Tipo de documento** — extraído do nome do arquivo-fonte de cada documento (ex.: "Despacho",
|
||
"Petição", "Procuração", "Certidão"), normalizado com acentuação correta.
|
||
|
||
3. **Pessoas mencionadas (`people.json` / `PESSOAS.md`)** — reconhecimento de entidades feito
|
||
**localmente, sem usar o Claude para o texto em si**, com o modelo
|
||
[`pierreguillou/ner-bert-base-cased-pt-lenerbr`](https://huggingface.co/pierreguillou/ner-bert-base-cased-pt-lenerbr)
|
||
(BERT treinado no corpus **LeNER-Br**, de textos jurídicos brasileiros). Rodado sobre os 3.437
|
||
textos via `pipeline/run_ner.py`.
|
||
|
||
Depois da extração bruta (435 nomes distintos), foi feita uma limpeza:
|
||
- separação de nomes que o modelo juntou erroneamente com "e" (ex. "Fulano e Beltrano" → duas
|
||
pessoas), preservando sobrenomes compostos legítimos ("Castro e Silva");
|
||
- remoção de nomes de escritórios de advocacia reconhecidos como pessoa por engano;
|
||
- descarte de fragmentos de um único token (nomes incompletos, ex. só o primeiro nome);
|
||
- junção de variações do mesmo nome por contenção de tokens (ex. "Daniel Vorcaro" →
|
||
"Daniel Bueno Vorcaro").
|
||
|
||
Resultado: **292 pessoas distintas**, listadas em `people.json` (formato bruto, usado pela
|
||
página) e em `PESSOAS.md` (tabelas legíveis, agrupadas por papel). O papel processual de cada
|
||
pessoa (Relator/Ministro, Outorgante/Parte, Peticionante, Advogado(a), Investigado(a),
|
||
Delegado(a) PF, Senador(a), Deputado(a), Alvo de diligência, Perito(a), Testemunha) foi inferido
|
||
por frases-gatilho perto de cada menção (ex. "Despacho do Relator X", "Procuração de X
|
||
constituindo Y", "em desfavor de X"). **63% das pessoas (185 de 292) ficaram sem papel
|
||
classificado** ("Mencionado(a)") por falta de um sinal textual próximo confiável — isso é
|
||
esperado e fica visível na própria listagem, não escondido.
|
||
|
||
**Limitações conhecidas:** isso é reconhecimento automático de entidades em texto livre, não uma
|
||
base curada. Pode haver nomes não reconhecidos, variações da mesma pessoa não unificadas, e
|
||
classificações de papel aproximadas. Trate como um ponto de partida para busca, não como fonte
|
||
definitiva de identidade ou qualificação processual.
|
||
|
||
4. **Recuperação de datas (`pipeline/recover_dates.py`)** — dos 615 documentos que o `TIMELINE.md`
|
||
deixou sem data, 366 tiveram uma data recuperada lendo o texto original do próprio documento em
|
||
busca da sua linha de fechamento no padrão "Cidade/UF, DD de mês de YYYY." (ex. "Brasília, 10 de
|
||
abril de 2026."). Esses casos ficam marcados com `dateInferred: true` em `docs.json` e aparecem
|
||
no resumo do documento como "data lida no texto do documento, não da juntada nos autos" — é uma
|
||
data real do documento, mas não necessariamente a data em que foi juntado ao processo. Os 249
|
||
restantes seguem sem data (fora do gráfico, só na tabela). Duas versões mais permissivas foram
|
||
tentadas e descartadas por amostragem manual antes desta: buscar qualquer "DD de mês de YYYY" no
|
||
texto pegava datas de citação de leis/decretos ("da Lei 11.419, de 19 de dezembro de 2006") e
|
||
prazos de normas citadas ("será exigido a partir de 1º de janeiro de 2017") como se fossem a data
|
||
do documento; e um fallback numérico (`dd.mm.aaaa`) pegava números soltos de anexos técnicos
|
||
longos (um laudo de vistoria, a validade de um CRECI) sem relação com a data real. Exigir uma
|
||
cidade e vírgula imediatamente antes da data eliminou os falsos positivos encontrados.
|
||
|
||
5. **Autos vinculados (`parte1/`, `parte2/`)** — resumos em markdown dos processos conexos citados
|
||
ao longo da Pet16704 (Inq 5026, Inq 5035, Inq 5050, Inq 5070, Rcl 88121 e diversas Petições —
|
||
PET 15198, 15375, 15478 etc.), um arquivo por processo mais um `INDEX.md` consolidado em cada
|
||
pasta. Cobrem partes/investigados, advogados, autoridades e linha do tempo resumida de cada
|
||
procedimento. Na página, o resumo de qualquer documento da linha do tempo tem um botão "Ver
|
||
resumo do processo" que busca e mostra o arquivo correspondente aqui.
|
||
|
||
## Projeto relacionado
|
||
|
||
[**vorcaros**](https://rafapolo.github.io/vorcaros/) — visualização em grafo da rede societária
|
||
(empresas e sócios) ligada às mesmas pessoas que aparecem nesta linha do tempo processual. Os dois
|
||
projetos olham o mesmo caso por ângulos diferentes: um pela rede de negócios, este pelo andamento
|
||
processual.
|
||
|
||
## Aviso
|
||
|
||
Este projeto reúne informações de um processo público em curso no STF. Nomes, datas e descrições
|
||
refletem o conteúdo dos autos tal como disponibilizado; erros de extração automática (OCR, NER,
|
||
digitação no material de origem) podem existir. Não constitui manifestação jurídica sobre culpa,
|
||
inocência ou qualquer qualificação processual das pessoas mencionadas.
|