Skip to content

Commit

Permalink
Modify OLB Bank PDF-Importer to support new transaction
Browse files Browse the repository at this point in the history
Closes #3821
  • Loading branch information
Nirus2000 committed Mar 26, 2024
1 parent 69d1047 commit b78dff9
Show file tree
Hide file tree
Showing 3 changed files with 167 additions and 31 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
PDFBox Version: 1.8.17
Portfolio Performance Version: 0.67.3
-----------------------------------------
Oldenburg, 02.02.2024
Es betreut Sie:
Ihr OLB Team
Postfach 26 05, 26016 Oldenburg 26121 Oldenburg
Tel.: 0441 221 2210
[email protected]
Vom 02.02.2024
Seite 1 von 1
eThHpnL whuVmQn Depotnummer 9892965160
WlsuCO-moidI-GkR. 101 Belegnummer 4578920
33753 DVWvcgp
Steuerpflichtige Fondsfusion
AIS-AM.WORLD SRI PAB Act.Nom. UCITS ETF DR (C)o.N.
ISIN LU1861134382
Anzahl/Nominale 255,212216
Verwahrart / Lagerstelle Girosammelverwahrung
Ex-Tag 18. Januar 2024
Verhältnis Neu/ Alt 1,00 : 1,00
Altes Wertpapier AIS-AM.WORLD SRI PAB Act.Nom. UCITS ETF DR (C)o.N.
Alte ISIN LU1861134382
Ausbuchung Stück/Nominal 255,212216
Neues Wertpapier Am.ETF-MSCI W.SRI CL.N.Z.AM.P. Bear.Shs EUR Acc. oN
Neue ISIN IE000Y77LGG9
Einbuchung Stück/Nominal 255,212216
Ex-Tag 18. Januar 2024
Kapitalertragsteuer EUR 271,80
Solidaritätszuschlag EUR 14,94
Ausmachender Betrag EUR 286,74
Wir belasten Ihnen die Steuern am 01. Januar 0001 auf ihrem Konto DE12345678900000.
Bei Fragen wenden Sie sich bitte an den Kundenservice der Oldenburgische Landesbank AG. Sie finden die Kontaktdetails im Briefkopf
dieser Abrechnung.
Keine Steuerbescheinigung. Jahressteuerbescheinigung folgt.
Mit freundlichen Grüßen
Ihre OLB Bank
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
Expand Up @@ -17,6 +17,7 @@
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasTaxes;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasTicker;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasWkn;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.inboundDelivery;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.purchase;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.sale;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.security;
Expand Down Expand Up @@ -178,37 +179,6 @@ public void testWertpapierVerkauf01()
hasTaxes("EUR", 0.00), hasFees("EUR", 0.64))));
}

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

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

List<Item> results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Verkauf02.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("DE000A0H0785"), hasWkn("A0H078"), hasTicker(null), //
hasName("iS.EO G.B.C.1.5-10.5y.U.ETF DE Inhaber-Anteile"), //
hasCurrencyCode("EUR"))));

// check buy sell transaction
assertThat(results, hasItem(sale( //
hasDate("2024-02-29T00:00"), hasShares(0.082053), //
hasSource("Verkauf02.txt"), //
hasNote("Ord.-Ref.: 2194170"), //
hasAmount("EUR", 8.81), hasGrossValue("EUR", 8.81), //
hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))));
}

@Test
public void testWertpapierVerkauf01WithSecurityInEUR()
{
Expand Down Expand Up @@ -246,6 +216,37 @@ public void testWertpapierVerkauf01WithSecurityInEUR()
}))));
}

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

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

List<Item> results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Verkauf02.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("DE000A0H0785"), hasWkn("A0H078"), hasTicker(null), //
hasName("iS.EO G.B.C.1.5-10.5y.U.ETF DE Inhaber-Anteile"), //
hasCurrencyCode("EUR"))));

