Colômbia · Conteúdo e dados
Colômbia · Sala de Crisis descreve o que é a suíte. Esta página escreve o que até agora vivia apenas na cabeça de quem a operava: o modelo operacional de conteúdo — qual arquivo alimenta qual superfície, com que ritmo cada fonte se atualiza, qual dado entra depois e sob quais regras editoriais. As 14 rotas do mapa de módulos consomem duas trilhas de dados que nunca se misturam: a trilha real (public/data/colombia/real/, 24 arquivos citáveis mais o termômetro de frescor) e a trilha demo (public/data/colombia/fixtures/, sintética por concepção). O detalhe fonte a fonte — ressalvas, licenças, discrepâncias não resolvidas — vive em public/data/colombia/real/MANIFEST.md; esta página é o mapa de operação sobre esse inventário.
Inventário: qual dado alimenta qual superfície
Trilha real
| Arquivo | Fonte | Superfície que o monta | O que aporta |
|---|---|---|---|
seismic-catalog.json | USGS FDSN | Sala de Crisis (camada sísmica) | Catálogo de réplicas M2,5+ com horas desde o evento |
shakemap-intensity.json | USGS ShakeMap | Sala de Crisis (camada sísmica) | Contornos de intensidade MMI |
shakemap-departments.json | USGS ShakeMap + DANE | Sala de Crisis (camada sísmica) | MMI máximo por sede departamental |
pager-estimates.json | USGS PAGER | Sala de Crisis (camada sísmica) | Distribuições probabilísticas de fatalidades e perdas (modelo, nunca contagem) |
dyfi.json | USGS Did You Feel It | Sala de Crisis (camada sísmica) | Relatos cidadãos e CDI máximo |
feeds.json | IFRC GO + GDACS | Briefing («Fuentes en vivo») | Feed situacional unificado, deduplicado por URL |
ifrc-appeal.json | IFRC GO | Briefing («Fuentes en vivo») | Apelo MDRCO036: solicitado vs. financiado (CHF) |
gdacs.json | GDACS | Briefing («Fuentes en vivo») | Alerta vermelho e população exposta (modelo) |
external-trackers.json | colombiatebusca.com | Briefing («Fuentes en vivo») | Contadores do rastreador cidadão, rotulado «não oficial» |
pledges.json | Dossiê de imprensa 2026-08-13 | Fondo Milagro («Respuesta internacional») | Compromissos por doador com status explícito |
cat-ddo-terms.json | Dossiê de imprensa 2026-08-13 | Fondo Milagro («Respuesta internacional») | Termos completos da linha CAT DDO |
trm.json | Superfinanciera (datos.gov.co) | Fondo Milagro («Respuesta internacional») | A única taxa admissível para conversões COP→USD |
sitreps.json | IFRC GO | Fondo Milagro («Respuesta internacional») | Registros do apelo e relatórios de situação |
services-status.json | Aerocivil + MinTIC + pronunciamento + imprensa | Servicios | Restauração por setor, cada linha com citação e as_of próprios |
donation-channels.json | Imprensa oficializada | Verificador de doações | Canais autorizados + registro negativo |
promesas-tecnologicas.json | Pronunciamentos e o plano tecnológico publicado | Relógio de promessas | Compromissos no relógio de 100 dias, status como fatos |
satellite-damage.json | Copernicus EMS (EMSR916) | Reconstrução (painel satelital) | Evidência de dano independente do Governo |
citations-real.json | — (registro) | Todas as superfícies da trilha real | As 42+ citações que sustentam cada cifra exibida |
data-health-colombia.json | — (derivado local) | Superfície pendente | Frescor fresh|aging|stale de cada arquivo da trilha |
Sete arquivos a mais estão assados, tipados e com loader exportado (src/lib/colombia-real-data.ts) mas ainda sem superfície dedicada — denominadores e contexto à disposição de qualquer stream:
| Arquivo | Papel esperado |
|---|---|
seismic-events.json | A verdade sísmica do evento (hipocentro, magnitude mww); toda superfície que mostre profundidade deve lê-lo, não a constante das fixtures |
demographics.json | Denominador por DIVIPOLA (coorte escolar 5–16, não população total) |
health-facilities.json | Denominador para reconciliar os «179 centros de saúde» (3.051 sedes IPS) |
schools.json | Denominador para as 1.819 sedes afetadas (universo com vigência 2019) |
procurement.json | Contratação real publicada: os processos de urgência manifesta a vigiar |
fiscal.json | Quadro fiscal (contexto, jamais impacto) |
situation-reports.json | Destino do swap FIXTURE_TO_REAL da fixture homônima: 1 balanço oficial em vez de 3 cortes |
Trilha demo
Tudo o que chega ao nível de pessoa ou operação individual é sintético, leva synthetic: true e monta o banner DATOS DE DEMOSTRACIÓN:
| Fixture | Superfície | Nota |
|---|---|---|
situation-reports.json | Sala de Crisis, Briefing | Traz 2 cortes reconstruido_demo que nunca cruzam para a trilha real |
affected-zones.json | Sala de Crisis (mapa) | Distribuição municipal demo sobre agregados reais |
promises.json | Sala de Crisis («Lo prometido») | Os 17 compromissos do pronunciamento |
fondo-ledger.json | Fondo Milagro | O livro-razão encadeado por hashes — o fundo não tem livro-razão público real |
reconstruction-projects.json | Reconstrução + ficha de obra | 83 obras demo; a contratação real é procurement.json |
relief-programs.json | Alivios | Os 5 programas anunciados como regras legíveis |
households.json | Registro, Alivios | Nunca terá equivalente real: dados no nível de pessoa, a plataforma não ingere PII |
missing-persons.json | Buscador de pessoas | Igualmente: nunca terá equivalente real |
shelters.json | Rede de abrigos | Sem API pública conhecida |
aid-shipments.json, collection-points.json | Logística | Sem API pública da operação «Colombia Un Solo Corazón» |
citations-colombia.json | (registro fixture) | Citações da trilha demo |
Cadência de atualização
Cada fonte tem seu próprio ritmo, e o ritmo está declarado — no MANIFEST como prosa e em bake-colombia-health.ts como limiares numéricos. Três mecanismos:
script(API ao vivo) —bun run scripts/colombia/ingest-*.tsconsulta e re-assa; idempotente, com cache de respostas cruas.manual reverificado— cifras transcritas de fontes oficiais, mas o script sonda as fontes em cada execução (frases de carga de Aerocivil/MinTIC, cadeias do dossiê empledges, índice de documentos do Banco Mundial) e registra o observado.manual— curadoria contra comunicados; atualiza-se quando a fonte publica.
| Arquivo | Mecanismo | Limiar fresh / aging (dias) | Candidato a cron? |
|---|---|---|---|
seismic-events.json, seismic-catalog.json | script (ingest-seismic*.ts) | 2 / 7 | Sim — o candidato n.º 1 (auto-refresh de réplicas) |
shakemap-*.json, pager-estimates.json, dyfi.json | script (ingest-seismic-deep.ts) | 3 / 14 | Sim (mesma execução das réplicas) |
feeds.json, ifrc-appeal.json, gdacs.json, sitreps.json | script (ingest-feeds.ts, ingest-sitreps.ts) | 2 / 7 | Sim, diário enquanto a operação seguir aberta |
trm.json | script (ingest-pledges.ts) | 1 / 4 | Sim, diário (dia útil) |
procurement.json | script (ingest-procurement.ts) | 1 / 3 | Sim — re-pull frequente durante urgência manifesta (ver roteiro) |
external-trackers.json | script (ingest-feeds.ts) | 1 / 3 | Sim, diário |
satellite-damage.json | script (ingest-satellite.ts) | 2 / 7 | Sim enquanto houver produtos pendentes do EMSR916 |
demographics.json, schools.json, fiscal.json | script | 90 / 365 | Não — fontes anuais; uma execução trimestral de verificação basta |
health-facilities.json | script | 30 / 90 | Não — corte periódico do registro |
services-status.json | manual reverificado (ingest-services.ts) | 2 / 7 | Parcial: a sondagem sim; a consolidação é juízo editorial |
pledges.json, cat-ddo-terms.json | manual reverificado (ingest-pledges.ts) | 3 / 14 · 7 / 30 | Parcial: a validação de cadeias sim; linhas novas são curadoria |
situation-reports.json | manual (transcrição citada) | 2 / 7 | Não — substituir pelo boletim da UNGRD é o caminho, não um cron |
donation-channels.json | manual | 7 / 30 | Não — muda só se a Presidência publicar canais |
promesas-tecnologicas.json | manual | 7 / 30 | Não — atualiza-se por marco do relógio (próximo: dia 30) |
O padrão de cron (referência, sem adotar ainda)
O repositório já tem o mecanismo: vercel.json declara crons da Vercel (hoje um, { "path": "/api/alerts-digest", "schedule": "0 13 * * 1" }). Esse é o padrão a seguir quando a atualização for automatizada — nenhum é adicionado nesta onda, porque as ingestões da Colômbia são scripts de repositório que escrevem arquivos assados e commitados: um cron da Vercel só invoca uma rota serverless, então automatizar exige primeiro decidir entre (a) uma rota /api/ que re-ingere e serve do cache sem tocar a árvore, ou (b) um job agendado de CI que executa ingest-all.ts e commita o diff (que, graças à idempotência, só existe quando a fonte realmente se moveu). Essa é uma decisão de arquitetura, não de conteúdo, e fica registrada aqui como pendente.
O termômetro: data-health-colombia.json
bun run scripts/colombia/bake-colombia-health.ts lê os 24 arquivos da trilha, junta a marca ingest.retrieved_at de cada um com sua cadência declarada e assa a classificação fresh | aging | stale por arquivo (mais o intervalo de as_of por linha onde existe, como em services-status.json). Os limiares são por fonte: uma TRM de três dias atrás está vencida, uma série anual do Banco Mundial de três meses atrás está fresca. O arquivo declara citations: [] porque é derivado local — não há fonte upstream a citar.
Registro pendente no gate. data-health-colombia.json ainda não figura nos SPECS de scripts/colombia/check-real-data.ts. O motivo original — outro branch da mesma onda editava esse arquivo — ficou para trás com a integração da onda 4; o que resta é uma decisão de desenho do gate: registrá-lo obriga a abrir uma exceção à regra genérica «linhas ⇒ ao menos uma citação» para arquivos derivados com citations: [], e uma exceção ao gate se abre de propósito, no seu próprio PR, nunca de passagem numa integração. Até lá, o checker de MANIFEST não o exige e o bake roda fora do prebuild.
Roteiro: próximos dados
Priorizado por impacto sobre esforço. «Porteira» nomeia o que precisa acontecer fora do repositório para a linha ser possível.
| # | Candidato | O que desbloqueia | Esforço | Impacto | Porteira |
|---|---|---|---|---|---|
| 1 | Boletim UNGRD / EDAN legível por máquina, quando publicado | Substitui o pronunciamento transcrito como fonte de registro do balanço oficial — a substituição n.º 1 declarada no MANIFEST. Com dois ou mais cortes, a Sala de Crisis desenha tendência real em vez de um ponto | Baixo–médio (a forma SituationReport já existe) | Alto | A UNGRD publicar; hoje a cadeia documental termina num discurso |
| 2 | Re-pulls SECOP II durante urgência manifesta + bandeiras OCDS | A linha de base são 2 processos de urgência manifesta em 2026-08-11; o pico virá com os 12 meses de contratação direta do Decreto 1171. Re-pull frequente + bandeiras vermelhas do padrão OCDS (proponente único, adjudicação ultrarrápida, concentração por contratado, preço desviado da mediana) sobre dados reais — hoje o motor de risco roda sobre fixtures | Médio (ingest-procurement.ts existe; faltam cadência e regras) | Alto — a superfície anticorrupção central | Nenhuma: o SECOP II é público |
| 3 | DANE população municipal total | Fecha a lacuna n.º 1 de REAL_DATA_GAPS: denominadores reais por município em vez da coorte escolar 5–16 | Médio (download de planilha, não API: parser + citação da vigência) | Alto | Nenhuma, mas é ingestão manual versionada |
| 4 | Auto-refresh de réplicas (USGS em cron) | O catálogo deixa de envelhecer entre execuções manuais; a camada sísmica da Sala se mantém sozinha | Baixo (o script idempotente já existe; falta o mecanismo do padrão de cron) | Médio | A decisão de arquitetura (a)/(b) acima |
| 5 | Comunicados da Medicina Legal | Contadores forenses (corpos recebidos / identificados / entregues, com. 06: 230/205/140) como manual_cited, para que o Buscador de pessoas reconcilie as quatro cifras paralelas de desaparecidos — oficial 287–496 vs. 4.211 no rastreador cidadão | Médio (sem API; transcrição citada por comunicado) | Médio–alto | A Medicina Legal seguir publicando comunicados numerados |
| 6 | Alertas IDEAM | Camada de ameaça secundária (chuvas/deslizamentos sobre os 5 departamentos) para Logística e Abrigos — os 24+ deslizamentos que isolaram o epicentro são o precedente | Médio | Médio | Uma API/feed do IDEAM alcançável do host de ingestão |
| 7 | Camadas censitárias granulares do DANE (quadra/seção) | Planejamento fino de abrigos e registro: densidade e vulnerabilidade sob cada AOI satelital | Alto (geodados pesados, cruzamento espacial) | Alto no médio prazo | Nenhuma, mas exige ferramental geoespacial novo |
| 8 | Cruzamento Registraduría / SISBÉN para dedup do RUD | O gargalo apontado pela pesquisa: o RUD é manual, offline, sem dedup, operado por 403 municípios, e porteira de todo benefício por domicílio | Alto | Alto | Porteira dura: convênio (MOU) com o Estado. Não são dados públicos e a plataforma não os ingere — esta linha existe para dizer explicitamente que só procede dentro de um piloto oficial com acesso regrado. Até lá, o dedup demo do Registro segue sendo demo |
Duas lacunas conhecidas seguem abertas fora desta tabela porque não dependem de nós: o catálogo do SGC (endpoints inalcançáveis do host de ingestão — restauraria a sismicidade M2–M4 que o USGS não vê) e o appname do ReliefWeb (trâmite humano da OCHA; aprovado, a cobertura volta sem tocar código). Ambas estão medidas com citações próprias.
Princípios de conteúdo
Estas são as regras editoriais da trilha real. Todas são impostas pelo gate (check-real-data.ts) onde uma máquina pode impô-las; onde não pode, estão escritas aqui e no MANIFEST.
1 · Duas trilhas, zero mistura
Real e demo vivem em diretórios separados com o mesmo envelope de esquema. synthetic nunca se infere; o banner de demonstração o lê do envelope. Um arquivo da trilha real com linhas e sem citação registrada quebra o build. A consequência operacional: migrar uma superfície é mudar uma rota (FIXTURE_TO_REAL), nunca copiar linhas de uma trilha à outra — os cortes reconstruido_demo da fixture de balanços jamais cruzam, e o checker verifica.
2 · sin_datos é um estado de primeira classe
Um resultado vazio é um achado. Chocó com 3 processos no SECOP é o dado (o departamento do epicentro é o de menor capacidade contratual instalada do país), não um erro de consulta; 9 dos 33 ativos de serviços são assados sem cifra porque circularam na sala de crise sem fonte citável, e o validador rejeita uma linha sin_datos que leve cifra igual que rejeita uma linha com cifra sem citação. Preencher um buraco com um substituto plausível destruiria a única coisa que a plataforma vende. Uma superfície que precisa de um dado que não existe mostra a lacuna (REAL_DATA_GAPS).
3 · Ofertas não são recibos
Todo compromisso financeiro leva status explícito: ofrecido, confirmado, desembolsado, denegado. O gate rejeita qualquer linha multilateral ou bilateral marcada desembolsado porque nenhum desembolso ao Estado consta no registro — os USD 1,3 bilhão das manchetes são ofertas. A disciplina se estende à moeda (todo montante leva currency + unit; «mil millones» jamais se traduz «billones») e aos agregados de imprensa, que vivem como contexto e nunca como linhas somáveis. A oferta negada (as 100 t de El Salvador) é assada com sua citação: uma recusa também é parte do balanço.
4 · Procedência de citações: o caso «cada peso»
O caso de estudo que fixa a regra. A manchete do Infobae de 13 de agosto — «cada peso girado quedará expuesto» — circulou como se fosse um compromisso de transparência do Governo. Não é: a frase é de Lorena Gutiérrez, decana da Universidad de San Buenaventura, descrevendo como funciona o artigo 215 (revisão automática da Corte, controle do Congresso, jurisdição dos órgãos de controle). O Governo não fez nenhum compromisso de painel, dados abertos, veeduria nem auditoria para o Fondo Milagro. A citação que é mesmo do Presidente é anterior ao sismo: em 23 de julho, sobre um repasse à UNGRD, exigiu «garantizar la trazabilidad de cada peso» (El Universal). Confundir as duas teria posto na boca do Governo uma promessa que não existe — e teria entregado de graça o argumento da plataforma, que é precisamente que essa promessa falta.
A regra que fica: toda citação textual leva autor, cargo, data, veículo e link; uma manchete nunca se atribui ao citado; e a paráfrase se marca como tal. Nos dados, isso é o campo de citação textual de promesas-tecnologicas.json e as citações por linha de services-status.json e pledges.json; na prosa, é esta disciplina.
5 · Citações vivas
Uma citação não é um adorno estático: leva retrieved_at, URL e licença, e onde a fonte é alcançável se reverifica em cada execução — os boletins da Aerocivil contra sua frase de carga, as linhas do dossiê cadeia por cadeia, o índice de documentos do Banco Mundial em cada bake de pledges. Se o texto de um boletim muda, a execução o marca em vez de sustentar a transcrição em silêncio. As fontes inalcançáveis (INVIAS 403, ReliefWeb sem appname) mantêm sua citação registrada precisamente para que a lacuna seja mensurável. data-health-colombia.json é a agregação desta disciplina: a idade de cada bake contra o ritmo de sua fonte.
O plano do Dia 30 — 2026-09-06
O plano tecnológico do Governo corre com um relógio de 100 dias; o corte dos dias 1–30 («Encender el motor») vence por volta de 6 de setembro de 2026, com quatro entregáveis anunciados: o Decreto de Transparencia Digital, o piloto de blockchain na Ecopetrol, Ana IA ativada e o inventário nacional de conectividade. A pesquisa de agosto o chamou de o sinal binário mais limpo sobre se este Governo constrói infraestrutura de transparência ou a narra. Nesse dia a suíte tem que capturar o resultado, seja qual for.
O que o relógio deve capturar (/colombia/reloj)
| Passo | Detalhe |
|---|---|
| 1 · Veredicto por promessa | Cada compromisso com vencimento no dia 30 passa a cumplido (com o instrumento como citação: número do decreto, evidência do piloto, URL do inventário) ou a vencido (com a busca do instrumento registrada e datada — a ausência também se cita) |
| 2 · Sem estados intermediários sem citação | en_curso em 6 de setembro exige evidência publicada de avanço; «dizem que avança» não é um estado |
| 3 · Casos já conhecidos | A Ana IA já «existe» em domínio de um fornecedor sem presença gov.co nem aviso de privacidade — se isso for apresentado como cumprimento, a linha o registra com essa nota, não com um check |
| 4 · Bake no mesmo dia | promesas-tecnologicas.json se atualiza e se assa em 6 de setembro, não depois; a data da atualização é parte do registro |
O que o briefing deve capturar (/colombia/briefing)
- O veredicto do dia 30 como bloco principal: o que se prometeu para os dias 1–30, qual instrumento apareceu, qual não.
- O relógio do artigo 215: se o decreto de emergência econômica foi publicado (em 13 de agosto seu número seguia sem publicação), sua janela de 30 dias já venceu ou está por vencer — e com ela a condição prévia do CAT DDO (promulgação do decreto), que toca
cat-ddo-terms.jsonepledges.json. - A tendência de urgência manifesta: re-pull do SECOP II contra a linha de base (2 processos em 11 de agosto); um mês depois do sismo, a contagem e sua curva são o indicador anticorrupção mais legível da suíte.
- Os produtos satelitais do Chocó: as entregas de Quibdó e Istmina eram esperadas em 14 de agosto — no dia 30, ou estão em
satellite-damage.jsonou sua ausência é um achado que o briefing diz. - O estado da substituição do balanço: já existe boletim da UNGRD legível por máquina ou a fonte de registro segue sendo um discurso de três semanas atrás?
- O financiamento do apelo MDRCO036 (CHF 0 financiados no corte de agosto) e a trajetória de restauração de serviços.
- O termômetro completo: nessa manhã rodam
ingest-all.ts+bake-colombia-health.ts; nenhuma cifra do briefing do dia 30 pode sair de um bakestale.
A execução do dia
bun run scripts/colombia/ingest-all.ts --refresh # todas as fontes ao vivo
# curadoria: promesas-tecnologicas.json · services-status.json · pledges.json
bun run scripts/colombia/bake-colombia-health.ts # frescor da trilha
bun run scripts/colombia/check-real-data.ts # o gate, antes de publicar