Skip to content

Commit 26286a2

Browse files
authored
Modify FlatEx PDF-Importer to support new transaction (#5182)
https://forum.portfolio-performance.info/t/pdf-import-von-flatex/1752/314
1 parent 4497158 commit 26286a2

File tree

3 files changed

+168
-67
lines changed

3 files changed

+168
-67
lines changed

name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/fintechgroupbank/FinTechGroupBankPDFExtractorTest.java

Lines changed: 76 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package name.abuchen.portfolio.datatransfer.pdf.fintechgroupbank;
22

3-
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.check;
43
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.deposit;
54
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.dividend;
65
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.fee;
@@ -61,7 +60,6 @@
6160
import name.abuchen.portfolio.model.AccountTransaction;
6261
import name.abuchen.portfolio.model.BuySellEntry;
6362
import name.abuchen.portfolio.model.Client;
64-
import name.abuchen.portfolio.model.Portfolio;
6563
import name.abuchen.portfolio.model.PortfolioTransaction;
6664
import name.abuchen.portfolio.model.Security;
6765
import name.abuchen.portfolio.model.Transaction;
@@ -4322,12 +4320,7 @@ public void testFlatExDegiroKauf02WithSecurityInEUR()
43224320
hasSource("FlatExDegiroKauf02.txt"), //
43234321
hasNote("Transaktion-Nr.: 3409315621"), //
43244322
hasAmount("EUR", 1138.15), hasGrossValue("EUR", 1126.29), //
4325-
hasTaxes("EUR", 0.00), hasFees("EUR", 5.90 + 4.71 + 1.25), //
4326-
check(tx -> {
4327-
var c = new CheckCurrenciesAction();
4328-
var s = c.process((PortfolioTransaction) tx, new Portfolio());
4329-
assertThat(s, is(Status.OK_STATUS));
4330-
}))));
4323+
hasTaxes("EUR", 0.00), hasFees("EUR", 5.90 + 4.71 + 1.25))));
43314324
}
43324325

43334326
@Test
@@ -4404,12 +4397,7 @@ public void testFlatExDegiroKauf03WithSecurityInEUR()
44044397
hasSource("FlatExDegiroKauf03.txt"), //
44054398
hasNote("Transaktion-Nr.: 3527408249"), //
44064399
hasAmount("EUR", 1172.56 + 0.87), hasGrossValue("EUR", 1159.52), //
4407-
hasTaxes("EUR", 0.00), hasFees("EUR", 5.90 + 4.70 + 3.31), //
4408-
check(tx -> {
4409-
var c = new CheckCurrenciesAction();
4410-
var s = c.process((PortfolioTransaction) tx, new Portfolio());
4411-
assertThat(s, is(Status.OK_STATUS));
4412-
}))));
4400+
hasTaxes("EUR", 0.00), hasFees("EUR", 5.90 + 4.70 + 3.31))));
44134401

44144402
// check tax refund transaction
44154403
assertThat(results, hasItem(taxRefund( //
@@ -5412,14 +5400,7 @@ public void testFlatExDegiroDividende05WithSecurityInEUR()
54125400
hasSource("FlatExDegiroDividende05.txt"), //
54135401
hasNote("Transaktion-Nr.: 0123456789 | Bruttothesaurierung 32,86 USD"), //
54145402
hasAmount("EUR", 0.15), hasGrossValue("EUR", 0.15), //
5415-
hasTaxes("EUR", 0.00), hasFees("EUR", 0.00), //
5416-
check(tx -> {
5417-
var c = new CheckCurrenciesAction();
5418-
var account = new Account();
5419-
account.setCurrencyCode("EUR");
5420-
var s = c.process((AccountTransaction) tx, account);
5421-
assertThat(s, is(Status.OK_STATUS));
5422-
}))));
5403+
hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))));
54235404
}
54245405

54255406
@Test
@@ -5487,14 +5468,7 @@ public void testFlatExDegiroDividende06WithSecurityInEUR()
54875468
hasSource("FlatExDegiroDividende06.txt"), //
54885469
hasNote("Transaktion-Nr.: 6685264591 | Bruttothesaurierung 26,25 USD"), //
54895470
hasAmount("EUR", 0.28), hasGrossValue("EUR", 0.28), //
5490-
hasTaxes("EUR", 0.00), hasFees("EUR", 0.00), //
5491-
check(tx -> {
5492-
var c = new CheckCurrenciesAction();
5493-
var account = new Account();
5494-
account.setCurrencyCode("EUR");
5495-
var s = c.process((AccountTransaction) tx, account);
5496-
assertThat(s, is(Status.OK_STATUS));
5497-
}))));
5471+
hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))));
54985472
}
54995473

