Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Modify FlatEx PDF-Importer to support new transaction #3699

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -24,6 +24,7 @@
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.removal;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.sale;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.security;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.taxRefund;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.taxes;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.withFailureMessage;
import static name.abuchen.portfolio.datatransfer.ExtractorTestUtilities.countAccountTransactions;
Expand Down Expand Up @@ -1358,9 +1359,9 @@ public void testFinTechKauf10()
assertThat(entry.getNote(), is("Transaktion-Nr.: 1321692761"));

assertThat(entry.getPortfolioTransaction().getMonetaryAmount(),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(399.99))));
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(400.00))));
assertThat(entry.getPortfolioTransaction().getGrossValue(),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(399.99))));
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(400.00))));
assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.TAX),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00))));
assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.FEE),
Expand Down Expand Up @@ -3930,7 +3931,8 @@ public void testFlatExDegiroKauf02()
hasDate("2023-09-04T09:53"), hasShares(20.00), //
hasSource("FlatExDegiroKauf02.txt"), //
hasNote("Transaktion-Nr.: 3409315621"), //
hasAmount("EUR", 1138.15), hasGrossValue("EUR", 1126.29), hasForexGrossValue("USD", 1213.80), //
hasAmount("EUR", 1138.15), hasGrossValue("EUR", 1126.29), //
hasForexGrossValue("USD", 1213.80), //
hasTaxes("EUR", 0.00), hasFees("EUR", 5.90 + 4.71 + 1.25))));
}

Expand Down Expand Up @@ -3971,6 +3973,92 @@ public void testFlatExDegiroKauf02WithSecurityInEUR()
}))));
}

@Test
public void testFlatExDegiroKauf03()
{
FinTechGroupBankPDFExtractor extractor = new FinTechGroupBankPDFExtractor(new Client());

List<Exception> errors = new ArrayList<>();

List<Item> results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "FlatExDegiroKauf03.txt"), errors);

assertThat(errors, empty());
assertThat(countSecurities(results), is(1L));
assertThat(countBuySell(results), is(1L));
assertThat(countAccountTransactions(results), is(1L));
assertThat(results.size(), is(3));
new AssertImportActions().check(results, CurrencyUnit.EUR);

// check security
assertThat(results, hasItem(security( //
hasIsin("US912810TB44"), hasWkn("A3KYSD"), hasTicker(null), //
hasName("USA 21/51"), //
hasCurrencyCode("USD"))));

// check buy sell transaction
assertThat(results, hasItem(purchase( //
hasDate("2023-12-18T15:19"), hasShares(20.00), //
hasSource("FlatExDegiroKauf03.txt"), //
hasNote("Transaktion-Nr.: 3527408249"), //
hasAmount("EUR", 1172.56 + 0.87), hasGrossValue("EUR", 1159.52), //
hasForexGrossValue("USD", 1264.80), //
hasTaxes("EUR", 0.00), hasFees("EUR", 5.90 + 4.70 + 3.31))));

// check tax refund transaction
assertThat(results, hasItem(taxRefund( //
hasDate("2023-12-18T15:19"), hasShares(20.00), //
hasSource("FlatExDegiroKauf03.txt"), //
hasNote("Transaktion-Nr.: 3527408249"), //
hasAmount("EUR", 0.87), hasGrossValue("EUR", 0.87), //
hasForexGrossValue("USD", 0.95), //
hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))));
}

@Test
public void testFlatExDegiroKauf03WithSecurityInEUR()
{
Security security = new Security("USA 21/51", CurrencyUnit.EUR);
security.setIsin("US912810TB44");
security.setWkn("A3KYSD");

Client client = new Client();
client.addSecurity(security);

FinTechGroupBankPDFExtractor extractor = new FinTechGroupBankPDFExtractor(client);

List<Exception> errors = new ArrayList<>();

List<Item> results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "FlatExDegiroKauf03.txt"), errors);

assertThat(errors, empty());
assertThat(countSecurities(results), is(0L));
assertThat(countBuySell(results), is(1L));
assertThat(countAccountTransactions(results), is(1L));
assertThat(results.size(), is(2));
new AssertImportActions().check(results, CurrencyUnit.EUR);

// check buy sell transaction
assertThat(results, hasItem(purchase( //
hasDate("2023-12-18T15:19"), hasShares(20.00), //
hasSource("FlatExDegiroKauf03.txt"), //
hasNote("Transaktion-Nr.: 3527408249"), //
hasAmount("EUR", 1172.56 + 0.87), hasGrossValue("EUR", 1159.52), //
hasTaxes("EUR", 0.00), hasFees("EUR", 5.90 + 4.70 + 3.31), //
check(tx -> {
CheckCurrenciesAction c = new CheckCurrenciesAction();
Status s = c.process((PortfolioTransaction) tx, new Portfolio());
assertThat(s, is(Status.OK_STATUS));
}))));

