-
Notifications
You must be signed in to change notification settings - Fork 639
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add new BAWAG AG PDF-Importer (#4541)
* adding bank identifier to enable barclays credit card bill starting February * separate bawag ag
- Loading branch information
1 parent
f9de14f
commit 0d1bcfc
Showing
4 changed files
with
308 additions
and
0 deletions.
There are no files selected for viewing
57 changes: 57 additions & 0 deletions
57
...io.tests/src/name/abuchen/portfolio/datatransfer/pdf/bawagag/BawagAgPDFExtractorTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
package name.abuchen.portfolio.datatransfer.pdf.bawagag; | ||
|
||
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.deposit; | ||
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasAmount; | ||
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasDate; | ||
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasNote; | ||
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasSource; | ||
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.removal; | ||
import static name.abuchen.portfolio.datatransfer.ExtractorTestUtilities.countAccountTransactions; | ||
import static name.abuchen.portfolio.datatransfer.ExtractorTestUtilities.countBuySell; | ||
import static name.abuchen.portfolio.datatransfer.ExtractorTestUtilities.countSecurities; | ||
import static org.hamcrest.CoreMatchers.hasItem; | ||
import static org.hamcrest.CoreMatchers.is; | ||
import static org.hamcrest.MatcherAssert.assertThat; | ||
import static org.hamcrest.collection.IsEmptyCollection.empty; | ||
|
||
import java.util.ArrayList; | ||
import java.util.List; | ||
|
||
import org.junit.Test; | ||
|
||
import name.abuchen.portfolio.datatransfer.Extractor.Item; | ||
import name.abuchen.portfolio.datatransfer.actions.AssertImportActions; | ||
import name.abuchen.portfolio.datatransfer.pdf.BawagAGPDFExtractor; | ||
import name.abuchen.portfolio.datatransfer.pdf.PDFInputFile; | ||
import name.abuchen.portfolio.model.Client; | ||
import name.abuchen.portfolio.money.CurrencyUnit; | ||
|
||
@SuppressWarnings("nls") | ||
public class BawagAgPDFExtractorTest | ||
{ | ||
@Test | ||
public void testKreditKontoauszug01() | ||
{ | ||
BawagAGPDFExtractor extractor = new BawagAGPDFExtractor(new Client()); | ||
|
||
List<Exception> errors = new ArrayList<>(); | ||
|
||
List<Item> results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "KreditKontoauszug01.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(deposit(hasDate("2025-02-07"), hasAmount("EUR", 38.32), // | ||
hasSource("KreditKontoauszug01.txt"), hasNote("Per Lastschrift dankend erhalten")))); | ||
|
||
// assert transaction | ||
assertThat(results, hasItem(removal(hasDate("2025-01-22"), hasAmount("EUR", 52.99), // | ||
hasSource("KreditKontoauszug01.txt"), hasNote("PAYPAL *DOCMORRIS 59BA 00000000000")))); | ||
} | ||
} |
114 changes: 114 additions & 0 deletions
114
...rtfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/bawagag/KreditKontoauszug01.txt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,114 @@ | ||
``` | ||
PDFBox Version: 3.0.3 != 1.8.17 | ||
Portfolio Performance Version: 0.74.1 | ||
System: win32 | x86_64 | 21.0.5+11-LTS | Azul Systems, Inc. | ||
----------------------------------------- | ||
BAWAG AG Niederlassung Deutschland | ||
Gasstraße 4 c | ||
BAWAG AG Niederlassung Deutschland | 22792 Hamburg 22761 Hamburg | ||
Vorname Nachname Produkt ID: 1234567890 | ||
Straße 1 | ||
12345 Ort | ||
Kontoauszug zu Ihrer Barclays Kreditkarte vom 10. Februar 2025 | ||
Abrechnungszeitraum: 11.01.2025 - 10.02.2025 Alter Saldo: EUR 71,64 - | ||
Kontonummer: 1234567890 Neuer Saldo: EUR 86,31 - | ||
IBAN: DE75 2013 0600 0000 0000 00 Kreditrahmen: EUR 4.000,00 | ||
BIC: BARCDEHAXXX Offener Verfügungsrahmen: EUR 3.913,69 | ||
Bitte beachten Sie: Aufgrund der letzten beiden EZB-Leitzinssenkungen senken wir wie in Ziffer 8 unserer AGB | ||
vereinbart den Zinssatz um 0,50 Prozentpunkte ab Ihrer nächsten Abrechnungsperiode. Ihren neuen Zinssatz werden Sie | ||
entsprechend in Ihrem März Kontoauszug unter der Sektion "Zinssätze" einsehen können. | ||
Konto-Saldo und Rückzahlung | ||
Bezeichnung/Individueller Verwendungszweck Neuer Saldo Rückzahlungsoptionen Nächste Zahlung | ||
(EUR) (EUR) | ||
Allgemeine Umsätze 52,99- 100,0 % 52,99 | ||
Ratenkauf: Amazon Marketp... 17.11.24 33,32- 1 offene Raten 33,32 | ||
Gesamt (EUR) 86,31- 86,31 | ||
Wie mit Ihnen vereinbart, ziehen wir zum 10.03.2025 den Betrag in Höhe von EUR 86,31 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 Konto bei uns. | ||
Ihre Mandatsreferenz zu dieser Transaktion lautet P200000000000000, unsere Gläubiger-Identifikationsnummer ist | ||
DE66ZZZ00002739613. | ||
Ihre Rückzahlungsoptionen können Sie jederzeit per Barclays Privatkunden App oder im Online-Banking einsehen und | ||
anpassen. | ||
Seite 1 von 3 | ||
BAWAG AG Niederlassung Deutschland | Gasstraße 4 c | 22761 Hamburg | Amtsgericht Hamburg HRB 188720 | Niederlassungsleiter: Tobias Grieß | UID: DE 338324415 | | ||
Hauptniederlassung: BAWAG P.S.K. Bank für Arbeit und Wirtschaft und Österreichische Postspartasse Aktiengesellschaft, Wiedner Gürtel 11, 1100 Wien | Firmenbuchgericht: | ||
Handelsgericht Wien | FB-Nummer: 205340x | Vorstand: Anas Abuzaakouk (CEO), Guido Jestädt, David O'Leary, Sat Shah, Enver Sirucic, Andrew Wise | Aufsichtsratvorsitzender: | ||
Egbert Fleischer. | ||
Umsatzübersicht | ||
Beleg- Buchungs-/ Beschreibung Karte Betrag (EUR) | ||
datum Valutadatum | ||
Alter Saldo vom 10. Januar 2025 71,64- | ||
Hauptkarte/n, Vorname Nachname | ||
21.01.2025 22.01.2025 PAYPAL *DOCMORRIS 59BA 00000000000 NL Visa 52,99- | ||
Sonstige Umsätze | ||
07.02.2025 07.02.2025 Per Lastschrift dankend erhalten 38,32+ | ||
P200000000000000 | ||
DE66ZZZ00002739613 | ||
Neuer Saldo am 10. Februar 2025 86,31- | ||
Hauptkarte/n, Vorname Nachname | ||
Umsätze Visa Karten-Nr. 123456XXXXXX7890 EUR 52,99 | ||
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) 20,64 % p.a. | ||
Sollzinsen bei Barabhebungen (einschl. möglicher Gebühren) 20,64 % p.a. | ||
Sofern Sie alle allgemeinen Umsätze bis zum 10.03.2025 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: " SchuheLampen " - aufgelöst seit 10.12.2024 0,00 % p.a. | ||
Ratenkauf: " HORNBACH 28.09.24 " - aufgelöst seit 10.12.2024 0,00 % p.a. | ||
Ratenkauf: " Amazon Marketp... 17.11.24 " - aufgelöst seit 10.02.2025 0,00 % p.a. | ||
Seite 2 von 3 | ||
BAWAG AG Niederlassung Deutschland | Gasstraße 4 c | 22761 Hamburg | Amtsgericht Hamburg HRB 188720 | Niederlassungsleiter: Tobias Grieß | UID: DE 338324415 | | ||
Hauptniederlassung: BAWAG P.S.K. Bank für Arbeit und Wirtschaft und Österreichische Postspartasse Aktiengesellschaft, Wiedner Gürtel 11, 1100 Wien | Firmenbuchgericht: | ||
Handelsgericht Wien | FB-Nummer: 205340x | Vorstand: Anas Abuzaakouk (CEO), Guido Jestädt, David O'Leary, Sat Shah, Enver Sirucic, Andrew Wise | Aufsichtsratvorsitzender: | ||
Egbert Fleischer. | ||
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 Konto bei uns 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 | ||
Zeit für ein wichtiges Update: Bitte prüfen Sie die Angaben zu Ihrer Lebenssituation und passen Sie diese bei Bedarf in | ||
der Barclays Privatkunden App oder im Online-Banking an. | ||
barclays.de/aktuelle-angaben | ||
1. In der App/ im Online-Banking auf "Einstellungen" klicken | ||
2. "Persönliche Daten" auswählen | ||
3. "Aktuelle Angaben" wählen | ||
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 | ||
Vielen Dank, dass Sie Ihre Barclays Kreditkarten eingesetzt haben! | ||
Seite 3 von 3 | ||
BAWAG AG Niederlassung Deutschland | Gasstraße 4 c | 22761 Hamburg | Amtsgericht Hamburg HRB 188720 | Niederlassungsleiter: Tobias Grieß | UID: DE 338324415 | | ||
Hauptniederlassung: BAWAG P.S.K. Bank für Arbeit und Wirtschaft und Österreichische Postspartasse Aktiengesellschaft, Wiedner Gürtel 11, 1100 Wien | Firmenbuchgericht: | ||
Handelsgericht Wien | FB-Nummer: 205340x | Vorstand: Anas Abuzaakouk (CEO), Guido Jestädt, David O'Leary, Sat Shah, Enver Sirucic, Andrew Wise | Aufsichtsratvorsitzender: | ||
Egbert Fleischer. | ||
|
||
|
||
``` |
136 changes: 136 additions & 0 deletions
136
name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/BawagAGPDFExtractor.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,136 @@ | ||
package name.abuchen.portfolio.datatransfer.pdf; | ||
|
||
import static name.abuchen.portfolio.util.TextUtil.replaceMultipleBlanks; | ||
import static name.abuchen.portfolio.util.TextUtil.trim; | ||
|
||
import name.abuchen.portfolio.datatransfer.pdf.PDFParser.Block; | ||
import name.abuchen.portfolio.datatransfer.pdf.PDFParser.DocumentType; | ||
import name.abuchen.portfolio.datatransfer.pdf.PDFParser.Transaction; | ||
import name.abuchen.portfolio.model.AccountTransaction; | ||
import name.abuchen.portfolio.model.Client; | ||
import name.abuchen.portfolio.model.Transaction.Unit; | ||
import name.abuchen.portfolio.money.Money; | ||
|
||
@SuppressWarnings("nls") | ||
public class BawagAGPDFExtractor extends AbstractPDFExtractor | ||
{ | ||
public BawagAGPDFExtractor(Client client) | ||
{ | ||
super(client); | ||
|
||
addBankIdentifier("BAWAG AG Niederlassung Deutschland"); | ||
|
||
addCreditcardStatementTransaction(); | ||
} | ||
|
||
@Override | ||
public String getLabel() | ||
{ | ||
return "BAWAG AG"; | ||
} | ||
|
||
private void addCreditcardStatementTransaction() | ||
{ | ||
final DocumentType type = new DocumentType("Kontoauszug", // | ||
documentContext -> documentContext // | ||
// @formatter:off | ||
// Beleg- Buchungs-/ Beschreibung Karte Betrag (EUR) | ||
// Gebucht am Wertstellung am Verwendungszweck Betrag (EUR) | ||
// @formatter:on | ||
.section("currency") // | ||
.match("^.* \\((?<currency>[A-Z]{3})\\)$") // | ||
.assign((ctx, v) -> ctx.put("currency", asCurrencyCode(v.get("currency"))))); | ||
|
||
this.addDocumentTyp(type); | ||
|
||
// @formatter:off | ||
// 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+ | ||
// @formatter:on | ||
Block depositRemovalBlock = new Block("^[\\d]{2}\\.[\\d]{2}\\.[\\d]{4} [\\d]{2}\\.[\\d]{2}\\.[\\d]{4} " | ||
+ "(?!(Abgeltungsteuer|Solidarit.tszuschlag)).* [\\.,\\d]+[\\-|\\+]$"); | ||
type.addBlock(depositRemovalBlock); | ||
depositRemovalBlock.set(new Transaction<AccountTransaction>() | ||
|
||
.subject(() -> { | ||
AccountTransaction accountTransaction = new AccountTransaction(); | ||
accountTransaction.setType(AccountTransaction.Type.DEPOSIT); | ||
return accountTransaction; | ||
}) | ||
|
||
.section("date", "note", "amount", "type") // | ||
.documentContext("currency") // | ||
.match("^[\\d]{2}\\.[\\d]{2}\\.[\\d]{4} " // | ||
+ "(?<date>[\\d]{2}\\.[\\d]{2}\\.[\\d]{4}) " // | ||
+ "(?<note>.{1,36})" // | ||
+ ".* " // | ||
+ "(?<amount>[\\.,\\d]+)" // | ||
+ "(?<type>[\\-|\\+])$") // | ||
.assign((t, v) -> { | ||
// Is type --> "-" change from DEPOSIT to REMOVAL | ||
if ("-".equals(v.get("type"))) | ||
t.setType(AccountTransaction.Type.REMOVAL); | ||
|
||
t.setDateTime(asDate(v.get("date"))); | ||
t.setAmount(asAmount(v.get("amount"))); | ||
t.setCurrencyCode(v.get("currency")); | ||
t.setNote(trim(replaceMultipleBlanks(v.get("note")))); | ||
}) | ||
|
||
.wrap(TransactionItem::new)); | ||
|
||
Block interestBlock = new Block("^[\\d]{2}\\.[\\d]{2}\\.[\\d]{4} [\\d]{2}\\.[\\d]{2}\\.[\\d]{4} Habenzinsen [\\.,\\d]+$"); | ||
type.addBlock(interestBlock); | ||
interestBlock.setMaxSize(4); | ||
interestBlock.set(new Transaction<AccountTransaction>() | ||
|
||
.subject(() -> { | ||
AccountTransaction accountTransaction = new AccountTransaction(); | ||
accountTransaction.setType(AccountTransaction.Type.INTEREST); | ||
return accountTransaction; | ||
}) | ||
|
||
// @formatter:off | ||
// 31.12.2023 31.12.2023 Habenzinsen 4,80 | ||
// @formatter:on | ||
.section("date", "amount") // | ||
.documentContext("currency") // | ||
.match("^[\\d]{2}\\.[\\d]{2}\\.[\\d]{4} " // | ||
+ "(?<date>[\\d]{2}\\.[\\d]{2}\\.[\\d]{4}) " // | ||
+ "Habenzinsen " // | ||
+ "(?<amount>[\\.,\\d]+)$") // | ||
.assign((t, v) -> { | ||
t.setDateTime(asDate(v.get("date"))); | ||
t.setAmount(asAmount(v.get("amount"))); | ||
t.setCurrencyCode(v.get("currency")); | ||
}) | ||
|
||
// @formatter:off | ||
// 31.12.2023 31.12.2023 Abgeltungsteuer -1,20 | ||
// @formatter:on | ||
.section("tax").optional() // | ||
.documentContext("currency") // | ||
.match("^[\\d]{2}\\.[\\d]{2}\\.[\\d]{4} [\\d]{2}\\.[\\d]{2}\\.[\\d]{4} Abgeltungsteuer \\-(?<tax>[\\.,\\d]+)$") // | ||
.assign((t, v) -> { | ||
Money tax = Money.of(asCurrencyCode(v.get("currency")), asAmount(v.get("tax"))); | ||
|
||
t.addUnit(new Unit(Unit.Type.TAX, tax)); | ||
t.setMonetaryAmount(t.getMonetaryAmount().subtract(tax)); | ||
}) | ||
|
||
// @formatter:off | ||
// 31.12.2023 31.12.2023 Solidaritätszuschlag -0,06 | ||
// @formatter:on | ||
.section("tax").optional() // | ||
.documentContext("currency") // | ||
.match("^[\\d]{2}\\.[\\d]{2}\\.[\\d]{4} [\\d]{2}\\.[\\d]{2}\\.[\\d]{4} Solidarit.tszuschlag \\-(?<tax>[\\.,\\d]+)$") // | ||
.assign((t, v) -> { | ||
Money tax = Money.of(asCurrencyCode(v.get("currency")), asAmount(v.get("tax"))); | ||
|
||
t.addUnit(new Unit(Unit.Type.TAX, tax)); | ||
t.setMonetaryAmount(t.getMonetaryAmount().subtract(tax)); | ||
}) | ||
|
||
.wrap(TransactionItem::new)); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters