[gnucash-br] Github para melhor colaboração no programa que Exporta CVS da Fatura do Nubank

yulli dias yulli.dias em hotmail.com
Sáb Fev 22 12:28:49 EST 2020


Boa tarde Danilo, tudo bem?

Também sou uma usuário assidua do Nubank 💜 !!  Atualmente estou fazendo os lançamentos manualmente e tenho muito interesse um usar e contribuir com seu código. Que tal colocar no Github?

Programo em python há 3 anos, acho que vou poder contribuir bastante! 😄

Att,

--

Yulli Dias

Graduanda em Engenharia de Computação - CEFET-MG

yulli.dias em hotmail.com<mailto:yulli.dias em hotmail.com>

LinkedIn<https://www.linkedin.com/in/yullidias/>  GitHub<https://github.com/yullidias>  Lattes <http://lattes.cnpq.br/4604197134660281>

________________________________
De: gnucash-br <gnucash-br-bounces+yulli.dias=hotmail.com em gnucash.org> em nome de gnucash-br-request em gnucash.org <gnucash-br-request em gnucash.org>
Enviado: sábado, 22 de fevereiro de 2020 14:00
Para: gnucash-br em gnucash.org <gnucash-br em gnucash.org>
Assunto: Digest gnucash-br, volume 122, assunto 3

Enviar submissões para a lista de discussão gnucash-br para
        gnucash-br em gnucash.org

Para se cadastrar ou descadastrar via WWW, visite o endereço
        https://lists.gnucash.org/mailman/listinfo/gnucash-br
ou, via email, envie uma mensagem com a palavra 'help' no assunto ou
corpo da mensagem para
        gnucash-br-request em gnucash.org

Você poderá entrar em contato com a pessoa que gerencia a lista pelo
endereço
        gnucash-br-owner em gnucash.org

Quando responder, por favor edite sua linha Assunto assim ela será
mais específica que "Re: Contents of gnucash-br digest..."


Tópicos de Hoje:

   1. Exportar CVS da Fatura do Nubank (usando pynubank)
      (Danilo Freitas da Costa)


----------------------------------------------------------------------

Message: 1
Date: Sat, 22 Feb 2020 02:02:34 -0300
From: Danilo Freitas da Costa <danfcosta em gmail.com>
To: Lista Gnucash-br <gnucash-br em gnucash.org>
Subject: [gnucash-br] Exportar CVS da Fatura do Nubank (usando
        pynubank)
Message-ID:
        <CAEvrNQV1pOqrT+1aSMKN8iv85bnEoCCMVU0rMRe-FS4dC-cd_Q em mail.gmail.com>
Content-Type: text/plain; charset="utf-8"

Pessoal,

Eu sou um usuário assíduo do Nubank há vários anos, desde o "primeiro lote"
de clientes.

E nesse tempo todo eu faço sempre um trabalho manual de estruturar os
registros para importar para o GnuCash. Eu faço esse trabalho sacal pelos
seguintes motivos:

1) A cada fatura a data que aparece em uma compra, nem sempre é a dada do
dia que ela realmente aconteceu. Numa compra a vista, aparece ou a data do
mesmo dia ou do dia seguinte.
2) Quando a compra é parcelada, ele mostra a data em que foi processado
naquele mês. Ou seja olhando para a fatura, você não faz ideia qual foi a
data da compra.
3) Eu sempre formato o descritivo da compra para mostrar a Data +
Descritivo + Parcela. Exemplo: 2020-02-08 - Estabelecimento XPTO (1/3)

Então resolvi criar um script em python para fazer esse trabalho por mim e
gerar um CSV.

OBS: Tem muito tempo que não programo (pelo menos a lógica ainda está
fresca). Meu conhecimento em Python tende a ZERO.

Compartilho com vocês o script abaixo. Para os entendidos de python, favor
não me esculhambar (ver OBS acima).
Fiquem à vontade para incrementar e fazer os devidos tratamentos de erro
(nem me preocupei com isso). Foco no MVP!
Próximos passos, se eu tiver vontade (e saco), gerar OFX.

