ERRO
KeyError Traceback (most recent call last)
Cell In[1], line 51
49 empresa = f"{row['cod_cvm']} - {cvm_codes[row['cod_cvm']]}"
50 print("" * 20, empresa, "" * 20)
---> 51 reports = cvm_httpclient.get_report(row["numero_seq_documento"], row["codigo_tipo_instituicao"], reports_list=reports_list)
53 for report in reports:
54 reports[report]["cod_cvm"] = row["cod_cvm"]
File [...brfinance/backend.py:65), in CVMAsyncBackend.get_report(self, NumeroSequencialDocumento, CodigoTipoInstituicao, reports_list)
60 def get_report(
61 self,
62 NumeroSequencialDocumento,
63 CodigoTipoInstituicao,
64 reports_list=None):
---> 65 response = self._http_client().get_reports(
66 NumeroSequencialDocumento,
67 CodigoTipoInstituicao,
68 reports_list)
69 response_class = GetReportResponse(response=response)
71 return response_class.data()
File .../brfinance/http_client.py:99, in CVMHttpClient.get_reports(self, NumeroSequencialDocumento, CodigoTipoInstituicao, reports_list)
97 soup = BeautifulSoup(response.text, features="lxml")
98 print(soup)
...
102 id='hdnCodigoTipoDocumento').attrs["value"]
103 # hdnCodigoCvm = soup.find(id='hdnCodigoCvm').attrs["value"]
104 # hdnDescricaoDocumento = soup.find(id='hdnDescricaoDocumento').attrs["value"]
KeyError: 'value'
CODIGO RODADO (EXEMPLO)
from brfinance import CVMAsyncBackend
import pandas as pd
from datetime import datetime, date
cvm_httpclient = CVMAsyncBackend()
Dict de códigos CVM para todas as empresas
cvm_codes = cvm_httpclient.get_cvm_codes()
print(cvm_codes)
Dict de todas as categorias de busca disponíveis (Fato relevante, DFP, ITR, etc.)
categories = cvm_httpclient.get_consulta_externa_cvm_categories()
print(categories)
Realizando busca por Empresa
start_date = date(2020, 1, 1)
end_dt = date.today()
cvm_codes_list = ['21610'] # B3
category = ["EST_4", "EST_3", "IPE_4_-1_-1"] # Códigos de categoria para DFP, ITR e fatos relevantes
last_ref_date = False # Se "True" retorna apenas o último report no intervalo de datas
Busca
search_result = cvm_httpclient.get_consulta_externa_cvm_results(
cod_cvm=cvm_codes_list,
start_date=start_date,
end_date=end_dt,
last_ref_date=last_ref_date,
category=category
)
Filtrar dataframe de busca para DFP e ITR apenas
search_result = search_result[
(search_result['categoria']=="DFP - Demonstrações Financeiras Padronizadas") |
(search_result['categoria']=="ITR - Informações Trimestrais")]
search_result = search_result[pd.to_numeric(search_result['numero_seq_documento'], errors='coerce').notnull()]
reports_list = [
'Balanço Patrimonial Ativo',
'Balanço Patrimonial Passivo',
'Demonstração do Resultado',
'Demonstração do Resultado Abrangente',
'Demonstração do Fluxo de Caixa',
'Demonstração das Mutações do Patrimônio Líquido',
'Demonstração de Valor Adicionado'] # Se None retorna todos os demonstrativos disponíveis.
Obter demonstrativos
for index, row in search_result.iterrows():
empresa = f"{row['cod_cvm']} - {cvm_codes[row['cod_cvm']]}"
print("" * 20, empresa, "" * 20)
reports = cvm_httpclient.get_report(row["numero_seq_documento"], row["codigo_tipo_instituicao"], reports_list=reports_list)
for report in reports:
reports[report]["cod_cvm"] = row["cod_cvm"]
print(reports[report].head())
ERRO
KeyError Traceback (most recent call last)
Cell In[1], line 51
49 empresa = f"{row['cod_cvm']} - {cvm_codes[row['cod_cvm']]}"
50 print("" * 20, empresa, "" * 20)
---> 51 reports = cvm_httpclient.get_report(row["numero_seq_documento"], row["codigo_tipo_instituicao"], reports_list=reports_list)
53 for report in reports:
54 reports[report]["cod_cvm"] = row["cod_cvm"]
File [...brfinance/backend.py:65), in CVMAsyncBackend.get_report(self, NumeroSequencialDocumento, CodigoTipoInstituicao, reports_list)
60 def get_report(
61 self,
62 NumeroSequencialDocumento,
63 CodigoTipoInstituicao,
64 reports_list=None):
---> 65 response = self._http_client().get_reports(
66 NumeroSequencialDocumento,
67 CodigoTipoInstituicao,
68 reports_list)
69 response_class = GetReportResponse(response=response)
71 return response_class.data()
File .../brfinance/http_client.py:99, in CVMHttpClient.get_reports(self, NumeroSequencialDocumento, CodigoTipoInstituicao, reports_list)
97 soup = BeautifulSoup(response.text, features="lxml")
98 print(soup)
...
102 id='hdnCodigoTipoDocumento').attrs["value"]
103 # hdnCodigoCvm = soup.find(id='hdnCodigoCvm').attrs["value"]
104 # hdnDescricaoDocumento = soup.find(id='hdnDescricaoDocumento').attrs["value"]
KeyError: 'value'
CODIGO RODADO (EXEMPLO)
from brfinance import CVMAsyncBackend
import pandas as pd
from datetime import datetime, date
cvm_httpclient = CVMAsyncBackend()
Dict de códigos CVM para todas as empresas
cvm_codes = cvm_httpclient.get_cvm_codes()
print(cvm_codes)
Dict de todas as categorias de busca disponíveis (Fato relevante, DFP, ITR, etc.)
categories = cvm_httpclient.get_consulta_externa_cvm_categories()
print(categories)
Realizando busca por Empresa
start_date = date(2020, 1, 1)
end_dt = date.today()
cvm_codes_list = ['21610'] # B3
category = ["EST_4", "EST_3", "IPE_4_-1_-1"] # Códigos de categoria para DFP, ITR e fatos relevantes
last_ref_date = False # Se "True" retorna apenas o último report no intervalo de datas
Busca
search_result = cvm_httpclient.get_consulta_externa_cvm_results(
cod_cvm=cvm_codes_list,
start_date=start_date,
end_date=end_dt,
last_ref_date=last_ref_date,
category=category
)
Filtrar dataframe de busca para DFP e ITR apenas
search_result = search_result[
(search_result['categoria']=="DFP - Demonstrações Financeiras Padronizadas") |
(search_result['categoria']=="ITR - Informações Trimestrais")]
search_result = search_result[pd.to_numeric(search_result['numero_seq_documento'], errors='coerce').notnull()]
reports_list = [
'Balanço Patrimonial Ativo',
'Balanço Patrimonial Passivo',
'Demonstração do Resultado',
'Demonstração do Resultado Abrangente',
'Demonstração do Fluxo de Caixa',
'Demonstração das Mutações do Patrimônio Líquido',
'Demonstração de Valor Adicionado'] # Se None retorna todos os demonstrativos disponíveis.
Obter demonstrativos
for index, row in search_result.iterrows():
empresa = f"{row['cod_cvm']} - {cvm_codes[row['cod_cvm']]}"
print("" * 20, empresa, "" * 20)
reports = cvm_httpclient.get_report(row["numero_seq_documento"], row["codigo_tipo_instituicao"], reports_list=reports_list)