diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/oldenburgischelandesbankag/OldenburgischeLandesbankAGPDFExtractorTest.java b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/oldenburgischelandesbankag/OldenburgischeLandesbankAGPDFExtractorTest.java index 3a4705563b..c35f1e9206 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/oldenburgischelandesbankag/OldenburgischeLandesbankAGPDFExtractorTest.java +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/oldenburgischelandesbankag/OldenburgischeLandesbankAGPDFExtractorTest.java @@ -247,6 +247,39 @@ public void testWertpapierVerkauf02() hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); } + @Test + public void testWertpapierStornoKauf01() + { + OldenburgischeLandesbankAGPDFExtractor extractor = new OldenburgischeLandesbankAGPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "StornoKauf01.txt"), errors); + + assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(1L)); + assertThat(countAccountTransactions(results), is(0L)); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check security + assertThat(results, hasItem(security( // + hasIsin("NL0010408704"), hasWkn("A12HWR"), hasTicker(null), // + hasName("VanEck Sust.World EQ.UC.ETF Aandelen oop naam o.N."), // + hasCurrencyCode("EUR")))); + + // check dividends transaction + assertThat(results, hasItem(withFailureMessage( // + Messages.MsgErrorOrderCancellationUnsupported, // + purchase( // + hasDate("2023-09-15T18:18:08"), hasShares(0.563027), // + hasSource("StornoKauf01.txt"), // + hasNote("Ord.-Ref.: 908703"), // + hasAmount("EUR", 15.88), hasGrossValue("EUR", 15.88), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))))); + } + @Test public void testDividende01() { @@ -411,6 +444,39 @@ public void testDividende04() hasTaxes("EUR", 1.40 + 0.07), hasFees("EUR", 0.00)))); } + @Test + public void testWertpapierStornoDividende01() + { + OldenburgischeLandesbankAGPDFExtractor extractor = new OldenburgischeLandesbankAGPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "StornoDividende01.txt"), errors); + + assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check security + assertThat(results, hasItem(security( // + hasIsin("NL0010408704"), hasWkn("A12HWR"), hasTicker(null), // + hasName("VanEck Sust.World EQ.UC.ETF Aandelen oop naam o.N."), // + hasCurrencyCode("EUR")))); + + // check dividends transaction + assertThat(results, hasItem(withFailureMessage( // + Messages.MsgErrorOrderCancellationUnsupported, // + dividend( // + hasDate("2023-09-13T00:00"), hasShares(95.967357), // + hasSource("StornoDividende01.txt"), // + hasNote(null), // + hasAmount("EUR", 15.88), hasGrossValue("EUR", 16.31), // + hasTaxes("EUR", 0.41 + 0.02), hasFees("EUR", 0.00))))); + } + @Test public void testVorabpauschale01() { diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/oldenburgischelandesbankag/StornoDividende01.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/oldenburgischelandesbankag/StornoDividende01.txt new file mode 100644 index 0000000000..eac2eaad29 --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/oldenburgischelandesbankag/StornoDividende01.txt @@ -0,0 +1,39 @@ +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.71.2 +----------------------------------------- +Oldenburg, 28.09.2023 +Es betreut Sie: +Ihr OLB Team +Postfach 26 05, 26016 Oldenburg 26121 Oldenburg +Tel.: 0441 999092-810 +bco.regional-2@olb.de +Vom 28.09.2023 +Seite 1 von 1 +ZKOYyg DMdQu Depotnummer 5396762597 +Am hKGLzOVOxmyK 01 +21132 YLRe i. bj +STORNIERUNG +Stornierung Dividendengutschrift – VanEck Sust.World EQ.UC.ETF Aandelen oop naam o.N. +ISIN (WKN) Stück/ Nominale Ausschüttung pro Stück Währung +NL0010408704 (A12HWR) 95,967357 0,170000 EUR +Zahlbarkeitstag 13.09.2023 +Bestandsstichtag 07.09.2023 +Ex-Tag 06.09.2023 +Geschäftsjahr 01.01.2023-31.12.2023 +Dividendengutschrift 16,31 EUR +Kapitalertragsteuer 0,41 EUR +Solidaritätszuschlag 0,02 EUR +Ausmachender Betrag + 15,88 EUR +Verwahrart +GS Clearstream Frankfurt +Sehr geehrte Depotkundin, sehr geehrter Depotkunde, +der oben angezeigte Fondsertrag (Ausschüttung) wurde storniert. +Die Neuabrechnung wird Ihnen entsprechend zugestellt. +Der ausmachende Betrag wird Ihnen auf Ihr Konto DE06280200505764921200 gutgeschrieben. +Mit freundlichen Grüßen +Ihre OLB Bank +FNZ +Oldenburgische Landesbank AG | Stau 15/17 | 26122 Oldenburg +Vorsitzender des Aufsichtsrates: Axel Bartsch | Vorstand: Stefan Barth, Vorsitzender | Marc Ampaw | Aytac Aydin | Chris Eggert | Giacomo Petrobelli | Dr. Rainer Polster +Sitz der Gesellschaft: Oldenburg (Oldb) Registergericht: Oldenburg (Oldb) HR-Nummer: HRB 3003 +Informationen zur Nutzung Ihrer Daten erhalten Sie auf www.olb.de/dsgvo und in jeder OLB-Filiale. Auf Wunsch schicken wir die Informationen auch gerne per Post zu. \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/oldenburgischelandesbankag/StornoKauf01.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/oldenburgischelandesbankag/StornoKauf01.txt new file mode 100644 index 0000000000..1eee6fd419 --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/oldenburgischelandesbankag/StornoKauf01.txt @@ -0,0 +1,36 @@ +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.71.2 +----------------------------------------- +Oldenburg, 28.09.2023 +Es betreut Sie: +Ihr OLB Team +Postfach 26 05, 26016 Oldenburg 26121 Oldenburg +Tel.: 0441 999092-810 +bco.regional-2@olb.de +HmcVNi eJtAw +Am UEatZDDSXxks 56 +55892 ESNK i. OB +Depotinhaber dTntdC dGEHy Seite 1 von 1 +Depotnummer 1766356816 Ausführung 15.09.2023 18:18:08 +Orderreferenz 908703 +Handelsreferenz 847266 +WERTPAPIERABRECHNUNG +Stornierung Kauf - VanEck Sust.World EQ.UC.ETF Aandelen oop naam o.N. +Produktgruppe: ETF +Handels- / Ausführungsplatz - Festpreisgeschäft +ISIN (WKN) Stück/ Nominale Kurswert Währung Bruttobetrag +NL0010408704 (A12HWR) 0,563027 28,1514 EUR 15,85 EUR +Ausmachender Betrag: 15,88 EUR +Beratungsfreies Geschäft +Verrechnungskonto Valuta +DE06280200505764921200 19.09.2023 +Verwahrart +Girosammelverwahrung +Sehr geehrte Depotkundin, sehr geehrter Depotkunde, der oben angezeigte Kauf wurde storniert. +Bitte beachten Sie folgende Hinweise: +Dieses Dokument wurde maschinell erstellt und wird nicht unterschrieben. +FNZ +Oldenburgische Landesbank AG | Stau 15/17 | 26122 Oldenburg +Vorsitzender des Aufsichtsrates: Axel Bartsch | Vorstand: Stefan Barth, Vorsitzender | Marc Ampaw | Aytac Aydin | Chris Eggert | Giacomo Petrobelli | Dr. Rainer Polster +Sitz der Gesellschaft: Oldenburg (Oldb) Registergericht: Oldenburg (Oldb) HR-Nummer: HRB 3003 +Informationen zur Nutzung Ihrer Daten erhalten Sie auf www.olb.de/dsgvo und in jeder OLB-Filiale. Auf Wunsch schicken wir die Informationen auch gerne per Post zu. \ No newline at end of file diff --git a/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/OldenburgischeLandesbankAGPDFExtractor.java b/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/OldenburgischeLandesbankAGPDFExtractor.java index 3f97b470bd..66010cfaa8 100644 --- a/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/OldenburgischeLandesbankAGPDFExtractor.java +++ b/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/OldenburgischeLandesbankAGPDFExtractor.java @@ -62,6 +62,14 @@ private void addBuySellTransaction() if ("Verkauf".equals(v.get("type"))) t.setType(PortfolioTransaction.Type.SELL); }) + + // @formatter:off + // Stornierung Kauf - VanEck Sust.World EQ.UC.ETF Aandelen oop naam o.N. + // @formatter:on + .section("type").optional() // + .match("^(?Stornierung) (Kauf|Verkauf)( \\-|:) .*$") // + .assign((t, v) -> v.getTransactionContext().put(FAILURE, Messages.MsgErrorOrderCancellationUnsupported)) + // @formatter:off // Kauf - iS.EO G.B.C.1.5-10.5y.U.ETF DE Inhaber-Anteile // DE000A0H0785 (A0H078) 0,033037 10,0350 EUR 1,47 EUR @@ -70,7 +78,7 @@ private void addBuySellTransaction() // LU1861134382 (A2JSDA) 9,727757 93,4642 EUR 982,07 EUR // @formatter:on .section("name", "isin", "wkn", "currency") // - .match("^(Kauf|Verkauf)( \\-|:) (?.*)$") // + .match("^(Stornierung )?(Kauf|Verkauf)( \\-|:) (?.*)$") // .match("^(?[A-Z]{2}[A-Z0-9]{9}[0-9]) \\((?[A-Z0-9]{6})\\) [\\.,\\d]+ [\\.,\\d]+ (?[\\w]{3}) [\\.,\\d]+ [\\w]{3}$") // .assign((t, v) -> t.setSecurity(getOrCreateSecurity(v))) @@ -134,14 +142,21 @@ private void addBuySellTransaction() .match("^Orderreferenz (?.*)$") // .assign((t, v) -> t.setNote("Ord.-Ref.: " + v.get("note"))) - .wrap(BuySellEntryItem::new); + .wrap((t, ctx) -> { + BuySellEntryItem item = new BuySellEntryItem(t); + + if (ctx.getString(FAILURE) != null) + item.setFailureMessage(ctx.getString(FAILURE)); + + return item; + }); addFeesSectionsTransaction(pdfTransaction, type); } private void addDividendeTransaction() { - DocumentType type = new DocumentType("ERTRAGSAUSSCH.TTUNG"); + DocumentType type = new DocumentType("(ERTRAGSAUSSCH.TTUNG|Stornierung Dividendengutschrift)"); this.addDocumentTyp(type); Transaction pdfTransaction = new Transaction<>(); @@ -158,6 +173,13 @@ private void addDividendeTransaction() return accountTransaction; }) + // @formatter:off + // Stornierung Dividendengutschrift – VanEck Sust.World EQ.UC.ETF Aandelen oop naam o.N. + // @formatter:on + .section("type").optional() // + .match("^(?Stornierung) (Aussch.ttung|Dividendengutschrift) \\– .*$") // + .assign((t, v) -> v.getTransactionContext().put(FAILURE, Messages.MsgErrorOrderCancellationUnsupported)) + // @formatter:off // Ausschüttung – iS.EO G.B.C.1.5-10.5y.U.ETF DE Inhaber-Anteile // DE000A0H0785 (A0H078) 71,851808 8,895903 EUR @@ -166,7 +188,7 @@ private void addDividendeTransaction() // IE00B0M62Q58 (A0HGV0) 5,200029 0,169600 USD // @formatter:on .section("name", "isin", "wkn", "currency") // - .match("^(Aussch.ttung|Dividendengutschrift) \\– (?.*)$") // + .match("^(Stornierung )?(Aussch.ttung|Dividendengutschrift) \\– (?.*)$") // .match("^(?[A-Z]{2}[A-Z0-9]{9}[0-9]) \\((?[A-Z0-9]{6})\\) [\\.,\\d]+ [\\.,\\d]+ (?[\\w]{3})$") // .assign((t, v) -> t.setSecurity(getOrCreateSecurity(v))) @@ -211,7 +233,14 @@ private void addDividendeTransaction() checkAndSetGrossUnit(gross, fxGross, t, type.getCurrentContext()); }) - .wrap(TransactionItem::new); + .wrap((t, ctx) -> { + TransactionItem item = new TransactionItem(t); + + if (ctx.getString(FAILURE) != null) + item.setFailureMessage(ctx.getString(FAILURE)); + + return item; + }); addTaxesSectionsTransaction(pdfTransaction, type); addFeesSectionsTransaction(pdfTransaction, type);