Skip to content

Commit

Permalink
Modify FlatEx PDF-Importer to support new "Gutschrifts-/Belastungsanz…
Browse files Browse the repository at this point in the history
  • Loading branch information
Nirus2000 authored and buchen committed Jul 10, 2021
1 parent 55be69b commit 8b2e9b3
Show file tree
Hide file tree
Showing 3 changed files with 146 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1749,6 +1749,59 @@ public void testFinTechWertpapierAusgang04()
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00))));
}

@Test
public void testFinTechWertpapierAusgang05()
{
FinTechGroupBankPDFExtractor extractor = new FinTechGroupBankPDFExtractor(new Client());

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

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

assertThat(errors, empty());
assertThat(results.size(), is(3));
new AssertImportActions().check(results, CurrencyUnit.EUR);

// check security
Security security = results.stream().filter(i -> i instanceof SecurityItem).findFirst()
.orElseThrow(IllegalArgumentException::new).getSecurity();
assertThat(security.getIsin(), is("CH0585795898"));
assertThat(security.getWkn(), is("UE5KPQ"));
assertThat(security.getName(), is("UBS LDN CALL21 SQ3"));
assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR));

// check buy sell transaction
BuySellEntry entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem)
.collect(Collectors.toList()).get(0).getSubject();

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

assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2021-06-25T00:00")));
assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(400)));

assertThat(entry.getPortfolioTransaction().getMonetaryAmount(),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(305.20))));
assertThat(entry.getPortfolioTransaction().getGrossValue(),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(305.20))));
assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.TAX),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00))));
assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.FEE),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00))));

// check tax-refund buy sell transaction
Optional<Item> item = results.stream().filter(i -> i instanceof BuySellEntryItem).findFirst();
assertThat(item.isPresent(), is(true));
item = results.stream().filter(i -> i instanceof TransactionItem).findFirst();
assertThat(item.isPresent(), is(true));
assertThat(item.get().getSubject(), instanceOf(AccountTransaction.class));
AccountTransaction transaction = (AccountTransaction) item.get().getSubject();

assertThat(transaction.getType(), is(AccountTransaction.Type.TAX_REFUND));
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2021-06-25T00:00")));
assertThat(transaction.getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(88.53))));
}

@Test
public void testFinTechWertpapierEingang01()
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
PDF Autor: ''
PDFBox Version: 1.8.16
-----------------------------------------
flatexDEGIRO Bank AG
Postfach 100551
41405 Neuss
USt-IdNr.: DE 246 786 363
Kundenservice:
Tel.: +49 (0)9221 - 7035898
E-Mail: kunden@flatex.de
flatexDEGIRO Bank AG - Rotfeder-Ring 7 - 60327 Frankfurt am Main
0302402000002035249970
Herrn
Vorname Nachname
Straße HsNr
12345 Ort
Frankfurt am Main, 26.06.2021
Gutschrifts- / Belastungsanzeige
Kundennummer: 1234567
Kontonummer : 1234567890
Depotnummer : 1234567890
Inhaber : Vorname Nachname
WKN ISIN Wertpapierbezeichnung Anzahl
UE5KPQ CH0585795898 UBS LDN CALL21 SQ3 400,00
Sehr geehrter Herr Nachname,
aufgrund - Ablauf der Optionsfrist - buchen wir folgenden Bestand aus Ihrem
Depot aus.
Stck./Nominale: 400,000000 Betrag/Stck. 0,76 EUR
Devisenkurs : 1,000000
Geldgegenwert 393,73 EUR
Einbeh. Steuer** -88,53 EUR
Steuerpfl. Ertrag 0,00 EUR
Kapitalertragsteuer -83,92 EUR
Kirchensteuer 0,00 EUR
Solidaritätszuschlag -4,61 EUR
Fälligkeitstag 25.06.2021
letzter Handel am 17.06.2021
Transaktions-Nr. 2383311818
* Verrechnung über Ihr Konto: 1234567890
Die Gutschrift erfolgt unter Vorbehalt des Eingangs. Einwendungen müssen
unverzüglich nach Zugang erhoben werden. Die Unterlassung rechtzeitiger
Einwendungen gilt als Genehmigung.
**Einbehaltene Kapitalertragsteuer zuzüglich Solidaritätszuschlag und ggf.
______________________________________________________________________________
Seite 1/2
BLZ 101 308 00 / BIC: BIWBDE33XXX - Aktiengesellschaft, Sitz Frankfurt - Amtsgericht Frankfurt am Main (HRB 105687)
Vorsitzender des Aufsichtsrats: Martin Korbmacher - Vorstand: Frank Niehage (Vorsitzender), Muhamad Said Chahrour, Dr. Benon Janos, Jörn Engelmann, Steffen Jentsch
2000002035249970 0113302400000101
Kirchensteuer (negative Werte bedeuten Steuererstattung). Evtl. Details dazu
finden Sie im Steuerreport unter der Transaktion-Nr.: 1234567890
Diese Mitteilung ist maschinell erstellt und wird nicht unterschrieben.
Für weitergehende Fragen wenden Sie sich bitte an Ihr flatex-Service-Team.
______________________________________________________________________________
Seite 2/2
BLZ 101 308 00 / BIC: BIWBDE33XXX - Aktiengesellschaft, Sitz Frankfurt - Amtsgericht Frankfurt am Main (HRB 105687)
Vorsitzender des Aufsichtsrats: Martin Korbmacher - Vorstand: Frank Niehage (Vorsitzender), Muhamad Said Chahrour, Dr. Benon Janos, Jörn Engelmann, Steffen Jentsch
2000002035249970
Original file line number Diff line number Diff line change
Expand Up @@ -920,14 +920,27 @@ private void addTransferOutTransaction()
})