// check tax refund transaction
assertThat(results, hasItem(taxRefund( //
hasDate("2023-12-18T15:19"), hasShares(20.00), //
hasSource("FlatExDegiroKauf03.txt"), //
hasNote("Transaktion-Nr.: 3527408249"), //
hasAmount("EUR", 0.87), hasGrossValue("EUR", 0.87), //
hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))));
}

@Test
public void testFlatExDegiroVerkauf01()
{
Expand Down
@@ -0,0 +1,70 @@
PDFBox Version: 1.8.17
Portfolio Performance Version: 0.66.2
-----------------------------------------
flatexDEGIRO Bank AG
Postfach 100551
41405 Neuss
USt-IdNr.: DE 246 786 363
Kundenservice:
Tel.: +49 9221 7035898
E-Mail: info@flatex.de
flatexDEGIRO Bank AG - Hammfelddamm 4 - 41460 Neuss, Deutschland
Frankfurt, 19.12.2023
9538999829995689991999
Herr Auftragsdatum 17.12.2023n
Max Max Handelstag 18.12.2023
F weg 5 Ausführungszeit 15:19 Uhrr
99999 Dorf Valuta 20.12.2023
Auftragsnummer 239999999/1
Ausf.platz/-art Frankfurt
Wertpapierabrechnung Kauf
Ihre Depotnummer: 1009999999
Depotinhaber: Max, Max
Nr.238299050/1 Kauf USA 21/51 (US912810TB44/A3KYSD)
Ausgeführt : 2.000,000000 USD Kurswert : 1.159,52 EUR
Kurs : 63,240000 % Provision : 5,90 EUR
Devisenkurs : 1,090800 Eigene Spesen : 0,00 EUR
Faktor : 1,0000000 *Fremde Spesen : 4,70 EUR
Verwahrart : Wertpapierrechnung
Lagerstelle : Clearstream Lux. Zinsbetrag : 3,31 EUR
Lagerland : USA Bemessungs-
Zinsen für : 35 Tage grundlage : 0,00 EUR
Gewinn/Verlust: 0,00 EUR **Einbeh. Steuer: -0,87 EUR
Endbetrag : -1.172,56 EUR
* Enthalten sind folgende Gebühren Courtage : 0,00 EUR
Tradinggebühr : 1,96 EUR
Regulierung : 2,67 EUR
Schlussnoten : 0,07 EUR
LS-Umlegung : 0,00 EUR
Finanztransaktionssteuer : 0,00 EUR
Sonstige : 0,00 EUR
** Enthalten sind folgende Steuern (negative Werte bedeuten Steuererstattung)
Kapitalertragsteuer : -0,83 EUR
Solidaritätszuschlag : -0,04 EUR
Kirchensteuer : 0,00 EUR
Evtl. Details dazu finden Sie im Steuerreport unter der Transaktion-Nr.:
3527408249.
Die Verrechnung der Endbeträge erfolgt über Ihr Konto Nr.: 1009999999
Die Wertpapiere sowie den Gegenwert werden wir entsprechend der Abrechnung mit
______________________________________________________________________________
Seite 1/2
BLZ 101 308 00 / BIC: BIWBDE33XXX - Aktiengesellschaft, Sitz Frankfurt - Amtsgericht Frankfurt am Main (HRB 105687)
Vorsitzender des Aufsichtsrats: Martin Korbmacher - Vorstand: Frank Niehage (Vorsitzender), Dr. Benon Janos,
Dr. Matthias Heinrich, Steffen Jentsch, Stephan Simmang, Jens Möbitz
2000003606220780 0113202460000102
dem angegebenen Valutatag buchen. Bitte prüfen Sie diese Abrechnung auf
Richtigkeit und Vollständigkeit. Etwaige Einwendungen gegen diese Abrechnung
müssen unverzüglich nach Zugang bei der Bank erhoben werden. Die
Unterlassung rechtzeitiger Einwendung gilt als Genehmigung. Bitte beachten
Sie mögliche Hinweise des Emittenten hinsichtlich vorzeitiger Fälligstellung,
beispielsweise wegen Knock-Out, in den jeweiligen Optionsscheinbedingungen und
informieren Sie sich rechtzeitig, welche spezielle Fälligkeitsregelung auf die
von Ihnen gehaltenen Wertpapiere zutreffen. Kapitalerträge sind ESt-pflichtig.
Diese Mitteilung ist maschinell erstellt und wird nicht unterschrieben.
Für weitergehende Fragen wenden Sie sich bitte an Ihr flatex-Service-Team.
______________________________________________________________________________
Seite 2/2
BLZ 101 308 00 / BIC: BIWBDE33XXX - Aktiengesellschaft, Sitz Frankfurt - Amtsgericht Frankfurt am Main (HRB 105687)
Vorsitzender des Aufsichtsrats: Martin Korbmacher - Vorstand: Frank Niehage (Vorsitzender), Dr. Benon Janos,
Dr. Matthias Heinrich, Steffen Jentsch, Stephan Simmang, Jens Möbitz
2000003606220780 0113202460000202