Skip to content

Commit

Permalink
Modify Oldenburgische Landesbank PDF-Import to support new transactions
Browse files Browse the repository at this point in the history
Closes #3606
Closes #3607
  • Loading branch information
Nirus2000 authored and buchen committed Oct 30, 2023
1 parent 0198365 commit 794ea0d
Show file tree
Hide file tree
Showing 4 changed files with 206 additions and 4 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
PDFBox Version: 1.8.17
Portfolio Performance Version: 0.65.4
-----------------------------------------
Oldenburg, 16.05.2023
Es betreut Sie:
Ihr OLB Team
Postfach 26 05, 26016 Oldenburg 26121 Oldenburg
Tel.: 0441 999092-810
[email protected]
Vom 16.05.2023
Seite 1 von 1
user name Depotnummer 4759079941
street 10
zip city
ERTRAGSAUSSCHÜTTUNG
Ausschüttung – iS.EO G.B.C.1.5-10.5y.U.ETF DE Inhaber-Anteile
ISIN (WKN) Stück/ Nominale Ausschüttung pro Stück Währung
DE000A0H0785 (A0H078) 71,851808 8,895903 EUR
Zahlbarkeitstag 15.05.2023
Bestandsstichtag 15.05.2023
Ex-Tag 15.05.2023
Geschäftsjahr 01.01.2023-31.12.2023
Dividendengutschrift 7,44 EUR
Ausmachender Betrag + 7,44 EUR
Verwahrart
GS Clearstream Frankfurt
Der ausmachende Betrag wird Ihnen auf Ihr Konto DE12345678901234 gutgeschrieben.
Dieses Dokument wurde maschinell erstellt und wird nicht unterschrieben
FNZ
Oldenburgische Landesbank AG | Stau 15/17 | 26122 Oldenburg
Vorsitzender des Aufsichtsrates: Axel Bartsch | Vorstand: Stefan Barth, Vorsitzender | Marc Ampaw | Aytac Aydin | Chris Eggert | Giacomo Petrobelli | Dr. Rainer Polster
Sitz der Gesellschaft: Oldenburg (Oldb) Registergericht: Oldenburg (Oldb) HR-Nummer: HRB 3003
Informationen zur Nutzung Ihrer Daten erhalten Sie auf www.olb.de/dsgvo und in jeder OLB-Filiale. Auf Wunsch schicken wir die Informationen auch gerne per Post zu.
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
PDFBox Version: 1.8.17
Portfolio Performance Version: 0.65.4
-----------------------------------------
Oldenburg, 18.10.2023
Es betreut Sie:
Ihr OLB Team
Postfach 26 05, 26016 Oldenburg 26121 Oldenburg
Tel.: 0441 833101-810
[email protected]
user name
street 80
zipcode city
Depotinhaber user name Seite 1 von 1
Depotnummer 0195923225 Ausführung 17.10.2023 18:11:56
Orderreferenz 0980298
Handelsreferenz 029816
WERTPAPIERABRECHNUNG
Kauf - AIS-AM.WORLD SRI PAB Act.Nom. UCITS ETF DR (C)o.N.
Produktgruppe: ETF
Handels- / Ausführungsplatz - Festpreisgeschäft
ISIN (WKN) Stück/ Nominale Kurswert Währung Bruttobetrag
LU1861134382 (A2JSDA) 3,320171 98,7321 EUR 931,87 EUR
Orderentgelt: 4,87 EUR
Ausmachender Betrag: 643,40 EUR
Beratungsfreies Geschäft
Verrechnungskonto Valuta
DE12345678901234 19.10.2023
Verwahrart
Girosammelverwahrung
Bitte beachten Sie folgende Hinweise:
Dieses Dokument wurde maschinell erstellt und wird nicht unterschrieben.
FNZ
Oldenburgische Landesbank AG | Stau 15/17 | 26122 Oldenburg
Vorsitzender des Aufsichtsrates: Axel Bartsch | Vorstand: Stefan Barth, Vorsitzender | Marc Ampaw | Aytac Aydin | Chris Eggert | Giacomo Petrobelli | Dr. Rainer Polster
Sitz der Gesellschaft: Oldenburg (Oldb) Registergericht: Oldenburg (Oldb) HR-Nummer: HRB 3003
Informationen zur Nutzung Ihrer Daten erhalten Sie auf www.olb.de/dsgvo und in jeder OLB-Filiale. Auf Wunsch schicken wir die Informationen auch gerne per Post zu.
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package name.abuchen.portfolio.datatransfer.pdf.oldenburgischelandesbankag;

