diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/ComdirectPDFExtractorTest.java b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/ComdirectPDFExtractorTest.java index c44d8b1586..a6f44189c2 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/ComdirectPDFExtractorTest.java +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/ComdirectPDFExtractorTest.java @@ -2031,6 +2031,72 @@ public void testWertpapierVerkaufMitSteuerbehandlung18() hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); } + @Test + public void testWertpapierVerkaufMitSteuerbehandlung19() + { + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "VerkaufMitSteuerbehandlung19.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("LU1011999676"), hasWkn("A1XBWG"), hasTicker(null), // + hasName("AB SICAV I-Concentr.US Equ.Ptf Actions Nom. I Acc. USD o.N."), // + hasCurrencyCode("USD")))); + + // check buy sell transaction + assertThat(results, hasItem(sale( // + hasDate("2025-01-03T07:18"), hasShares(400.00), // + hasSource("VerkaufMitSteuerbehandlung19.txt"), // + hasNote("Ord.-Nr.: 396043292201-001 | R.-Nr.: 153648375587D963"), // + hasAmount("EUR", 18365.44), hasGrossValue("EUR", 19411.57), // + hasForexGrossValue("USD", 20288.97), // + hasTaxes("EUR", 991.60 + 54.53), hasFees("EUR", 0.00)))); + } + + @Test + public void testWertpapierVerkaufMitSteuerbehandlung19WithSecurityInEUR() + { + Security security = new Security("AB SICAV I-Concentr.US Equ.Ptf Actions Nom. I Acc. USD o.N.", CurrencyUnit.EUR); + security.setIsin("LU1011999676"); + security.setWkn("A1XBWG"); + + Client client = new Client(); + client.addSecurity(security); + + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(client); + + List errors = new ArrayList<>(); + + List results = extractor + .extract(PDFInputFile.loadTestCase(getClass(), "VerkaufMitSteuerbehandlung19.txt"), errors); + + assertThat(errors, empty()); + assertThat(countSecurities(results), is(0L)); + assertThat(countBuySell(results), is(1L)); + assertThat(countAccountTransactions(results), is(0L)); + assertThat(results.size(), is(1)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check buy sell transaction + assertThat(results, hasItem(sale( // + hasDate("2025-01-03T07:18"), hasShares(400.00), // + hasSource("VerkaufMitSteuerbehandlung19.txt"), // + hasNote("Ord.-Nr.: 396043292201-001 | R.-Nr.: 153648375587D963"), // + hasAmount("EUR", 18365.44), hasGrossValue("EUR", 19411.57), // + hasTaxes("EUR", 991.60 + 54.53), hasFees("EUR", 0.00)))); + } + @Test public void testWertpapierVerkaufSteuerbehandlung01() { diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/VerkaufMitSteuerbehandlung19.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/VerkaufMitSteuerbehandlung19.txt new file mode 100644 index 0000000000..3b548f2fb5 --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/VerkaufMitSteuerbehandlung19.txt @@ -0,0 +1,182 @@ +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.73.0 +System: win32 | x86_64 | 21.0.5+11-LTS | Azul Systems, Inc. +----------------------------------------- +Ihren Auftrag haben wir gemäß unseren produktbezogenen +Geschäftsbedingungen "Trading" wie nachstehend ausgeführt. +Die Wertpapiere haben wir der Abrechnung entsprechend gebucht. +Wir bitten Sie, diese Abrechnung auf ihre Richtigkeit und +Vollständigkeit zu überprüfen und etwaige Einwendungen +25449 Quickborn unverzüglich zu erheben. +fon : 04106-708 25 00 Tele + + + + + 11813 010 +Depotnr.: 3989967 00 + BLZ: 200 411 11 +exqWrF MeMOj + + +ajb qHMgQpwtEf 6 +07125 hiUmgxv + + + + + +GESCHÄFTSABRECHNUNG VOM 06.01.2025 + +* +Wertpapierverkauf +Geschäftsnummer : 92 027249 +Ordernummer : 396043292201-001 Rechnungsnummer : 153648375587D963 +Geschäftstag : 03.01.2025 Ausführung comdirect +Handelszeit : 07:18 Uhr (MEZ/MESZ) (Festpreisgeschäft) + +Wertpapier-Bezeichnung WPKNR/ISIN +AB SICAV I-Concentr.US Equ.Ptf A1XBWG +Actions Nom. I Acc. USD o.N. LU1011999676 + + +Nennwert Festpreis pro Stück +St. 400 USD 50,722432 + + Umrechn. zum Dev. kurs 1,045200 vom 06.01.2025 + + +IBAN Valuta Zu Ihren Gunsten vor Steuern +DE87 2004 1111 0131 9599 00 EUR 08.01.2025 EUR 19.411,57 + +Verwahrungs-Art: WERTPAPIERRECHNUNG LUXEMBURG (AKV) +Die Order wurde gegen eine Gesellschaft der Commerzbank Gruppe ausgeführt. +Der Rücknahmepreis der Kapitalverwaltungsgesellschaft betrug am Geschäftstag +USD 50,73 + + + +Informationen zur steuerlichen Behandlung dieses Geschäftsvorgangs und den auf +Ihrem Konto gebuchten Endbetrag finden Sie auf der separaten Steuermitteilung. + + +Bei Fragen geben Sie bitte die Ordernummer an. + +Ihre comdirect + +Diese Abrechnung wird von der Bank nicht unterschrieben +Die Leistung ist gemäß §4 Nr.8 UStG umsatzsteuerfrei. USt-Id-Nr.: DE 114 103 514 +A113 +DO15DD/16/04/2010 +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +Kundennr. /BLZ Bezeichnung +2697951 FLcUUI INmTP + + +200 118 11 Zum SYjjQNjpuU 6 53455 HFzZizr +abweichend wirtschaftlich Berechtigter + + ---- +c o m d i r e c t + +2 5 4 5 1 Q u i c k b o r n +0 1 0 1 1813 + + T e le f o n : 0 4 1 0 6 - 7 0 8 25 00 + +Herrn D a t u m : 0 6 . 0 1 .2025 +S t R f A n K e c p e D e p o t n u m m er: 1 6 1 9 5 9 6 00 +Z u m S e Q t e F C e q g 6 +01 R e f e r e n z - N u mmer: 0 R I L Y J C U K 2F0003B 0 9 9 S r e Z d r n + + + + +Steuerliche Behandlung: Verkauf Investmentfonds Nr. 92027249 vom 03.01.2025 +Stk. 400 AB S.I-CON.US EQ.PTF.IADL , WKN / ISIN: A1XBWG / LU1011999676 +Z u Ih r e n G u n s t e n v o r S te u e r n : E U R 19.411,5 7 + + + S te u e rb e m e ss u n g s g r u n d la g e v o r V e r lu s tv e r re c h n u n g ( 1 ) E U R 4 . 9 6 6 , 3 9 + + + + in A n s p ru c h g e n o m m e n e r F r ei s te ll un g s a u ft ra g E U R 1 . 0 0 0 , 0 0 + +S te u e rb e m e ss u n g s g r u n d la g e n a c h V e r lu s t ve r r ec h n u n g E U R 3 . 9 6 6 , 3 8 + + +K ap i ta le r tr a gs t e ue r E U R - 9 9 1 , 6 0 + S ol id a ri tä t sz u s c hl a g E U R - 5 4 , 5 3 + K irc h e n s te u e r E_ U_ R_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 0_ _, _0 0_ + ab g e f ü h rt e S t e u er n E_ U_ R_ _ _ _ _ _ _ _ _ _-_1_._0__4_6_,1_ _3 + +Z u Ih r e n G u n s t e n n a c h S t e u er n : E U R 18.365,4 4 + + + + + +Die Gutschrift erfolgt mit Valuta 08.01.2025 auf Konto EUR mit der IBAN DE87 2004 3229 0131 8445 00 + + + + + + + +(1) siehe "Hinweise zur Ermittlung der Steuerbemessungsgrundlage" auf der Folgeseite +KEINE STEUERBESCHEINIGUNG ... +Bisher einbehaltene bzw. angerechnete Steuer in EUR (4) +in 2025 einbehaltene einbehaltener einbehaltene angerechneteKapitalertragsteuer Solidaritätszuschlag Kirchensteuer ausländische Quellensteuer +vor Ermittlung + 0,00 0,00 + 0,00 0,00 +nach Ermittlung + 991,60 54,53 0,00 0,00 +Verrechnungssalden in EUR (4) +2025 Gewinne / Verluste sonstige anrechenbare verfügbarerin aus Aktien Gewinne / Verluste ausländische Quellensteuer Freistellungsauftrag +vor Ermittlung + 0,00 0,00 0,00 1.000,00 +nach Ermittlung + 0,00 4.966,39 + 0,00 0,00 +Hinweise zur Ermittlung der Steuerbemessungsgrundlage: + +V e rä u ß e ru n g s e r lö s E U R 1 9 . 4 1 1 , 5 7 +a b z ü g li c h A n s c h a ffu n g s k o s te n E U R - 1 2 . 0 5 9 , 7 1 +a b z ü g li c h b e s it zz e it a n te i lig e a kk u m ul ie r te V o ra b p a u s ch a l e E_ _U _R _ _ _ _ _ _ _ _ _ _ _ _ -_ _2 5_ 7_ _, 0_ _1 + V e rä u ß e ru n g s e r ge b n i s E U R 7.094,84 + + +T ei lf re is t e llu n g (3 0 % ) E U R -2.128,45 + + fik t iv e s V e r ä u ß er u n g s e rg e b n is a u s M e rk p o s te n (n a c h T e i lf re is t e llu n g ) E U R 0,00 + + +e r h a lt e n e Z w i sc h e n g e w in n e (g g f. E rs a tz w e r t) E U R 0 , 0 0 +noch nicht dem Steuerabzug unterworfene akkumulierte thesaurierte +E rt rä g e /M e h rb e t ra g /S ch ä t z w e rt E U R 0 , 0 0 +f ik t iv e s V e r ä u ß er u n g s e rg e b n is a u s Ü b e rg a n g s re g e lu n g _E _U R_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _0 _, _0 _0 + S u m m e M e r kp o s t en 3 1 .1 2 . 20 1 7 E_ _U R__ _ _ __ __ __ _ _ _ _ _ __ 0__,0_0_ +S te u e r b e m e s s u n g s g r u n d la g e v o r V er l u s tv e r re c h n u n g E U R 4.966,39 + + + + + + + + + + + +Ihre comdirect +Diese Abrechnung ist maschinell erstellt und wird nicht unterschrieben. + + + + + +(4) Die ausgewiesenen EUR-Beträge spiegeln den Stand zum Abrechnungszeitpunkt wider. +KEINE STEUERBESCHEINIGUNG \ No newline at end of file diff --git a/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/ComdirectPDFExtractor.java b/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/ComdirectPDFExtractor.java index 2ba6c484fe..0db43d4918 100644 --- a/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/ComdirectPDFExtractor.java +++ b/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/ComdirectPDFExtractor.java @@ -405,11 +405,35 @@ private void addBuySellTransaction() } }), // @formatter:off + // St. 400 USD 50,722432 + // Umrechn. zum Dev. kurs 1,045200 vom 06.01.2025 + // IBAN Valuta Zu Ihren Gunsten vor Steuern + // DE87 2004 1111 0131 9599 00 EUR 08.01.2025 EUR 19.411,57 + // @formatter:on + section -> section // + .attributes("termCurrency", "exchangeRate", "baseCurrency", "gross") // + .match("^([\\s]+)?St\\.[\\s]{1,}[\\.,\\d]+[\\s]{1,}(?[\\w]{3})[\\s]{1,}[\\.,\\d]+.*$") // + .match("^.* Umrechn\\. zum Dev\\. kurs (?[\\.,\\d]+) .*$") // + .find(".* Zu Ihren (Gunsten|Lasten).*") // + .match("^.* [\\d]{2}\\.[\\d]{2}\\.[\\d]{4} [\\s]{2,}(?[\\w]{3}) [\\s]{2,}(?[\\.,\\d]+).*$") // + .assign((t, v) -> { + if (!type.getCurrentContext().getBoolean("negative")) + { + ExtrExchangeRate rate = asExchangeRate(v); + type.getCurrentContext().putType(rate); + + Money gross = Money.of(rate.getBaseCurrency(), asAmount(v.get("gross"))); + Money fxGross = rate.convert(rate.getTermCurrency(), gross); + + checkAndSetGrossUnit(gross, fxGross, t, type.getCurrentContext()); + } + }), + // @formatter:off // Summe St. 720 USD 40,098597 USD 28.870,99 // Umrechn. zum Dev. kurs 1,120800 vom 12.03.2020 : EUR 25.784,17 // @formatter:on section -> section // - .attributes("termCurrency", "fxGross", "exchangeRate", "baseCurrency") // // + .attributes("termCurrency", "fxGross", "exchangeRate", "baseCurrency") // .match("^([\\s]+)?Summe[\\s]{1,}St\\.[\\s]{1,}[\\.,\\d]+[\\s]{1,}[\\w]{3}[\\s]{1,}[\\.,\\d]+[\\s]{1,}(?[\\w]{3})[\\s]{1,}(?[\\.,\\d]+).*$") // .match("^.* Umrechn\\. zum Dev\\. kurs (?[\\.,\\d]+) .*[\\s]{1,}: (?[\\w]{3}) [\\s]{2,}[\\.,\\d]+.*$") // .assign((t, v) -> { @@ -517,6 +541,24 @@ private void addSellWithNegativeAmountTransaction() v.put("name", trim(replaceMultipleBlanks(v.get("name")))); v.put("nameContinued", trim(replaceMultipleBlanks(v.get("nameContinued")))); + t.setSecurity(getOrCreateSecurity(v)); + }), + // @formatter:off + // Wertpapier-Bezeichnung WPKNR/ISIN + // AB SICAV I-Concentr.US Equ.Ptf A1XBWG + // Actions Nom. I Acc. USD o.N. LU1011999676 + // St. 400 USD 50,722432 + // @formatter:on + section -> section // + .attributes("name", "wkn", "nameContinued", "isin", "currency") // + .find("Wertpapier\\-Bezeichnung .*") // + .match("^(?.*)[\\s]{2,}(?[A-Z0-9]{6}).*$") // + .match("^(?.*)[\\s]{2,}(?[A-Z]{2}[A-Z0-9]{9}[0-9]).*$") // + .match("^([\\s]+)?St\\.[\\s]{1,}[\\.,\\d]+[\\s]{1,}(?[\\w]{3}).*$") // + .assign((t, v) -> { + v.put("name", trim(replaceMultipleBlanks(v.get("name")))); + v.put("nameContinued", trim(replaceMultipleBlanks(v.get("nameContinued")))); + t.setSecurity(getOrCreateSecurity(v)); }))