diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/traderepublic/CryptoKauf06.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/traderepublic/CryptoKauf06.txt new file mode 100644 index 0000000000..2e0a3d61b6 --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/traderepublic/CryptoKauf06.txt @@ -0,0 +1,26 @@ +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.71.2 +----------------------------------------- +TRADE REPUBLIC BANK GMBH BRUNNENSTRASSE 19-21 10119 BERLIN +Vorname Nachname SEITE 1 von 1 +Straße 123 DATUM 02.09.2024 +PLZ Ort AUSFÜHRUNG 4e58-c971 +SAVEBACK 9eed-7c4d +CRYPTO- BitGo Deutschland +WALLET GmbH +DEPOT 123234345 +ABRECHNUNG CRYPTO SAVEBACK +ÜBERSICHT +Saveback Ausführung am 02.09.2024 im außerbörslichen Handel Bankhaus Scheich. +Der Kontrahent der Transaktion ist Bankhaus Scheich Wertpapierspezialist AG. +POSITION ANZAHL DURCHSCHNITTSKURS BETRAG +Bitcoin (BTC) 0,000254 Stk. 53.988,63 EUR 13,71 EUR +GESAMT 13,71 EUR +BUCHUNG +VERRECHNUNGSKONTO WERTSTELLUNG BETRAG +DE123234345456 02.09.2024 -13,71 EUR +Diese Abrechnung wird maschinell erstellt und daher nicht unterschrieben. +Die Cryptowerte werden in einer zentralen Wallet bei dem Cryptoverwahrer BitGo Deutschland GmbH verwahrt. +Trade Republic Bank GmbH www.traderepublic.com Sitz der Gesellschaft: Berlin Geschäftsführer +Brunnenstraße 19-21 service@traderepublic.com AG Charlottenburg HRB 244347 B Andreas Torner +10119 Berlin USt-ID 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 e5f805b084..7d641fd605 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 @@ -962,6 +962,36 @@ public void testCryptoKauf05() hasTaxes("EUR", 0.00), hasFees("EUR", 1.00)))); } + @Test + public void testCryptoKauf06() + { + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "CryptoKauf06.txt"), errors); + + 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(null), hasWkn(null), hasTicker("BTC"), // + hasName("Bitcoin"), // + hasCurrencyCode("EUR"), // + hasFeed(CoinGeckoQuoteFeed.ID), // + hasFeedProperty(CoinGeckoQuoteFeed.COINGECKO_COIN_ID, "bitcoin")))); + + // check buy sell transaction + assertThat(results, hasItem(purchase( // + hasDate("2024-09-02T00:00"), hasShares(0.000254), // + hasSource("CryptoKauf06.txt"), // + hasNote("Ausführung: 4e58-c971 | Saveback: 9eed-7c4d"), // + hasAmount("EUR", 13.71), hasGrossValue("EUR", 13.71), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); + } + @Test public void testCryptoVerkauf01() { 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 6bd72e6aa8..96289a8a05 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 @@ -79,7 +79,7 @@ private void addBuySellTransaction() Transaction pdfTransaction = new Transaction<>(); - Block firstRelevantLine = new Block("^TRADE REPUBLIC BANK GMBH .*$"); + Block firstRelevantLine = new Block("^TRADE REPUBLIC BANK GMBH.*$"); type.addBlock(firstRelevantLine); firstRelevantLine.set(pdfTransaction); @@ -843,12 +843,12 @@ private void addSellWithNegativeAmountTransaction() private void addBuySellCryptoTransaction() { - DocumentType type = new DocumentType("(ABRECHNUNG CRYPTOGESCH.FT|CRYPTO SPARPLAN)"); + DocumentType type = new DocumentType("(ABRECHNUNG CRYPTOGESCH.FT|CRYPTO SPARPLAN|ABRECHNUNG CRYPTO SAVEBACK)"); this.addDocumentTyp(type); Transaction pdfTransaction = new Transaction<>(); - Block firstRelevantLine = new Block("^TRADE REPUBLIC BANK GMBH .*$"); + Block firstRelevantLine = new Block("^TRADE REPUBLIC BANK GMBH.*$", "^Diese Abrechnung wird maschinell erstellt.*$"); type.addBlock(firstRelevantLine); firstRelevantLine.set(pdfTransaction); @@ -900,10 +900,11 @@ private void addBuySellCryptoTransaction() .assign((t, v) -> t.setDate(asDate(v.get("date"), v.get("time")))), // @formatter:off // Sparplanausführung am 16.05.2023 im außerbörslichen Handel Bankhaus Scheich. + // Saveback Ausführung am 02.09.2024 im außerbörslichen Handel Bankhaus Scheich. // @formatter:on section -> section // .attributes("date") // - .match("^Sparplanausf.hrung .* (?[\\d]{2}\\.[\\d]{2}\\.[\\d]{4}) .*$") // + .match("^(Sparplanausf.hrung|Saveback) .* (?[\\d]{2}\\.[\\d]{2}\\.[\\d]{4}) .*$") // .assign((t, v) -> t.setDate(asDate(v.get("date"))))) .oneOf( // @@ -1052,7 +1053,7 @@ private void addDividendeTransaction() Transaction pdfTransaction = new Transaction<>(); - Block firstRelevantLine = new Block("^TRADE REPUBLIC BANK GMBH .*$"); // + Block firstRelevantLine = new Block("^TRADE REPUBLIC BANK GMBH.*$"); // type.addBlock(firstRelevantLine); firstRelevantLine.set(pdfTransaction); @@ -2812,7 +2813,7 @@ private void addDepositStatementTransaction() Transaction pdfTransaction = new Transaction<>(); - Block firstRelevantLine = new Block("^TRADE REPUBLIC BANK GMBH .*$"); + Block firstRelevantLine = new Block("^TRADE REPUBLIC BANK GMBH.*$"); type.addBlock(firstRelevantLine); firstRelevantLine.set(pdfTransaction); @@ -3101,7 +3102,7 @@ private void addFeeStatementTransaction() Transaction pdfTransaction = new Transaction<>(); - Block firstRelevantLine = new Block("^TRADE REPUBLIC BANK GMBH .*$"); + Block firstRelevantLine = new Block("^TRADE REPUBLIC BANK GMBH.*$"); type.addBlock(firstRelevantLine); firstRelevantLine.set(pdfTransaction); @@ -3268,7 +3269,7 @@ private void addBuySellTaxReturnBlock(DocumentType type) { Transaction pdfTransaction = new Transaction<>(); - Block firstRelevantLine = new Block("^TRADE REPUBLIC BANK GMBH .*$"); + Block firstRelevantLine = new Block("^TRADE REPUBLIC BANK GMBH.*$"); type.addBlock(firstRelevantLine); firstRelevantLine.set(pdfTransaction); @@ -3565,7 +3566,7 @@ private void addDividendeTaxReturnBlock(DocumentType type) { Transaction pdfTransaction = new Transaction<>(); - Block firstRelevantLine = new Block("^TRADE REPUBLIC BANK GMBH .*$"); + Block firstRelevantLine = new Block("^TRADE REPUBLIC BANK GMBH.*$"); type.addBlock(firstRelevantLine); firstRelevantLine.set(pdfTransaction);