Skip to content

Commit

Permalink
Enhance DKB PDF import to support sells due to corporate action
Browse files Browse the repository at this point in the history
Issue: #1646
  • Loading branch information
inv-trad committed Jul 11, 2020
1 parent 077ed9f commit d6ced15
Show file tree
Hide file tree
Showing 3 changed files with 84 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -831,6 +831,45 @@ public void testWertpapierVerkauf3() throws IOException
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(109.37 + 6.01))));
}

@Test
public void testWertpapierVerkauf4ausKapitalmaßnahme() throws IOException
{
DkbPDFExtractor extractor = new DkbPDFExtractor(new Client());

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

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

assertThat(errors, empty());
assertThat(results.size(), is(2));

Optional<Item> item = results.stream().filter(i -> i instanceof SecurityItem).findFirst();
assertThat(item.isPresent(), is(true));
Security security = ((SecurityItem) item.get()).getSecurity();
assertThat(security.getIsin(), is("DE000LED02V0"));
assertThat(security.getWkn(), is("LED02V"));
assertThat(security.getName(), is("OSRAM LICHT AG"));

// check buy sell transaction
item = results.stream().filter(i -> i instanceof BuySellEntryItem).findFirst();
assertThat(item.isPresent(), is(true));
assertThat(item.get().getSubject(), instanceOf(BuySellEntry.class));
BuySellEntry entry = (BuySellEntry) item.get().getSubject();

assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.SELL));
assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.SELL));

assertThat(entry.getPortfolioTransaction().getCurrencyCode(), is(CurrencyUnit.EUR));
assertThat(entry.getPortfolioTransaction().getMonetaryAmount(),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(164.00))));
assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2020-07-09T00:00")));
assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(4)));
assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.FEE),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00))));
assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.TAX),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00))));
}

@Test
public void testWertpapierRueckzahlung() throws IOException
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
PDF Autor: ''
PDFBox Version: 1.8.16

10919 Berlin
Depotnummer 123456789
Kundennummer 1234567890
Max Mustermann
Auftragsnummer 123456/06.00
Herrn Datum 09.07.2020
Max Mustermann Rechnungsnummer 00123 0003241004 20
Musterstr. 12 Umsatzsteuer-ID DE137178746
12345 Musterstadt
Wertpapier Abrechnung Verkauf aus Kapitalmaßnahme
Nominale Wertpapierbezeichnung ISIN (WKN)
Stück 4 OSRAM LICHT AG DE000LED02V0 (LED02V)
Z.VERKAUF EING.NAMENS-AKTIEN
Handels-/Ausführungsplatz Außerbörslich
Abrech.-Preis 41,00 EUR Auftragserteilung/ -ort Online-Banking
Girosammelverwahrung - Sammel-Urkunden in Namensaktien
Kurswert 164,00 EUR
Ausmachender Betrag 164,00 EUR
Den Gegenwert buchen wir mit Valuta 09.07.2020 zu Gunsten des Kontos 1053412345
(IBAN DE29 1203 0000 1053 4123 45), BLZ 12030000 (BIC BYLADEM1001).
Die Wertpapiere entnehmen wir Ihrem Depotkonto.
Sofern keine Umsatzsteuer ausgewiesen ist, handelt es sich um eine umsatzsteuerbefreite Finanzdienstleistung.
Diese Verkaufsabrechnung erfolgt gemäß Ihrem Auftrag zur Annahme des Abfindungsangebotes.
Für das Geschäft wurde keine Anlageberatung erbracht.
Berücksichtigte Anschaffungsgeschäfte (alle ermittelten Beträge in EUR)
Geschäft Auftragsnr. Ausführ.-tag Whr./St. Nennwert/Stück AS-Kosten Erlös ant. Ergebnis
Einbuchung 6926110700 vor 01.01.2004 Stück 4,0000 nicht relevant nicht relevant KapSt-frei ( )
Dieses Dokument wurde maschinell erstellt und wird nicht unterschrieben.
0883.07100059.0001078OR07
Original file line number Diff line number Diff line change
Expand Up @@ -122,15 +122,25 @@ private void addSellTransaction()
t.setSecurity(getOrCreateSecurity(v));
})

.section("date", "amount", "currency") //
.match("(^Schlusstag)(/-Zeit)? (?<date>\\d+.\\d+.\\d{4}+) (.*)")
.section("amount", "currency") //
.match("(^Ausmachender Betrag) (?<amount>\\d{1,3}(\\.\\d{3})*(,\\d{2})?) (?<currency>\\w{3}+)(.*)")
.assign((t, v) -> {
t.setDate(asDate(v.get("date")));
t.setAmount(asAmount(v.get("amount")));
t.setCurrencyCode(asCurrencyCode(v.get("currency")));
})

.section("date").optional() //
.match("^Den Gegenwert buchen wir mit Valuta (?<date>\\d+.\\d+.\\d{4}+) (.*)")
.assign((t, v) -> {
t.setDate(asDate(v.get("date")));
})

.section("date").optional() //
.match("(^Schlusstag)(/-Zeit)? (?<date>\\d+.\\d+.\\d{4}+) (.*)")
.assign((t, v) -> {
t.setDate(asDate(v.get("date")));
})

.wrap(BuySellEntryItem::new);

addTaxesSectionsTransaction(type, pdfTransaction);
Expand Down

0 comments on commit d6ced15

Please sign in to comment.