Movimenti bancari Unicredit: importare automaticamente spese bancarie
Appunto personale. Su questo ci lavorerei volentieri. (Follow-up da direttivo#44)
Guardando meglio i movimenti bancari in formato "testo con delimitatori" di Unicredit sembra ci sia un pattern per le spese bancarie:
Situazione al 18.12.2024 ore 16:57:10 del Conto Corrente IT 74 G 02008 12609 000100129899 - ILS ITALIAN LINUX SOCIETY
Saldo Euro 14,601.69 a CREDITO
Ultimi movimenti registrati
Data;Valuta;Descrizione;Euro;Caus.
16/12/2024;16/12/2024;DISPOSIZIONE DI BONIFICO BONIFICO SEPA A ROMA2LUG - TOR VERGATA LINUX USERS PER Rimborso spese 68 COMM 0,74 SPESE 0,00 TRN YYY;-1,065.73;208
11/12/2024;11/12/2024;BONIFICO A VOSTRO FAVORE BONIFICO SEPA DA XXXX PER Quota annuale prima iscrizione XXX TRN YYY;25.00;048
Quindi per esempio il primo movimento ha 0.74 EUR di commissioni (COMM
). Non mi è chiara la differenza con SPESE
. Probabilmente nel nostro caso le dobbiamo sommare e importarle come una singola Spesa bancaria.
Sarebbe proprio utile importarle, perché altrimenti dobbiamo sempre ricostruirle a mano a fine anno. Questa cosa non semplifica il calcolo annuale di quanto ci costa Unicredit. Se potessimo già saperlo per ogni movimento avremmo già la stima in tempo reale giusta, come per ogni altra cosa.
Quindi probabilmente possiamo lanciare questa espressione regolare (sperando non arrivi mai alle migliaia lol - non so come verrebbe):
/ SPESE ([\d]+,[\d]+) /
/ COMM ([\d]+,[\d]+) /
Test:
https://regex101.com/r/AUm6VC/1
https://regex101.com/r/9QZgOS/1
E poi applicando una normalizzazione molto rigida tipo:
function normalize_unicredit_amount(string $amount_raw): string
{
$parts = explode(',', $amount_raw, 2);
if (count($parts) !== 2) {
throw new Exception(sprintf(
"Cannot parse Unicredit number in a safe way: maybe you should try an Italian browser web. LOL. Raw value: %s",
$amount_raw
));
}
list($a, $b) = $parts;
if (filter_var($a, FILTER_VALIDATE_INT) === false) {
throw new Exception(sprintf(
"Cannot parse Unicredit number in a safe way: maybe there is an unexpected thousand separator. LOL. Raw value: %s",
$amount_raw
));
}
if (filter_var($b, FILTER_VALIDATE_INT) === false) {
throw new Exception(sprintf(
"Cannot parse Unicredit number in a safe way: maybe there is an unexpected decimal separator. LOL. Raw value: %s",
$amount_raw
));
}
return sprintf('%d.%d', $a, $b);
}
Credo sia abbastanza importante non limitarsi a fare una sostituzione