diff --git a/commands/income-statement b/commands/income-statement deleted file mode 100755 index 085782c..0000000 --- a/commands/income-statement +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env bash -now="$(date +'%Y%m%d')" -mkdir -p reports/income/$now -bean-report ledger/main.beancount income > reports/income/$now/income.html \ No newline at end of file diff --git a/commands/objectives b/commands/objectives old mode 100644 new mode 100755 diff --git a/commands/portfolio b/commands/portfolio new file mode 100755 index 0000000..8df1d10 --- /dev/null +++ b/commands/portfolio @@ -0,0 +1,73 @@ +#!/usr/bin/env python3 +from beancount import loader +from beancount.query import query +from beancount.parser import printer +import argparse +from tabulate import tabulate +from decimal import Decimal +from beancount.core.amount import Amount, sub, mul, add +from math import floor + +class bcolors: + HEADER = '\033[95m' + OKBLUE = '\033[94m' + OKCYAN = '\033[96m' + OKGREEN = '\033[92m' + WARNING = '\033[93m' + FAIL = '\033[91m' + ENDC = '\033[0m' + BOLD = '\033[1m' + UNDERLINE = '\033[4m' + +def draw_line(): + print('─' * 30) + +def print_report(date, positions): + print(f"{bcolors.BOLD}Portfolio (date={date}){bcolors.ENDC}") + draw_line() + print(f"{bcolors.BOLD}Positions{bcolors.ENDC}") + print(tabulate(map(lambda p: [ + p.account, + p.volume.average().get_only_position().units.number.__round__(2), + f"{p.volume.average().get_only_position().cost.number.__round__(2)} {p.volume.average().get_only_position().cost.currency}", + f"{p.position.get_only_position().units.number.__round__(2)} {p.position.get_only_position().units.currency}"], positions) + , headers=["Actiu", "Quantitat", "Últim preu", "Valor"])) + total = Amount(Decimal(0), 'EUR') + for p in positions: + total = add(total, p.position.get_only_position().units) + print(tabulate([ + ["Total", "", "", f"{total.number.__round__(2)} {total.currency}"] + ])) + print(f"{bcolors.BOLD}Plusvalias / Minusvalias{bcolors.ENDC}") + print(f"{bcolors.BOLD}Distribució geografica / sectors{bcolors.ENDC}") + print(f"{bcolors.BOLD}Indicadors{bcolors.ENDC}") + print(tabulate([ + ["Alfa", 1], + ["Beta", 1] + ])) + + +def get_positions(entries, options, date): + balance_query = f"SELECT account, sum(position) as volume, convert(sum(position), \"EUR\") as position FROM date <= {date} WHERE account ~ '^Assets:Invest' GROUP BY account" + rtypes, rrows = query.run_query( + entries, options, balance_query) + return rrows + +def main(): + parser = argparse.ArgumentParser(description='Generate portfolio report') + parser.add_argument('date', metavar='date', type=str, nargs=1, + help='Report date in ISO format (e.g. 1970-01-01)') + + args = parser.parse_args() + date = args.date[0] + + filename = "ledger/main.beancount" + entries, errors, options = loader.load_file(filename) + + if errors: + printer.print_errors(errors) + + positions = get_positions(entries, options, date) + print_report(date, positions) + +main() \ No newline at end of file diff --git a/ledger/accounts.beancount b/ledger/accounts.beancount index 7720923..a8f8d92 100644 --- a/ledger/accounts.beancount +++ b/ledger/accounts.beancount @@ -36,6 +36,7 @@ 1970-01-01 open Income:Savings:TradeRepublic:RentabilitatEstalvis EUR 1970-01-01 open Income:Invest:R4:Dividends EUR 1970-01-01 open Income:Invest:R4:CapitalGains EUR +1970-01-01 open Income:Invest:DZP:CapitalGains EUR 1970-01-01 open Income:Other:Devolucions EUR 1970-01-01 open Expenses:R4:Comissions EUR diff --git a/ledger/transactions/2024/03.beancount b/ledger/transactions/2024/03.beancount index ee6c005..b9bd13e 100644 --- a/ledger/transactions/2024/03.beancount +++ b/ledger/transactions/2024/03.beancount @@ -81,6 +81,9 @@ 2024-03-06 * "ITV" "Revisio de vehicles" #cotxe Expenses:MantenimentCotxe 40.60 EUR Assets:Liquid:Caixabank:Corrent +2024-03-06 * "Deutsche Zurich Pensiones" "Aportació P.P.E DZP" + Assets:Benefits:DZP:PPEZurich 80.36 EUR + Income:Work:Zurich:DZP 2024-03-08 * "EsclatOil" "Gasolina" Expenses:Gasolina 53.79 EUR Assets:Liquid:Caixabank:Corrent @@ -172,71 +175,71 @@ Expenses:Entreteniment 11.99 EUR Assets:Liquid:Caixabank:Corrent 2024-03-23 * "La Mafia" "Sopar" - Expenses:MenjarFora 48.10 EUR + Expenses:MenjarFora 48.10 EUR Assets:Liquid:Caixabank:Corrent 2024-03-25 * "Just Eat" "Burger Goiko" - Expenses:MenjarFora 20.46 EUR + Expenses:MenjarFora 20.46 EUR Assets:Liquid:Caixabank:Corrent 2024-03-26 * "Zurich" "Nòmina Març + Variable" - Assets:Liquid:Caixabank:Corrent 6290.10 EUR + Assets:Liquid:Caixabank:Corrent 6290.10 EUR Income:Work:Zurich:Salari 2024-03-26 * "Plusfresc" "Aigua i fruita" - Expenses:Supermercat 3.18 EUR + Expenses:Supermercat 3.18 EUR Assets:Liquid:Caixabank:Corrent 2024-03-26 * "Don Zangano" "Esmorzar" - Expenses:MenjarFora 4.90 EUR + Expenses:MenjarFora 4.90 EUR Assets:Benefits:Edenred:TicketsRestaurant 2024-03-26 * "Yi Duo" "Dinar" - Expenses:MenjarFora 16.45 EUR + Expenses:MenjarFora 16.45 EUR Assets:Benefits:Edenred:TicketsRestaurant 2024-03-26 * "Blät" "Cafè" - Expenses:MenjarFora 1.65 EUR + Expenses:MenjarFora 1.65 EUR Assets:Benefits:Edenred:TicketsRestaurant 2024-03-26 * "R4" "Enviament diners R4" - Assets:Liquid:R4:EUR 2400 EUR + Assets:Liquid:R4:EUR 2400 EUR Assets:Liquid:Caixabank:Corrent 2024-03-26 * "TradeRepublic" "Enviament diners TradeRepublic" - Assets:Liquid:TradeRepublic:EUR 1600 EUR + Assets:Liquid:TradeRepublic:EUR 1600 EUR Assets:Liquid:Caixabank:Corrent 2024-03-27 * "Burger King" "Sopar aeroport" - Expenses:MenjarFora 13.31 EUR + Expenses:MenjarFora 13.31 EUR Assets:Benefits:Edenred:TicketsRestaurant 2024-03-27 * "Aerobus" "Anada i tornada" - Expenses:Mobilitat 11.65 EUR + Expenses:Mobilitat 11.65 EUR Assets:Benefits:Edenred:TargetaTransport 2024-03-28 * "Yummy Sushi" "Sopar" - Expenses:MenjarFora 34.10 EUR + Expenses:MenjarFora 34.10 EUR Assets:Liquid:Caixabank:Corrent 2024-03-29 * "Edenred" "Recarrega targeta transport" - Assets:Benefits:Edenred:TargetaTransport 40 EUR + Assets:Benefits:Edenred:TargetaTransport 40 EUR Income:Work:Zurich:TargetaTransport 2024-03-29 * "Can Joan de S'Aigo" "Berenar" - Expenses:MenjarFora 19.70 EUR + Expenses:MenjarFora 19.70 EUR Assets:Liquid:Caixabank:Corrent 2024-03-29 * "Ryanair" "Vols abril i maig" - Expenses:Mobilitat 31.98 EUR - Expenses:Mobilitat 31.98 EUR - Expenses:Mobilitat 109.35 EUR - Expenses:Mobilitat 25.87 EUR + Expenses:Mobilitat 31.98 EUR + Expenses:Mobilitat 31.98 EUR + Expenses:Mobilitat 109.35 EUR + Expenses:Mobilitat 25.87 EUR Liabilities:Credit:Caixabank:TargetaCredit 2024-03-29 * "Vueling" "Vols abril i maig" - Expenses:Mobilitat 41.98 EUR - Expenses:Mobilitat 58.98 EUR - Expenses:Mobilitat 36.99 EUR - Expenses:Mobilitat 72.98 EUR - Assets:Liquid:Caixabank:Corrent -72.98 EUR + Expenses:Mobilitat 41.98 EUR + Expenses:Mobilitat 58.98 EUR + Expenses:Mobilitat 36.99 EUR + Expenses:Mobilitat 72.98 EUR + Assets:Liquid:Caixabank:Corrent -72.98 EUR Liabilities:Credit:Caixabank:TargetaCredit 2024-03-30 * "Ryanair" "Vol anada Croacia" - Expenses:Vacances 102.98 EUR - Income:Other:Caixabank:Bizum -51.50 EUR - Assets:Liquid:Caixabank:Corrent 51.50 EUR + Expenses:Vacances 102.98 EUR + Income:Other:Caixabank:Bizum -51.50 EUR + Assets:Liquid:Caixabank:Corrent 51.50 EUR Liabilities:Credit:Caixabank:TargetaCredit 2024-03-30 * "Vueling" "Vol tornada Croacia" - Expenses:Vacances 231.98 EUR - Income:Other:Caixabank:Bizum -115 EUR + Expenses:Vacances 231.98 EUR + Income:Other:Caixabank:Bizum -115 EUR Assets:Liquid:Caixabank:Corrent 2024-03-30 * "Antoni Pons" "Espardenyes" - Expenses:Roba 49.95 EUR + Expenses:Roba 49.95 EUR Liabilities:Credit:Caixabank:TargetaCredit @@ -253,7 +256,7 @@ 2024-04-01 balance Assets:Invest:R4:MSFT 4 MSFT 2024-04-01 balance Assets:Benefits:Edenred:TicketsRestaurant 13.30 EUR 2024-04-01 balance Assets:Benefits:Edenred:TargetaTransport 125.05 EUR -2024-04-01 balance Assets:Benefits:DZP:PPEZurich 1807.49 EUR +2024-04-01 balance Assets:Benefits:DZP:PPEZurich 1887.85 EUR 2024-04-01 balance Assets:PersonalProperty:VivendaPrincipal 0 EUR 2024-04-01 balance Assets:PersonalProperty:Cotxe 10000 EUR 2024-04-01 balance Assets:PersonalProperty:JoiesArtCollecionables 1250 EUR diff --git a/ledger/transactions/2024/04.beancount b/ledger/transactions/2024/04.beancount index 2a3cee9..76a7c95 100644 --- a/ledger/transactions/2024/04.beancount +++ b/ledger/transactions/2024/04.beancount @@ -11,7 +11,7 @@ 2024-04-01 balance Assets:Invest:R4:MSFT 4 MSFT 2024-04-01 balance Assets:Benefits:Edenred:TicketsRestaurant 13.30 EUR 2024-04-01 balance Assets:Benefits:Edenred:TargetaTransport 125.05 EUR -2024-04-01 balance Assets:Benefits:DZP:PPEZurich 1807.49 EUR +2024-04-01 balance Assets:Benefits:DZP:PPEZurich 1887.85 EUR 2024-04-01 balance Assets:PersonalProperty:VivendaPrincipal 0 EUR 2024-04-01 balance Assets:PersonalProperty:Cotxe 10000 EUR 2024-04-01 balance Assets:PersonalProperty:JoiesArtCollecionables 1250 EUR @@ -125,8 +125,8 @@ Assets:Liquid:Caixabank:Corrent 4.37 EUR Income:Other:Caixabank:Bizum -4.37 EUR Assets:Liquid:Caixabank:Corrent 4.37 EUR - Income:Other:Caixabank:Bizum -4.30 EUR - Assets:Liquid:Caixabank:Corrent 4.30 EUR + Income:Other:Caixabank:Bizum -4.30 EUR + Assets:Liquid:Caixabank:Corrent 4.30 EUR Expenses:Entreteniment 34.99 EUR 2024-04-07 * "JustEat" "Sopar sushi" Expenses:MenjarFora 45.58 EUR @@ -137,6 +137,11 @@ 2024-04-08 * "Toni Pons" "Espardenyes" Expenses:Roba 39.95 EUR Liabilities:Credit:Caixabank:TargetaCredit +2024-04-08 * "Deutsche Zurich Pensiones" "Aportació P.P.E DZP" + Assets:Benefits:DZP:PPEZurich 80.36 EUR + Income:Work:Zurich:DZP -80.36 EUR + Assets:Benefits:DZP:PPEZurich 5.47 EUR + Income:Invest:DZP:CapitalGains 2024-04-09 * "Don Zangano" "Esmorzar" Expenses:MenjarFora 5.90 EUR Assets:Benefits:Edenred:TicketsRestaurant @@ -167,47 +172,103 @@ Expenses:Mobilitat 12.50 EUR Assets:Benefits:Edenred:TargetaTransport 2024-04-13 * "Isla Badal" "Dinar hamburguesa" - Expenses:MenjarFora 51.40 EUR + Expenses:MenjarFora 51.40 EUR Assets:Benefits:Edenred:TicketsRestaurant 2024-04-13 * "Farmacia Arxiduc" "Strepsils i condons" - Expenses:Altres 30.71 EUR + Expenses:Altres 30.71 EUR Assets:Liquid:Caixabank:Corrent 2024-04-15 * "Metro Barcelona" "T-10" - Expenses:Mobilitat 12.15 EUR + Expenses:Mobilitat 12.15 EUR Assets:Liquid:Caixabank:Corrent 2024-04-16 * "Don Zangano" "Esmorzar" - Expenses:MenjarFora 5.90 EUR + Expenses:MenjarFora 5.90 EUR Assets:Benefits:Edenred:TicketsRestaurant 2024-04-16 * "Plusfresc" "Aigua i fruita" - Expenses:Supermercat 2.62 EUR + Expenses:Supermercat 2.62 EUR Assets:Liquid:Caixabank:Corrent 2024-04-16 * "Yi Duo" "Dinar sushi" - Expenses:MenjarFora 16.45 EUR + Expenses:MenjarFora 16.45 EUR Assets:Benefits:Edenred:TicketsRestaurant 2024-04-16 * "Blät" "Cafè" - Expenses:MenjarFora 1.45 EUR + Expenses:MenjarFora 1.45 EUR Assets:Benefits:Edenred:TicketsRestaurant 2024-04-16 * "Barcelona Barber Shop" "Tallar cabells" - Expenses:Perruqueria 16 EUR + Expenses:Perruqueria 16 EUR Assets:Liquid:Caixabank:Corrent 2024-04-16 * "Plusfresc" "Compra de la setmana" - Expenses:Supermercat 34.24 EUR + Expenses:Supermercat 34.24 EUR Assets:Liquid:Caixabank:Corrent -2024-04-18 * "AWS" "Factura -2024-04-16 * "Yi Duo" "Dinar sushi" - Expenses:MenjarFora 16.45 EUR +2024-04-18 * "AWS" "Factura AWS Abril" + Expenses:MarcaPersonal 16.61 EUR + Assets:Liquid:Caixabank:Corrent +2024-04-20 * "EsclatOil" "Gasolina" + Expenses:Gasolina 60 EUR + Assets:Liquid:Caixabank:Corrent +2024-04-20 * "Tagliatela" "Sopar" + Expenses:MenjarFora 48.90 EUR + Assets:Liquid:Caixabank:Corrent +2024-04-21 * "Viena" "Berenar" + Expenses:MenjarFora 16.35 EUR + Assets:Liquid:Caixabank:Corrent +2024-04-21 * "Fira Lactium" "Formatges i altres" + Expenses:Supermercat 7.90 EUR + Expenses:Supermercat 10.50 EUR + Expenses:Supermercat 6 EUR + Expenses:Supermercat 12 EUR + Assets:Liquid:Caixabank:Corrent +2024-04-21 * "Buenas Migas" "Berenar" + Expenses:MenjarFora 25.20 EUR + Assets:Liquid:Caixabank:Corrent +2024-04-21 * "Fazal Chak" "Aigua" + Expenses:Supermercat 3.90 EUR + Assets:Liquid:Caixabank:Corrent +2024-04-22 * "Plusfresc" "Compra de la setmana" + Expenses:Supermercat 28.99 EUR + Assets:Liquid:Caixabank:Corrent +2024-04-22 * "Putxet Gourmet" "Pollastre i empanades" + Expenses:Supermercat 11.26 EUR + Assets:Liquid:Caixabank:Corrent +2024-04-22 * "Bizum" "Maria Mona de Pasqua" + Expenses:Altres 25 EUR + Assets:Liquid:Caixabank:Corrent +2024-04-23 * "Don Zangano" "Esmorzar" + Expenses:MenjarFora 5.90 EUR Assets:Benefits:Edenred:TicketsRestaurant -2024-04-16 * "Blät" "Cafè" - Expenses:MenjarFora 1.45 EUR - Assets:Benefits:Edenred:TicketsRestaurant AWS Abril" - Expenses:MarcaPersonal 16.61 EUR +2024-04-23 * "Plusfresc" "Aigua i fruita" + Expenses:Supermercat 2.55 EUR + Assets:Liquid:Caixabank:Corrent +2024-04-23 * "Passatore" "Dinar" + Expenses:MenjarFora 12.50 EUR + Assets:Liquid:Caixabank:Corrent +2024-04-23 * "Blät" "Cafè" + Expenses:MenjarFora 1.45 EUR + Assets:Liquid:Caixabank:Corrent +2024-04-23 * "Ikibana" "Sopar Sant Jordi" + Expenses:MenjarFora 148.75 EUR + Assets:Liquid:Caixabank:Corrent +2024-04-25 * "Aerobus" "Anada i tornada aeroport" + Expenses:Mobilitat 12.50 EUR + Assets:Benefits:Edenred:TargetaTransport +2024-04-25 * "Escape Room Hechizados" "Regal aniversari Raul i Genis" + Expenses:Altres 72 EUR + Liabilities:Credit:Caixabank:TargetaCredit +2024-04-26 * "Zurich" "Nòmina Abril" + Assets:Liquid:Caixabank:Corrent 3369.52 EUR + Income:Work:Zurich:Salari +2024-04-26 * "Mariolas Bakery" "Berenar" + Expenses:MenjarFora 21.70 EUR + Assets:Liquid:Caixabank:Corrent +2024-04-27 * "R4" "Transferencia a R4" + Assets:Liquid:R4:EUR 1000 EUR + Assets:Liquid:Caixabank:Corrent +2024-04-27 * "TradeRepublic" "Transferencia a TradeRepublic" + Assets:Liquid:TradeRepublic:EUR 400 EUR Assets:Liquid:Caixabank:Corrent - -2024-05-01 balance Assets:Liquid:Caixabank:Corrent 14464.65 EUR +2024-05-01 balance Assets:Liquid:Caixabank:Corrent 15991.22 EUR 2024-05-01 balance Assets:Liquid:Caixabank:Estalvi 0 EUR -2024-05-01 balance Assets:Liquid:TradeRepublic:EUR 18918.94 EUR -2024-05-01 balance Assets:Liquid:R4:EUR 50.42 EUR +2024-05-01 balance Assets:Liquid:TradeRepublic:EUR 19318.94 EUR +2024-05-01 balance Assets:Liquid:R4:EUR 1050.42 EUR 2024-05-01 balance Assets:Invest:R4:Amundi:MSCIWRLD 99.38937 AMNDMSCIWRLD 2024-05-01 balance Assets:Invest:R4:Vanguard:EMMK 14.99 VANEMMK 2024-05-01 balance Assets:Invest:R4:Fidelity:GLTECH 393.62 FIGLTECH @@ -215,13 +276,13 @@ 2024-05-01 balance Assets:Invest:R4:BNP:DISTECH 0.359 BNPDISTECH 2024-05-01 balance Assets:Invest:R4:PLTR 10 PLTR 2024-05-01 balance Assets:Invest:R4:MSFT 4 MSFT -2024-05-01 balance Assets:Benefits:Edenred:TicketsRestaurant 14.17 EUR -2024-05-01 balance Assets:Benefits:Edenred:TargetaTransport 112.55 EUR -2024-05-01 balance Assets:Benefits:DZP:PPEZurich 1807.49 EUR +2024-05-01 balance Assets:Benefits:Edenred:TicketsRestaurant 8.27 EUR +2024-05-01 balance Assets:Benefits:Edenred:TargetaTransport 100.05 EUR +2024-05-01 balance Assets:Benefits:DZP:PPEZurich 1973.68 EUR 2024-05-01 balance Assets:PersonalProperty:VivendaPrincipal 0 EUR 2024-05-01 balance Assets:PersonalProperty:Cotxe 10000 EUR 2024-05-01 balance Assets:PersonalProperty:JoiesArtCollecionables 1250 EUR 2024-05-01 balance Assets:PersonalProperty:MetallsPreciosos 0 EUR 2024-05-01 balance Assets:PersonalProperty:AltresPropietats 0 EUR 2024-05-01 balance Assets:Debt:DeutesPerCobrar 0 EUR -2024-05-01 balance Liabilities:Credit:Caixabank:TargetaCredit -491.79 EUR +2024-05-01 balance Liabilities:Credit:Caixabank:TargetaCredit -563.79 EUR