Cooperativismo, floresta e renda na Amazônia — dados
  • Início
  • Mapa principal
  • Catálogo de bases
  • Indicadores
  • Mapas
    • Desmatamento e áreas protegidas (mapa principal)
    • Municípios da Amazônia Legal
    • Áreas designadas e entorno
    • Setores censitários
    • Cooperativas e associações
    • Cooperados × não cooperados (Censo Agro, por UF)
    • Páginas dos municípios do Acre
  • Análises
    • Pressão por desmatamento nas reservas extrativistas
  • Metodologia
    • Níveis de análise e definições
    • Metodologia dos cruzamentos
    • Registro de decisões
    • Política de dados
    • Dados para baixar
  • Sobre
    • Sobre o site
    • Pendências e próximos passos
Versão de trabalho para a equipe do projeto · dados preliminares, não citar

Cooperativas e associações da sociobiodiversidade

Organizações com sinal de sociobiodiversidade no cadastro de CNPJ, por município da Amazônia Legal

NotaComo ler esta página
  • “Sinal”, não prova. Uma organização tem sinal de sociobiodiversidade quando uma de suas atividades declaradas à Receita (CNAE principal ou secundária) é extrativismo não madeireiro, conservação de florestas nativas ou apoio à produção florestal (02.30-6/00), ou quando a razão social ou o nome fantasia traz, como palavra inteira, termos como extrativista, seringueiro, castanha, açaí (nomes de lugar como Castanhal ou Açailândia não contam).
  • A atividade declarada da organização não prova a prática dos cooperados, e o endereço da sede não é a área de atuação. Associações comunitárias costumam usar CNAE genérico e podem escapar.
  • O que se conta. Cada organização uma vez (raiz do CNPJ), no município da sede, se estiver ativa na Receita. As inaptas — que deixaram de entregar declarações e podem já não funcionar — aparecem à parte (“ativas + inaptas”), e as filiais numa variável própria. A Receita só publica a situação atual: na série, uma organização hoje inapta conta como inapta a partir do ano em que ficou assim (decisão D27).
  • Natureza 3999 (“associação privada”) também inclui institutos, fundações e ONGs.
  • A validação está no fim da página.
import {fmt, caixa, opcoesMapa, janela, numeroPt} from "../assets/mapas.js"
maplibregl = require("maplibre-gl@4.7.1/dist/maplibre-gl.js")
css = html`<link rel="stylesheet" href="https://unpkg.com/maplibre-gl@4.7.1/dist/maplibre-gl.css">`
geo = FileAttachment("../gerado/dados/municipios_al.geojson").json()
org = FileAttachment("../gerado/dados/organizacoes_municipio.json").json()
VARS = [
  {id: "org_sociobio", rotulo: "Cooperativas + associações com sinal de sociobiodiversidade, ativas (2025)", cortes: [1, 2, 4, 8]},
  {id: "coop_sociobio", rotulo: "Cooperativas com sinal de sociobiodiversidade, ativas (2025)", cortes: [1, 2, 3, 5]},
  {id: "org_sociobio_por_mil_estab", rotulo: "… ativas, por mil estabelecimentos agropecuários (Censo Agro 2017)", cortes: [0.5, 1, 2, 5]},
  {id: "org_sociobio_com_inaptas", rotulo: "Cooperativas + associações com sinal, ativas + inaptas (2025)", cortes: [1, 2, 4, 8]},
  {id: "filiais_sociobio", rotulo: "Filiais de organizações com sinal (2025)", cortes: [1, 2, 3, 5]},
  {id: "coop_cafe_cacau", rotulo: "Cooperativas de café ou cacau, ativas (2025)", cortes: [1, 2, 3, 5]},
  {id: "coop_agro", rotulo: "Outras cooperativas agropecuárias, ativas (2025)", cortes: [1, 3, 6, 12]}
]
CORES = ["#f7f7f7", "#fde0c5", "#f8b58b", "#e8784e", "#b2402a"]
geoOrg = ({type: "FeatureCollection", features: geo.features.map(f => ({...f, properties: {...f.properties, ...(org[f.properties.cod_mun] ?? {})}}))})
viewof v = Inputs.select(VARS, {label: "Indicador", format: d => d.rotulo, value: VARS.find(d => d.id === new URLSearchParams(window.location.search).get("indicador")) ?? VARS[0]})
html`<div class="legenda-mapa">${CORES.map((c, i) => { const n = numeroPt(1); return html`<div>${caixa(c)}${
  i === 0 ? "menos de " + n(v.cortes[0]) : i === CORES.length - 1 ? n(v.cortes[i - 1]) + " ou mais" : n(v.cortes[i - 1]) + " a menos de " + n(v.cortes[i])}</div>`; })}
  ${v.id.includes("por_mil") ? html`<div>${caixa("#d9d9d9")}sem dado (menos de 50 estabelecimentos agropecuários em 2017, ou município criado depois)</div>` : ""}</div>`

