diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/barclays/BarclaysPDFExtractorTest.java b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/barclays/BarclaysPDFExtractorTest.java index 7ad8041d38..5832a2d565 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/barclays/BarclaysPDFExtractorTest.java +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/barclays/BarclaysPDFExtractorTest.java @@ -119,4 +119,117 @@ public void testKreditKontoauszug01() assertThat(transaction.getNote(), is("Tegut Filiale 0000 LangOrtsnamen")); } + + @Test + public void testKreditKontoauszug02() + { + BarclaysPDFExtractor extractor = new BarclaysPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "KreditKontoauszug02.txt"), + errors); + + assertThat(errors, empty()); + assertThat(results.size(), is(10)); + + // check transaction + // get transactions + Iterator iter = results.stream().filter(TransactionItem.class::isInstance).iterator(); + assertThat(results.stream().filter(TransactionItem.class::isInstance).count(), is(10L)); + + Item item = iter.next(); + + // assert transaction + AccountTransaction transaction = (AccountTransaction) item.getSubject(); + assertThat(transaction.getType(), is(AccountTransaction.Type.DEPOSIT)); + assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); + assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2023-12-28T00:00"))); + assertThat(transaction.getAmount(), is(Values.Amount.factorize(60.78))); + assertThat(transaction.getSource(), is("KreditKontoauszug02.txt")); + assertThat(transaction.getNote(), is("Lidl sagt Danke Ort")); + item = iter.next(); + + // assert transaction + transaction = (AccountTransaction) item.getSubject(); + assertThat(transaction.getType(), is(AccountTransaction.Type.DEPOSIT)); + assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); + assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2024-01-08T00:00"))); + assertThat(transaction.getAmount(), is(Values.Amount.factorize(5))); + assertThat(transaction.getSource(), is("KreditKontoauszug02.txt")); + assertThat(transaction.getNote(), is("PAYPAL *VODAFONE 0000000000")); + item = iter.next(); + + // assert transaction + transaction = (AccountTransaction) item.getSubject(); + assertThat(transaction.getType(), is(AccountTransaction.Type.DEPOSIT)); + assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); + assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2024-01-06T00:00"))); + assertThat(transaction.getAmount(), is(Values.Amount.factorize(671.99))); + assertThat(transaction.getSource(), is("KreditKontoauszug02.txt")); + assertThat(transaction.getNote(), is("Per Lastschrift dankend erhalten")); + item = iter.next(); + + // assert transaction + transaction = (AccountTransaction) item.getSubject(); + assertThat(transaction.getType(), is(AccountTransaction.Type.DEPOSIT)); + assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); + assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2024-01-08T00:00"))); + assertThat(transaction.getAmount(), is(Values.Amount.factorize(1))); + assertThat(transaction.getSource(), is("KreditKontoauszug02.txt")); + assertThat(transaction.getNote(), is("Vorname Nachname")); + item = iter.next(); + + // assert transaction + transaction = (AccountTransaction) item.getSubject(); + assertThat(transaction.getType(), is(AccountTransaction.Type.DEPOSIT)); + assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); + assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2024-01-08T00:00"))); + assertThat(transaction.getAmount(), is(Values.Amount.factorize(.5))); + assertThat(transaction.getSource(), is("KreditKontoauszug02.txt")); + assertThat(transaction.getNote(), is("Gutschrift Manuelle Lastschrift")); + item = iter.next(); + + // assert transaction + transaction = (AccountTransaction) item.getSubject(); + assertThat(transaction.getType(), is(AccountTransaction.Type.REMOVAL)); + assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); + assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2024-01-04T00:00"))); + assertThat(transaction.getAmount(), is(Values.Amount.factorize(4))); + assertThat(transaction.getSource(), is("KreditKontoauszug02.txt")); + assertThat(transaction.getNote(), is("TooGoodToG xxxxxxxxxxx toogoodtogo.d")); + + item = iter.next(); + + // assert transaction + transaction = (AccountTransaction) item.getSubject(); + assertThat(transaction.getType(), is(AccountTransaction.Type.REMOVAL)); + assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); + assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2024-01-05T00:00"))); + assertThat(transaction.getAmount(), is(Values.Amount.factorize(1))); + assertThat(transaction.getSource(), is("KreditKontoauszug02.txt")); + assertThat(transaction.getNote(), is("PAYPAL *IONOS SE 00000000000")); + + item = iter.next(); + + // assert transaction + transaction = (AccountTransaction) item.getSubject(); + assertThat(transaction.getType(), is(AccountTransaction.Type.REMOVAL)); + assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); + assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2023-12-25T00:00"))); + assertThat(transaction.getAmount(), is(Values.Amount.factorize(60.78))); + assertThat(transaction.getSource(), is("KreditKontoauszug02.txt")); + assertThat(transaction.getNote(), is("Lidl sagt Danke Ort")); + + item = iter.next(); + + // assert transaction + transaction = (AccountTransaction) item.getSubject(); + assertThat(transaction.getType(), is(AccountTransaction.Type.REMOVAL)); + assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); + assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2023-12-25T00:00"))); + assertThat(transaction.getAmount(), is(Values.Amount.factorize(60.78))); + assertThat(transaction.getSource(), is("KreditKontoauszug02.txt")); + assertThat(transaction.getNote(), is("Lidl sagt Danke Ort")); + } } diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/barclays/KreditKontoauszug02.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/barclays/KreditKontoauszug02.txt new file mode 100644 index 0000000000..4bfe4ea21a --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/barclays/KreditKontoauszug02.txt @@ -0,0 +1,137 @@ +``` +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.67.1 +----------------------------------------- +Barclays Bank Ireland PLC +Hamburg Branch +Gasstraße 4 c +Barclays | 22792 Hamburg +22761 Hamburg +Herrn +Vorname Nachname +Produkt ID: 1234567890 +Straße 1 +12345 Ort +Kontoauszug vom 10. Januar 2024 +Abrechnungszeitraum: 11.12.2023 - 10.01.2024 Alter Saldo: EUR 821,96 - +Barclays Kontonummer: 1234567890 Neuer Saldo: EUR 672,99 - +IBAN: DE00 0000 0000 0000 0000 00 Kreditrahmen: EUR 4.000,00 +BIC: BARCDEHAXXX Offener Verfügungsrahmen: EUR 3.327,01 +Die Barclays Privatkunden App - einfach, schnell und sicher +Mit der Barclays Privatkunden App können Sie mit wenigen Klicks Ihren Kontostand abrufen, Umsätze checken, +Kontoauszüge überprüfen und vieles mehr. Für einzelne Ausgaben oder die ganze Monatsrechnung ab 95 Euro können +Sie per App ganz einfach Ratenkäufe einrichten - sogar noch bis zu 8 Wochen nachträglich. Einfach Höhe der +Monatsrate auswählen, Namen vergeben, fertig. Mehr erfahren Sie unter: barclays.de/ratenkauf +Konto-Saldo und Rückzahlung +Bezeichnung/Individueller Verwendungszweck Neuer Saldo Rückzahlungsoptionen Nächste Zahlung +(EUR) (EUR) +Allgemeine Umsätze 523,02- 100,0 % 523,02 +Ratenkauf: BootAlbufeira 79,97- 2 offene Raten 39,99 +Gesamt (EUR) 672,99- 598,01 +Wie mit Ihnen vereinbart, ziehen wir zum 07.02.2024 den Betrag in Höhe von EUR 598,01 von Ihrem Konto mit der IBAN +DE00 0000 0000 0000 0000 00 und BIC BICXXXXX ein. Dieser Betrag vermindert sich um vorab eingegangene +Einzahlungen auf Ihrem Barclays Konto. +Ihre Mandatsreferenz zu dieser Transaktion lautet P200000000000000, unsere Gläubiger-Identifikationsnummer ist +DE04ZZZ00000001740. +Ihre Rückzahlungsoptionen können Sie jederzeit per Barclays Privatkunden App oder im Online-Banking einsehen und +anpassen. + Seite 1 von 4 +Barclays Bank Ireland PLC Hamburg Branch | Gasstraße 4 c | 22761 Hamburg | barclays.de | BIC BARCDEHAXXX | Handelsregister HRB: 153530 +USt-IdNr.: DE 319 453 063 | Finanzdienstleistungen sind nach § 4 Nr. 8 UStG steuerfrei / Financial Services are VAT exempt | Hauptsitz: One Molesworth Street Dublin 2 DO2 RF29 +Reg. Ireland: 396330 | Ständiger Vertreter: Tobias Grieß | Vorstand der Barclays Bank Ireland PLC: Francesco Ceccato und Jasper Johannes Hanebuth. Eine Liste mit den Namen +sowie weiteren persönlichen Informationen zu den Vorständen der Gesellschaft kann am Geschäftssitz der Gesellschaft eingesehen werden. +Tipp: Zahlen Sie z. B. Ihre Monatsrechnung in Höhe von EUR 523,02 einfach später - z. B. in 12 festen Raten zu EUR +46,61 zu einem Sollzins von 11,99 % p.a. Unser Barclays Ratenkauf macht es möglich. Einfach bis zum 02.02.2024 mit +wenigen Klicks in der Barclays Privatkunden App oder dem Online-Banking aktivieren. Mehr dazu unter: +barclays.de/ratenkauf +Umsatzübersicht +Beleg- Buchungs-/ Beschreibung Karte Betrag (EUR) +datum Valutadatum +Alter Saldo vom 10. Dezember 2023 821,96- +Hauptkarte/n, Vorname Nachname +03.01.2024 04.01.2024 TooGoodToG xxxxxxxxxxx toogoodtogo.d DK Visa B 4,00- +04.01.2024 05.01.2024 PAYPAL *IONOS SE 00000000000 DE Visa 1,00- + Seite 2 von 4 +Barclays Bank Ireland PLC Hamburg Branch | Gasstraße 4 c | 22761 Hamburg | barclays.de | BIC BARCDEHAXXX | Handelsregister HRB: 153530 +USt-IdNr.: DE 319 453 063 | Finanzdienstleistungen sind nach § 4 Nr. 8 UStG steuerfrei / Financial Services are VAT exempt | Hauptsitz: One Molesworth Street Dublin 2 DO2 RF29 +Reg. Ireland: 396330 | Ständiger Vertreter: Tobias Grieß | Vorstand der Barclays Bank Ireland PLC: Francesco Ceccato und Jasper Johannes Hanebuth. Eine Liste mit den Namen +sowie weiteren persönlichen Informationen zu den Vorständen der Gesellschaft kann am Geschäftssitz der Gesellschaft eingesehen werden. +Umsatzübersicht +Beleg- Buchungs-/ Beschreibung Karte Betrag (EUR) +datum Valutadatum +23.12.2023 25.12.2023 Lidl sagt Danke Ort DE Visa B A 60,78- +23.12.2023 25.12.2023 Lidl sagt Danke Ort DE Visa B A 60,78- +23.12.2023 28.12.2023 Lidl sagt Danke Ort DE Visa B A 60,78+ +04.01.2024 05.01.2024 PAYPAL *VODAFONE 0000000000 DE Visa 5,00- +07.01.2024 08.01.2024 PAYPAL *VODAFONE 0000000000 DE Visa 5,00+ +Sonstige Umsätze +06.01.2024 06.01.2024 Per Lastschrift dankend erhalten 671,99+ +P200000000000000 +DE04ZZZ00000001740 +08.01.2024 08.01.2024 Vorname Nachname 1,00+ +Gutschrift Überweisung +Ubertrag Barclays Visa +08.01.2024 08.01.2024 Gutschrift Manuelle Lastschrift 0,50+ +P200000000000000 +DE04ZZZ00000001740 +Neuer Saldo am 10. Januar 2024 672,99- +Hauptkarte/n, Vorname Nachname +Umsätze Visa Karten-Nr. 123456XXXXXX7890 EUR 524,52 +Zinssätze +Allgemeine Umsätze +Allgemeine Umsätze sind alle Umsätze, für deren Rückzahlung Sie keinen Ratenkauf eingerichtet haben. Für diese +allgemeinen Umsätze gelten folgende Sollzinssätze: +Sollzinsen bei Einkäufen und Überweisungen (einschl. möglicher Gebühren) 21,49 % p.a. +Sollzinsen bei Barabhebungen (einschl. möglicher Gebühren) 21,49 % p.a. +Sofern Sie alle allgemeinen Umsätze bis zum 07.02.2024 vollständig zurückgezahlt haben, fallen die oben genannten +Zinsen nicht an. Bei Teilzahlung werden Zinsen taggenau ab dem Buchungs-/Valutadatum berechnet. +Ratenkäufe +Für Ihre nachfolgend aufgeführten Ratenkäufe gelten ab Einrichtung bis zur Auflösung oder Beendigung des jeweiligen +Ratenkaufs folgende Sollzinssätze: +Ratenkauf: " BootAlbufeira " - gültig seit 24.11.2023 0,00 % p.a. + Seite 3 von 4 +Barclays Bank Ireland PLC Hamburg Branch | Gasstraße 4 c | 22761 Hamburg | barclays.de | BIC BARCDEHAXXX | Handelsregister HRB: 153530 +USt-IdNr.: DE 319 453 063 | Finanzdienstleistungen sind nach § 4 Nr. 8 UStG steuerfrei / Financial Services are VAT exempt | Hauptsitz: One Molesworth Street Dublin 2 DO2 RF29 +Reg. Ireland: 396330 | Ständiger Vertreter: Tobias Grieß | Vorstand der Barclays Bank Ireland PLC: Francesco Ceccato und Jasper Johannes Hanebuth. Eine Liste mit den Namen +sowie weiteren persönlichen Informationen zu den Vorständen der Gesellschaft kann am Geschäftssitz der Gesellschaft eingesehen werden. +Der Barclays Ratenkauf +Für einzelne Umsätze ab 95 Euro bieten wir Ihnen auch den Barclays Ratenkauf an. Diesen richten Sie ganz einfach per +App oder im Online-Banking zu einem vergünstigten Sollzinssatz ein. Die Gesamtkosten werden Ihnen vor der +Aktivierung transparent ausgewiesen. Bitte beachten Sie, dass Ihr Barclays Konto für die Nutzung eines Barclays +Ratenkaufs nicht im Zahlungsverzug sein darf. Mehr Infos unter: barclays.de/ratenkauf +Wichtige Hinweise +Reklamation +Bei Unstimmigkeiten Ihrer Umsätze nehmen Sie bitte direkt Kontakt zu Ihrem Händler auf. Wenn Sie keine Einigung +erzielen konnten, sind wir für Sie da und versuchen in Ihrem Namen eine Klärung herbeizuführen. +Informationen zum Reklamationsprozess finden Sie unter: barclays.de/hilfe-und-kontakt/reklamation +Reklamationen müssen innerhalb von 6 Wochen nach Zugang des Kontoauszuges an Barclays abgesendet werden. Wird +diese Frist nicht eingehalten, gelten die aufgeführten Umsätze als akzeptiert. +Betrug +Wenn Sie ungewöhnliche Bewegungen auf Ihrem Konto bemerken, die Sie nicht selbst getätigt haben, informieren Sie +uns umgehend über unsere 24h-Notfall-Hotline: +49 40 890 99-900 +Einlagensicherung +Guthaben auf Ihrem Konto sind als Einlagen nach Maßgabe des Einlagensicherungsgesetzes entschädigungsfähig. +Nähere Informationen finden Sie im "Informationsbogen für Einleger" unter: barclays.de/einlagensicherung +Karten-PIN Management +Mit der Barclays Privatkunden App und im Online-Banking können Sie Ihre Karten-PIN jederzeit sicher abrufen, ändern +und bei Bedarf entsperren. Damit die neue Karten-PIN nach einer Änderung aktiviert wird, muss zunächst immer ein +Umsatz an einem Online-Terminal getätigt werden, z. B. durch eine Bargeldabhebung an einem Geldautomaten. Bitte +beachten Sie dabei den Mindestbetrag von 50 € und das Tageslimit von 500 €. Bargeldabhebungen in Geschäften sind +mit der Barclays Kreditkarte nicht möglich. Mehr Details unter: barclays.de/karten-pin +Aktuelles +Mehr Transparenz zu Wechselkursen im Europäischen Wirtschaftsraum (EWR) +Seit dem 19. April 2021 gelten neue gesetzliche Informationspflichten und auch wir bieten Ihnen mehr Transparenz bei +Zahlungen mit der Kreditkarte innerhalb des EWR, die in einem Nicht-Euro Land durchgeführt werden und eine +Währungsumrechnung beinhalten. Im Rahmen unseres Konto-Infoservices können Sie sich über den für solche +Transaktionen anwendbaren Wechselkurs informieren lassen. Haben Sie den SMS-Kanal aktiviert, erhalten Sie +automatisch bei der ersten Transaktion eines jeden Monats in einer ausländischen Währung des EWR jeweils eine SMS, +die Sie über den dann gültigen Wechselkurs informiert. Im Online-Banking unter Konto-Infoservice können Sie Ihre +Einstellungen jederzeit ändern. Tagesaktuelle Wechselkurse finden Sie zusätzlich unter: barclays.de/wechselkurse +Vielen Dank, dass Sie Ihre Barclays Kreditkarten eingesetzt haben! + Seite 4 von 4 +Barclays Bank Ireland PLC Hamburg Branch | Gasstraße 4 c | 22761 Hamburg | barclays.de | BIC BARCDEHAXXX | Handelsregister HRB: 153530 +USt-IdNr.: DE 319 453 063 | Finanzdienstleistungen sind nach § 4 Nr. 8 UStG steuerfrei / Financial Services are VAT exempt | Hauptsitz: One Molesworth Street Dublin 2 DO2 RF29 +Reg. Ireland: 396330 | Ständiger Vertreter: Tobias Grieß | Vorstand der Barclays Bank Ireland PLC: Francesco Ceccato und Jasper Johannes Hanebuth. Eine Liste mit den Namen +sowie weiteren persönlichen Informationen zu den Vorständen der Gesellschaft kann am Geschäftssitz der Gesellschaft eingesehen werden. + +``` \ No newline at end of file diff --git a/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/BarclaysPDFExtractor.java b/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/BarclaysPDFExtractor.java index 789b3269d6..5a34d22347 100644 --- a/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/BarclaysPDFExtractor.java +++ b/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/BarclaysPDFExtractor.java @@ -39,6 +39,30 @@ private void addCreditcardStatementTransaction() .assign((ctx, v) -> ctx.put("currency", asCurrencyCode(v.get("currency"))))); this.addDocumentTyp(type); + + Block depositBlock = new Block("^[\\d]{2}\\.[\\d]{2}\\.[\\d]{4} [\\d]{2}\\.[\\d]{2}\\.[\\d]{4}.* [\\.,\\d]+\\+$"); + type.addBlock(depositBlock); + depositBlock.set(new Transaction() + + .subject(() -> { + AccountTransaction accountTransaction = new AccountTransaction(); + accountTransaction.setType(AccountTransaction.Type.DEPOSIT); + return accountTransaction; + }) + + .section("date", "note", "amount") // + .documentContext("currency") // + .match("^[\\d]{2}\\.[\\d]{2}\\.[\\d]{4} (?[\\d]{2}\\.[\\d]{2}\\.[\\d]{4}) " // + + "(?.{31,36})(.+)? +" // + + "(?[\\.,\\d]+)\\+$") // + .assign((t, v) -> { + t.setDateTime(asDate(v.get("date"))); + t.setAmount(asAmount(v.get("amount"))); + t.setCurrencyCode(v.get("currency")); + t.setNote(trim(v.get("note"))); + }) + + .wrap(TransactionItem::new)); Block removalBlock = new Block("^[\\d]{2}\\.[\\d]{2}\\.[\\d]{4} [\\d]{2}\\.[\\d]{2}\\.[\\d]{4}.* [\\.,\\d]+\\-$"); @@ -53,8 +77,8 @@ private void addCreditcardStatementTransaction() .section("date", "note", "amount") // .documentContext("currency") // - .match("^[\\d]{2}\\.[\\d]{2}\\.[\\d]{4} (?[\\d]{2}\\.[\\d]{2}\\.[\\d]{4})" // - + "(?.*) +([A-Z]{2} Visa)( B)?( A)? +" // + .match("^[\\d]{2}\\.[\\d]{2}\\.[\\d]{4} (?[\\d]{2}\\.[\\d]{2}\\.[\\d]{4}) " // + + "(?.{36}) [A-Z]{2} Visa( B)?( A)? +" // + "(?[\\.,\\d]+)\\-$") // .assign((t, v) -> { t.setDateTime(asDate(v.get("date")));