diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/ExtractorUtilsDateParserTest.java b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/ExtractorUtilsDateParserTest.java index 1722c74630..9d7f452404 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/ExtractorUtilsDateParserTest.java +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/ExtractorUtilsDateParserTest.java @@ -81,6 +81,17 @@ public void testAsDateValidFormatsWithHints() assertEquals(expected, ExtractorUtils.asDate("2023-04-1", Locale.GERMANY)); assertEquals(expected, ExtractorUtils.asDate("2023-04-01", Locale.GERMANY)); + // Test valid date strings for each pattern in + // DATE_FORMATTER_FRENCH with hints + expected = LocalDateTime.of(2024, 7, 1, 0, 0); + assertEquals(expected, ExtractorUtils.asDate("01 juil. 2024", Locale.FRENCH)); + + expected = LocalDateTime.of(2024, 8, 1, 0, 0); + assertEquals(expected, ExtractorUtils.asDate("01 août 2024", Locale.FRENCH)); + + expected = LocalDateTime.of(2024, 2, 1, 0, 0); + assertEquals(expected, ExtractorUtils.asDate("01 Février 2024", Locale.FRENCH)); + // Test valid date strings for each pattern in // DATE_FORMATTER_US with hints expected = LocalDateTime.of(2023, 4, 11, 0, 0); diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/traderepublic/Achat04.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/traderepublic/Achat04.txt new file mode 100644 index 0000000000..23bbaf9ded --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/traderepublic/Achat04.txt @@ -0,0 +1,29 @@ +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.70.3 +----------------------------------------- +TRADE REPUBLIC BANK GMBH KÖPENICKER STRASSE 40C 10179 BERLIN +pWlr BIBn oYXIPX iDwDDy PAGE 1 / 1 +629 oWz qOBnjT DATE 24/05/2023 +64242 jGjbKYXL ORDRE f023-fccb +EXÉCUTION d275-d0b1 +COMPTE-TITRES 0662991001 +RELEVÉ DE TRANSACTION +RÉCAPITULATIF +Market-Order Achat le 24/05/2023 à 17:10 (Europe/Berlin) sur la Lang & Schwarz Exchange. +Le contractant de la transaction est Lang & Schwarz TradeCenter AG & Co. KG. +POSITION QUANTITÉ PRIX MONTANT +Tesla Inc. 0,1127 titre(s) 166,86 EUR 18,81 EUR +Registered Shares DL-,001 +ISIN : US88160R1014 +TOTAL 18,81 EUR +RÉSERVATION +COMPTE-ESPÈCES DATE DE VALEUR MONTANT +DE13502109007011547146 26/05/2023 -18,81 EUR +Tesla Inc. Registered Shares DL-,001 en garde collective en Allemagne. +Ce document est généré automatiquement et n'est donc pas signé. +Si aucune taxe sur le chiffre d'affaires n'est indiquée, il s'agit d'un service non sujet à la taxe sur le chiffre +d'affaires (conformément à la réglementation UStG. § 4 n° 8). +Trade Republic Bank GmbH www.traderepublic.com Siège de la Société: Berlin Directeur Général +Köpenicker Straße 40c service@traderepublic.com AG Charlottenburg HRB 244347 B Andreas Torner +10179 Berlin VAT-ID DE307510626 Gernot Mittendorfer +ABRE / 24/05/2023 / 80204061 / 3608-6500 \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/traderepublic/Dividend06.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/traderepublic/Dividend06.txt new file mode 100644 index 0000000000..00e69c5891 --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/traderepublic/Dividend06.txt @@ -0,0 +1,29 @@ +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.70.3 +----------------------------------------- +TRADE REPUBLIC BANK GMBH BRUNNENSTRASSE 19-21 10119 BERLIN +Name Surname PAGE 1 from 1 +My Address 99 DATE 15.07.2024 +9999 City Name SECURITIES ACCOUNT 9999999999 +CASH DIVIDEND +OVERVIEW +Cash Dividend with Ex-Date 01.07.2024. +POSITION QUANTITY YIELD AMOUNT +Realty Income 15.000000 Pcs. 0.263 USD 3.95 USDUS7561091049 +TOTAL 3.95 USD +INVOICE +POSITION AMOUNT +Withholding Tax for US issuer -0.59 USD +Sub Total 3.36 USD +Sub Total 1.089 USD/EUR 3.09 EUR +TOTAL 3.09 EUR +BOOKING +SETTLEMENT ACCOUNT PAYMENT DATE AMOUNT +DE99999999999999999999 15.07.2024 3.09 EUR +US7561091049 in giro collection storage in Germany +This statement is generated automatically and therefore not signed. +If no sales tax is shown, this is a sales tax-free service in accordance with Section § 4 Nr. 8 UStG +Trade Republic Bank GmbH www.traderepublic.com Headquarters: Berlin DirectorsBrunnenstraße 19-21 +10119 Berlin service@traderepublic.com +AG Charlottenburg HRB 244347 B Andreas Torner +VAT-ID DE307510626 Gernot Mittendorfer \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/traderepublic/Dividend07.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/traderepublic/Dividend07.txt new file mode 100644 index 0000000000..67b857792a --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/traderepublic/Dividend07.txt @@ -0,0 +1,29 @@ +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.70.3 +----------------------------------------- +TRADE REPUBLIC BANK GMBH BRUNNENSTRASSE 19-21 10119 BERLIN +Name Surname PAGE 1 from 1 +My Address 99 DATE 04.07.2024 +9999 City Name SECURITIES ACCOUNT 9999999999 +CASH DIVIDEND +OVERVIEW +Cash Dividend with Ex-Date 18.06.2024. +POSITION QUANTITY YIELD AMOUNT +Vici Properties 30.000000 Pcs. 0.415 USD 12.45 USDUS9256521090 +TOTAL 12.45 USD +INVOICE +POSITION AMOUNT +Withholding Tax for US issuer -1.87 USD +Sub Total 10.58 USD +Sub Total 1.0729 USD/EUR 9.86 EUR +TOTAL 9.86 EUR +BOOKING +SETTLEMENT ACCOUNT PAYMENT DATE AMOUNT +DE99999999999999999999 03.07.2024 9.86 EUR +US9256521090 in securities invoice +This statement is generated automatically and therefore not signed. +If no sales tax is shown, this is a sales tax-free service in accordance with Section § 4 Nr. 8 UStG +Trade Republic Bank GmbH www.traderepublic.com Headquarters: Berlin DirectorsBrunnenstraße 19-21 +10119 Berlin service@traderepublic.com +AG Charlottenburg HRB 244347 B Andreas Torner +VAT-ID DE307510626 Gernot Mittendorfer \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/traderepublic/Dividend08.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/traderepublic/Dividend08.txt new file mode 100644 index 0000000000..85ed6491fd --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/traderepublic/Dividend08.txt @@ -0,0 +1,27 @@ +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.70.3 +----------------------------------------- +TRADE REPUBLIC BANK GMBH BRUNNENSTRASSE 19-21 10119 BERLIN +Name Surname PAGE 1 from 1 +My Address 99 DATE 19.06.2024 +9999 City Name SECURITIES ACCOUNT 9999999999 +CASH DIVIDEND +OVERVIEW +Cash Dividend with Ex-Date 08.06.2024. +POSITION QUANTITY YIELD AMOUNT +Alphabet (A) +US02079K3059 2 Pcs. 0.2 USD +0.40 USD +TOTAL 0.40 USD +INVOICE +POSITION AMOUNT +Withholding Tax for US issuer -0.06 USD +Sub Total 0.34 USD +Sub Total 1.0821 EUR/USD 0.31 EUR +TOTAL 0.31 EUR +BOOKING +SETTLEMENT ACCOUNT PAYMENT DATE AMOUNT +DE99999999999999999999 17.06.2024 0.31 EUR +This statement is generated automatically and therefore not signed. +If no sales tax is shown, this is a sales tax-free service in accordance with Section § 4 Nr. 8 UStG +Trade Republic Bank GmbH www.traderepublic.com Headquarters: Berlin DirectorsBrunnenstraße 19-21 service@traderepublic.com AG Charlottenburg HRB 244347 B Andreas Torner10119 Berlin VAT-ID DE307510626 Gernot Mittendorfer \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/traderepublic/Dividend09.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/traderepublic/Dividend09.txt new file mode 100644 index 0000000000..34eee07282 --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/traderepublic/Dividend09.txt @@ -0,0 +1,27 @@ +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.70.3 +----------------------------------------- +TRADE REPUBLIC BANK GMBH BRUNNENSTRASSE 19-21 10119 BERLIN +Name Surname PAGE 1 from 1 +My Address 99 DATE 17.06.2024 +9999 City Name SECURITIES ACCOUNT 9999999999 +CASH DIVIDEND +OVERVIEW +Cash Dividend with Ex-Date 03.06.2024. +POSITION QUANTITY YIELD AMOUNT +Realty Income +US7561091049 15 Pcs. 0.26 USD +3.94 USD +TOTAL 3.94 USD +INVOICE +POSITION AMOUNT +Withholding Tax for US issuer -0.59 USD +Sub Total 3.35 USD +Sub Total 1.0759 EUR/USD 3.11 EUR +TOTAL 3.11 EUR +BOOKING +SETTLEMENT ACCOUNT PAYMENT DATE AMOUNT +DE99999999999999999999 14.06.2024 3.11 EUR +This statement is generated automatically and therefore not signed. +If no sales tax is shown, this is a sales tax-free service in accordance with Section § 4 Nr. 8 UStG +Trade Republic Bank GmbH www.traderepublic.com Headquarters: Berlin DirectorsBrunnenstraße 19-21 service@traderepublic.com AG Charlottenburg HRB 244347 B Andreas Torner10119 Berlin VAT-ID DE307510626 Gernot Mittendorfer \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/traderepublic/Dividende27.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/traderepublic/Dividende27.txt new file mode 100644 index 0000000000..814467b037 --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/traderepublic/Dividende27.txt @@ -0,0 +1,29 @@ +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.70.3 +----------------------------------------- +TRADE REPUBLIC BANK GMBH BRUNNENSTRASSE 19-21 10119 BERLIN +lOuO wKwD jzyoHH EpseOy PAGE 1 1 +297 kGV VcouXy DATE 17.06.2024 +93814 TxCtxrGy 5305567903 +DIVIDENDE EN ESPÈCES +RÉCAPITULATIF +Dividende en espèces avec la date d'exécution au -15.05.2024. +POSITION QUANTITÉ TAUX MONTANT +Microsoft +US5949181045 0.561914 unit. 0.75 USD +0.42 USD +TOTAL 0.42 USD +RELEVÉ +POSITION MONTANT +Impôt à la source pour les émetteurs américains -0.06 USD +Sous-total 0.36 USD +Sous-total 1.0781 EUR/USD 0.33 EUR +TOTAL 0.33 EUR +RÉGLEMENT +COMPTE DE RÈGLEMENT DATE DE PAIEMENT MONTANT +DE13502109007011547146 13.06.2024 0.33 EUR +Ce document est généré automatiquement et n'est donc pas signé. +Si aucune taxe de vente n'est indiquée, il s'agit d'un service exempt de taxe de vente conformément à l'article § 4 Nr. 8 UStG +Trade Republic Bank GmbH Siège de la Société: Berlin Directeurs +Brunnenstraße 19-21 www.traderepublic.com AG Charlottenburg HRB 244347 B Andreas Torner +10119 Berlin Identifiant TVA DE307510626 Gernot Mittendorfer \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/traderepublic/DividendeStorno03.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/traderepublic/DividendeStorno03.txt new file mode 100644 index 0000000000..24ec4ec402 --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/traderepublic/DividendeStorno03.txt @@ -0,0 +1,27 @@ +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.70.3 +----------------------------------------- +TRADE REPUBLIC BANK GMBH BRUNNENSTRASSE 19-21 10119 BERLIN +WrbZjI eQRv SEITE 1 von 1 +gPiUPcaiBRez hZgbyK 4 DATUM 01.01.2024 +00000 HRrBIHLmn YR piTO DEPOT 0000000000 +STORNIERUNG DER DIVIDENDE +ÜBERSICHT +Dividende mit Ex-Datum01.01.2024. +POSITION ANZAHL ERTRAG BETRAG +Euro iSTOXX ex FIN 0.33 EUR +DE000ETFL482 1.525759 Stücke -0.215 EUR +GESAMT 0.33 EUR +ABRECHNUNG +POSITION BETRAG +Zwischensumme -0.33 EUR +Kapitalertragssteuer 0.08 EUR +GESAMT -0.25 EUR +BUCHUNG +VERRECHNUNGSKONTO DATUM DER ZAHLUNG BETRAG +DE07123412341234123412 01.01.2024 -0.25 EUR +AB0000000000 im Girosammelverwahrung in Deutschland +Diese Abrechnung wird maschinell erstellt und daher nicht unterschrieben. +Wird keine Umsatzsteuer ausgewiesen, handelt es sich um eine umsatzsteuerfreie Leistung gemäß § 4 Nr. 8 UStG +Trade Republic Bank GmbH Sitz der Gesellschaft: Berlin Direktoren +Brunnenstraße 19-21 www.traderepublic.comservice@traderepublic.com AG Charlottenburg HRB 244347 B Andreas Torner10119 Berlin Umsatzsteuer-ID DE307510626 Gernot Mittendorfer \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/traderepublic/ReglementDuVersement01.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/traderepublic/ReglementDuVersement01.txt new file mode 100644 index 0000000000..fe73ff36eb --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/traderepublic/ReglementDuVersement01.txt @@ -0,0 +1,25 @@ +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.70.3 +----------------------------------------- +TRADE REPUBLIC BANK GMBH KÖPENICKER STRASSE 40C 10179 BERLIN +rRUq zivW TNxlCx HBnRCz PAGE 1 / 1 +842 YBG DKCNIq DATE 24/05/2023 +80996 LSImtvVe COMPTE-TITRES 0662991001 +RÈGLEMENT DU VERSEMENT +RÉCAPITULATIF +Vous avez déposé des fonds sur votre compte Trade Republic à l’aide d’une carte de crédit. Le numéro de la +carte utilisée se termine par ****2432. +TOTAL MONTANT +Montant total 1000,00 EUR +TOTAL 1000,00 EUR +DÉTAIL +MONTANT +Frais de paiements par carte de crédit 0,00 EUR +TOTAL 1000,00 EUR +RÉSERVATION +COMPTE-ESPÈCES DATE DE VALEUR MONTANT +DE13502109007011547146 24/05/2023 1000,00 EUR +Ce document est généré automatiquement et n'est donc pas signé. +Trade Republic Bank GmbH www.traderepublic.com Siège de la Société: Berlin Directeur Général +Köpenicker Straße 40c service@traderepublic.com AG Charlottenburg HRB 244347 B Andreas Torner +10179 Berlin VAT-ID DE307510626 Gernot Mittendorfer \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/traderepublic/ReleveDeCompte01.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/traderepublic/ReleveDeCompte01.txt new file mode 100644 index 0000000000..96f6e42f94 --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/traderepublic/ReleveDeCompte01.txt @@ -0,0 +1,76 @@ +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.70.3 +----------------------------------------- +MAX MUSTER DATE 01 juil. 2024 - 14 août 2024 +Rue des Prés 28, 67168 IBAN DE47802109123019521123 +OBER-LES-WISSBOURG, FR BIC CITIDEFF +SYNTHÈSE DU RELEVÉ DE COMPTE +PRODUIT SOLDE DÉBUT DE PÉRIODE ENTRÉE D'ARGENT SORTIE D'ARGENT SOLDE FIN DE PÉRIODE +Compte titres 396,00 € 1602,99 € 1494,94 € 504,05 € +TRANSACTIONS +DATE TYPE DESCRIPTION ENTRÉE SORTIE D'ARGENT D'ARGENT SOLDE +01 juil. Paiement +2024 d'intérêts Your interest payment 1,24 € 397,24 € +01 juil. +2024 Virement Paiement accepté: DE98200411330722961000 à DE21502109007019521081 500,00 € 897,24 € +02 juil. +2024 Commerce Savings plan execution DE0008430026 MUENCH.RUECKVERS.VNA O.N., quantity: 0.110668 50,00 € 847,24 € +02 juil. +2024 Commerce +Savings plan execution IE00BHZRQZ17 Franklin Templeton ICAV - Franklin FTSE India UCITS +ETF, quantity: 1.160900 50,00 € 797,24 € +03 juil. +2024 Commerce Buy trade DE0008430026 MUENCH.RUECKVERS.VNA O.N., quantity: 0.550903 251,00 € 546,24 € +16 juil. +2024 Commerce Savings plan execution DE0008430026 MUENCH.RUECKVERS.VNA O.N., quantity: 0.109986 50,00 € 496,24 € +16 juil. Commerce Savings plan execution IE00BHZRQZ17 Franklin Templeton ICAV - Franklin FTSE India UCITS 2024 ETF ACC USD, quantity: 1.157273 50,00 € 446,24 € +17 juil. +2024 Commerce Buy trade NL0010273215 ASML HOLDING EO -,09, quantity: 0.34634 301,00 € 145,24 € +26 juil. +2024 Commerce Buy trade US22788C1053 CROWDSTRIKE HLD. DL-,0005, quantity: 0.597269 140,94 € 4,30 € +28 juil. +2024 Virement Apple Pay Top up 100,00 € 104,30 € +29 juil. +2024 Virement Paiement accepté: DE98200411330722961000 à DE21502109007019521081 500,00 € 604,30 € +01 août Paiement +2024 d'intérêts Your interest payment 1,30 € 605,60 € +01 août +2024 Virement Paiement accepté: DE98200411330722961000 à DE21502109007019521081 500,00 € +11 +05,60 € +02 août +2024 Commerce Savings plan execution DE0008430026 MUENCH.RUECKVERS.VNA O.N., quantity: 0.114416 50,00 € +10 +55,60 € +02 août Commerce Savings plan execution IE00BHZRQZ17 Franklin Templeton ICAV - Franklin FTSE India UCITS 10 2024 ETF, quantity: 1.155668 50,00 € 05,60 € +Page 1 3 +Généré le 15 août 2024 +Trade Republic Bank GmbH +DATE TYPE DESCRIPTION ENTRÉE SORTIE D'ARGENT D'ARGENT SOLDE +02 août +2024 Commerce Buy trade US22788C1053 CROWDSTRIKE HLD. DL-,0005, quantity: 0.266079 52,54 € 953,06 € +02 août +2024 Commerce Buy trade US22788C1053 CROWDSTRIKE HLD. DL-,0005, quantity: 1 198,46 € 754,60 € +02 août +2024 Commerce Buy trade NL0010273215 ASML HOLDING EO -,09, quantity: 0.334224 251,00 € 503,60 € +07 août +2024 Gains Cash Dividend for ISIN NL0010273215 0,45 € 504,05 € +Page 2 3 +Généré le 15 août 2024 +Trade Republic Bank GmbH +DÉCHARGE DE RESPONSABILITÉ +Cher client +Veillez à vérifier les écritures, calculs et le solde de clôture présentés dans le relevé bancaire, qui constitue également votre apurement de compte. +L'apurement des comptes est considéré comme accepté si vous ne soulevez aucune objection dans les six semaines suivant sa réception. Les objections +concernant les relevés de compte doivent être soumises par écrit à notre équipe d'assistance. Les soldes créditeurs peuvent être considérés comme des +dépôts conformément à la loi allemande sur l'assurance des dépôts (Einlagensicherungsgesetz ? EinSiG). De plus amples informations sont disponibles +dans la fiche d'information destinée au déposant, qui peut être consultée en même temps que nos conditions générales. +Trade Republic Bank GmbH +Brunnenstraße 19-21 Contacts +Siège de la Société: Berlin +10119 Berlin www.traderepublic.com +AG Charlottenburg HRB 244347 B +Identifiant TVA DE307510626 +Page 3 3 +Généré le 15 août 2024 +Trade Republic Bank GmbH \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/traderepublic/Synthese01.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/traderepublic/Synthese01.txt new file mode 100644 index 0000000000..a9ef2f938d --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/traderepublic/Synthese01.txt @@ -0,0 +1,20 @@ +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.70.3 +----------------------------------------- +TRADE REPUBLIC BANK GMBH BRUNNENSTRASSE 19-21 10119 BERLIN +Clio tDLo XTCzOd WBfztH PAGE 1 1 +nyr TwlvGH 387 DATE 19.04.2024 +93724 bygQdHyO 0662991001 +FACTURE N. 0662991001-0 +PAIEMENTS PAR CARTE TRADE REPUBLIC +SYNTHÈSE +POSITION COMMANDÉ LE QUANTITÉ +Carte Trade Republic 19.04.2024 1 +FACTURE +POSITION MONTANT +Frais -50,00 € +Total -50,00 € +Si aucune taxe de vente n'est indiquée, il s'agit d'un service exempt de taxe de vente conformément à l'article § 4 Nr. 8 UStG +Trade Republic Bank GmbH : Berlin Directeurs +Brunnenstraße 19-21 www.traderepublic.com AG Charlottenburg HRB 244347 B Andreas Torner +10119 Berlin Identifiant TVA DE307510626 Gernot Mittendorfer \ No newline at end of file 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 be0c230825..f61779c666 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 @@ -1099,6 +1099,37 @@ public void testAchat03() hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); } + @Test + public void testAchat04() + { + TradeRepublicPDFExtractor extractor = new TradeRepublicPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Achat04.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("US88160R1014"), hasWkn(null), hasTicker(null), // + hasName("Tesla Inc. Registered Shares DL-,001"), // + hasCurrencyCode("EUR")))); + + // check buy sell transaction + assertThat(results, hasItem(purchase( // + hasDate("2023-05-24T17:10"), hasShares(0.1127), // + hasSource("Achat04.txt"), // + hasNote("Ordre : f023-fccb | Exécution : d275-d0b1"), // + hasAmount("EUR", 18.81), hasGrossValue("EUR", 18.81), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); + } + @Test public void testKontoauszug01() { @@ -2036,6 +2067,47 @@ public void testKontoauszug17() hasSource("Kontoauszug17.txt"), hasNote("KAUFLAND STUTTGART MUEHLH")))); } + @Test + public void testReleveDeCompte01() + { + TradeRepublicPDFExtractor extractor = new TradeRepublicPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "ReleveDeCompte01.txt"), errors); + + assertThat(errors, empty()); + assertThat(countSecurities(results), is(0L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(6L)); + assertThat(results.size(), is(6)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // assert transaction + assertThat(results, hasItem(interest(hasDate("2024-07-01"), hasAmount("EUR", 1.24), + hasSource("ReleveDeCompte01.txt"), hasNote(null)))); + + // assert transaction + assertThat(results, hasItem(deposit(hasDate("2024-07-01"), hasAmount("EUR", 500.00), // + hasSource("ReleveDeCompte01.txt"), hasNote(null)))); + + // assert transaction + assertThat(results, hasItem(deposit(hasDate("2024-07-28"), hasAmount("EUR", 100.00), // + hasSource("ReleveDeCompte01.txt"), hasNote("Apple Pay Top up")))); + + // assert transaction + assertThat(results, hasItem(deposit(hasDate("2024-07-29"), hasAmount("EUR", 500.00), // + hasSource("ReleveDeCompte01.txt"), hasNote(null)))); + + // assert transaction + assertThat(results, hasItem(interest(hasDate("2024-08-01"), hasAmount("EUR", 1.30), + hasSource("ReleveDeCompte01.txt"), hasNote(null)))); + + // assert transaction ---> ZEILE 37 + assertThat(results, hasItem(deposit(hasDate("2024-08-01"), hasAmount("EUR", 500.00), // + hasSource("ReleveDeCompte01.txt"), hasNote(null)))); + } + @Test public void testTransaccionesDeCuenta01() { @@ -3190,6 +3262,37 @@ public void testVenta01() hasTaxes("EUR", 0.00), hasFees("EUR", 1.00)))); } + @Test + public void testVente01() + { + TradeRepublicPDFExtractor extractor = new TradeRepublicPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Vente01.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("IE00BF4TW784"), hasWkn(null), hasTicker(null), // + hasName("WisdomTree Multi Ass.Iss.PLC ETP 30.11.62 3X Short Daily"), // + hasCurrencyCode("EUR")))); + + // check buy sell transaction + assertThat(results, hasItem(sale( // + hasDate("2023-11-16T16:41"), hasShares(0.477676), // + hasSource("Vente01.txt"), // + hasNote(null), // + hasAmount("EUR", 53.70), hasGrossValue("EUR", 53.70), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); + } + @Test public void testRepayment01() { @@ -3512,6 +3615,39 @@ public void testDividendeStorno02() assertThat(grossValueUnit.getForex(), is(Money.of(CurrencyUnit.USD, Values.Amount.factorize(37.92)))); } + @Test + public void testDividendeStorno03() + { + TradeRepublicPDFExtractor extractor = new TradeRepublicPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "DividendeStorno03.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("DE000ETFL482"), hasWkn(null), hasTicker(null), // + hasName("Euro iSTOXX ex FIN"), // + hasCurrencyCode("EUR")))); + + // check dividends transaction + assertThat(results, hasItem(withFailureMessage( // + Messages.MsgErrorOrderCancellationUnsupported, // + dividend( // + hasDate("2024-01-01T00:00"), hasShares(1.525759), // + hasSource("DividendeStorno03.txt"), // + hasNote(null), // + hasAmount("EUR", 0.25), hasGrossValue("EUR", 0.33), // + hasTaxes("EUR", 0.08), hasFees("EUR", 0.00))))); + } + @Test public void testDividende01() { @@ -5243,6 +5379,76 @@ public void testDividende26() hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); } + @Test + public void testDividende27() + { + TradeRepublicPDFExtractor extractor = new TradeRepublicPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende27.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("US5949181045"), hasWkn(null), hasTicker(null), // + hasName("Microsoft"), // + hasCurrencyCode("USD")))); + + // check dividends transaction + assertThat(results, hasItem(dividend( // + hasDate("2024-06-13T00:00"), hasShares(0.561914), // + hasSource("Dividende27.txt"), // + hasNote(null), // + hasAmount("EUR", 0.33), hasGrossValue("EUR", 0.39), // + hasForexGrossValue("USD", 0.42), // + hasTaxes("EUR", 0.06), hasFees("EUR", 0.00)))); + } + + @Test + public void testDividende27WithSecurityInEUR() + { + Security security = new Security("Microsoft", CurrencyUnit.EUR); + security.setIsin("US5949181045"); + + Client client = new Client(); + client.addSecurity(security); + + TradeRepublicPDFExtractor extractor = new TradeRepublicPDFExtractor(client); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende27.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("2024-06-13T00:00"), hasShares(0.561914), // + hasSource("Dividende27.txt"), // + hasNote(null), // + hasAmount("EUR", 0.33), hasGrossValue("EUR", 0.39), // + hasTaxes("EUR", 0.06), 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 testDividend01() { @@ -5554,6 +5760,286 @@ public void testDividend05WithSecurityInEUR() })))); } + @Test + public void testDividend06() + { + TradeRepublicPDFExtractor extractor = new TradeRepublicPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividend06.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("US7561091049"), hasWkn(null), hasTicker(null), // + hasName("Realty Income"), // + hasCurrencyCode("USD")))); + + // check dividends transaction + assertThat(results, hasItem(dividend( // + hasDate("2024-07-15T00:00"), hasShares(15.00), // + hasSource("Dividend06.txt"), // + hasNote(null), // + hasAmount("EUR", 3.09), hasGrossValue("EUR", 3.63), // + hasForexGrossValue("USD", 3.95), // + hasTaxes("EUR", 0.54), hasFees("EUR", 0.00)))); + } + + @Test + public void testDividend06WithSecurityInEUR() + { + Security security = new Security("Realty Income", CurrencyUnit.EUR); + security.setIsin("US7561091049"); + + Client client = new Client(); + client.addSecurity(security); + + TradeRepublicPDFExtractor extractor = new TradeRepublicPDFExtractor(client); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividend06.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("2024-07-15T00:00"), hasShares(15.00), // + hasSource("Dividend06.txt"), // + hasNote(null), // + hasAmount("EUR", 3.09), hasGrossValue("EUR", 3.63), // + hasTaxes("EUR", 0.54), 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 testDividend07() + { + TradeRepublicPDFExtractor extractor = new TradeRepublicPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividend07.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("US9256521090"), hasWkn(null), hasTicker(null), // + hasName("Vici Properties"), // + hasCurrencyCode("USD")))); + + // check dividends transaction + assertThat(results, hasItem(dividend( // + hasDate("2024-07-03T00:00"), hasShares(30.00), // + hasSource("Dividend07.txt"), // + hasNote(null), // + hasAmount("EUR", 9.86), hasGrossValue("EUR", 11.60), // + hasForexGrossValue("USD", 12.45), // + hasTaxes("EUR", 1.74), hasFees("EUR", 0.00)))); + } + + @Test + public void testDividend07WithSecurityInEUR() + { + Security security = new Security("Vici Properties", CurrencyUnit.EUR); + security.setIsin("US9256521090"); + + Client client = new Client(); + client.addSecurity(security); + + TradeRepublicPDFExtractor extractor = new TradeRepublicPDFExtractor(client); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividend07.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("2024-07-03T00:00"), hasShares(30.00), // + hasSource("Dividend07.txt"), // + hasNote(null), // + hasAmount("EUR", 9.86), hasGrossValue("EUR", 11.60), // + hasTaxes("EUR", 1.74), 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 testDividend08() + { + TradeRepublicPDFExtractor extractor = new TradeRepublicPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividend08.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("US02079K3059"), hasWkn(null), hasTicker(null), // + hasName("Alphabet (A)"), // + hasCurrencyCode("USD")))); + + // check dividends transaction + assertThat(results, hasItem(dividend( // + hasDate("2024-06-17T00:00"), hasShares(2.00), // + hasSource("Dividend08.txt"), // + hasNote(null), // + hasAmount("EUR", 0.31), hasGrossValue("EUR", 0.37), // + hasForexGrossValue("USD", 0.40), // + hasTaxes("EUR", 0.06), hasFees("EUR", 0.00)))); + } + + @Test + public void testDividend08WithSecurityInEUR() + { + Security security = new Security("Alphabet (A)", CurrencyUnit.EUR); + security.setIsin("US02079K3059"); + + Client client = new Client(); + client.addSecurity(security); + + TradeRepublicPDFExtractor extractor = new TradeRepublicPDFExtractor(client); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividend08.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("2024-06-17T00:00"), hasShares(2.00), // + hasSource("Dividend08.txt"), // + hasNote(null), // + hasAmount("EUR", 0.31), hasGrossValue("EUR", 0.37), // + hasTaxes("EUR", 0.06), 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 testDividend09() + { + TradeRepublicPDFExtractor extractor = new TradeRepublicPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividend09.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("US7561091049"), hasWkn(null), hasTicker(null), // + hasName("Realty Income"), // + hasCurrencyCode("USD")))); + + // check dividends transaction + assertThat(results, hasItem(dividend( // + hasDate("2024-06-14T00:00"), hasShares(15.00), // + hasSource("Dividend09.txt"), // + hasNote(null), // + hasAmount("EUR", 3.11), hasGrossValue("EUR", 3.66), // + hasForexGrossValue("USD", 3.94), // + hasTaxes("EUR", 0.55), hasFees("EUR", 0.00)))); + } + + @Test + public void testDividend09WithSecurityInEUR() + { + Security security = new Security("Realty Income", CurrencyUnit.EUR); + security.setIsin("US7561091049"); + + Client client = new Client(); + client.addSecurity(security); + + TradeRepublicPDFExtractor extractor = new TradeRepublicPDFExtractor(client); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividend09.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("2024-06-14T00:00"), hasShares(15.00), // + hasSource("Dividend09.txt"), // + hasNote(null), // + hasAmount("EUR", 3.11), hasGrossValue("EUR", 3.66), // + hasTaxes("EUR", 0.55), 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 testDividendo01() { @@ -6700,6 +7186,32 @@ public void testEinzahlungsabrechnung01() hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); } + @Test + public void testReglementDuVersement01() + { + TradeRepublicPDFExtractor extractor = new TradeRepublicPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "ReglementDuVersement01.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 deposit transaction + assertThat(results, hasItem(deposit( // + hasDate("2023-05-24T00:00"), // + hasSource("ReglementDuVersement01.txt"), // + hasNote(null), // + hasAmount("EUR", 1000.00), hasGrossValue("EUR", 1000.00), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); + } + @Test public void testZinsabrechnung01() { @@ -6940,4 +7452,30 @@ public void testInterestInvoice02() hasAmount("EUR", 11.56), hasGrossValue("EUR", 11.56), // hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); } + + @Test + public void testSynthese01() + { + TradeRepublicPDFExtractor extractor = new TradeRepublicPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Synthese01.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 interest transaction + assertThat(results, hasItem(fee( // + hasDate("2024-04-19T00:00"), // + hasSource("Synthese01.txt"), // + hasNote(null), // + hasAmount("EUR", 50.00), hasGrossValue("EUR", 50.00), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); + } } diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/traderepublic/Vente01.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/traderepublic/Vente01.txt new file mode 100644 index 0000000000..3bc286f669 --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/traderepublic/Vente01.txt @@ -0,0 +1,19 @@ +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.70.3 +----------------------------------------- +TRADE REPUBLIC BANK GMBH BRUNNENSTRASSE 19-21 10119 BERLIN +JdTG XxOA OUuhRQ CTEDzA PAGE 1 / 1 +384 uGf WzqtYx DATE 16/11/2023 +27819 tnUwqaqj COMPTE-TITRES 0662991001 +CONFIRMATION D'EXÉCUTION +RÉCAPITULATIF +Market-Order Vente avec le numéro d'ordre 185e-c098 a été exécuté le 16/11/2023 à 16:41 (Europe/Berlin) sur la place de négociation +Trade Republic Bank GmbH. +TITRE QUANTITÉ PRIX ESTIMATION DU MONTANT DE VENTE +WisdomTree Multi Ass.Iss.PLC 0,477676 titre(s) 112,427 EUR 53,703679652 EUR +ETP 30.11.62 3X Short Daily +ISIN : IE00BF4TW784 +Trade Republic Bank GmbH www.traderepublic.com Siège de la Société: Berlin Directeur Général +Brunnenstraße 19-21 service@traderepublic.com AG Charlottenburg HRB 244347 B Andreas Torner +10119 Berlin VAT-ID DE307510626 Gernot Mittendorfer +DUAN / 16/11/2023 / 40965046 / fa9c-f52b \ No newline at end of file diff --git a/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/ExtractorUtils.java b/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/ExtractorUtils.java index fd9617e340..81751c75ef 100644 --- a/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/ExtractorUtils.java +++ b/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/ExtractorUtils.java @@ -31,6 +31,10 @@ @SuppressWarnings("nls") public class ExtractorUtils { + private ExtractorUtils() + { + } + // Helper method to create case-insensitive DateTimeFormatter instances private static DateTimeFormatter createFormatter(String pattern, Locale locale) { @@ -65,11 +69,20 @@ private static DateTimeFormatter createFormatter(String pattern, Locale locale) createFormatter("yyyy-M-dd", Locale.GERMANY), // createFormatter("yyyy-MM-d", Locale.GERMANY), // createFormatter("yyyy-MM-dd", Locale.GERMANY), // - createFormatter("d/MM/yyyy", Locale.GERMANY), - createFormatter("dd/MM/yyyy", Locale.GERMANY), - createFormatter("d/M/yyyy", Locale.GERMANY), + createFormatter("d/MM/yyyy", Locale.GERMANY), // + createFormatter("dd/MM/yyyy", Locale.GERMANY), // + createFormatter("d/M/yyyy", Locale.GERMANY), // createFormatter("dd/M/yyyy", Locale.GERMANY) }; + // Date formatters with case-insensitive support for French + private static final DateTimeFormatter[] DATE_FORMATTER_FRENCH = { // + createFormatter("d MMM yyyy", Locale.FRENCH), // + createFormatter("dd MMM yyyy", Locale.FRENCH), // + createFormatter("d MMMM yyyy", Locale.FRENCH), // + createFormatter("dd MMMM yyyy", Locale.FRENCH), // + createFormatter("d MMM. yyyy", Locale.FRENCH), // + createFormatter("dd MMM. yyyy", Locale.FRENCH) }; + // Date formatters with case-insensitive support for the United States private static final DateTimeFormatter[] DATE_FORMATTER_US = { // createFormatter("d LLL yyyy", Locale.US), // @@ -94,18 +107,18 @@ private static DateTimeFormatter createFormatter(String pattern, Locale locale) createFormatter("LLL dd, yyyy", Locale.US), // createFormatter("LLLL/d/yyyy", Locale.US), // createFormatter("LLLL/dd/yyyy", Locale.US), // - createFormatter("LLLL d, yyyy", Locale.US), + createFormatter("LLLL d, yyyy", Locale.US), // createFormatter("LLLL dd, yyyy", Locale.US), }; // Date formatters with case-insensitive support for Canada private static final DateTimeFormatter[] DATE_FORMATTER_CANADA = { // createFormatter("LLL dd, yyyy", Locale.CANADA), // - createFormatter("LLL d, yyyy", Locale.CANADA)}; + createFormatter("LLL d, yyyy", Locale.CANADA) }; // Date formatters with case-insensitive support for Canadian French private static final DateTimeFormatter[] DATE_FORMATTER_CANADA_FRENCH = { // createFormatter("d LLL yyyy", Locale.CANADA_FRENCH), // - createFormatter("dd LLL yyyy", Locale.CANADA_FRENCH)}; + createFormatter("dd LLL yyyy", Locale.CANADA_FRENCH) }; // Date formatters with case-insensitive support for the United Kingdom private static final DateTimeFormatter[] DATE_FORMATTER_UK = { // @@ -127,6 +140,7 @@ private static DateTimeFormatter createFormatter(String pattern, Locale locale) // Map associating locales with their respective date formatters private static final Map LOCALE2DATE = Map.of( // Locale.GERMANY, DATE_FORMATTER_GERMANY, // + Locale.FRENCH, DATE_FORMATTER_FRENCH, // Locale.US, DATE_FORMATTER_US, // Locale.CANADA, DATE_FORMATTER_CANADA, // Locale.CANADA_FRENCH, DATE_FORMATTER_CANADA_FRENCH, // @@ -168,12 +182,8 @@ private static DateTimeFormatter createFormatter(String pattern, Locale locale) createFormatter("dd LLL yyyy HH:mm:ss", Locale.UK), // createFormatter("d/LL/yy HH.mm", Locale.UK), // createFormatter("dd/LL/yy HH.mm", Locale.UK), // - createFormatter("d/LL/yy HH.mm", Locale.UK), - createFormatter("dd/LL/yy HH.mm", Locale.UK)}; - - private ExtractorUtils() - { - } + createFormatter("d/LL/yy HH.mm", Locale.UK), // + createFormatter("dd/LL/yy HH.mm", Locale.UK) }; public static void checkAndSetGrossUnit(Money gross, Money fxGross, Object transaction, DocumentContext context) { @@ -373,10 +383,16 @@ public static LocalDateTime asDate(String value, Locale... hints) value = value.replaceAll("(?i)\\bMrz\\b", "Mär"); Locale[] locales = hints.length > 0 ? hints - : new Locale[] { Locale.GERMANY, Locale.US, Locale.CANADA, Locale.CANADA_FRENCH, Locale.UK }; + : new Locale[] { Locale.GERMANY, Locale.FRENCH, Locale.US, Locale.CANADA, Locale.CANADA_FRENCH, Locale.UK }; for (Locale l : locales) { + DateTimeFormatter[] formatters = LOCALE2DATE.get(l); + if (formatters == null) + { + continue; // Skip this locale if no formatters are found + } + for (DateTimeFormatter formatter : LOCALE2DATE.get(l)) { try 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 d668ead027..6b135af3a4 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 @@ -46,6 +46,7 @@ public TradeRepublicPDFExtractor(Client client) addTaxesCorrectionStatementTransaction(); addDepositStatementTransaction(); addInterestStatementTransaction(); + addFeeStatementTransaction(); addNonImportableTransaction(); } @@ -66,6 +67,7 @@ private void addBuySellTransaction() + "|LIQUIDACI.N DE VALORES" // + "|REINVESTIERUNG" // + "|CONFIRMATION DE L.INVESTISSEMENT PROGRAMM." + + "|CONFIRMATION D.EX.CUTION" + "|RELEV. DE TRANSACTION" + "|REGOLAMENTO TITOLI" + "|ZWANGS.BERNAHME" @@ -99,7 +101,8 @@ private void addBuySellTransaction() + "|Verkauf" + "|Sell" + "|Compra" - + "|Venta" // + + "|Venta" + + "|Vente" // + "|Sparplanausf.hrung" // + "|SAVINGS PLAN" // + "|Ex.cution de l.investissement programm." // @@ -112,6 +115,7 @@ private void addBuySellTransaction() if ("Verkauf".equalsIgnoreCase(v.get("type")) // || "Sell".equalsIgnoreCase(v.get("type")) // || "Venta".equalsIgnoreCase(v.get("type")) // + || "Vente".equalsIgnoreCase(v.get("type")) // || "ZWANGSÜBERNAHME".equalsIgnoreCase(v.get("type")) // || "TILGUNG".equalsIgnoreCase(v.get("type")) // || "REPAYMENT".equalsIgnoreCase(v.get("type"))) @@ -305,10 +309,11 @@ private void addBuySellTransaction() // Market-Order Achat le 10/04/2024 à 17:33 (Europe/Berlin). // Market-OrderCompra el día 01.12.2022 a las 11:56 (Europe/Berlin). // Market-OrderVenta a día 15.02.2024, a las 16:15 (Europe/Berlin) en Lang & Schwarz Exchange. + // Market-Order Vente avec le numéro d'ordre 185e-c098 a été exécuté le 16/11/2023 à 16:41 (Europe/Berlin) sur la place de négociation // @formatter:on section -> section // .attributes("date", "time") // - .match("^(?i)((Limit|Stop\\-Market|Market)\\-Order(\\s)?)?(Buy|Achat|Acquisto|Kauf|Verkauf|Sell|Compra|Venta) .*" // + .match("^(?i)((Limit|Stop\\-Market|Market)\\-Order(\\s)?)?(Buy|Achat|Acquisto|Kauf|Verkauf|Sell|Compra|Venta|Vente) .*" // + "(?([\\d]{2}\\.[\\d]{2}\\.[\\d]{4}" // + "|[\\d]{4}\\-[\\d]{2}\\-[\\d]{2}" // + "|[\\d]{2}\\/[\\d]{2}\\/[\\d]{4}))" // @@ -432,6 +437,18 @@ private void addBuySellTransaction() .attributes("amount", "currency") // .find("VERRECHNUNGSKONTO DATUM DER ZAHLUNG") .match("^[\\w]+ ([\\d]{2}\\.[\\d]{2}\\.[\\d]{4}|[\\d]{4}\\-[\\d]{2}\\-[\\d]{2}) (?[\\.,\\d]+) (?[\\w]{3})$") // + .assign((t, v) -> { + t.setCurrencyCode(asCurrencyCode(v.get("currency"))); + t.setAmount(asAmount(v.get("amount"))); + }), + // @formatter:off + // TITRE QUANTITÉ PRIX ESTIMATION DU MONTANT DE VENTE + // WisdomTree Multi Ass.Iss.PLC 0,477676 titre(s) 112,427 EUR 53,703679652 EUR + // @formatter:on + section -> section // + .attributes("amount", "currency") // + .find("TITRE QUANTITÉ PRIX ESTIMATION DU MONTANT DE VENTE") + .match("^.* [\\.,\\d]+ titre\\(s\\) [\\.,\\d]+ [\\w]{3} (?[\\.,\\d]+) (?[\\w]{3})$") // .assign((t, v) -> { t.setCurrencyCode(asCurrencyCode(v.get("currency"))); t.setAmount(asAmount(v.get("amount"))); @@ -677,13 +694,14 @@ private void addSellWithNegativeAmountTransaction() DocumentType type = new DocumentType("(WERTPAPIERABRECHNUNG" // + "|SECURITIES SETTLEMENT" // + "|REGOLAMENTO TITOLI" - + "|LIQUIDACI.N DE VALORES)", // + + "|LIQUIDACI.N DE VALORES" + + "|CONFIRMATION D.EX.CUTION)", // "(ABRECHNUNG CRYPTOGESCH.FT|CRYPTO SPARPLAN)"); this.addDocumentTyp(type); Transaction pdfTransaction = new Transaction<>(); - Block firstRelevantLine = new Block("^(.*\\-Order )?(Verkauf|Sell).*$"); + Block firstRelevantLine = new Block("^(.*\\-Order )?(Verkauf|Sell|Venta|Vente).*$"); type.addBlock(firstRelevantLine); firstRelevantLine.set(pdfTransaction); @@ -768,12 +786,14 @@ private void addSellWithNegativeAmountTransaction() // Verkauf am 26.02.2021, um 11:44 Uhr. // Market-Order Sell on 02.05.2023 at 18:18 (Europe/Berlin). // Market-OrderVenta a día 15.02.2024, a las 16:15 (Europe/Berlin) en Lang & Schwarz Exchange. + // Market-Order Vente avec le numéro d'ordre 185e-c098 a été exécuté le 16/11/2023 à 16:41 (Europe/Berlin) sur la place de négociation // @formatter:on .section("date", "time") // - .match("^((Limit|Stop\\-Market|Market)\\-Order(\\s)?)?(Verkauf|Sell|Venta) .* " - + "(?([\\d]{2}\\.[\\d]{2}\\.[\\d]{4}" - + "|[\\d]{4}\\-[\\d]{2}\\-[\\d]{2}))(,)?" - + " (um|at|alle|.) (?