Firefly III – Gestor de finances personals

Suposo que potser molts el coneixeu, Firefly III és un servei que podem disposar per gestionar les nostres finances. Un gestor que ens ajudarà a comprendre els nostres comptes bancaris, podrem comprendre fàcilment on se'ns va els diners, per suposat open source i on-premise!

Bo, doncs això, si necessiteu tenir més visibilitat sobre els vostres comptes bancaris, o tenir un major seguiment d' ingressos i despeses, FireFly III porta anys ajudant en aquest sentit. El tindrem instal·lat en menys de 5 minuts gràcies a Docker!

Existeixen diverses formes d'instal·lar Firely III (i de configurar-lo), sobre la base del que necessitem; en aquest cas instal·larem Firefly III en un contenidor de Docker, abans de procedir ens descarreguem els fitxers que necessitarem i els adaptarem a la nostra necessitat:

wget https://raw.githubusercontent.com/firefly-iii/docker/main/docker-compose-importer.yml -O docker-compose.yml wget https://raw.githubusercontent.com/firefly-iii/firefly-iii/main/.env.example -O .env wget https://raw.githubusercontent.com/firefly-iii/docker/main/database.env -O .db.env wget https://raw.githubusercontent.com/firefly-iii/data-importer/main/.env.example -O .importer.env

Editem el fitxer '.env’ i almenys modificarem la APP_KEY, locals i els credencials d'accés a la BD de MySQL, ja que aquest fitxer disposarà de la major part de la configuració, la part de correu si volem notificacions…

APP_KEY=secretrode32caracteres DEFAULT_LANGUAGE=es_ES TZ=Europe/Madrid
...
DB_USERNAME = USUARIO_BD DB_PASSWORD = CONTRASEÑA_USUARIO_BD
...

Editem el fitxer '.db.env.’ i almenys modifiquem les credencials d'accés a la BD (els mateixos que en el pas anterior):

MYSQL_USER = USUARIO_BD MYSQL_PASSWORD = CONTRASEÑA_USUARIO_BD

Finalment, si ens interessa tenir el contenidor per importar dades a Firefly editem '.importer.env’ (i si no, això ho obviem). I indicarem l'adreça IP o FQDN del servidor Firefly III, així com triarem la forma d'autentiar-nos, habitualment amb l'Access Token (més endavant veiem com generar-ho):

FIREFLY_III_URL = http://IP_O_FQDN_FIREFLY_III FIREFLY_III_ACCESS_TOKEN = ey.....
TZ=Europe/Madrid

I acabem editem el 'docker-compose.yml’ si és que ens interessa realitzar algun canvi, en el meu cas únicament obri els ports, el 80tcp per a FireFly III, el 81 de 3306 ho deixo obert per consultar el MySQL des de fora, per exemple des de Grafana, quedant:

services:
...
  app:
...
    ports:
      - '80:8080'
...
...
  db:
...
    ports:
      - '3306:3306'
...
...
  importer:
...
    ports:
      - '81:8080'
...

Y, ja aixecant els contenidors:

docker compose -f docker-compose.yml up -d --pull=always

Ja podrem accedir al web de Firefly, en aquest cas publicat al port 80 de la IP del host de Docker, així que http://DIRECCION_IP_O_FQDN i la primera vegada que entrem hem de crear-nos un compte, indiquem la nostra adreça de correu i una contrasenya & “Register”,

Segons entrem haurem de donar d'alta el nostre primer Banc, i ja podrem començar a donar-li una ullada a l'aplicació, però sense dades queda una cosa pobra… així que el següent serà importar les dades del nostre banc!

Abans de res, hem de decidir el tipus d'autenticació que farem servir al contenidor de 'Firefly III Data Impor Tool', el més senzill és que generem un Token d'accés personal des de Firefly III i li ho indiquem a l'importer.’

Si tornem a regenerar els contenidors i ens connectem a la web del 'Firefly III Data Impor Tool’ (en el meu cas al port 81tp) podrem començar el procés d'importació, posem en “Import file”,

A 'Importable file’ deixarem el fitxer CSV que ens haurem descarregat del nostre banc, amb tot l'històric que ens interessi dels moviments. El fitxer de configuració opcional que ens demana, per ara no el tindrem, però un cop acabem aquest assistent, ho podrem generar, un fitxer JSON que estarà alimentat de les opcions que vam triar a continuació, “Next”,

Indiquem si el fitxer CSV té encapçalats, si volem convertir-lo a UTF-8, quin és el delimitador del CSV, en què ho vam importar de FireFly III, format de la data… “Submit”,

Depenent les opcions triades anteriorment ja ens mostrarà el contingut del nostre fitxer i ens separarà les columnes… podrem ignorar les columnes que no ens interessin importar (per suposat), i associarem el rol de cada columna, almenys importarem els camps de 'Transaction date', 'Description’ i 'Amount'. “Submit”,

Abans de començar, podrem polsar en “Download configuration file” per no haver de fer aquest assistent i acordar-nos del format que porta, o per automatitzar aquesta importació a futur. Posem en “Start job” per començar,

Veiem com importa els moviments del CSV… esperem…

Un cop acabi ens ho indicarà, perfecte!