// Fälligkeitstag : 02.12.2009 Letzter Handelstag: 20.11.2009
.section("date")
.section("date").optional()
.match("^F.lligkeitstag([\\s]+)?: ([\\s]+)?(?<date>\\d+.\\d+.\\d{4}).*$")
.assign((t, v) -> t.setDate(asDate(v.get("date"))))

// Fälligkeitstag 25.06.2021
.section("date").optional()
.match("^F.lligkeitstag ([\\s]+)?(?<date>\\d+.\\d+.\\d{4})$")
.assign((t, v) -> t.setDate(asDate(v.get("date"))))

// Verwahrart : GS-Verwahrung Geldgegenwert***: 0,20 EUR
// Geldgegenwert* : 111,22 EUR
.section("amount", "currency").optional()
.match("^(.*) Geldgegenwert\\*.*([\\s]+)?: ([\\s]+)?(?<amount>[.,\\d]+) (?<currency>[\\w]{3})(.*)$")
.match("^(.*) Geldgegenwert\\*.*([\\s]+)?: ([\\s]+)?(?<amount>[.,\\d]+) (?<currency>[\\w]{3})$")
.assign((t, v) -> {
t.setCurrencyCode(asCurrencyCode(v.get("currency")));
t.setAmount(asAmount(v.get("amount")));
})

// Geldgegenwert 393,73 EUR
.section("amount", "currency").optional()
.match("^Geldgegenwert ([\\s]+)?(?<amount>[.,\\d]+) (?<currency>[\\w]{3})$")
.assign((t, v) -> {
t.setCurrencyCode(asCurrencyCode(v.get("currency")));
t.setAmount(asAmount(v.get("amount")));
Expand Down Expand Up @@ -960,6 +973,13 @@ private void addTransferOutTransaction()
t.setAmount(t.getPortfolioTransaction().getAmount() - asAmount(v.get("taxRefund")));
})

// Einbeh. Steuer** -88,53 EUR
.section("taxRefund").optional()
.match("^Einbeh\\. Steuer\\*.* ([\\s]+)?-(?<taxRefund>[.,\\d]+) [\\w]{3}$")
.assign((t, v) -> {
t.setAmount(t.getPortfolioTransaction().getAmount() - asAmount(v.get("taxRefund")));
})

.wrap(BuySellEntryItem::new);

addTaxesSectionsTransaction(pdfTransaction, type);
Expand Down Expand Up @@ -1528,10 +1548,15 @@ private void addTransferInOutTaxReturnBlock(DocumentType type)

// Fälligkeitstag : 02.12.2009 Letzter Handelstag: 20.11.2009
// Datum : 24.11.2015
.section("date")
.section("date").optional()
.match("^(F.lligkeitstag|Datum)([\\s]+)?: ([\\s]+)?(?<date>\\d+.\\d+.\\d{4}).*$")
.assign((t, v) -> t.setDateTime(asDate(v.get("date"))))

// Fälligkeitstag 25.06.2021
.section("date").optional()
.match("^F.lligkeitstag ([\\s]+)?(?<date>\\d+.\\d+.\\d{4})$")
.assign((t, v) -> t.setDateTime(asDate(v.get("date"))))

// Stk./Nominale : 325,000000 Stk Einbeh. Steuer*: -382,12 EUR
// Einbeh. Steuer**: -10,00 EUR
.section("amount", "currency").optional()
Expand All @@ -1541,6 +1566,14 @@ private void addTransferInOutTaxReturnBlock(DocumentType type)
t.setAmount(asAmount(v.get("amount")));
})

// Einbeh. Steuer** -88,53 EUR
.section("amount", "currency").optional()
.match("^Einbeh\\. Steuer\\*.* ([\\s]+)?-(?<amount>[.,\\d]+) (?<currency>[\\w]{3})$")
.assign((t, v) -> {
t.setCurrencyCode(asCurrencyCode(v.get("currency")));
t.setAmount(asAmount(v.get("amount")));
})

.wrap(t -> {
if (t.getCurrencyCode() != null && t.getAmount() != 0)
return new TransactionItem(t);
Expand Down

0 comments on commit 8b2e9b3

Please sign in to comment.