Diário — 25/09/2026
Presentes: Luis (@Luidooo), Bruno (@BrunoBReis), Moura (@thegm445), Iago (@iagorrr)
Pauta: entendimento do domínio, decisão sobre o OLTP, criação do repositório e abertura das frentes de trabalho.
1. De onde partimos
Recebemos da professora Carla um conjunto de insumos sem um enunciado formal do projeto — um áudio de briefing, duas planilhas, duas imagens de arquitetura e alguns links. A primeira tarefa foi literalmente descobrir qual é o trabalho.
Insumos levantados:
| Insumo | O que trouxe |
|---|---|
| Áudio de briefing (~8 min) | O contexto da pesquisa, quem é a pesquisadora, e a restrição de arquitetura |
Cópia_bancos_dados_Carla_Rocha.xlsx | Os dados que a pesquisadora produziu à mão |
projetoengenhariadedadosbd2.xlsx | A planilha de acompanhamento da disciplina (7 abas a preencher) |
| Imagens de arquitetura | GovHub: data lakehouse e a proposta de agentes com RAG |
| Brasil Participativo, GovHub, plano de ensino | Fontes e referência arquitetural |
2. O que é o projeto
Os conselhos nacionais de participação social são órgãos paritários onde sociedade civil e governo decidem juntos sobre política pública. Eles são autogeridos — e é daí que vem o problema: se ninguém convoca a reunião, o conselho para de funcionar sem que isso seja registrado em lugar nenhum. Ele não é extinto nem noticiado. Apenas silencia.
A professora Lizandra Serafim (UFPB) pesquisa a produção decisória desses conselhos desde 2003. O método dela é ler o Diário Oficial da União ato por ato, anotar autor e tema, e classificar cada decisão numa tipologia de cinco categorias (DEF, FISC, GEST, AUTO, IP) que ela ajudou a desenvolver.
Em vinte anos de trabalho manual, cobriu cinco conselhos. Existem entre oitenta e cem.
O objetivo declarado dela é um observatório que dê uma medida de vitalidade a cada conselho: está deliberando sobre política, ou apenas se auto-administrando? Está ativo, ou parado há meses?
3. Levantamento dos dados existentes
As planilhas da pesquisadora
| Aba | Conteúdo | Linhas |
|---|---|---|
| Conselhos mapeados no DOU | Lista de conselhos | 125 |
| Dicionário tipologia | As 5 categorias, com definição | 5 |
| CNAS | Atos classificados, 2003–2022 | 366 |
| CONAMA | Atos classificados, 1984–2022 | 99 |
| CONCIDADES | Atos classificados | 848 |
| CONDRAF | Atos classificados | 951 |
| CNPIR | Atos classificados | 374 |
Total: 2.638 atos classificados à mão.
Errata (26/09): a contagem acima está errada. Os números da tabela são as linhas formatadas de cada aba (o
max_rowdo openpyxl menos 1), e a maioria delas não tem nenhum valor. As linhas com dado são 215: CNAS 53, CONAMA 98, CONCIDADES 28, CONDRAF 24, CNPIR 12, datadas entre 2003 e 2020 (o CONAMA vai de 2003 a 2006, não de 1984). O arquivo é o mesmo, byte a byte, que estava no repositório antigo. Ver o diário de 26/09, seção da #3.
Duas observações que mudaram o rumo do projeto:
As abas têm esquemas divergentes. CNAS tem
AUTOR; ConCidades temREF_EMI_CONeTEMA_RESUM; CNPIR tem só 6 colunas. Isso não é descuido — é o método dela evoluindo ao longo de duas décadas. O esquema daquelas planilhas descreve a história do trabalho manual, não a estrutura do fenômeno.A lista de 125 conselhos tem 96 nomes distintos, medido normalizando caixa, acento e sigla entre parênteses — e ainda restam duplicatas que essa normalização não pega (renomeações legais, grafias múltiplas). No próprio áudio a professora hesita sobre o número: "tem 90, tá 120, né?". Nem a fonte sabe quantos conselhos existem.
A fonte primária: Diário Oficial da União
Pesquisamos como o DOU disponibiliza os atos de forma estruturada. Resultado verificado em fonte primária:
- O INLABS (Imprensa Nacional) publica as edições completas em XML desde 01/01/2020. Gratuito, exige cadastro.
- Entrega um ZIP por seção por dia; dentro, um XML por matéria.
- Resoluções de conselho ficam na Seção 1 (DO1) — cerca de 300 matérias por dia útil, de um total de ~3.300 no DOU inteiro.
- Volume: ~2,5 GB de XML por ano. O acervo 2020→hoje cabe num notebook.
O achado mais importante: cada matéria carrega um campo artCategory com a hierarquia completa do órgão emissor, separada por barra:
Ministério do Meio Ambiente e Mudança do Clima/Conselho Nacional do Meio Ambiente
Ministério da Educação/Conselho Nacional de Educação/Câmara de Educação SuperiorIdentificar qual conselho emitiu um ato é um split('/') num campo estruturado — não exige processamento de linguagem natural. Isso concentra todo o esforço de classificação onde está o valor científico: a tipologia.
Três armadilhas mapeadas:
- Nome de órgão não é estável no tempo. O CONAMA aparece sob "Ministério do Meio Ambiente" antes de 2023 e "Ministério do Meio Ambiente e Mudança do Clima" depois. Casar por string literal perde a série histórica.
- O conselho não fica sempre no mesmo nível da hierarquia. E conselhos profissionais (CFM, CFF, CREF) penduram em "Entidades de Fiscalização do Exercício das Profissões Liberais" — provavelmente fora do escopo, por serem corporativos e não participativos.
- Não existe dicionário de dados oficial do DOU. A própria Imprensa Nacional declara que "será disponibilizado em data a ser definida". O esquema que temos é engenharia reversa, corroborada pelo Ro-dou, projeto do Ministério da Gestão que já carrega o INLABS em Postgres.
4. Duas confusões desfeitas na discussão
OLTP não é a camada bronze
Surgiu na conversa a ideia de que modelar o DOU produziria "o OLTP, que seria a camada bronze". São eixos diferentes, e misturá-los trava a modelagem:
- OLTP / OLAP classifica a carga de trabalho. OLTP é transação pequena, por chave, normalizado, ACID, representando o estado atual.
- Bronze / Silver / Gold classifica o estágio de refino dentro do lado analítico. Bronze é o dado bruto recém-aterrissado — e bronze é OLAP. Ninguém dá
UPDATE ... WHERE id = ?numa tabela bronze.
O teste prático: o dado nasce aqui, por um evento único, num instante único? Se já existia em outro lugar e está sendo copiado, é ingestão, não transação.
As planilhas mudaram de papel
A proposta inicial era derivar o esquema do banco das cinco abas da pesquisadora. Isso foi corretamente contestado na discussão: as cinco abas são amostra por esgotamento humano, não por desenho amostral. Modelar o banco a partir delas seria petrificar o limite de capacidade de uma pessoa dentro do sistema.
O esquema passa a vir do DOU. Mas as planilhas não foram descartadas — mudaram de função, para algo mais valioso:
O DOU nos dá o esquema. As planilhas nos dão o rótulo.
São 2.638 atos com tipologia atribuída por especialista. É o único jeito de provar com número que a classificação automática funciona. Sem elas, para validar o modelo alguém teria que rotular na mão — e essa pessoa viraria a pesquisadora.
5. Decisões tomadas
O OLTP do projeto é o sistema de curadoria
Somos um observatório: consumimos dado de terceiro. O DOU é o sistema de origem, mas é OLTP da Imprensa Nacional, não nosso. Copiar o DOU para o Postgres não o torna transacional.
Decidimos que nosso OLTP é a aplicação de curadoria — onde uma pessoa revisa e confirma a classificação de cada ato. É transacional de verdade: escrita por chave, ACID, estado atual, e o dado nasce ali (o julgamento humano não existe em nenhuma fonte antes). Os 2.638 atos da pesquisadora entram como carga inicial.
Argumento central: a fronteira entre DEF e GEST é interpretação jurídica. Um observatório totalmente automático numa classificação dessa delicadeza não sobrevive ao primeiro contato com a pesquisadora. Este é o único desenho em que o produto continua útil quando o classificador erra — e em que a divergência entre proposta automática e confirmação humana vira, ela própria, a métrica de acurácia.
Registrado como ADR 0001 (issue #5). Consequência negativa aceita: teremos que construir e manter uma interface de curadoria, que não estava no escopo original.
Arquitetura: GovHub adaptado, com restrição de operação
A referência é o GovHub (Airflow → armazenamento → dbt → consumo → catálogo). Mas há uma restrição explícita vinda do briefing: a pesquisadora é quem vai ter que manter isso rodando. A orientação foi ser o mais barato e simples de operar possível — a sugestão levantada foi que o banco nunca fique exposto, e que um job gere um JSON de indicadores publicado como site estático, atualizado por uma rotina diária.
Isso atende a camada de consumo e o ETL reverso exigidos pela disciplina, sem exigir BI nem backend para manter.
O censo de conselhos não pode sair do DOU
O DOU só mostra quem publicou. Conselho que não publica há dois anos é precisamente o que queremos detectar. Se o denominador vier do DOU, o conselho morto some da conta e o indicador mente.
A ausência de publicação é o dado mais importante do observatório — e ela só é mensurável contra um cadastro independente.
6. O que segue em aberto
| # | Decisão | Por que trava as outras |
|---|---|---|
| 1 | Decidido nesta sessão — ADR 0001 | |
| 2 | De onde vem o censo de conselhos | Sem denominador independente, o indicador de silêncio não fecha |
| 3 | Como classificar a tipologia automaticamente | É o valor científico; temos 2.638 exemplos rotulados para medir |
| 4 | Onde mora a camada analítica | Critério de desempate é operacional, não técnico |
| 5 | Formato da camada de consumo | Define o produto final |
7. Encaminhamentos
Repositório criado: https://github.com/Luidooo/conselhos-vivos — público, com a squad como colaboradores.
Seis issues abertas, segmentadas por fronteira de dado (não por camada, para evitar que todo mundo mexa nos mesmos arquivos):
| Issue | Frente | Dependência |
|---|---|---|
| #1 Subir o Postgres com docker compose | infra, bloqueante | — |
| #2 Modelar o esquema do OLTP de curadoria | modelagem, bloqueante | — |
| #3 Normalizar as 5 abas da pesquisadora | dados | contrato da #2 |
| #4 Resolver a identidade dos conselhos | dados | nenhuma |
| #5 ADR 0001: escolher o OLTP | docs | decisão tomada |
| #6 Protótipo do ingestor do INLABS | ingestão (E2) | nenhuma |
As issues #4 e #6 não dependem de ninguém e podem começar imediatamente.
Próxima entrega: E1 em 28/09 (adiada de 22/09) — fonte OLTP modelada, esquema versionado, carga reprodutível. O critério que mais vale nota: a plataforma precisa subir do zero, em máquina limpa, com um comando.
Nota sobre uso de IA
O levantamento do domínio nesta sessão foi feito com auxílio de Claude Code: transcrição do áudio de briefing, leitura programática das planilhas, e pesquisa da estrutura do DOU/INLABS. Todos os dados numéricos citados acima foram verificados em fonte primária (arquivo aberto, requisição executada ou código-fonte lido) — nenhum é estimativa de modelo. Ver AI-USAGE.md.