Cobertura estadual: onde achar cada diário, e o que falta
Levantamento feito em 19/09/2026, de dentro do container, pela VPN brasileira — que é exatamente o caminho que a coleta usa. Um endereço que responde aqui responde para o coletor; um que não responde aqui, não responde para ele também, por mais que abra no seu navegador.
O que foi medido: para cada uma das 27 UFs, o endereço do Diário Oficial do Executivo e o do Tribunal de Contas foram chamados, e a resposta foi classificada (código HTTP, tipo de conteúdo, presença de link de PDF). O que NÃO foi medido: o layout interno de cada diário. Saber que uma origem responde não é saber que o parser_config dela está escrito.
1. Resposta curta
| Camada | Temos | De |
|---|---|---|
| Judiciário estadual (TJ + TJM) | 30 | 30 — completo, via DJEN |
| Diário Oficial do Executivo | 2 | 27 — SP e RO |
| Tribunal de Contas | 3 | 27+ — SP, RO e AM |
| Municipal (Querido Diário) | 22 UFs, 391 cidades | — |
| Federal | DOU, STF, TCU, DJEN | — |
### ⚠️ A página de vendas promete mais do que existe site/landing.html anuncia "Tribunal de Contas de todos os 26 estados e o DF", gera uma linha de "Diário Oficial do Estado" para cada UF, e soma 241 fontes. O catálogo real tem 2 DOEs e 3 TCEs. A cobertura judicial (DOU, 27 TJs, 6 TRFs, 24 TRTs, superiores) é verdadeira e é a maior parte do valor. O que não se sustenta é a promessa estadual de Executivo e Controle. Corrigir a página antes de vender, ou vender só o que a §2 lista como pronto.
2. O que está coletando hoje
| Fonte | Chave | Como | Medido |
|---|---|---|---|
| DOE São Paulo | doe:SP | API própria | em produção desde agosto |
| DOE Rondônia | doe:RO | PDF, URL dedutível da data | 833 atos em 18/09 |
| TCE São Paulo | tce:SP | PDF, adaptador próprio | em produção |
| TCE Rondônia | tce:RO | PDF, descoberta com dia na regex | 90 atos em 18/09 |
| TCE Amazonas | tce:AM | PDF, descoberta com data por extenso | 193 atos em 18/09 |
| Municípios de SC | dom:sc-ciga | PDF, descoberta | 2.577 atos, 143 municípios |
Os três últimos entraram sem uma linha de código nova — só configuração, pelo caminho descrito no manual de fontes § 2.
3. Diários Oficiais do Executivo — as 27 UFs
✅ coletando · 🟡 responde, falta mapear o layout · 🔴 bloqueio de rede/WAF
| UF | Endereço | Situação | O que foi observado |
|---|---|---|---|
| AC | diario.ac.gov.br | 🟡 | Responde (8 KB). Nenhum PDF na home — o link do dia está atrás de formulário |
| AL | imprensaoficial.al.gov.br | 🟡 | Responde. PDFs na home são institucionais, não o diário |
| AM | diario.imprensaoficial.am.gov.br | 🟡 | Rota /portal/edicoes/download/0; a variante por data devolve HTML |
| AP | diofe.portal.ap.gov.br | 🟡 | Página grande (>220 KB), sem PDF direto |
| BA | dool.egba.ba.gov.br | 🔴 | Certificado TLS rejeitado |
| CE | doe.seplag.ce.gov.br | 🔴 | Conexão recusada pelo proxy |
| DF | dodf.df.gov.br | 🔴 | HTTP 202 — desafio de bot. Listagem por epoch existe, mas volta vazia |
| ES | ioes.dio.es.gov.br | 🟡 | Rota /portal/visualizacoes/diario_oficial |
| GO | diariooficial.abc.go.gov.br | 🔴 | TLS encerra a conexão |
| MA | diariooficial.ma.gov.br | 🟡 | Busca em /busca/ |
| MG | jornalminasgerais.mg.gov.br | 🟡 | Responde, sem PDF na home |
| MS | diariooficial.ms.gov.br | 🟡 | Melhor candidato. PDFs diretos em assets.imprensaoficial.ms.gov.br/.../DO12276_11_09_2026.pdf. O ?data= é ignorado — falta achar a rota que filtra |
| MT | iomat.mt.gov.br | 🟡 | Mesma plataforma do AM |
| PA | ioepa.com.br | 🟡 | Responde; PDFs da home são institucionais |
| PB | auniao.pb.gov.br | 🟡 | O caminho testado deu 404 — achar o correto |
| PE | cepe.com.br | 🟡 | Rota /diario-oficial |
| PI | diariooficial.pi.gov.br | 🔴 | TLS encerra a conexão |
| PR | documentos.dioe.pr.gov.br | 🔴 | Certificado TLS rejeitado |
| RJ | ioerj.com.br | 🟡 | Portal institucional; o diário tem outro caminho |
| RN | diariooficial.rn.gov.br | 🟡 | O caminho testado deu 404 |
| RO | diof.ro.gov.br | ✅ | …/data/uploads/{ano}/{mês}/DOE-{dd-mm-aaaa}.pdf |
| RR | imprensaoficial.rr.gov.br | 🟡 | Responde com 363 bytes — provável redirecionamento por JS |
| RS | diariooficial.rs.gov.br | 🟡 | 2,7 KB — aplicação de página única |
| SC | portal.doe.sea.sc.gov.br | 🟡 | SPA versionada (/v2.44.07/), redirecionamento por JS |
| SE | segrase.se.gov.br | 🔴 | Conexão recusada pelo proxy |
| SP | doe.sp.gov.br | ✅ | API própria |
| TO | diariooficial.to.gov.br | 🟡 | 2,9 KB — aplicação de página única |
4. Tribunais de Contas — as 27 UFs
Vários estados têm dois: o TCE (estado) e o TCM (municípios) — caso de BA, GO, PA e CE. A tabela traz o que foi encontrado; onde o TCM apareceu primeiro, está anotado.
| UF | Endereço do diário | Situação | Observado |
|---|---|---|---|
| AC | sistemas.tceac.tc.br/diario/ | 🟡 | Sistema próprio |
| AL | doe.tceal.tc.br · consultadoe.tceal.tc.br | 🟡 | Raiz devolve 964 bytes — carrega por JS |
| AM | doe.tceam.tc.br | ✅ | WordPress; nome do arquivo com data por extenso |
| AP | tce.ap.gov.br | 🔴 | Certificado TLS rejeitado |
| BA | tce.ba.gov.br/component/cdsdiario/ | 🟡 | Componente Joomla |
| CE | tce.ce.gov.br/diario-oficial/… | 🟡 | Responde |
| DF | tc.df.gov.br | 🔴 | Certificado TLS rejeitado |
| ES | tcees.tc.br | 🟡 | Responde, sem link de diário na home |
| GO | portal.tce.go.gov.br/diario-eletronico-de-contas1 | 🟡 | Caminho identificado |
| MA | diario.apps.tcema.tc.br/publicacao/ | 🟡 | Aplicação dedicada — bom candidato |
| MG | tce.mg.gov.br | 🟡 | 7 PDFs na home, mistos |
| MS | portal-services.tce.ms.gov.br/portal-services/diario-oficial/… | 🟡 | Cheira a API REST — vale meia hora |
| MT | tce.mt.gov.br/diario | 🟡 | 246 bytes — carrega por JS |
| PA | tcmpa.tc.br/diario-oficial-eletronico/ | 🟡 | É o TCM |
| PB | tce.pb.gov.br | 🟡 | Sem link de diário na home |
| PE | tce.pe.gov.br | 🔴 | Certificado TLS rejeitado |
| PI | tcepi.tc.br/cidadao/diario-oficial/ | 🟡 | Caminho identificado |
| PR | www1.tce.pr.gov.br | 🟡 | Sem link de diário na home |
| RJ | tcerj.tc.br | 🔴 | Responde, mas a rota do diário devolve erro |
| RN | diario.tce.rn.gov.br | 🟡 | SPA com #/ — a API por trás deve existir |
| RO | tcero.tc.br/diario-oficial/ | ✅ | Listagem do ano inteiro; dia filtrado na regex |
| RR | tce.rr.gov.br | 🔴 | Conexão recusada pelo proxy |
| RS | portal.tce.rs.gov.br | 🟡 | O caminho testado deu 404 |
| SC | consulta.tce.sc.gov.br/Diario/ | 🔴 | Akamai/mPulse — proteção de bot |
| SE | tcese.tc.br/diarioeletronico/ | 🟡 | 204 bytes — carrega por JS |
| SP | doe.tce.sp.gov.br | ✅ | Adaptador próprio |
| TO | tceto.tc.br | 🟡 | Sem link de diário na home |
5. O plano, em ordem de custo/benefício
Passo 1 — os 🟡 que já têm PDF à vista (1 a 3 h cada)
MS (Executivo) e MA, MS, GO, PI (TCE) são os mais próximos. O roteiro é o mesmo que resolveu RO e AM:
- Abrir o endereço num navegador de verdade, com o inspetor de rede aberto, e navegar até o diário de ontem.
- Anotar a URL do PDF e a URL da página que lista as edições do dia.
- Ver se a URL do PDF é dedutível da data:
- é → só
url_template, como o RO; - não é →
descoberta, comlink_regexapontando para o arquivo. Se a listagem não filtrar por data, ponha o dia dentro da própria regex com{data:%Y-%-m-%-d}(como o TCE-RO) ou por extenso com{data:%B}(como o TCE-AM). - Cadastrar em Fontes → Cadastrar fonte, motor PDF.
- Afinar em Heurística: analisar um dia, olhar quantos atos saíram e se a ficha veio preenchida. O botão de sugestão com IA propõe os marcadores a partir de amostras.
- Ligar a fonte e conferir no painel de Saúde no dia seguinte.
Passo 2 — os 🟡 que carregam por JavaScript
AL, MT, RN, SE, RR, RS, TO, SC (Executivo). São aplicações de página única: o HTML vem vazio e os dados chegam depois, por uma chamada de API. Essa chamada costuma ser pública e estável.
Como achar, sem programar: abrir o site no Chrome, F12 → aba Network → filtrar por Fetch/XHR → navegar até o diário. A chamada que devolve a lista de edições aparece ali, com a URL completa. Copie e me mande — a partir dela o cadastro é o mesmo do Passo 1, e frequentemente a fonte vira api_generica, que é ainda mais simples que PDF.
Passo 3 — os 🔴 de TLS (BA, GO, PI, PR, AP, DF-TCE, PE-TCE)
São sete origens cujo servidor tem a cadeia de certificados mal configurada — erro do lado deles, não nosso. Já existe tratamento por host exato em clipping/http.py (_HOSTS_SEM_CADEIA_COMPLETA), feito para o STF, que tem o mesmo defeito.
O conserto é acrescentar o host àquela lista. Não faço isso em lote e sem conferir: cada exceção afrouxa a verificação de TLS para aquele domínio, e isso merece ser decidido host a host, olhando o certificado com openssl s_client -showcerts. Diga quais UFs interessam e eu confiro uma a uma.
Passo 4 — os 🔴 de WAF (DF-Executivo, CE, SE, RR-TCE, SC-TCE, RJ-TCE, TSE)
Exigem navegador com execução de JavaScript para passar pelo desafio. Não é conserto de configuração — é infraestrutura nova: um container com Chrome headless, que hoje não existe neste servidor. É a única categoria em que não consigo avançar sem essa decisão sua.
Custo: um serviço a mais no docker-compose.yml, memória e um coletor que fala com ele. Vale se essas UFs forem comerciais; não vale por completude.
6. O que fazer com a página de vendas, enquanto isso
Três caminhos, nesta ordem de honestidade:
- Ajustar o texto para a cobertura real: judiciário nacional completo, DOU, e Executivo/Controle em SP, RO e AM. É o que eu faria.
- Vender por UF sob demanda: "seu estado em até X dias úteis" — o Passo 1 torna isso plausível para boa parte dos 🟡.
- Manter a promessa e correr atrás. Só funciona com prazo e alguém dedicado.
O que não dá é ir a mercado com a página atual e o catálogo atual, porque o primeiro cliente de outro estado descobre no primeiro dia.