diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/ingdiba/Dividende20.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/ingdiba/Dividende20.txt new file mode 100644 index 0000000000..a2aa362e24 --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/ingdiba/Dividende20.txt @@ -0,0 +1,38 @@ +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.67.1 +----------------------------------------- +ING-DiBa AG · 60628 Frankfurt am Main +Depotinhaber: wBfeWQzQR HQuqhL +Herrn Direkt-Depot Nr.: 4868266015 +czLLoFgTH zsmzzg Datum: 02.01.2024 +cfoDSdXzLrh. 6 Seite: 1 von 2 +28674 Berlin +Zinsgutschrift +ISIN (WKN) DE000A3MP4P9 (A3MP4P) +Wertpapierbezeichnung 4,00000% PCC SE Inh.-Teilschuldv. v.21(22/26) +Nominale 5.000,00 EUR +Zins-/Dividendensatz 1,00 % +Kupon-Nr. / per 01.01.2024 +Zinstermin 01. Ja/Ap/Jl/Ok +Ex-Tag 02.01.2024 +Zahltag 01.01.2024 +Brutto EUR 50,00 +Gesamtbetrag zu Ihren Gunsten EUR 50,00 +Abrechnungs-IBAN TH21 5001 0517 3241 1824 47 +Valuta 02.01.2024 +Jahressteuerbescheinigung folgt. +Weitere steuerliche Informationen entnehmen Sie bitte der Rückseite. +ING-DiBa AG · Theodor-Heuss-Allee 2 · 60486 Frankfurt am Main · Vorsitzende des Aufsichtsrates: Susanne Klöß-Braekler · Vorstand: Nick Jue (Vorsitzender), +Michael Clijdesdale, Eddy Henning, Sigrid Kozmiensky, Daniel Llano Manibardo, Dr. Ralph Müller · Sitz: Frankfurt am Main · AG Frankfurt am Main · HRB 7727 +Steuernummer: 047 220 2800 4 · USt-IdNr.: DE 114 103 475 · Internet: www.ing.de · E-Mail: info@ing.de · BIC: INGDDEFFXXX · Mitglied im Einlagensicherungsfonds +Depotinhaber: zgmnqGPNs Zcsduc +Direkt-Depot Nr.: 6054747228 +Datum: 02.01.2024 +Seite: 2 von 2 +ISIN (WKN) DE000A3MP4P9 (A3MP4P) +KapSt-pflichtiger Kapitalertrag 50,00 EUR +Mit Sparer-Pauschbetrag verrechnet -50,00 EUR +Sparer-Pauschbetrag vor Ertrag 123,45 EUR +Sparer-Pauschbetrag nach Ertrag 73,45 EUR +Bei Fragen besuchen Sie uns einfach unter www.ing.de/wertpapierwissen - da gibt es viele schnelle +Antworten. Oder senden Sie uns eine E-Mail an info@ing.de . \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/ingdiba/INGDiBaPDFExtractorTest.java b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/ingdiba/INGDiBaPDFExtractorTest.java index e8d2703698..a459ccbeec 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/ingdiba/INGDiBaPDFExtractorTest.java +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/ingdiba/INGDiBaPDFExtractorTest.java @@ -1,6 +1,7 @@ package name.abuchen.portfolio.datatransfer.pdf.ingdiba; import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.check; +import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.dividend; import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasAmount; import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasCurrencyCode; import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasDate; @@ -18,6 +19,8 @@ import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.purchase; import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.sale; import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.security; +import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.taxes; +import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.withFailureMessage; import static name.abuchen.portfolio.datatransfer.ExtractorTestUtilities.countAccountTransactions; import static name.abuchen.portfolio.datatransfer.ExtractorTestUtilities.countBuySell; import static name.abuchen.portfolio.datatransfer.ExtractorTestUtilities.countSecurities; @@ -1609,6 +1612,39 @@ public void testVorabpauschale02() is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); } + @Test + public void testVorabpauschale03() + { + INGDiBaPDFExtractor extractor = new INGDiBaPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Vorabpauschale03.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("IE00BSPLC413"), hasWkn("A12HU5"), hasTicker(null), // + hasName("SPDR MSCI USA Sm.C.Val.W.UETF Registered Shares o.N."), // + hasCurrencyCode("EUR")))); + + // check taxes transaction + assertThat(results, hasItem(withFailureMessage( // + Messages.MsgErrorTransactionTypeNotSupported, // + taxes( // + hasDate("2024-01-02T00:00"), hasShares(60.00), // + hasSource("Vorabpauschale03.txt"), // + hasNote(null), // + hasAmount("EUR", 0.00), hasGrossValue("EUR", 0.00), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))))); + } + @Test public void testDividende01() { @@ -3026,6 +3062,37 @@ public void testDividende19WithSecurityinEUR() assertThat(s, is(Status.OK_STATUS)); } + @Test + public void testDividende20() + { + INGDiBaPDFExtractor extractor = new INGDiBaPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende20.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("DE000A3MP4P9"), hasWkn("A3MP4P"), hasTicker(null), // + hasName("4,00000% PCC SE Inh.-Teilschuldv. v.21(22/26)"), // + hasCurrencyCode("EUR")))); + + // check dividends transaction + assertThat(results, hasItem(dividend( // + hasDate("2024-01-02T00:00"), hasShares(50.00), // + hasSource("Dividende20.txt"), // + hasNote(null), // + hasAmount("EUR", 50.00), hasGrossValue("EUR", 50.00), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); + } + @Test public void testDividendeStorno01() { diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/ingdiba/Vorabpauschale03.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/ingdiba/Vorabpauschale03.txt new file mode 100644 index 0000000000..a607f8e9e9 --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/ingdiba/Vorabpauschale03.txt @@ -0,0 +1,43 @@ +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.67.1 +----------------------------------------- +ING-DiBa AG · 60628 Frankfurt am Main +Depotinhaber: RZEN veqd +Herrn Direkt-Depot Nr.: 0751021723 +ZUPk rByb Datum: 17.01.2024 +pZ IBxiAeowf 94 Seite: 1 von 2 +14403 HfuSZqUF +Vorabpauschale +ISIN (WKN) IE00BSPLC413 (A12HU5) +Wertpapierbezeichnung SPDR MSCI USA Sm.C.Val.W.UETF +Registered Shares o.N. +Nominale 60,00 Stück +Vorabpauschale per Stück 0,86941603 EUR +Vorabpauschale mit Teilfreist. per St. 0,60859122 EUR +Ex-Tag 02.01.2024 +Zahltag 02.01.2024 +Gesamtbetrag zu Ihren Gunsten EUR 0,00 +Abrechnungs-IBAN ix14 5511 8841 2561 2896 31 +Sie erhalten eine neue Abrechnung. +Jahressteuerbescheinigung folgt. +Weitere steuerliche Informationen entnehmen Sie bitte der Rückseite. +ING-DiBa AG · Theodor-Heuss-Allee 2 · 60486 Frankfurt am Main · Vorsitzende des Aufsichtsrates: Susanne Klöß-Braekler · Vorstand: Nick Jue (Vorsitzender), +Michael Clijdesdale, Eddy Henning, Sigrid Kozmiensky, Daniel Llano Manibardo, Dr. Ralph Müller · Sitz: Frankfurt am Main · AG Frankfurt am Main · HRB 7727 +Steuernummer: 047 220 2800 4 · USt-IdNr.: DE 114 103 475 · Internet: www.ing.de · E-Mail: info@ing.de · BIC: INGDDEFFXXX · Mitglied im Einlagensicherungsfonds +Depotinhaber: gnXP AmcP +Direkt-Depot Nr.: 4422164321 +Datum: 17.01.2024 +Seite: 2 von 2 +ISIN (WKN) IE00BSPLC413 (A12HU5) +Vorabpauschale gem. § 18 InvStG 4,35 EUR +abzgl. Teilfreistellungsbetrag 30,00 % 1,31 EUR +Vorabpauschale nach Teilfreistellung 3,04 EUR +KapSt-pflichtiger Kapitalertrag 3,04 EUR +Mit Sparer-Pauschbetrag verrechnet -3,04 EUR +Sparer-Pauschbetrag vor Ertrag 1.000,00 EUR +Sparer-Pauschbetrag nach Ertrag 996,96 EUR +Wenn Sie Anteile unter dem Jahr erworben haben, fällt die Vorabpauschale nur für die seit +Kauf angefangenen Monate an. Jeder vorherige Monat mindert die Vorabpauschale damit +um ein Zwölftel. +Bei Fragen besuchen Sie uns einfach unter www.ing.de/wertpapierwissen - da gibt es viele schnelle +Antworten. Oder senden Sie uns eine E-Mail an info@ing.de . \ No newline at end of file diff --git a/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/INGDiBaPDFExtractor.java b/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/INGDiBaPDFExtractor.java index c0254670d3..7faf156681 100644 --- a/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/INGDiBaPDFExtractor.java +++ b/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/INGDiBaPDFExtractor.java @@ -311,16 +311,23 @@ private void addDividendeTransaction() // Nominale 1.000,00 EUR // @formatter:on section -> section // - .attributes("isin", "wkn", "name", "name1", "currency") // + .attributes("isin", "wkn", "name", "nameContinued", "currency") // .match("^ISIN \\(WKN\\) (?[A-Z]{2}[A-Z0-9]{9}[0-9]) \\((?[A-Z0-9]{6})\\)$") // .match("^Wertpapierbezeichnung (?.*)$") // - .match("^(?.*)$") // + .match("^(?.*)$") // .match("^Nominale [\\.,\\d]+ (?[\\w]{3})$") // - .assign((t, v) -> { - v.put("name", trim(v.get("name")) + " " + trim(v.get("name1"))); - - t.setSecurity(getOrCreateSecurity(v)); - })) + .assign((t, v) -> t.setSecurity(getOrCreateSecurity(v))), + // @formatter:off + // ISIN (WKN) DE000A3MP4P9 (A3MP4P) + // Wertpapierbezeichnung 4,00000% PCC SE Inh.-Teilschuldv. v.21(22/26) + // Nominale 5.000,00 EUR + // @formatter:on + section -> section // + .attributes("isin", "wkn", "name", "currency") // + .match("^ISIN \\(WKN\\) (?[A-Z]{2}[A-Z0-9]{9}[0-9]) \\((?[A-Z0-9]{6})\\)$") // + .match("^Wertpapierbezeichnung (?.*)$") // + .match("^Nominale [\\.,\\d]+ (?[\\w]{3})$") // + .assign((t, v) -> t.setSecurity(getOrCreateSecurity(v)))) // @formatter:off // Nominale 66,00 Stück @@ -456,16 +463,18 @@ private void addAdvanceTaxTransaction() // @formatter:off // Valuta 04.01.2021 + // Zahltag 02.01.2024 // @formatter:on .section("date") // - .match("^Valuta (?[\\d]{2}\\.[\\d]{2}\\.[\\d]{4})$") // + .match("^(Valuta|Zahltag) (?[\\d]{2}\\.[\\d]{2}\\.[\\d]{4})$") // .assign((t, v) -> t.setDateTime(asDate(v.get("date")))) // @formatter:off // Gesamtbetrag zu Ihren Lasten EUR - 0,16 + // Gesamtbetrag zu Ihren Gunsten EUR 0,00 // @formatter:on .section("currency", "amount") // - .match("^Gesamtbetrag zu Ihren Lasten (?[\\w]{3}) \\- (?[.,\\d]+)$") // + .match("^Gesamtbetrag zu Ihren (Lasten|Gunsten) (?[\\w]{3}) (\\- )?(?[.,\\d]+)$") // .assign((t, v) -> { t.setAmount(asAmount(v.get("amount"))); t.setCurrencyCode(asCurrencyCode(v.get("currency")));