Ir para o conteúdo

Datasets de cultivares RNC e SNPC

datasets.cultivares_registradas entrega o cadastro corrente do Registro Nacional de Cultivares (RNC). datasets.cultivares_protegidas entrega a consulta corrente de proteção do Serviço Nacional de Proteção de Cultivares (SNPC). Ambos reutilizam a API de fonte rnc, mas mantêm tabelas, identificadores e contratos distintos. O SDK não une as famílias pelo nome da cultivar nem interpreta sua situação jurídica.

Consultas

from agrobr import datasets

registradas, meta = await datasets.cultivares_registradas(
    nr_registro="42039", return_meta=True,
)
protegidas = await datasets.cultivares_protegidas(
    nr_processo="21806.000202/2014",
)
por_certificado = await datasets.cultivares_protegidas(nr_certificado="20190277")

Todos os argumentos são nomeados. Filtros combinados usam interseção: cada linha deve satisfazer todos eles. Os filtros são locais; uma aquisição nova baixa a exportação completa antes do recorte.

Parâmetro Registradas Protegidas Semântica
cultivar Sim Sim Substring literal no nome da cultivar, sem caixa e acento
especie Sim Sim Substring literal em nome_comum, sem caixa e acento e sem ampliar para nome científico
grupo Sim Não Substring literal no grupo da espécie, sem caixa e acento
situacao Sim Sim Substring literal na situação publicada, sem caixa e acento
mantenedor Sim Não Substring literal no texto de mantenedores, sem caixa e acento
titular Não Sim Substring literal no texto de titulares, sem caixa e acento
nr_registro Sim Não Igualdade textual completa do número de registro
nr_formulario Sim Não Igualdade textual completa do número de formulário; não é chave única
nr_processo Não Sim Igualdade textual completa do número de processo
nr_certificado Não Sim Igualdade textual completa do certificado; pode selecionar vários processos

Os filtros têm padrão None. Exigem strings não vazias após remoção de espaços externos; não aceitam números ou booleanos em lugar de texto. O strip também se aplica aos IDs, seguido de igualdade exata: " 42039 " consulta "42039", enquanto "042039" continua distinto. Pontuação, zeros e caixa dos identificadores são preservados. Os demais filtros ignoram caixa e acento ("feijao" acha "Feijão") e tratam ponto, parênteses e outros caracteres literalmente, sem regex.

Flag Padrão Comportamento
use_cache True Reutiliza uma aquisição válida; False evita leitura e escrita do cache
as_polars False Converte após a validação do contrato pandas
return_meta False Retorna (df, MetaInfo) quando verdadeiro

As três flags são booleanos estritos. Parâmetros inválidos geram InvalidParameterError antes do acesso ao cache ou à rede. Argumentos posicionais, desconhecidos ou da outra família geram TypeError na assinatura pública. Não há parâmetro produto, período ou seleção histórica.

Contratos e ausências

Registradas reutiliza rnc_registradas 1.0, com dez colunas e chave nr_registro. Protegidas reutiliza rnc_protegidas 1.0, com doze colunas e chave nr_processo. Os wrappers não criam aliases no registry de contratos.

Ambos validam o contrato mesmo sem metadados e em resultados vazios. A fonte valida a população inteira antes da seleção: um filtro não oculta erro em outra linha. Ausência de correspondência produz um DataFrame vazio tipado; não comprova ausência em outra publicação ou cadastro.

Strings vazias publicadas permanecem "". Datas são civis em datetime64[ns], sem timezone ou horário; ausência permanece NaT. A décima segunda coluna de protegidas, termino_protecao_texto, preserva a célula original com strip, inclusive datas e vazios. A expressão oficial até a emissão do certificado definitivo mantém esse texto e deixa a data escalar nula. Ela não é convertida em vencimento presumido nem associada automaticamente a uma única situação.

Certificados repetidos entre processos não são deduplicados. Formulários também podem repetir ou estar vazios. Textos de mantenedores, titulares, representantes e melhoristas não são divididos nem têm nomes repetidos removidos.

Cache e proveniência

O cache de cada família guarda o CSV bruto e um manifesto de aquisição, com hash, URL, coleta UTC, parser e schema. O TTL é de 24 horas desde a coleta, não desde a última leitura. O conteúdo é revalidado antes de uso. CSVs normalizados do cache legado não são tratados como aquisições identificadas. use_cache=False não lê nem atualiza o cache existente.

meta.dataset identifica o wrapper; meta.source é datasets.cultivares_registradas/rnc_registradas ou datasets.cultivares_protegidas/rnc_protegidas. selected_source e attempted_sources preservam a rota da família inclusive em cache. source_method="dataset" identifica a camada semântica, e from_cache distingue reaproveitamento da aquisição.

fetched_at conserva a coleta original em UTC com fuso. fetch_timestamp é a mesma aquisição, em UTC com fuso. Hash e tamanho descrevem o CSV bruto, não o DataFrame filtrado. Chave/expiração de cache e durações de aquisição/parsing são preservadas; o parsing é realizado novamente ao ler o CSV do cache.

source_details contém acquisition.resource/search, diagnósticos do parser, filtros e linhas em selection, estado do cache e coverage. Se houver total comprovado na busca pública, ele deve coincidir com as linhas do CSV (count_matched); divergência falha. Sem total verificável, a cobertura é unknown. Essa conferência não transforma busca e exportação em um snapshot transacional. As contagens da população e do recorte são separadas; os metadados são copiados de forma independente.

Falhas de transporte ou de contrato da fonte são encapsuladas pela base em SourceUnavailableError, com sua classificação em errors; falha de layout ou de conteúdo do CSV sai como ParseError. Não há fallback para a outra família. Consulte a descrição da fonte e as licenças; acesso ao CSV não é uma declaração de direitos sobre a cultivar.

Determinismo, sync e Polars

Qualquer contexto datasets.deterministic(...) é recusado antes de I/O. A exportação corrente e seu cache não permitem selecionar revisões históricas arbitrárias; snapshot=None nos resultados. update_frequency="continuous" descreve um cadastro corrente, sem prometer agenda de publicação ou SLA.

from agrobr.sync import datasets

df = datasets.cultivares_registradas(nr_registro="42039")
polars_df = datasets.cultivares_protegidas(
    nr_certificado="20190277", as_polars=True,
)

As consultas pandas funcionam no core. Polars requer agrobr[polars]; a conversão conserva IDs textuais e datas, inclusive em vazio. Ambos os wrappers aparecem em datasets.list_datasets() e em datasets.info(...).

Exportação de 18/09/2026

Os CSVs da exportação de 18/09/2026 têm 38.325 registros RNC e 5.424 registros SNPC. A contagem HTML da pesquisa que precede cada CSV coincide com ele; essa concordância não garante snapshot transacional nem cobertura histórica.

No RNC, os 22.946 formulários, 4.256 nomes de cultivar e 4.271 mantenedores vazios publicados permanecem texto vazio; ambas as datas estão preenchidas nessa exportação. Há 924 grupos de formulários repetidos, com 15.142 ocorrências. No SNPC, o término tem 5.267 datas, 155 condições e dois vazios; as 155 condições e os dois vazios produzem data nula, preservando o texto. Há 102 certificados repetidos entre processos distintos, com 204 ocorrências. Nenhuma dessas repetições de identificadores secundários é deduplicada.

A aquisição original em fetched_at conserva UTC com fuso explícito, inclusive no cache e no dataset. Na fonte e no dataset, fetch_timestamp coincide com a aquisição. As datas civis da tabela são independentes desses instantes.