feat: linha do tempo processual dos autos vinculados Pet16704

Substitui o gitGraph do Mermaid (ilegível com 3.437 commits) por uma
timeline interativa com eixo temporal real, filtros por instituição,
tipo de documento e pessoas mencionadas (extraidas via NER local com
pierreguillou/ner-bert-base-cased-pt-lenerbr).
This commit is contained in:
2026-09-13 10:37:10 +02:00
commit 891d58ec55
10 changed files with 1559 additions and 0 deletions
+94
View File
@@ -0,0 +1,94 @@
# 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 (20182025) 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
```
index.html página estática (self-contained: HTML + CSS + JS, sem build step)
docs.json um registro por documento (id, instituição, data, texto completo, tipo, pessoas)
people.json catálogo de pessoas identificadas: {key, count, role}
pipeline/ scripts e dados intermediários da extração (ver abaixo)
```
## 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`)** — 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**. O papel processual de cada uma (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 página, 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.
## Rodando localmente
Não há build step — é HTML/CSS/JS puro. Basta servir a pasta com qualquer servidor estático:
```bash
python3 -m http.server 8000
# abrir http://localhost:8000/
```
Para regerar `docs.json` e `people.json` a partir dos dados originais (`gitgraph.md`,
`TIMELINE.md`, ambos fora deste repositório), ver os scripts em `pipeline/`.
## 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.