// check buy sell transaction
assertThat(results, hasItem(sale( //
hasDate("2024-02-29T00:00"), hasShares(0.082053), //
hasSource("Verkauf02.txt"), //
hasNote("Ord.-Ref.: 2194170"), //
hasAmount("EUR", 8.81), hasGrossValue("EUR", 8.81), //
hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))));
}

@Test
public void testDividende01()
{
Expand Down Expand Up @@ -530,4 +531,37 @@ public void testKontoauszug01()
assertThat(results, hasItem(deposit(hasDate("2023-08-17"), hasAmount("EUR", 10.00), //
hasSource("Kontoauszug01.txt"), hasNote(null))));
}

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

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

List<Item> results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Fusion01.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("LU1861134382"), hasWkn(null), hasTicker(null), //
hasName("AIS-AM.WORLD SRI PAB Act.Nom. UCITS ETF DR (C)o.N."), //
hasCurrencyCode("EUR"))));

// check unsupported transaction
assertThat(results, hasItem(withFailureMessage( //
Messages.MsgErrorTransactionTypeNotSupported, //
inboundDelivery( //
hasDate("2024-02-02T00:00"), hasShares(255.212216), //
hasSource("Fusion01.txt"), //
hasNote(null), //
hasAmount("EUR", 0.00), hasGrossValue("EUR", 0.00), //
hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ public OldenburgischeLandesbankAGPDFExtractor(Client client)
addDividendeTransaction();
addAdvanceTaxTransaction();
addAccountStatementTransaction();
addNonImportableTransaction();
}

@Override
Expand Down Expand Up @@ -336,6 +337,65 @@ private void addAccountStatementTransaction()
.wrap(TransactionItem::new));
}

private void addNonImportableTransaction()
{
final DocumentType type = new DocumentType("Steuerpflichtige Fondsfusion", //
documentContext -> documentContext //
// @formatter:off
// Vom 02.02.2024
// @formatter:on
.section("date") //
.match("^Vom (?<date>[\\d]{2}\\.[\\d]{2}\\.[\\d]{4})$") //
.assign((ctx, v) -> ctx.put("date", v.get("date"))));
this.addDocumentTyp(type);

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

Block firstRelevantLine = new Block("^Steuerpflichtige Fondsfusion$");
type.addBlock(firstRelevantLine);
firstRelevantLine.set(pdfTransaction);

pdfTransaction //

.subject(() -> {
PortfolioTransaction portfolioTransaction = new PortfolioTransaction();
portfolioTransaction.setType(PortfolioTransaction.Type.DELIVERY_INBOUND);
return portfolioTransaction;
})

// @formatter:off
// Steuerpflichtige Fondsfusion
// AIS-AM.WORLD SRI PAB Act.Nom. UCITS ETF DR (C)o.N.
// ISIN LU1861134382
// Anzahl/Nominale 255,212216
// @formatter:on
.section("name", "isin", "shares") //
.documentContext("date") //
.find("Steuerpflichtige Fondsfusion")
.match("^(?<name>.*)$")
.match("^ISIN (?<isin>[A-Z]{2}[A-Z0-9]{9}[0-9])$") //
.match("^Anzahl\\/Nominale (?<shares>[\\.,\\d]+)$")
.assign((t, v) -> {
v.getTransactionContext().put(FAILURE, Messages.MsgErrorTransactionTypeNotSupported);

t.setDateTime(asDate(v.get("date")));
t.setShares(asShares(v.get("shares")));
t.setSecurity(getOrCreateSecurity(v));

t.setCurrencyCode(asCurrencyCode(t.getSecurity().getCurrencyCode()));
t.setAmount(0L);
})

.wrap((t, ctx) -> {
TransactionItem item = new TransactionItem(t);

if (ctx.getString(FAILURE) != null)
item.setFailureMessage(ctx.getString(FAILURE));

return item;
});
}

private <T extends Transaction<?>> void addTaxesSectionsTransaction(T transaction, DocumentType type)
{
transaction //
Expand Down

0 comments on commit b78dff9

Please sign in to comment.