Skip to content

Commit

Permalink
Add new Credit Card statements to DKB PDF Importer (#4465)
Browse files Browse the repository at this point in the history
  • Loading branch information
ZfT2 authored Jan 13, 2025
1 parent 99e92d6 commit 53ba36e
Show file tree
Hide file tree
Showing 5 changed files with 306 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5232,4 +5232,102 @@ public void testKreditKontoauszug07()
assertThat(results, hasItem(removal(hasDate("2024-12-27"), hasAmount("EUR", 500.00), //
hasSource("KreditKontoauszug07.txt"), hasNote("PAYPAL *abc, 35314369001"))));
}

@Test
public void testKreditKontoauszug08()
{
DkbPDFExtractor extractor = new DkbPDFExtractor(new Client());

List<Exception> errors = new ArrayList<>();

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

assertThat(errors, empty());
assertThat(countSecurities(results), is(0L));
assertThat(countBuySell(results), is(0L));
assertThat(countAccountTransactions(results), is(2L));
assertThat(results.size(), is(2));
new AssertImportActions().check(results, CurrencyUnit.EUR);

// assert transaction
assertThat(results, hasItem(interest(hasDate("2007-07-21"), hasAmount("EUR", 12.54), //
hasSource("KreditKontoauszug08.txt"), hasNote("Habenzins auf 23 Tage"))));

// assert transaction
assertThat(results, hasItem(interest(hasDate("2007-07-21"), hasAmount("EUR", 2.92), //
hasSource("KreditKontoauszug08.txt"), hasNote("Habenzins auf 5 Tage"))));
}

@Test
public void testKreditKontoauszug09()
{
DkbPDFExtractor extractor = new DkbPDFExtractor(new Client());

List<Exception> errors = new ArrayList<>();

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

assertThat(errors, empty());
assertThat(countSecurities(results), is(0L));
assertThat(countBuySell(results), is(0L));
assertThat(countAccountTransactions(results), is(4L));
assertThat(results.size(), is(4));
new AssertImportActions().check(results, CurrencyUnit.EUR);

// assert transaction
assertThat(results, hasItem(deposit(hasDate("2007-09-21"), hasAmount("EUR", 500.00), //
hasSource("KreditKontoauszug09.txt"), hasNote("Einzahlung"))));

// assert transaction
assertThat(results, hasItem(deposit(hasDate("2007-10-11"), hasAmount("EUR", 1017.85), //
hasSource("KreditKontoauszug09.txt"), hasNote("Einzahlung"))));

// assert transaction
assertThat(results, hasItem(interest(hasDate("2007-10-23"), hasAmount("EUR", 19.88), //
hasSource("KreditKontoauszug09.txt"), hasNote("Habenzins auf 31 Tage"))));

// assert transaction
assertThat(results, hasItem(interest(hasDate("2007-09-22"), hasAmount("EUR", 0.05), //
hasSource("KreditKontoauszug09.txt"), hasNote("Storno Habenzinsen"))));
}

