diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/traderepublic/TradeRepublicPDFExtractorTest.java b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/traderepublic/TradeRepublicPDFExtractorTest.java index 72dc108ed8..b787fe1075 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/traderepublic/TradeRepublicPDFExtractorTest.java +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/traderepublic/TradeRepublicPDFExtractorTest.java @@ -3199,6 +3199,93 @@ public void testTransaccionesDeCuenta02() hasSource("TransaccionesDeCuenta02.txt"), hasNote("BACKBLAZE INC")))); } + @Test + public void testTransaccionesDeCuenta03() + { + TradeRepublicPDFExtractor extractor = new TradeRepublicPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "TransaccionesDeCuenta03.txt"), errors); + + assertThat(errors, empty()); + assertThat(countSecurities(results), is(0L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(19L)); + assertThat(results.size(), is(19)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // assert transaction + assertThat(results, hasItem(withFailureMessage( // + Messages.MsgErrorTransactionAlternativeDocumentRequired, // + interest(hasDate("2024-12-02"), hasAmount("EUR", 113.59), // + hasSource("TransaccionesDeCuenta03.txt"), hasNote(null))))); + + // assert transaction + assertThat(results, hasItem(deposit(hasDate("2024-12-02"), hasAmount("EUR", 15.00), // + hasSource("TransaccionesDeCuenta03.txt"), hasNote(null)))); + + // assert transaction + assertThat(results, hasItem(removal(hasDate("2024-12-11"), hasAmount("EUR", 9.99), // + hasSource("TransaccionesDeCuenta03.txt"), hasNote("Tesla Spain, S.L.")))); + + // assert transaction + assertThat(results, hasItem(removal(hasDate("2024-12-11"), hasAmount("EUR", 32.00), // + hasSource("TransaccionesDeCuenta03.txt"), hasNote("PERRUQUERIA ANGEL MANCEBO")))); + + // assert transaction + assertThat(results, hasItem(deposit(hasDate("2024-12-12"), hasAmount("EUR", 54.56), // + hasSource("TransaccionesDeCuenta03.txt"), hasNote("PAYPAL *ZALANDOSE")))); + + // assert transaction + assertThat(results, hasItem(removal(hasDate("2024-12-13"), hasAmount("EUR", 9.00), // + hasSource("TransaccionesDeCuenta03.txt"), hasNote("TAXI LLIC. 570")))); + + // assert transaction + assertThat(results, hasItem(removal(hasDate("2024-12-22"), hasAmount("EUR", 54.06), // + hasSource("TransaccionesDeCuenta03.txt"), hasNote("RESTAURANTE ELIM")))); + + // assert transaction + assertThat(results, hasItem(removal(hasDate("2024-12-23"), hasAmount("EUR", 1100.00), // + hasSource("TransaccionesDeCuenta03.txt"), hasNote("Revolut**3808*")))); + + // assert transaction + assertThat(results, hasItem(deposit(hasDate("2024-12-27"), hasAmount("EUR", 5900.00), // + hasSource("TransaccionesDeCuenta03.txt"), hasNote(null)))); + + // assert transaction + assertThat(results, hasItem(removal(hasDate("2024-12-28"), hasAmount("EUR", 132.35), // + hasSource("TransaccionesDeCuenta03.txt"), hasNote("MONTEFER")))); + + // assert transaction + assertThat(results, hasItem(removal(hasDate("2024-12-29"), hasAmount("EUR", 9.20), // + hasSource("TransaccionesDeCuenta03.txt"), hasNote("Tesla Spain, S.L.")))); + + // assert transaction + assertThat(results, hasItem(removal(hasDate("2024-12-29"), hasAmount("EUR", 0.20), // + hasSource("TransaccionesDeCuenta03.txt"), hasNote("APARCAMIENTO PALENCIA")))); + + // assert transaction + assertThat(results, hasItem(removal(hasDate("2024-12-30"), hasAmount("EUR", 28.08), // + hasSource("TransaccionesDeCuenta03.txt"), hasNote("IBERDROLA SMART MOBILITY")))); + + // assert transaction + assertThat(results, hasItem(removal(hasDate("2024-12-30"), hasAmount("EUR", 95.00), // + hasSource("TransaccionesDeCuenta03.txt"), hasNote("MESON DE LA DOLORES")))); + + // assert transaction + assertThat(results, hasItem(removal(hasDate("2024-12-30"), hasAmount("EUR", 19.70), // + hasSource("TransaccionesDeCuenta03.txt"), hasNote("FARMACIA CENTRAL")))); + + // assert transaction + assertThat(results, hasItem(removal(hasDate("2024-12-30"), hasAmount("EUR", 12.85), // + hasSource("TransaccionesDeCuenta03.txt"), hasNote("WWW.ENDESAX.COM")))); + + // assert transaction + assertThat(results, hasItem(removal(hasDate("2024-12-30"), hasAmount("EUR", 9.60), // + hasSource("TransaccionesDeCuenta03.txt"), hasNote("WAYLET")))); + } + @Test public void testAccountStatementSummary01() { @@ -7309,6 +7396,37 @@ public void testVorabpauschale02() hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))))); } + @Test + public void testVorabpauschale03() + { + TradeRepublicPDFExtractor extractor = new TradeRepublicPDFExtractor(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("IE00B40B8R38"), hasWkn(null), hasTicker(null), // + hasName("S&P 500 Consumer Staples USD (Acc)"), // + hasCurrencyCode("EUR")))); + + // check taxes transaction + assertThat(results, hasItem(taxes( // + hasDate("2025-01-24T00:00"), hasShares(591.791634), // + hasSource("Vorabpauschale03.txt"), // + hasNote("Vorabpauschale 45,40 EUR"), // + hasAmount("EUR", 11.97), hasGrossValue("EUR", 11.97), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); + } + @Test public void testSparplan01() { diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/traderepublic/TransaccionesDeCuenta03.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/traderepublic/TransaccionesDeCuenta03.txt new file mode 100644 index 0000000000..f67157e6c7 --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/traderepublic/TransaccionesDeCuenta03.txt @@ -0,0 +1,79 @@ +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.73.0 +System: macosx | aarch64 | 21.0.5+11-LTS | Azul Systems, Inc. +----------------------------------------- +jcgmR toXOs FBwUfh FECHA 01 dic 2024 - 31 dic 2024 +NILaNM zVZ de la rCzKID 489 - Ts 5, 67770 IBAN JP99672109888010680123 +icPHVITMg, ES BIC UVNuHuIi +RESUMEN DE ESTADO DE CUENTA +PRODUCTO BALANCE INICIAL ENTRADA DE DINERO SALIDA DE DINERO BALANCE FINAL +Cuenta de valores 47.149,42 € 6.138,10 € 5.538,08 € 47.749,44 € +TRANSACCIONES DE CUENTA +FECHA TIPO DESCRIPCIÓN ENTRADA DE SALIDA DE DINERO DINERO BALANCE +02 dic Pago de +2024 intereses Your interest payment 113,59 € 46.911,01 € +02 dic +2024 Recompensa Your Saveback payment 15,00 € 46.926,01 € +02 dic Comercio Savings plan execution IE000716YHJ7 Invesco Markets II plc - Invesco FTSE All-World 2024 UCITS ETF Acc, quantity: 2.243158 15,00 € 46.911,01 € +02 dic Comercio Savings plan execution IE000716YHJ7 Invesco Markets II plc - Invesco FTSE All-World 2024 UCITS ETF Acc, quantity: 104.680723 700,00 € 46.211,01 € +11 dic Transacción con +2024 tarjeta Tesla Spain, S.L. 9,99 € 45.533,45 € +Página 1 4 +Creado en 02 ene 2025 +Trade Republic Bank GmbH +FECHA TIPO DESCRIPCIÓN ENTRADA DE SALIDA DE DINERO DINERO BALANCE +11 dic Transacción con +2024 tarjeta PERRUQUERIA ANGEL MANCEBO 32,00 € 45.501,45 € +12 dic Transacción con +2024 tarjeta PAYPAL *ZALANDOSE 54,56 € 45.556,01 € +13 dic Transacción con +2024 tarjeta TAXI LLIC. 570 9,00 € 45.547,01 € +Página 2 4 +Creado en 02 ene 2025 +Trade Republic Bank GmbH +FECHA TIPO DESCRIPCIÓN ENTRADA DE SALIDA DE DINERO DINERO BALANCE +22 dic Transacción con +2024 tarjeta RESTAURANTE ELIM 54,06 € 43.756,27 € +22 dic Transacción con +2024 tarjeta ZARA MADRID CC MORALEJA 43,10 € 43.713,17 € +23 dic Transacción con +2024 tarjeta Revolut**3808* 1.100,00 € 42.613,17 € +27 dic +2024 Transferencia Ingreso aceptado: ES1235830002290012888722 a JP99672109888010680123 5.900,00 € 48.073,49 € +28 dic Transacción con +2024 tarjeta MONTEFER 132,35 € 47.941,14 € +29 dic Transacción con +2024 tarjeta Tesla Spain, S.L. 17,07 € 47.924,07 € +29 dic Transacción con +2024 tarjeta Tesla Spain, S.L. 9,20 € 47.914,87 € +29 dic Transacción con +2024 tarjeta APARCAMIENTO PALENCIA 0,20 € 47.914,67 € +30 dic Transacción con +2024 tarjeta IBERDROLA SMART MOBILITY 28,08 € 47.886,59 € +30 dic Transacción con +2024 tarjeta MESON DE LA DOLORES 95,00 € 47.791,59 € +30 dic Transacción con +2024 tarjeta FARMACIA CENTRAL 19,70 € 47.771,89 € +30 dic Transacción con +2024 tarjeta WWW.ENDESAX.COM 12,85 € 47.759,04 € +30 dic Transacción con +2024 tarjeta WAYLET 9,60 € 47.749,44 € +Página 3 4 +Creado en 02 ene 2025 +Trade Republic Bank GmbH +DISCLAIMER +Estimado Cliente +Por favor, asegúrate de revisar las transacciones de tu cuenta, los cálculos y el saldo final en el extracto bancario, que también constituye tu liquidación +de cuentas. La liquidación de cuentas se considera aceptada si no presentas ninguna objeción en el plazo de seis semanas a partir de su recepción. La +liquidación de cuentas se considera aceptada si no presenta ninguna objeción en un plazo de seis semanas tras su recepción. Los saldos acreedores son +admisibles como depósitos de conformidad con la Ley alemana sobre el seguro de depósitos (Einlagensicherungsgesetz ? EinSiG). Encontrará más +información en la hoja informativa para el depositante, que puede consultar junto con nuestras Condiciones Generales. +Trade Republic Bank GmbH +Brunnenstraße 19-21 Contactos +Domicilio social de la empresa: Berlin +10119 Berlin www.traderepublic.com +AG Charlottenburg HRB 244347 B +ID-IVA DE307510626 +Página 4 4 +Creado en 02 ene 2025 +Trade Republic Bank GmbH \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/traderepublic/Vorabpauschale03.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/traderepublic/Vorabpauschale03.txt new file mode 100644 index 0000000000..17da7e93bd --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/traderepublic/Vorabpauschale03.txt @@ -0,0 +1,39 @@ +PDFBox Version: 3.0.3 +Portfolio Performance Version: 0.74.0 +System: macosx | x86_64 | 21.0.5+11-LTS | Azul Systems, Inc. +----------------------------------------- +TRADE REPUBLIC BANK GMBH BRUNNENSTRASSE 19-21 10119 BERLIN +sjhdfhsfdk hfdjsjkdsfhfjd SEITE 1 von 1 +FJDKFJDKLFJFL. 000 DATUM 24.01.2025 +xxxxx xxxxxxxxxx 0000000000 +VORABPAUSCHALE +ÜBERSICHT +Besteuerung der Vorabpauschale gem. § 18 InvStG. +POSITION ANZAHL +S&P 500 Consumer Staples USD (Acc) 591,791634 Stück +IE00B40B8R38 +VORABPAUSCHALE +POSITION BETRAG +Steuerpflichtige Vorabpauschale 45,40 EUR +STEUERLICHE VERRECHNUNG +VORHER NACHHER +Aktienverlusttopf 0,00 EUR 0,00 EUR +Allgemeiner Verlusttopf 0,00 EUR 0,00 EUR +Freistellungsauftrag (eingereicht: 0 EUR) 0,00 EUR 0,00 EUR +Quellensteuertopf 0,00 EUR 0,00 EUR +ABRECHNUNG +Kapitalertragssteuer -11.35 EUR +Solidaritätszuschlag -0.62 EUR +-11,97 EUR +BUCHUNG +VERRECHNUNGSKONTO DATUM DER ZAHLUNG +DE61xxxxxxxxxxxxxxxxxx 24.01.2025 -11,97 EUR +Sofern ein Freistellungsauftrag vorliegt, wurde dieser berücksichtigt. +Diese Abrechnung wird maschinell erstellt und daher nicht unterschrieben. +Sofern keine Umsatzsteuer ausgewiesen ist, handelt es sich gem. §4 Nr. 8 UStG um eine umsatzsteuerfreie Leistung. Die Vorabpauschale unterliegt +grundsätzlich einem Steuerabzug von 25% (zuzüglich Solidaritätszuschlag und gegebenenfalls Kirchensteuer). +Trade Republic Bank GmbH www.traderepublic.com Sitz der Gesellschaft: Berlin Direktoren +Brunnenstraße 19-21 service@traderepublic.com AG Charlottenburg HRB 244347 B Andreas Torner +10119 Berlin Umsatzsteuer-ID DE307510626 Gernot Mittendorfer +Christian Hecker +Thomas Pischke \ No newline at end of file diff --git a/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/TradeRepublicPDFExtractor.java b/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/TradeRepublicPDFExtractor.java index 57b8a5affb..cafe243fd8 100644 --- a/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/TradeRepublicPDFExtractor.java +++ b/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/TradeRepublicPDFExtractor.java @@ -58,7 +58,7 @@ public String getLabel() private void addBuySellTransaction() { - DocumentType type = new DocumentType("(WERTPAPIERABRECHNUNG" // + final DocumentType type = new DocumentType("(WERTPAPIERABRECHNUNG" // + "|WERTPAPIERABRECHNUNG SPARPLAN" // + "|PIANO D.INVESTIMENTO" // + "|WERTPAPIERABRECHNUNG ROUND UP" // @@ -137,7 +137,14 @@ private void addBuySellTransaction() // @formatter:on section -> section // .attributes("currency", "name", "isin") // - .match("^[\\d] Ausbuchung .*(?\\p{Sc}) (?.*)(?[A-Z]{2}[A-Z0-9]{9}[0-9]) [\\.,\\d]+ St.cke$") + .match("^[\\d] Ausbuchung Long .[\\.,\\d]+ (?\\p{Sc}) (?.*)(?[A-Z]{2}[A-Z0-9]{9}[0-9]) [\\.,\\d]+ St.cke$") + .assign((t, v) -> t.setSecurity(getOrCreateSecurity(v))), + // @formatter:off + // 1 Ausbuchung Long @639.68 DKK Novo Nordisk A/S Best TurboDE000SW0XUN4 500 Stücke + // @formatter:on + section -> section // + .attributes("currency", "name", "isin") // + .match("^[\\d] Ausbuchung Long .[\\.,\\d]+ (?[\\w]{3}) (?.*)(?[A-Z]{2}[A-Z0-9]{9}[0-9]) [\\.,\\d]+ St.cke$") .assign((t, v) -> t.setSecurity(getOrCreateSecurity(v))), // @formatter:off // 1 Repayment Société Générale Effekten GmbH 500 Pcs. @@ -238,10 +245,11 @@ private void addBuySellTransaction() .oneOf( // // @formatter:off // 1 Ausbuchung Long @6.07 € TUI AG Best TurboDE000SU34220 2053 Stücke + // 1 Ausbuchung Long @639.68 DKK Novo Nordisk A/S Best TurboDE000SW0XUN4 500 Stücke // @formatter:on section -> section // .attributes("shares") // - .match("^[\\d] Ausbuchung .*\\p{Sc} .*[A-Z]{2}[A-Z0-9]{9}[0-9] (?[\\.,\\d]+) St.cke$") // + .match("^[\\d] Ausbuchung .*[A-Z]{2}[A-Z0-9]{9}[0-9] (?[\\.,\\d]+) St.cke$") // .assign((t, v) -> t.setShares(asShares(v.get("shares")))), // @formatter:off // Clinuvel Pharmaceuticals Ltd. 80 Stk. 22,82 EUR 1.825,60 EUR @@ -713,7 +721,7 @@ private void addBuySellTransaction() private void addSellWithNegativeAmountTransaction() { - DocumentType type = new DocumentType("(WERTPAPIERABRECHNUNG" // + final DocumentType type = new DocumentType("(WERTPAPIERABRECHNUNG" // + "|SECURITIES SETTLEMENT" // + "|REGOLAMENTO TITOLI" // + "|LIQUIDACI.N DE VALORES" // @@ -865,7 +873,7 @@ private void addSellWithNegativeAmountTransaction() private void addBuySellCryptoTransaction() { - DocumentType type = new DocumentType("(ABRECHNUNG CRYPTOGESCH.FT|CRYPTO SPARPLAN|ABRECHNUNG CRYPTO SAVEBACK)"); + final DocumentType type = new DocumentType("(ABRECHNUNG CRYPTOGESCH.FT|CRYPTO SPARPLAN|ABRECHNUNG CRYPTO SAVEBACK)"); this.addDocumentTyp(type); Transaction pdfTransaction = new Transaction<>(); @@ -1061,7 +1069,7 @@ private void addBuySellCryptoTransaction() private void addDividendeTransaction() { - DocumentType type = new DocumentType("(AUSSCH.TTUNG" // + final DocumentType type = new DocumentType("(AUSSCH.TTUNG" // + "|DIVIDENDE" // + "|REINVESTIERUNG" // + "|STORNO DIVIDENDE" // @@ -1477,7 +1485,7 @@ private void addDividendeTransaction() private void addAdvanceTaxTransaction() { - DocumentType type = new DocumentType("Vorabpauschale"); + final DocumentType type = new DocumentType("Vorabpauschale"); this.addDocumentTyp(type); Transaction pdfTransaction = new Transaction<>(); @@ -1494,20 +1502,31 @@ private void addAdvanceTaxTransaction() return accountTransaction; }) - // @formatter:off - // iShs Core MSCI EM IMI U.ETF 173,3905 Stk. - // Registered Shares o.N. - // ISIN: IE00BKM4GZ66 - // - // MUF-Amundi MSCI World II U.E. 5,598 Stück - // Actions au Port.Dist o.N. - // FR0010315770 - // @formatter:on - .section("name", "nameContinued", "isin") // - .match("^(?.*) [\\.,\\d]+ (Stk\\.|St.ck)$") // - .match("^(?.*)$") // - .match("^(ISIN: )?(?[A-Z]{2}[A-Z0-9]{9}[0-9])$") // - .assign((t, v) -> t.setSecurity(getOrCreateSecurity(v))) + .oneOf( // + // @formatter:off + // iShs Core MSCI EM IMI U.ETF 173,3905 Stk. + // Registered Shares o.N. + // ISIN: IE00BKM4GZ66 + // + // MUF-Amundi MSCI World II U.E. 5,598 Stück + // Actions au Port.Dist o.N. + // FR0010315770 + // @formatter:on + section -> section // + .attributes("name", "nameContinued", "isin") // + .match("^(?.*) [\\.,\\d]+ (Stk\\.|St.ck)$") // + .match("^(?.*)$") // + .match("^(ISIN: )?(?[A-Z]{2}[A-Z0-9]{9}[0-9])$") // + .assign((t, v) -> t.setSecurity(getOrCreateSecurity(v))), + // @formatter:off + // S&P 500 Consumer Staples USD (Acc) 591,791634 Stück + // IE00B40B8R38 + // @formatter:on + section -> section // + .attributes("name", "isin") // + .match("^(?.*) [\\.,\\d]+ (Stk\\.|St.ck)$") // + .match("^(ISIN: )?(?[A-Z]{2}[A-Z0-9]{9}[0-9])$") // + .assign((t, v) -> t.setSecurity(getOrCreateSecurity(v)))) // @formatter:off // iShs Core MSCI EM IMI U.ETF 173,3905 Stk. @@ -1918,11 +1937,39 @@ private void addAccountStatementTransaction_Format02() .optionalOneOf( // // @formatter:off + // 11 dic Transacción con + // 2024 tarjeta Tesla Spain, S.L. 9,99 € 45.533,45 € + // @formatter:on + section -> section // + .attributes("date", "year", "note", "amount", "currency", "amountAfter", "currencyAfter") // + .match("^(?[\\d]{2} [\\p{L}]{3,4}([\\.]{1})?)[\\s]Transacci.n con.*$") // + .match("^(?[\\d]{4}) tarjeta (?.*) (?[\\.,\\d]+) (?\\p{Sc}) (?[\\.,\\d]+) (?\\p{Sc})$") // + .assign((t, v) -> { + DocumentContext context = type.getCurrentContext(); + Money amountAfter = Money.of(asCurrencyCode(v.get("currencyAfter")), asAmount(v.get("amountAfter"))); + + AccountAmountTransactionHelper accountAmountTransactionHelper = context.getType(AccountAmountTransactionHelper.class).orElseGet(AccountAmountTransactionHelper::new); + Optional item = accountAmountTransactionHelper.findItem(v.getStartLineNumber(), amountAfter); + + if (item.isPresent()) + { + Money amountBefore = Money.of(item.get().currency, item.get().amount); + + if (amountBefore.isGreaterThan(amountAfter)) + t.setType(AccountTransaction.Type.REMOVAL); + } + + t.setDateTime(asDate(v.get("date") + " " + v.get("year"))); + t.setAmount(asAmount(v.get("amount"))); + t.setCurrencyCode(asCurrencyCode(v.get("currency"))); + t.setNote(trim(v.get("note"))); + }), + // @formatter:off // 20 may Transacción BACKBLAZE INC, 7,38 $, exchange rate: 0,9227642, ECB rate: 0,9221689414, markup: // 2024 con tarjeta 0,06454984 % 6,81 € 8.204,96 € // @formatter:on section -> section // - .attributes("date", "year", "note", "amount", "currency", "amountAfter", "currencyAfter") // + .attributes("date", "note", "year", "amount", "currency", "amountAfter", "currencyAfter") // .match("^(?[\\d]{2} [\\p{L}]{3,4}([\\.]{1})?)[\\s]Transacci.n (?.*), [\\.,\\d]+ \\p{Sc}.*$") // .match("^(?[\\d]{4}) con tarjeta .* (?[\\.,\\d]+) (?\\p{Sc}) (?[\\.,\\d]+) (?\\p{Sc})$") // .assign((t, v) -> { @@ -2258,7 +2305,7 @@ private void addAccountStatementTransaction_Format02() t.setCurrencyCode(asCurrencyCode(v.get("currency"))); }), // @formatter:off - // 30 + // 30 // Dez. SEPA Echtzeitüberweisung Outgoing transfer for Vorname Nachname 3.000,00 € 7.342,91 €2024 // @formatter:on section -> section // @@ -2294,8 +2341,8 @@ private void addAccountStatementTransaction_Format02() .optionalOneOf( // // @formatter:off - // 24 - // SEPA + // 24 + // SEPA // Jan. Outgoing transfer for Möbel Heidenreich GmbH 359,37 € 188,25 € // Echtzeitüberweisung // 2025 @@ -2317,8 +2364,8 @@ private void addAccountStatementTransaction_Format02() t.setNote(trim(v.get("note"))); }), // @formatter:off - // 23 - // SEPA + // 23 + // SEPA // Jan. Incoming transfer from Vorname Nachname 500,00 € 581,76 € // Echtzeitüberweisung // 2025 @@ -2863,7 +2910,7 @@ private void addTaxesStatementTransaction() private void addTaxesCorrectionStatementTransaction() { - DocumentType type = new DocumentType("STEUERKORREKTUR"); + final DocumentType type = new DocumentType("STEUERKORREKTUR"); this.addDocumentTyp(type); Transaction pdfTransaction = new Transaction<>(); @@ -2932,7 +2979,7 @@ private void addTaxesCorrectionStatementTransaction() private void addDepositStatementTransaction() { - DocumentType type = new DocumentType("(ABRECHNUNG EINZAHLUNG" // + final DocumentType type = new DocumentType("(ABRECHNUNG EINZAHLUNG" // + "|R.GLEMENT DU VERSEMENT)"); this.addDocumentTyp(type); @@ -3239,7 +3286,7 @@ private void addInterestStatementTransaction() private void addFeeStatementTransaction() { - DocumentType type = new DocumentType("PAIEMENTS PAR CARTE TRADE REPUBLIC"); + final DocumentType type = new DocumentType("PAIEMENTS PAR CARTE TRADE REPUBLIC"); this.addDocumentTyp(type); Transaction pdfTransaction = new Transaction<>(); @@ -3429,7 +3476,14 @@ private void addBuySellTaxReturnBlock(DocumentType type) // @formatter:on section -> section // .attributes("currency", "name", "isin") // - .match("^[\\d] Ausbuchung .*(?\\p{Sc}) (?.*)(?[A-Z]{2}[A-Z0-9]{9}[0-9]) [\\.,\\d]+ St.cke$") + .match("^[\\d] Ausbuchung Long .[\\.,\\d]+ (?\\p{Sc}) (?.*)(?[A-Z]{2}[A-Z0-9]{9}[0-9]) [\\.,\\d]+ St.cke$") + .assign((t, v) -> t.setSecurity(getOrCreateSecurity(v))), + // @formatter:off + // 1 Ausbuchung Long @639.68 DKK Novo Nordisk A/S Best TurboDE000SW0XUN4 500 Stücke + // @formatter:on + section -> section // + .attributes("currency", "name", "isin") // + .match("^[\\d] Ausbuchung Long .[\\.,\\d]+ (?[\\w]{3}) (?.*)(?[A-Z]{2}[A-Z0-9]{9}[0-9]) [\\.,\\d]+ St.cke$") .assign((t, v) -> t.setSecurity(getOrCreateSecurity(v))), // @formatter:off // 1 Repayment Société Générale Effekten GmbH 500 Pcs. @@ -3530,10 +3584,11 @@ private void addBuySellTaxReturnBlock(DocumentType type) .oneOf( // // @formatter:off // 1 Ausbuchung Long @6.07 € TUI AG Best TurboDE000SU34220 2053 Stücke + // 1 Ausbuchung Long @639.68 DKK Novo Nordisk A/S Best TurboDE000SW0XUN4 500 Stücke // @formatter:on section -> section // .attributes("shares") // - .match("^[\\d] Ausbuchung .*\\p{Sc} .*[A-Z]{2}[A-Z0-9]{9}[0-9] (?[\\.,\\d]+) St.cke$") // + .match("^[\\d] Ausbuchung .*[A-Z]{2}[A-Z0-9]{9}[0-9] (?[\\.,\\d]+) St.cke$") // .assign((t, v) -> t.setShares(asShares(v.get("shares")))), // @formatter:off // Clinuvel Pharmaceuticals Ltd. 80 Stk. 22,82 EUR 1.825,60 EUR