55005474
@Test
@@ -5562,14 +5536,7 @@ public void testFlatExDegiroDividende07WithSecurityInEUR()
55625536
hasSource("FlatExDegiroDividende07.txt"), //
55635537
hasNote("Transaktion-Nr.: 6040257022 | Bruttothesaurierung 51,78 USD"), //
55645538
hasAmount("EUR", 10.65), hasGrossValue("EUR", 10.65), //
5565-
hasTaxes("EUR", 0.00), hasFees("EUR", 0.00), //
5566-
check(tx -> {
5567-
var c = new CheckCurrenciesAction();
5568-
var account = new Account();
5569-
account.setCurrencyCode("EUR");
5570-
var s = c.process((AccountTransaction) tx, account);
5571-
assertThat(s, is(Status.OK_STATUS));
5572-
}))));
5539+
hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))));
55735540
}
55745541

55755542
@Test
@@ -5701,14 +5668,7 @@ public void testFlatExDegiroDividende10WithSecurityInEUR()
57015668
hasSource("FlatExDegiroDividende10.txt"), //
57025669
hasNote("Transaktion-Nr.: 3415691892"), //
57035670
hasAmount("EUR", 109.86), hasGrossValue("EUR", 151.53), //
5704-
hasTaxes("EUR", 41.67), hasFees("EUR", 0.00), //
5705-
check(tx -> {
5706-
var c = new CheckCurrenciesAction();
5707-
var account = new Account();
5708-
account.setCurrencyCode("EUR");
5709-
var s = c.process((AccountTransaction) tx, account);
5710-
assertThat(s, is(Status.OK_STATUS));
5711-
}))));
5671+
hasTaxes("EUR", 41.67), hasFees("EUR", 0.00))));
57125672
}
57135673

57145674
@Test
@@ -5746,6 +5706,74 @@ public void testFlatExDegiroDividende11()
57465706
hasTaxes("EUR", 504.06 + 27.71), hasFees("EUR", 0.00)))));
57475707
}
57485708

5709+
@Test
5710+
public void testFlatExDegiroDividende12()
5711+
{
5712+
var extractor = new FinTechGroupBankPDFExtractor(new Client());
5713+
5714+
List<Exception> errors = new ArrayList<>();
5715+
5716+
var results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "FlatExDegiroDividende12.txt"), errors);
5717+
5718+
assertThat(errors, empty());
5719+
assertThat(countSecurities(results), is(1L));
5720+
assertThat(countBuySell(results), is(0L));
5721+
assertThat(countAccountTransactions(results), is(1L));
5722+
assertThat(countAccountTransfers(results), is(0L));
5723+
assertThat(countItemsWithFailureMessage(results), is(0L));
5724+
assertThat(results.size(), is(2));
5725+
new AssertImportActions().check(results, "EUR");
5726+
5727+
// check security
5728+
assertThat(results, hasItem(security( //
5729+
hasIsin("US92826C8394"), hasWkn("A0NC7B"), hasTicker(null), //
5730+
hasName("VISA INC."), //
5731+
hasCurrencyCode("USD"))));
5732+
5733+
// check dividends transaction
5734+
assertThat(results, hasItem(dividend( //
5735+
hasDate("2025-12-01T00:00"), hasShares(10.00), //
5736+
hasSource("FlatExDegiroDividende12.txt"), //
5737+
hasNote("Transaktion-Nr. : 4620331518"), //
5738+
hasAmount("EUR", 4.31), hasGrossValue("EUR", 5.79), //
5739+
hasForexGrossValue("USD", 6.70), //
5740+
hasTaxes("EUR", 1.48), hasFees("EUR", 0.00))));
5741+
}
5742+
5743+
@Test
5744+
public void testFlatExDegiroDividende12WithSecurityInEUR()
5745+
{
5746+
var security = new Security("VISA INC.", "EUR");
5747+
security.setIsin("US92826C8394");
5748+
security.setWkn("A0NC7B");
5749+
5750+
var client = new Client();
5751+
client.addSecurity(security);
5752+
5753+
var extractor = new FinTechGroupBankPDFExtractor(client);
5754+
5755+
List<Exception> errors = new ArrayList<>();
5756+
5757+
var results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "FlatExDegiroDividende12.txt"), errors);
5758+
5759+
assertThat(errors, empty());
5760+
assertThat(countSecurities(results), is(0L));
5761+
assertThat(countBuySell(results), is(0L));
5762+
assertThat(countAccountTransactions(results), is(1L));
5763+
assertThat(countAccountTransfers(results), is(0L));
5764+
assertThat(countItemsWithFailureMessage(results), is(0L));
5765+
assertThat(results.size(), is(1));
5766+
new AssertImportActions().check(results, "EUR");
5767+
5768+
// check dividends transaction
5769+
assertThat(results, hasItem(dividend( //
5770+
hasDate("2025-12-01T00:00"), hasShares(10.00), //
5771+
hasSource("FlatExDegiroDividende12.txt"), //
5772+
hasNote("Transaktion-Nr. : 4620331518"), //
5773+
hasAmount("EUR", 4.31), hasGrossValue("EUR", 5.79), //
5774+
hasTaxes("EUR", 1.48), hasFees("EUR", 0.00))));
5775+
}
5776+
57495777
@Test
57505778
public void testFlatExDegiroDividendeStorno01()
57515779
{
@@ -7227,7 +7255,7 @@ public void testFlatExDeGiroSammelabrechnung01()
72277255
assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2021-04-09T17:37")));
72287256
assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(3)));
72297257
assertThat(entry.getSource(), is("FlatExDeGiroSammelabrechnung01.txt"));
7230-
assertNull(entry.getNote());
7258+
assertThat(entry.getNote(), is("Transaktion-Nr.: 229"));
72317259

