"""Gera o relatório da Fase 2b (Minas Gerais) em PT e EN: ../fase2b/index.html e ../fase2b/en/index.html. Uso: python gerar_fase2b.py (depois de exposicoes_2b.py e hipoteses_2b.py; defina CLEDON_DOI para a versão depositada) """ import os import numpy as np import pandas as pd from config import RAIZ, RESULTADOS VERSAO = "1.7" DATAS = {"pt": "13 de novembro de 2026", "en": "November 13, 2026"} BASE = "https://cledon.org" ORCID = "0009-0008-5280-1869" PLANO_COMMIT = "946f282" DOI = os.environ.get("CLEDON_DOI", "").strip() PT = True NOMES = { "aguardente": ("Cachaça: aguardente da agroindústria rural, 2006 (litros por mil hab.)", "Cachaça: sugarcane spirit from rural agro-industry, 2006 (litres per 1,000 inhab.)"), "aguardente_2017": ("Cachaça, 2017 (litros por mil hab.)", "Cachaça, 2017 (litres per 1,000 inhab.)"), "aguardente_produz": ("Produtores × não produtores de aguardente, 2006", "Producers × non-producers of cachaça, 2006"), "milho": ("Milho: área colhida (% da área municipal)", "Maize: harvested area (% of municipal area)"), "agua_pn_1991": ("Água de poço ou nascente, 1991 (% dos domicílios)", "Well or spring water, 1991 (% of households)"), "agua_pn_2000": ("Água de poço ou nascente na propriedade, 2000 (%)", "Well or spring water on the property, 2000 (%)"), "rural_1991": ("População rural, 1991 (%)", "Rural population, 1991 (%)"), "endoscopia": ("Endoscópios digestivos na região, 2015 (por 100 mil hab.)", "Digestive endoscopes in the region, 2015 (per 100,000)"), "endoscopia_2020": ("Endoscópios digestivos na região, 2020 (por 100 mil hab.)", "Digestive endoscopes in the region, 2020 (per 100,000)"), "dist_oncologia": ("Distância até hospital de oncologia, 2015 (km)", "Distance to an oncology hospital, 2015 (km)"), } CURTO = {"aguardente": ("Cachaça, 2006 (litros por mil hab.)", "Cachaça, 2006 (litres per 1,000)"), "milho": ("Milho (% da área municipal)", "Maize (% of municipal area)"), "agua_pn_1991": ("Poço ou nascente, 1991 (%)", "Well or spring, 1991 (%)"), "agua_pn_2000": ("Poço ou nascente, 2000 (%)", "Well or spring, 2000 (%)"), "rural_1991": ("População rural, 1991 (%)", "Rural population, 1991 (%)"), "endoscopia": ("Endoscópios na região, 2015", "Endoscopes in the region, 2015"), "dist_oncologia": ("Distância até oncologia (km)", "Distance to oncology (km)")} NOVAS = ["aguardente", "milho", "agua_pn_1991", "agua_pn_2000", "rural_1991", "endoscopia", "dist_oncologia"] SENS = ["aguardente_2017", "aguardente_produz", "endoscopia_2020"] REFS = """
Geração de hipóteses — não são conclusões nem causas. Associações ecológicas entre características dos municípios de Minas Gerais e a mortalidade por câncer de esôfago. Valem para municípios, não para pessoas, e servem para escolher o que medir num estudo com pacientes. Não indicam causa, não permitem estimar o risco de uma pessoa e não mudam nenhuma recomendação médica. Versão {VERSAO} · {DATAS['pt']}.{doi}
Na Fase 2, o excesso de mortalidade por câncer de esôfago em Minas Gerais acompanhou ruralidade, menor PIB municipal per capita e menor altitude, sem nenhuma variável de produção associada de forma positiva. A Fase 2b testou sete características a mais, com plano de análise registrado no git antes dos dados (commit {PLANO_COMMIT}), e incorpora uma revisão técnica assistida por IA (não é revisão independente por pares).
Somente dados públicos e agregados: por município (IBGE) ou por estabelecimento de saúde (CNES, sem pacientes). Os arquivos do CNES trazem campos como CPF/CNPJ do estabelecimento; o script lê só o código do estabelecimento, o município, o equipamento, a quantidade e a habilitação, descarta o restante na leitura e apaga o arquivo original depois da extração, guardando apenas o SHA-256 para reprodução. Os resultados publicados são contagens por município.
Desfecho e modelo: os da Fase 2 (óbitos por câncer de esôfago 2015–2024, esperados do estado como offset, regressão de Poisson com erros-padrão agrupados por região imediata). Em Minas Gerais ({v['nmg']} municípios), as variáveis contínuas são padronizadas pelo desvio-padrão de MG; no Brasil, pelo nacional; a RT é por desvio-padrão. Produção e endoscopia entram como log(1 + x). A variável de haver produção de aguardente entra como 0/1, sem padronização: sua RT compara municípios produtores com não produtores. As regiões imediatas são identificadas pelo código oficial do IBGE (há nomes repetidos entre estados, como Itabaiana/PB e Itabaiana/SE).
Correção para múltiplos testes. Benjamini–Hochberg [3] (q) entre as 7 variáveis da análise principal em Minas Gerais (Tabela 1) e, separadamente, nos testes de diferença em relação a cada desfecho de comparação. Não há correção nos modelos ajustados (seção 4), na análise do Brasil (seção 6), nas sensibilidades, nem entre as fases do projeto; esses valores de p devem ser lidos como descritivos.
Variáveis. Cachaça: aguardente de cana da agroindústria rural (Censo Agropecuário 2006; 2017 como sensibilidade), em litros por mil habitantes. Milho: área colhida como % da área municipal (PAM, 2005–2010). Água de poço ou nascente (Censos 1991 e 2000; em 2000, só "na propriedade"). População rural em 1991. Endoscópios digestivos (CNES, equipamento 0333) por 100 mil habitantes na região imediata, em dezembro de 2015 (2020 como sensibilidade). Distância entre centroides até o município mais próximo com hospital habilitado como CACON ou UNACON, em dezembro de 2015.
Dados ausentes. Mesmas regras da Fase 2: “-” = 0; “...”, “X” e ausência na resposta = ausente. No Censo Agropecuário, o “X” é sigilo, usado quando há poucos produtores: indica produção, não zero. Na primeira execução, o total de aguardente somava as parcelas de matéria-prima própria e adquirida e tratava “X” + “-” como zero; isso foi corrigido (o total fica ausente quando alguma parcela está sob sigilo), e acrescentamos como sensibilidade, não pré-especificada, o indicador de haver produção, que não depende do sigilo.
RT por desvio-padrão de cada variável em Minas Gerais, com IC 95%: esôfago (azul) e os desfechos de comparação pulmão (laranja) e outros cânceres, exceto esôfago (verde).
Tabela 1. Associações em Minas Gerais e teste formal da diferença em relação aos desfechos de comparação (pulmão e outros cânceres; não são controles negativos no sentido formal [4]).
{t_a}Cada variável nova foi acrescentada, uma de cada vez, ao modelo com ruralidade (2022), PIB municipal per capita (2010) e altitude, e depois também com a % de causas mal definidas.
{t_b}Variáveis contínuas: RT por desvio-padrão. Produtores × não produtores: RT da comparação direta.
A cachaça é a única variável nova que continua associada de forma positiva após o ajuste, nas três versões. O milho continua inverso. Água antiga, ruralidade de 1991 e acesso deixam de estar associados: são muito correlacionados com ruralidade e PIB (água de 1991 e ruralidade atual: ρ = {v['c1991a']}), e o modelo não consegue separá-los.
Pelo plano, um excesso criado por mais diagnóstico apareceria onde há mais endoscópios e hospitais de oncologia por perto. Em Minas Gerais, o câncer de esôfago faz o contrário (RT de {v['endo']} para endoscopia e {v['dist']} para distância), enquanto pulmão e outros cânceres seguem a direção esperada de um efeito de acesso. As associações brutas são incompatíveis com a explicação simples de maior mortalidade registrada apenas por maior disponibilidade diagnóstica. Entretanto, após ajuste, não houve evidência estatística de associação com esses indicadores. Os resultados não permitem separar diferenças de incidência, diagnóstico, tratamento e registro dos óbitos; o prognóstico do câncer de esôfago depende do estágio e das possibilidades de tratamento [6].
No Brasil, a cachaça também está associada ao excesso de esôfago (com efeitos fixos de estado: {v['rbr']}), assim como a água antiga e a ruralidade de 1991; o milho não.
Medianas das variáveis, entre os municípios com valor publicado; entre parênteses, quantos municípios entram em cada mediana. Na produção de aguardente, só {v['nmgq']} dos {v['nmg']} municípios de MG têm valor quantitativo; os demais estão sob sigilo ou sem resposta, e essa ausência pode selecionar municípios com características diferentes. Entre os 9 municípios com sinal, a mediana usa {v['n9q']} (Cipotânea e Ervália estão sob sigilo). Pelo indicador de haver produção, que o sigilo não afeta, {v['sp']} dos 9 municípios com sinal produziam aguardente em 2006, contra {v['p1']} dos {v['pn']} municípios de MG com resposta ({v['pct']}%).
{t_e}Prioridades para investigação individual, sugeridas por estes dados: consumo de álcool, incluindo quantidade, duração e tipos de bebida; condições rurais e de menor renda. A produção municipal de aguardente é um indicador geográfico, não uma medida de consumo.
Motivadas pela literatura, não testadas aqui: temperatura de bebidas (café, chás); fumo de rolo ou de palha; fogão a lenha dentro de casa; qualidade da água (nitrato e outros contaminantes, cuja análise depende do SISAGUA); dieta. O álcool é classificado pela IARC como carcinogênico (grupo 1) e é fator de risco estabelecido para o carcinoma epidermoide de esôfago [1]; bebidas muito quentes foram classificadas como provavelmente carcinogênicas (grupo 2A) [2].
Código em {BASE}/codigo: exposicoes_2b.py, hipoteses_2b.py,
gerar_fase2b.py. Plano: PLANO-fase2b.md (commit {PLANO_COMMIT}). Resultados: fase2b_*.csv
na página do mapa e no depósito do Zenodo.
Em memória de Francisco Cledio Capistrano (F.C.C.).
""" return f"""{ESTILO}Hypothesis generation — not conclusions or causes. Ecological associations between characteristics of municipalities in Minas Gerais and esophageal cancer mortality. They apply to municipalities, not to people, and serve to choose what to measure in a study with patients. They do not indicate causation, do not allow estimating any person's risk and do not change any medical recommendation. Version {VERSAO} · {DATAS['en']}.{doi} This is a translation of the Portuguese report; in case of discrepancy, the Portuguese version prevails.
In Phase 2, the excess of esophageal cancer mortality in Minas Gerais followed rurality, lower municipal GDP per capita and lower altitude, with no production variable positively associated. Phase 2b tested seven further characteristics, with an analysis plan recorded in git before the data (commit {PLANO_COMMIT}), and incorporates an AI-assisted technical review (not independent peer review).
Only public, aggregated data: by municipality (IBGE) or by health facility (CNES, no patients). CNES files include fields such as the facility's CPF/CNPJ (taxpayer number); the script reads only the facility code, municipality, equipment, quantity and accreditation, discards the rest on reading and deletes the original file after extraction, keeping only its SHA-256 for reproduction. Published results are counts by municipality.
Outcome and model: those of Phase 2 (esophageal cancer deaths 2015–2024, state-based expected deaths as offset, Poisson regression with standard errors clustered by immediate region). In Minas Gerais ({v['nmg']} municipalities), continuous variables are standardized by the Minas Gerais standard deviation; for Brazil, by the national one; the RR is per standard deviation. Production and endoscopy enter as log(1 + x). The cachaça production indicator enters as 0/1, without standardization: its RR compares producing with non-producing municipalities. Immediate regions are identified by the official IBGE code (some names repeat across states, such as Itabaiana/PB and Itabaiana/SE).
Multiple-testing correction. Benjamini–Hochberg [3] (q) across the 7 variables of the main Minas Gerais analysis (Table 1) and, separately, in the difference tests against each comparison outcome. No correction in the adjusted models (section 4), the Brazil analysis (section 6), the sensitivity analyses, or across project phases; those p-values are descriptive.
Variables. Cachaça: sugarcane spirit from rural agro-industry (2006 Agricultural Census; 2017 as sensitivity), in litres per 1,000 inhabitants. Maize: harvested area as % of municipal area (PAM, 2005–2010). Well or spring water (1991 and 2000 Censuses; in 2000, only "on the property"). Rural population in 1991. Digestive endoscopes (CNES, equipment 0333) per 100,000 inhabitants in the immediate region, December 2015 (2020 as sensitivity). Centroid distance to the nearest municipality with a hospital accredited as CACON or UNACON (oncology), December 2015.
Missing data. Same rules as Phase 2: “-” = 0; “...”, “X” and absence from the response = missing. In the Agricultural Census, “X” means suppression when there are few producers: it indicates production, not zero. In the first run, total cachaça added own and purchased raw-material components and treated “X” + “-” as zero; this was corrected (the total is missing when any component is suppressed), and a production indicator, unaffected by suppression, was added as a non-pre-specified sensitivity analysis.
RR per standard deviation of each variable in Minas Gerais, with 95% CI: esophagus (blue) and the comparison outcomes lung (orange) and other cancers except esophagus (green).
Table 1. Associations in Minas Gerais and formal test of the difference from the comparison outcomes (lung and other cancers; not negative controls in the formal sense [4]).
{t_a}Each new variable was added, one at a time, to the model with rurality (2022), municipal GDP per capita (2010) and altitude, and then also with the % of ill-defined causes.
{t_b}Continuous variables: RR per standard deviation. Producers × non-producers: RR of the direct comparison.
Cachaça is the only new variable that remains positively associated after adjustment, in all three versions. Maize remains inverse. Older water, 1991 rurality and access are no longer associated: they are highly correlated with rurality and GDP (1991 water and current rurality: ρ = {v['c1991a']}), and the model cannot separate them.
Per the plan, an excess created by more diagnosis would appear where there are more endoscopes and oncology hospitals nearby. In Minas Gerais, esophageal cancer does the opposite (RR {v['endo']} for endoscopy and {v['dist']} for distance), while lung and other cancers follow the direction expected from an access effect. The crude associations are incompatible with the simple explanation of higher recorded mortality due only to greater diagnostic availability. However, after adjustment, there was no statistical evidence of association with these indicators. The results cannot separate differences in incidence, diagnosis, treatment and death recording; esophageal cancer prognosis depends on stage and treatment options [6].
In Brazil, cachaça is also associated with the esophageal excess (with state fixed effects: {v['rbr']}), as are older water and 1991 rurality; maize is not.
Medians of the variables among municipalities with published values; in parentheses, how many municipalities enter each median. For cachaça production, only {v['nmgq']} of the {v['nmg']} Minas Gerais municipalities have a quantitative value; the rest are suppressed or missing, and this absence may select municipalities with different characteristics. Among the 9 municipalities with a signal, the median uses {v['n9q']} (Cipotânea and Ervália are suppressed). By the production indicator, which suppression does not affect, {v['sp']} of the 9 municipalities with a signal produced cachaça in 2006, against {v['p1']} of the {v['pn']} Minas Gerais municipalities with a response ({v['pct']}%).
{t_e}Priorities for individual-level investigation, suggested by these data: alcohol consumption, including amount, duration and types of drink; rural and lower-income conditions. Municipal cachaça production is a geographic indicator, not a measure of consumption.
Motivated by the literature, not tested here: temperature of drinks (coffee, teas); hand-rolled or rope tobacco; indoor wood stoves; water quality (nitrate and other contaminants, whose analysis depends on SISAGUA); diet. IARC classifies alcohol as carcinogenic (group 1), an established risk factor for esophageal squamous cell carcinoma [1]; very hot beverages were classified as probably carcinogenic (group 2A) [2].
Code at {BASE}/codigo: exposicoes_2b.py, hipoteses_2b.py,
gerar_fase2b.py. Plan: PLANO-fase2b.md (commit {PLANO_COMMIT}). Results: fase2b_*.csv on the
map page and in the Zenodo deposit.
In memory of Francisco Cledio Capistrano (F.C.C.).
""" SECOES = [("resumo", "Resumo", "Abstract"), ("seguranca", "Segurança", "Data security"), ("metodo", "Método", "Methods"), ("minas", "Minas Gerais", "Minas Gerais"), ("ajuste", "Ajuste", "Adjustment"), ("acesso", "Acesso", "Access"), ("brasil", "Brasil", "Brazil"), ("descritivo", "Municípios", "Municipalities"), ("hipoteses", "Hipóteses", "Hypotheses"), ("limitacoes", "Limitações", "Limitations"), ("referencias", "Referências", "References")] def casca(lang): pt = lang == "pt" autor = (f'Autor: Clériston Almeida Capistrano (ORCID {ORCID}) · ' f'pesquisador independente, sem formação na área da saúde · cledon.org') if pt else \ (f'Author: Clériston Almeida Capistrano (ORCID {ORCID}) · ' f'independent researcher with no formal training in health sciences · cledon.org') toc = "".join(f'{b if pt else c}' for a, b, c in SECOES) if pt: return {"HTML_LANG": "pt-BR", "TITLE": "Fase 2b · Minas Gerais — Cledon", "DESCRIPTION": "Câncer de esôfago em Minas Gerais: cachaça, milho, água, ruralidade e acesso a diagnóstico. " "Geração de hipóteses.", "NAV_LABEL": "Navegação principal", "NAV": f'O mapaFase 2' f'CódigoEnglish', "EYEBROW": "Relatório · Fase 2b", "H1": "Câncer de esôfago em Minas Gerais: o que mais acompanha o excesso", "LEAD": "Sete características a mais, incluindo cachaça, milho, água em 1991 e 2000 e acesso a diagnóstico. " f'English version.', "AUTHOR": autor, "TOC_LABEL": "Seções", "TOC": toc, "FOOTER": "Cledon · Find Cancer Clues · Iniciativa independente de pesquisa. Este estudo não oferece diagnóstico, " 'tratamento ou orientação médica. contato@cledon.org.', "PAGE": "Página", "OF": "de", "RUNNING": f"Cledon · Fase 2b · v{VERSAO}"} return {"HTML_LANG": "en", "TITLE": "Phase 2b · Minas Gerais — Cledon", "DESCRIPTION": "Esophageal cancer in Minas Gerais: cachaça, maize, water, rurality and access to diagnosis. " "Hypothesis generation.", "NAV_LABEL": "Main navigation", "NAV": f'The mapPhase 2' f'CodePortuguês', "EYEBROW": "Report · Phase 2b", "H1": "Esophageal cancer in Minas Gerais: what else goes along with the excess", "LEAD": "Seven further characteristics, including cachaça, maize, water in 1991 and 2000 and access to diagnosis. " f'Versão em português.', "AUTHOR": autor, "TOC_LABEL": "Sections", "TOC": toc, "FOOTER": "Cledon · Find Cancer Clues · Independent research initiative. This study does not provide diagnosis, " 'treatment or medical advice. contato@cledon.org.', "PAGE": "Page", "OF": "of", "RUNNING": f"Cledon · Phase 2b · v{VERSAO}"} def main(): global PT modelo = (RAIZ / "modelo_relatorio.html").read_text() for lang, saida in (("pt", RAIZ.parent / "fase2b" / "index.html"), ("en", RAIZ.parent / "fase2b" / "en" / "index.html")): PT = lang == "pt" pagina = modelo.replace("{{CORPO}}", corpo()) for k, val in casca(lang).items(): pagina = pagina.replace("{{" + k + "}}", val) assert "{{" not in pagina saida.parent.mkdir(parents=True, exist_ok=True) saida.write_text(pagina) print(f"Fase 2b ({lang}): {saida}") if __name__ == "__main__": main()