Fonte: cadastro de CNPJ da Receita Federal (setembro de 2026). Cada organização conta uma vez, no município da sede; “ativa” = situação ativa na Receita.

mapaOrg = {
  const div = html`<div class="mapa"></div>`;
  div.pronto = new Promise(resolve => setTimeout(() => {
    const m = new maplibregl.Map(opcoesMapa(div));
    m.addControl(new maplibregl.NavigationControl({showCompass: false}));
    m.on("load", () => {
      const rotulos = m.getStyle().layers.find(l => l.type === "symbol")?.id;
      m.addSource("mun", {type: "geojson", data: geoOrg, attribution: "Receita Federal, IBGE"});
      m.addLayer({id: "f", type: "fill", source: "mun", paint: {"fill-color": "#eee", "fill-opacity": 0.85}}, rotulos);
      m.addLayer({id: "l", type: "line", source: "mun", paint: {"line-color": "#fff", "line-width": 0.3}}, rotulos);
      janela(maplibregl, m, ["f"], fs => {
        const p = fs[0].properties, x = div.variavel;  // div.variavel: a célula de baixo grava o indicador escolhido (citar mapaOrg aqui seria definição circular)
        const valor = x && x.id.includes("por_mil") ? `<br>Com sinal, ativas, por mil estabelecimentos agropecuários: <strong>${p[x.id] == null ? "sem dado" : numeroPt(1)(p[x.id])}</strong>` : "";
        return `<strong>${p.nome} (${p.uf})</strong>${valor}<br>com sinal de sociobiodiversidade, ativas: ${p.coop_sociobio ?? 0} cooperativa(s), ${p.assoc_sociobio ?? 0} associação(ões)` +
               `<br>inaptas: ${(n => n > 0 && n < 5 ? "<5" : n)(+(p.inaptas_sociobio ?? 0))} · filiais: ${p.filiais_sociobio ?? 0}<br>café/cacau: ${p.coop_cafe_cacau ?? 0} · outras agropecuárias: ${p.coop_agro ?? 0}` +
               `<br><small>organizações com sede no município, 2025; inaptas de 1 a 4 aparecem como "<5"</small>`;
      });
      resolve(m);
    });
  }, 0));
  invalidation.then(async () => (await div.pronto).remove());
  return div;
}
{
  const m = await mapaOrg.pronto;
  mapaOrg.variavel = v;
  const passos = ["step", ["to-number", ["coalesce", ["get", v.id], 0]], CORES[0]];
  v.cortes.forEach((c, i) => passos.push(c, CORES[i + 1]));
  m.setPaintProperty("f", "fill-color", v.id.includes("por_mil") ? ["case", ["==", ["get", v.id], null], "#d9d9d9", passos] : passos);
  return html`<span></span>`;
}

Ao longo do tempo

Organizações com sede em cada estrato regional, presentes em cada ano (abertas até o ano e ainda não baixadas). “Só ativas” tira as inaptas a partir do ano em que ficaram inaptas.

serie = FileAttachment("../gerado/dados/serie_organizacoes_estrato.json").json()
viewof classe = Inputs.radio(new Map([["Sinal de sociobiodiversidade", "sociobiodiversidade"], ["Café ou cacau", "cafe_cacau"], ["Outras agropecuárias", "agropecuaria"]]),
                             {label: "Classe", value: "sociobiodiversidade"})
viewof situacao = Inputs.radio(new Map([["Só ativas", "ativas"], ["Ativas + inaptas", "ativas_e_inaptas"]]), {label: "Situação", value: "ativas"})
// Série completa: anos sem estabelecimento entram como zero (sem isso a linha começaria no meio)
serieClasse = {
  const s = serie.filter(d => d.classe === classe && (d.situacao ?? "ativas") === situacao);
  const anos = d3.range(d3.min(serie, d => d.ano), d3.max(serie, d => d.ano) + 1);
  const idx = new Map(s.map(d => [`${d.estrato}|${d.tipo_org}|${d.ano}`, d.n]));
  const grupos = d3.cross(["Acre", "AM, RR e AP", "Pará", "MT e RO", "MA e TO"], ["cooperativa", "associacao"]);
  return grupos.flatMap(([estrato, tipo_org]) => anos.map(ano => ({estrato, tipo_org, ano, n: idx.get(`${estrato}|${tipo_org}|${ano}`) ?? 0})));
}
Plot.plot({
  width: Math.min(width, 900), height: 380, marginLeft: 50,
  x: {label: "Ano", tickFormat: d => String(d)}, y: {label: "Organizações", grid: true, tickFormat: numeroPt(0)},
  color: {legend: true, domain: ["Acre", "AM, RR e AP", "Pará", "MT e RO", "MA e TO"]},
  fx: {tickFormat: t => t === "cooperativa" ? "Cooperativas" : "Associações", label: null},
  // fx no próprio mark: o facet de nível superior só vale para marks com o MESMO array de dados
  marks: [Plot.line(serieClasse, {x: "ano", y: "n", stroke: "estrato", fx: "tipo_org", strokeWidth: 2,
                                  tip: {format: {x: d => String(d), y: numeroPt(0), fx: t => t === "cooperativa" ? "Cooperativas" : "Associações"}}})]
})