import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.deposit;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.dividend;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasAmount;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasCurrencyCode;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasDate;
Expand Down Expand Up @@ -40,7 +41,7 @@
public class OldenburgischeLandesbankAGPDFExtractorTest
{
@Test
public void testWertpapierKauf15()
public void testWertpapierKauf01()
{
OldenburgischeLandesbankAGPDFExtractor extractor = new OldenburgischeLandesbankAGPDFExtractor(new Client());

Expand Down Expand Up @@ -70,6 +71,68 @@ public void testWertpapierKauf15()
hasTaxes("EUR", 0.00), hasFees("EUR", 0.01))));
}

@Test
public void testWertpapierKauf02()
{
OldenburgischeLandesbankAGPDFExtractor extractor = new OldenburgischeLandesbankAGPDFExtractor(new Client());

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

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

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

// check security
assertThat(results, hasItem(security( //
hasIsin("LU1861134382"), hasWkn("A2JSDA"), hasTicker(null), //
hasName("AIS-AM.WORLD SRI PAB Act.Nom. UCITS ETF DR (C)o.N."), //
hasCurrencyCode("EUR"))));

// check buy sell transaction
assertThat(results, hasItem(purchase( //
hasDate("2023-10-17T18:11:56"), hasShares(3.320171), //
hasSource("Kauf02.txt"), //
hasNote("Ord.-Ref.: 0980298"), //
hasAmount("EUR", 643.40), hasGrossValue("EUR", 638.53), //
hasTaxes("EUR", 0.00), hasFees("EUR", 4.87))));
}

@Test
public void testDividende01()
{
OldenburgischeLandesbankAGPDFExtractor extractor = new OldenburgischeLandesbankAGPDFExtractor(new Client());

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

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

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

// check security
assertThat(results, hasItem(security( //
hasIsin("DE000A0H0785"), hasWkn("A0H078"), hasTicker(null), //
hasName("iS.EO G.B.C.1.5-10.5y.U.ETF DE Inhaber-Anteile"), //
hasCurrencyCode("EUR"))));

// check dividends transaction
assertThat(results, hasItem(dividend( //
hasDate("2023-05-15T00:00"), hasShares(71.851808), //
hasSource("Dividende01.txt"), //
hasNote(null), //
hasAmount("EUR", 7.44), hasGrossValue("EUR", 7.44), //
hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))));
}

@Test
public void testKontoauszug01()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ public OldenburgischeLandesbankAGPDFExtractor(Client client)
addBankIdentifier("Oldenburgische Landesbank AG");

addBuySellTransaction();
addDividendeTransaction();
addAccountStatementTransaction();
}

Expand All @@ -36,7 +37,7 @@ private void addBuySellTransaction()

Transaction<BuySellEntry> pdfTransaction = new Transaction<>();

Block firstRelevantLine = new Block("^Depotinhaber .*$");
Block firstRelevantLine = new Block("^.*Depotnummer .*$");
type.addBlock(firstRelevantLine);
firstRelevantLine.set(pdfTransaction);

Expand Down Expand Up @@ -64,12 +65,24 @@ private void addBuySellTransaction()
.match("^[A-Z]{2}[A-Z0-9]{9}[0-9] \\([A-Z0-9]{6}\\) (?<shares>[\\.,\\d]+) [\\.,\\d]+ [\\w]{3} [\\.,\\d]+ [\\w]{3}$") //
.assign((t, v) -> t.setShares(asShares(v.get("shares"))))

