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

Modify deutsche bank pdf importer #3548 #3551

Closed
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 @@ -2299,4 +2299,30 @@ public void testGiroKontoauszug05()
"Deutsche Bank Privat- und Geschäftskunden AG", "GiroKontoauszug05.txt");
assertEquals(expectedErrorMessage, firstError.getMessage());
}

@Test
public void testGiroKontoauszug06()
{
DeutscheBankPDFExtractor extractor = new DeutscheBankPDFExtractor(new Client());

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

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

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

// check dividends transaction
assertThat(results, hasItem(removal( //
hasDate("2023-08-14"), hasShares(0), //
hasSource("GiroKontoauszug06.txt"), hasNote("Überweisung an 2023 2023 Max Mustermann"), //
hasAmount("EUR", 1000), hasGrossValue("EUR", 1000), //
hasTaxes("EUR", 0), hasFees("EUR", 0.00))));

}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
PDFBox Version: 1.8.17
Portfolio Performance Version: 0.65.4.qualifier
-----------------------------------------
Deutsche Bank AG
Filiale
Mannheim-Neckarau
Friedrichstraße 3-5
Herrn 68199 Mannheim
PkOgVXl uGpqfT Frau Nicole Schrempp
FDBFxtwbEH. 12 Telefon (0621) 84228-14
12929 FGSuxgpw
24h-Kundenservice (069) 910-10000
31. August 2023
Kontoauszug vom 01.08.2023 bis 31.08.2023
Kontoinhaber: BGAGHwc yrPqwr
Auszug Seite von IBAN Alter Saldo per 31.07.2023
8 1 2 DE03 0304 6283 7910 2573 16 EUR + 1.428,92
Buchung Valuta Vorgang Soll Haben
14.08. 14.08. SEPA Überweisung an - 1.000,00
2023 2023 Max Mustermann
IBAN DE70700100800927167806
BIC PBNKDEFFXXX
Verwendungszweck/ Kundenreferenz
urlaub
16.08. 16.08. Verwendungszweck/ Kundenreferenz + 33,23
2023 2023 ZINSEN/DIVIDENDEN/ERTRAEGE FIL/DEPOT-NR:
218/338781300IS.E.R.G.G.1.5-2.5Y U.ETF DE
INH.ANT.E UR(D.)
31.08. 31.08. Verwendungszweck/ Kundenreferenz + 74,49
2023 2023 ZINSEN/DIVIDENDEN/ERTRAEGE FIL/DEPOT-NR:
218/338781300ISHSII-CORE MSCI EUROPE U.ETF
REG.SH.O .N.
Filialnummer Kontonummer Neuer Saldo
218 3387813 03
EUR + 536,63
BIC (SWIFT)
DEUTDEDBXXX
Wichtige Hinweise
Bitte erheben Sie Einwendungen gegen einzelne Buchungen unverzüglich. Schecks, Wechsel und sonstige Lastschriften schreiben wir unter dem Vorbehalt
des Eingangs gut. Der angegebene Kontostand berücksichtigt nicht die Wertstellung der Buchungen (siehe oben unter "Valuta").
Somit können bei Verfügungen1) möglicherweise Zinsen für die Inanspruchnahme einer eingeräumten oder geduldeten Kontoüberziehung anfallen.
Die abgerechneten Leistungen sind als Bank- oder Finanzdienstleistungen von der Umsatzsteuer befreit, sofern Umsatzsteuer nicht gesondert
ausgewiesen ist. Umsatzsteuer ID Nr.: Deutsche Bank AG, 60262 Frankfurt DE114103379
1) Der Begriff umfasst unter anderem die relevanten Zahlungskontendienste "Bargeldauszahlung" und "Überweisung".
0000000003 / 06500900 / 20230902
Auszug Seite von IBAN
8 2 2 DE03 3807 0724 0248 4780 40
Guthaben sind als Einlagen nach Maßgabe des Einlagensicherungsgesetzes entschädigungsfähig. Nähere Informationen können dem "Informationsbogen
für den Einleger" entnommen werden.
0000000003 / 06500900 / 20230902
Original file line number Diff line number Diff line change
Expand Up @@ -335,8 +335,8 @@ private void addDividendeTransaction()
private void addAccountStatementTransaction()
{
final DocumentType type = new DocumentType("Kontoauszug vom", (context, lines) -> {
Pattern pCurrency = Pattern.compile("[\\d]{3} [\\d]+ [\\d]{2} (?<currency>[\\w]{3}) [\\-|\\+] [\\.,\\d]+");
Pattern pYear = Pattern.compile("Kontoauszug vom [\\d]{2}\\.[\\d]{2}\\.(?<year>[\\d]{4}) bis [\\d]{2}\\.[\\d]{2}\\.[\\d]{4}");
Pattern pCurrency = Pattern.compile("^.* [\\d]{4} [\\d]{4} [\\d]{4} [\\d]{4} [\\d]{2} .*(?<currency>[\\w]{3}) [\\-|\\+] [\\.,\\d]+$");
Pattern pYear = Pattern.compile("^Kontoauszug vom [\\d]{2}\\.[\\d]{2}\\.(?<year>[\\d]{4}) bis [\\d]{2}\\.[\\d]{2}\\.[\\d]{4}$");

for (String line : lines)
{
Expand Down Expand Up @@ -417,22 +417,25 @@ private void addAccountStatementTransaction()
t.setAmount(asAmount(v.get("amount")));
t.setNote(v.get("note"));

// @formatter:off
// If we have fees, then we skip the transaction
//
// 31.12. 31.12. Verwendungszweck/ Kundenreferenz - 13,47
// Saldo der Abschlussposten
// @formatter:on
if ("Saldo der Abschlussposten".equals(v.get("note1")))
type.getCurrentContext().putBoolean("skipTransaction", true);

// @formatter:off
// If we have security transaction, then we skip the transaction
//
// 01.06. 02.06. Verwendungszweck/ Kundenreferenz - 1.073,65
// 2023 2023 WERTPAPIER-KAUF STK/NOM: 35
// @formatter:on
if (v.get("note1").contains("WERTPAPIER"))
// @formatter:off
// If we have fees, then we skip the transaction
//
// 31.12. 31.12. Verwendungszweck/ Kundenreferenz - 13,47
// Saldo der Abschlussposten
// @formatter:on
if ("Saldo der Abschlussposten".equals(v.get("note1")))
type.getCurrentContext().putBoolean("skipTransaction", true);

// @formatter:off
// If we have security transaction, then we skip the transaction
//
// 01.06. 02.06. Verwendungszweck/ Kundenreferenz - 1.073,65
// 2023 2023 WERTPAPIER-KAUF STK/NOM: 35
//
// 16.08. 16.08. Verwendungszweck/ Kundenreferenz + 33,23
// 2023 2023 ZINSEN/DIVIDENDEN/ERTRAEGE FIL/DEPOT-NR:
// @formatter:on
if (v.get("note1").contains("WERTPAPIER") || v.get("note1").contains("DEPOT-NR:"))
type.getCurrentContext().putBoolean("skipTransaction", true);
})

Expand All @@ -442,15 +445,14 @@ private void addAccountStatementTransaction()
if (t.getCurrencyCode() != null && t.getAmount() == 0)
item.setFailureMessage(Messages.MsgErrorTransactionTypeNotSupported);

if (Boolean.valueOf(type.getCurrentContext().getBoolean("skipTransaction")))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

#getBoolean already returns a boolean. No need to convert it to a boolean via "Boolean#valueOf"

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i see it... i missing coffee in the morning. 🙈

return null;

// If we have multiple entries in the document,
// then the "skipTransaction" flag must be removed.
boolean skipTransaction = type.getCurrentContext().getBoolean("skipTransaction");
type.getCurrentContext().remove("skipTransaction");

if (!skipTransaction)
return item;

return null;
return item;
}));

// @formatter:off
Expand Down