Skip to content

Latest commit

 

History

History
109 lines (65 loc) · 7.75 KB

README.md

File metadata and controls

109 lines (65 loc) · 7.75 KB

Bot Financeiro

Build status Codacy Badge Codacy Badge Maintainability Code style: black GitHub Dependabot Status

Eu fiz isso porque

A muitos anos eu faço meu controle financeiro, para tal, eu utilizei e busquei muitas ferramentas para me ajudar, antes mesmo de existir os smartfones, quem aí já usou o Microsoft Money?, então, eu já. O problema com todas as soluções que eu vi é que elas têm que se tornar o mais genérica possível para poder atingir o máximo de pessoas, isso acaba tornando elas difíceis de usar ou no melhor cenário, pedir muitas informações para fazer um lançamento.

No meu caso, como eu acredito que é o mesmo que a maioria de pessoas que tenta um controle pessoal, não tenho tempo para cadastrar cada transferência bancária, recarga de cartão de transporte, etc.

A solução para meu problema foi reduzir o máximo possível de informações que eu vou controlar. Cheguei ao mínimo necessário para conseguir tirar os relatórios que eu preciso, por exemplo, eu não me importo em onde está o dinheiro, cartão de alimentação, cartão de transporte e conta bancária são a mesma coisa, afinal, tudo é dinheiro.

Objetivo

  • Ao cadastrar o que se gasta você passar a ser mais responsável para gastar
  • Saber o que é custo fixo e o que é variável, variável é o que você pode parar de gastar para economizar.
  • Saber onde você gasta mais.

Com os itens acima você vai conseguir três coisas muito importantes:

Primeiro que cadastrando cada gasto e ganho de dinheiro você passa a questionar se o gasto é realmente necessário e se alegra com cada entrada de dinheiro, mesmo sendo apenas um real de lucro com investimento da sua poupança.

Segundo, vai poder estipular metas para não gastar mais de X reais no mês e para controlar esse gasto no seu dia a dia você pode filtrar todos os custos variáveis e pode combater o excesso de gastos onde realmente pode ser combatido.

Terceiro, ao saber onde você mais gasta dinheiro é possível questiona a médio prazo as decisões que você tem tomado, exemplo: vale a pena pagar esse aluguel mesmo? Eu não vou na varanda a um mês, será que seria possível economizar três mil reais em um ano morando em um lugar sem a varanda? Será que eu preciso desse plano pós pago de telefone? E essa internet de quatro milhões de megas?

Banco de dados

A ideia é ter uma grande tabela com todos os dados e a partir dela extrair os dados, simples assim. Para isso funcionar nós, temos:

Records onde todos os movimentos financeiros são cadastrados, alguns campos são tabelados para organizar os relatórios, esses campos são: TypeEntry (Fixo e Variável), FamilyMember (Membos da sua família, Ricardo, Isabele, etc), Category (Casa, Carro, Trabalho, etc).

Planilha Google

Data Lanc - Data Fatura - Débito - Crédito - Total - Categoria - Nome - Descrição - Tipo de custo

Sendo que Total é uma coluna de formula que o bot deixa em branco. Isso é feito via API do Google e pelo pacote google-api-python-client

Atualmente o código para alimentar o google está comentádo. Estou fazendo o BI usando o Google Data Studio conectado direto no banco de dados

Comandos para o bot

Em FullCommand você pode cadastrar comandos para usar no bot. Vou detalhar como funciona cada campo:

  • Comando: É exatamente o que você precisa digitar no bot, basicamente o bot faz uma query no que você digitou e nesse campo, se achar, ele executa.

  • Data de Lançamento: Usa data do dia?: Se marcado ele vai colocar a data de lançamento com a data atual, se não marcar ele vai te perguntar a data.

  • Data de Pagamento: É a data de pagamento daquele lançamento, quando realmente o dinheiro sai da sua conta, as opções são:

    • Data do dia: Vai utilizar a data atual
    • Data do Cartão (15): Se a data atual for dia 8 ou maior ele vai lançar a saída para o dia 15 do mês seguinte, se menor que dia 8 vai usar o dia 15 do mês atual. (Criar issues para melhorar isso) Perguntar: Vai te perguntar qual data usar.
    • Dia Seguinte, Mês Seguinte, Dia 5 mês vigente, Dia 5 mês que vem já são auto explicativos.
  • Débito: É o valor de débito que ele vai usar, vazio e ele vai te perguntar o valor.

  • Crédito: É o valor de crédito que ele vai usar, vazio e ele vai te perguntar o valor.

Categoria, Nome, Descrição e Tipo são os valores padrões usados, se não informados, ele vai perguntar

Existem limitações na data de cartão de crédito sobre a data do dia bom e do dia de pagamento. Ideias para resolver essas datas.

Agendamentos

O projeto tem um sistema de agendamentos para o bot lembrar de alguns lançamentos, para isso eu implementei um Django Q e dentro do arquivo schedule.py existe um metodos para ser executado recebendo uma string com o seguinte formato:

{
  "verify": {
    "query": { "debit": 12, "name": 1 },
    "when": "day"
  },
  "days": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
  "message": {
    "user": "769652847",
    "text": "Você ainda não lançou o almoço de hoje! /ar12 /ar19 ou /arv"
  }
}

A estruta acima funciona da seguinte forma:

Se existir a chave verify ele vai executar a query da key na tabela de Records, caso ele encontre alguma coisa ele não vai fazer mais nada. A ideia é você poder cadastrar coisas como: Todo dia às 13h ele vai verificar se você já lançou o seu almoço, caso ele não ache o almoço ele vai passar dessa parte, também pode verificar se esse mês você já cadastrou a conta de luz.

A key message define o que e para quem ele vai enviar a notificação. O user é o usuário do Telegram para quem o bot vai enviar a mensagem que está em text.

Relatórios

Atualmente utilizando o Google Data Studio conectado direto no banco de dados

Meta

O bot possuí uma meta de 770 reais por semana de custo variável, ele vai informar quanto você ainda pode gastar na semana para ficar dentro da meta.

Sentry

O projeto loga os erros no Sentry e para isso você vai precisar configurar um projeto seu. No site deles você acham mais detalhes.

Alelo API

Existe uma app chamada Alelo que tem um comando para alimentar o seu banco de dados com os último 4 meses de lançamento. Você pode agendar a task dessa app que vai pegar todos os lançamentos não processados e criar os devidos lançamento no seu controle.

Nubank API

TODO