Repository: portfolio-performance/portfolio (2025-08-23T06:30:36Z)

Issue:
PDF-Import von Flatex
https://forum.portfolio-performance.info/t/pdf-import-von-flatex/1752/280
PDF-Import von Flatex
https://forum.portfolio-performance.info/t/pdf-import-von-flatex/1752/297


Discussion:

Patch:
diff --git a/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/FinTechGroupBankPDFExtractor.java b/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/FinTechGroupBankPDFExtractor.java
index 853b46d0c6..f96dba0ae3 100644
--- a/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/FinTechGroupBankPDFExtractor.java
+++ b/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/FinTechGroupBankPDFExtractor.java
@@ -443,7 +443,7 @@ private void addBuySellCryptoTransaction()
 
         var pdfTransaction = new Transaction<BuySellEntry>();
 
-        var firstRelevantLine = new Block("^Kundenservice(:)?$");
+        var firstRelevantLine = new Block("^Nr\\.[\\d]+\\/[\\d]+[\\s]{1,}.*$");
         type.addBlock(firstRelevantLine);
         firstRelevantLine.set(pdfTransaction);
 


Test patch:
diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/fintechgroupbank/FinTechGroupBankPDFExtractorTest.java b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/fintechgroupbank/FinTechGroupBankPDFExtractorTest.java
index 2b9aca6e46..0cb09505d9 100644
--- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/fintechgroupbank/FinTechGroupBankPDFExtractorTest.java
+++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/fintechgroupbank/FinTechGroupBankPDFExtractorTest.java
@@ -4549,6 +4549,54 @@ public void testCryptoVerkauf01()
                         hasTaxes("EUR", 0.00), hasFees("EUR", 0.05))));
     }
 