// @formatter:off
// Depotnummer 0195923225 Ausführung 17.10.2023 18:11:56
// @formatter:on
.section("time").optional() //
.match("^.* Ausf.hrung .* (?<time>[\\d]{2}:[\\d]{2}:[\\d]{2})$") //
.assign((t, v) -> type.getCurrentContext().put("time", v.get("time")))

// @formatter:off
// Depotnummer 50000000 Ausführung 17.05.2023
// @formatter:on
.section("date") //
.match("^.* Ausf.hrung (?<date>[\\d]{2}\\.[\\d]{2}\\.[\\d]{4})$") //
.assign((t, v) -> t.setDate(asDate(v.get("date"))))
.match("^.* Ausf.hrung (?<date>[\\d]{2}\\.[\\d]{2}\\.[\\d]{4}).*$") //
.assign((t, v) -> {
if (type.getCurrentContext().get("time") != null)
t.setDate(asDate(v.get("date"), type.getCurrentContext().get("time")));
else
t.setDate(asDate(v.get("date")));
})

// @formatter:off
// Ausmachender Betrag: 1,48 EUR
Expand All @@ -93,6 +106,63 @@ private void addBuySellTransaction()
addFeesSectionsTransaction(pdfTransaction, type);
}

private void addDividendeTransaction()
{
DocumentType type = new DocumentType("ERTRAGSAUSSCH.TTUNG");
this.addDocumentTyp(type);

Transaction<AccountTransaction> pdfTransaction = new Transaction<>();

Block firstRelevantLine = new Block("^.*Depotnummer .*$");
type.addBlock(firstRelevantLine);
firstRelevantLine.set(pdfTransaction);

pdfTransaction //

.subject(() -> {
AccountTransaction accountTransaction = new AccountTransaction();
accountTransaction.setType(AccountTransaction.Type.DIVIDENDS);
return accountTransaction;
})

// @formatter:off
// Ausschüttung – iS.EO G.B.C.1.5-10.5y.U.ETF DE Inhaber-Anteile
// DE000A0H0785 (A0H078) 71,851808 8,895903 EUR
// @formatter:on
.section("name", "isin", "wkn", "currency") //
.match("^Aussch.ttung \\– (?<name>.*)$") //
.match("^(?<isin>[A-Z]{2}[A-Z0-9]{9}[0-9]) \\((?<wkn>[A-Z0-9]{6})\\) [\\.,\\d]+ [\\.,\\d]+ (?<currency>[\\w]{3})$") //
.assign((t, v) -> t.setSecurity(getOrCreateSecurity(v)))

// @formatter:off
// DE000A0H0785 (A0H078) 71,851808 8,895903 EUR
// @formatter:on
.section("shares") //
.match("^[A-Z]{2}[A-Z0-9]{9}[0-9] \\([A-Z0-9]{6}\\) (?<shares>[\\.,\\d]+) [\\.,\\d]+ [\\w]{3}$") //
.assign((t, v) -> t.setShares(asShares(v.get("shares"))))

// @formatter:off
// Zahlbarkeitstag 15.05.2023
// @formatter:on
.section("date") //
.match("^Zahlbarkeitstag (?<date>[\\d]{2}\\.[\\d]{2}\\.[\\d]{4})$") //
.assign((t, v) -> t.setDateTime(asDate(v.get("date"))))

// @formatter:off
// Ausmachender Betrag + 7,44 EUR
// @formatter:on
.section("amount", "currency") //
.match("^Ausmachender Betrag \\+ (?<amount>[\\.,\\d]+) (?<currency>[\\w]{3})$") //
.assign((t, v) -> {
t.setCurrencyCode(asCurrencyCode(v.get("currency")));
t.setAmount(asAmount(v.get("amount")));
})

.wrap(TransactionItem::new);

addFeesSectionsTransaction(pdfTransaction, type);
}

private void addAccountStatementTransaction()
{
final DocumentType type = new DocumentType("Kontoauszug", //
Expand Down

0 comments on commit 794ea0d

Please sign in to comment.