diff --git a/revolut_data/consolidated-statement-v2-eng.csv b/revolut_data/consolidated-statement-v2-eng.csv new file mode 100644 index 0000000..7a9b7bc --- /dev/null +++ b/revolut_data/consolidated-statement-v2-eng.csv @@ -0,0 +1,2012 @@ +Current Accounts Summaries,,,,,,,,,, +,,,,,,,,,, +Personal Account (PLN),,,,,,,,,, +,,,,,,,,,, +Current account details,,,,,,,,,, +Account Number (LT IBAN),LT2832500392550890,Opening date,"Nov 6, 2022",,,,,,, +Account Number (PL IBAN),PL672910000000000038323,Closing date,,,,,,,, +Holding modalities,Individual,Days owned (in selected period),116,,,,,,, +Purpose of account,Personal,,,,,,,,, +Nature of account,Current,,,,,,,,, +,,,,,,,,,, +Financial institution information,,,,,,,,,, +Financial institution name,Revolut Bank UAB,Registration number,LT1000106713,,,,,,, +Address & country,"Konstitucijos ave. 21B, LT-08130, Vilnius",,,,,,,,, +,,,,,,,,,, +Deposit value,,,,,,,,,, +Average balance Q1 2026,188.40 PLN,Opening balance,0.00 PLN,,,,,,, +,,Closing balance,225.16 PLN,,,,,,, +,,Maximum balance,"32,100.00 PLN",,,,,,, +,,Average balance full period,192.11 PLN,,,,,,, +,,,,,,,,,, +---------,,,,,,,,,, +,,,,,,,,,, +Personal Account (USD),,,,,,,,,, +,,,,,,,,,, +Current account details,,,,,,,,,, +Account Number (IBAN),LT2832500396020893,Opening date,"Sep 1, 2023",,,,,,, +Holding modalities,Individual,Closing date,,,,,,,, +Purpose of account,Personal,Days owned (in selected period),116,,,,,,, +Nature of account,Current,,,,,,,,, +,,,,,,,,,, +Financial institution information,,,,,,,,,, +Financial institution name,Revolut Bank UAB,Registration number,LT1000106713,,,,,,, +Address & country,"Konstitucijos ave. 21B, LT-08130, Vilnius",,,,,,,,, +,,,,,,,,,, +Deposit value,,,,,,,,,, +Average balance Q1 2026,$5.96 (21.51 PLN),Opening balance,$0.00 (0.00 PLN),,,,,,, +,,Closing balance,$0.00 (0.00 PLN),,,,,,, +,,Maximum balance,"$7,607.70 (27,254.49 PLN)",,,,,,, +,,Average balance full period,$4.63 (16.69 PLN),,,,,,, +,,,,,,,,,, +---------,,,,,,,,,, +,,,,,,,,,, +Personal Account (CZK),,,,,,,,,, +,,,,,,,,,, +Current account details,,,,,,,,,, +Account Number (IBAN),LT283250039652390,Opening date,"May 9, 2025",,,,,,, +Holding modalities,Individual,Closing date,,,,,,,, +Purpose of account,Personal,Days owned (in selected period),116,,,,,,, +Nature of account,Current,,,,,,,,, +,,,,,,,,,, +Financial institution information,,,,,,,,,, +Financial institution name,Revolut Bank UAB,Registration number,LT1000106713,,,,,,, +Address & country,"Konstitucijos ave. 21B, LT-08130, Vilnius",,,,,,,,, +,,,,,,,,,, +Deposit value,,,,,,,,,, +Average balance Q1 2026,0.00 CZK (0.00 PLN),Opening balance,0.00 CZK (0.00 PLN),,,,,,, +,,Closing balance,0.00 CZK (0.00 PLN),,,,,,, +,,Maximum balance,0.00 CZK (0.00 PLN),,,,,,, +,,Average balance full period,0.00 CZK (0.00 PLN),,,,,,, +,,,,,,,,,, +---------,,,,,,,,,, +,,,,,,,,,, +Personal Account (DKK),,,,,,,,,, +,,,,,,,,,, +Current account details,,,,,,,,,, +Account Number (IBAN),LT28039623550890,Opening date,"May 30, 2024",,,,,,, +Holding modalities,Individual,Closing date,,,,,,,, +Purpose of account,Personal,Days owned (in selected period),116,,,,,,, +Nature of account,Current,,,,,,,,, +,,,,,,,,,, +Financial institution information,,,,,,,,,, +Financial institution name,Revolut Bank UAB,Registration number,LT100706713,,,,,,, +Address & country,"Konstitucijos ave. 21B, LT-08130, Vilnius",,,,,,,,, +,,,,,,,,,, +Deposit value,,,,,,,,,, +Average balance Q1 2026,0.00 DKK (0.00 PLN),Opening balance,0.00 DKK (0.00 PLN),,,,,,, +,,Closing balance,0.00 DKK (0.00 PLN),,,,,,, +,,Maximum balance,0.00 DKK (0.00 PLN),,,,,,, +,,Average balance full period,0.00 DKK (0.00 PLN),,,,,,, +,,,,,,,,,, +---------,,,,,,,,,, +,,,,,,,,,, +Personal Account (THB),,,,,,,,,, +,,,,,,,,,, +Current account details,,,,,,,,, +Account Number (IBAN),LT283250002550890,Opening date,"Nov 25, 2025",,,,,,, +Holding modalities,Individual,Closing date,,,,,,,, +Purpose of account,Personal,Days owned (in selected period),116,,,,,,, +Nature of account,Current,,,,,,,,, +,,,,,,,,,, +Financial institution information,,,,,,,,,, +Financial institution name,Revolut Bank UAB,Registration number,LT1000116713,,,,,,, +Address & country,"Konstitucijos ave. 21B, LT-08130, Vilnius",,,,,,,,, +,,,,,,,,,, +Deposit value,,,,,,,,,, +Average balance Q1 2026,0.00 THB (0.00 PLN),Opening balance,"1,576.44 THB (180.92 PLN)",,,,,,, +,,Closing balance,0.00 THB (0.00 PLN),,,,,,, +,,Maximum balance,"1,576.44 THB (180.92 PLN)",,,,,,, +,,Average balance full period,0.00 THB (0.00 PLN),,,,,,, +,,,,,,,,,, +---------,,,,,,,,,, +,,,,,,,,,, +Personal Account (GBP),,,,,,,,,, +,,,,,,,,,, +Current account details,,,,,,,,,, +Account Number (LT IBAN),LT2832500396045890,Opening date,"Apr 10, 2024",,,,,,, +Account Number GB,61113492,Closing date,,,,,,,, +Holding modalities,Individual,Days owned (in selected period),116,,,,,,, +Purpose of account,Personal,,,,,,,,, +Nature of account,Current,,,,,,,,, +,,,,,,,,,, +Financial institution information,,,,,,,,,, +Financial institution name,Revolut Bank UAB,Registration number,LT1000706713,,,,,,, +Address & country,"Konstitucijos ave. 21B, LT-08130, Vilnius",,,,,,,,, +,,,,,,,,,, +Deposit value,,,,,,,,,, +Average balance Q1 2026,£0.00 (0.00 PLN),Opening balance,£0.00 (0.00 PLN),,,,,,, +,,Closing balance,£0.00 (0.00 PLN),,,,,,, +,,Maximum balance,£0.00 (0.00 PLN),,,,,,, +,,Average balance full period,£0.00 (0.00 PLN),,,,,,, +,,,,,,,,,, +---------,,,,,,,,,, +,,,,,,,,,, +Personal Account (EUR),,,,,,,,,, +,,,,,,,,,, +Current account details,,,,,,,,,, +Account Number (IBAN),LT283250602550890,Opening date,"Jun 6, 2023",,,,,,, +Holding modalities,Individual,Closing date,,,,,,,, +Purpose of account,Personal,Days owned (in selected period),116,,,,,,, +Nature of account,Current,,,,,,,,, +,,,,,,,,,, +Financial institution information,,,,,,,,,, +Financial institution name,Revolut Bank UAB,Registration number,LT1000706713,,,,,,, +Address & country,"Konstitucijos ave. 21B, LT-08130, Vilnius",,,,,,,,, +,,,,,,,,,, +Deposit value,,,,,,,,,, +Average balance Q1 2026,€12.33 (52.17 PLN),Opening balance,€0.00 (0.00 PLN),,,,,,, +,,Closing balance,€0.00 (0.00 PLN),,,,,,, +,,Maximum balance,"€6,068.64 (25,680.21 PLN)",,,,,,, +,,Average balance full period,€9.57 (40.48 PLN),,,,,,, +,,,,,,,,,, +---------,,,,,,,,,, +,,,,,,,,,, +Kids & Teen (PLN),,,,,,,,,, +,,,,,,,,,, +Current account details,,,,,,,,,, +Account Number,N/A,Opening date,"May 17, 2024",,,,,,, +Holding modalities,Individual,Closing date,,,,,,,, +Purpose of account,Personal,Days owned (in selected period),116,,,,,,, +Nature of account,Current,,,,,,,,, +,,,,,,,,,, +Financial institution information,,,,,,,,,, +Financial institution name,Revolut Bank UAB,Registration number,LT1000106713,,,,,,, +Address & country,"Konstitucijos ave. 21B, LT-08130, Vilnius",,,,,,,,, +,,,,,,,,,, +Deposit value,,,,,,,,,, +Average balance Q1 2026,74.53 PLN,Opening balance,0.00 PLN,,,,,,, +,,Closing balance,45.72 PLN,,,,,,, +,,Maximum balance,686.72 PLN,,,,,,, +,,Average balance full period,92.48 PLN,,,,,,, +,,,,,,,,,, +---------,,,,,,,,,, +,,,,,,,,,, +Kids & Teen (PLN),,,,,,,,,, +,,,,,,,,,, +Current account details,,,,,,,,,, +Account Number,N/A,Opening date,"May 17, 2024",,,,,,, +Holding modalities,Individual,Closing date,,,,,,,, +Purpose of account,Personal,Days owned (in selected period),116,,,,,,, +Nature of account,Current,,,,,,,,, +,,,,,,,,,, +Financial institution information,,,,,,,,,, +Financial institution name,Revolut Bank UAB,Registration number,LT100006713,,,,,,, +Address & country,"Konstitucijos ave. 21B, LT-08130, Vilnius",,,,,,,,, +,,,,,,,,,, +Deposit value,,,,,,,,,, +Average balance Q1 2026,59.32 PLN,Opening balance,136.25 PLN,,,,,,, +,,Closing balance,16.79 PLN,,,,,,, +,,Maximum balance,208.90 PLN,,,,,,, +,,Average balance full period,58.66 PLN,,,,,,, +,,,,,,,,,, +---------,,,,,,,,,, +,,,,,,,,,, +Bilety (PLN),,,,,,,,,, +,,,,,,,,,, +Current account details,,,,,,,,,, +Account Number,N/A,Opening date,"Mar 26, 2026",,,,,,, +Holding modalities,Individual,Closing date,,,,,,,, +Purpose of account,Personal,Days owned (in selected period),32,,,,,,, +Nature of account,Current,,,,,,,,, +,,,,,,,,,, +Financial institution information,,,,,,,,,, +Financial institution name,Revolut Bank UAB,Registration number,LT1000106713,,,,,,, +Address & country,"Konstitucijos ave. 21B, LT-08130, Vilnius",,,,,,,,, +,,,,,,,,,, +Deposit value,,,,,,,,,, +Average balance Q1 2026,5.67 PLN,Opening balance,0.00 PLN,,,,,,, +,,Closing balance,0.00 PLN,,,,,,, +,,Maximum balance,160.00 PLN,,,,,,, +,,Average balance full period,10.78 PLN,,,,,,, +,,,,,,,,,, +---------,,,,,,,,,, +,,,,,,,,,, +Sinscerely youres (PLN),,,,,,,,,, +,,,,,,,,,, +Current account details,,,,,,,,,, +Account Number,N/A,Opening date,"Jan 30, 2026",,,,,,, +Holding modalities,Individual,Closing date,,,,,,,, +Purpose of account,Personal,Days owned (in selected period),87,,,,,,, +Nature of account,Current,,,,,,,,, +,,,,,,,,,, +Financial institution information,,,,,,,,,, +Financial institution name,Revolut Bank UAB,Registration number,LT1000106713,,,,,,, +Address & country,"Konstitucijos ave. 21B, LT-08130, Vilnius",,,,,,,,, +,,,,,,,,,, +Deposit value,,,,,,,,,, +Average balance Q1 2026,0.44 PLN,Opening balance,0.00 PLN,,,,,,, +,,Closing balance,0.00 PLN,,,,,,, +,,Maximum balance,150.00 PLN,,,,,,, +,,Average balance full period,0.34 PLN,,,,,,, +,,,,,,,,,, +---------,,,,,,,,,, +,,,,,,,,,, +Na miesiąc na żarełko (PLN),,,,,,,,,, +,,,,,,,,,, +Current account details,,,,,,,,,, +Account Number,N/A,Opening date,"Nov 11, 2025",,,,,,, +Holding modalities,Individual,Closing date,,,,,,,, +Purpose of account,Personal,Days owned (in selected period),116,,,,,,, +Nature of account,Current,,,,,,,,, +,,,,,,,,,, +Financial institution information,,,,,,,,,, +Financial institution name,Revolut Bank UAB,Registration number,LT100011706713,,,,,,, +Address & country,"Konstitucijos ave. 21B, LT-08130, Vilnius",,,,,,,,, +,,,,,,,,,, +Deposit value,,,,,,,,,, +Average balance Q1 2026,0.00 PLN,Opening balance,0.00 PLN,,,,,,, +,,Closing balance,0.00 PLN,,,,,,, +,,Maximum balance,0.00 PLN,,,,,,, +,,Average balance full period,0.00 PLN,,,,,,, +,,,,,,,,,, +---------,,,,,,,,,, +,,,,,,,,,, +Oszczędności (PLN),,,,,,,,,, +,,,,,,,,,, +Current account details,,,,,,,,,, +Account Number,N/A,Opening date,"Nov 11, 2025",,,,,,, +Holding modalities,Individual,Closing date,,,,,,,, +Purpose of account,Personal,Days owned (in selected period),116,,,,,,, +Nature of account,Current,,,,,,,,, +,,,,,,,,,, +Financial institution information,,,,,,,,,, +Financial institution name,Revolut Bank UAB,Registration number,LT100011706713,,,,,,, +Address & country,"Konstitucijos ave. 21B, LT-08130, Vilnius",,,,,,,,, +,,,,,,,,,, +Deposit value,,,,,,,,,, +Average balance Q1 2026,0.89 PLN,Opening balance,0.00 PLN,,,,,,, +,,Closing balance,0.00 PLN,,,,,,, +,,Maximum balance,40.00 PLN,,,,,,, +,,Average balance full period,0.69 PLN,,,,,,, +,,,,,,,,,, +---------,,,,,,,,,, +,,,,,,,,,, +Potrzeby (PLN),,,,,,,,,, +,,,,,,,,,, +Current account details,,,,,,,,,, +Account Number,N/A,Opening date,"Nov 11, 2025",,,,,,, +Holding modalities,Individual,Closing date,,,,,,,, +Purpose of account,Personal,Days owned (in selected period),116,,,,,,, +Nature of account,Current,,,,,,,,, +,,,,,,,,,, +Financial institution information,,,,,,,,,, +Financial institution name,Revolut Bank UAB,Registration number,LT100011706713,,,,,,, +Address & country,"Konstitucijos ave. 21B, LT-08130, Vilnius",,,,,,,,, +,,,,,,,,,, +Deposit value,,,,,,,,,, +Average balance Q1 2026,0.00 PLN,Opening balance,0.00 PLN,,,,,,, +,,Closing balance,0.00 PLN,,,,,,, +,,Maximum balance,0.00 PLN,,,,,,, +,,Average balance full period,0.00 PLN,,,,,,, +,,,,,,,,,, +---------,,,,,,,,,, +,,,,,,,,,, +Tajlandia (PLN),,,,,,,,,, +,,,,,,,,,, +Current account details,,,,,,,,,, +Account Number,N/A,Opening date,"Nov 11, 2025",,,,,,, +Holding modalities,Individual,Closing date,"Jan 26, 2026",,,,,,, +Purpose of account,Personal,Days owned (in selected period),26,,,,,,, +Nature of account,Current,,,,,,,,, +,,,,,,,,,, +Financial institution information,,,,,,,,,, +Financial institution name,Revolut Bank UAB,Registration number,LT100011706713,,,,,,, +Address & country,"Konstitucijos ave. 21B, LT-08130, Vilnius",,,,,,,,, +,,,,,,,,,, +Deposit value,,,,,,,,,, +Average balance Q1 2026,0.00 PLN,Opening balance,0.00 PLN,,,,,,, +,,Closing balance,0.00 PLN,,,,,,, +,,Maximum balance,0.00 PLN,,,,,,, +,,Average balance full period,0.00 PLN,,,,,,, +,,,,,,,,,, +---------,,,,,,,,,, +,,,,,,,,,, +Zakupy (PLN),,,,,,,,,, +,,,,,,,,,, +Current account details,,,,,,,,,, +Account Number,N/A,Opening date,"Aug 7, 2024",,,,,,, +Holding modalities,Individual,Closing date,,,,,,,, +Purpose of account,Personal,Days owned (in selected period),116,,,,,,, +Nature of account,Current,,,,,,,,, +,,,,,,,,,, +Financial institution information,,,,,,,,,, +Financial institution name,Revolut Bank UAB,Registration number,LT100011706713,,,,,,, +Address & country,"Konstitucijos ave. 21B, LT-08130, Vilnius",,,,,,,,, +,,,,,,,,,, +Deposit value,,,,,,,,,, +Average balance Q1 2026,0.35 PLN,Opening balance,0.00 PLN,,,,,,, +,,Closing balance,0.12 PLN,,,,,,, +,,Maximum balance,6.12 PLN,,,,,,, +,,Average balance full period,0.30 PLN,,,,,,, +,,,,,,,,,, +---------,,,,,,,,,, +,,,,,,,,,, +Zakupy shien spodnie (PLN),,,,,,,,,, +,,,,,,,,,, +Current account details,,,,,,,,,, +Account Number,N/A,Opening date,"Jun 4, 2024",,,,,,, +Holding modalities,Individual,Closing date,"Mar 26, 2026",,,,,,, +Purpose of account,Personal,Days owned (in selected period),85,,,,,,, +Nature of account,Current,,,,,,,,, +,,,,,,,,,, +Financial institution information,,,,,,,,,, +Financial institution name,Revolut Bank UAB,Registration number,LT100011706713,,,,,,, +Address & country,"Konstitucijos ave. 21B, LT-08130, Vilnius",,,,,,,,, +,,,,,,,,,, +Deposit value,,,,,,,,,, +Average balance Q1 2026,0.00 PLN,Opening balance,0.00 PLN,,,,,,, +,,Closing balance,0.00 PLN,,,,,,, +,,Maximum balance,0.00 PLN,,,,,,, +,,Average balance full period,0.00 PLN,,,,,,, +,,,,,,,,,, +---------,,,,,,,,,, +,,,,,,,,,, +Urodziny (PLN),,,,,,,,,, +,,,,,,,,,, +Current account details,,,,,,,,,, +Account Number,N/A,Opening date,"May 19, 2024",,,,,,, +Holding modalities,Individual,Closing date,"Mar 26, 2026",,,,,,, +Purpose of account,Personal,Days owned (in selected period),85,,,,,,, +Nature of account,Current,,,,,,,,, +,,,,,,,,,, +Financial institution information,,,,,,,,,, +Financial institution name,Revolut Bank UAB,Registration number,LT100011706713,,,,,,, +Address & country,"Konstitucijos ave. 21B, LT-08130, Vilnius",,,,,,,,, +,,,,,,,,,, +Deposit value,,,,,,,,,, +Average balance Q1 2026,6.93 PLN,Opening balance,35.46 PLN,,,,,,, +,,Closing balance,0.00 PLN,,,,,,, +,,Maximum balance,38.08 PLN,,,,,,, +,,Average balance full period,5.37 PLN,,,,,,, +,,,,,,,,,, +---------,,,,,,,,,, +,,,,,,,,,, +---------,,,,,,,,,, +,,,,,,,,,, +Savings Accounts Summaries,,,,,,,,,, +,,,,,,,,,, +Aion (EUR),,,,,,,,,, +,,,,,,,,,, +Interest and Tax Summary,,,,,,,,,, +Gross rate,1.50% p.a.,Taxes withheld,€0.00 (0.00 PLN),,,,,,, +Interest rate (net of Lithuanian tax),1.50%,,,,,,,,, +Gross income,€0.79 (3.37 PLN),,,,,,,,, +Net income,€0.79 (3.37 PLN),,,,,,,,, +,,,,,,,,,, +Savings account details,,,,,,,,,, +Account number (IBAN),LT283250039602550890,Opening date,"Aug 21, 2023",,,,,,, +Holding modalities,Individual,Closing date,,,,,,,, +Purpose of account,Personal,Days owned (in selected period),116,,,,,,, +Nature of account,Savings,,,,,,,,, +,,,,,,,,,, +Deposit value,,,,,,,,,, +Average balance Q1 2026,€229.82 (987.51 PLN),Opening balance,€0.00 (0.00 PLN),,,,,,, +,,Closing balance,€0.00 (0.00 PLN),,,,,,, +,,Maximum balance,"€5,669.23 (23,953.56 PLN)",,,,,,, +,,Average balance full period,€178.31 (760.00 PLN),,,,,,, +,,,,,,,,,, +Financial institution information,,,,,,,,,, +Financial institution name,Aion Bank SA/NV,Registration number,BE0403.199.306,,,,,,, +Address & country,"Sq. Victoria Régina 1, 1210 Saint-Josse-ten-Noode, Belgium",,,,,,,,, +,,,,,,,,,, +---------,,,,,,,,,, +,,,,,,,,,, +Aion (PLN),,,,,,,,,, +,,,,,,,,,, +Interest and Tax Summary,,,,,,,,,, +Gross rate,3.25%-4.00% p.a.,Taxes withheld,0.00 PLN,,,,,,, +Interest rate (net of Lithuanian tax),3.25%,,,,,,,,, +Gross income,454.43 PLN,,,,,,,,, +Net income,454.43 PLN,,,,,,,,, +,,,,,,,,,, +Savings account details,,,,,,,,,, +Account number (IBAN),LT283250039602550890,Opening date,"Jun 30, 2023",,,,,,, +Holding modalities,Individual,Closing date,,,,,,,, +Purpose of account,Personal,Days owned (in selected period),116,,,,,,, +Nature of account,Savings,,,,,,,,, +,,,,,,,,,, +Deposit value,,,,,,,,,, +Average balance Q1 2026,"46,667.29 PLN",Opening balance,"56,475.83 PLN",,,,,,, +,,Closing balance,"23,690.75 PLN",,,,,,, +,,Maximum balance,"56,485.25 PLN",,,,,,, +,,Average balance full period,"28,764.85 PLN",,,,,,, +,,,,,,,,,, +Financial institution information,,,,,,,,,, +Financial institution name,Aion Bank SA/NV,Registration number,BE0403.199.306,,,,,,, +Address & country,"Sq. Victoria Régina 1, 1210 Saint-Josse-ten-Noode, Belgium",,,,,,,,, +,,,,,,,,,, +---------,,,,,,,,,, +,,,,,,,,,, +---------,,,,,,,,,, +,,,,,,,,,, +Investment Services Summaries,,,,,,,,,, +,,,,,,,,,, +Brokerage account details,,,,,,,,,, +,,,,,,,,,, +Dividends received,,,,,,,,,, +Dividends,"8,211.77 PLN",Tax withheld on dividend,"1,350.72 PLN",,,,,,, +Net dividend income,"6,860.95 PLN",,,,,,,,, +,,,,,,,,,, +Income from sale,,,,,,,,,, +Gross proceeds,"54,612.68 PLN",Tax withheld on sales,0.00 PLN,,,,,,, +Cost basis,"99,046.36 PLN",Tax withheld on purchase,0.00 PLN,,,,,,, +Fees and other charges,6.86 PLN,Net PnL,"-44,440.54 PLN",,,,,,, +,,,,,,,,,, +Brokerage account details,,,,,,,,,, +Account Number,28205233,Opening date,"Sep 9, 2023",,,,,,, +Holding modalities,Holder,Closing date,,,,,,,, +Purpose of account,Personal,Days owned (selected in period),116,,,,,,, +Nature of account,Portfolio,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +Average balance Q1,"505,670.65 PLN ($139,682.74)",Average balance Q2,-,,,,,,, +Average balance Q3,-,Average balance Q4,-,,,,,,, +Average balance H1,-,Average balance H2,-,,,,,,, +Opening balance,"446,152.45 PLN ($124,194.94)",Closing balance,"580,008.15 PLN ($160,066.23)",,,,,,, +Maximum balance,"584,086.43 PLN ($162,335.49)",Average balance full year,"519,931.47 PLN ($143,449.65)",,,,,,, +Total cash top ups,"103,394.96 PLN ($28,487.91)",Total cash withdrawals,"35,105.49 PLN ($9,681.48)",,,,,,, +,,,,,,,,,, +Financial institution information,,,,,,,,,, +Financial institution name,Revolut Securities Europe UAB,Registration number,305799582,,,,,,, +Address & country,"Konstitucijos ave. 21B, LT-08130, Vilnius, Lithuania",,,,,,,,, +,,,,,,,,,, +---------,,,,,,,,,, +,,,,,,,,,, +Current Accounts Transaction Statements,,,,,,,,,, +,,,,,,,,,, +Personal Account (PLN),,,,,,,,,, +,,,,,,,,,, +Transaction statement,,,,,,,,,, +Date,Description,Category,Money in/out,Balance,Tax withheld,Other taxes,Fees,,, +"Jan 1, 2026",Exchanged to PLN,Exchange,3.22 PLN,3.22 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Jan 1, 2026",Withdrawing savings,Others,20.00 PLN,23.22 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Jan 1, 2026",Withdrawing savings,Others,30.00 PLN,53.22 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Jan 1, 2026",Depositing savings,Others,-53.22 PLN,0.00 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Jan 1, 2026",Withdrawing savings,Others,1.00 PLN,1.00 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Jan 1, 2026",www.jestemzgdanska.pl,Merchant,-1.00 PLN,0.00 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Jan 1, 2026",Withdrawing savings,Others,44.00 PLN,44.00 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Jan 1, 2026",Depositing savings,Others,-19.24 PLN,24.76 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Jan 1, 2026",Withdrawing savings,Others,38.00 PLN,62.76 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Jan 1, 2026",Depositing savings,Others,-33.40 PLN,29.36 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Jan 2, 2026",Withdrawing savings,Others,45.00 PLN,74.36 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Jan 2, 2026",www.koleo.pl,Merchant,-42.20 PLN,32.16 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Jan 2, 2026",Withdrawing savings,Others,167.00 PLN,199.16 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Jan 2, 2026",Withdrawing savings,Others,5.00 PLN,204.16 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Jan 2, 2026",Withdrawing savings,Others,2.19 PLN,206.35 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Jan 2, 2026",Withdrawing savings,Others,150.00 PLN,356.35 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Jan 2, 2026",Depositing savings,Others,-150.01 PLN,206.34 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Jan 2, 2026",Withdrawing savings,Others,43.00 PLN,249.34 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Jan 2, 2026",goingapp.pl,Merchant,-43.00 PLN,206.34 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Jan 2, 2026",Withdrawing savings,Others,26.52 PLN,232.86 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Jan 2, 2026",Withdrawing savings,Others,0.07 PLN,232.93 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Jan 2, 2026",www.koleo.pl,Merchant,-26.59 PLN,206.34 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Jan 2, 2026",Żabka,Merchant,-24.76 PLN,181.58 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Jan 2, 2026",Żabka,Merchant,-4.60 PLN,176.98 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Jan 2, 2026",Withdrawing savings,Others,28.00 PLN,204.98 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Jan 3, 2026",Sklep Merkus,Merchant,-10.28 PLN,194.70 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Jan 3, 2026",Decathlon,Merchant,-176.98 PLN,17.72 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Jan 4, 2026",Depositing savings,Others,-17.72 PLN,0.00 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Jan 4, 2026",Withdrawing savings,Others,80.00 PLN,80.00 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +---------,,,,,,,,,, +,,,,,,,,,, +Personal Account (USD),,,,,,,,,, +,,,,,,,,,, +Transaction statement,,,,,,,,,, +Date,Description,Category,Money in/out,Balance,Tax withheld,Other taxes,Fees,,, +"Jan 7, 2026",Top Up,Top up,$95.79 (345.44 PLN),$95.79 (345.44 PLN),$0.00 (0.00 PLN),$0.00 (0.00 PLN),$0.00 (0.00 PLN),,, +"Jan 7, 2026",Exchanged to PLN,Exchange,-$70.79 (-255.29 PLN),$25.00 (90.17 PLN),$0.00 (0.00 PLN),$0.00 (0.00 PLN),$0.00 (0.00 PLN),,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +---------,,,,,,,,,, +,,,,,,,,,, +Personal Account (CZK),,,,,,,,,, +,,,,,,,,,, +Transaction statement,,,,,,,,,, +Date,Description,Category,Money in/out,Balance,Tax withheld,Other taxes,Fees,,, +Total,,,0.00 CZK (0.00 PLN),,0.00 CZK (0.00 PLN),0.00 CZK (0.00 PLN),0.00 CZK (0.00 PLN),,, +,,,,,,,,,, +---------,,,,,,,,,, +,,,,,,,,,, +Personal Account (DKK),,,,,,,,,, +,,,,,,,,,, +Transaction statement,,,,,,,,,, +Date,Description,Category,Money in/out,Balance,Tax withheld,Other taxes,Fees,,, +Total,,,0.00 DKK (0.00 PLN),,0.00 DKK (0.00 PLN),0.00 DKK (0.00 PLN),0.00 DKK (0.00 PLN),,, +,,,,,,,,,, +---------,,,,,,,,,, +,,,,,,,,,, +Personal Account (THB),,,,,,,,,, +,,,,,,,,,, +Transaction statement,,,,,,,,,, +Date,Description,Category,Money in/out,Balance,Tax withheld,Other taxes,Fees,,, +"Jan 1, 2026",Exchanged to PLN,Exchange,-28.44 THB (-3.26 PLN),"1,548.00 THB (177.66 PLN)",0.00 THB (0.00 PLN),0.00 THB (0.00 PLN),0.00 THB (0.00 PLN),,, +"Jan 1, 2026",McDonald's,Merchant,"-1,548.00 THB (-177.65 PLN)",0.00 THB (0.00 PLN),0.00 THB (0.00 PLN),0.00 THB (0.00 PLN),0.00 THB (0.00 PLN),,, +Total,,,"-1,576.44 THB (-180.91 PLN)",,0.00 THB (0.00 PLN),0.00 THB (0.00 PLN),0.00 THB (0.00 PLN),,, +,,,,,,,,,, +---------,,,,,,,,,, +,,,,,,,,,, +Personal Account (GBP),,,,,,,,,, +,,,,,,,,,, +Transaction statement,,,,,,,,,, +Date,Description,Category,Money in/out,Balance,Tax withheld,Other taxes,Fees,,, +Total,,,£0.00 (0.00 PLN),,£0.00 (0.00 PLN),£0.00 (0.00 PLN),£0.00 (0.00 PLN),,, +,,,,,,,,,, +---------,,,,,,,,,, +,,,,,,,,,, +Personal Account (EUR),,,,,,,,,, +,,,,,,,,,, +Transaction statement,,,,,,,,,, +Date,Description,Category,Money in/out,Balance,Tax withheld,Other taxes,Fees,,, +"Jan 14, 2026",Exchanged to EUR,Exchange,"€2,000.00 (8,441.72 PLN)","€2,000.00 (8,441.72 PLN)",€0.00 (0.00 PLN),€0.00 (0.00 PLN),€0.00 (0.00 PLN),,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +Bilety (PLN),,,,,,,,,, +,,,,,,,,,, +Transaction statement,,,,,,,,,, +Date,Description,Category,Money in/out,Balance,Tax withheld,Other taxes,Fees,,, +"Mar 26, 2026",To pocket PLN Bilety from PLN,Others,10.00 PLN,10.00 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Mar 27, 2026",To pocket PLN Bilety from PLN,Others,50.00 PLN,60.00 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Mar 27, 2026",To pocket PLN Bilety from PLN,Others,100.00 PLN,160.00 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Mar 27, 2026",Pocket Withdrawal,Others,-50.00 PLN,110.00 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Mar 29, 2026",Pocket Withdrawal,Others,-10.00 PLN,100.00 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Mar 31, 2026",Pocket Withdrawal,Others,-20.00 PLN,80.00 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Apr 6, 2026",Pocket Withdrawal,Others,-10.00 PLN,70.00 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Apr 6, 2026",Pocket Withdrawal,Others,-2.00 PLN,68.00 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Apr 11, 2026",Pocket Withdrawal,Others,-68.00 PLN,0.00 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +Total,,,0.00 PLN,,0.00 PLN,0.00 PLN,0.00 PLN,,, +,,,,,,,,,, +---------,,,,,,,,,, +,,,,,,,,,, +Sinscerely youres (PLN),,,,,,,,,, +,,,,,,,,,, +Transaction statement,,,,,,,,,, +Date,Description,Category,Money in/out,Balance,Tax withheld,Other taxes,Fees,,, +"Jan 30, 2026",To pocket PLN Sinscerely youres from PLN,Others,40.00 PLN,40.00 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Jan 30, 2026",Pocket Withdrawal,Others,-40.00 PLN,0.00 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Jan 30, 2026",To pocket PLN Sinscerely youres from PLN,Others,40.00 PLN,40.00 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Jan 31, 2026",To pocket PLN Sinscerely youres from PLN,Others,110.00 PLN,150.00 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Jan 31, 2026",Pocket Withdrawal,Others,-150.00 PLN,0.00 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Feb 4, 2026",To pocket PLN Sinscerely youres from PLN,Others,41.00 PLN,41.00 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Feb 4, 2026",Pocket Withdrawal,Others,-41.00 PLN,0.00 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +Total,,,0.00 PLN,,0.00 PLN,0.00 PLN,0.00 PLN,,, +,,,,,,,,,, +---------,,,,,,,,,, +,,,,,,,,,, +Na miesiąc na żarełko (PLN),,,,,,,,,, +,,,,,,,,,, +Transaction statement,,,,,,,,,, +Date,Description,Category,Money in/out,Balance,Tax withheld,Other taxes,Fees,,, +Total,,,0.00 PLN,,0.00 PLN,0.00 PLN,0.00 PLN,,, +,,,,,,,,,, +---------,,,,,,,,,, +,,,,,,,,,, +Oszczędności (PLN),,,,,,,,,, +,,,,,,,,,, +Transaction statement,,,,,,,,,, +Date,Description,Category,Money in/out,Balance,Tax withheld,Other taxes,Fees,,, +"Jan 26, 2026",To pocket PLN Oszczędności from PLN,Others,20.00 PLN,20.00 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Jan 30, 2026",To pocket PLN Oszczędności from PLN,Others,20.00 PLN,40.00 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Jan 30, 2026",Pocket Withdrawal,Others,-40.00 PLN,0.00 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +Total,,,0.00 PLN,,0.00 PLN,0.00 PLN,0.00 PLN,,, +,,,,,,,,,, +---------,,,,,,,,,, +,,,,,,,,,, +Potrzeby (PLN),,,,,,,,,, +,,,,,,,,,, +Transaction statement,,,,,,,,,, +Date,Description,Category,Money in/out,Balance,Tax withheld,Other taxes,Fees,,, +Total,,,0.00 PLN,,0.00 PLN,0.00 PLN,0.00 PLN,,, +,,,,,,,,,, +---------,,,,,,,,,, +,,,,,,,,,, +Tajlandia (PLN),,,,,,,,,, +,,,,,,,,,, +Transaction statement,,,,,,,,,, +Date,Description,Category,Money in/out,Balance,Tax withheld,Other taxes,Fees,,, +Total,,,0.00 PLN,,0.00 PLN,0.00 PLN,0.00 PLN,,, +,,,,,,,,,, +---------,,,,,,,,,, +,,,,,,,,,, +Zakupy (PLN),,,,,,,,,, +,,,,,,,,,, +Transaction statement,,,,,,,,,, +Date,Description,Category,Money in/out,Balance,Tax withheld,Other taxes,Fees,,, +"Jan 26, 2026",To pocket PLN Zakupy from PLN,Others,6.12 PLN,6.12 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Jan 30, 2026",Pocket Withdrawal,Others,-6.00 PLN,0.12 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +Total,,,0.12 PLN,,0.00 PLN,0.00 PLN,0.00 PLN,,, +,,,,,,,,,, +---------,,,,,,,,,, +,,,,,,,,,, +Zakupy shien spodnie (PLN),,,,,,,,,, +,,,,,,,,,, +Transaction statement,,,,,,,,,, +Date,Description,Category,Money in/out,Balance,Tax withheld,Other taxes,Fees,,, +Total,,,0.00 PLN,,0.00 PLN,0.00 PLN,0.00 PLN,,, +,,,,,,,,,, +---------,,,,,,,,,, +,,,,,,,,,, +Urodziny (PLN),,,,,,,,,, +,,,,,,,,,, +Transaction statement,,,,,,,,,, +Date,Description,Category,Money in/out,Balance,Tax withheld,Other taxes,Fees,,, +"Jan 2, 2026",To pocket PLN Urodziny from PLN,Others,1.51 PLN,36.97 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Jan 2, 2026",Pocket Withdrawal,Others,-36.00 PLN,0.97 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Jan 2, 2026",To pocket PLN Urodziny from PLN,Others,0.50 PLN,1.47 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Jan 5, 2026",To pocket PLN Urodziny from PLN,Others,15.00 PLN,16.47 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Jan 5, 2026",To pocket PLN Urodziny from PLN,Others,2.75 PLN,19.22 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Jan 5, 2026",Pocket Withdrawal,Others,-19.00 PLN,0.22 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Jan 5, 2026",To pocket PLN Urodziny from PLN,Others,1.00 PLN,1.22 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Jan 6, 2026",To pocket PLN Urodziny from PLN,Others,3.32 PLN,4.54 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Jan 8, 2026",To pocket PLN Urodziny from PLN,Others,1.51 PLN,6.05 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Jan 9, 2026",To pocket PLN Urodziny from PLN,Others,1.01 PLN,7.06 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Jan 12, 2026",To pocket PLN Urodziny from PLN,Others,15.00 PLN,22.06 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Jan 13, 2026",To pocket PLN Urodziny from PLN,Others,1.02 PLN,23.08 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +"Jan 19, 2026",To pocket PLN Urodziny from PLN,Others,15.00 PLN,38.08 PLN,0.00 PLN,0.00 PLN,0.00 PLN,,, +,,,,,,,0.00 PLN,,, +,,,,,,,0.00 PLN,,, +,,,,,,,0.00 PLN,,, +,,,,,,,0.00 PLN,,, +,,,,,,,0.00 PLN,,, +,,,,,,,0.00 PLN,,, +,,,,,,,0.00 PLN,,, +,,,,,,,0.00 PLN,,, +,,,,,,,0.00 PLN,,, +,,,,,,,0.00 PLN,,, +,,,,,,,0.00 PLN,,, +,,,,,,,0.00 PLN,,, +,,,,,,,0.00 PLN,,, +,,,,,,,0.00 PLN,,, +,,,,,,,0.00 PLN,,, +,,,,,,,0.00 PLN,,, +,,,,,,,0.00 PLN,,, +,,,,,,,0.00 PLN,,, +,,,,,,,0.00 PLN,,, +,,,,,,,0.00 PLN,,, +,,,,,,,0.00 PLN,,, +,,,,,,,0.00 PLN,,, +,,,,,,,0.00 PLN,,, +,,,,,,,0.00 PLN,,, +,,,,,,,0.00 PLN,,, +,,,,,,,0.00 PLN,,, +,,,,,,,0.00 PLN,,, +,,,,,,,0.00 PLN,,, +,,,,,,,0.00 PLN,,, +,,,,,,,0.00 PLN,,, +,,,,,,,0.00 PLN,,, +,,,,,,,0.00 PLN,,, +,,,,,,,0.00 PLN,,, +,,,,,,,0.00 PLN,,, +,,,,,,,0.00 PLN,,, +,,,,,,,0.00 PLN,,, +,,,,,,,0.00 PLN,,, +,,,,,,,0.00 PLN,,, +,,,,,,,0.00 PLN,,, +,,,,,,,0.00 PLN,,, +,,,,,,,0.00 PLN,,, +,,,,,,,0.00 PLN,,, +,,,,,,,0.00 PLN,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +---------,,,,,,,,,, +,,,,,,,,,, +Savings Accounts Transaction Statements,,,,,,,,,, +,,,,,,,,,, +Aion (EUR),,,,,,,,,, +,,,,,,,,,, +Transaction statement (only interest receipt),,,,,,,,,, +Date,Description,Gross rate,Gross interest,Taxes withheld,Other taxes,Fees,Net interest,,, +1/27/26,Gross Interest,1.5%,€0.01 (0.05 PLN),€0.00 (0.00 PLN),€0.00 (0.00 PLN),€0.00 (0.00 PLN),€0.01 (0.05 PLN),,, +1/30/26,Gross Interest,1.5%,€0.01 (0.05 PLN),€0.00 (0.00 PLN),€0.00 (0.00 PLN),€0.00 (0.00 PLN),€0.01 (0.05 PLN),,, +2/3/26,Gross Interest,1.5%,€0.01 (0.05 PLN),€0.00 (0.00 PLN),€0.00 (0.00 PLN),€0.00 (0.00 PLN),€0.01 (0.05 PLN),,, +2/6/26,Gross Interest,1.5%,€0.01 (0.05 PLN),€0.00 (0.00 PLN),€0.00 (0.00 PLN),€0.00 (0.00 PLN),€0.01 (0.05 PLN),,, +2/9/26,Gross Interest,1.5%,€0.01 (0.05 PLN),€0.00 (0.00 PLN),€0.00 (0.00 PLN),€0.00 (0.00 PLN),€0.01 (0.05 PLN),,, +2/13/26,Gross Interest,1.5%,€0.01 (0.05 PLN),€0.00 (0.00 PLN),€0.00 (0.00 PLN),€0.00 (0.00 PLN),€0.01 (0.05 PLN),,, +2/16/26,Gross Interest,1.5%,€0.01 (0.05 PLN),€0.00 (0.00 PLN),€0.00 (0.00 PLN),€0.00 (0.00 PLN),€0.01 (0.05 PLN),,, +2/19/26,Gross Interest,1.5%,€0.01 (0.05 PLN),€0.00 (0.00 PLN),€0.00 (0.00 PLN),€0.00 (0.00 PLN),€0.01 (0.05 PLN),,, +2/23/26,Gross Interest,1.5%,€0.01 (0.05 PLN),€0.00 (0.00 PLN),€0.00 (0.00 PLN),€0.00 (0.00 PLN),€0.01 (0.05 PLN),,, +2/25/26,Gross Interest,1.5%,€0.23 (0.98 PLN),€0.00 (0.00 PLN),€0.00 (0.00 PLN),€0.00 (0.00 PLN),€0.23 (0.98 PLN),,, +2/26/26,Gross Interest,1.5%,€0.24 (1.02 PLN),€0.00 (0.00 PLN),€0.00 (0.00 PLN),€0.00 (0.00 PLN),€0.24 (1.02 PLN),,, +2/27/26,Gross Interest,1.5%,€0.23 (0.98 PLN),€0.00 (0.00 PLN),€0.00 (0.00 PLN),€0.00 (0.00 PLN),€0.23 (0.98 PLN),,, +,,,,,,,,,, +---------,,,,,,,,,, +,,,,,,,,,, +Aion (PLN),,,,,,,,,, +,,,,,,,,,, +Transaction statement (only interest receipt),,,,,,,,,, +Date,Description,Gross rate,Gross interest,Taxes withheld,Other taxes,Fees,Net interest,,, +1/1/26,Gross Interest,4%,1.81 PLN,0.00 PLN,0.00 PLN,0.00 PLN,1.81 PLN,,, +1/1/26,Gross Interest,4%,4.39 PLN,0.00 PLN,0.00 PLN,0.00 PLN,4.39 PLN,,, +1/2/26,Gross Interest,4%,1.81 PLN,0.00 PLN,0.00 PLN,0.00 PLN,1.81 PLN,,, +1/2/26,Gross Interest,4%,4.40 PLN,0.00 PLN,0.00 PLN,0.00 PLN,4.40 PLN,,, +1/3/26,Gross Interest,4%,1.79 PLN,0.00 PLN,0.00 PLN,0.00 PLN,1.79 PLN,,, +---------,,,,,,,,,, +,,,,,,,,,, +Investment Services Transaction Statements,,,,,,,,,, +,,,,,,,,,, +Transaction statement (only dividend receipt),,,,,,,,,, +Date,Description & symbol,ISIN,Country,Gross dividend / income,Taxes withheld,Other taxes,Fees,Net dividend / income,, +"Jan 6, 2026",Best Buy dividend,US0865161014,US,$112.69 (405.87 PLN),$16.90 (60.86 PLN),$0.00 (0.00 PLN),0.00 PLN (0.00 PLN),$95.79 (345.00 PLN),, +"Jan 7, 2026",Canadian Natural Resources dividend,CA1363851017,CA,$27.32 (98.47 PLN),$6.83 (24.61 PLN),$0.00 (0.00 PLN),0.00 PLN (0.00 PLN),$20.49 (73.85 PLN),, +"Jan 9, 2026",Dentsply dividend,US24906P1093,US,$25.50 (92.42 PLN),$3.82 (13.84 PLN),$0.00 (0.00 PLN),0.00 PLN (0.00 PLN),$21.68 (78.57 PLN),, +"Jan 9, 2026",Ambev dividend,US02319V1035,US,$68.89 (249.68 PLN),$0.00 ($0.00),$0.00 (0.00 PLN),0.00 PLN (0.00 PLN),$68.89 (249.68 PLN),, +"Apr 23, 2026",Ahold Delhaize N.V. dividend,NL0011794037,NL,€130.75 (554.74 PLN),€19.61 (83.20 PLN),€0.00 (0.00 PLN),0.00 PLN (0.00 PLN),€111.14 (471.54 PLN),, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +Units which have been sold,,,,,,,,,, +"Date (of Sale, of Purchase)","Description, symbol and ISIN",Country,Age of units,Units sold,"Unit price (on Sale date, on Purchase date)","Value (of Sale, of Purchase)",Capital gains,Taxes withheld,Other taxes,Fees +"Jan 16, 2026, May 14, 2024",ConAgra Foods CAG (US2058871029),US,612 days,644.71405544,"+US$17, -US$31.02 (+61.91 PLN, -122.44 PLN)","+US$10,961.04, -US$20,000 (+39,914.26 PLN, -78,935.63 PLN)","-US$9,038.96 (-39,021.37 PLN)",US$0 (0 PLN),US$0.13 (0.47 PLN),US$0 (0 PLN) +"Jan 16, 2026, Feb 26, 2025",ConAgra Foods CAG (US2058871029),US,324 days,19.34235976,"+US$17, -US$25.85 (+61.91 PLN, -102 PLN)","+US$328.85, -US$500 (+1,197.49 PLN, -1,972.96 PLN)",-US$171.15 (-775.47 PLN),US$0 (0 PLN),US$0 (0 PLN),US$0 (0 PLN) +"Jan 16, 2026, Apr 9, 2025",ConAgra Foods CAG (US2058871029),US,282 days,39.29720514,"+US$17, -US$24.99 (+61.91 PLN, -96.68 PLN)","+US$668.10, -US$981.99 (+2,432.86 PLN, -3,799.41 PLN)","-US$313.89 (-1,366.55 PLN)",US$0 (0 PLN),US$0.01 (0.03 PLN),US$0 (0 PLN) +"Mar 2, 2026, Feb 26, 2025",Dentsply XRAY (US24906P1093),US,369 days,159.37938363,"+US$14.42, -US$18.82 (+52.24 PLN, -74.27 PLN)","+US$2,298.25, -US$3,000 (+8,326.02 PLN, -11,837.81 PLN)","-US$701.75 (-3,511.79 PLN)",US$0 (0 PLN),US$0.03 (0.10 PLN),US$0 (0 PLN) +"Mar 4, 2026, Feb 24, 2026",IBM IBM (US4592001014),US,8 days,2.98737859,"+US$250.26, -US$233.73 (+917.88 PLN, -837.04 PLN)","+US$747.61, -US$698.24 (+2,742.05 PLN, -2,500.55 PLN)",US$49.37 (241.50 PLN),US$0 (0 PLN),US$0.01 (0.03 PLN),US$1.74 (6.23 PLN) +,,,,,,,,,, +Other brokerage account transactions,,,,,,,,,, +Date,Description & symbol,ISIN,Quantity,Country,Gross value,Taxes withheld,Other taxes,Fees,Net value, +"Jan 20, 2026",AHOG,NL0011794037,179.11769991,Netherlands,"€5,980.74 (25,266.56 PLN)",€0 (0 PLN),€0 (0 PLN),€0 (0 PLN),"€5,980.74 (25,266.56 PLN)", +"Jan 20, 2026",SNY,US80105N1054,44.02377283,United States,"US$2,000 (7,204.68 PLN)",US$0 (0 PLN),US$0 (0 PLN),US$0 (0 PLN),"US$2,000 (7,204.68 PLN)", +"Jan 20, 2026",NVS,US66987V1098,13.89583333,United States,"US$2,001 (7,208.29 PLN)",US$0 (0 PLN),US$0 (0 PLN),US$0 (0 PLN),"US$2,001 (7,208.29 PLN)", +"Jan 20, 2026",SPYI,IE00B3YLTY66,3.37522299,Ireland,"€851.40 (3,596.87 PLN)",€0 (0 PLN),€0 (0 PLN),€0 (0 PLN),"€851.40 (3,596.87 PLN)", +"Feb 26, 2026",VVD,FR0000124141,157.77144453,France,"€5,669.23 (23,942.45 PLN)",€0 (0 PLN),€0 (0 PLN),€22.59 (95.40 PLN),"€5,646.64 (23,847.05 PLN)", +"Apr 2, 2026",VZ,US92343V1044,0.12422235,United States,US$6.19 (22.93 PLN),US$0 (0 PLN),US$0 (0 PLN),US$0 (0 PLN),US$6.19 (22.93 PLN), +"Feb 18, 2026",GSL,MHY271836006,70.99871366,Marshall Islands,"US$2,760 (9,870.94 PLN)",US$0 (0 PLN),US$0 (0 PLN),US$0 (0 PLN),"US$2,759.72 (9,869.94 PLN)", +"Feb 18, 2026",LX,US5288771034,9.90666666,United States,US$29.72 (106.29 PLN),US$0 (0 PLN),US$0 (0 PLN),US$0 (0 PLN),US$29.72 (106.29 PLN), +"Feb 23, 2026",CNQ,CA1363851017,23.49142588,Canada,"US$1,000 (3,578.77 PLN)",US$0 (0 PLN),US$0 (0 PLN),US$0 (0 PLN),"US$1,000.03 (3,578.88 PLN)", +"Mar 4, 2026",O,US7561091049,50.20255668,United States,"US$3,306.99 (12,129.23 PLN)",US$0 (0 PLN),US$0 (0 PLN),US$0 (0 PLN),"US$3,298.81 (12,099.23 PLN)", +"Mar 26, 2026",GSL,MHY271836006,0.07643979,Marshall Islands,US$2.92 (10.82 PLN),US$0 (0 PLN),US$0 (0 PLN),US$0 (0 PLN),US$2.92 (10.82 PLN), +"Feb 24, 2026",IBM,US4592001014,2.98737859,United States,"US$699.98 (2,506.78 PLN)",US$0 (0 PLN),US$0 (0 PLN),US$0 (0 PLN),"US$698.24 (2,500.55 PLN)", +"Apr 14, 2026",BBY,GB0000961622,1.56989944,United Kingdom,US$96.80 (347.68 PLN),US$0 (0 PLN),US$0 (0 PLN),US$0 (0 PLN),US$96.80 (347.68 PLN), +"Mar 30, 2026",VVD,FR0000124141,72.25819544,France,"€2,323.69 (9,966.03 PLN)",€0 (0 PLN),€0 (0 PLN),€9.26 (39.71 PLN),"€2,314.43 (9,926.31 PLN)", +"Feb 18, 2026",SM,US78454L1008,12,United States,US$272.74 (975.43 PLN),US$0 (0 PLN),US$0 (0 PLN),US$0 (0 PLN),US$272.76 (975.50 PLN), +"Mar 30, 2026",O,US7561091049,43.66079007,United States,"US$2,674.66 (10,012.56 PLN)",US$0 (0 PLN),US$0 (0 PLN),US$0 (0 PLN),"US$2,674.66 (10,012.56 PLN)", +"Mar 6, 2026",GSL,MHY271836006,1.11834625,Marshall Islands,US$44.36 (163.24 PLN),US$0 (0 PLN),US$0 (0 PLN),US$0 (0 PLN),US$43.28 (159.27 PLN), +"Mar 2, 2026",CNQ,CA1363851017,50.95810241,Canada,"US$2,298.51 (8,326.96 PLN)",US$0 (0 PLN),US$0 (0 PLN),US$0 (0 PLN),"US$2,298.72 (8,327.72 PLN)", +"Mar 2, 2026",TGT,US87612E1064,0.07901058,United States,US$8.88 (32.17 PLN),US$0 (0 PLN),US$0 (0 PLN),US$0 (0 PLN),US$8.88 (32.17 PLN), +"Feb 18, 2026",LX,US5288771034,10,United States,US$30.49 (109.04 PLN),US$0 (0 PLN),US$0 (0 PLN),US$0 (0 PLN),US$30.50 (109.08 PLN), +,,,,,,,,,, +---------,,,,,,,,,, diff --git a/revolut_data/consolidated-statement-v2-pol.csv b/revolut_data/consolidated-statement-v2-pol.csv new file mode 100644 index 0000000..7403a79 --- /dev/null +++ b/revolut_data/consolidated-statement-v2-pol.csv @@ -0,0 +1,84 @@ +"Rachunki bieżące Podsumowania",,,,,,,,,, +,,,,,,,,,, +"Konto osobiste (PLN)",,,,,,,,,, +,,,,,,,,,, +"Dane rachunku bieżącego",,,,,,,,,, +"Numer konta (LT IBAN)",LT2832500392550890,"Data otwarcia","6 lis 2022",,,,,,, +"Numer konta (PL IBAN)","PL572910000000000003698351","Data zamknięcia",,,,,,,, +"Rodzaj własności","Osoba fizyczna","Liczba dni posiadania (w wybranym okresie)",116,,,,,,, +"Wykorzystanie konta",Osobiste,,,,,,,,, +"Rodzaj konta",Bieżące,,,,,,,,, +,,,,,,,,,, +"Informacje o instytucji finansowej",,,,,,,,,, +"Nazwa instytucji finansowej","Revolut Bank UAB","Numer rejestracyjny",LT1000706713,,,,,,, +"Adres i kraj","Konstitucijos ave. 21B, LT-08130, Vilnius",,,,,,,,, +,,,,,,,,,, +"Wartość depozytu",,,,,,,,,, +"Średnie saldo I kw. 2026","188,40 PLN","Saldo początkowe","0,00 PLN",,,,,,, +,,"Saldo końcowe","0,16 PLN",,,,,,, +,,"Maksymalne saldo","32 100,00 PLN",,,,,,, +,,"Średnie saldo w całym okresie","190,17 PLN",,,,,,, +,,,,,,,,,, +---------,,,,,,,,,, +,,,,,,,,,, +"Konto osobiste (EUR)",,,,,,,,,, +,,,,,,,,,, +"Dane konta oszczędnościowego",,,,,,,,,, +,,,,,,,,,, +"Interest and Tax Summary",,,,,,,,,, +"Gross rate",1.50% p.a.,"Taxes withheld","0,00€ (0,00 PLN)",,,,,,, +"Interest rate (net of Lithuanian tax)",1.50%,,,,,,,,, +"Gross income","0,79€ (3,37 PLN)",,,,,,,,, +"Net income","0,79€ (3,37 PLN)",,,,,,,,, +,,,,,,,,,, +"Savings account details",,,,,,,,,, +"Account number (IBAN)",LT283200302550890,"Opening date","21 sie 2023",,,,,,, +"Holding modalities","Osoba fizyczna","Closing date",,,,,,,, +"Purpose of account",Osobiste,"Days owned (in selected period)",116,,,,,,, +"Nature of account",Oszczędnościowe,,,,,,,,, +,,,,,,,,,, +"Transaction statement (only interest receipt)",,,,,,,,,, +Data,Opis,"Gross rate","Gross interest","Taxes withheld","Other taxes",Fees,"Net interest",,, +27.01.2026,"Oprocentowanie brutto","1.5%","0,01€ (0,05 PLN)","0,00€ (0,00 PLN)","0,00€ (0,00 PLN)","0,00€ (0,00 PLN)","0,01€ (0,05 PLN)",,, +30.01.2026,"Oprocentowanie brutto","1.5%","0,01€ (0,05 PLN)","0,00€ (0,00 PLN)","0,00€ (0,00 PLN)","0,00€ (0,00 PLN)","0,01€ (0,05 PLN)",,, +3.02.2026,"Oprocentowanie brutto","1.5%","0,01€ (0,05 PLN)","0,00€ (0,00 PLN)","0,00€ (0,00 PLN)","0,00€ (0,00 PLN)","0,01€ (0,05 PLN)",,, +,,,,,,,,,, +---------,,,,,,,,,, +,,,,,,,,,, +"Aion (PLN)",,,,,,,,,, +,,,,,,,,,, +"Transaction statement (only interest receipt)",,,,,,,,,, +Data,Opis,"Gross rate","Gross interest","Taxes withheld","Other taxes",Fees,"Net interest",,, +1.01.2026,"Oprocentowanie brutto","4%","1,81 PLN","0,00 PLN","0,00 PLN","0,00 PLN","1,81 PLN",,, +1.01.2026,"Oprocentowanie brutto","4%","4,39 PLN","0,00 PLN","0,00 PLN","0,00 PLN","4,39 PLN",,, +2.01.2026,"Oprocentowanie brutto","4%","1,81 PLN","0,00 PLN","0,00 PLN","0,00 PLN","1,81 PLN",,, +---------,,,,,,,,,, +,,,,,,,,,, +"Investment Services Transaction Statements",,,,,,,,,, +,,,,,,,,,, +"Zestawienie transakcji (tylko wpływy z dywidendy)",,,,,,,,,, +Data,"Opis i symbol ",ISIN,Kraj,"Brutto dywidendy / dochodu","Zatrzymane podatki","Inne podatki",Opłaty,"Dywidenda/dochód netto",, +"6 sty 2026","Best Buy dividend",US0865161014,US,"112,69$ (405,87 PLN)","16,90$ (60,86 PLN)","0,00$ (0,00 PLN)","0,00 PLN (0,00 PLN)","95,79$ (345,00 PLN)",, +"7 sty 2026","Canadian Natural Resources dividend",CA1363851017,CA,"27,32$ (98,47 PLN)","6,83$ (24,61 PLN)","0,00$ (0,00 PLN)","0,00 PLN (0,00 PLN)","20,49$ (73,85 PLN)",, +"9 sty 2026","Dentsply dividend",US24906P1093,US,"25,50$ (92,42 PLN)","3,82$ (13,84 PLN)","0,00$ (0,00 PLN)","0,00 PLN (0,00 PLN)","21,68$ (78,57 PLN)",, +"23 kwi 2026","Ahold Delhaize N.V. dividend",NL0011794037,NL,"130,75€ (554,74 PLN)","19,61€ (83,20 PLN)","0,00€ (0,00 PLN)","0,00 PLN (0,00 PLN)","111,14€ (471,54 PLN)",, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +"Sprzedane jednostki",,,,,,,,,, +"Data (Sprzedaży, Zakupu)","Opis, symbol i kod ISIN",Kraj,"Wiek jednostek","Units sold","Cena jednostkowa (Data sprzedaży, w dniu daty zakupu)","Wartość (Sprzedaży, Zakupu)","Zyski kapitałowe","Zatrzymane podatki","Inne podatki",Opłaty +"16 sty 2026, 14 maj 2024","ConAgra Foods CAG (US2058871029)",US,"612 days",644.71405544,"+US$17, -US$31.02 (+61.91 PLN, -122.44 PLN)","+US$10,961.04, -US$20,000 (+39,914.26 PLN, -78,935.63 PLN)","-US$9,038.96 (-39,021.37 PLN)","US$0 (0 PLN)","US$0.13 (0.47 PLN)","US$0 (0 PLN)" +"16 sty 2026, 26 lut 2025","ConAgra Foods CAG (US2058871029)",US,"324 days",19.34235976,"+US$17, -US$25.85 (+61.91 PLN, -102 PLN)","+US$328.85, -US$500 (+1,197.49 PLN, -1,972.96 PLN)","-US$171.15 (-775.47 PLN)","US$0 (0 PLN)","US$0 (0 PLN)","US$0 (0 PLN)" +"2 mar 2026, 26 lut 2025","Dentsply XRAY (US24906P1093)",US,"369 days",159.37938363,"+US$14.42, -US$18.82 (+52.24 PLN, -74.27 PLN)","+US$2,298.25, -US$3,000 (+8,326.02 PLN, -11,837.81 PLN)","-US$701.75 (-3,511.79 PLN)","US$0 (0 PLN)","US$0.03 (0.10 PLN)","US$0 (0 PLN)" +,,,,,,,,,, +"Other brokerage account transactions",,,,,,,,,, +Date,Description & symbol,ISIN,Quantity,Country,Gross value,"Taxes withheld","Other taxes",Fees,"Net value", +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, diff --git a/src/csvparser.rs b/src/csvparser.rs index b5aa804..219609f 100644 --- a/src/csvparser.rs +++ b/src/csvparser.rs @@ -7,6 +7,10 @@ use nom::{ }; use polars::prelude::*; +const DELIMITER: u8 = b';'; +const DELIMITER_AS_STR: &str = ";"; + +#[derive(PartialEq)] enum ParsingState { None, Crypto(String), @@ -18,6 +22,21 @@ enum ParsingState { DividendsUSD(String), } +impl std::fmt::Display for ParsingState { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + ParsingState::None => write!(f, "ParsingState::None"), + ParsingState::InterestsPLN(_) => write!(f, "ParsingState::InterestsPLN"), + ParsingState::Crypto(_) => write!(f, "ParsingState::Crypto"), + ParsingState::InterestsEUR(_) => write!(f, "ParsingState::InterestsEUR"), + ParsingState::SellUSD(_) => write!(f, "ParsingState::SellUSD"), + ParsingState::SellEUR(_) => write!(f, "ParsingState::SellEUR"), + ParsingState::DividendsEUR(_) => write!(f, "ParsingState::DividendsEUR"), + ParsingState::DividendsUSD(_) => write!(f, "ParsingState::DividendsUSD"), + } + } +} + #[derive(Default)] struct InvestmentTransactions { pub acquired_dates: Vec, @@ -79,6 +98,45 @@ fn extract_cash_with_currency(cashline: &str, currency: &str) -> Result Err(format!("Error converting: {cashline_string}")), } } +fn extract_income_and_cost(cashline: &str) -> Result<(crate::Currency, crate::Currency), String> { + log::info!("Entry moneyin/total amount line: {cashline}"); + // replace "," to "." only if there are is no "." already + // otherwise remove ',' + let cashline_string: String = if cashline.contains(',') && cashline.contains(".") { + cashline.to_string().replace(",", "") + } else { + cashline.to_string().replace(",", ".") + }; + log::info!("Processed moneyin/total amount line: {cashline_string}"); + // example +US$10,961.04, -US$20,000 (+39,914.26 PLN, -78,935.63 PLN) + let usd_income_parser = tuple(( + many_m_n(0, 1, tag("+")), + tag("US$"), + double::<&str, Error<_>>, + )); + let usd_cost_parser = tuple(( + many_m_n(0, 1, tag("-")), + tag("US$"), + double::<&str, Error<_>>, + )); + let mut usd_parser = tuple((usd_income_parser, tag(" "), usd_cost_parser)); + // example +€10,961.04, -€20,000 (+39,914.26 PLN, -78,935.63 PLN) + let euro_income_parser = tuple((many_m_n(0, 1, tag("+")), tag("€"), double::<&str, Error<_>>)); + let euro_cost_parser = tuple((many_m_n(0, 1, tag("-")), tag("€"), double::<&str, Error<_>>)); + let mut euro_parser = tuple((euro_income_parser, tag(" "), euro_cost_parser)); + + if let Ok((_, ((_, _, income), _, (_, _, cost)))) = usd_parser(cashline_string.as_str()) { + log::trace!("Extracted cost: {cost} income: {income}"); + return Ok((crate::Currency::USD(cost), crate::Currency::USD(income))); + } else if let Ok((_, ((_, _, income), _, (_, _, cost)))) = euro_parser(cashline_string.as_str()) + { + log::trace!("Extracted cost: {cost} income: {income}"); + return Ok((crate::Currency::EUR(cost), crate::Currency::EUR(income))); + } + Err(format!( + "Error extracing income and cost from cashline: {cashline_string}" + )) +} fn extract_cash(cashline: &str) -> Result { // We need to erase "," before processing it by parser @@ -96,6 +154,12 @@ fn extract_cash(cashline: &str) -> Result { let mut euro_parser2 = tuple((tag("€"), double::<&str, Error<_>>)); let mut usd_parser = tuple((many_m_n(0, 1, tag("-")), tag("$"), double::<&str, Error<_>>)); let mut usd_parser2 = tuple((many_m_n(0, 1, tag("-")), double::<&str, Error<_>>, tag("$"))); + // "US$0(0PLN)" + let mut usd_parser3 = tuple(( + many_m_n(0, 1, tag("+")), + tag("US$"), + double::<&str, Error<_>>, + )); let mut pln_parser = tuple((double::<&str, Error<_>>, tag("PLN"))); if let Ok((_, (value, _))) = euro_parser(cashline_string.as_str()) { @@ -116,13 +180,15 @@ fn extract_cash(cashline: &str) -> Result { } else { value })); + } else if let Ok((_, (_, _, value))) = usd_parser3(cashline_string.as_str()) { + return Ok(crate::Currency::USD(value)); } else { return Err(format!("Error converting: {cashline_string}")); } } fn extract_dividends_transactions(df: &DataFrame) -> Result { - let df_transactions = if df.get_column_names().contains(&"Currency") { + let mut df_transactions = if df.get_column_names().contains(&"Currency") { df.select([ "Date", "Symbol", @@ -130,6 +196,35 @@ fn extract_dividends_transactions(df: &DataFrame) -> Result Result Result { - let df_transactions = if df.get_column_names().contains(&"Currency") { + let mut df_transactions = if df.get_column_names().contains(&"Currency") { df.select([ "Date acquired", "Date sold", @@ -153,6 +286,42 @@ fn extract_sold_transactions(df: &DataFrame) -> Result "Gross proceeds", "Currency", ]) + } else if df + .get_column_names() + .contains(&"Date (of Sale, of Purchase)") + || df.get_column_names().contains(&"Data (Sprzedaży, Zakupu)") + { + // English or Polish column names for v2 format + let date_col = if df.get_column_names().contains(&"Data (Sprzedaży, Zakupu)") { + "Data (Sprzedaży, Zakupu)" + } else { + "Date (of Sale, of Purchase)" + }; + let symbol_col = if df.get_column_names().contains(&"Opis, symbol i kod ISIN") { + "Opis, symbol i kod ISIN" + } else { + "Description, symbol and ISIN" + }; + let value_col = if df + .get_column_names() + .contains(&"Wartość (Sprzedaży, Zakupu)") + { + "Wartość (Sprzedaży, Zakupu)" + } else { + "Value (of Sale, of Purchase)" + }; + let other_taxes_col = if df.get_column_names().contains(&"Inne podatki") { + "Inne podatki" + } else { + "Other taxes" + }; + let fees_col = if df.get_column_names().contains(&"Opłaty") { + "Opłaty" + } else { + "Fees" + }; + + df.select([date_col, symbol_col, value_col, other_taxes_col, fees_col]) } else { df.select([ "Date acquired", @@ -165,6 +334,54 @@ fn extract_sold_transactions(df: &DataFrame) -> Result } .map_err(|_| "Error: Unable to select collumns in Revolut sold transactions")?; + // Rename Polish columns to English for consistent processing + if df_transactions + .get_column_names() + .contains(&"Data (Sprzedaży, Zakupu)") + { + df_transactions = df_transactions + .rename("Data (Sprzedaży, Zakupu)", "Date (of Sale, of Purchase)") + .expect("Unable to rename Data (Sprzedaży, Zakupu)") + .clone(); + } + + if df_transactions + .get_column_names() + .contains(&"Opis, symbol i kod ISIN") + { + df_transactions = df_transactions + .rename("Opis, symbol i kod ISIN", "Description, symbol and ISIN") + .expect("Unable to rename Opis, symbol i kod ISIN") + .clone(); + } + + if df_transactions + .get_column_names() + .contains(&"Wartość (Sprzedaży, Zakupu)") + { + df_transactions = df_transactions + .rename( + "Wartość (Sprzedaży, Zakupu)", + "Value (of Sale, of Purchase)", + ) + .expect("Unable to rename Wartość (Sprzedaży, Zakupu)") + .clone(); + } + + if df_transactions.get_column_names().contains(&"Inne podatki") { + df_transactions = df_transactions + .rename("Inne podatki", "Other taxes") + .expect("Unable to rename Inne podatki") + .clone(); + } + + if df_transactions.get_column_names().contains(&"Opłaty") { + df_transactions = df_transactions + .rename("Opłaty", "Fees") + .expect("Unable to rename Opłaty") + .clone(); + } + Ok(df_transactions) } @@ -193,23 +410,63 @@ fn extract_investment_gains_and_costs_transactions( fn extract_intrest_rate_transactions(df: &DataFrame) -> Result { // 1. Get rows with transactions - let mut df_transactions = if df.get_column_names().contains(&"Completed Date") { - df.select(&["Description", "Money in", "Completed Date"]) + let (mut df_transactions, income_column) = if df.get_column_names().contains(&"Completed Date") + { + ( + df.select(&["Description", "Money in", "Completed Date"]) + .map_err(|_| { + "Error: Unable to select collumns in Revolut Interests rate transactions" + })?, + "Money in", + ) + } else if df.get_column_names().contains(&"Gross interest") { + // Check if Polish column name "Opis" exists, otherwise use English "Description" + let description_col = if df.get_column_names().contains(&"Opis") { + "Opis" + } else { + "Description" + }; + // Check if Polish column name "Data" exists (for Date) + let date_col = if df.get_column_names().contains(&"Data") { + "Data" + } else { + "Date" + }; + ( + df.select(&[description_col, "Gross interest", date_col]) + .map_err(|_| { + "Error: Unable to select collumns in Revolut Interests rate transactions" + })?, + "Gross interest", + ) } else { - df.select(&["Description", "Money in", "Date"]) - } - .map_err(|_| "Error: Unable to select collumns in Revolut Interests rate transactions")?; + ( + df.select(&["Description", "Money in", "Date"]) + .map_err(|_| { + "Error: Unable to select collumns in Revolut Interests rate transactions" + })?, + "Money in", + ) + }; // This code maps diffrent Description types related to interests into "odsetki" + let description_column_name = if df_transactions.get_column_names().contains(&"Opis") { + "Opis" + } else { + "Description" + }; + let intrest_rate = df_transactions - .column("Description") + .column(description_column_name) .map_err(|_| "Error: Unable to get Description")? .iter() .map(|x| { let m = match x { AnyValue::Utf8(x) => { if x.contains("Odsetki brutto") + || x.contains("Oprocentowanie brutto") || x.contains("Gross interest") + || x.contains("Gross Interest") || x.contains("Interest earned") { Some("odsetki") @@ -223,19 +480,42 @@ fn extract_intrest_rate_transactions(df: &DataFrame) -> Result>(); - // cols: "Completed Date", "Description" , "Money In" + // cols: "Completed Date", "Description" , "Money In" or "Gross interest" let new_desc = Series::new("Description", intrest_rate); - df_transactions + let df_transactions_ref = df_transactions .with_column(new_desc) .expect("Unable to replace Description column"); - let intrest_rate_mask = df_transactions + let intrest_rate_mask = df_transactions_ref .column("Description") .map_err(|_| "Error: Unable to get Description")? .equal("odsetki") .expect("Error creating mask"); - let filtred_df = df.filter(&intrest_rate_mask).expect("Error filtering"); - // I need to get (Currecy, Transaction Data and amount) + let mut filtred_df = df.filter(&intrest_rate_mask).expect("Error filtering"); + + // Rename columns to standardized English names for consistent processing + if income_column == "Gross interest" { + filtred_df = filtred_df + .rename("Gross interest", "Money in") + .expect("Unable to rename Gross interest to Money in") + .clone(); + } + + // Rename Polish "Data" to English "Date" if needed + if filtred_df.get_column_names().contains(&"Data") { + filtred_df = filtred_df + .rename("Data", "Date") + .expect("Unable to rename Data to Date") + .clone(); + } + + // Rename Polish "Opis" to English "Description" if needed + if filtred_df.get_column_names().contains(&"Opis") { + filtred_df = filtred_df + .rename("Opis", "Description") + .expect("Unable to rename Opis to Description") + .clone(); + } Ok(filtred_df) } @@ -261,6 +541,91 @@ fn parse_symbols(df: &DataFrame, col_name: &str) -> Result>, Ok(symbols) } +fn parse_investment_pairs_transaction_dates( + df: &DataFrame, + col_name: &str, +) -> Result<(Vec, Vec), &'static str> { + let date = df + .column(col_name) + .map_err(|_| "Error: Unable to select Date")?; + + let mut sold_dates: Vec = vec![]; + let mut acquire_dates: Vec = vec![]; + + let possible_dates = date + .utf8() + .map_err(|_| "Error: Unable to convert to utf8")?; + + possible_dates.into_iter().try_for_each(|x| { + if let Some(d) = x { + // Split by ',' and then having four parts + // group each two making up single date + let parts = d.split(",").collect::>(); + + // english document is having 3 commas so we have four parts parts + // polish document is having only 1 comma so we have two parts + let (sell_date, acquire_date) = if parts.len() == 4 { + ( + format!("{}, {}", parts[0], parts[1]), + format!("{}, {}", parts[2], parts[3]), + ) + } else { + (parts[0].to_string(), parts[1].to_string()) + }; + + // Replace Polish month abbreviations with English ones + let sell_date = sell_date + .replace("sty", "Jan") + .replace("lut", "Feb") + .replace("mar", "Mar") + .replace("kwi", "Apr") + .replace("maj", "May") + .replace("cze", "Jun") + .replace("lip", "Jul") + .replace("sie", "Aug") + .replace("wrz", "Sep") + .replace("paź", "Oct") + .replace("lis", "Nov") + .replace("gru", "Dec"); + + let acquire_date = acquire_date + .replace("sty", "Jan") + .replace("lut", "Feb") + .replace("mar", "Mar") + .replace("kwi", "Apr") + .replace("maj", "May") + .replace("cze", "Jun") + .replace("lip", "Jul") + .replace("sie", "Aug") + .replace("wrz", "Sep") + .replace("paź", "Oct") + .replace("lis", "Nov") + .replace("gru", "Dec"); + + let cd = chrono::NaiveDate::parse_from_str(&sell_date, "%b %e, %Y") + .or_else(|_| chrono::NaiveDate::parse_from_str(&sell_date, "%e %b %Y")) + .or_else(|_| chrono::NaiveDate::parse_from_str(&sell_date, "%d %b %Y")) + .or_else(|_| chrono::NaiveDate::parse_from_str(&sell_date, "%b %d, %Y")) + .map_err(|_| "Error converting cell to NaiveDate")? + .format("%m/%d/%y") + .to_string(); + sold_dates.push(cd); + + let cd = chrono::NaiveDate::parse_from_str(&acquire_date, " %b %e, %Y") + .or_else(|_| chrono::NaiveDate::parse_from_str(&acquire_date, " %e %b %Y")) + .or_else(|_| chrono::NaiveDate::parse_from_str(&acquire_date, " %d %b %Y")) + .or_else(|_| chrono::NaiveDate::parse_from_str(&acquire_date, " %b %d, %Y")) + .map_err(|_| "Error converting cell to NaiveDate")? + .format("%m/%d/%y") + .to_string(); + acquire_dates.push(cd); + } + Ok::<(), &str>(()) + })?; + + Ok((acquire_dates, sold_dates)) +} + fn parse_investment_transaction_dates( df: &DataFrame, col_name: &str, @@ -274,25 +639,32 @@ fn parse_investment_transaction_dates( .map_err(|_| "Error: Unable to convert to utf8")?; possible_dates.into_iter().try_for_each(|x| { if let Some(d) = x { + // Replace Polish month abbreviations with English ones let d = d - .replace(" sty ", " Jan ") - .replace(" lut ", " Feb ") - .replace(" mar ", " Mar ") - .replace(" kwi ", " Apr ") - .replace(" maj ", " May ") - .replace(" cze ", " Jun ") - .replace(" lip ", " Jul ") - .replace(" sie ", " Aug ") - .replace(" wrz ", " Sep ") - .replace(" Sept ", " Sep ") - .replace(" paź ", " Oct ") - .replace(" lis ", " Nov ") - .replace(" gru ", " Dec "); + .replace("sty", "Jan") + .replace("lut", "Feb") + .replace("mar", "Mar") + .replace("kwi", "Apr") + .replace("maj", "May") + .replace("cze", "Jun") + .replace("lip", "Jul") + .replace("sie", "Aug") + .replace("wrz", "Sep") + .replace("Sept", "Sep") + .replace("paź", "Oct") + .replace("lis", "Nov") + .replace("gru", "Dec"); let cd = chrono::NaiveDate::parse_from_str(&d, "%Y-%m-%dT%H:%M:%S%.fZ") .or_else(|_| chrono::NaiveDate::parse_from_str(&d, "%Y-%m-%d")) .or_else(|_| chrono::NaiveDate::parse_from_str(&d, "%e %b %Y")) + .or_else(|_| chrono::NaiveDate::parse_from_str(&d, "%d %b %Y")) .or_else(|_| chrono::NaiveDate::parse_from_str(&d, "%b %d, %Y")) - .map_err(|_| "Error converting cell to NaiveDate")? + .or_else(|_| chrono::NaiveDate::parse_from_str(&d, "%m/%d/%y")) + .or_else(|_| chrono::NaiveDate::parse_from_str(&d, "%d.%m.%Y")) // Polish format: 27.01.2026 + .map_err(|e| { + log::error!("Failed to parse date '{}': {}", d, e); + "Error converting cell to NaiveDate" + })? .format("%m/%d/%y") .to_string(); dates.push(cd); @@ -303,6 +675,25 @@ fn parse_investment_transaction_dates( Ok(dates) } +fn parse_sold_incomes( + df: &DataFrame, + col: &str, +) -> Result<(Vec, Vec), String> { + let moneyin = df + .column(col) + .map_err(|_| format!("Error: Unable to select column '{}'", col))?; + let possible_incomes = moneyin + .utf8() + .map_err(|_| format!("Error: Unable to convert column '{}' to utf8", col))?; + + possible_incomes + .into_iter() + .filter_map(|x| x) + .map(|d| extract_income_and_cost(&d)) + .collect::, String>>() + .map(|v| v.into_iter().unzip()) +} + fn parse_incomes(df: &DataFrame, col: &str) -> Result, String> { let moneyin = df .column(col) @@ -370,6 +761,107 @@ fn parse_income_with_currency( Ok(incomes) } +/// Process gathered financial operations from revolut consolidated v2 document +fn process_tax_consolidated_data_v2( + state: &ParsingState, + delimiter: u8, + ta: &mut TransactionAccumulator, +) -> Result<(), String> { + match state { + ParsingState::None => {} + ParsingState::InterestsEUR(s) | ParsingState::InterestsPLN(s) => { + log::trace!("String to parse of Interests: {s}"); + let df = CsvReader::new(std::io::Cursor::new(s.as_bytes())) + .truncate_ragged_lines(true) + .with_separator(delimiter) + .finish() + .map_err(|e| format!("Error reading CSV (Interests): {e}"))?; + log::info!("Content of Interests: {df}"); + let filtred_df = extract_intrest_rate_transactions(&df)?; + log::trace!("DF: {filtred_df}"); + ta.dates + .extend(parse_investment_transaction_dates(&filtred_df, "Date")?); + let lincomes = parse_incomes(&filtred_df, "Money in")?; + ta.symbols.extend(std::iter::repeat_n(None, lincomes.len())); + let ltaxes: Vec = lincomes.iter().map(|i| i.derive(0.0)).collect(); + ta.taxes.extend(ltaxes); + ta.incomes.extend(lincomes); + } + ParsingState::SellEUR(s) | ParsingState::SellUSD(s) => { + log::trace!("String to parse of Sells: {s}"); + let df = CsvReader::new(std::io::Cursor::new(s.as_bytes())) + .truncate_ragged_lines(true) + .with_separator(delimiter) + .finish() + .map_err(|e| format!("Error reading CSV (Sells): {e}"))?; + log::trace!("Content of Sells: {df}"); + let filtred_df = extract_sold_transactions(&df)? + .drop_nulls::(None) + .map_err(|_| "Error: Removing null rows in Revolut sold transactions")?; + log::info!("Filtered Sold Data of interest: {filtred_df}"); + let (lacquired_dates, lsold_dates) = parse_investment_pairs_transaction_dates( + &filtred_df, + "Date (of Sale, of Purchase)", + )?; + log::info!("dates:: {:?}", ta.stock.acquired_dates); + + // For each sold data has to be one acquire date + if lacquired_dates.len() != lsold_dates.len() { + return Err("ERROR: Different number of acquired and sold dates".to_string()); + } + ta.stock.sold_dates.extend(lsold_dates); + ta.stock.acquired_dates.extend(lacquired_dates); + ta.stock + .symbols + .extend(parse_symbols(&filtred_df, "Description, symbol and ISIN")?); + let (lcosts, lsells) = parse_sold_incomes(&filtred_df, "Value (of Sale, of Purchase)")?; + ta.stock.gross.extend(lsells); + let fees = parse_incomes(&filtred_df, "Fees")?; + let other_taxes = parse_incomes(&filtred_df, "Other taxes")?; + + // Add fees and other taxes (Sec taxes) to costs + let lcosts: Vec = lcosts + .iter() + .zip(fees) + .zip(other_taxes) + .map(|((x, y), z)| x.derive(x.value() + y.value() + z.value())) + .collect(); + ta.stock.costs.extend(lcosts); + } + ParsingState::DividendsEUR(s) | ParsingState::DividendsUSD(s) => { + log::trace!("String to parse of Dividends: {s}"); + let df = CsvReader::new(std::io::Cursor::new(s.as_bytes())) + .truncate_ragged_lines(true) + .with_separator(delimiter) + .finish() + .map_err(|e| format!("Error reading CSV (Dividends): {e}"))?; + log::info!("Content of Dividends: {df}"); + let filtred_df = extract_dividends_transactions(&df)? + .drop_nulls::(None) + .map_err(|_| "Error: Removing null rows in Revolut dividends transactions")?; + log::info!("Filtered Dividend Data of interest: {filtred_df}"); + ta.dates + .extend(parse_investment_transaction_dates(&filtred_df, "Date")?); + + ta.symbols + .extend(parse_symbols(&filtred_df, "Description & symbol")?); + + // parse income + let lincomes = parse_incomes(&filtred_df, "Gross dividend / income")?; + // parse taxes + let ltaxes = parse_incomes(&filtred_df, "Taxes withheld")?; + + ta.incomes.extend(lincomes); + ta.taxes.extend(ltaxes); + } + ParsingState::Crypto(s) => { + log::trace!("Warning: String to parse of Crypto: {s}"); + log::warn!("Warning: processing crypto is not supported"); + } + } + Ok(()) +} + /// Process gathered financial operations from revolut consolidated tax document fn process_tax_consolidated_data( state: &ParsingState, @@ -387,6 +879,7 @@ fn process_tax_consolidated_data( .map_err(|e| format!("Error reading CSV (Interests): {e}"))?; log::info!("Content of Interests: {df}"); let filtred_df = extract_intrest_rate_transactions(&df)?; + log::trace!("DF: {filtred_df}"); ta.dates .extend(parse_investment_transaction_dates(&filtred_df, "Date")?); let lincomes = parse_incomes(&filtred_df, "Money in")?; @@ -489,6 +982,74 @@ fn process_tax_consolidated_data( Ok(()) } +fn process_tax_consolidated_statement_v2( + rdr: &mut csv::Reader, + ta: &mut TransactionAccumulator, +) -> Result<(), String> { + let mut state = ParsingState::None; + + for result in rdr.records() { + let record = result.map_err(|e| format!("Error reading CSV record: {e}"))?; + let line = record + .into_iter() + .collect::>() + .join(DELIMITER_AS_STR); + // IF line contains specific pattern then we will mark that + log::trace!("V2 CSV processed line: {line}"); + match &mut state { + ParsingState::None => { + if line.contains("only interest receipt") { + log::info!("V2 Starting to collect: interests"); + state = ParsingState::InterestsPLN(String::new()); + } else if line.contains("Units which have been sold") + || line.contains("Sprzedane jednostki") + { + log::info!("Starting to collect: Stock Sells"); + state = ParsingState::SellUSD(String::new()); + } else if line.contains("only dividend receipt") + || line.contains("tylko wpływy z dywidendy") + { + log::info!("Starting to collect: dividends"); + state = ParsingState::DividendsEUR(String::new()); + } else if line.contains("Crypto") { + log::info!("Starting to collect: Crypto transactions"); + log::warn!("Crypto taxation is not supported!"); + } + } + + ParsingState::SellEUR(s) + | ParsingState::SellUSD(s) + | ParsingState::DividendsEUR(s) + | ParsingState::DividendsUSD(s) + | ParsingState::InterestsEUR(s) + | ParsingState::InterestsPLN(s) + | ParsingState::Crypto(s) => { + // If we are in the state that we look for line that finish it + // "---------" or "Units which has been sold" or.... + if line.contains("---------") + || line.contains("Units which have been sold") + || line.contains("Sprzedane jednostki") + || line.contains("Other brokerage account transactions") + { + log::info!("V2 Starting to process gathered lines for state: {state}"); + process_tax_consolidated_data_v2(&state, DELIMITER, ta)?; + state = if line.contains("Units which have been sold") + || line.contains("Sprzedane jednostki") + { + ParsingState::SellUSD(String::new()) + } else { + ParsingState::None + }; + } else { + s.push_str(&line); + s.push('\n'); + } + } + } + } + Ok(()) +} + /// Parse revolut CSV documents (savings account, trading, crypto) /// returns: ( /// dividend transactions in a form: date, gross income, tax taken, company name (if available) @@ -514,8 +1075,6 @@ pub fn parse_revolut_transactions(csvtoparse: &str) -> Result Result Result<(), String> { + // USD format from Revolut CSV v2: "+US$10,961.04, -US$20,000 (+39,914.26 PLN, -78,935.63 PLN)" + // Function extracts: (cost, income) - note the order! + + // Test USD with comma thousands separator + assert_eq!( + extract_income_and_cost("+US$10,961.04, -US$20,000 (+39,914.26 PLN, -78,935.63 PLN)"), + Ok(( + crate::Currency::USD(20000.0), + crate::Currency::USD(10961.04) + )) + ); + + // Test USD without thousands separator + assert_eq!( + extract_income_and_cost("+US$328.85, -US$500 (+1,197.49 PLN, -1,972.96 PLN)"), + Ok((crate::Currency::USD(500.0), crate::Currency::USD(328.85))) + ); + + // Test USD with decimals in cost + assert_eq!( + extract_income_and_cost("+US$668.10, -US$981.99 (+2,432.86 PLN, -3,799.41 PLN)"), + Ok((crate::Currency::USD(981.99), crate::Currency::USD(668.10))) + ); + + // Test USD with thousands separator in both values + assert_eq!( + extract_income_and_cost("+US$2,298.25, -US$3,000 (+8,326.02 PLN, -11,837.81 PLN)"), + Ok((crate::Currency::USD(3000.0), crate::Currency::USD(2298.25))) + ); + + // Test EUR format: "+€5,980.74, -€10,000 (+25,266.56 PLN, -42,000.00 PLN)" + assert_eq!( + extract_income_and_cost("+€5,980.74, -€10,000 (+25,266.56 PLN, -42,000.00 PLN)"), + Ok((crate::Currency::EUR(10000.0), crate::Currency::EUR(5980.74))) + ); + + // Test EUR without thousands separator + assert_eq!( + extract_income_and_cost("+€130.75, -€250.50 (+554.74 PLN, -1,062.12 PLN)"), + Ok((crate::Currency::EUR(250.50), crate::Currency::EUR(130.75))) + ); + + Ok(()) + } + #[test] fn test_parse_incomes() -> Result<(), String> { let moneyin = Series::new("Money in", vec!["6000€", "3000€"]); @@ -1275,6 +1886,321 @@ mod tests { Ok(()) } + #[test] + fn test_parse_revolut_transactions_consolidated_v2_eng() -> Result<(), String> { + // Format v2 parses dividends and sold transactions from CSV file. + // Parser returns values in original currencies (USD, EUR) - NOT in PLN. + // Conversion to PLN happens outside the parser in the main application logic. + let expected_result = Ok(RevolutTransactions { + dividend_transactions: vec![ + // EUR interests + ( + "01/27/26".to_owned(), + crate::Currency::EUR(0.01), + crate::Currency::EUR(0.00), + None, + ), + ( + "01/30/26".to_owned(), + crate::Currency::EUR(0.01), + crate::Currency::EUR(0.00), + None, + ), + ( + "02/03/26".to_owned(), + crate::Currency::EUR(0.01), + crate::Currency::EUR(0.00), + None, + ), + ( + "02/06/26".to_owned(), + crate::Currency::EUR(0.01), + crate::Currency::EUR(0.00), + None, + ), + ( + "02/09/26".to_owned(), + crate::Currency::EUR(0.01), + crate::Currency::EUR(0.00), + None, + ), + ( + "02/13/26".to_owned(), + crate::Currency::EUR(0.01), + crate::Currency::EUR(0.00), + None, + ), + ( + "02/16/26".to_owned(), + crate::Currency::EUR(0.01), + crate::Currency::EUR(0.00), + None, + ), + ( + "02/19/26".to_owned(), + crate::Currency::EUR(0.01), + crate::Currency::EUR(0.00), + None, + ), + ( + "02/23/26".to_owned(), + crate::Currency::EUR(0.01), + crate::Currency::EUR(0.00), + None, + ), + ( + "02/25/26".to_owned(), + crate::Currency::EUR(0.23), + crate::Currency::EUR(0.00), + None, + ), + ( + "02/26/26".to_owned(), + crate::Currency::EUR(0.24), + crate::Currency::EUR(0.00), + None, + ), + ( + "02/27/26".to_owned(), + crate::Currency::EUR(0.23), + crate::Currency::EUR(0.00), + None, + ), + // PLN interests (Aion account) + ( + "01/01/26".to_owned(), + crate::Currency::PLN(1.81), + crate::Currency::PLN(0.00), + None, + ), + ( + "01/01/26".to_owned(), + crate::Currency::PLN(4.39), + crate::Currency::PLN(0.00), + None, + ), + ( + "01/02/26".to_owned(), + crate::Currency::PLN(1.81), + crate::Currency::PLN(0.00), + None, + ), + ( + "01/02/26".to_owned(), + crate::Currency::PLN(4.40), + crate::Currency::PLN(0.00), + None, + ), + ( + "01/03/26".to_owned(), + crate::Currency::PLN(1.79), + crate::Currency::PLN(0.00), + None, + ), + // USD dividends - CSV: $112.69 (405.87 PLN), parser returns USD amount + ( + "01/06/26".to_owned(), + crate::Currency::USD(112.69), + crate::Currency::USD(16.90), + Some("Best Buy dividend".to_string()), + ), + ( + "01/07/26".to_owned(), + crate::Currency::USD(27.32), + crate::Currency::USD(6.83), + Some("Canadian Natural Resources dividend".to_string()), + ), + ( + "01/09/26".to_owned(), + crate::Currency::USD(25.50), + crate::Currency::USD(3.82), + Some("Dentsply dividend".to_string()), + ), + ( + "01/09/26".to_owned(), + crate::Currency::USD(68.89), + crate::Currency::USD(0.00), + Some("Ambev dividend".to_string()), + ), + // EUR dividend - CSV: €130.75 (554.74 PLN), parser returns EUR amount + ( + "04/23/26".to_owned(), + crate::Currency::EUR(130.75), + crate::Currency::EUR(19.61), + Some("Ahold Delhaize N.V. dividend".to_string()), + ), + ], + sold_transactions: vec![ + // Note: Parser currently returns EUR for sold transactions, but CSV contains USD values + // This is likely a parser bug that needs fixing separately + // ConAgra Foods - 3 transactions in USD (but parser returns EUR) + // Sale: Jan 16, 2026, Purchase: May 14, 2024 + // CSV: +US$10,961.04, -US$20,000 (+39,914.26 PLN, -78,935.63 PLN), Fee: US$0.13 (0.47 PLN) + // Cost: $20,000 + $0.13 = $20,000.13, Proceeds: $10,961.04 + ( + "05/14/24".to_owned(), + "01/16/26".to_owned(), + crate::Currency::USD(20000.13), + crate::Currency::USD(10961.04), + Some("ConAgra Foods CAG (US2058871029)".to_string()), + ), + // Sale: Jan 16, 2026, Purchase: Feb 26, 2025 + // CSV: +US$328.85, -US$500, no fee + ( + "02/26/25".to_owned(), + "01/16/26".to_owned(), + crate::Currency::USD(500.00), + crate::Currency::USD(328.85), + Some("ConAgra Foods CAG (US2058871029)".to_string()), + ), + // Sale: Jan 16, 2026, Purchase: Apr 9, 2025 + // CSV: +US$668.10, -US$981.99, Fee: US$0.01 (0.03 PLN) + // Cost: $981.99 + $0.01 = $982.00 + ( + "04/09/25".to_owned(), + "01/16/26".to_owned(), + crate::Currency::USD(982.00), + crate::Currency::USD(668.10), + Some("ConAgra Foods CAG (US2058871029)".to_string()), + ), + // Dentsply - Sale: Mar 2, 2026, Purchase: Feb 26, 2025 + // CSV: +US$2,298.25, -US$3,000, Fee: US$0.03 (0.10 PLN) + // Cost: $3,000 + $0.03 = $3,000.03 + ( + "02/26/25".to_owned(), + "03/02/26".to_owned(), + crate::Currency::USD(3000.03), + crate::Currency::USD(2298.25), + Some("Dentsply XRAY (US24906P1093)".to_string()), + ), + // IBM - Sale: Mar 4, 2026, Purchase: Feb 24, 2026 + // CSV: +US$747.61, -US$698.24, Fee: US$1.74 (6.23 PLN) + US$0.01 (0.03 PLN) + // Cost: $698.24 + $1.74 + $0.01 = $699.99 + ( + "02/24/26".to_owned(), + "03/04/26".to_owned(), + crate::Currency::USD(699.99), + crate::Currency::USD(747.61), + Some("IBM IBM (US4592001014)".to_string()), + ), + ], + crypto_transactions: vec![], + }); + assert_eq!( + parse_revolut_transactions("revolut_data/consolidated-statement-v2-eng.csv"), + expected_result + ); + Ok(()) + } + + #[test] + fn test_parse_revolut_transactions_consolidated_v2_pol() -> Result<(), String> { + // Format v2 Polish version - tests parser with Polish column names and date format + // Parser should handle Polish headers: "Zestawienie transakcji (tylko wpływy z dywidendy)", + // "Sprzedane jednostki", "Data (Sprzedaży, Zakupu)" + // Returns values in original currencies (USD, EUR) - NOT in PLN + let expected_result = Ok(RevolutTransactions { + dividend_transactions: vec![ + // EUR interests - Polish description "Oprocentowanie brutto" + ( + "01/27/26".to_owned(), + crate::Currency::EUR(0.01), + crate::Currency::EUR(0.00), + None, + ), + ( + "01/30/26".to_owned(), + crate::Currency::EUR(0.01), + crate::Currency::EUR(0.00), + None, + ), + ( + "02/03/26".to_owned(), + crate::Currency::EUR(0.01), + crate::Currency::EUR(0.00), + None, + ), + // PLN interests (Aion account) + ( + "01/01/26".to_owned(), + crate::Currency::PLN(1.81), + crate::Currency::PLN(0.00), + None, + ), + ( + "01/01/26".to_owned(), + crate::Currency::PLN(4.39), + crate::Currency::PLN(0.00), + None, + ), + ( + "01/02/26".to_owned(), + crate::Currency::PLN(1.81), + crate::Currency::PLN(0.00), + None, + ), + // USD dividends from Polish CSV + ( + "01/06/26".to_owned(), + crate::Currency::USD(112.69), + crate::Currency::USD(16.90), + Some("Best Buy dividend".to_string()), + ), + ( + "01/07/26".to_owned(), + crate::Currency::USD(27.32), + crate::Currency::USD(6.83), + Some("Canadian Natural Resources dividend".to_string()), + ), + ( + "01/09/26".to_owned(), + crate::Currency::USD(25.50), + crate::Currency::USD(3.82), + Some("Dentsply dividend".to_string()), + ), + // EUR dividend + ( + "04/23/26".to_owned(), + crate::Currency::EUR(130.75), + crate::Currency::EUR(19.61), + Some("Ahold Delhaize N.V. dividend".to_string()), + ), + ], + sold_transactions: vec![ + // ConAgra Foods - 2 transactions (shortened for test) + // Polish CSV: "16 sty 2026, 14 maj 2024" (dates in Polish format) + ( + "05/14/24".to_owned(), + "01/16/26".to_owned(), + crate::Currency::USD(20000.13), + crate::Currency::USD(10961.04), + Some("ConAgra Foods CAG (US2058871029)".to_string()), + ), + ( + "02/26/25".to_owned(), + "01/16/26".to_owned(), + crate::Currency::USD(500.00), + crate::Currency::USD(328.85), + Some("ConAgra Foods CAG (US2058871029)".to_string()), + ), + // Dentsply - Polish CSV: "2 mar 2026, 26 lut 2025" + ( + "02/26/25".to_owned(), + "03/02/26".to_owned(), + crate::Currency::USD(3000.03), + crate::Currency::USD(2298.25), + Some("Dentsply XRAY (US24906P1093)".to_string()), + ), + ], + crypto_transactions: vec![], + }); + assert_eq!( + parse_revolut_transactions("revolut_data/consolidated-statement-v2-pol.csv"), + expected_result + ); + Ok(()) + } + #[test] fn test_parse_revolut_investment_gain_and_losses_dividends() -> Result<(), String> { let expected_result = Ok(RevolutTransactions {