+    @Test
+    public void testFlatExDegiroSammelabrechnungCrypto01()
+    {
+        List<Exception> errors = new ArrayList<>();
+
+        var results = extractor.extract(
+                        PDFInputFile.loadTestCase(getClass(), "FlatExDegiroSammelabrechnungCrypto01.txt"), errors);
+
+        assertThat(errors, empty());
+        assertThat(countSecurities(results), is(2L));
+        assertThat(countBuySell(results), is(2L));
+        assertThat(countAccountTransactions(results), is(0L));
+        assertThat(results.size(), is(4));
+        new AssertImportActions().check(results, "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 security
+        assertThat(results, hasItem(security( //
+                        hasIsin(null), hasWkn(null), hasTicker("ETH"), //
+                        hasName("Ethereum"), //
+                        hasCurrencyCode("EUR"), //
+                        hasFeed(CoinGeckoQuoteFeed.ID), //
+                        hasFeedProperty(CoinGeckoQuoteFeed.COINGECKO_COIN_ID, "ethereum"))));
+
+        // check buy sell transaction
+        assertThat(results, hasItem(purchase( //
+                        hasDate("2025-08-21T08:08"), hasShares(0.0325), //
+                        hasSource("FlatExDegiroSammelabrechnungCrypto01.txt"), //
+                        hasNote(null), //
+                        hasAmount("EUR", 3190.11), hasGrossValue("EUR", 3174.24), //
+                        hasTaxes("EUR", 0.00), hasFees("EUR", 15.87))));
+
+        // check buy sell transaction
+        assertThat(results, hasItem(purchase( //
+                        hasDate("2025-08-21T16:36"), hasShares(0.10), //
+                        hasSource("FlatExDegiroSammelabrechnungCrypto01.txt"), //
+                        hasNote(null), //
+                        hasAmount("EUR", 371.84), hasGrossValue("EUR", 369.99), //
+                        hasTaxes("EUR", 0.00), hasFees("EUR", 1.85))));
+    }
+
     @Test
     public void testFlatExDegiroDividende01WithNegativeAmount()
     {
@@ -6627,7 +6675,8 @@ public void testFlatExDegiroKontoauszug08()
 
         // assert transaction
         assertThat(results, hasItem(fee(hasDate("2025-04-25"), hasAmount("EUR", 15.90), //
-                        hasSource("FlatExDegiroKontoauszug08.txt"), hasNote("Bearbeitungsgebühr - Erträgnisaufstellung"))));
+                        hasSource("FlatExDegiroKontoauszug08.txt"),
+                        hasNote("Bearbeitungsgebühr - Erträgnisaufstellung"))));
 
         // assert transaction
         assertThat(results, hasItem(fee(hasDate("2025-04-30"), hasAmount("EUR", 5.90), //
diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/fintechgroupbank/FlatExDegiroSammelabrechnungCrypto01.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/fintechgroupbank/FlatExDegiroSammelabrechnungCrypto01.txt
new file mode 100644
index 0000000000..6a14ac2088
--- /dev/null
+++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/fintechgroupbank/FlatExDegiroSammelabrechnungCrypto01.txt
@@ -0,0 +1,69 @@
+PDFBox Version: 3.0.5 != 1.8.17
+Portfolio Performance Version: 0.78.1
+System: linux | x86_64 | 21.0.7+6-Ubuntu-0ubuntu124.04 | Ubuntu
+-----------------------------------------
+flatexDEGIRO Bank AG
+Kundenservice
+Gadollaplatz 1
+2615 TcJx
+Tel.: +43 - (0)720 518 777
+Mail: info@flatex.at
+flatexDEGIRO Bank AG -  Gadollaplatz 1 -  A-8010 Graz
+0006172000005137742700
+Herrn
+Max Mustermann
+Musterstraße 42a/1
+9999 Musterort
+ÖSTERREICH
+          Graz, 22.08.2025
+Sammelabrechnung (Kauf/-verkauf Kryptowerte)
+Ihr Verwahrkonto bei Tangany GmbH: 00000000000
+Inhaber: Max Mustermann
+Nr.000000000/1    Kauf                           BITCOIN                      
+Ordervolumen   : 0,0325 St.              Handelsplatz  :               Tradias
+davon ausgef.  : 0,0325 St.              Schlusstag    : 21.08.2025, 08:08 Uhr
+Kurs           : 97.668,9900 EUR         Kurswert      :          3.174,24 EUR
+Devisenkurs    :                         Provision     :             15,87 EUR
+Bew-Faktor     : 1,0000
+Verwahrart     : Kryptoverwahrung
+Kryptoverwahrer: Tangany GmbH           ** Einbeh. Steuer:            0,00 EUR
+Gewinn/Verlust : 0,00 EUR
+Valuta         : 22.08.2025              Endbetrag       :       -3.190,11 EUR
+**   Transaktion-Nr.: 0000000000
+______________________________________________________________________________
+                                                                     Seite 1/2
+flatexDEGIRO Bank AG Niederlassung Österreich | Aktiengesellschaft | Gadollaplatz 1 | 8010 Graz | Landesgericht für Zivilrechtssachen Graz | FN 334642 x | UID ATU 65140956
+Hauptniederlassung: flatexDEGIRO Bank AG | Omniturm | Große Gallusstr. 16-18 | 60312 Frankfurt am Main (Deutschland) | Amtsgericht Frankfurt am Main | HRB 105687
+- Vorsitzender des Aufsichtsrats: Hans-Hermann Lotter | Vorstand: Oliver Behrens (Vorsitzender), Dr. Benon Janos (stellv. Vorsitzender),
+Evgeni Kaplun, Jens Möbitz -
+2000005137742700 0351006170000101
+Nr.000000000/1    Kauf                          ETHEREUM                      
+Ordervolumen   : 0,10 St.                Handelsplatz  :               Tradias
+davon ausgef.  : 0,10 St.                Schlusstag    : 21.08.2025, 16:36 Uhr
+Kurs           : 3.699,9200 EUR          Kurswert      :            369,99 EUR
+Devisenkurs    :                         Provision     :              1,85 EUR
+Bew-Faktor     : 1,0000
+Verwahrart     : Kryptoverwahrung
+Kryptoverwahrer: Tangany GmbH           ** Einbeh. Steuer:            0,00 EUR
+Gewinn/Verlust : 0,00 EUR
+Valuta         : 22.08.2025              Endbetrag       :         -371,84 EUR
+**   Transaktion-Nr.: 0000000000
+Die Verrechnung der Endbeträge erfolgt über Ihr Konto Nr.: 00000000000
+Den Euro Gegenwert werden wir entsprechend der Abrechnung mit dem angegebenen
+Valutatag buchen. Die Kryptowerte werden entsprechend der Abrechnung durch die
+Tangany GmbH in ihrem Verwahrkonto, mit dem angegebenen Valutatag,
+bei Tangany GmbH gebucht.
+Bitte prüfen Sie diese Abrechnung auf Richtigkeit und Vollständigkeit.
+Etwaige Einwendungen gegen diese Abrechnung müssen unverzüglich nach Zugang
+bei der flatexDEGIRO Bank oder bei Tangany GmbH erhoben werden.
+Die Unterlassung rechtzeitiger Einwendung gilt als Genehmigung.
+Diese  Mitteilung  ist  maschinell  erstellt  und  wird  nicht unterschrieben.
+Irrtum vorbehalten.
+Für weitergehende Fragen wenden Sie sich bitte an Ihr flatex-Service-Team.
+______________________________________________________________________________
+                                                                     Seite 2/2
+flatexDEGIRO Bank AG Niederlassung Österreich | Aktiengesellschaft | Gadollaplatz 1 | 8010 Graz | Landesgericht für Zivilrechtssachen Graz | FN 334642 x | UID ATU 65140956
+Hauptniederlassung: flatexDEGIRO Bank AG | Omniturm | Große Gallusstr. 16-18 | 60312 Frankfurt am Main (Deutschland) | Amtsgericht Frankfurt am Main | HRB 105687
+- Vorsitzender des Aufsichtsrats: Hans-Hermann Lotter | Vorstand: Oliver Behrens (Vorsitzender), Dr. Benon Janos (stellv. Vorsitzender),
+Evgeni Kaplun, Jens Möbitz -
+2000005137742700
\ No newline at end of file