From ee9fa5c204b77a46ae3bc1184377ee71a7633830 Mon Sep 17 00:00:00 2001 From: Nirus2000 Date: Sat, 20 Jan 2024 16:51:07 +0100 Subject: [PATCH] Modify Quirin Privatbank AG PDF-Importer to support new transaction https://forum.portfolio-performance.info/t/pdf-import-von-quirin-privatbank-ag/21748/60 https://forum.portfolio-performance.info/t/pdf-import-von-quirin-privatbank-ag/21748/62 Remove obsolet sections Format source to standard eclipse format --- .../pdf/quirinbankag/Depotauszug05.txt | 100 ++ .../QuirinPrivatbankAGPDFExtractorTest.java | 62 +- .../pdf/quirinbankag/Vorabpauschale01.txt | 66 + .../pdf/QuirinBankAGPDFExtractor.java | 1373 +++++++++-------- 4 files changed, 952 insertions(+), 649 deletions(-) create mode 100644 name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/quirinbankag/Depotauszug05.txt create mode 100644 name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/quirinbankag/Vorabpauschale01.txt diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/quirinbankag/Depotauszug05.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/quirinbankag/Depotauszug05.txt new file mode 100644 index 0000000000..145db3897a --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/quirinbankag/Depotauszug05.txt @@ -0,0 +1,100 @@ +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.65.4 +----------------------------------------- +Kontoauszug +Konto 8***0 EUR +IBAN DE****0 +********* +Vermögensverwaltungskonto in EUR +****** Datum 16.10.2023 +****** Auszug-Nr 10 +******** Seite 1 von 2 +********** +Betreuer quirion *** +Telefon ***** +E-Mail ****@quirion.de +Buchungshinweise Buchungsdatum Valuta Umsatz +Sammelgutschrift 02.10.2023 02.10.2023 250,00 EUR +D***********0 +Ref.: 4*******2 +Wertpapier Kauf, Ref.: 403747782 05.10.2023 09.10.2023 -45,77 EUR +Amundi Index Solu.-A.PRIME GL. Nam.-Ant.UCI.ETF DR USD Dis.oN +LU1931974692, ST 1,6866 +Wertpapier Kauf, Ref.: 403747787 05.10.2023 09.10.2023 -40,37 EUR +SPDR MSCI World UCITS ETF Reg.Shares USD Unhgd Acc. o.N. +IE00BFY0GT14, ST 1,4495 +Wertpapier Kauf, Ref.: 403747790 05.10.2023 09.10.2023 -36,34 EUR +iShsIII-MSCI Wld Sm.Ca.UCI.ETF Registered Shares USD(Acc)o.N. +IE00BF4RFH31, ST 6,3384 +Wertpapier Kauf, Ref.: 403747793 05.10.2023 09.10.2023 -31,46 EUR +Xtr.(IE)MSCI World Value Registered Shares 1C USD o.N. +IE00BL25JM42, ST 0,8758 +Wertpapier Kauf, Ref.: 403747796 05.10.2023 09.10.2023 -16,71 EUR +iShs Core MSCI EM IMI U.ETF Registered Shares o.N. +IE00BKM4GZ66, ST 0,612 +Wertpapier Kauf, Ref.: 403747798 05.10.2023 09.10.2023 -12,08 EUR +iShsIII-Core Gl.Aggr.Bd UC.ETF Registered Shs EUR Acc.hgd o.N +IE00BDBRDM35, ST 2,7067 +Wertpapier Kauf, Ref.: 403747802 05.10.2023 09.10.2023 -12,02 EUR +Xtr.II EUR H.Yield Corp.Bond Inhaber-Anteile 1D o.N. +LU1109942653, ST 0,7906 +Wertpapier Kauf, Ref.: 403747807 05.10.2023 09.10.2023 -11,91 EUR +AMUN.GOV.BD EO BR.IG 1-3 U.ETF Actions au Porteur o.N. +FR0010754135, ST 0,0743 +Wertpapier Kauf, Ref.: 403747811 05.10.2023 09.10.2023 -9,55 EUR +Amundi I.S.-A.PRIME EURO CORP. Nam.-Ant.UC.ETF DR EUR +Dis.oN +LU1931975079, ST 0,543 +Quirin Privatbank AG +Postfach 311105 | 10641 Berlin T +49 (0)30 890 21-300 Handelsregister: Vorstand: Karl Matthäus Schmidt +Kurfürstendamm 119 | 10711 Berlin F +49 (0)30 890 21-301 Berlin Charlottenburg, HRB 87859 Johannes Eismann +www.quirinprivatbank.de info@quirinprivatbank.de USt-IdNr.: DE195661729 Aufsichtsratsvorsitzender: Holger Timm +KTO_AUSZ / 6****7 / 2******7 02:47:43 +Kontoauszug +Konto 8*********0 EUR +IBAN DE*****20 +**************** +Vermögensverwaltungskonto in EUR +**** Datum 16.10.2023 +***** Auszug-Nr 10 +****** Seite 2 von 2 +********* +Betreuer quirion ***** +Telefon ******* +E-Mail *****quirion.de +Buchungshinweise Buchungsdatum Valuta Umsatz +Wertpapier Kauf, Ref.: 403747815 05.10.2023 09.10.2023 -8,80 EUR +Am.I.S.-AM.IDX EO COR.SRI 0-3Y Act.Nom.UCITS ETF EUR DR +Ac.oN +LU2037748774, ST 0,179 +Wertpapier Kauf, Ref.: 403747821 05.10.2023 09.10.2023 -8,22 EUR +Xtr.(IE)-MSCI World Minim.Vol. Registered Shares 1C USD o.N. +IE00BL25JN58, ST 0,2334 +Wertpapier Kauf, Ref.: 403747828 05.10.2023 09.10.2023 -7,72 EUR +InvescoMI2 EUR Gov B 1-3Y ETF Reg. Shs EUR Dis. oN +IE00BGJWWY63, ST 0,2069 +Wertpapier Kauf, Ref.: 403747834 05.10.2023 09.10.2023 -4,66 EUR +iShsIV-Edge MSCI EM Value F. Registered Shares USD (Acc.)oN +IE00BG0SKF03, ST 0,1258 +Wertpapier Kauf, Ref.: 403747842 05.10.2023 09.10.2023 -3,57 EUR +iShsIII-MSCI EM Sm.Cap U.ETF Registered Shares o.N. +IE00B3F81G20, ST 0,0482 +Vermögensverwaltungshonorar ********0, 01.10.2023 - 12.10.2023 16.10.2023 16.10.2023 -0,48 EUR +Bemessungsgrundlage ***** EUR +Betrag inkl. USt: -0,48 EUR (Netto: -0,40 EUR, USt: -0,08 EUR) +Ref.: 4******6 +letzter Auszug 30.09.2023 alter Saldo 10,89 EUR +Umsatz 0,34 EUR +Limit (in Währung) 0,00 neuer Saldo 11,23 EUR +Sollzins in % p.a. 0,00 +Überziehungszins in % p.a. 0,00 +Dieser Kontoauszug gilt gleichzeitig als Saldenmitteilung. Etwaige Einwendungen gegen den Kontoauszug sind unverzüglich zu erheben; +ist der Kontoauszug zusätzlich als Rechnungsabschluss bezeichnet, gilt der Abschlusssaldo als genehmigt, wenn ihm nicht innerhalb von +sechs Wochen nach Zugang schriftlich widersprochen wird. Zur Fristwahrung genügt die rechtzeitige Absendung. +Guthaben sind als Einlagen nach Maßgabe des Einlagensicherungsgesetzes entschädigungsfähig. Nähere Informationen können dem +"Informationsbogen für den Einleger" entnommen werden. +Quirin Privatbank AG +Postfach 311105 | 10641 Berlin T +49 (0)30 890 21-300 Handelsregister: Vorstand: Karl Matthäus Schmidt +Kurfürstendamm 119 | 10711 Berlin F +49 (0)30 890 21-301 Berlin Charlottenburg, HRB 87859 Johannes Eismann +www.quirinprivatbank.de info@quirinprivatbank.de USt-IdNr.: DE195661729 Aufsichtsratsvorsitzender: Holger Timm +KTO_AUSZ / 65025347 / 20231017 02:47:43 \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/quirinbankag/QuirinPrivatbankAGPDFExtractorTest.java b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/quirinbankag/QuirinPrivatbankAGPDFExtractorTest.java index f8974ab8d9..789b8ed617 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/quirinbankag/QuirinPrivatbankAGPDFExtractorTest.java +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/quirinbankag/QuirinPrivatbankAGPDFExtractorTest.java @@ -1,7 +1,9 @@ package name.abuchen.portfolio.datatransfer.pdf.quirinbankag; import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.check; +import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.deposit; import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.dividend; +import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.fee; import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasAmount; import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasCurrencyCode; import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasDate; @@ -17,6 +19,7 @@ import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasTicker; import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasWkn; import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.security; +import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.taxes; import static name.abuchen.portfolio.datatransfer.ExtractorTestUtilities.countAccountTransactions; import static name.abuchen.portfolio.datatransfer.ExtractorTestUtilities.countBuySell; import static name.abuchen.portfolio.datatransfer.ExtractorTestUtilities.countSecurities; @@ -676,7 +679,7 @@ public void testDividende04() } @Test - public void testWertpapierKauf27WithSecurityInEUR() + public void testDividende04WithSecurityInEUR() { Security security = new Security("iShsIII-MSCI EM Sm.Cap U.ETF Registered Shares o.N.", CurrencyUnit.EUR); security.setIsin("IE00B3F81G20"); @@ -713,6 +716,37 @@ public void testWertpapierKauf27WithSecurityInEUR() })))); } + @Test + public void testVorabpauschale01() + { + QuirinBankAGPDFExtractor extractor = new QuirinBankAGPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Vorabpauschale01.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("LU1048314196"), hasWkn("A110QF"), hasTicker(null), // + hasName("UBS(L)FS-BBG EO A.L.Crp1-5UETF Inhaber-Anteile A Dis.EUR"), // + hasCurrencyCode("EUR")))); + + // check taxes transaction + assertThat(results, hasItem(taxes( // + hasDate("2024-01-02T00:00"), hasShares(852.8631), // + hasSource("Vorabpauschale01.txt"), // + hasNote("Referenz-Nr 350705756"), // + hasAmount("EUR", 4.66), hasGrossValue("EUR", 4.66), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); + } + @Test public void testDepotauszug01() { @@ -1415,4 +1449,30 @@ public void testDepotauszug04() assertThat(transaction.getSource(), is("Depotauszug04.txt")); assertThat(transaction.getNote(), is("Bestandsprovision LU0140363002 Ref: KA-01 44738244")); } + + @Test + public void testDepotauszug05() + { + QuirinBankAGPDFExtractor extractor = new QuirinBankAGPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Depotauszug05.txt"), + errors); + + assertThat(errors, empty()); + assertThat(countSecurities(results), is(0L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(2L)); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // assert transaction + assertThat(results, hasItem(deposit(hasDate("2023-10-02"), hasAmount("EUR", 250.00), // + hasSource("Depotauszug05.txt"), hasNote("Sammelgutschrift Ref.: 4*******2")))); + + // assert transaction + assertThat(results, hasItem(fee(hasDate("2023-10-16"), hasAmount("EUR", 0.48), // + hasSource("Depotauszug05.txt"), hasNote("Vermögensverwaltungshonorar Ref.: 4******6")))); + } } diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/quirinbankag/Vorabpauschale01.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/quirinbankag/Vorabpauschale01.txt new file mode 100644 index 0000000000..8eea8d9892 --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/quirinbankag/Vorabpauschale01.txt @@ -0,0 +1,66 @@ +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.67.1 +----------------------------------------- +Erträgnisabrechnung +Referenz-Nr 350705756 +Datum 19.01.2024 +Depot 4038355330 +hAcZDhZH, JZYfsxeIz +Herrn +dbErYYCMU xXBTuXdc Betreuer ZUSp ADvcx +sEVX-MUgiFIrNyq-FPW 4 Telefon +49 (0) 9281 82088-13 +03637 htRI E-Mail jens.jugel@quirinprivatbank.de +Seite 1 von 2 +Für aus Ihrem Depot fällig gewordene Erträgnisse erteilen wir nachstehende Abrechnung: +Wertpapierbezeichnung UBS(L)FS-BBG EO A.L.Crp1-5UETF Inhaber-Anteile A Dis.EUR +o.N. +ISIN LU1048314196 +WKN A110QF +Lagerland Deutschland +Nominal/Stück 852,8631 ST +Währung EUR +Vorabpauschale EUR 0,02184293 pro Stück +Ex-Tag 02.01.2024 +Zahlungstag 02.01.2024 +Vorabpauschale (nicht gebucht) EUR 17,68 +Kapitalertragsteuer EUR -4,42 +Solidaritätszuschlag EUR -0,24 +Kirchensteuer EUR 0,00 +Ausmachender Betrag EUR -4,66 +Der Abrechnungsbetrag wird mit Valuta 02.01.2024 über Ihr Konto 9130987311 EUR gebucht. +Wir bitten Sie zu beachten, dass die Vorabpauschale nicht in bar ausgeschüttet wurde. +Die jährliche Vorabpauschale gem. § 18 InvStG stellt die Berechnungsgrundlage für die Ermittlung und Abführung der +Kapitalertragsteuer dar. +Keine Steuerbescheinigung! +Für weitere Fragen wenden Sie sich bitte an Ihren Kundenberater. +Diese Mitteilung wurde maschinell erstellt und wird von der Bank nicht unterschrieben. +Quirin Privatbank AG +Postfach 311105 | 10641 Berlin T +49 (0)30 890 21-300 Handelsregister: Vorstand: Karl Matthäus Schmidt +Kurfürstendamm 119 | 10711 Berlin F +49 (0)30 890 21-301 Berlin Charlottenburg, HRB 87859 Johannes Eismann +www.quirinprivatbank.de info@quirinprivatbank.de USt-IdNr.: DE195661729 Aufsichtsratsvorsitzender: Holger Timm +SECTRX2 / 69033257 / 20240119 14:54:51 +Erträgnisabrechnung +Referenz-Nr 601923137 +Seite 2 von 2 +Steuerliche Informationen +Vorabpauschale: EUR 17,68 +Steuerpflichtiger Betrag nach Teilfreistellung im Privatvermögen: EUR 17,68 +Kapitalertragsteuerpflichtiger Betrag: EUR 17,68 +Stand allg. Verlustverrechnungstopf vor Veränderung: EUR 0,00 +Veränderung allg. Verlustverrechnungstopf: EUR 0,00 +Stand allg. Verlustverrechnungstopf nach Veränderung: EUR 0,00 +Stand Quellensteuerguthaben vor Veränderung: EUR 0,00 +Veränderung Quellensteuerguthaben: EUR 0,00 +Stand Quellensteuerguthaben nach Veränderung: EUR 0,00 +Bemessungsgrundlage für Kapitalertragsteuer: EUR 17,68 +Kapitalertragsteuer: EUR -4,42 +Solidaritätszuschlag: EUR -0,24 +Kirchensteuer: EUR 0,00 +Steuerliche Information für Veranlagungszwecke +Steuerpfl. Betrag nach Teilfreistellung im Betriebsvermögen (EStG): EUR 17,68 +Steuerpfl. Betrag nach Teilfreistellung im Betriebsvermögen (KStG): EUR 17,68 +Quirin Privatbank AG +Postfach 311105 | 10641 Berlin T +49 (0)30 890 21-300 Handelsregister: Vorstand: Karl Matthäus Schmidt +Kurfürstendamm 119 | 10711 Berlin F +49 (0)30 890 21-301 Berlin Charlottenburg, HRB 87859 Johannes Eismann +www.quirinprivatbank.de info@quirinprivatbank.de USt-IdNr.: DE195661729 Aufsichtsratsvorsitzender: Holger Timm +SECTRX2 / 69033257 / 20240119 14:54:51 \ No newline at end of file diff --git a/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/QuirinBankAGPDFExtractor.java b/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/QuirinBankAGPDFExtractor.java index 889f50171e..967568c1f9 100644 --- a/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/QuirinBankAGPDFExtractor.java +++ b/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/QuirinBankAGPDFExtractor.java @@ -1,7 +1,6 @@ package name.abuchen.portfolio.datatransfer.pdf; import static name.abuchen.portfolio.datatransfer.ExtractorUtils.checkAndSetGrossUnit; - import static name.abuchen.portfolio.util.TextUtil.stripBlanks; import static name.abuchen.portfolio.util.TextUtil.trim; @@ -30,6 +29,7 @@ public QuirinBankAGPDFExtractor(Client client) addBuySellTransaction_Format02(); addDividendeTransaction_Format01(); addDividendeTransaction_Format02(); + addAdvanceTaxTransaction(); addDepotStatementTransaction(); } @@ -45,68 +45,72 @@ private void addBuySellTransaction_Format01() this.addDocumentTyp(type); Transaction pdfTransaction = new Transaction<>(); - pdfTransaction.subject(() -> { - BuySellEntry entry = new BuySellEntry(); - entry.setType(PortfolioTransaction.Type.BUY); - return entry; - }); Block firstRelevantLine = new Block("^Wertpapierbezeichnung .*$"); type.addBlock(firstRelevantLine); firstRelevantLine.set(pdfTransaction); - pdfTransaction - // Is type --> "Verkauf" change from BUY to SELL - .section("type").optional() - .match("^(?(Kauf|Verkauf))$") - .assign((t, v) -> { - if ("Verkauf".equals(v.get("type"))) - t.setType(PortfolioTransaction.Type.SELL); - }) - - // @formatter:off - // Wertpapierbezeichnung db x-tr.II Gl Sovereign ETF Inhaber-Anteile 1D EUR o.N. - // ISIN LU0690964092 - // WKN DBX0MF - // Kurs EUR 214,899 - // @formatter:on - .section("name", "isin", "wkn", "currency") - .match("^Wertpapierbezeichnung (?.*)$") - .match("^ISIN (?[A-Z]{2}[A-Z0-9]{9}[0-9])$") - .match("^WKN (?[A-Z0-9]{6})$") - .match("^Kurs (?[\\w]{3}) [\\.,\\d]+$") - .assign((t, v) -> t.setSecurity(getOrCreateSecurity(v))) - - // @formatter:off - // Nominal / Stück 140,0000 ST - // @formatter:on - .section("shares") - .match("^Nominal \\/ St.ck (?[\\.,\\d]+) ST$") - .assign((t, v) -> t.setShares(asShares(v.get("shares")))) - - // Handelstag / Zeit 30.12.2016 12:46:28 - .section("date", "time").optional() - .match("^Handelstag \\/ Zeit (?[\\d]{2}\\.[\\d]{2}\\.[\\d]{4}) (?