BCB Focus — contrato 2.0¶
Contrato da API de fonte bcb.focus(), registrado como bcb_focus. A constante é agrobr.contracts.bcb_focus.BCB_FOCUS_V2; o schema exportado fica em agrobr/schemas/bcb_focus.json. O dataset expectativas_mercado reutiliza este contrato de fonte.
| Coluna | Tipo pandas | Nulo | Significado |
|---|---|---|---|
indicador |
texto | Não | Nome exato publicado pelo BCB |
data |
datetime64[ns], sem fuso | Não | Data civil da pesquisa, sem horário |
data_referencia |
texto | Não | Horizonte anual YYYY ou mensal MM/YYYY |
media, mediana, desvio_padrao, minimo, maximo |
float64 | Sim | Estatísticas finitas publicadas, sem arredondamento adicional |
numero_respondentes |
Int64 | Sim | Inteiro publicado entre 0 e 2³¹−1 |
base_calculo |
Int64 | Sim | Código publicado entre 0 e 2³¹−1, sem remapeamento |
periodicidade |
texto | Não | anual ou mensal, conforme a entidade selecionada |
indicador_detalhe |
texto | Sim | Dimensão anual publicada; nulo na entidade mensal |
As doze colunas e seus tipos numéricos/temporais permanecem no vazio. A chave é periodicidade, indicador, indicador_detalhe, data, data_referencia, base_calculo. Nulo na chave identifica uma dimensão ausente; detalhe vazio é distinto de nulo. Exportações, Importações e Saldo da Balança comercial não podem ser fundidos, nem bases diferentes do mesmo indicador.
data é a data da pesquisa, distinta da coleta UTC. data_referencia é um horizonte de projeção e pode ser futuro; não é o dia de uma observação realizada. O formato precisa ter ano e mês válidos. A saída conserva a ordem adquirida: pesquisa decrescente, depois referência textual e base crescentes; no anual, detalhe também participa do desempate. MM/YYYY não está em ordem cronológica de horizontes.
Os campos externos obrigatórios precisam estar presentes, mesmo quando aceitam null. Ausências explícitas não viram zero. Estatísticas exigem números JSON; contagem/base exigem inteiros JSON, sem bool ou coerção de texto/fração. Valores não finitos, JSON ambíguo e datas fora do domínio datetime64[ns] geram erro. Valores negativos finitos são preservados. Desvio negativo, extremos invertidos e média/mediana fora dos extremos disponíveis geram diagnóstico com origem, conservando os valores publicados. O contrato não certifica a consistência científica da pesquisa.
Cada página é validada integralmente antes de aplicar max_registros. Duplicatas, inclusive idênticas ou com dimensões nulas, alterações de seleção e falhas de página interrompem a aquisição. Resposta curta sem contagem independente continua pelo número efetivamente recebido até página vazia. coverage.completeness fica unknown sem total independente; descarte ou continuação pendente ao atingir o limite local permitem partial. complete exige contagem reconciliada, sem descarte nem continuação contraditória. Contagem e nextLink são validados quando presentes; as consultas conhecidas não os trouxeram. Não há snapshot de revisões entre páginas.
MetaInfo usa schema/contrato 2.0, parser 2 e fonte bcb_focus. source_details contém query, recursos, cobertura, avisos e tipos/nulos. Recursos preservam URLs, parâmetros, offset, quantidades recebidas/retidas, status, coleta UTC, SHA256 e bytes do corpo. O hash/tamanho superiores identificam um manifesto canônico UTF-8 de query e recursos; a soma dos corpos é informada separadamente. Avisos também são emitidos sem return_meta=True.
from agrobr import bcb, contracts
df, meta = await bcb.focus(
"IPCA", periodicidade="mensal", inicio="2026-08-28", return_meta=True,
)
contracts.validate_dataset(df, "bcb_focus")
Veja a API, a fonte e seus limites e a migração.