@Test
public void testKreditKontoauszug10()
{
DkbPDFExtractor extractor = new DkbPDFExtractor(new Client());

List<Exception> errors = new ArrayList<>();

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

assertThat(errors, empty());
assertThat(countSecurities(results), is(0L));
assertThat(countBuySell(results), is(0L));
assertThat(countAccountTransactions(results), is(5L));
assertThat(results.size(), is(5));
new AssertImportActions().check(results, CurrencyUnit.EUR);

// assert transaction
assertThat(results, hasItem(removal(hasDate("2009-01-26"), hasAmount("EUR", 18500.00), //
hasSource("KreditKontoauszug10.txt"), hasNote("Auszahlung"))));

// assert transaction
assertThat(results, hasItem(removal(hasDate("2009-02-03"), hasAmount("EUR", 550.00), //
hasSource("KreditKontoauszug10.txt"), hasNote("Auszahlung"))));

// assert transaction
assertThat(results, hasItem(removal(hasDate("2009-02-04"), hasAmount("EUR", 300.00), //
hasSource("KreditKontoauszug10.txt"), hasNote("Auszahlung"))));

// assert transaction
assertThat(results, hasItem(deposit(hasDate("2009-02-20"), hasAmount("EUR", 17700.00), //
hasSource("KreditKontoauszug10.txt"), hasNote("Einzahlung"))));

// assert transaction
assertThat(results, hasItem(interest(hasDate("2009-02-21"), hasAmount("EUR", 11.19), //
hasSource("KreditKontoauszug10.txt"), hasNote("Habenzins auf 29 Tage"))));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
```
PDFBox Version: 1.8.17
Portfolio Performance Version: 0.73.0
System: win32 | x86_64 | 21.0.5+11-LTS | Azul Systems, Inc.
-----------------------------------------
Allgemeine Fragen zu Ihrer
VISA Card beantwortet Ihnen:
Tel.: 01803 / 120 300*, Fax: 0331 / 290 33 44
DEUTSCHE KREDITBANK AG, 10105 BERLIN E-Mail: [email protected]
Bei Kartenverlust wählen Sie bitte:
Herrn Tel.:01803 / 123 555*
Max Muster *(9 Cent/Min. aus dt. Festnetz)
Musterstr. 2
12345 Musterhausen



Abrechnung: Juli 2007
Ihre Abrechnung vom 22.06.2007 bis 20.07.2007 Abrechnungsdatum: 20. Juli 2007
VISA Card-Nummer: 4907 6270 3646 2458
Seite 1 von 1 Karteninhaber: Max Muster
Beleg- Eingang Angabe des Unternehmens / Währung Betrag Kurs Betrag in
datum Verwendungszweck EUR
22.06.07 Saldo letzte Abrechnung 5.527,00+
20.07.07 21.07.07 Habenzins auf 23 Tage 12,54+
20.07.07 21.07.07 Habenzins auf 5 Tage 2,92+
Neuer Saldo 5.542,46+
Sehr geehrter Herr Max Muster,
bitte prüfen Sie diese Abrechnung/Saldenmitteilung auf ihre Richtigkeit. Etwaige Einwendungen müssen dem Institut innerhalb von
4 Wochen nach Zugang dieser Abrechnung/Saldenmitteilung schriftlich mitgeteilt werden. Nach Ablauf dieser Frist gilt der Saldo als
von Ihnen anerkannt.
Zinssatz für die Guthabenverzinsung von derzeit 3,80% p.a. ab dem ersten Euro.
Das Guthaben wird mit der weiteren Verwendung der Hinweis:
Kreditkarte verrechnet. Über Zinsen und Gebühren informieren auch der Preisaushang
und das Preisverzeichnis in den Geschäftsstellen Ihres
Das monatliche Kartenlimit Ihrer VISA Card beträgt 100 EUR. Kreditinstitutes.
Umsatzsteuernummer: DE137178746

Kontoverbindung bei Einzahlungen:
Empfänger: Deutsche Kreditbank AG
Konto: 1999333
Bankleitzahl: 12030000
Kreditinstitut: Deutsche Kreditbank AG
Verwendungszweck: Ihre 16-stellige VISA Card-Nummer


```
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
```
PDFBox Version: 1.8.17
Portfolio Performance Version: 0.73.0
System: win32 | x86_64 | 21.0.5+11-LTS | Azul Systems, Inc.
-----------------------------------------
Allgemeine Fragen zu Ihrer
VISA Card beantwortet Ihnen:
Tel.: 01803 / 120 300*, Fax: 0331 / 290 33 44
DEUTSCHE KREDITBANK AG, 10105 BERLIN E-Mail: [email protected]
Bei Kartenverlust wählen Sie bitte:
Herrn Tel.:01803 / 123 555*
Max Muster *(9 Cent/Min. aus dt. Festnetz)
Musterstr. 2
12345 Musterhausen



Abrechnung: Oktober 2007
Ihre Abrechnung vom 21.09.2007 bis 22.10.2007 Abrechnungsdatum: 22. Oktober 2007
VISA Card-Nummer: 4907 6270 3646 2458
Seite 1 von 2 Karteninhaber: Max Muster
Beleg- Eingang Angabe des Unternehmens / Währung Betrag Kurs Betrag in
datum Verwendungszweck EUR
21.09.07 Saldo letzte Abrechnung 5.182,15+
21.09.07 21.09.07 Einzahlung 500,00+
11.10.07 11.10.07 Einzahlung 1.017,85+
22.10.07 23.10.07 Habenzins auf 31 Tage 19,88+
22.10.07 22.09.07 Storno Habenzinsen 0,05+
Neuer Saldo 6.719,93+
Sehr geehrter Herr Max Muster,
bitte prüfen Sie diese Abrechnung/Saldenmitteilung auf ihre Richtigkeit. Etwaige Einwendungen müssen dem Institut innerhalb von
4 Wochen nach Zugang dieser Abrechnung/Saldenmitteilung schriftlich mitgeteilt werden. Nach Ablauf dieser Frist gilt der Saldo als
von Ihnen anerkannt.
Zinssatz für die Guthabenverzinsung von derzeit 3,80% p.a. ab dem ersten Euro.
Allgemeine Fragen zu Ihrer
VISA Card beantwortet Ihnen:
Tel.: 01803 / 120 300*, Fax: 0331 / 290 33 44
DEUTSCHE KREDITBANK AG, 10105 BERLIN E-Mail: [email protected]
Bei Kartenverlust wählen Sie bitte:
Herrn Tel.:01803 / 123 555*
Max Muster *(9 Cent/Min. aus dt. Festnetz)
Musterstr. 2
12345 Musterhausen



Abrechnung: Oktober 2007
Ihre Abrechnung vom 21.09.2007 bis 22.10.2007 Abrechnungsdatum: 22. Oktober 2007
VISA Card-Nummer: 4907 6270 3646 2458
Seite 2 von 2 Karteninhaber: Max Muster
Das Guthaben wird mit der weiteren Verwendung der Hinweis:
Kreditkarte verrechnet. Über Zinsen und Gebühren informieren auch der Preisaushang
und das Preisverzeichnis in den Geschäftsstellen Ihres
Das monatliche Kartenlimit Ihrer VISA Card beträgt 100 EUR. Kreditinstitutes.
Umsatzsteuernummer: DE137178746

Kontoverbindung bei Einzahlungen:
Empfänger: Deutsche Kreditbank AG
Konto: 1999333
Bankleitzahl: 12030000
Kreditinstitut: Deutsche Kreditbank AG
Verwendungszweck: Ihre 16-stellige VISA Card-Nummer


```
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
```
PDFBox Version: 1.8.17
Portfolio Performance Version: 0.73.0
System: win32 | x86_64 | 21.0.5+11-LTS | Azul Systems, Inc.
-----------------------------------------
Allgemeine Fragen zu Ihrer
VISA Card beantwortet Ihnen:
Tel. Inland: 01803 / 120 300*,
Tel. Ausland: + 49 30 / 330 234 44
DEUTSCHE KREDITBANK, AKTIENGESELLSCHAFT, TAUBENSTR. 7-9, 10117 BERLIN Fax: 0331 / 290 33 44, E-Mail: [email protected]
Bei Kartenverlust wählen Sie bitte:
Tel.: + 49 (0) 1803 / 123 555*
*Festnetz 9 ct/Min.; Abweichungen bei Mobilfunk möglich
Herrn
Max Muster
Musterstr. 2
12345 Musterhausen


Abrechnung: Februar 2009
Ihre Abrechnung vom 22.01.2009 bis 20.02.2009 Abrechnungsdatum: 20. Februar 2009
VISA Card-Nummer: 4907 62XX XXXX 1084
Seite 1 von 2 Karteninhaber: Max Muster
Beleg- Eingang Angabe des Unternehmens / Währung Betrag Kurs Betrag in
datum Verwendungszweck EUR
22.01.09 Saldo letzte Abrechnung 20.150,19+
26.01.09 26.01.09 Auszahlung 18.500,00 -
03.02.09 03.02.09 Auszahlung 550,00 -
04.02.09 04.02.09 Auszahlung 300,00 -
20.02.09 20.02.09 Einzahlung 17.700,00+
20.02.09 21.02.09 Habenzins auf 29 Tage 11,19+
Neuer Saldo 18.511,38+
Sehr geehrter Herr Max Muster,
bitte prüfen Sie diese Abrechnung/Saldenmitteilung auf ihre Richtigkeit. Etwaige Einwendungen müssen dem Institut innerhalb von
4 Wochen nach Zugang dieser Abrechnung/Saldenmitteilung schriftlich mitgeteilt werden. Nach Ablauf dieser Frist gilt der Saldo als
von Ihnen anerkannt.
Zinssatz für die Guthabenverzinsung von derzeit 3,80% p.a. ab dem ersten Euro.
Allgemeine Fragen zu Ihrer
VISA Card beantwortet Ihnen:
Tel. Inland: 01803 / 120 300*,
Tel. Ausland: + 49 30 / 330 234 44
DEUTSCHE KREDITBANK, AKTIENGESELLSCHAFT, TAUBENSTR. 7-9, 10117 BERLIN Fax: 0331 / 290 33 44, E-Mail: [email protected]
Bei Kartenverlust wählen Sie bitte:
Tel.: + 49 (0) 1803 / 123 555*
*Festnetz 9 ct/Min.; Abweichungen bei Mobilfunk möglich
Herrn
Max Muster
Musterstr. 2
12345 Musterhausen


Abrechnung: Februar 2009
Ihre Abrechnung vom 22.01.2009 bis 20.02.2009 Abrechnungsdatum: 20. Februar 2009
VISA Card-Nummer: 4907 62XX XXXX 1084
Seite 2 von 2 Karteninhaber: Max Muster
Das Guthaben wird mit der Hinweis: weiteren Verwendung der
Kreditkarte verrechnet Über Zinsen und Gebühren informieren auch der Preisaushang .
und das Preisverzeichnis, die Sie online unter www.dkb.de
Das monatliche Kartenlimit Ihrer VISA Card beträgt 100 abrufen können.
EUR. Umsatzsteuernummer: DE137178746

Kontoverbindung bei Einzahlungen:
Empfänger: Deutsche Kreditbank AG
Konto: 1999333
Bankleitzahl: 12030000
Kreditinstitut: Deutsche Kreditbank AG
Verwendungszweck: Ihre 16-stellige VISA Card-Nummer


```
Original file line number Diff line number Diff line change
Expand Up @@ -1255,17 +1255,32 @@ private void addCreditcardStatementTransaction()
{
final DocumentType type = new DocumentType("Ihre Abrechnung vom ", //
documentContext -> documentContext //
// @formatter:off
// DKB-VISA-Card beträgt 100 EUR. Soweit auf dem Umsatzsteuernummer: DE137178746
// Credit Card beträgt 10.000 EUR.
// @formatter:on
.section("currency") //
.match("^.*Card betr.gt [\\.,\\d]+ (?<currency>[\\w]{3})\\..*$") //
.assign((ctx, v) -> ctx.put("currency", asCurrencyCode(v.get("currency")))));
.oneOf( //
section -> section //
.attributes("currency") //
// @formatter:off
// DKB-VISA-Card beträgt 100 EUR. Soweit auf dem Umsatzsteuernummer: DE137178746
// Credit Card beträgt 10.000 EUR.
// @formatter:on
// .section("currency")
.match("^.*Card betr.gt [\\.,\\d]+ (?<currency>[\\w]{3})\\..*$") //
.assign((ctx, v) -> ctx.put("currency", asCurrencyCode(v.get("currency")))),
section -> section //
.attributes("currency") //
// @formatter:off
// Das monatliche Kartenlimit Ihrer VISA Card beträgt 100 abrufen können.
// EUR. Umsatzsteuernummer: DE137178746
// @formatter:on
// .section("currency")
.match("^.*Card betr.gt [\\.,\\d]+ .*$") //
.match("^(?<currency>[\\w]{3})\\..*$") //
.assign((ctx, v) -> ctx.put("currency", asCurrencyCode(v.get("currency")))))
);

this.addDocumentTyp(type);

Block depositBlock = new Block("^[\\d]{2}\\.[\\d]{2}\\.[\\d]{2} [\\d]{2}\\.[\\d]{2}\\.[\\d]{2}(?! Habenzins).* [\\.,\\d]+([\\s])?\\+$");
Block depositBlock = new Block(
"^[\\d]{2}\\.[\\d]{2}\\.[\\d]{2} [\\d]{2}\\.[\\d]{2}\\.[\\d]{2}(?! Habenzins| Storno Habenzinsen).* [\\.,\\d]+([\\s])?\\+$");
type.addBlock(depositBlock);
depositBlock.set(new Transaction<AccountTransaction>()

Expand Down Expand Up @@ -1334,7 +1349,8 @@ private void addCreditcardStatementTransaction()

.wrap(TransactionItem::new));

Block interestBlock = new Block("^[\\d]{2}\\.[\\d]{2}\\.[\\d]{2} [\\d]{2}\\.[\\d]{2}\\.[\\d]{2} Habenzins auf [\\d]+ Tage [\\.,\\d]+([\\s])?\\+$");
Block interestBlock = new Block(
"^[\\d]{2}\\.[\\d]{2}\\.[\\d]{2} [\\d]{2}\\.[\\d]{2}\\.[\\d]{2} (Habenzins auf [\\d]+ Tage|Storno Habenzinsen) [\\.,\\d]+([\\s])?\\+$");
type.addBlock(interestBlock);
interestBlock.set(new Transaction<AccountTransaction>()

Expand All @@ -1347,7 +1363,7 @@ private void addCreditcardStatementTransaction()
.section("date", "note", "amount") //
.documentContext("currency") //
.match("^[\\d]{2}\\.[\\d]{2}\\.[\\d]{2} (?<date>[\\d]{2}\\.[\\d]{2}\\.[\\d]{2}) " //
+ "(?<note>Habenzins auf [\\d]+ Tage) " //
+ "(?<note>(Habenzins auf [\\d]+ Tage|Storno Habenzinsen)) " //
+ "(?<amount>[\\.,\\d]+)([\\s])?\\+$") //
.assign((t, v) -> {
t.setDateTime(asDate(v.get("date")));
Expand Down

0 comments on commit 53ba36e

Please sign in to comment.