Skip to content

Commit

Permalink
Adding deposit transactions to Barclays PDF extractor
Browse files Browse the repository at this point in the history
Issue: #3730
  • Loading branch information
christen90 authored and buchen committed Jan 28, 2024
1 parent e195f0c commit bf4da98
Show file tree
Hide file tree
Showing 3 changed files with 276 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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<Exception> errors = new ArrayList<>();

List<Item> results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "KreditKontoauszug02.txt"),
errors);

assertThat(errors, empty());
assertThat(results.size(), is(10));

// check transaction
// get transactions
Iterator<Extractor.Item> 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"));
}
}
Original file line number Diff line number Diff line change
@@ -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.

```
Original file line number Diff line number Diff line change
Expand Up @@ -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<AccountTransaction>()

.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} (?<date>[\\d]{2}\\.[\\d]{2}\\.[\\d]{4}) " //
+ "(?<note>.{31,36})(.+)? +" //
+ "(?<amount>[\\.,\\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]+\\-$");
Expand All @@ -53,8 +77,8 @@ private void addCreditcardStatementTransaction()

.section("date", "note", "amount") //
.documentContext("currency") //
.match("^[\\d]{2}\\.[\\d]{2}\\.[\\d]{4} (?<date>[\\d]{2}\\.[\\d]{2}\\.[\\d]{4})" //
+ "(?<note>.*) +([A-Z]{2} Visa)( B)?( A)? +" //
.match("^[\\d]{2}\\.[\\d]{2}\\.[\\d]{4} (?<date>[\\d]{2}\\.[\\d]{2}\\.[\\d]{4}) " //
+ "(?<note>.{36}) [A-Z]{2} Visa( B)?( A)? +" //
+ "(?<amount>[\\.,\\d]+)\\-$") //
.assign((t, v) -> {
t.setDateTime(asDate(v.get("date")));
Expand Down

0 comments on commit bf4da98

Please sign in to comment.