From e773fdcd69dfd0bbdcb86bbb5b82f9888a53d921 Mon Sep 17 00:00:00 2001 From: Alexander Ott <45203494+Nirus2000@users.noreply.github.com> Date: Mon, 2 Dec 2024 19:33:31 +0100 Subject: [PATCH] Modify Baader Bank PDF-Importer to support new transaction (#4378) https://forum.portfolio-performance.info/t/pdf-import-von-baader-bank-scalable-capital-smartbroker-plus/2057/395 --- .../BaaderBankPDFExtractorTest.java | 103 +++++++++++++++--- .../pdf/baaderbank/Dividende23.txt | 58 ++++++++++ .../pdf/BaaderBankPDFExtractor.java | 3 +- 3 files changed, 147 insertions(+), 17 deletions(-) create mode 100644 name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/baaderbank/Dividende23.txt diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/baaderbank/BaaderBankPDFExtractorTest.java b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/baaderbank/BaaderBankPDFExtractorTest.java index 3604f30526..57f4be606a 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/baaderbank/BaaderBankPDFExtractorTest.java +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/baaderbank/BaaderBankPDFExtractorTest.java @@ -3631,7 +3631,7 @@ public void testDividende15() // check dividends transaction assertThat(results, hasItem(dividend( // - hasDate("2023-02-16T00:00"), hasShares(2), // + hasDate("2023-02-16T00:00"), hasShares(2.00), // hasSource("Dividende15.txt"), // hasNote("Transaction No.: 13241804"), // hasAmount("EUR", 0.26), hasGrossValue("EUR", 0.43), // @@ -3664,7 +3664,7 @@ public void testDividende15WithSecurityInEUR() // check dividends transaction assertThat(results, hasItem(dividend( // - hasDate("2023-02-16T00:00"), hasShares(2), // + hasDate("2023-02-16T00:00"), hasShares(2.00), // hasSource("Dividende15.txt"), // hasNote("Transaction No.: 13241804"), // hasAmount("EUR", 0.26), hasGrossValue("EUR", 0.43), // @@ -3702,7 +3702,7 @@ public void testDividende16() // check dividends transaction assertThat(results, hasItem(dividend( // - hasDate("2023-05-18T00:00"), hasShares(2), // + hasDate("2023-05-18T00:00"), hasShares(2.00), // hasSource("Dividende16.txt"), // hasNote("Transaction No.: 15390292"), // hasAmount("EUR", 0.32), hasGrossValue("EUR", 0.44), // @@ -3735,7 +3735,7 @@ public void testDividende16WithSecurityInEUR() // check dividends transaction assertThat(results, hasItem(dividend( // - hasDate("2023-05-18T00:00"), hasShares(2), // + hasDate("2023-05-18T00:00"), hasShares(2.00), // hasSource("Dividende16.txt"), // hasNote("Transaction No.: 15390292"), // hasAmount("EUR", 0.32), hasGrossValue("EUR", 0.44), // @@ -3773,7 +3773,7 @@ public void testDividende17() // check dividends transaction assertThat(results, hasItem(dividend( // - hasDate("2023-11-16T00:00"), hasShares(60), // + hasDate("2023-11-16T00:00"), hasShares(60.00), // hasSource("Dividende17.txt"), // hasNote("Vorgangs-Nr.: 20120279"), // hasAmount("USD", 12.24), hasGrossValue("USD", 14.40), // @@ -3805,7 +3805,7 @@ public void testDividende17WithSecurityInEUR() // check dividends transaction assertThat(results, hasItem(dividend( // - hasDate("2023-11-16T00:00"), hasShares(60), // + hasDate("2023-11-16T00:00"), hasShares(60.00), // hasSource("Dividende17.txt"), // hasNote("Vorgangs-Nr.: 20120279"), // hasAmount("USD", 12.24), hasGrossValue("USD", 14.40), // @@ -3844,7 +3844,7 @@ public void testDividende18() // check dividends transaction assertThat(results, hasItem(dividend( // - hasDate("2023-12-14T00:00"), hasShares(5), // + hasDate("2023-12-14T00:00"), hasShares(5.00), // hasSource("Dividende18.txt"), // hasNote("Vorgangs-Nr.: 123"), // hasAmount("USD", 2.79), hasGrossValue("USD", 3.75), // @@ -3876,7 +3876,7 @@ public void testDividende18WithSecurityInEUR() // check dividends transaction assertThat(results, hasItem(dividend( // - hasDate("2023-12-14T00:00"), hasShares(5), // + hasDate("2023-12-14T00:00"), hasShares(5.00), // hasSource("Dividende18.txt"), // hasNote("Vorgangs-Nr.: 123"), // hasAmount("USD", 2.79), hasGrossValue("USD", 3.75), // @@ -3915,7 +3915,7 @@ public void testDividende19() // check dividends transaction assertThat(results, hasItem(dividend( // - hasDate("2023-11-29T00:00"), hasShares(140), // + hasDate("2023-11-29T00:00"), hasShares(140.00), // hasSource("Dividende19.txt"), // hasNote("Vorgangs-Nr.: 20483837"), // hasAmount("USD", 6.26), hasGrossValue("USD", 6.26), // @@ -3947,7 +3947,7 @@ public void testDividende19WithSecurityInEUR() // check dividends transaction assertThat(results, hasItem(dividend( // - hasDate("2023-11-29T00:00"), hasShares(140), // + hasDate("2023-11-29T00:00"), hasShares(140.00), // hasSource("Dividende19.txt"), // hasNote("Vorgangs-Nr.: 20483837"), // hasAmount("USD", 6.26), hasGrossValue("USD", 6.26), // @@ -3986,7 +3986,7 @@ public void testDividende20() // check dividends transaction assertThat(results, hasItem(dividend( // - hasDate("2023-12-22T00:00"), hasShares(4), // + hasDate("2023-12-22T00:00"), hasShares(4.00), // hasSource("Dividende20.txt"), // hasNote("Vorgangs-Nr.: XXX"), // hasAmount("USD", 14.89), hasGrossValue("USD", 20.00), // @@ -4018,7 +4018,7 @@ public void testDividende20WithSecurityInEUR() // check dividends transaction assertThat(results, hasItem(dividend( // - hasDate("2023-12-22T00:00"), hasShares(4), // + hasDate("2023-12-22T00:00"), hasShares(4.00), // hasSource("Dividende20.txt"), // hasNote("Vorgangs-Nr.: XXX"), // hasAmount("USD", 14.89), hasGrossValue("USD", 20.00), // @@ -4057,7 +4057,7 @@ public void testDividende21() // check dividends transaction assertThat(results, hasItem(dividend( // - hasDate("2023-12-15T00:00"), hasShares(14), // + hasDate("2023-12-15T00:00"), hasShares(14.00), // hasSource("Dividende21.txt"), // hasNote("Vorgangs-Nr.: XXX"), // hasAmount("USD", 2.66), hasGrossValue("USD", 3.58), // @@ -4089,7 +4089,7 @@ public void testDividende21WithSecurityInEUR() // check dividends transaction assertThat(results, hasItem(dividend( // - hasDate("2023-12-15T00:00"), hasShares(14), // + hasDate("2023-12-15T00:00"), hasShares(14.00), // hasSource("Dividende21.txt"), // hasNote("Vorgangs-Nr.: XXX"), // hasAmount("USD", 2.66), hasGrossValue("USD", 3.58), // @@ -4128,7 +4128,7 @@ public void testDividende22() // check dividends transaction assertThat(results, hasItem(dividend( // - hasDate("2024-01-26T00:00"), hasShares(10), // + hasDate("2024-01-26T00:00"), hasShares(10.00), // hasSource("Dividende22.txt"), // hasNote("Vorgangs-Nr.: 25694016"), // hasAmount("USD", 33.50), hasGrossValue("USD", 33.50), // @@ -4160,7 +4160,7 @@ public void testDividende22WithSecurityInEUR() // check dividends transaction assertThat(results, hasItem(dividend( // - hasDate("2024-01-26T00:00"), hasShares(10), // + hasDate("2024-01-26T00:00"), hasShares(10.00), // hasSource("Dividende22.txt"), // hasNote("Vorgangs-Nr.: 25694016"), // hasAmount("USD", 33.50), hasGrossValue("USD", 33.50), // @@ -4175,6 +4175,77 @@ public void testDividende22WithSecurityInEUR() })))); } + @Test + public void testDividende23() + { + BaaderBankPDFExtractor extractor = new BaaderBankPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende23.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("US92936U1097"), hasWkn("A1J5SB"), hasTicker(null), // + hasName("W.P. Carey Inc."), // + hasCurrencyCode("USD")))); + + // check dividends transaction + assertThat(results, hasItem(dividend( // + hasDate("2023-10-16T00:00"), hasShares(28.00), // + hasSource("Dividende23.txt"), // + hasNote("Vorgangs-Nr.: 22556339"), // + hasAmount("EUR", 4.88), hasGrossValue("EUR", 4.88), // + hasForexGrossValue("USD", 5.16), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); + } + + @Test + public void testDividende23WithSecurityInEUR() + { + Security security = new Security("W.P. Carey Inc.", CurrencyUnit.EUR); + security.setIsin("US92936U1097"); + security.setWkn("A1J5SB"); + + Client client = new Client(); + client.addSecurity(security); + + BaaderBankPDFExtractor extractor = new BaaderBankPDFExtractor(client); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende23.txt"), errors); + + assertThat(errors, empty()); + assertThat(countSecurities(results), is(0L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(1)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check dividends transaction + assertThat(results, hasItem(dividend( // + hasDate("2023-10-16T00:00"), hasShares(28.00), // + hasSource("Dividende23.txt"), // + hasNote("Vorgangs-Nr.: 22556339"), // + hasAmount("EUR", 4.88), hasGrossValue("EUR", 4.88), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00), // + check(tx -> { + CheckCurrenciesAction c = new CheckCurrenciesAction(); + Account account = new Account(); + account.setCurrencyCode(CurrencyUnit.EUR); + Status s = c.process((AccountTransaction) tx, account); + assertThat(s, is(Status.OK_STATUS)); + })))); + } + @Test public void testDividendeStorno01() { diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/baaderbank/Dividende23.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/baaderbank/Dividende23.txt new file mode 100644 index 0000000000..c5d2120678 --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/baaderbank/Dividende23.txt @@ -0,0 +1,58 @@ +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.71.2 +----------------------------------------- +Baader Bank AG Weihenstephaner Straße 4 85716 Unterschleißheim Gartenstraße 67 +T 00800 00 586336* F +49 89 5150 2442 service@baaderbank.de 76135 Karlsruhe +www.finanzen.net/zero ++49 89 5455 8188 +Seite 1/2 +agPr Karlsruhe +30.11.2024 +ZPJHzYF MVTxqRRJ +LXiJKoRAweyYY. 5 LSEWTzb QMSYeWPr +07254 nExNjW Stamm-Nr.: 7161213 Portfolio: 1 +Depot-Nr.: 2512462291 +Vorgangs-Nr.: 22556339 +Referenz-Nr.: 956580844 +Return of Capital +Ex-Tag: 28.09.2023 +Nominale ISIN: US92936U1097 WKN: A1J5SB Ausschüttung +STK 28 W.P. Carey Inc. USD 0,1844429 p.STK +Zahlungszeitraum: 01.01.2023 - 31.12.2023 +Zahltag: 16.10.2023 +Umrechnungskurs: EUR/USD 1,05697 +Bruttobetrag USD 5,16 +Bruttobetrag EUR 4,88 +Zu Gunsten Konto 3708405478 Valuta: 16.10.2023 EUR 4,88 +Bitte beachten Sie Ihre eventuelle Meldepflicht nach § 67 AWV. +Einkünfte aus Kapitalvermögen im Sinne von § 20 EStG sind einkommensteuerpflichtig. +Dieses Dokument wurde maschinell erstellt und wird nicht unterschrieben. +finanzen.net zero GmbH, Gartenstraße 67, 76135 Karlsruhe • Impressum unter: www.finanzen.net/zero/impressum +finanzen.net zero GmbH erbringt Anlagevermittlung als gebundener Vermittler der DonauCapital Wertpapier GmbH + +Herausgeberin und verantwortlich für den Inhalt ist die Baader Bank Aktiengesellschaft • Weihenstephaner Straße 4 • 85716 Unterschleißheim • Deutschland +Vorstand: Nico Baader (Vorsitzender), Oliver Riedel (stv. Vorsitzender) • Vorsitzender des Aufsichtsrates: Helmut Schreyer • Amtsgericht München HRB +121537 • Sitz der Gesellschaft: Unterschleißheim • StNr. 143/107/04009 • USt-IdNr. DE114123893 • LEI: 529900JFOPPEDUR61H13 • T 00800 00 586336* +service@baaderbank.de DCUP-055.048 + +* Kostenfreie Telefonnummer aus dem (inter-) nationalen Festnetz. Für Anrufe aus anderen Netzen können Gebühren anfallen. +Return of Capital +Fortsetzung: Seite 2/2 +Darstellung der steuerlichen Berechnungsgrundlagen: +Bemessungsgrundlagen Steuerpflicht brutto Steuerpflicht netto +Ausschüttung sonstiger Fonds vor Teilfreistellung EUR 4,88 EUR 4,88 +Ausschüttung sonstiger Fonds nach Teilfreistellung EUR 4,88 EUR 0,00 +Bemessungsgrundlage zur Kapitalertragsteuer EUR 4,88 EUR 0,00 +US Ertrag Limited Partnership / US-Quellensteuer-befreit EUR 4,88 EUR 4,88 +Bitte beachten Sie Ihre eventuelle Meldepflicht nach § 67 AWV. +Einkünfte aus Kapitalvermögen im Sinne von § 20 EStG sind einkommensteuerpflichtig. +Dieses Dokument wurde maschinell erstellt und wird nicht unterschrieben. +finanzen.net zero GmbH, Gartenstraße 67, 76135 Karlsruhe • Impressum unter: www.finanzen.net/zero/impressum +finanzen.net zero GmbH erbringt Anlagevermittlung als gebundener Vermittler der DonauCapital Wertpapier GmbH + +Herausgeberin und verantwortlich für den Inhalt ist die Baader Bank Aktiengesellschaft • Weihenstephaner Straße 4 • 85716 Unterschleißheim • Deutschland +Vorstand: Nico Baader (Vorsitzender), Oliver Riedel (stv. Vorsitzender) • Vorsitzender des Aufsichtsrates: Helmut Schreyer • Amtsgericht München HRB +121537 • Sitz der Gesellschaft: Unterschleißheim • StNr. 143/107/04009 • USt-IdNr. DE114123893 • LEI: 529900JFOPPEDUR61H13 • T 00800 00 586336* +service@baaderbank.de DCUP-055.048 + +* Kostenfreie Telefonnummer aus dem (inter-) nationalen Festnetz. Für Anrufe aus anderen Netzen können Gebühren anfallen. \ No newline at end of file diff --git a/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/BaaderBankPDFExtractor.java b/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/BaaderBankPDFExtractor.java index a1c2b86e0a..b8a876f0ca 100644 --- a/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/BaaderBankPDFExtractor.java +++ b/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/BaaderBankPDFExtractor.java @@ -406,7 +406,8 @@ private void addDividendeTransaction() { final DocumentType type = new DocumentType("(Fondsaussch.ttung" // + "|Ertragsthesaurierung" // - + "|Dividendenabrechnung" // + + "|Dividendenabrechnung" + + "|Aussch.ttung" // + "|Aussch.ttung aus" // + "|Wahldividende" // + "|Fund Distribution" //