72327260
assertThat(entry.getPortfolioTransaction().getMonetaryAmount(),
72337261
is(Money.of("EUR", Values.Amount.factorize(1737.50))));
@@ -7248,7 +7276,7 @@ public void testFlatExDeGiroSammelabrechnung01()
72487276
assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2021-04-09T17:40")));
72497277
assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(41)));
72507278
assertThat(entry.getSource(), is("FlatExDeGiroSammelabrechnung01.txt"));
7251-
assertNull(entry.getNote());
7279+
assertThat(entry.getNote(), is("Transaktion-Nr.: 229"));
72527280

72537281
assertThat(entry.getPortfolioTransaction().getMonetaryAmount(),
72547282
is(Money.of("EUR", Values.Amount.factorize(1796.12))));
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
PDFBox Version: 3.0.5
2+
Portfolio Performance Version: 0.80.4
3+
System: macosx | aarch64 | 21.0.5+11-LTS | Azul Systems, Inc.
4+
5+
flatexDEGIRO Bank AG
6+
Postfach 100551
7+
41405 Neuss
8+
USt-IdNr.: DE 246 786 363
9+
Kundenservice:
10+
Tel.: +49 9221 7035898
11+
12+
flatexDEGIRO Bank AG - Hammfelddamm 4 - 41460 Neuss, Deutschland
13+
0102382000005403789880
14+
mujjMSAoPIi AEu jkTsBi dtbDpHY
15+
En zYKQTwV 32
16+
79112 ftcYKWyrP
17+
Frankfurt, 01.12.2025
18+
Dividendengutschrift für ausländische Wertpapiere
19+
Ihre Depotnummer: 1252435510
20+
Depotinhaber : pOFRsN IvxQONg, CQwIjyvRWkL AzF
21+
Nr.4620331518 VISA INC. (US92826C8394/A0NC7B)
22+
St. : 10,000000 Bruttodividende
23+
pro Stück : 0,6700 USD
24+
Extag : 12.11.2025 Bruttodividende : 6,70 USD
25+
Zahlungstag : 01.12.2025 Bemessungs-
26+
Valuta : 01.12.2025 grundlage : 2,31 EUR
27+
*Einbeh. Steuer : 0,61 EUR
28+
Devisenkurs : 1,156600
29+
Quellenst.-satz : 15,00 % Gez. Quellenst. : 1,01 USD
30+
Endbetrag : 4,31 EUR
31+
32+
Enthalten sind folgende Steuern (negative Werte bedeuten Steuererstattung)
33+
Kapitalertragsteuer : 0,58 EUR
34+
Solidaritätszuschlag : 0,03 EUR
35+
Kirchensteuer : 0,00 EUR
36+
Details dazu inkl. evtl. angerechneter ausländischer Quellensteuer
37+
finden Sie im Steuerreport unter der Transaktion-Nr. :
38+
4620331518
39+
Die Verrechnung des Endbetrages erfolgt über Ihr Konto Nr.: 4921662509
40+
Anrechenbare Quellensteuer** 15,00 % = 1,01 USD
41+
** nur relevant für Steuerinländer
42+
Die Gutschrift erfolgt unter Vorbehalt des Eingangs. Einwendungen müssen
43+
unverzüglich nach Zugang erhoben werden. Die Unterlassung rechtzeitiger
44+
Einwendung gilt als Genehmigung.
45+
Dieser Beleg ist keine Steuerbescheinigung. Kapitalerträge sind
46+
einkommensteuerpflichtig.
47+
Diese Mitteilung ist maschinell erstellt und wird nicht unterschrieben.
48+
Für weitergehende Fragen wenden Sie sich bitte an Ihr flatex-Service-Team.
49+
BLZ 101 308 00 / BIC: BIWBDE33XXX - Aktiengesellschaft, Sitz Frankfurt - Amtsgericht Frankfurt am Main (HRB 105687)
50+
Vorsitzender des Aufsichtsrats: Hans-Hermann Lotter - Vorstand: Oliver Behrens (Vorsitzender), Dr. Benon Janos (stellv. Vorsitzender),
51+
Evgeni Kaplun, Jens Möbitz, Christiane Strubel
52+
2000005403789880 0113102380000101

0 commit comments

Comments
 (0)