Comencem a tenir dades! Ole i ole Rigodón! Ara ja podrem veure amb més detall qualsevol informe, etc.…

El següent, pot ser configurar les Categories, per saber on se'ns va els diners! perquè categoritzi cada moviment i digui si és hipoteca, despesa del supermercat, de gasolina, d' Amazon…

Des de “Automatització” > “Regles” les podrem crear, la configuració és senzilla, li indiquem un nom i quan volem que s'activi, quan detecti alguna paraula en la Descripció, per exemple…

I aquí us deixo amb Firefly III, donar unes voltes que és molt senzill; després els formalets, els informes queden més elegants, comprenem on se'ns va el nostre pressupost d'una manera més detallada. Aquests que veieu a dalt és d'una app també open source que podem instal·lar als nostres mòbils (anomenada Waterfly III) que es connecti FireFly III i potser és més còmoda…

Y… espera que no hem acabat! Us acordeu que al contenidor de la BD de MySQL li deixem el 3306% obert? Bo doncs amb els credencials d'accés podrem connectar-nos i fer consultes, com ens interessi i veure'l de manera preciosa i al gust des de Grafana, per categories, o simplement els moviments… però no només per veure-ho des de Grafana, si no que amb el friki que sóc, se'm genera un PDF diari i aquesta informació m'hi ve, entre altres coses més com puguin ser detalls interessants de Home Assistant (estadístiques…)

Per cert, els números que veiem, són fakes, a part que estan mig tapats perquè no sàpiga les xifres que s'han, no puc dir tan públicament els milions que tinc). Vingui, al gra, el que necessiti les queries de MySQL:

  • Gràfica amb el total:
SELECT tj.date as time, "Total" as metric, SUM(t.import) SOBRE (COMANDA PER tj.date ASC) AS value
FROM transactions t INNER JOIN transaction_journals tj ON t.transaction_journal_id = tj.id
WHERE t.account_id = 'TU_ID_DEL_BANCO' ORDER BY tj.date ASC;

  • Gràfica amb moviments:
SELECT tj.date as time, t.import com a valor, tj.description as metric
FROM transactions t INNER JOIN transaction_journals tj ON t.transaction_journal_id = tj.id
WHERE t.account_id = 'TU ID DEL BANCO' ORDER BY tj.date ASC;

  • Taula de moviments:
SELECCIONA t.import, tj.descripció, ESQUERRA(tj.date, 10) com a data, SUM(t.import) SOBRE (COMANDA PER tj.date ASC) AS Total
FROM transactions t INNER JOIN transaction_journals tj ON t.transaction_journal_id = tj.id
WHERE t.account_id = 'TU ID DEL BANCO' ORDER BY date desc;

Y esperar que se me olvida lo más important! ¿Com automatitzamos això? pues si tens sort i el teu banc et permet connectar-te d'alguna manera, per API, etc.… bé, si no, hi ha algun servei de tercers (de pagament i extern) que et podria ajudar… Una altra forma és nosaltres manualment descarregar-nos els fitxers setmanalment i deixar-los sempre en la mateixa ruta, que després un script els import (hi ha un contenidor de cron), o usant alguna eina que ens gravi els clicks, entre al banc i generi l'informe… aquesta última és la meva opció personal. És molt cutre la veritat, tinc una MV aïllada, sense accés a Internet (res més que als llocs dels bancs)… i diàriament s'executa un Tiny Task (ull) que genera els informes, com cada banc és del seu pare, uns es generen en CSV, altres en XLS i altres en XLSX (toca't els…) així que us deixo alguns tips que tinc en un script que us poden ajudar:

#Converteix de XLSX a CSV i fa servir el ; com a separador:
    xlsx2csv -d ';' fichero.xlsx fichero.csv

#Convierte de XLS a CSV sin perder el formato de las fechas:
    lliureoffice --convert-to csv fichero.xls #Borra les primeres 15 línies:
    sed -i '1,15d' fichero.csv

#Importa el csv que hay en la carpeta actual con el JSON de configuración, ambdós fitxers s' anomenen igual:
    sudo docker run --rm -v $PWD:/import -e FIREFLY_III_ACCESS_TOKEN=ey..... -e IMPORT_DIR_ALLOWLIST=/import -e FIREFLY_III_URL=http://IP_FQDN_FIREFLY_III -e WEB_SERVER=false fireflyiii/data-importer:latest

Amb aquest últim comandament importarem el CSV al Banc indicat al JSON una maravilla! Evitant moviments duplicats, etc.… L'últim (i ja de veritat), les queries de MySQL que hem vist abans, ens poden venir molt bé per integrar-lo amb Home Assistant, i que ens digui mentre esmorzarem pels nostres altaveus el saldo que tenim en els comptes, així com els últims moviments… tela marinera!!!

Vingui, ara ja si que us deixo en pau, desitjar-vos que vagi molt bé, que treballeu poc i guanyeu molt 😉 una abraçada!

Posts recomanats

Autor

nheobug@bujarra.com
Autor del blog Bujarra.com Cualquier necesidad que tengas, no dubtis a contactar amb mi, us intentareu ajudar sempre que pugui, compartir és viure ;) . Gaudir dels documents!!!