Business Intelligence – Un cas pràctic – Fundació Guifi.net

La Fundació guifi·net (https://fundacio.guifi.net) és un projecte tecnològic, social i econòmic impulsat des de la ciutadania que té per objectiu la creació d'una xarxa de telecomunicacions oberta, lliure i neutral basada en un model de comuns. El desenvolupament d'aquesta infraestructura mancomunada facilita l'accés a les telecomunicacions en general i a la connexió a Internet de banda ampla en particular, de qualitat, a un preu just i per a tothom. A més, genera un model d'activitat econòmica col·laborativa, sostenible i de proximitat.

Necessitats

Guifi.net té un conjunt d’operadors que operen en diferents zones. A la vegada aquestes xarxes estan constituïdes per clients que contracten diferents productes. El preu d’aquests productes pot dependre del perfil del client (ex. si ha fet una donació prèvia al projecte, o no).

Des de Guifi.net es volia:

  • Poder calcular de forma automàtica a Odoo les factures a generar a cadascun dels operadors.
  • Poder controlar la viabilitat econòmica de cadascun dels projectes (conjunt d’operador+zona).
  • Donar visibilitat als operadors del detall de la factura, abans de generar-la, per si calia corregir algun error.

Les dades per a generar la facturació estaven en diferents sistemes.

Per una banda, hi ha l’ERP en Odoo, que té, entre altra informació, les dades dels operadors i els productes. A més l’Odoo és l’eina on generar la facturació.

Per altra banda, hi ha el sistema Networks, que té, entre altres dades, la relació de clients a cada xarxa i els productes contractats.


Solució

Per a poder solucionar cadascun dels punts s’ha optat per les següents accions:

  • Tenir un procediment que crida a un endpoint d’Odoo que genera les factures en esborrany a Odoo.
  • Tenir informes a Superset per cada zona on mostra les dades agregades, separades per CAPEX, OPEX/Facturació.
  • Tenir un informe a Superset per cada operador i zona del detall de productes a facturar i l’agregat per producte.
  • Configurar els usuaris a Superset per tal que puguin executar l’informe anterior, però només veient les seves dades.

Solució tècnica

Per a poder fer tots els càlculs calia unir les dades de l’Odoo amb Networks, però els noms no estaven normalitzats entre els 2 sistemes, amb el que calien taules de traducció entre ells.

Per a poder accedir als dos sistemes, i també a les taules de traducció, hem utilitzat l’arquitectura habitual en els projectes de Business Intelligence (PostgreSQL amb Foreign Data Wrapper per a l’accés i emmagatzematge de dades + DBT per als processos de càrrega + Airflow per al control de processos + Superset per a la visualització d’informes).

L’accés a Odoo es fa mitjançant la configuració del Foreign Data Wapper directament a la base de dades. L’accés a Networks es fa mitjançant una crida a una API de guifi.net en Python, orquestrada amb l’Airflow. I l’accés a les taules de traduccions es fa mitjançant la configuració del Foreign Daata Wrapper de fitxers que estan en un SFTP.

Un cop tenim l’accés a totes les dades, es fa l'encreuament amb diverses taules de DBT, per a poder calcular quines persones estan a cada xarxa i amb quin producte, i poder-ho unir amb les dades de l'Odoo. També des de DBT es calcula l’OPEX, CAPEX i facturació de cada zona.

A partir de les dades calculades amb DBT i emmagatzemades a Postgres, es creen els diferents informes en Superset. En aquest cas, són informes molt operatius i s’ha optat per una visualització en forma de taula, més que en una visualització més gràfica.

Després s’ha configurat a Superset cadascun dels usuaris perquè puguin veure les dades directament als Superset només de la seva zona. Aquesta configuració s’ha fet mitjançant la característica de Row Level Security que ofereix Superset.

Per a la generació de les factures a Odoo, un cop unides les dades d’Odoo i Networks, s’ha generat un procediment en Python, orquestrat a través d’Airflow, que cada mes invoca a una API interna de l'Odoo per a la generació de les factures.


Amb aquesta solució tècnica hem donat resposta a les necessitats de Guifi.net sobre el control de la facturació i els seus projectes.

Com sempre, podeu trobar el codi generat al nostre git: https://git.coopdevs.org/coopdevs/bi/guifinet




FOSDEM'26