# Monta arquivo CSV com extrato de fatura em formato CSV
#
# Cada linha do CSV possui
# DATA = data da fatura, no formato YYYY-MM-DD
# DESCRICAO = <DATA DA COMPRA> - <DESCRICAO> <(X/Y)>, onde:
# <DATA DA COMPRA> = data original em que foi feita a compra
# <DESCRICAO> = descritivo que vem na fatura (transacao)
# <(X/Y)> = se a compra for parcelada, X é a parcela corrente e Y é o total
de parcelas
# Exemplo: 2020-02-08 - Estabelecimento XPTO (1/3)
# VALOR = valor do item na fatura
#
# Exemplo de linha no CSV:
# 2020-03-05;2020-02-08 - Estabelecimento XPTO (1/3);50,00
#
# Forma de uso
# python extrato.py <CPF> <SENHA> <DATA NO FORMATO YYYY-MM-DD>
#
# Dependência do pynubank (versao 1.0.1 que dá suporte ao QRCode)
# https://github.com/andreroggeri/pynubank/tree/1.0.1

from pynubank.nubank import Nubank

import sys
import locale
locale.setlocale(locale.LC_ALL, 'pt_BR.UTF-8')

cpf = sys.argv[1]
pwd = sys.argv[2]
bill_date = sys.argv[3]
output_file_path = 'COLOCAR O CAMINHO DO ARQUIVO CSV AQUI'

#busca fatura com base em uma data
def get_bill_by_date(bills, date):
for b in bills:
if b['summary']['due_date'] == date:
return b
return None

#busca transacao com base no id (href)
def get_transaction_by_id(transactions, id):
for t in transactions:
if t['href'] == id:
return t
return None

#formata a descricao da transacao
def get_formated_description(bill_item, transaction):
description = '{} - {}'.format(transaction['time'][:10], bill_item['title'])
if bi['charges'] > 1:
description = description + ' ({}/{})'.format(bi['index'] + 1, bi['charges'
])
return description

nu = Nubank()
uuid, qr_code = nu.get_qr_code()
qr_code.print_ascii(invert=True)
input('Após escanear o QRCode pressione enter para continuar')

# Somente após escanear o QRCode você pode chamar a linha abaixo
nu.authenticate_with_qr_code(cpf, pwd, uuid)

#recupera as transacoes
nubank_transactions = nu.get_card_statements()

#recupera as faturas
nubank_bills = nu.get_bills()

#busca fatura com base em uma data
nubank_bill = get_bill_by_date(nubank_bills, bill_date)

#recupera os detalhes da fatura
nubank_bill_details = nu.get_bill_details(nubank_bill)

csv_output = open(output_file_path,'w')
csv_output.write('DATA;DESCRICAO;VALOR')

for bi in nubank_bill_details['bill']['line_items']:
if 'href' in bi:
t = get_transaction_by_id(nubank_transactions, bi['href'])
row = '\n' + bill_date + ';'
row += get_formated_description(bi, t) + ';'
row += locale.currency(bi['amount'] / 100, grouping=True, symbol=None)
csv_output.write(row)

csv_output.close()

Atenciosamente,

*Danilo Freitas da Costa*
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://lists.gnucash.org/pipermail/gnucash-br/attachments/20200222/286bbb27/attachment-0001.html>

------------------------------

Subject: Legenda do Digest

_______________________________________________
gnucash-br mailing list
gnucash-br em gnucash.org
https://lists.gnucash.org/mailman/listinfo/gnucash-br


------------------------------

Fim da Digest gnucash-br, volume 122, assunto 3
***********************************************
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://lists.gnucash.org/pipermail/gnucash-br/attachments/20200222/e2ba277c/attachment-0001.html>


Mais detalhes sobre a lista de discussão gnucash-br