Habilitadas no CAF

Quantas das organizações ativas têm CAF Jurídica (Cadastro Nacional da Agricultura Familiar, MDA, setembro de 2026) — o cadastro exige que a maioria dos sócios seja agricultor familiar com CAF. É um sinal de vínculo com a agricultura familiar, não de funcionamento, e não ter CAF não quer dizer que a organização parou: cooperativas de crédito, laticínio ou soja não são da agricultura familiar, e associações concessionárias de RESEX funcionam sem ele. A emissão depende da rede de emissoras de cada estado — compare dentro de cada estrato, com a taxa das outras classes ao lado.

Estrato Com sinal de sociobiodiversidade Outras agropecuárias Outras
Acre 20% (41 de 210) 16% (13 de 82) 2% (25 de 1.134)
AM, RR e AP 23% (153 de 675) 18% (120 de 657) 2% (159 de 7.963)
Pará 13% (117 de 879) 18% (126 de 718) 1% (84 de 11.866)
MT e RO 12% (32 de 265) 11% (86 de 772) 1% (99 de 11.182)
MA e TO 19% (53 de 277) 15% (104 de 717) 2% (340 de 14.668)

Organizações (raiz do CNPJ) ativas na Receita, com sede no estrato, em 2025. Entre as inaptas, só 0,1% têm CAF Jurídica — outro sinal de que muitas já não funcionam.

Como foi feito e validado

Fonte: arquivos abertos do cadastro de CNPJ da Receita Federal (versão de setembro de 2026) — cooperativas (natureza jurídica 2143) e associações (3999, só com atividade associativa ou agropecuária) com estabelecimento nos municípios da Amazônia Legal. As regras de classificação foram fixadas antes de olhar a validação (registro de decisões, D12), com uma correção posterior para não contar nomes de lugar (D22). A contagem por organização e por situação cadastral foi decidida depois de ver que 38% dos estabelecimentos com sinal estavam inaptos (D27).

Organizações (raiz do CNPJ) com sede na Amazônia Legal, presentes em 2025, pela situação atual na Receita (setembro de 2026; o mapa usa a situação em 2025, por isso conta algumas ativas a mais — as que ficaram inaptas em 2026):

Classe Ativas Inaptas ou suspensas
Sinal de sociobiodiversidade 2.306 1.493
Café ou cacau 181 115
Outras agropecuárias 2.946 1.896
Outras 46.813 36.133

Das organizações com sinal, 2.027 têm o sinal só no nome, 1.350 só na atividade declarada (CNAE) e 425 nos dois.

Validação 1 — recall. Das 441 organizações da Amazônia Legal no mapa de negócios comunitários da Conexsus (2018), 394 foram encontradas no cadastro consultado e 50% delas foram classificadas com sinal de sociobiodiversidade. A Conexsus é um levantamento por adesão, não um censo — serve para medir o que escapa, não a precisão.

Validação 2 — precisão (em andamento). Uma amostra de 190 organizações, sorteada do universo que o mapa mostra e estratificada por região, classe e fonte do sinal (decisão D28), será codificada às cegas por duas pessoas da equipe (Meta 5 — formação de bolsistas). A precisão, ponderada pelo tamanho de cada estrato, e a concordância (kappa) entram aqui quando a codificação for concluída.

Gerado em 03/11/2026 22:41 a partir do commit 2209fa1 do repositório do projeto. Dados: PRODES Amazônia Legal v20260408 (raster) e PRODES Cerrado v20260407 (INPE), com as manchas de 1–6,25 ha do PRODES bioma Amazônia vetorial v20260717 — outra versão que a do raster; limite da Amazônia Legal 2024 (IBGE); demais versões nas páginas de cada fonte.

Projeto UFAC · IESP-UERJ · IFAC (2026–2029). Versão de trabalho — dados preliminares, não citar.