From 5dbe19979c84609fb7e93983b3830efc7c78206a Mon Sep 17 00:00:00 2001 From: Alexander Ott <45203494+Nirus2000@users.noreply.github.com> Date: Wed, 25 Dec 2024 09:19:10 +0100 Subject: [PATCH] Modify Swissquote PDF-Importer to support new transaction (#4421) Closes #4419 --- .../datatransfer/pdf/swissquote/Kauf09.txt | 39 +++++++++++++++++++ .../SwissquotePDFExtractorTest.java | 31 +++++++++++++++ .../pdf/SwissquotePDFExtractor.java | 23 +++++++---- 3 files changed, 86 insertions(+), 7 deletions(-) create mode 100644 name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/swissquote/Kauf09.txt diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/swissquote/Kauf09.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/swissquote/Kauf09.txt new file mode 100644 index 0000000000..31f22871eb --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/swissquote/Kauf09.txt @@ -0,0 +1,39 @@ +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.72.2 +----------------------------------------- +TRANSAKTIONSBELEG +Kunde: 0950311 - TRADING +IBAN: CH1111111000212241300 +Herrn mPvWQ AeiLRqW +xNjXWfhLGdRrFgC 633 +CH-6873 wgnl +Gland, 15.11.2024 +Kauf Unsere Referenz: 699111111 +Am 15.11.2024 haben wir folgende Transaktionen vorgenommen: +Titel Börse +AMAZON COM ORD ISIN: US0231351067 NASDAQ New York +NKN: 645156 +Anzahl Preis Betrag +0.4683 202.57 USD 94.86 +Total USD 94.86 +Abgabe (Eidg. Stempelsteuer) USD 0.14 +Zu Ihren Lasten USD 95.00 +Betrag belastet auf Kontonummer 999999301, Valutadatum 18.11.2024 +Dieser Transaktionsbeleg sowie die aufgeführte Transaktion unterliegen der Vereinbarung über den Handel mit fraktionalen Instrumenten für +Trading-Konten. +Bitte beachten Sie, dass Swissquote Bank AG das betreffende Finanzinstrument als Treuhänder hält und Ihnen einen Treuhandanteil im Verhältnis +zu dem Ihnen zugeteilten Anteil gewährt. +Wenn Sie mehrere Transaktionen über den Erwerb oder die Veräusserung von Treuhandanteilen eingegangen sind und nach diesen Transaktionen +Ihre kumulierten Treuhandanteile an einem einzigen Finanzinstrument eine ganze Einheit (oder mehr) ausmachen, wandeln wir Ihre +Treuhandanteile im Allgemeinen in das Halten einer ganzen Einheit des Finanzinstruments gemäss der Vereinbarung über den Handel mit +fraktionalen Instrumenten für Trading-Konten. +Die Angabe einer Börse oder eines anderen Ausführungsplatzes wird nur zu Informationszwecken angegeben und bedeutet nicht, dass Ihr Auftrag +dort ausgeführt wurde. Zum Zeitpunkt der Ausführung Ihres Auftrags haben wir das betreffende Finanzinstrument möglicherweise noch nicht +erworben oder veräussert. Die Buchung dieser Transaktion ist gemäss der Vereinbarung über den Handel mit Fraktionalen Instrumenten für +Trading-Konten für einige Tage möglicherweise vorläufig. Bitte setzen Sie sich mit uns in Verbindung, wenn Sie weitere Informationen dazu +benötigen. +Die Angabe einer Börse oder eines anderen Ausführungsplatzes wird nur zu Informationszwecken angegeben und bedeutet nicht, dass Ihr Auftrag +Vielen Dank für Ihren Auftrag. +Swissquote Bank AG, 33 chemin de la Crétaux, CH-1196 Gland Formular ohne Unterschrift | SE&O. +Customer Care : 0848 25 88 88 (Aus dem Ausland +41 44 825 88 88) +MwSt n° CHE-116.310.079 diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/swissquote/SwissquotePDFExtractorTest.java b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/swissquote/SwissquotePDFExtractorTest.java index 29fc38d930..137edb306d 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/swissquote/SwissquotePDFExtractorTest.java +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/swissquote/SwissquotePDFExtractorTest.java @@ -450,6 +450,37 @@ public void testWertpapierKauf08() hasTaxes("USD", 0.00), hasFees("USD", 2.25 + 7.50)))); } + @Test + public void testWertpapierKauf09() + { + SwissquotePDFExtractor extractor = new SwissquotePDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kauf09.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, "USD"); + + // check security + assertThat(results, hasItem(security( // + hasIsin("US0231351067"), hasWkn(null), hasTicker(null), // + hasName("AMAZON COM ORD"), // + hasCurrencyCode("USD")))); + + // check buy sell transaction + assertThat(results, hasItem(purchase( // + hasDate("2024-11-15T00:00"), hasShares(0.4683), // + hasSource("Kauf09.txt"), // + hasNote("Referenz: 699111111"), // + hasAmount("USD", 95.00), hasGrossValue("USD", 94.86), // + hasTaxes("USD", 0.14), hasFees("USD", 0.00)))); + } + @Test public void testWertpapierVerkauf01() { diff --git a/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/SwissquotePDFExtractor.java b/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/SwissquotePDFExtractor.java index e0afa039a0..1545f15e51 100644 --- a/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/SwissquotePDFExtractor.java +++ b/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/SwissquotePDFExtractor.java @@ -125,13 +125,22 @@ private void addBuySellTransaction() .longValue()); })) - // @formatter:off - // Gemäss Ihrem Kaufauftrag vom 05.08.2019 haben wir folgende Transaktionen vorgenommen: - // Gemäss Ihrem Verkaufsauftrag vom 05.02.2018 haben wir folgende Transaktionen vorgenommen: - // @formatter:on - .section("date") // - .match("^Gem.ss Ihrem (Kauf|Verkaufs)auftrag vom (?[\\d]{2}\\.[\\d]{2}\\.[\\d]{4}) .*$") // - .assign((t, v) -> t.setDate(asDate(v.get("date")))) + .oneOf( // + // @formatter:off + // Gemäss Ihrem Kaufauftrag vom 05.08.2019 haben wir folgende Transaktionen vorgenommen: + // Gemäss Ihrem Verkaufsauftrag vom 05.02.2018 haben wir folgende Transaktionen vorgenommen: + // @formatter:on + section -> section // + .attributes("date") // + .match("^Gem.ss Ihrem (Kauf|Verkaufs)auftrag vom (?[\\d]{2}\\.[\\d]{2}\\.[\\d]{4}) .*$") // + .assign((t, v) -> t.setDate(asDate(v.get("date")))), + // @formatter:off + // Am 15.11.2024 haben wir folgende Transaktionen vorgenommen: + // @formatter:on + section -> section // + .attributes("date") // + .match("^Am (?[\\d]{2}\\.[\\d]{2}\\.[\\d]{4}) haben wir folgende Transaktionen vorgenommen:$") // + .assign((t, v) -> t.setDate(asDate(v.get("date"))))) // @formatter:off // Zu Ihren Lasten USD 2'900.60