Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add new Credit Card statements to DKB PDF Importer #4465

Merged
merged 2 commits into from
Jan 13, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading