Takes the transactions .csv from your bank and a toml config as argument. Outputs a pie(?) chart of expenses by category

Config

In which the categories are set up, and the format is described

# for a two-column statement where all amounts are +ve
# - blank cells are skipped
# - assume all amounts are positive
[xlsx]
sheet = "ListaMovimenti"
skip_rows = 12
description_column = 4 # "E"
amount_out_column = 2 # "C"
amount_in_column =  3 # "D"

# for single column statement
# - blank cells produce an error
# - assumes money out is -ve and money in is +ve
# [xls.bank2]
# sheet = "Movimenti CC"
# skip_rows = 9
# description_column = 4 # "E"
# amount_column = 5 # "F"

[numbers]
separator_thousands = "." # default ","
separator_decimal = ","   # default "."


[categories.ignore]
ignore = true
description_regex = [
  "BONIFICO.*IN ENTRATA.*DA MARTINO VISINTIN",
  "VOSTRO BONIFICO.*BENEFICIARIO: VISINTIN"
]

[csv.description.categories.groceries]
description_regex = [
  "SUPERMERCATO",
  "EUROSPAR",
]

[categories.games]
description_regex = [
  "steam",
]

[categories.online_shopping]
description_regex = [
  "AMZN Mktp",
  "Amazon Prime",
  "AMZ*",
  "ALIEXPRESS",
  "PAYPAL",
]

[categories.salary]
description_regex = [
  "BONIFICO DEL.+PER STIPENDIO",
]

[categories.banking_fees]
description_regex = [
  "CANONE CONTO",
  "IMPOSTA BOLLO",
  "SPESE PER BONIFICO",
  "ADDEBITO SPESE RAPPORTO IN TITOLI",
  "COMMISSIONI E SPESE SU OPERAZIONI CON L'ESTERO"
]

[categories.savings]
description_regex = [
  "SOTTOSCRIZIONE TITOLI E/O FONDI COMUNI",
]

[categories.medical]
description_regex = [
  "FARMACIA",
  "DENTALTEAM",
]

[categories.social]
description_regex = [
  "ANTICA CONTEA BIRRIFIC",
]

Output: CSV

+2000.00,salary
-8.80,social
-25.37,social
-200.00,savings
-75.42,medical

Output: Chart

A piechart or an alternative.

🧱 Building aids