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 a867c4f759..e214579e3a 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 @@ -3199,7 +3199,7 @@ public void testFlatExVerkauf04() assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2020-06-22T00:00"))); assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(0.5))); assertThat(entry.getSource(), is("FlatExVerkauf04.txt")); - assertThat(entry.getNote(), is("Spitzenregulierung in CA05156X1087")); + assertThat(entry.getNote(), is("Spitzenregulierung in CA05156X1087 | Transaktions-Nr. 1942669999")); assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(5.86)))); @@ -4179,18 +4179,51 @@ public void testFlatExDegiroVerkauf02() // check buy sell transaction assertThat(results, hasItem(sale( // hasDate("2023-05-25T00:00"), hasShares(0.385884), // - hasSource("FlatExDegiroVerkauf02.txt"), hasNote("Transaktion-Nr.: 3333333333"), // + hasSource("FlatExDegiroVerkauf02.txt"), // + hasNote("Transaktion-Nr.: 3333333333"), // hasAmount("EUR", 3.48), hasGrossValue("EUR", 3.51), // hasTaxes("EUR", 0.03), hasFees("EUR", 0.00)))); // check fee transaction assertThat(results, hasItem(fee( // hasDate("2023-05-25T00:00"), hasShares(0.385884), // - hasSource("FlatExDegiroVerkauf02.txt"), hasNote("Transaktion-Nr.: 3333333333"), // + hasSource("FlatExDegiroVerkauf02.txt"), // + hasNote("Transaktion-Nr.: 3333333333"), // hasAmount("EUR", 5.90), hasGrossValue("EUR", 5.90), // hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); } + @Test + public void testFlatExDegiroVerkauf03() + { + FinTechGroupBankPDFExtractor extractor = new FinTechGroupBankPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "FlatExDegiroVerkauf03.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("NL0000009538"), hasWkn("940602"), hasTicker(null), // + hasName("ROY.PHILIPS BR RG"), // + hasCurrencyCode("EUR")))); + + // check buy sell transaction + assertThat(results, hasItem(sale( // + hasDate("2023-05-23T00:00"), hasShares(0.384510), // + hasSource("FlatExDegiroVerkauf03.txt"), // + hasNote("Spitzenregulierung in NL0000009538 | Transaktions-Nr. 3291805526"), // + hasAmount("EUR", 0.03), hasGrossValue("EUR", 0.03), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); + } + @Test public void testFlatExDegiroDividende01WithNegativeAmount() { diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/fintechgroupbank/FlatExDegiroVerkauf03.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/fintechgroupbank/FlatExDegiroVerkauf03.txt new file mode 100644 index 0000000000..4f115128f4 --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/fintechgroupbank/FlatExDegiroVerkauf03.txt @@ -0,0 +1,44 @@ +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.67.3 +----------------------------------------- +flatexDEGIRO Bank AG +Kundenservice +Opernring 1 / Top 736 +1010 Wien +Tel.: +43 - (0)720 518 777 +Mail: info@flatex.at +flatexDEGIRO Bank AG - Opernring 1 / Top 736 - A-1010 Wien +0302402000003239365070 +Herrn +Max Mustermann +Musterstrasse 123 +1234 Musterhausen +ÖSTERREICH + Wien, 23.05.2023 +Spitzenregulierung in NL0000009538 +Kundennummer: 1111111 +Kontonummer : 11111111111 +Depotnummer : 11111111111 +Inhaber : Max Mustermann +WKN ISIN Wertpapierbezeichnung Anzahl +940602 NL0000009538 ROY.PHILIPS BR RG 0,384510 +Sehr geehrter Herr Mustermann, +Spitzenregulierung 0,03 EUR +Steuerpfl. Ertrag 0,00 EUR +Steuerbetrag** 0,00 EUR +Verrechnung über Ihr Konto: 111111111 Gutschrift 0,03 EUR +Transaktions-Nr. 3291805526 +Die Gutschrift erfolgt unter Vorbehalt des Eingangs. Einwendungen müssen +unverzüglich nach Zugang erhoben werden. Die Unterlassung rechtzeitiger +Einwendungen gilt als Genehmigung. +Dieser Beleg ist keine Steuerbescheinigung. Kapitalerträge sind +einkommensteuerpflichtig. Diese Mitteilung ist maschinell erstellt und wird +nicht unterschrieben. +Für weitergehende Fragen wenden Sie sich bitte an Ihr flatex-Service-Team. +______________________________________________________________________________ + Seite 1/1 +flatexDEGIRO Bank AG Niederlassung Österreich | Aktiengesellschaft | Opernring 1 / Top 736 | 1010 Wien | Handelsgericht Wien | FN 334642 x | DVR 4000544 | 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: Martin Korbmacher | Vorstand: Frank Niehage (Vorsitzender), Muhamad Said Chahrour (stellv. Vorsitzender), +Dr. Benon Janos, Dr. Matthias Heinrich, Steffen Jentsch, Stephan Simmang - +2000003239365070 0351302400000101 \ No newline at end of file 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 e678b51bd6..1b6d7448ef 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 @@ -652,71 +652,75 @@ else if (t.getPortfolioTransaction().getType().isLiquidation() && t.getPortfolio private void addSellTransaction() { - DocumentType type = new DocumentType("Spitzenregulierung .*[\\.,\\d+] [\\w]{3}"); + DocumentType type = new DocumentType("Spitzenregulierung in [A-Z]{2}[A-Z0-9]{9}[0-9]", // + "Kontoauszug"); this.addDocumentTyp(type); Transaction pdfTransaction = new Transaction<>(); - pdfTransaction.subject(() -> { - BuySellEntry entry = new BuySellEntry(); - entry.setType(PortfolioTransaction.Type.SELL); - return entry; - }); - Block firstRelevantLine = new Block("^Kundenservice:$"); + Block firstRelevantLine = new Block("^Kundenservice(:)?$"); type.addBlock(firstRelevantLine); firstRelevantLine.set(pdfTransaction); - pdfTransaction - // @formatter:off - // WKN ISIN Wertpapierbezeichnung Anzahl - // A12GS7 CA05156X1087 AURORA CANNABIS 0,500000 - // Spitzenregulierung 5,86 EUR - // @formatter:on - .section("wkn", "isin", "name", "currency") - .find("WKN .*ISIN .*Wertpapierbezeichnung .*Anzahl.*") - .match("^(?[A-Z0-9]{6}) ([\\s]+)?(?[A-Z]{2}[A-Z0-9]{9}[0-9]) ([\\s]+)?(?.*) ([\\s]+)?[\\.,\\d]+.*$") - .match("^Spitzenregulierung .* [\\.,\\d]+ (?[\\w]{3}).*$") - .assign((t, v) -> t.setSecurity(getOrCreateSecurity(v))) + pdfTransaction // - // @formatter:off - // A12GS7 CA05156X1087 AURORA CANNABIS 0,500000 - // @formatter:on - .section("shares") - .match("^[A-Z0-9]{6} ([\\s]+)?[A-Z]{2}[A-Z0-9]{9}[0-9] ([\\s]+)?.* ([\\s]+)?(?[\\.,\\d]+).*$") - .assign((t, v) -> t.setShares(asShares(v.get("shares")))) + .subject(() -> { + BuySellEntry portfolioTransaction = new BuySellEntry(); + portfolioTransaction.setType(PortfolioTransaction.Type.SELL); + return portfolioTransaction; + }) - // @formatter:off - // Frankfurt am Main, 22.06.2020 - // @formatter:on - .section("date") - .match("^.*, ([\\s]+)?(?[\\d]{2}\\.[\\d]{2}\\.[\\d]{4}).*$") - .assign((t, v) -> t.setDate(asDate(v.get("date")))) + // @formatter:off + // WKN ISIN Wertpapierbezeichnung Anzahl + // A12GS7 CA05156X1087 AURORA CANNABIS 0,500000 + // Spitzenregulierung 5,86 EUR + // @formatter:on + .section("wkn", "isin", "name", "currency") // + .find("WKN .*ISIN .*Wertpapierbezeichnung .*Anzahl.*") // + .match("^(?[A-Z0-9]{6})[\\s]{1,}(?[A-Z]{2}[A-Z0-9]{9}[0-9]) (?.*)[\\s]{1,}[\\.,\\d]+.*$") // + .match("^Spitzenregulierung .* [\\.,\\d]+ (?[\\w]{3}).*$") // + .assign((t, v) -> t.setSecurity(getOrCreateSecurity(v))) - // @formatter:off - // Verrechnung über Ihr Konto: 1009999999 Gutschrift 5,86 EUR - // @formatter:on - .section("currency", "amount") - .match("^.* Gutschrift([\\s]+)? (?[\\.,\\d]+) (?[\\w]{3}).*$") - .assign((t, v) -> { - t.setCurrencyCode(asCurrencyCode(v.get("currency"))); - t.setAmount(asAmount(v.get("amount"))); - }) + // @formatter:off + // A12GS7 CA05156X1087 AURORA CANNABIS 0,500000 + // @formatter:on + .section("shares") // + .match("^[A-Z0-9]{6}[\\s]{1,}[A-Z]{2}[A-Z0-9]{9}[0-9] .*[\\s]{1,}(?[\\.,\\d]+).*$") // + .assign((t, v) -> t.setShares(asShares(v.get("shares")))) - // @formatter:off - // Spitzenregulierung in CA05156X1087 - // @formatter:on - .section("note") - .match("^(?Spitzenregulierung in .*)$") - .assign((t, v) -> t.setNote(trim(v.get("note")))) + // @formatter:off + // Frankfurt am Main, 22.06.2020 + // @formatter:on + .section("date") // + .match("^.*,[\\s]{1,}(?[\\d]{2}\\.[\\d]{2}\\.[\\d]{4}).*$") // + .assign((t, v) -> t.setDate(asDate(v.get("date")))) - .wrap((t, ctx) -> { - BuySellEntryItem item = new BuySellEntryItem(t); + // @formatter:off + // Verrechnung über Ihr Konto: 1009999999 Gutschrift 5,86 EUR + // @formatter:on + .section("currency", "amount") // + .match("^.* Gutschrift[\\s]{1,}(?[\\.,\\d]+) (?[\\w]{3}).*$") // + .assign((t, v) -> { + t.setCurrencyCode(asCurrencyCode(v.get("currency"))); + t.setAmount(asAmount(v.get("amount"))); + }) - if (ctx.getString(FAILURE) != null) - item.setFailureMessage(ctx.getString(FAILURE)); + // @formatter:off + // Spitzenregulierung in CA05156X1087 + // @formatter:on + .section("note") // + .match("^(?Spitzenregulierung in .*)$") // + .assign((t, v) -> t.setNote(trim(v.get("note")))) - return item; - }); + // @formatter:off + // Transaktions-Nr. 3291805526 + // Transaktionsnummer: 921414163 + // @formatter:on + .section("note").optional()// + .match("^.*(?Transaktions\\-Nr\\.([:\\s]+)? [\\d]+).*$") // + .assign((t, v) -> t.setNote(concatenate(t.getNote(), replaceMultipleBlanks(v.get("note")), " | "))) + + .wrap(BuySellEntryItem::new); addTaxesSectionsTransaction(pdfTransaction, type); addFeesSectionsTransaction(pdfTransaction, type); @@ -2011,7 +2015,7 @@ private void addAdvanceTaxTransaction() Transaction pdfTransaction = new Transaction<>(); - Block firstRelevantLine = new Block("^Kundenservice:$"); + Block firstRelevantLine = new Block("^Kundenservice(:)?$"); type.addBlock(firstRelevantLine); firstRelevantLine.set(pdfTransaction);