bb_api 0.2.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- bb_api/__init__.py +17 -0
- bb_api/accountability.py +1870 -0
- bb_api/common.py +72 -0
- bb_api-0.2.0.dist-info/METADATA +54 -0
- bb_api-0.2.0.dist-info/RECORD +8 -0
- bb_api-0.2.0.dist-info/WHEEL +5 -0
- bb_api-0.2.0.dist-info/licenses/LICENSE +674 -0
- bb_api-0.2.0.dist-info/top_level.txt +1 -0
bb_api/accountability.py
ADDED
|
@@ -0,0 +1,1870 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import base64
|
|
3
|
+
import requests
|
|
4
|
+
import datetime
|
|
5
|
+
import pandas as pd
|
|
6
|
+
from typing import Tuple
|
|
7
|
+
from bb_api import common
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class _AccountabilityV3BaseAPI:
|
|
11
|
+
_app_key: str
|
|
12
|
+
_client_id: str
|
|
13
|
+
_api_domain: str
|
|
14
|
+
_access_token: str
|
|
15
|
+
_oauth_domain: str
|
|
16
|
+
_client_secret: str
|
|
17
|
+
_ambiente: common.Ambiente
|
|
18
|
+
_base64_credentials: str
|
|
19
|
+
_last_access_token_request_timestamp: datetime.datetime
|
|
20
|
+
|
|
21
|
+
def __init__(
|
|
22
|
+
self,
|
|
23
|
+
ambiente: common.Ambiente = common.Ambiente.HOMOLOGACAO,
|
|
24
|
+
app_key: str = None,
|
|
25
|
+
client_id: str = None,
|
|
26
|
+
client_secret: str = None,
|
|
27
|
+
):
|
|
28
|
+
"""Inicia uma instância do encapsulador da API Accountability V3 do Banco do Brasil.
|
|
29
|
+
|
|
30
|
+
Parâmetros
|
|
31
|
+
----------
|
|
32
|
+
app_key: str
|
|
33
|
+
Chave da aplicação fornecida pelo Banco do Brasil.
|
|
34
|
+
client_id: str
|
|
35
|
+
ID do cliente fornecido pelo Banco do Brasil ou gerada pela API do Banco do Brasil.
|
|
36
|
+
client_secret: str
|
|
37
|
+
Credencial do cliente gerada pela API do Banco do Brasil.
|
|
38
|
+
|
|
39
|
+
Para gerar o ``client_id`` e ``client_secret``, siga os passos disponíveis no Portal BB Developers (<https://apoio.developers.bb.com.br/referency/post/641877548600960012b32cd6>).
|
|
40
|
+
"""
|
|
41
|
+
self._ambiente = ambiente
|
|
42
|
+
|
|
43
|
+
if ambiente == common.Ambiente.DESENVOLVIMENTO:
|
|
44
|
+
self._api_domain = common._dese_api_domain
|
|
45
|
+
self._oauth_domain = common._dese_oauth_domain
|
|
46
|
+
elif ambiente == common.Ambiente.HOMOLOGACAO:
|
|
47
|
+
self._api_domain = common._homo_api_domain
|
|
48
|
+
self._oauth_domain = common._homo_oauth_domain
|
|
49
|
+
elif ambiente == common.Ambiente.HOMOLOGACAO_ALTERNATIVO:
|
|
50
|
+
self._api_domain = common._homo_alt_api_domain
|
|
51
|
+
self._oauth_domain = common._homo_alt_oauth_domain
|
|
52
|
+
elif ambiente == common.Ambiente.PRODUCAO:
|
|
53
|
+
self._api_domain = common._prod_api_domain
|
|
54
|
+
self._oauth_domain = common._prod_oauth_domain
|
|
55
|
+
|
|
56
|
+
app_key = os.getenv("BB_API_APP_KEY", app_key)
|
|
57
|
+
if app_key is not None:
|
|
58
|
+
self._app_key = app_key
|
|
59
|
+
else:
|
|
60
|
+
raise ValueError(
|
|
61
|
+
"Uma chave de aplicação inválida foi utilizada. Defina a chave"
|
|
62
|
+
" por meio do parâmetro 'app_key' ou pelo variável de ambiente"
|
|
63
|
+
" 'BB_API_APP_KEY'."
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
client_id = os.getenv("BB_API_CLIENT_ID", client_id)
|
|
67
|
+
if client_id is not None:
|
|
68
|
+
self._client_id = client_id
|
|
69
|
+
else:
|
|
70
|
+
raise ValueError(
|
|
71
|
+
"Um ID de cliente inválido foi utilizado. Defina a chave por"
|
|
72
|
+
" meio do parâmetro 'client_id' ou pelo variável de ambiente"
|
|
73
|
+
" 'BB_API_CLIENT_ID'."
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
client_secret = os.getenv("BB_API_CLIENT_SECRET", client_secret)
|
|
77
|
+
if client_secret is not None:
|
|
78
|
+
self._client_secret = client_secret
|
|
79
|
+
else:
|
|
80
|
+
raise ValueError(
|
|
81
|
+
"Um segredo de cliente inválido foi utilizado. Defina a chave"
|
|
82
|
+
" por meio do parâmetro 'client_secret' ou pelo variável de"
|
|
83
|
+
"ambiente 'BB_API_CLIENT_SECRET'."
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
base64_credentials = (
|
|
87
|
+
base64
|
|
88
|
+
.b64encode(
|
|
89
|
+
f"{client_id}:{client_secret}".encode("utf-8")
|
|
90
|
+
)
|
|
91
|
+
.decode("utf-8")
|
|
92
|
+
)
|
|
93
|
+
self._base64_credentials = base64_credentials
|
|
94
|
+
self._last_access_token_request_timestamp = None
|
|
95
|
+
|
|
96
|
+
def _check_and_update_access_token(self) -> str:
|
|
97
|
+
now = datetime.datetime.now()
|
|
98
|
+
|
|
99
|
+
is_first_access_token_request = self._last_access_token_request_timestamp is None
|
|
100
|
+
|
|
101
|
+
if is_first_access_token_request:
|
|
102
|
+
diff_between_requests = datetime.timedelta(0)
|
|
103
|
+
else:
|
|
104
|
+
diff_between_requests = now - self._last_access_token_request_timestamp
|
|
105
|
+
|
|
106
|
+
is_access_token_expired = diff_between_requests > common._time_between_access_token_requests
|
|
107
|
+
|
|
108
|
+
if is_first_access_token_request or is_access_token_expired:
|
|
109
|
+
res = requests.request(
|
|
110
|
+
"POST",
|
|
111
|
+
f"{self._oauth_domain}/oauth/token",
|
|
112
|
+
headers={
|
|
113
|
+
"Content-Type": "application/x-www-form-urlencoded",
|
|
114
|
+
"Authorization": f"Basic {self._base64_credentials}",
|
|
115
|
+
},
|
|
116
|
+
data={
|
|
117
|
+
"grant_type": "client_credentials",
|
|
118
|
+
"scope": "accountability.statements",
|
|
119
|
+
},
|
|
120
|
+
)
|
|
121
|
+
|
|
122
|
+
if res.status_code != 200:
|
|
123
|
+
raise Exception(
|
|
124
|
+
"Não foi possível adquirir as novas credenciais de acesso."
|
|
125
|
+
)
|
|
126
|
+
|
|
127
|
+
res = res.json()
|
|
128
|
+
self._access_token = res["access_token"]
|
|
129
|
+
self._last_access_token_request_timestamp = datetime.datetime.now()
|
|
130
|
+
|
|
131
|
+
def _get_access_token(self) -> str:
|
|
132
|
+
self._check_and_update_access_token()
|
|
133
|
+
return self._access_token
|
|
134
|
+
|
|
135
|
+
def get_agencias_proximas(
|
|
136
|
+
self,
|
|
137
|
+
cnpj: str,
|
|
138
|
+
cep: str,
|
|
139
|
+
) -> pd.DataFrame:
|
|
140
|
+
access_token = self._get_access_token()
|
|
141
|
+
cnpj = common._handle_numeric_string_with_symbols(cnpj)
|
|
142
|
+
cep = common._handle_numeric_string_with_symbols(cep)
|
|
143
|
+
|
|
144
|
+
res = requests.request(
|
|
145
|
+
"GET",
|
|
146
|
+
f"{self._api_domain}/accountability/v3/agencias-proximas",
|
|
147
|
+
headers=common._get_headers(access_token),
|
|
148
|
+
params={
|
|
149
|
+
"gw-dev-app-key": self._app_key,
|
|
150
|
+
"cnpj": cnpj,
|
|
151
|
+
"cep": cep,
|
|
152
|
+
},
|
|
153
|
+
)
|
|
154
|
+
|
|
155
|
+
if res.status_code != 200:
|
|
156
|
+
raise Exception(
|
|
157
|
+
"Não foi possível listar as categorias do programa de governo."
|
|
158
|
+
)
|
|
159
|
+
|
|
160
|
+
res = res.json()
|
|
161
|
+
return common._handle_results(
|
|
162
|
+
res,
|
|
163
|
+
main_list="listaAgencia",
|
|
164
|
+
insertables=[
|
|
165
|
+
"quantidadeAgencia",
|
|
166
|
+
],
|
|
167
|
+
rename_dict={
|
|
168
|
+
"quantidadeAgencia": "Quantidade Agências",
|
|
169
|
+
"codigo": "Código",
|
|
170
|
+
"digito": "Dígito",
|
|
171
|
+
"nome": "Nome",
|
|
172
|
+
"cep": "CEP",
|
|
173
|
+
"logradouro": "Logradouro",
|
|
174
|
+
"bairro": "Bairro",
|
|
175
|
+
"municipio": "Munícipio",
|
|
176
|
+
"siglaUF": "Sigla UF",
|
|
177
|
+
"sugerida": "Sugerida",
|
|
178
|
+
},
|
|
179
|
+
)
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
class AccountabilityV3RepasseAPI(_AccountabilityV3BaseAPI):
|
|
183
|
+
"""Representa um encapsulador da API Accountability V3 do Banco do Brasil
|
|
184
|
+
para os órgaos de repasse.
|
|
185
|
+
|
|
186
|
+
Esse encapsulador já reutiliza o token de acesso por 10 minutos e gera um
|
|
187
|
+
novo sempre que o atual estiver expirado.
|
|
188
|
+
"""
|
|
189
|
+
|
|
190
|
+
def __init__(
|
|
191
|
+
self,
|
|
192
|
+
ambiente: common.Ambiente = common.Ambiente.HOMOLOGACAO,
|
|
193
|
+
app_key: str = None,
|
|
194
|
+
client_id: str = None,
|
|
195
|
+
client_secret: str = None,
|
|
196
|
+
):
|
|
197
|
+
super().__init__(
|
|
198
|
+
ambiente,
|
|
199
|
+
app_key,
|
|
200
|
+
client_id,
|
|
201
|
+
client_secret,
|
|
202
|
+
)
|
|
203
|
+
|
|
204
|
+
def get_extrato_programa_governo(
|
|
205
|
+
self,
|
|
206
|
+
branch_code: int,
|
|
207
|
+
account_number: int,
|
|
208
|
+
start_date: common.DateLike,
|
|
209
|
+
end_date: common.DateLike,
|
|
210
|
+
) -> pd.DataFrame:
|
|
211
|
+
access_token = self._get_access_token()
|
|
212
|
+
start_date = common._handle_dates(start_date)
|
|
213
|
+
end_date = common._handle_dates(end_date)
|
|
214
|
+
|
|
215
|
+
res = requests.request(
|
|
216
|
+
"GET",
|
|
217
|
+
f"{self._api_domain}/accountability/v3/statements/{branch_code}-{account_number}",
|
|
218
|
+
headers=common._get_headers(access_token),
|
|
219
|
+
params={
|
|
220
|
+
"gw-dev-app-key": self._app_key,
|
|
221
|
+
"startDate": start_date,
|
|
222
|
+
"endDate": end_date,
|
|
223
|
+
},
|
|
224
|
+
)
|
|
225
|
+
|
|
226
|
+
if res.status_code != 200:
|
|
227
|
+
raise Exception(
|
|
228
|
+
"Não foi possível reaver o extrato do órgão repassador."
|
|
229
|
+
)
|
|
230
|
+
|
|
231
|
+
res = res.json()
|
|
232
|
+
|
|
233
|
+
return common._handle_results(
|
|
234
|
+
res,
|
|
235
|
+
main_list="transactions",
|
|
236
|
+
insertables=[
|
|
237
|
+
"governmentProgramCode",
|
|
238
|
+
"governmentProgramName",
|
|
239
|
+
"governmentSubProgramCode",
|
|
240
|
+
"governmentSubProgramName",
|
|
241
|
+
],
|
|
242
|
+
explodeables=[
|
|
243
|
+
"expensesDocuments",
|
|
244
|
+
],
|
|
245
|
+
rename_dict={
|
|
246
|
+
"governmentProgramCode": "Código Programa Governo",
|
|
247
|
+
"governmentProgramName": "Nome Programa Governo",
|
|
248
|
+
"governmentSubProgramCode": "Código SubPrograma Governo",
|
|
249
|
+
"governmentSubProgramName": "Nome SubPrograma Governo",
|
|
250
|
+
"id": "ID Transação",
|
|
251
|
+
"bookingDate": "Data Agendamento",
|
|
252
|
+
"orderIndex": "Índice Ordem",
|
|
253
|
+
"valueDate": "Data Valor",
|
|
254
|
+
"referenceNumber": "Número Referência",
|
|
255
|
+
"value": "Valor",
|
|
256
|
+
"accountBalance": "Saldo Conta",
|
|
257
|
+
"descriptionCode": "Código Descrição",
|
|
258
|
+
"descriptionName": "Nome Descrição",
|
|
259
|
+
"descriptionBatchNumber": "Número Lote Descrição",
|
|
260
|
+
"creditDebitIndicator": "Indicador Crédito Débito",
|
|
261
|
+
"beneficiaryBankIdentifierCode": "Código Identificador Banco Beneficiário",
|
|
262
|
+
"beneficiaryBranchCode": "Código Agência Beneficiário",
|
|
263
|
+
"beneficiaryAccountNumber": "Número Conta Beneficiário",
|
|
264
|
+
"beneficiaryPersonType": "Tipo Pessoa Beneficiário",
|
|
265
|
+
"beneficiaryDocumentId": "ID Documento Beneficiário",
|
|
266
|
+
"beneficiaryName": "Nome Beneficiário",
|
|
267
|
+
"pendingExpenseConciliation": "Conciliação Despesa Pendente",
|
|
268
|
+
"attachedExpenseDocumentIndicator": "Indicador Anexo Documento Despesa",
|
|
269
|
+
"expenseCategoryCode": "Código Categoria Despesa",
|
|
270
|
+
"expenseIdentificationStatus": "Status Identificação Despesa",
|
|
271
|
+
"subTransactionQuantity": "Quantidade Subtransações",
|
|
272
|
+
"bankOrderRuleCode": "Código Ordem Pagamento Banco",
|
|
273
|
+
"bankOrderPurposeCode": "Código Finalidade Ordem Banco",
|
|
274
|
+
"bankOrderPurposeDescription": "Descrição Finalidade Ordem Banco",
|
|
275
|
+
"expenseSequentialNumber": "Número Sequencial Despesa",
|
|
276
|
+
"expensesCategory": "Categoria Despesa",
|
|
277
|
+
"expensesDocuments": "ID Documento Despesa",
|
|
278
|
+
},
|
|
279
|
+
)
|
|
280
|
+
|
|
281
|
+
def get_documento_despesas_programa_governo(
|
|
282
|
+
self,
|
|
283
|
+
branch_code: int,
|
|
284
|
+
account_number: int,
|
|
285
|
+
transaction_id: int,
|
|
286
|
+
document_id: int,
|
|
287
|
+
booking_date: common.DateLike,
|
|
288
|
+
) -> Tuple[pd.DataFrame, pd.DataFrame, pd.DataFrame]:
|
|
289
|
+
access_token = self._get_access_token()
|
|
290
|
+
booking_date = common._handle_dates(booking_date)
|
|
291
|
+
|
|
292
|
+
res = requests.request(
|
|
293
|
+
"GET",
|
|
294
|
+
f"{self._api_domain}/accountability/v3/expenses/{branch_code}-{account_number}/transactions/{transaction_id}/documents/{document_id}",
|
|
295
|
+
headers=common._get_headers(access_token),
|
|
296
|
+
params={
|
|
297
|
+
"gw-dev-app-key": self._app_key,
|
|
298
|
+
"bookingDate": booking_date,
|
|
299
|
+
},
|
|
300
|
+
)
|
|
301
|
+
|
|
302
|
+
if res.status_code != 200:
|
|
303
|
+
raise Exception(
|
|
304
|
+
"Não foi possível reaver o extrato do órgão repassador."
|
|
305
|
+
)
|
|
306
|
+
|
|
307
|
+
res = res.json()
|
|
308
|
+
|
|
309
|
+
df_issuer = common._handle_results(
|
|
310
|
+
res["issuer"],
|
|
311
|
+
rename_dict={
|
|
312
|
+
"corporateTaxPayerRegistry": "CNPJ",
|
|
313
|
+
"individualTaxPayerRegistry": "CPF",
|
|
314
|
+
"stateRegistrationNumber": "RG",
|
|
315
|
+
"legalName": "Nome Legal",
|
|
316
|
+
"tradeName": "Nome Social",
|
|
317
|
+
"countryName": "Nacionalidade",
|
|
318
|
+
"stateAbbreviation": "UF",
|
|
319
|
+
"cityName": "Cidade",
|
|
320
|
+
"districtName": "Bairro",
|
|
321
|
+
"additionalAddressInformation": "Endereço",
|
|
322
|
+
"postalCode": "CEP",
|
|
323
|
+
"phoneNumber": "Telefone",
|
|
324
|
+
},
|
|
325
|
+
)
|
|
326
|
+
|
|
327
|
+
df_recipient = common._handle_results(
|
|
328
|
+
res["recipient"],
|
|
329
|
+
rename_dict={
|
|
330
|
+
"corporateTaxPayerRegistry": "CNPJ",
|
|
331
|
+
"individualTaxPayerRegistry": "CPF",
|
|
332
|
+
"stateRegistrationNumber": "RG",
|
|
333
|
+
"legalName": "Nome Legal",
|
|
334
|
+
"tradeName": "Nome Social",
|
|
335
|
+
"countryName": "Nacionalidade",
|
|
336
|
+
"stateAbbreviation": "UF",
|
|
337
|
+
"cityName": "Cidade",
|
|
338
|
+
"districtName": "Bairro",
|
|
339
|
+
"additionalAddressInformation": "Endereço",
|
|
340
|
+
"postalCode": "CEP",
|
|
341
|
+
"phoneNumber": "Telefone",
|
|
342
|
+
"presenceTypeCode": "Código Tipo Presença",
|
|
343
|
+
"typeConsumerCode": "Código Tipo Consumidor",
|
|
344
|
+
},
|
|
345
|
+
)
|
|
346
|
+
|
|
347
|
+
df_document = common._handle_results(
|
|
348
|
+
res["expenseDocument"],
|
|
349
|
+
main_list="items",
|
|
350
|
+
insertables=[
|
|
351
|
+
"accessKey",
|
|
352
|
+
"receiptTypeCode",
|
|
353
|
+
"typeCode",
|
|
354
|
+
"serialCode",
|
|
355
|
+
"number",
|
|
356
|
+
"issueDate",
|
|
357
|
+
"movementDate",
|
|
358
|
+
"itemDeliveryDate",
|
|
359
|
+
"value",
|
|
360
|
+
"operationTypeName",
|
|
361
|
+
"operation",
|
|
362
|
+
"paymentMethod",
|
|
363
|
+
"digitalSignatureCode",
|
|
364
|
+
"pronafAbilityRegistration",
|
|
365
|
+
"timestamp",
|
|
366
|
+
"userId",
|
|
367
|
+
"discountValue",
|
|
368
|
+
"totalDiscountValue",
|
|
369
|
+
"realeaseInstrumentCode",
|
|
370
|
+
"realeaseInstrumentName",
|
|
371
|
+
"realeaseInstrumentDate",
|
|
372
|
+
"additionalInformation",
|
|
373
|
+
],
|
|
374
|
+
rename_dict={
|
|
375
|
+
"accessKey": "Chave Acesso",
|
|
376
|
+
"receiptTypeCode": "Código Tipo Recibo",
|
|
377
|
+
"typeCode": "Código Tipo",
|
|
378
|
+
"serialCode": "Código Série",
|
|
379
|
+
"number": "Número",
|
|
380
|
+
"issueDate": "Data Emissão",
|
|
381
|
+
"movementDate": "Data Movimentação",
|
|
382
|
+
"itemDeliveryDate": "Data Entrega",
|
|
383
|
+
"value": "Valor",
|
|
384
|
+
"operationTypeName": "Nome Tipo Operação",
|
|
385
|
+
"operation": "Operação",
|
|
386
|
+
"paymentMethod": "Método Pagamento",
|
|
387
|
+
"digitalSignatureCode": "Código Assinatura Digital",
|
|
388
|
+
"pronafAbilityRegistration": "Registro Habilidade Pronaf",
|
|
389
|
+
"timestamp": "Momento",
|
|
390
|
+
"userId": "ID Usuário",
|
|
391
|
+
"discountValue": "Valor Desconto",
|
|
392
|
+
"totalDiscountValue": "Valor Total Desconto",
|
|
393
|
+
"realeaseInstrumentCode": "Código Liberação de Instrumento",
|
|
394
|
+
"realeaseInstrumentName": "Nome Liberação Instrumento",
|
|
395
|
+
"realeaseInstrumentDate": "Data Liberação Instrumento",
|
|
396
|
+
"additionalInformation": "Informação Adicional",
|
|
397
|
+
"description": "Descrição Item",
|
|
398
|
+
"quantity": "Quantidade Item",
|
|
399
|
+
"metric": "Métrica Item",
|
|
400
|
+
"unitValue": "Valor Unitário Item",
|
|
401
|
+
"totalValue": "Valor Total Item",
|
|
402
|
+
"mercosurCommonNameId": "ID Nome Comum Mercosul",
|
|
403
|
+
"itemDiscountValue": "Valor Desconto Item",
|
|
404
|
+
},
|
|
405
|
+
)
|
|
406
|
+
|
|
407
|
+
return (
|
|
408
|
+
df_issuer,
|
|
409
|
+
df_recipient,
|
|
410
|
+
df_document,
|
|
411
|
+
)
|
|
412
|
+
|
|
413
|
+
def get_documento_despesas_prestacao_contas(
|
|
414
|
+
self,
|
|
415
|
+
branch_code: int,
|
|
416
|
+
account_number: int,
|
|
417
|
+
transaction_id: int,
|
|
418
|
+
subtransaction_id: int,
|
|
419
|
+
document_id: int,
|
|
420
|
+
booking_date: common.DateLike,
|
|
421
|
+
) -> Tuple[pd.DataFrame, pd.DataFrame, pd.DataFrame]:
|
|
422
|
+
access_token = self._get_access_token()
|
|
423
|
+
booking_date = common._handle_dates(booking_date)
|
|
424
|
+
|
|
425
|
+
res = requests.request(
|
|
426
|
+
"GET",
|
|
427
|
+
f"{self._api_domain}/accountability/v3/expenses/{branch_code}-{account_number}/transactions/{transaction_id}/subTransactions/{subtransaction_id}/documents/{document_id}",
|
|
428
|
+
headers=common._get_headers(access_token),
|
|
429
|
+
params={
|
|
430
|
+
"gw-dev-app-key": self._app_key,
|
|
431
|
+
"bookingDate": booking_date,
|
|
432
|
+
},
|
|
433
|
+
)
|
|
434
|
+
|
|
435
|
+
if res.status_code != 200:
|
|
436
|
+
raise Exception(
|
|
437
|
+
"Não foi possível reaver o extrato do órgão repassador."
|
|
438
|
+
)
|
|
439
|
+
|
|
440
|
+
res = res.json()
|
|
441
|
+
|
|
442
|
+
df_issuer = common._handle_results(
|
|
443
|
+
res["issuer"],
|
|
444
|
+
rename_dict={
|
|
445
|
+
"corporateTaxPayerRegistry": "CNPJ",
|
|
446
|
+
"individualTaxPayerRegistry": "CPF",
|
|
447
|
+
"stateRegistrationNumber": "RG",
|
|
448
|
+
"legalName": "Nome Legal",
|
|
449
|
+
"tradeName": "Nome Social",
|
|
450
|
+
"countryName": "Nacionalidade",
|
|
451
|
+
"stateAbbreviation": "UF",
|
|
452
|
+
"cityName": "Cidade",
|
|
453
|
+
"districtName": "Bairro",
|
|
454
|
+
"additionalAddressInformation": "Endereço",
|
|
455
|
+
"postalCode": "CEP",
|
|
456
|
+
"phoneNumber": "Telefone",
|
|
457
|
+
},
|
|
458
|
+
)
|
|
459
|
+
|
|
460
|
+
df_recipient = common._handle_results(
|
|
461
|
+
res["recipient"],
|
|
462
|
+
rename_dict={
|
|
463
|
+
"corporateTaxPayerRegistry": "CNPJ",
|
|
464
|
+
"individualTaxPayerRegistry": "CPF",
|
|
465
|
+
"stateRegistrationNumber": "RG",
|
|
466
|
+
"legalName": "Nome Legal",
|
|
467
|
+
"tradeName": "Nome Social",
|
|
468
|
+
"countryName": "Nacionalidade",
|
|
469
|
+
"stateAbbreviation": "UF",
|
|
470
|
+
"cityName": "Cidade",
|
|
471
|
+
"districtName": "Bairro",
|
|
472
|
+
"additionalAddressInformation": "Endereço",
|
|
473
|
+
"postalCode": "CEP",
|
|
474
|
+
"phoneNumber": "Telefone",
|
|
475
|
+
"presenceTypeCode": "Código Tipo Presença",
|
|
476
|
+
"typeConsumerCode": "Código Tipo Consumidor",
|
|
477
|
+
},
|
|
478
|
+
)
|
|
479
|
+
|
|
480
|
+
df_document = common._handle_results(
|
|
481
|
+
res["expenseDocument"],
|
|
482
|
+
main_list="items",
|
|
483
|
+
insertables=[
|
|
484
|
+
"accessKey",
|
|
485
|
+
"receiptTypeCode",
|
|
486
|
+
"typeCode",
|
|
487
|
+
"serialCode",
|
|
488
|
+
"number",
|
|
489
|
+
"issueDate",
|
|
490
|
+
"movementDate",
|
|
491
|
+
"itemDeliveryDate",
|
|
492
|
+
"value",
|
|
493
|
+
"operationTypeName",
|
|
494
|
+
"operation",
|
|
495
|
+
"paymentMethod",
|
|
496
|
+
"digitalSignatureCode",
|
|
497
|
+
"pronafAbilityRegistration",
|
|
498
|
+
"timestamp",
|
|
499
|
+
"userId",
|
|
500
|
+
"discountValue",
|
|
501
|
+
"totalDiscountValue",
|
|
502
|
+
"realeaseInstrumentCode",
|
|
503
|
+
"realeaseInstrumentName",
|
|
504
|
+
"realeaseInstrumentDate",
|
|
505
|
+
"additionalInformation",
|
|
506
|
+
],
|
|
507
|
+
rename_dict={
|
|
508
|
+
"accessKey": "Chave Acesso",
|
|
509
|
+
"receiptTypeCode": "Código Tipo Recibo",
|
|
510
|
+
"typeCode": "Código Tipo",
|
|
511
|
+
"serialCode": "Código Série",
|
|
512
|
+
"number": "Número",
|
|
513
|
+
"issueDate": "Data Emissão",
|
|
514
|
+
"movementDate": "Data Movimentação",
|
|
515
|
+
"itemDeliveryDate": "Data Entrega",
|
|
516
|
+
"value": "Valor",
|
|
517
|
+
"operationTypeName": "Nome Tipo Operação",
|
|
518
|
+
"operation": "Operação",
|
|
519
|
+
"paymentMethod": "Método Pagamento",
|
|
520
|
+
"digitalSignatureCode": "Código Assinatura Digital",
|
|
521
|
+
"pronafAbilityRegistration": "Registro Habilidade Pronaf",
|
|
522
|
+
"timestamp": "Momento",
|
|
523
|
+
"userId": "ID Usuário",
|
|
524
|
+
"discountValue": "Valor Desconto",
|
|
525
|
+
"totalDiscountValue": "Valor Total Desconto",
|
|
526
|
+
"realeaseInstrumentCode": "Código Liberação de Instrumento",
|
|
527
|
+
"realeaseInstrumentName": "Nome Liberação Instrumento",
|
|
528
|
+
"realeaseInstrumentDate": "Data Liberação Instrumento",
|
|
529
|
+
"additionalInformation": "Informação Adicional",
|
|
530
|
+
"description": "Descrição Item",
|
|
531
|
+
"quantity": "Quantidade Item",
|
|
532
|
+
"metric": "Métrica Item",
|
|
533
|
+
"unitValue": "Valor Unitário Item",
|
|
534
|
+
"totalValue": "Valor Total Item",
|
|
535
|
+
"mercosurCommonNameId": "ID Nome Comum Mercosul",
|
|
536
|
+
"itemDiscountValue": "Valor Desconto Item",
|
|
537
|
+
},
|
|
538
|
+
)
|
|
539
|
+
|
|
540
|
+
return (
|
|
541
|
+
df_issuer,
|
|
542
|
+
df_recipient,
|
|
543
|
+
df_document,
|
|
544
|
+
)
|
|
545
|
+
|
|
546
|
+
def get_extrato_subtransacoes_programa_governo(
|
|
547
|
+
self,
|
|
548
|
+
branch_code: int,
|
|
549
|
+
account_number: int,
|
|
550
|
+
id: int,
|
|
551
|
+
id_subtransaction: str = None,
|
|
552
|
+
) -> pd.DataFrame:
|
|
553
|
+
access_token = self._get_access_token()
|
|
554
|
+
|
|
555
|
+
params = {
|
|
556
|
+
"gw-dev-app-key": self._app_key,
|
|
557
|
+
}
|
|
558
|
+
|
|
559
|
+
if id_subtransaction is not None:
|
|
560
|
+
params["idSubtransaction"] = id_subtransaction
|
|
561
|
+
|
|
562
|
+
res = requests.request(
|
|
563
|
+
"GET",
|
|
564
|
+
f"{self._api_domain}/accountability/v3/statements/{branch_code}-{account_number}/debits/{id}/subtransactions",
|
|
565
|
+
headers=common._get_headers(access_token),
|
|
566
|
+
params=params,
|
|
567
|
+
)
|
|
568
|
+
|
|
569
|
+
if res.status_code != 200:
|
|
570
|
+
raise Exception(
|
|
571
|
+
"Não foi possível reaver o extrato do órgão repassador."
|
|
572
|
+
)
|
|
573
|
+
|
|
574
|
+
res = res.json()
|
|
575
|
+
|
|
576
|
+
return common._handle_results(
|
|
577
|
+
res,
|
|
578
|
+
main_list="subtransactions",
|
|
579
|
+
insertables=[
|
|
580
|
+
"governmentProgramCode",
|
|
581
|
+
"governmentProgramName",
|
|
582
|
+
"governmentSubProgramCode",
|
|
583
|
+
"governmentSubProgramName",
|
|
584
|
+
],
|
|
585
|
+
explodeables=[
|
|
586
|
+
"expensesCategory",
|
|
587
|
+
"expensesDocuments",
|
|
588
|
+
],
|
|
589
|
+
rename_dict={
|
|
590
|
+
"governmentProgramCode": "Código Programa Governo",
|
|
591
|
+
"governmentProgramName": "Nome Programa Governo",
|
|
592
|
+
"governmentSubProgramCode": "Código SubPrograma Governo",
|
|
593
|
+
"governmentSubProgramName": "Nome SubPrograma Governo",
|
|
594
|
+
"id": "ID",
|
|
595
|
+
"codeSubtransactionState": "Estado Código Subtransação",
|
|
596
|
+
"paymentState": "Estado Pagamento",
|
|
597
|
+
"paymentDate": "Data Pagamento",
|
|
598
|
+
"value": "Valor",
|
|
599
|
+
"beneficiaryBankIdentifierCode": "Código Identificador Banco Beneficiário",
|
|
600
|
+
"beneficiaryBranchCode": "Código Agência Beneficiário",
|
|
601
|
+
"beneficiaryAccountNumber": "Número Conta Beneficiário",
|
|
602
|
+
"beneficiaryPersonType": "Tipo Pessoa Beneficiário",
|
|
603
|
+
"beneficiaryDocumentId": "ID Documento Beneficiário",
|
|
604
|
+
"beneficiaryName": "Nome Beneficiário",
|
|
605
|
+
"attachedExpenseDocumentIndicator": "Indicador Anexo Documento Despesa",
|
|
606
|
+
"expenseCategoryCode": "Código Categoria Despesa",
|
|
607
|
+
"subtransactionAccountabilityIndicator": "Indicador Contabilidade Subtransação",
|
|
608
|
+
"subtransactionAccountabilityName": "Nome Contabilidade Subtransação",
|
|
609
|
+
"bankOrderPurposeCode": "Código Finalidade Ordem Banco",
|
|
610
|
+
"bankOrderRuleCode": "Código Ordem Pagamento Banco",
|
|
611
|
+
"bankOrderPurposeDescription": "Descrição Finalidade Ordem Banco",
|
|
612
|
+
"expenseSequentialNumber": "Número Sequencial Despesa",
|
|
613
|
+
"code": "Código Categoria Despesa",
|
|
614
|
+
"parentCode": "Código Pai Categoria Despesa",
|
|
615
|
+
"name": "Nome Categoria Despesa",
|
|
616
|
+
"expensesDocuments": "Documentos Despesa",
|
|
617
|
+
},
|
|
618
|
+
)
|
|
619
|
+
|
|
620
|
+
def get_extrato_fundos_investimento(
|
|
621
|
+
self,
|
|
622
|
+
agencia: int,
|
|
623
|
+
conta_corrente: int,
|
|
624
|
+
fundo_investimento_id: int,
|
|
625
|
+
mes: int,
|
|
626
|
+
ano: int,
|
|
627
|
+
) -> pd.DataFrame:
|
|
628
|
+
access_token = self._get_access_token()
|
|
629
|
+
|
|
630
|
+
res = requests.request(
|
|
631
|
+
"GET",
|
|
632
|
+
f"{self._api_domain}/accountability/v3/extratos/{agencia}-{conta_corrente}/fundos-investimentos/{fundo_investimento_id}",
|
|
633
|
+
headers=common._get_headers(access_token),
|
|
634
|
+
params={
|
|
635
|
+
"mes": mes,
|
|
636
|
+
"ano": ano,
|
|
637
|
+
"gw-dev-app-key": self._app_key,
|
|
638
|
+
},
|
|
639
|
+
)
|
|
640
|
+
|
|
641
|
+
if res.status_code != 200:
|
|
642
|
+
raise Exception(
|
|
643
|
+
"Não foi possível listar as categorias do programa de governo."
|
|
644
|
+
)
|
|
645
|
+
|
|
646
|
+
res = res.json()
|
|
647
|
+
res["extrato"]["valorCotaExtrato"] = res["extrato"].pop("valorCota")
|
|
648
|
+
df = common._handle_results(
|
|
649
|
+
res["extrato"],
|
|
650
|
+
main_list="listaLancamentosExtrato",
|
|
651
|
+
insertables=[
|
|
652
|
+
"numeroAgenciaRecebedora",
|
|
653
|
+
"digitoVerificadorContaRecebedora",
|
|
654
|
+
"numeroContaCorrenteRecebedora",
|
|
655
|
+
"numeroDigitoVerificadorContaCorrenteRecebedora",
|
|
656
|
+
"nomeClienteRecebedor",
|
|
657
|
+
"nomeFundoInvestimento",
|
|
658
|
+
"CNPJFundoInvestimento",
|
|
659
|
+
"valorCotaExtrato",
|
|
660
|
+
"dataAfericaoValorCota",
|
|
661
|
+
"ultimaCotacaoCota",
|
|
662
|
+
"dataUltimaCotacaoCota",
|
|
663
|
+
"sinalRentabilidadeMes",
|
|
664
|
+
"valorRentabilidadeMes",
|
|
665
|
+
"sinalRentabilidadeAno",
|
|
666
|
+
"valorRentabilidadeAno",
|
|
667
|
+
"sinalRentabilidadeResgateTotal",
|
|
668
|
+
"valorRentabilidadeResgateTotal",
|
|
669
|
+
"valorDisponivelResgate",
|
|
670
|
+
"valorCarenciaResgate",
|
|
671
|
+
"valorIRPrevisto",
|
|
672
|
+
"percentualIRPrevisto",
|
|
673
|
+
"valorIRComplementarPrevisto",
|
|
674
|
+
"valorIOFPrevisto",
|
|
675
|
+
"valorTaxaSaida",
|
|
676
|
+
"valorBonusDesempenho",
|
|
677
|
+
"valorBloqueado",
|
|
678
|
+
"valorAplicado",
|
|
679
|
+
"valorResgate",
|
|
680
|
+
"valorSaldoAnterior",
|
|
681
|
+
"quantidadeCotaAnterior",
|
|
682
|
+
"dataSaldoAnterior",
|
|
683
|
+
"valorTotalAplicadoPeriodo",
|
|
684
|
+
"valorTotalResgatadoPeriodo",
|
|
685
|
+
"sinalRendimentoBrutoPeriodo",
|
|
686
|
+
"valorRendimentoBrutoPeriodo",
|
|
687
|
+
"valorTotalIRPeriodo",
|
|
688
|
+
"valorTotalIOFPeriodo",
|
|
689
|
+
"valorTotalTaxaSaidaPeriodo",
|
|
690
|
+
"valorTotalBonusDesempenhoPeriodo",
|
|
691
|
+
"sinalRendimentoLiquido",
|
|
692
|
+
"valorRendimentoLiquido",
|
|
693
|
+
"valorSaldoMesAnterior",
|
|
694
|
+
"quantidadeCotaMesAnterior",
|
|
695
|
+
"dataSaldoMesAnterior",
|
|
696
|
+
"numeroLancamento",
|
|
697
|
+
],
|
|
698
|
+
rename_dict={
|
|
699
|
+
"numeroAgenciaRecebedora": "Número Agência Recebedora",
|
|
700
|
+
"digitoVerificadorContaRecebedora": "Dígito Verificador Conta Recebedora",
|
|
701
|
+
"numeroContaCorrenteRecebedora": "Número Conta Corrente Recebedora",
|
|
702
|
+
"numeroDigitoVerificadorContaCorrenteRecebedora": "Número Dígito Verificador Conta Corrente Recebedora",
|
|
703
|
+
"nomeClienteRecebedor": "Nome Cliente Recebedor",
|
|
704
|
+
"nomeFundoInvestimento": "Nome Fundo Investimento",
|
|
705
|
+
"CNPJFundoInvestimento": " CNPJ Fundo Investimento",
|
|
706
|
+
"valorCotaExtrato": "Valor Cota Extrato",
|
|
707
|
+
"dataAfericaoValorCota": "Data Afericão Valor Cota",
|
|
708
|
+
"ultimaCotacaoCota": "Última Cotação Cota",
|
|
709
|
+
"dataUltimaCotacaoCota": "Data Última Cotação Cota",
|
|
710
|
+
"sinalRentabilidadeMes": "Sinal Rentabilidade Mês",
|
|
711
|
+
"valorRentabilidadeMes": "Valor Rentabilidade Mês",
|
|
712
|
+
"sinalRentabilidadeAno": "Sinal Rentabilidade Ano",
|
|
713
|
+
"valorRentabilidadeAno": "Valor Rentabilidade Ano",
|
|
714
|
+
"sinalRentabilidadeResgateTotal": "Sinal Rentabilidade Resgate Total",
|
|
715
|
+
"valorRentabilidadeResgateTotal": "Valor Rentabilidade Resgate Total",
|
|
716
|
+
"valorDisponivelResgate": "Valor Disponível Resgate",
|
|
717
|
+
"valorCarenciaResgate": "Valor Carência Resgate",
|
|
718
|
+
"valorIRPrevisto": "Valor IR Previsto",
|
|
719
|
+
"percentualIRPrevisto": "Percentual IR Previsto",
|
|
720
|
+
"valorIRComplementarPrevisto": "Valor IR Complementar Previsto",
|
|
721
|
+
"valorIOFPrevisto": "Valor IOF Previsto",
|
|
722
|
+
"valorTaxaSaida": "Valor Taxa Saída",
|
|
723
|
+
"valorBonusDesempenho": "Valor Bônus Desempenho",
|
|
724
|
+
"valorBloqueado": "Valor Bloqueado",
|
|
725
|
+
"valorAplicado": "Valor Aplicado",
|
|
726
|
+
"valorResgate": "Valor Resgate",
|
|
727
|
+
"valorSaldoAnterior": "Valor Saldo Anterior",
|
|
728
|
+
"quantidadeCotaAnterior": "Quantidade Cota Anterior",
|
|
729
|
+
"dataSaldoAnterior": "Data Saldo Anterior",
|
|
730
|
+
"valorTotalAplicadoPeriodo": "Valor Total Aplicado Período",
|
|
731
|
+
"valorTotalResgatadoPeriodo": "Valor Total Resgatado Período",
|
|
732
|
+
"sinalRendimentoBrutoPeriodo": "Sinal Rendimento Bruto Período",
|
|
733
|
+
"valorRendimentoBrutoPeriodo": "Valor Rendimento Bruto Período",
|
|
734
|
+
"valorTotalIRPeriodo": "Valor Total IR Período",
|
|
735
|
+
"valorTotalIOFPeriodo": "Valor Total IOF Período",
|
|
736
|
+
"valorTotalTaxaSaidaPeriodo": "Valor Total Taxa Saída Período",
|
|
737
|
+
"valorTotalBonusDesempenhoPeriodo": "Valor Total Bônus Desempenho Período",
|
|
738
|
+
"sinalRendimentoLiquido": "Sinal Rendimento Líquido",
|
|
739
|
+
"valorRendimentoLiquido": "Valor Rendimento Líquido",
|
|
740
|
+
"valorSaldoMesAnterior": "Valor Saldo Mês Anterior",
|
|
741
|
+
"quantidadeCotaMesAnterior": "Quantidade Cota Mês Anterior",
|
|
742
|
+
"dataSaldoMesAnterior": "Data Saldo Mês Anterior",
|
|
743
|
+
"numeroLancamento": "Número Lançamento",
|
|
744
|
+
"dataLancamento": "Data Lançamento",
|
|
745
|
+
"descricao": "Descrição",
|
|
746
|
+
"valorLancamento": "Valor Lançamento",
|
|
747
|
+
"valorIR": "Valor IR",
|
|
748
|
+
"valorPrejuizo": "Valor Prejuízo",
|
|
749
|
+
"valorIOF": "Valor IOF",
|
|
750
|
+
"quantidadeCota": "Quantidade Cota",
|
|
751
|
+
"valorCota": "Valor Cota Lançamento",
|
|
752
|
+
"saldoCotas": "Saldo Cotas",
|
|
753
|
+
"valorBaseCalculoIR": "Valor Base Cálculo IR",
|
|
754
|
+
"numeroDocumentoLancamento": "Número Documento Lançamento",
|
|
755
|
+
},
|
|
756
|
+
)
|
|
757
|
+
|
|
758
|
+
df["Código Programa Governo"] = res["codigoProgramaGoverno"]
|
|
759
|
+
df["Nome Programa Governo"] = res["nomeProgramaGoverno"]
|
|
760
|
+
df["Código SubPrograma Governo"] = res["codigoSubProgramaGoverno"]
|
|
761
|
+
df["Nome SubPrograma Governo"] = res["nomeSubProgramaGoverno"]
|
|
762
|
+
|
|
763
|
+
return df
|
|
764
|
+
|
|
765
|
+
def get_extrato_poupanca(
|
|
766
|
+
self,
|
|
767
|
+
agencia: int,
|
|
768
|
+
conta_corrente: int,
|
|
769
|
+
variacao_poupanca: int,
|
|
770
|
+
mes: int,
|
|
771
|
+
ano: int,
|
|
772
|
+
) -> pd.DataFrame:
|
|
773
|
+
access_token = self._get_access_token()
|
|
774
|
+
|
|
775
|
+
res = requests.request(
|
|
776
|
+
"GET",
|
|
777
|
+
f"{self._api_domain}/accountability/v3/extratos/{agencia}-{conta_corrente}/poupanca/{variacao_poupanca}",
|
|
778
|
+
headers=common._get_headers(access_token),
|
|
779
|
+
params={
|
|
780
|
+
"mes": mes,
|
|
781
|
+
"ano": ano,
|
|
782
|
+
"gw-dev-app-key": self._app_key,
|
|
783
|
+
},
|
|
784
|
+
)
|
|
785
|
+
|
|
786
|
+
if res.status_code != 200:
|
|
787
|
+
raise Exception(
|
|
788
|
+
"Não foi possível listar as categorias do programa de governo."
|
|
789
|
+
)
|
|
790
|
+
|
|
791
|
+
res = res.json()
|
|
792
|
+
return common._handle_results(
|
|
793
|
+
res,
|
|
794
|
+
main_list="listaLancamentos",
|
|
795
|
+
insertables=[
|
|
796
|
+
"codigoProgramaGoverno",
|
|
797
|
+
"nomeProgramaGoverno",
|
|
798
|
+
"codigoSubProgramaGoverno",
|
|
799
|
+
"nomeSubProgramaGoverno",
|
|
800
|
+
"nomeCliente",
|
|
801
|
+
"identificadorCliente",
|
|
802
|
+
"saldoAnterior",
|
|
803
|
+
"saldoAtual",
|
|
804
|
+
"saldoBloqueado",
|
|
805
|
+
"saldoDisponivel",
|
|
806
|
+
],
|
|
807
|
+
rename_dict={
|
|
808
|
+
"codigoProgramaGoverno": "Código Programa Governo",
|
|
809
|
+
"nomeProgramaGoverno": "Nome Programa Governo",
|
|
810
|
+
"codigoSubProgramaGoverno": "Código SubPrograma Governo",
|
|
811
|
+
"nomeSubProgramaGoverno": "Nome SubPrograma Governo",
|
|
812
|
+
"nomeCliente": "Nome Cliente",
|
|
813
|
+
"identificadorCliente": "Identificador Cliente",
|
|
814
|
+
"saldoAnterior": "Saldo Anterior",
|
|
815
|
+
"saldoAtual": "Saldo Atual",
|
|
816
|
+
"saldoBloqueado": "Saldo Bloqueado",
|
|
817
|
+
"saldoDisponivel": "Saldo Disponível",
|
|
818
|
+
"dataLancamento": "Data Lançamento",
|
|
819
|
+
"dataMovimento": "Data Movimento",
|
|
820
|
+
"diaLancamento": "Dia Lançamento",
|
|
821
|
+
"codigoHistorico": "Código Histórico",
|
|
822
|
+
"descricaoHistorico": "Descrição Histórico",
|
|
823
|
+
"indicadorDebitoCredito": "Indicador Débito Crédito",
|
|
824
|
+
"agenciaOrigem": "Agência Origem",
|
|
825
|
+
"numeroDocumento": "Número Documento",
|
|
826
|
+
"valorLancamento": "Valor Lançamento",
|
|
827
|
+
},
|
|
828
|
+
)
|
|
829
|
+
|
|
830
|
+
def get_lancamentos_atualizados(
|
|
831
|
+
self,
|
|
832
|
+
numero_programa_governo: int,
|
|
833
|
+
data_inicio: common.DateLike,
|
|
834
|
+
data_fim: common.DateLike,
|
|
835
|
+
pagina: int = 1,
|
|
836
|
+
) -> pd.DataFrame:
|
|
837
|
+
access_token = self._get_access_token()
|
|
838
|
+
data_inicio = common._handle_dates(data_inicio)
|
|
839
|
+
data_fim = common._handle_dates(data_fim)
|
|
840
|
+
|
|
841
|
+
res = requests.request(
|
|
842
|
+
"GET",
|
|
843
|
+
f"{self._api_domain}/accountability/v3/programas-governo/{numero_programa_governo}/orgaos-repasse/lancamentos-atualizados",
|
|
844
|
+
headers=common._get_headers(access_token),
|
|
845
|
+
params={
|
|
846
|
+
"dataInicio": data_inicio,
|
|
847
|
+
"dataFim": data_fim,
|
|
848
|
+
"pagina": pagina,
|
|
849
|
+
"gw-dev-app-key": self._app_key,
|
|
850
|
+
},
|
|
851
|
+
)
|
|
852
|
+
|
|
853
|
+
if res.status_code != 200:
|
|
854
|
+
raise Exception(
|
|
855
|
+
"Não foi possível listar as categorias do programa de governo."
|
|
856
|
+
)
|
|
857
|
+
|
|
858
|
+
res = res.json()
|
|
859
|
+
return common._handle_results(
|
|
860
|
+
res,
|
|
861
|
+
main_list="listaLancamentos",
|
|
862
|
+
insertables=[
|
|
863
|
+
"totalPaginas",
|
|
864
|
+
],
|
|
865
|
+
rename_dict={
|
|
866
|
+
"totalPaginas": "Total Páginas",
|
|
867
|
+
"agencia": "Agência",
|
|
868
|
+
"contaCorrente": "Conta Corrente",
|
|
869
|
+
"sequencialLancamento": "Sequencial Lançamento",
|
|
870
|
+
},
|
|
871
|
+
)
|
|
872
|
+
|
|
873
|
+
def get_sublancamentos_atualizados(
|
|
874
|
+
self,
|
|
875
|
+
numero_programa_governo: int,
|
|
876
|
+
data_inicio: common.DateLike,
|
|
877
|
+
data_fim: common.DateLike,
|
|
878
|
+
pagina: int = 1,
|
|
879
|
+
) -> pd.DataFrame:
|
|
880
|
+
access_token = self._get_access_token()
|
|
881
|
+
data_inicio = common._handle_dates(data_inicio)
|
|
882
|
+
data_fim = common._handle_dates(data_fim)
|
|
883
|
+
|
|
884
|
+
res = requests.request(
|
|
885
|
+
"GET",
|
|
886
|
+
f"{self._api_domain}/accountability/v3/programas-governo/{numero_programa_governo}/orgaos-repasse/sublancamentos-atualizados",
|
|
887
|
+
headers=common._get_headers(access_token),
|
|
888
|
+
params={
|
|
889
|
+
"dataInicio": data_inicio,
|
|
890
|
+
"dataFim": data_fim,
|
|
891
|
+
"pagina": pagina,
|
|
892
|
+
"gw-dev-app-key": self._app_key,
|
|
893
|
+
},
|
|
894
|
+
)
|
|
895
|
+
|
|
896
|
+
if res.status_code != 200:
|
|
897
|
+
raise Exception(
|
|
898
|
+
"Não foi possível listar as categorias do programa de governo."
|
|
899
|
+
)
|
|
900
|
+
|
|
901
|
+
res = res.json()
|
|
902
|
+
return common._handle_results(
|
|
903
|
+
res,
|
|
904
|
+
main_list="listaSublancamentos",
|
|
905
|
+
insertables=[
|
|
906
|
+
"totalPaginas",
|
|
907
|
+
],
|
|
908
|
+
rename_dict={
|
|
909
|
+
"totalPaginas": "Total Páginas",
|
|
910
|
+
"agencia": "Agência",
|
|
911
|
+
"contaCorrente": "Conta Corrente",
|
|
912
|
+
"sequencialLancamento": "Sequencial Lançamento",
|
|
913
|
+
"sequencialSublancamento": "Sequencial Sublançamento",
|
|
914
|
+
},
|
|
915
|
+
)
|
|
916
|
+
|
|
917
|
+
def get_categorias_programa_governo(
|
|
918
|
+
self,
|
|
919
|
+
numero_programa_governo: int,
|
|
920
|
+
) -> pd.DataFrame:
|
|
921
|
+
access_token = self._get_access_token()
|
|
922
|
+
|
|
923
|
+
res = requests.request(
|
|
924
|
+
"GET",
|
|
925
|
+
f"{self._api_domain}/accountability/v3/programas-governo/{numero_programa_governo}/categorias",
|
|
926
|
+
headers=common._get_headers(access_token),
|
|
927
|
+
params={
|
|
928
|
+
"gw-dev-app-key": self._app_key,
|
|
929
|
+
},
|
|
930
|
+
)
|
|
931
|
+
|
|
932
|
+
if res.status_code != 200:
|
|
933
|
+
raise Exception(
|
|
934
|
+
"Não foi possível listar as categorias do programa de governo."
|
|
935
|
+
)
|
|
936
|
+
|
|
937
|
+
res = res.json()
|
|
938
|
+
return common._handle_results(
|
|
939
|
+
res,
|
|
940
|
+
main_list="categorias",
|
|
941
|
+
rename_dict={
|
|
942
|
+
"codigo": "Código Categoria",
|
|
943
|
+
"nome": "Nome Categoria",
|
|
944
|
+
"codigoCategoriaAgrupadora": "Código Categoria Agrupadora",
|
|
945
|
+
"indicadorDespesaAtiva": "Indicador Despesa Ativa",
|
|
946
|
+
},
|
|
947
|
+
)
|
|
948
|
+
|
|
949
|
+
def get_saldo_aplicacoes_financeiras(
|
|
950
|
+
self,
|
|
951
|
+
agencia: int,
|
|
952
|
+
conta_corrente: int,
|
|
953
|
+
) -> pd.DataFrame:
|
|
954
|
+
access_token = self._get_access_token()
|
|
955
|
+
|
|
956
|
+
res = requests.request(
|
|
957
|
+
"GET",
|
|
958
|
+
f"{self._api_domain}/accountability/v3/saldos/{agencia}-{conta_corrente}/aplicacoes-financeiras",
|
|
959
|
+
headers=common._get_headers(access_token),
|
|
960
|
+
params={
|
|
961
|
+
"gw-dev-app-key": self._app_key,
|
|
962
|
+
},
|
|
963
|
+
)
|
|
964
|
+
|
|
965
|
+
if res.status_code != 200:
|
|
966
|
+
raise Exception(
|
|
967
|
+
"Não foi possível listar as categorias do programa de governo."
|
|
968
|
+
)
|
|
969
|
+
|
|
970
|
+
res = res.json()
|
|
971
|
+
return common._handle_results(
|
|
972
|
+
res,
|
|
973
|
+
main_list="operacoes",
|
|
974
|
+
insertables=[
|
|
975
|
+
"dataSaldo",
|
|
976
|
+
"valorDisponibilidade",
|
|
977
|
+
],
|
|
978
|
+
rename_dict={
|
|
979
|
+
"dataSaldo": "Data Saldo",
|
|
980
|
+
"valorDisponibilidade": "Valor Disponibilidade",
|
|
981
|
+
"codigo": "Código",
|
|
982
|
+
"valor": "Valor",
|
|
983
|
+
"indicadorSaldoNaoDisponivel": "Indicador Saldo Não Disponível",
|
|
984
|
+
"mensagemSaldoApurado": "Mensagem Saldo Apurado",
|
|
985
|
+
},
|
|
986
|
+
)
|
|
987
|
+
|
|
988
|
+
def get_saldo_conta_corrente(
|
|
989
|
+
self,
|
|
990
|
+
agencia: str,
|
|
991
|
+
conta_corrente: str,
|
|
992
|
+
) -> pd.DataFrame:
|
|
993
|
+
access_token = self._get_access_token()
|
|
994
|
+
|
|
995
|
+
res = requests.request(
|
|
996
|
+
"GET",
|
|
997
|
+
f"{self._api_domain}/accountability/v3/saldos/{agencia}-{conta_corrente}/conta-corrente",
|
|
998
|
+
headers=common._get_headers(access_token),
|
|
999
|
+
params={
|
|
1000
|
+
"gw-dev-app-key": self._app_key,
|
|
1001
|
+
},
|
|
1002
|
+
)
|
|
1003
|
+
|
|
1004
|
+
if res.status_code != 200:
|
|
1005
|
+
raise Exception(
|
|
1006
|
+
"Não foi possível listar as categorias do programa de governo."
|
|
1007
|
+
)
|
|
1008
|
+
|
|
1009
|
+
res = res.json()
|
|
1010
|
+
|
|
1011
|
+
return common._handle_results(
|
|
1012
|
+
res,
|
|
1013
|
+
rename_dict={
|
|
1014
|
+
"dataSaldo": "Data Saldo",
|
|
1015
|
+
"valorDisponibilidade": "Valor Disponibilidade",
|
|
1016
|
+
},
|
|
1017
|
+
)
|
|
1018
|
+
|
|
1019
|
+
def post_categoria_despesa_lancamento_credito(
|
|
1020
|
+
self,
|
|
1021
|
+
ordem_bancaria: int,
|
|
1022
|
+
item: int,
|
|
1023
|
+
agencia: int,
|
|
1024
|
+
conta_corrente: int,
|
|
1025
|
+
codigo_contrato: int,
|
|
1026
|
+
codigo_unidade_gestora: str,
|
|
1027
|
+
codigo_categoria_despesa: int,
|
|
1028
|
+
codigo_listagem_cliente: str,
|
|
1029
|
+
) -> pd.DataFrame:
|
|
1030
|
+
access_token = self._get_access_token()
|
|
1031
|
+
|
|
1032
|
+
res = requests.request(
|
|
1033
|
+
"POST",
|
|
1034
|
+
f"{self._api_domain}/accountability/v3/orgaos-repasse/lancamentos-credito/{ordem_bancaria}-{item}/categorias-despesa",
|
|
1035
|
+
headers={
|
|
1036
|
+
"Content-Type": "application/json",
|
|
1037
|
+
**common._get_headers(access_token),
|
|
1038
|
+
},
|
|
1039
|
+
params={
|
|
1040
|
+
"gw-dev-app-key": self._app_key,
|
|
1041
|
+
},
|
|
1042
|
+
data={
|
|
1043
|
+
"agencia": agencia,
|
|
1044
|
+
"contaCorrente": conta_corrente,
|
|
1045
|
+
"codigoContrato": codigo_contrato,
|
|
1046
|
+
"codigoUnidadeGestora": codigo_unidade_gestora,
|
|
1047
|
+
"codigoCategoriaDespesa": codigo_categoria_despesa,
|
|
1048
|
+
"codigoListagemCliente": codigo_listagem_cliente,
|
|
1049
|
+
},
|
|
1050
|
+
)
|
|
1051
|
+
|
|
1052
|
+
if res.status_code not in [200, 201]:
|
|
1053
|
+
raise Exception(
|
|
1054
|
+
"Não foi possível listar as categorias do programa de governo."
|
|
1055
|
+
)
|
|
1056
|
+
|
|
1057
|
+
res = res.json()
|
|
1058
|
+
return common._handle_results(
|
|
1059
|
+
res,
|
|
1060
|
+
rename_dict={
|
|
1061
|
+
"timestampInclusaoCategoriaDespesa": "Momento Inclusão Categoria Despesa",
|
|
1062
|
+
},
|
|
1063
|
+
)
|
|
1064
|
+
|
|
1065
|
+
def post_identificacao_lancamento_credito(
|
|
1066
|
+
self,
|
|
1067
|
+
agencia: str,
|
|
1068
|
+
conta_corrente: str,
|
|
1069
|
+
numero_bancario: int,
|
|
1070
|
+
numero_sequencial_ordem_bancaria: int,
|
|
1071
|
+
data_lancamento: common.DateLike,
|
|
1072
|
+
numero_companhia: int,
|
|
1073
|
+
valor_fracionado: int,
|
|
1074
|
+
tipo_identificacao: int,
|
|
1075
|
+
codigo_identificacao: str,
|
|
1076
|
+
) -> pd.DataFrame:
|
|
1077
|
+
access_token = self._get_access_token()
|
|
1078
|
+
data_lancamento = common._handle_dates(data_lancamento)
|
|
1079
|
+
|
|
1080
|
+
res = requests.request(
|
|
1081
|
+
"POST",
|
|
1082
|
+
f"{self._api_domain}/accountability/v3/orgaos-repasse/{agencia}-{conta_corrente}/lancamentos-credito",
|
|
1083
|
+
headers={
|
|
1084
|
+
"Content-Type": "application/json",
|
|
1085
|
+
**common._get_headers(access_token),
|
|
1086
|
+
},
|
|
1087
|
+
params={
|
|
1088
|
+
"gw-dev-app-key": self._app_key,
|
|
1089
|
+
},
|
|
1090
|
+
data={
|
|
1091
|
+
"numeroBancario": numero_bancario,
|
|
1092
|
+
"numeroSequencialOrdemBancaria": numero_sequencial_ordem_bancaria,
|
|
1093
|
+
"dataLancamento": data_lancamento,
|
|
1094
|
+
"numeroCompanhia": numero_companhia,
|
|
1095
|
+
"valorFracionado": valor_fracionado,
|
|
1096
|
+
"tipoIdentificacao": tipo_identificacao,
|
|
1097
|
+
"codigoIdentificacao": codigo_identificacao,
|
|
1098
|
+
},
|
|
1099
|
+
)
|
|
1100
|
+
|
|
1101
|
+
if res.status_code not in [200, 201]:
|
|
1102
|
+
raise Exception(
|
|
1103
|
+
"Não foi possível listar as categorias do programa de governo."
|
|
1104
|
+
)
|
|
1105
|
+
|
|
1106
|
+
res = res.json()
|
|
1107
|
+
return common._handle_results(
|
|
1108
|
+
res,
|
|
1109
|
+
rename_dict={
|
|
1110
|
+
"numeroSequencialLancamentoContaCorrente": "Número Sequencial Lançamento Conta Corrente",
|
|
1111
|
+
"numeroSequencialIdentificacaoLancamento": "Número Sequencial Identificação Lançamento",
|
|
1112
|
+
"timestampInclusaoIdentificacaoLancamento": "Momento Inclusão Identificação Lançamento",
|
|
1113
|
+
},
|
|
1114
|
+
)
|
|
1115
|
+
|
|
1116
|
+
def delete_identificacao_lancamento_credito(
|
|
1117
|
+
self,
|
|
1118
|
+
agencia: str,
|
|
1119
|
+
conta_corrente: str,
|
|
1120
|
+
sequencial_lancamento: str,
|
|
1121
|
+
sequencial_identificacao: str,
|
|
1122
|
+
) -> pd.DataFrame:
|
|
1123
|
+
access_token = self._get_access_token()
|
|
1124
|
+
|
|
1125
|
+
res = requests.request(
|
|
1126
|
+
"DELETE",
|
|
1127
|
+
f"{self._api_domain}/accountability/v3/orgaos-repasse/{agencia}-{conta_corrente}/lancamentos-credito/{sequencial_lancamento}-{sequencial_identificacao}",
|
|
1128
|
+
headers=common._get_headers(access_token),
|
|
1129
|
+
params={
|
|
1130
|
+
"gw-dev-app-key": self._app_key,
|
|
1131
|
+
},
|
|
1132
|
+
)
|
|
1133
|
+
|
|
1134
|
+
if res.status_code not in [200, 201]:
|
|
1135
|
+
raise Exception(
|
|
1136
|
+
"Não foi possível listar as categorias do programa de governo."
|
|
1137
|
+
)
|
|
1138
|
+
|
|
1139
|
+
res = res.json()
|
|
1140
|
+
return common._handle_results(
|
|
1141
|
+
res,
|
|
1142
|
+
rename_dict={
|
|
1143
|
+
"timestampExclusaoIdentificacaoLancamento": "Momento Exclusão Identificação Lançamento",
|
|
1144
|
+
},
|
|
1145
|
+
)
|
|
1146
|
+
|
|
1147
|
+
def get_identificacao_lancamento_debito(
|
|
1148
|
+
self,
|
|
1149
|
+
agencia: str,
|
|
1150
|
+
conta_corrente: str,
|
|
1151
|
+
numero_pagina: int = 1,
|
|
1152
|
+
) -> pd.DataFrame:
|
|
1153
|
+
access_token = self._get_access_token()
|
|
1154
|
+
|
|
1155
|
+
res = requests.request(
|
|
1156
|
+
"GET",
|
|
1157
|
+
f"{self._api_domain}/accountability/v3/orgaos-repasse/{agencia}-{conta_corrente}/lancamentos-debito",
|
|
1158
|
+
headers=common._get_headers(access_token),
|
|
1159
|
+
params={
|
|
1160
|
+
"gw-dev-app-key": self._app_key,
|
|
1161
|
+
"numeroPagina": numero_pagina,
|
|
1162
|
+
},
|
|
1163
|
+
)
|
|
1164
|
+
|
|
1165
|
+
if res.status_code != 200:
|
|
1166
|
+
raise Exception(
|
|
1167
|
+
"Não foi possível listar as categorias do programa de governo."
|
|
1168
|
+
)
|
|
1169
|
+
|
|
1170
|
+
res = res.json()
|
|
1171
|
+
return common._handle_results(
|
|
1172
|
+
res,
|
|
1173
|
+
main_list="listaLancamento",
|
|
1174
|
+
insertables=[
|
|
1175
|
+
"numeroPaginaTotal",
|
|
1176
|
+
"quantidadeIdentificacaoLancamento",
|
|
1177
|
+
],
|
|
1178
|
+
rename_dict={
|
|
1179
|
+
"numeroPaginaTotal": "Número Página Total",
|
|
1180
|
+
"quantidadeIdentificacaoLancamento": "Quantidade Identificação Lançamento",
|
|
1181
|
+
"numeroSequencialLancamentoContaCorrente": "Número Sequencial Lançamento Conta Corrente",
|
|
1182
|
+
"numeroSequencialIdentificacaoLancamento": "Número Sequencial Identificação Lançamento",
|
|
1183
|
+
"tipoIdentificacao": "Tipo Identificação",
|
|
1184
|
+
"tipoIdentificacaoTexto": "Tipo Identificação Texto",
|
|
1185
|
+
"codigoIdentificacao": "Código Identificação",
|
|
1186
|
+
"numeroCompanhia": "Número Companhia",
|
|
1187
|
+
"valorFracionado": "Valor Fracionado",
|
|
1188
|
+
},
|
|
1189
|
+
)
|
|
1190
|
+
|
|
1191
|
+
|
|
1192
|
+
class AccountabilityV3ControleAPI(_AccountabilityV3BaseAPI):
|
|
1193
|
+
"""Representa um encapsulador da API Accountability V3 do Banco do Brasil
|
|
1194
|
+
para os órgaos de controle.
|
|
1195
|
+
|
|
1196
|
+
Esse encapsulador já reutiliza o token de acesso por 10 minutos e gera um
|
|
1197
|
+
novo sempre que o atual estiver expirado.
|
|
1198
|
+
"""
|
|
1199
|
+
|
|
1200
|
+
def __init__(
|
|
1201
|
+
self,
|
|
1202
|
+
ambiente: common.Ambiente = common.Ambiente.HOMOLOGACAO,
|
|
1203
|
+
app_key: str = None,
|
|
1204
|
+
client_id: str = None,
|
|
1205
|
+
client_secret: str = None,
|
|
1206
|
+
):
|
|
1207
|
+
super().__init__(
|
|
1208
|
+
ambiente,
|
|
1209
|
+
app_key,
|
|
1210
|
+
client_id,
|
|
1211
|
+
client_secret,
|
|
1212
|
+
)
|
|
1213
|
+
|
|
1214
|
+
def get_extrato_programa_governo(
|
|
1215
|
+
self,
|
|
1216
|
+
branch_code: int,
|
|
1217
|
+
account_number: int,
|
|
1218
|
+
start_date: common.DateLike,
|
|
1219
|
+
end_date: common.DateLike,
|
|
1220
|
+
) -> pd.DataFrame:
|
|
1221
|
+
access_token = self._get_access_token()
|
|
1222
|
+
start_date = common._handle_dates(start_date)
|
|
1223
|
+
end_date = common._handle_dates(end_date)
|
|
1224
|
+
|
|
1225
|
+
res = requests.request(
|
|
1226
|
+
"GET",
|
|
1227
|
+
f"{self._api_domain}/accountability/v3/statements/{branch_code}-{account_number}/control-agencies",
|
|
1228
|
+
headers=common._get_headers(access_token),
|
|
1229
|
+
params={
|
|
1230
|
+
"gw-dev-app-key": self._app_key,
|
|
1231
|
+
"startDate": start_date,
|
|
1232
|
+
"endDate": end_date,
|
|
1233
|
+
},
|
|
1234
|
+
)
|
|
1235
|
+
|
|
1236
|
+
if res.status_code != 200:
|
|
1237
|
+
raise Exception(
|
|
1238
|
+
"Não foi possível reaver o extrato do órgão repassador."
|
|
1239
|
+
)
|
|
1240
|
+
|
|
1241
|
+
res = res.json()
|
|
1242
|
+
|
|
1243
|
+
return common._handle_results(
|
|
1244
|
+
res,
|
|
1245
|
+
main_list="transactions",
|
|
1246
|
+
insertables=[
|
|
1247
|
+
"governmentProgramCode",
|
|
1248
|
+
"governmentProgramName",
|
|
1249
|
+
"governmentSubProgramCode",
|
|
1250
|
+
"governmentSubProgramName",
|
|
1251
|
+
],
|
|
1252
|
+
explodeables=[
|
|
1253
|
+
"expensesDocuments",
|
|
1254
|
+
],
|
|
1255
|
+
rename_dict={
|
|
1256
|
+
"governmentProgramCode": "Código Programa Governo",
|
|
1257
|
+
"governmentProgramName": "Nome Programa Governo",
|
|
1258
|
+
"governmentSubProgramCode": "Código SubPrograma Governo",
|
|
1259
|
+
"governmentSubProgramName": "Nome SubPrograma Governo",
|
|
1260
|
+
"id": "ID Transação",
|
|
1261
|
+
"bookingDate": "Data Agendamento",
|
|
1262
|
+
"orderIndex": "Índice Ordem",
|
|
1263
|
+
"valueDate": "Data Valor",
|
|
1264
|
+
"referenceNumber": "Número Referência",
|
|
1265
|
+
"value": "Valor",
|
|
1266
|
+
"accountBalance": "Saldo Conta",
|
|
1267
|
+
"descriptionCode": "Código Descrição",
|
|
1268
|
+
"descriptionName": "Nome Descrição",
|
|
1269
|
+
"descriptionBatchNumber": "Número Lote Descrição",
|
|
1270
|
+
"creditDebitIndicator": "Indicador Crédito Débito",
|
|
1271
|
+
"beneficiaryBankIdentifierCode": "Código Identificador Banco Beneficiário",
|
|
1272
|
+
"beneficiaryBranchCode": "Código Agência Beneficiário",
|
|
1273
|
+
"beneficiaryAccountNumber": "Número Conta Beneficiário",
|
|
1274
|
+
"beneficiaryPersonType": "Tipo Pessoa Beneficiário",
|
|
1275
|
+
"beneficiaryDocumentId": "ID Documento Beneficiário",
|
|
1276
|
+
"beneficiaryName": "Nome Beneficiário",
|
|
1277
|
+
"pendingExpenseConciliation": "Conciliação Despesa Pendente",
|
|
1278
|
+
"attachedExpenseDocumentIndicator": "Indicador Anexo Documento Despesa",
|
|
1279
|
+
"expenseCategoryCode": "Código Categoria Despesa",
|
|
1280
|
+
"expenseIdentificationStatus": "Status Identificação Despesa",
|
|
1281
|
+
"subTransactionQuantity": "Quantidade Subtransações",
|
|
1282
|
+
"bankOrderRuleCode": "Código Ordem Pagamento Banco",
|
|
1283
|
+
"bankOrderPurposeCode": "Código Finalidade Ordem Banco",
|
|
1284
|
+
"bankOrderPurposeDescription": "Descrição Finalidade Ordem Banco",
|
|
1285
|
+
"expenseSequentialNumber": "Número Sequencial Despesa",
|
|
1286
|
+
"expensesCategory": "Categoria Despesa",
|
|
1287
|
+
"expensesDocuments": "ID Documento Despesa",
|
|
1288
|
+
},
|
|
1289
|
+
)
|
|
1290
|
+
|
|
1291
|
+
def get_documento_despesas_programa_governo(
|
|
1292
|
+
self,
|
|
1293
|
+
branch_code: int,
|
|
1294
|
+
account_number: int,
|
|
1295
|
+
transaction_id: int,
|
|
1296
|
+
document_id: int,
|
|
1297
|
+
booking_date: common.DateLike,
|
|
1298
|
+
) -> Tuple[pd.DataFrame, pd.DataFrame, pd.DataFrame]:
|
|
1299
|
+
access_token = self._get_access_token()
|
|
1300
|
+
booking_date = common._handle_dates(booking_date)
|
|
1301
|
+
|
|
1302
|
+
res = requests.request(
|
|
1303
|
+
"GET",
|
|
1304
|
+
f"{self._api_domain}/accountability/v3/expenses/{branch_code}-{account_number}/transactions/{transaction_id}/documents/{document_id}",
|
|
1305
|
+
headers=common._get_headers(access_token),
|
|
1306
|
+
params={
|
|
1307
|
+
"gw-dev-app-key": self._app_key,
|
|
1308
|
+
"bookingDate": booking_date,
|
|
1309
|
+
},
|
|
1310
|
+
)
|
|
1311
|
+
|
|
1312
|
+
if res.status_code != 200:
|
|
1313
|
+
raise Exception(
|
|
1314
|
+
"Não foi possível reaver o extrato do órgão repassador."
|
|
1315
|
+
)
|
|
1316
|
+
|
|
1317
|
+
res = res.json()
|
|
1318
|
+
|
|
1319
|
+
df_issuer = common._handle_results(
|
|
1320
|
+
res["issuer"],
|
|
1321
|
+
rename_dict={
|
|
1322
|
+
"corporateTaxPayerRegistry": "CNPJ",
|
|
1323
|
+
"individualTaxPayerRegistry": "CPF",
|
|
1324
|
+
"stateRegistrationNumber": "RG",
|
|
1325
|
+
"legalName": "Nome Legal",
|
|
1326
|
+
"tradeName": "Nome Social",
|
|
1327
|
+
"countryName": "Nacionalidade",
|
|
1328
|
+
"stateAbbreviation": "UF",
|
|
1329
|
+
"cityName": "Cidade",
|
|
1330
|
+
"districtName": "Bairro",
|
|
1331
|
+
"additionalAddressInformation": "Endereço",
|
|
1332
|
+
"postalCode": "CEP",
|
|
1333
|
+
"phoneNumber": "Telefone",
|
|
1334
|
+
},
|
|
1335
|
+
)
|
|
1336
|
+
|
|
1337
|
+
df_recipient = common._handle_results(
|
|
1338
|
+
res["recipient"],
|
|
1339
|
+
rename_dict={
|
|
1340
|
+
"corporateTaxPayerRegistry": "CNPJ",
|
|
1341
|
+
"individualTaxPayerRegistry": "CPF",
|
|
1342
|
+
"stateRegistrationNumber": "RG",
|
|
1343
|
+
"legalName": "Nome Legal",
|
|
1344
|
+
"tradeName": "Nome Social",
|
|
1345
|
+
"countryName": "Nacionalidade",
|
|
1346
|
+
"stateAbbreviation": "UF",
|
|
1347
|
+
"cityName": "Cidade",
|
|
1348
|
+
"districtName": "Bairro",
|
|
1349
|
+
"additionalAddressInformation": "Endereço",
|
|
1350
|
+
"postalCode": "CEP",
|
|
1351
|
+
"phoneNumber": "Telefone",
|
|
1352
|
+
"presenceTypeCode": "Código Tipo Presença",
|
|
1353
|
+
"typeConsumerCode": "Código Tipo Consumidor",
|
|
1354
|
+
},
|
|
1355
|
+
)
|
|
1356
|
+
|
|
1357
|
+
df_document = common._handle_results(
|
|
1358
|
+
res["expenseDocument"],
|
|
1359
|
+
main_list="items",
|
|
1360
|
+
insertables=[
|
|
1361
|
+
"accessKey",
|
|
1362
|
+
"receiptTypeCode",
|
|
1363
|
+
"typeCode",
|
|
1364
|
+
"serialCode",
|
|
1365
|
+
"number",
|
|
1366
|
+
"issueDate",
|
|
1367
|
+
"movementDate",
|
|
1368
|
+
"itemDeliveryDate",
|
|
1369
|
+
"value",
|
|
1370
|
+
"operationTypeName",
|
|
1371
|
+
"operation",
|
|
1372
|
+
"paymentMethod",
|
|
1373
|
+
"digitalSignatureCode",
|
|
1374
|
+
"pronafAbilityRegistration",
|
|
1375
|
+
"timestamp",
|
|
1376
|
+
"userId",
|
|
1377
|
+
"discountValue",
|
|
1378
|
+
"totalDiscountValue",
|
|
1379
|
+
"realeaseInstrumentCode",
|
|
1380
|
+
"realeaseInstrumentName",
|
|
1381
|
+
"realeaseInstrumentDate",
|
|
1382
|
+
"additionalInformation",
|
|
1383
|
+
],
|
|
1384
|
+
rename_dict={
|
|
1385
|
+
"accessKey": "Chave Acesso",
|
|
1386
|
+
"receiptTypeCode": "Código Tipo Recibo",
|
|
1387
|
+
"typeCode": "Código Tipo",
|
|
1388
|
+
"serialCode": "Código Série",
|
|
1389
|
+
"number": "Número",
|
|
1390
|
+
"issueDate": "Data Emissão",
|
|
1391
|
+
"movementDate": "Data Movimentação",
|
|
1392
|
+
"itemDeliveryDate": "Data Entrega",
|
|
1393
|
+
"value": "Valor",
|
|
1394
|
+
"operationTypeName": "Nome Tipo Operação",
|
|
1395
|
+
"operation": "Operação",
|
|
1396
|
+
"paymentMethod": "Método Pagamento",
|
|
1397
|
+
"digitalSignatureCode": "Código Assinatura Digital",
|
|
1398
|
+
"pronafAbilityRegistration": "Registro Habilidade Pronaf",
|
|
1399
|
+
"timestamp": "Momento",
|
|
1400
|
+
"userId": "ID Usuário",
|
|
1401
|
+
"discountValue": "Valor Desconto",
|
|
1402
|
+
"totalDiscountValue": "Valor Total Desconto",
|
|
1403
|
+
"realeaseInstrumentCode": "Código Liberação de Instrumento",
|
|
1404
|
+
"realeaseInstrumentName": "Nome Liberação Instrumento",
|
|
1405
|
+
"realeaseInstrumentDate": "Data Liberação Instrumento",
|
|
1406
|
+
"additionalInformation": "Informação Adicional",
|
|
1407
|
+
"description": "Descrição Item",
|
|
1408
|
+
"quantity": "Quantidade Item",
|
|
1409
|
+
"metric": "Métrica Item",
|
|
1410
|
+
"unitValue": "Valor Unitário Item",
|
|
1411
|
+
"totalValue": "Valor Total Item",
|
|
1412
|
+
"mercosurCommonNameId": "ID Nome Comum Mercosul",
|
|
1413
|
+
"itemDiscountValue": "Valor Desconto Item",
|
|
1414
|
+
},
|
|
1415
|
+
)
|
|
1416
|
+
|
|
1417
|
+
return (
|
|
1418
|
+
df_issuer,
|
|
1419
|
+
df_recipient,
|
|
1420
|
+
df_document,
|
|
1421
|
+
)
|
|
1422
|
+
|
|
1423
|
+
def get_documento_despesas_prestacao_contas(
|
|
1424
|
+
self,
|
|
1425
|
+
branch_code: int,
|
|
1426
|
+
account_number: int,
|
|
1427
|
+
transaction_id: int,
|
|
1428
|
+
subtransaction_id: int,
|
|
1429
|
+
document_id: int,
|
|
1430
|
+
booking_date: common.DateLike,
|
|
1431
|
+
) -> Tuple[pd.DataFrame, pd.DataFrame, pd.DataFrame]:
|
|
1432
|
+
access_token = self._get_access_token()
|
|
1433
|
+
booking_date = common._handle_dates(booking_date)
|
|
1434
|
+
|
|
1435
|
+
res = requests.request(
|
|
1436
|
+
"GET",
|
|
1437
|
+
f"{self._api_domain}/accountability/v3/expenses/{branch_code}-{account_number}/transactions/{transaction_id}/subTransactions/{subtransaction_id}/documents/{document_id}",
|
|
1438
|
+
headers=common._get_headers(access_token),
|
|
1439
|
+
params={
|
|
1440
|
+
"gw-dev-app-key": self._app_key,
|
|
1441
|
+
"bookingDate": booking_date,
|
|
1442
|
+
},
|
|
1443
|
+
)
|
|
1444
|
+
|
|
1445
|
+
if res.status_code != 200:
|
|
1446
|
+
raise Exception(
|
|
1447
|
+
"Não foi possível reaver o extrato do órgão repassador."
|
|
1448
|
+
)
|
|
1449
|
+
|
|
1450
|
+
res = res.json()
|
|
1451
|
+
|
|
1452
|
+
df_issuer = common._handle_results(
|
|
1453
|
+
res["issuer"],
|
|
1454
|
+
rename_dict={
|
|
1455
|
+
"corporateTaxPayerRegistry": "CNPJ",
|
|
1456
|
+
"individualTaxPayerRegistry": "CPF",
|
|
1457
|
+
"stateRegistrationNumber": "RG",
|
|
1458
|
+
"legalName": "Nome Legal",
|
|
1459
|
+
"tradeName": "Nome Social",
|
|
1460
|
+
"countryName": "Nacionalidade",
|
|
1461
|
+
"stateAbbreviation": "UF",
|
|
1462
|
+
"cityName": "Cidade",
|
|
1463
|
+
"districtName": "Bairro",
|
|
1464
|
+
"additionalAddressInformation": "Endereço",
|
|
1465
|
+
"postalCode": "CEP",
|
|
1466
|
+
"phoneNumber": "Telefone",
|
|
1467
|
+
},
|
|
1468
|
+
)
|
|
1469
|
+
|
|
1470
|
+
df_recipient = common._handle_results(
|
|
1471
|
+
res["recipient"],
|
|
1472
|
+
rename_dict={
|
|
1473
|
+
"corporateTaxPayerRegistry": "CNPJ",
|
|
1474
|
+
"individualTaxPayerRegistry": "CPF",
|
|
1475
|
+
"stateRegistrationNumber": "RG",
|
|
1476
|
+
"legalName": "Nome Legal",
|
|
1477
|
+
"tradeName": "Nome Social",
|
|
1478
|
+
"countryName": "Nacionalidade",
|
|
1479
|
+
"stateAbbreviation": "UF",
|
|
1480
|
+
"cityName": "Cidade",
|
|
1481
|
+
"districtName": "Bairro",
|
|
1482
|
+
"additionalAddressInformation": "Endereço",
|
|
1483
|
+
"postalCode": "CEP",
|
|
1484
|
+
"phoneNumber": "Telefone",
|
|
1485
|
+
"presenceTypeCode": "Código Tipo Presença",
|
|
1486
|
+
"typeConsumerCode": "Código Tipo Consumidor",
|
|
1487
|
+
},
|
|
1488
|
+
)
|
|
1489
|
+
|
|
1490
|
+
df_document = common._handle_results(
|
|
1491
|
+
res["expenseDocument"],
|
|
1492
|
+
main_list="items",
|
|
1493
|
+
insertables=[
|
|
1494
|
+
"accessKey",
|
|
1495
|
+
"receiptTypeCode",
|
|
1496
|
+
"typeCode",
|
|
1497
|
+
"serialCode",
|
|
1498
|
+
"number",
|
|
1499
|
+
"issueDate",
|
|
1500
|
+
"movementDate",
|
|
1501
|
+
"itemDeliveryDate",
|
|
1502
|
+
"value",
|
|
1503
|
+
"operationTypeName",
|
|
1504
|
+
"operation",
|
|
1505
|
+
"paymentMethod",
|
|
1506
|
+
"digitalSignatureCode",
|
|
1507
|
+
"pronafAbilityRegistration",
|
|
1508
|
+
"timestamp",
|
|
1509
|
+
"userId",
|
|
1510
|
+
"discountValue",
|
|
1511
|
+
"totalDiscountValue",
|
|
1512
|
+
"realeaseInstrumentCode",
|
|
1513
|
+
"realeaseInstrumentName",
|
|
1514
|
+
"realeaseInstrumentDate",
|
|
1515
|
+
"additionalInformation",
|
|
1516
|
+
],
|
|
1517
|
+
rename_dict={
|
|
1518
|
+
"accessKey": "Chave Acesso",
|
|
1519
|
+
"receiptTypeCode": "Código Tipo Recibo",
|
|
1520
|
+
"typeCode": "Código Tipo",
|
|
1521
|
+
"serialCode": "Código Série",
|
|
1522
|
+
"number": "Número",
|
|
1523
|
+
"issueDate": "Data Emissão",
|
|
1524
|
+
"movementDate": "Data Movimentação",
|
|
1525
|
+
"itemDeliveryDate": "Data Entrega",
|
|
1526
|
+
"value": "Valor",
|
|
1527
|
+
"operationTypeName": "Nome Tipo Operação",
|
|
1528
|
+
"operation": "Operação",
|
|
1529
|
+
"paymentMethod": "Método Pagamento",
|
|
1530
|
+
"digitalSignatureCode": "Código Assinatura Digital",
|
|
1531
|
+
"pronafAbilityRegistration": "Registro Habilidade Pronaf",
|
|
1532
|
+
"timestamp": "Momento",
|
|
1533
|
+
"userId": "ID Usuário",
|
|
1534
|
+
"discountValue": "Valor Desconto",
|
|
1535
|
+
"totalDiscountValue": "Valor Total Desconto",
|
|
1536
|
+
"realeaseInstrumentCode": "Código Liberação de Instrumento",
|
|
1537
|
+
"realeaseInstrumentName": "Nome Liberação Instrumento",
|
|
1538
|
+
"realeaseInstrumentDate": "Data Liberação Instrumento",
|
|
1539
|
+
"additionalInformation": "Informação Adicional",
|
|
1540
|
+
"description": "Descrição Item",
|
|
1541
|
+
"quantity": "Quantidade Item",
|
|
1542
|
+
"metric": "Métrica Item",
|
|
1543
|
+
"unitValue": "Valor Unitário Item",
|
|
1544
|
+
"totalValue": "Valor Total Item",
|
|
1545
|
+
"mercosurCommonNameId": "ID Nome Comum Mercosul",
|
|
1546
|
+
"itemDiscountValue": "Valor Desconto Item",
|
|
1547
|
+
},
|
|
1548
|
+
)
|
|
1549
|
+
|
|
1550
|
+
return (
|
|
1551
|
+
df_issuer,
|
|
1552
|
+
df_recipient,
|
|
1553
|
+
df_document,
|
|
1554
|
+
)
|
|
1555
|
+
|
|
1556
|
+
def get_extrato_subtransacoes_programa_governo(
|
|
1557
|
+
self,
|
|
1558
|
+
branch_code: int,
|
|
1559
|
+
account_number: int,
|
|
1560
|
+
id: int,
|
|
1561
|
+
) -> pd.DataFrame:
|
|
1562
|
+
access_token = self._get_access_token()
|
|
1563
|
+
|
|
1564
|
+
res = requests.request(
|
|
1565
|
+
"GET",
|
|
1566
|
+
f"{self._api_domain}/accountability/v3/statements/{branch_code}-{account_number}/debits/{id}/control-agencies/subtransactions",
|
|
1567
|
+
headers=common._get_headers(access_token),
|
|
1568
|
+
params={
|
|
1569
|
+
"gw-dev-app-key": self._app_key,
|
|
1570
|
+
},
|
|
1571
|
+
)
|
|
1572
|
+
|
|
1573
|
+
if res.status_code != 200:
|
|
1574
|
+
raise Exception(
|
|
1575
|
+
"Não foi possível listar as categorias do programa de governo."
|
|
1576
|
+
)
|
|
1577
|
+
|
|
1578
|
+
res = res.json()
|
|
1579
|
+
return common._handle_results(
|
|
1580
|
+
res,
|
|
1581
|
+
main_list="subtransactions",
|
|
1582
|
+
insertables=[
|
|
1583
|
+
"governmentProgramCode",
|
|
1584
|
+
"governmentProgramName",
|
|
1585
|
+
"governmentSubProgramCode",
|
|
1586
|
+
"governmentSubProgramName",
|
|
1587
|
+
],
|
|
1588
|
+
explodeables=[
|
|
1589
|
+
"expensesCategory",
|
|
1590
|
+
"expensesDocuments",
|
|
1591
|
+
],
|
|
1592
|
+
rename_dict={
|
|
1593
|
+
"governmentProgramCode": "Código Programa Governo",
|
|
1594
|
+
"governmentProgramName": "Nome Programa Governo",
|
|
1595
|
+
"governmentSubProgramCode": "Código SubPrograma Governo",
|
|
1596
|
+
"governmentSubProgramName": "Nome SubPrograma Governo",
|
|
1597
|
+
"id": "ID",
|
|
1598
|
+
"codeSubtransactionState": "Estado Código Subtransação",
|
|
1599
|
+
"paymentState": "Estado Pagamento",
|
|
1600
|
+
"paymentDate": "Data Pagamento",
|
|
1601
|
+
"value": "Valor",
|
|
1602
|
+
"beneficiaryBankIdentifierCode": "Código Identificador Banco Beneficiário",
|
|
1603
|
+
"beneficiaryBranchCode": "Código Agência Beneficiário",
|
|
1604
|
+
"beneficiaryAccountNumber": "Número Conta Beneficiário",
|
|
1605
|
+
"beneficiaryPersonType": "Tipo Pessoa Beneficiário",
|
|
1606
|
+
"beneficiaryDocumentId": "ID Documento Beneficiário",
|
|
1607
|
+
"beneficiaryName": "Nome Beneficiário",
|
|
1608
|
+
"attachedExpenseDocumentIndicator": "Indicador Anexo Documento Despesa",
|
|
1609
|
+
"expenseCategoryCode": "Código Categoria Despesa",
|
|
1610
|
+
"subtransactionAccountabilityIndicator": "Indicador Contabilidade Subtransação",
|
|
1611
|
+
"subtransactionAccountabilityName": "Nome Contabilidade Subtransação",
|
|
1612
|
+
"bankOrderPurposeCode": "Código Finalidade Ordem Banco",
|
|
1613
|
+
"bankOrderRuleCode": "Código Ordem Pagamento Banco",
|
|
1614
|
+
"bankOrderPurposeDescription": "Descrição Finalidade Ordem Banco",
|
|
1615
|
+
"expenseSequentialNumber": "Número Sequencial Despesa",
|
|
1616
|
+
"code": "Código Categoria Despesa",
|
|
1617
|
+
"parentCode": "Código Pai Categoria Despesa",
|
|
1618
|
+
"name": "Nome Categoria Despesa",
|
|
1619
|
+
"expensesDocuments": "Documentos Despesa",
|
|
1620
|
+
},
|
|
1621
|
+
)
|
|
1622
|
+
|
|
1623
|
+
def get_extrato_fundos_investimento(
|
|
1624
|
+
self,
|
|
1625
|
+
agencia: str,
|
|
1626
|
+
conta_corrente: str,
|
|
1627
|
+
fundo_investimento_id: str,
|
|
1628
|
+
mes: int,
|
|
1629
|
+
ano: int,
|
|
1630
|
+
) -> pd.DataFrame:
|
|
1631
|
+
access_token = self._get_access_token()
|
|
1632
|
+
|
|
1633
|
+
res = requests.request(
|
|
1634
|
+
"GET",
|
|
1635
|
+
f"{self._api_domain}/accountability/v3/extratos/{agencia}-{conta_corrente}/fundos-investimentos/{fundo_investimento_id}/control-agencies",
|
|
1636
|
+
headers=common._get_headers(access_token),
|
|
1637
|
+
params={
|
|
1638
|
+
"mes": mes,
|
|
1639
|
+
"ano": ano,
|
|
1640
|
+
"gw-dev-app-key": self._app_key,
|
|
1641
|
+
},
|
|
1642
|
+
)
|
|
1643
|
+
|
|
1644
|
+
if res.status_code != 200:
|
|
1645
|
+
raise Exception(
|
|
1646
|
+
"Não foi possível listar as categorias do programa de governo."
|
|
1647
|
+
)
|
|
1648
|
+
|
|
1649
|
+
res = res.json()
|
|
1650
|
+
res["extrato"]["valorCotaExtrato"] = res["extrato"].pop("valorCota")
|
|
1651
|
+
df = common._handle_results(
|
|
1652
|
+
res["extrato"],
|
|
1653
|
+
main_list="listaLancamentosExtrato",
|
|
1654
|
+
insertables=[
|
|
1655
|
+
"numeroAgenciaRecebedora",
|
|
1656
|
+
"digitoVerificadorContaRecebedora",
|
|
1657
|
+
"numeroContaCorrenteRecebedora",
|
|
1658
|
+
"numeroDigitoVerificadorContaCorrenteRecebedora",
|
|
1659
|
+
"nomeClienteRecebedor",
|
|
1660
|
+
"nomeFundoInvestimento",
|
|
1661
|
+
"CNPJFundoInvestimento",
|
|
1662
|
+
"valorCotaExtrato",
|
|
1663
|
+
"dataAfericaoValorCota",
|
|
1664
|
+
"ultimaCotacaoCota",
|
|
1665
|
+
"dataUltimaCotacaoCota",
|
|
1666
|
+
"sinalRentabilidadeMes",
|
|
1667
|
+
"valorRentabilidadeMes",
|
|
1668
|
+
"sinalRentabilidadeAno",
|
|
1669
|
+
"valorRentabilidadeAno",
|
|
1670
|
+
"sinalRentabilidadeResgateTotal",
|
|
1671
|
+
"valorRentabilidadeResgateTotal",
|
|
1672
|
+
"valorDisponivelResgate",
|
|
1673
|
+
"valorCarenciaResgate",
|
|
1674
|
+
"valorIRPrevisto",
|
|
1675
|
+
"percentualIRPrevisto",
|
|
1676
|
+
"valorIRComplementarPrevisto",
|
|
1677
|
+
"valorIOFPrevisto",
|
|
1678
|
+
"valorTaxaSaida",
|
|
1679
|
+
"valorBonusDesempenho",
|
|
1680
|
+
"valorBloqueado",
|
|
1681
|
+
"valorAplicado",
|
|
1682
|
+
"valorResgate",
|
|
1683
|
+
"valorSaldoAnterior",
|
|
1684
|
+
"quantidadeCotaAnterior",
|
|
1685
|
+
"dataSaldoAnterior",
|
|
1686
|
+
"valorTotalAplicadoPeriodo",
|
|
1687
|
+
"valorTotalResgatadoPeriodo",
|
|
1688
|
+
"sinalRendimentoBrutoPeriodo",
|
|
1689
|
+
"valorRendimentoBrutoPeriodo",
|
|
1690
|
+
"valorTotalIRPeriodo",
|
|
1691
|
+
"valorTotalIOFPeriodo",
|
|
1692
|
+
"valorTotalTaxaSaidaPeriodo",
|
|
1693
|
+
"valorTotalBonusDesempenhoPeriodo",
|
|
1694
|
+
"sinalRendimentoLiquido",
|
|
1695
|
+
"valorRendimentoLiquido",
|
|
1696
|
+
"valorSaldoMesAnterior",
|
|
1697
|
+
"quantidadeCotaMesAnterior",
|
|
1698
|
+
"dataSaldoMesAnterior",
|
|
1699
|
+
"numeroLancamento",
|
|
1700
|
+
],
|
|
1701
|
+
rename_dict={
|
|
1702
|
+
"numeroAgenciaRecebedora": "Número Agência Recebedora",
|
|
1703
|
+
"digitoVerificadorContaRecebedora": "Dígito Verificador Conta Recebedora",
|
|
1704
|
+
"numeroContaCorrenteRecebedora": "Número Conta Corrente Recebedora",
|
|
1705
|
+
"numeroDigitoVerificadorContaCorrenteRecebedora": "Número Dígito Verificador Conta Corrente Recebedora",
|
|
1706
|
+
"nomeClienteRecebedor": "Nome Cliente Recebedor",
|
|
1707
|
+
"nomeFundoInvestimento": "Nome Fundo Investimento",
|
|
1708
|
+
"CNPJFundoInvestimento": " CNPJ Fundo Investimento",
|
|
1709
|
+
"valorCotaExtrato": "Valor Cota Extrato",
|
|
1710
|
+
"dataAfericaoValorCota": "Data Afericão Valor Cota",
|
|
1711
|
+
"ultimaCotacaoCota": "Última Cotação Cota",
|
|
1712
|
+
"dataUltimaCotacaoCota": "Data Última Cotação Cota",
|
|
1713
|
+
"sinalRentabilidadeMes": "Sinal Rentabilidade Mês",
|
|
1714
|
+
"valorRentabilidadeMes": "Valor Rentabilidade Mês",
|
|
1715
|
+
"sinalRentabilidadeAno": "Sinal Rentabilidade Ano",
|
|
1716
|
+
"valorRentabilidadeAno": "Valor Rentabilidade Ano",
|
|
1717
|
+
"sinalRentabilidadeResgateTotal": "Sinal Rentabilidade Resgate Total",
|
|
1718
|
+
"valorRentabilidadeResgateTotal": "Valor Rentabilidade Resgate Total",
|
|
1719
|
+
"valorDisponivelResgate": "Valor Disponível Resgate",
|
|
1720
|
+
"valorCarenciaResgate": "Valor Carência Resgate",
|
|
1721
|
+
"valorIRPrevisto": "Valor IR Previsto",
|
|
1722
|
+
"percentualIRPrevisto": "Percentual IR Previsto",
|
|
1723
|
+
"valorIRComplementarPrevisto": "Valor IR Complementar Previsto",
|
|
1724
|
+
"valorIOFPrevisto": "Valor IOF Previsto",
|
|
1725
|
+
"valorTaxaSaida": "Valor Taxa Saída",
|
|
1726
|
+
"valorBonusDesempenho": "Valor Bônus Desempenho",
|
|
1727
|
+
"valorBloqueado": "Valor Bloqueado",
|
|
1728
|
+
"valorAplicado": "Valor Aplicado",
|
|
1729
|
+
"valorResgate": "Valor Resgate",
|
|
1730
|
+
"valorSaldoAnterior": "Valor Saldo Anterior",
|
|
1731
|
+
"quantidadeCotaAnterior": "Quantidade Cota Anterior",
|
|
1732
|
+
"dataSaldoAnterior": "Data Saldo Anterior",
|
|
1733
|
+
"valorTotalAplicadoPeriodo": "Valor Total Aplicado Período",
|
|
1734
|
+
"valorTotalResgatadoPeriodo": "Valor Total Resgatado Período",
|
|
1735
|
+
"sinalRendimentoBrutoPeriodo": "Sinal Rendimento Bruto Período",
|
|
1736
|
+
"valorRendimentoBrutoPeriodo": "Valor Rendimento Bruto Período",
|
|
1737
|
+
"valorTotalIRPeriodo": "Valor Total IR Período",
|
|
1738
|
+
"valorTotalIOFPeriodo": "Valor Total IOF Período",
|
|
1739
|
+
"valorTotalTaxaSaidaPeriodo": "Valor Total Taxa Saída Período",
|
|
1740
|
+
"valorTotalBonusDesempenhoPeriodo": "Valor Total Bônus Desempenho Período",
|
|
1741
|
+
"sinalRendimentoLiquido": "Sinal Rendimento Líquido",
|
|
1742
|
+
"valorRendimentoLiquido": "Valor Rendimento Líquido",
|
|
1743
|
+
"valorSaldoMesAnterior": "Valor Saldo Mês Anterior",
|
|
1744
|
+
"quantidadeCotaMesAnterior": "Quantidade Cota Mês Anterior",
|
|
1745
|
+
"dataSaldoMesAnterior": "Data Saldo Mês Anterior",
|
|
1746
|
+
"numeroLancamento": "Número Lançamento",
|
|
1747
|
+
"dataLancamento": "Data Lançamento",
|
|
1748
|
+
"descricao": "Descrição",
|
|
1749
|
+
"valorLancamento": "Valor Lançamento",
|
|
1750
|
+
"valorIR": "Valor IR",
|
|
1751
|
+
"valorPrejuizo": "Valor Prejuízo",
|
|
1752
|
+
"valorIOF": "Valor IOF",
|
|
1753
|
+
"quantidadeCota": "Quantidade Cota",
|
|
1754
|
+
"valorCota": "Valor Cota Lançamento",
|
|
1755
|
+
"saldoCotas": "Saldo Cotas",
|
|
1756
|
+
"valorBaseCalculoIR": "Valor Base Cálculo IR",
|
|
1757
|
+
"numeroDocumentoLancamento": "Número Documento Lançamento",
|
|
1758
|
+
},
|
|
1759
|
+
)
|
|
1760
|
+
|
|
1761
|
+
df["Código Programa Governo"] = res["codigoProgramaGoverno"]
|
|
1762
|
+
df["Nome Programa Governo"] = res["nomeProgramaGoverno"]
|
|
1763
|
+
df["Código SubPrograma Governo"] = res["codigoSubProgramaGoverno"]
|
|
1764
|
+
df["Nome SubPrograma Governo"] = res["nomeSubProgramaGoverno"]
|
|
1765
|
+
|
|
1766
|
+
return df
|
|
1767
|
+
|
|
1768
|
+
def get_extrato_poupanca(
|
|
1769
|
+
self,
|
|
1770
|
+
agencia: str,
|
|
1771
|
+
conta_corrente: str,
|
|
1772
|
+
variacao_poupanca: str,
|
|
1773
|
+
codigo_variacao: int,
|
|
1774
|
+
) -> pd.DataFrame:
|
|
1775
|
+
access_token = self._get_access_token()
|
|
1776
|
+
|
|
1777
|
+
res = requests.request(
|
|
1778
|
+
"GET",
|
|
1779
|
+
f"{self._api_domain}/accountability/v3/extratos/{agencia}-{conta_corrente}/poupanca/{variacao_poupanca}/orgao-controle",
|
|
1780
|
+
headers=common._get_headers(access_token),
|
|
1781
|
+
params={
|
|
1782
|
+
"gw-dev-app-key": self._app_key,
|
|
1783
|
+
"codigoVariacao": codigo_variacao,
|
|
1784
|
+
},
|
|
1785
|
+
)
|
|
1786
|
+
|
|
1787
|
+
if res.status_code != 200:
|
|
1788
|
+
raise Exception(
|
|
1789
|
+
"Não foi possível listar as categorias do programa de governo."
|
|
1790
|
+
)
|
|
1791
|
+
|
|
1792
|
+
res = res.json()
|
|
1793
|
+
return common._handle_results(
|
|
1794
|
+
res,
|
|
1795
|
+
main_list="listaLancamentos",
|
|
1796
|
+
insertables=[
|
|
1797
|
+
"codigoProgramaGoverno",
|
|
1798
|
+
"nomeProgramaGoverno",
|
|
1799
|
+
"codigoSubProgramaGoverno",
|
|
1800
|
+
"nomeSubProgramaGoverno",
|
|
1801
|
+
"nomeCliente",
|
|
1802
|
+
"identificadorCliente",
|
|
1803
|
+
"saldoAnterior",
|
|
1804
|
+
"saldoAtual",
|
|
1805
|
+
"saldoBloqueado",
|
|
1806
|
+
"saldoDisponivel",
|
|
1807
|
+
],
|
|
1808
|
+
rename_dict={
|
|
1809
|
+
"codigoProgramaGoverno": "Código Programa Governo",
|
|
1810
|
+
"nomeProgramaGoverno": "Nome Programa Governo",
|
|
1811
|
+
"codigoSubProgramaGoverno": "Código SubPrograma Governo",
|
|
1812
|
+
"nomeSubProgramaGoverno": "Nome SubPrograma Governo",
|
|
1813
|
+
"nomeCliente": "Nome Cliente",
|
|
1814
|
+
"identificadorCliente": "Identificador Cliente",
|
|
1815
|
+
"saldoAnterior": "Saldo Anterior",
|
|
1816
|
+
"saldoAtual": "Saldo Atual",
|
|
1817
|
+
"saldoBloqueado": "Saldo Bloqueado",
|
|
1818
|
+
"saldoDisponivel": "Saldo Disponível",
|
|
1819
|
+
"dataLancamento": "Data Lançamento",
|
|
1820
|
+
"dataMovimento": "Data Movimento",
|
|
1821
|
+
"diaLancamento": "Dia Lançamento",
|
|
1822
|
+
"codigoHistorico": "Código Histórico",
|
|
1823
|
+
"descricaoHistorico": "Descrição Histórico",
|
|
1824
|
+
"indicadorDebitoCredito": "Indicador Débito Crédito",
|
|
1825
|
+
"agenciaOrigem": "Agência Origem",
|
|
1826
|
+
"numeroDocumento": "Número Documento",
|
|
1827
|
+
"valorLancamento": "Valor Lançamento",
|
|
1828
|
+
},
|
|
1829
|
+
)
|
|
1830
|
+
|
|
1831
|
+
def get_contas_correntes(
|
|
1832
|
+
self,
|
|
1833
|
+
numero_registro: str,
|
|
1834
|
+
) -> pd.DataFrame:
|
|
1835
|
+
access_token = self._get_access_token()
|
|
1836
|
+
|
|
1837
|
+
res = requests.request(
|
|
1838
|
+
"GET",
|
|
1839
|
+
f"{self._api_domain}/accountability/v3/conta-corrente/orgaos-controle",
|
|
1840
|
+
headers=common._get_headers(access_token),
|
|
1841
|
+
params={
|
|
1842
|
+
"gw-dev-app-key": self._app_key,
|
|
1843
|
+
"numeroRegistro": numero_registro,
|
|
1844
|
+
},
|
|
1845
|
+
)
|
|
1846
|
+
|
|
1847
|
+
if res.status_code != 200:
|
|
1848
|
+
raise Exception(
|
|
1849
|
+
"Não foi possível listar as categorias do programa de governo."
|
|
1850
|
+
)
|
|
1851
|
+
|
|
1852
|
+
res = res.json()
|
|
1853
|
+
return common._handle_results(
|
|
1854
|
+
res,
|
|
1855
|
+
main_list="listaContaCorrente",
|
|
1856
|
+
insertables=[
|
|
1857
|
+
"numeroRegistroConsultar",
|
|
1858
|
+
"quantidadeContaCorrente",
|
|
1859
|
+
],
|
|
1860
|
+
rename_dict={
|
|
1861
|
+
"numeroRegistroConsultar": "Número Registro Consultar",
|
|
1862
|
+
"quantidadeContaCorrente": "Quantidade Conta Corrente",
|
|
1863
|
+
"codigoProgramaGoverno": "Código Programa Governo",
|
|
1864
|
+
"nomeProgramaGoverno": "Nome Programa Governo",
|
|
1865
|
+
"cnpj": "CNPJ",
|
|
1866
|
+
"agencia": "Agência",
|
|
1867
|
+
"nomeAgencia": "Nome Agência",
|
|
1868
|
+
"contaCorrente": "Conta Corrente",
|
|
1869
|
+
},
|
|
1870
|
+
)
|