custo_producao v3.0¶
Custos de produção CONAB, preservando planilha, aba, referência de preços e cada item, subtotal e total publicado. O contrato ativo é CONAB_CUSTOS_V3, em agrobr.contracts.conab_custos.
Selecione uma planilha e uma aba sem ambiguidade com planilha e aba; seleções amplas informam candidatos em vez de escolher silenciosamente. tecnologia é qualificação de saída, não parâmetro.
Produtos¶
O dataset aceita 8 produtos:
| Código | Produto |
|---|---|
soja |
Soja |
milho |
Milho |
arroz |
Arroz |
feijao |
Feijão |
trigo |
Trigo |
algodao |
Algodão |
cafe_arabica |
Café arábica |
cafe_conilon |
Café conilon |
Milho, arroz e feijão têm duas planilhas cada: milho de 1ª/2ª safra, arroz
irrigado/sequeiro e feijão de 1ª/2ª+3ª safras. Consulte
conab.catalogo_custos(cultura) e informe planilha=; depois consulte
conab.catalogo_custos(cultura, planilha=...) para escolher uma aba= reconhecida.
Os filtros devem identificar um único contexto. A exigência vale para qualquer produto com
mais de uma planilha ou contexto candidato, inclusive contextos ainda pendentes de identificação.
A API recusa a seleção ambígua com InvalidParameterError e informa os candidatos; não escolhe
a planilha mais recente nem combina contextos automaticamente. Com contexto ainda não identificado no workbook e sem
aba, a mensagem lista as abas não identificadas e as identificadas que casam com os filtros (local/UF, ano e safra de
cada uma), até 15 de cada lista e "e mais N" no resto, para copiar o aba=.
Para café, informe cafe_arabica ou cafe_conilon. O pedido genérico cafe
informa essas alternativas. O catálogo da fonte também inclui outras culturas
agrícolas, além dos oito produtos do dataset.
Cache¶
Cache do catálogo: 1 h em processo. O parâmetro nomeado use_cache=False em conab.catalogo_custos, conab.custo_producao e datasets.custo_producao força nova leitura sem consultar ou atualizar o cache. As planilhas são baixadas a cada consulta. meta.source_details["catalog_cache"] informa hit, miss ou bypass; os recibos originais do catálogo ficam em manifest.acquisition.catalog_acquisition, separados das requisições da chamada atual.
Leitura de planilhas e limites¶
O parser 5 lê custos agrícolas XLS/BIFF e XLSX com cabeçalhos mesclados. Cada faixa de cabeçalho aceita no máximo um valor por linha; colisões, medidas fora das colunas reconhecidas e erros do Excel causam recusa explícita. As unidades monetárias permanecem publicadas, sem converter tonelada, saca ou hectare. Abas antigas de trigo com três medidas monetárias ficam recusadas: o contrato 3.0 representa duas medidas e nenhuma terceira coluna é descartada.
Café arábica/conilon é identificado pelo recurso oficial, mesmo quando o
sistema imprime apenas CAFÉ. safra conserva tanto o ano único quanto o
biênio publicado. Referências textuais como 13/12/2013 continuam textuais;
data_referencia fica nula quando a célula não é uma data Excel.
Percentuais numéricos com formato Excel % são multiplicados por 100.
Números já expressos em percentual e números textuais, como 100,00, não
recebem essa escala. Itens nulos e zeros permanecem distintos. CV, CT e demais
totais são as linhas publicadas, sem somar subtotais novamente. Cabeçalhos
repetidos, paginação, autoria e notas cambiais ficam nos diagnósticos, fora
das observações de custo. O contrato permanece 3.0.
Subtotais, grupos e memorandos¶
Desde o parser 5, os itens de cada seção fecham com o subtotal publicado sempre que a planilha fecha:
- o cabeçalho romano (
I -aVI -) abre a seção mesmo quando a planilha imprime zeros nele; os zeros ficam nos diagnósticos; - linha de custo depois do subtotal ou do total da mesma seção, como o bloco "Gestão da propriedade familiar" depois do H
ou do I, sai das observações e fica nos diagnósticos como
memo_after_total; - em cada seção vale a leitura que fecha com o subtotal publicado. O grupo
N - …com subitensN.M - …(inclusive' N.M) entra só com os subitens, só com o grupo ou com os dois, e o agregado "Gestão da propriedade familiar" entra ou sai. A linha que sai fica nos diagnósticos (group_header,group_componentouaggregate_row) com o valor publicado, emeta.source_details["parser"]["subtotal_checks"]registra a leitura de cada seção; - quando nenhuma leitura fecha, todas as linhas publicadas ficam, e sai um aviso (
UserWarningemeta.validation_warnings) com o subtotal publicado, a soma dos itens e a diferença. O mesmo vale para os totais de fórmula, como(E+F = G). O agrobr repassa os números publicados, sem recalcular.
Nas 11 séries de café, milho, algodão, soja, arroz, feijão e trigo, 45 subtotais ou totais não fecham na própria planilha, por exemplo Barreiras-BA-2011 (algodão, B), Patrocínio-MG-2022 (café arábica, E) e S. Mateus do Sul-PR-2008 (feijão, G e H).
Categoria¶
categoria sai da seção publicada: IV - DEPRECIAÇÕES e V - OUTROS CUSTOS FIXOS dão custos_fixos; II, III e
VI dão outros. No custeio, o rótulo decide pelo mapa, com acento, hífen e plural normalizados. Assim,
"Mão-de-obra temporária c/encargos", "Mão-de-obra" e "Mão de obra" dão mao_de_obra; "Defensivos", "Agrotóxicos",
"Mudas de Café", "Sementes e mudas", "Semente de arroz" e "Royalties" dão insumos; "Tratores e Colheitadeiras" e
"Máquinas Próprias" dão operacoes. As linhas de total (tipo_linha = "total") somam várias seções: saem com secao nula e
categoria pelo rótulo do total. Rótulo de custeio
fora do mapa fica outros em todos os anos.
A irrigação muda de categoria na troca de layout. Na planilha antiga, ela vem dentro da linha única "Operação com
máquinas próprias" (cana, S. M. dos Campos-AL-2017), que dá operacoes; no layout novo, ela é o subitem "Conjunto de
Irrigação", que dá outros. Assim, a série de operacoes muda de conteúdo quando o layout muda.
Abas identificadas e recusadas¶
Nas mesmas 11 séries, 116 abas têm o contexto reconhecido e o corpo recusado, sem quadro parcial:
| Série | Abas | Motivo e abas |
|---|---|---|
| arroz sequeiro | 40 | cabeçalho kg/sc 60 kg não reconhecido: Inhumas-GO, Itapuranga-GO, Palmeiras-GO e Piranhas-GO 2007–2014; Bacabal-MA 2007 e 2009–2014; Esperantina-PI-2007 (kg/sc 50 kg) |
| feijão 1ª safra | 28 | cabeçalho kg/sc 60 kg: Brejo Santo-CE e Crateús-CE 2007–2014, Icó-CE 2012–2014; medida inválida (#REF! ou .): Estrela-RS 2008–2014, Canoinhas-SC-2013; medida sem descrição: Unaí-MG-2009 |
| trigo | 16 | coluna duplicada de custo por unidade: Toledo-PR 2002–2004, Ubiratã-PR 2005–2007, Londrina-PR 2002–2007, Cascavel-PR 2004–2007 |
| soja | 9 | medida em coluna sem cabeçalho: OGM-Toledo-PR-2008, Cruz Alta-RS 2008–2010; medida inválida (#REF!): 1-Ijuí-RS 2007–2010; rótulo fora das colunas: Sorriso-MT-2014 |
| milho 1ª safra | 8 | medida em coluna sem cabeçalho: Rio Verde-GO 2007–2009, Passo Fundo-RS 2008–2010; medida inválida (#REF!): Rio Verde-GO-2001; medida sem descrição: Passo Fundo-RS-2012 |
| café arábica | 7 | medida em coluna sem cabeçalho: Patrocínio-MG 2006–2008, Franca-SP 2006–2008, Três Pontas-MG-2022 |
| arroz irrigado | 7 | medida em coluna sem cabeçalho: Cachoeira do Sul-RS 2009–2010; medida inválida (#REF! ou .): Camaquã-RS 2014–2016, Massaranduba-SC-2013, Meleiro-SC-2013 |
| café conilon | 1 | medida em coluna sem cabeçalho: Ji-Paraná-RO-2014 |
Milho 2ª safra, algodão e feijão 2ª/3ª safras não têm aba recusada nessas séries. Os cabeçalhos de rendimento
kg/sc 60 kg e kg/sc 50 kg, não reconhecidos, respondem por 59 das recusas.
A lista cobre só essas 11 séries. Outras culturas têm recusas pelos mesmos motivos, por exemplo
C. de Camaragibe-AL 2014–2016 e S. L. do Quitunde-AL-2017 na cana (medida em coluna sem cabeçalho) e
Cruz das Almas-BA 2008 e 2010–2013 na mandioca (cabeçalho R$t não reconhecido).
Schema¶
| Coluna | Tipo | Nulo | Unidade | Descrição |
|---|---|---|---|---|
cultura |
str | Não | — | Cultura canônica do recurso oficial selecionado. |
uf |
str | Não | — | UF publicada no contexto; se ausente em LOCAL:, usa o nome da aba com origem registrada. |
safra |
str | Sim | — | Token de safra publicado, inclusive grafias anômalas; nunca derivado do ano da referência. |
tecnologia |
str | Sim | — | Qualificação alta/média/baixa quando explícita no sistema; nula se ausente. |
categoria |
str | Não | — | Classificação auxiliar pela seção publicada (IV e V: custos_fixos; II, III e VI: outros), no custeio pelo rótulo normalizado e, nas linhas de total, pelo rótulo do total; item e seção conservam os rótulos publicados. |
item |
str | Não | — | Descrição literal da linha, inclusive espaços, receitas e totais. |
unidade |
str | Não | — | Cabeçalho literal da coluna de custo por hectare. |
quantidade_ha |
float | Sim | — | Coeficiente físico por hectare, nulo quando não publicado; nunca derivado de custo. |
preco_unitario |
float | Sim | — | Preço unitário publicado, nulo quando ausente; nunca custo por unidade de produção. |
valor_ha |
float | Sim | BRL/ha | Valor publicado por hectare; admite zero, receitas negativas e ausência. |
participacao_pct |
float | Sim | % | Participação genérica somente quando publicada sem base CV/CT específica. |
local |
str | Não | — | Local literal identificado na aba; não restrito a município IBGE. |
ano_referencia |
int | Não | — | Ano extraído da referência de preços publicada; distinto de safra. |
referencia |
str | Não | — | Referência textual publicada ou ISO da célula Excel datada. |
data_referencia |
datetime | Sim | — | Data somente quando a célula Excel publica data; mês/ano não inventa dia. |
planilha |
str | Não | — | Identificador exato entre candidatos do catálogo oficial. |
aba |
str | Não | — | Nome literal da aba selecionada de forma única. |
sistema |
str | Não | — | Descrição publicada do sistema de produção. |
linha |
int | Não | — | Número físico da linha na aba, base 1. |
tipo_linha |
str | Não | — | item, subtotal ou total publicado; somar indiscriminadamente duplica componentes. |
secao |
str | Sim | — | Último cabeçalho romano de seção publicado, quando identificado; nulo nas linhas de total (CUSTO ...), que somam várias seções. |
unidade_produto |
str | Sim | — | Cabeçalho literal da unidade de produção, por exemplo CUSTO / 60 kg, R$/1 kg ou (R$/t); sem equivalência presumida. |
valor_unidade_produto |
float | Sim | — | Custo pela unidade de produção publicada, não preço unitário de insumo. |
participacao_cv_pct |
float | Sim | % CV | Participação publicada na base custo variável; CV não é COE. |
participacao_ct_pct |
float | Sim | % CT | Participação publicada na base custo total. |
Semântica e proveniência¶
Não há chave primária definida. A saída preserva ocorrências e números físicos de linha; não deduplique por cultura/UF/safra/item.
safra é um token publicado anulável, inclusive com grafia anômala, e não é inferida de ano_referencia. referencia preserva a referência de preços; data_referencia só é preenchida quando a planilha publica uma data. local não é necessariamente município IBGE.
valor_ha preserva zeros, receitas negativas e ausências. quantidade_ha e preco_unitario ficam nulos quando não publicados; o custo por unidade de produção pertence a valor_unidade_produto, com unidade literal em unidade_produto. participacao_cv_pct e participacao_ct_pct preservam bases CV/CT distintas; CV não é COE.
tipo_linha distingue item, subtotal e total; somar todas as linhas duplica componentes. linha é o número físico na aba, começando em 1. Metadados preservam seleção de planilha/aba, hashes, aquisição e diagnósticos de parsing.
Quando LOCAL: não publica a UF, usa-se a UF do nome da aba no padrão
Local-UF-Ano. O nome do local continua vindo da célula, removendo o parêntese
descritivo quando presente. A seleção nos metadados registra
celulas_contexto["uf_origem"] = "nome_da_aba"; a coordenada de local continua
apontando para a célula. Data de referência e safra não são inferidas do nome.
Limitações de contexto no milho¶
Em milho_1a_safra_serie_historica_1997-2025.xls,
246 contextos são reconhecidos. P. do Leste-MT-1997 e
Campo Mourão-PR-1997 continuam sem contexto completo. Balsas-MA-2013
conserva o local regional publicado; Unaí-MG-2005 e Unaí-MG-2006
conservam o sistema literal MILHO1 - PLANTIO DIRETO (100%).
Reconhecer o contexto não valida todo o corpo. Rio Verde-GO-2007,
Rio Verde-GO-2008 e Rio Verde-GO-2009 ainda publicam zero em E29
sem cabeçalho de medida reconhecido e continuam recusadas.
Exemplo¶
from agrobr import conab, contracts, datasets
catalogo = await conab.catalogo_custos("soja")
df, meta = await datasets.custo_producao(
"soja", uf="BA",
planilha=catalogo["planilha"].iloc[-1],
aba="Barreiras-BA-2025", return_meta=True,
)
contracts.validate_dataset(df, "custo_producao")
O nome da planilha traz o último ano da série e muda a cada edição nova da CONAB (serie-historica-custos-soja-1997-a-2025.xls virou serie-historica-custos-soja-1997-a-2026.xls): tire-o de catalogo_custos, que lista as planilhas em ordem alfabética. Um nome fora do catálogo atual levanta InvalidParameterError com as planilhas do catálogo.
agrobr/schemas/custo_producao.json · get_contract("custo_producao").