Skip to content

Commit

Permalink
Improve MerkurPrivatBankPDFExtractor
Browse files Browse the repository at this point in the history
* New Sell PDF Document with Capital Gains
* Add Kapitalertragsteuer
* Add Solidaritätszuschlag
  • Loading branch information
cubinet-code authored and Nirus2000 committed Apr 1, 2024
1 parent 5b639b4 commit 1b899ba
Show file tree
Hide file tree
Showing 3 changed files with 110 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,50 @@ public void testWertpapierVerkauf01()

}

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

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

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

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

new AssertImportActions().check(results, CurrencyUnit.EUR);

// check security identification:
Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst()
.orElseThrow(IllegalArgumentException::new).getSecurity();
assertThat(security.getIsin(), is("IE00BZ02LR44"));
assertThat(security.getWkn(), is("A2AQST"));
assertNull(security.getTickerSymbol());
assertThat(security.getName(), is("XTR.(IE)-MSCI WORLD ESG REGISTERED SHARES 1C O.N."));
assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR));

// check buy transaction
BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst()
.orElseThrow(IllegalArgumentException::new).getSubject();

assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.SELL));
assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2024-03-22T20:15:51")));
assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(3260.0)));
assertThat(entry.getSource(), is("Verkauf02.txt"));
assertThat(entry.getNote(), is("Auftragsnummer 749922/41.00"));

assertThat(entry.getPortfolioTransaction().getMonetaryAmount(),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(116003.09))));
assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.FEE),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(25.00 + 0.06))));
assertThat(entry.getPortfolioTransaction().getGrossValue(),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(119446.40))));
assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.TAX),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(3240.05 + 178.20))));

}

@Test
public void testKontoauszug01()
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
```
PDFBox Version: 1.8.17
Portfolio Performance Version: 0.68.3
-----------------------------------------

Am Marktplatz 10 · 97762 Hammelburg Seite 1 von 2
Depotnummer
97545260
Kundennummer 664797185
KmMJsS MoJKA dygSGaw
Auftragsnummer 749922/41.00
SYZzsN CwFkb WTtvZde Datum 25.03.2024
tBpFxJnFU. 7 Ihr Berater Herr IBl NSupqHWijGs
90402 Nürnberg Telefon +49 951 980297-99
Rechnungsnummer t22653-0000036053/24
Umsatzsteuer-ID DE198159260

Wertpapier Abrechnung Verkauf
Auftrag vom 22.03.2024 20:15:37 Uhr
Nominale Wertpapierbezeichnung ISIN (WKN)
Stück 3.260 XTR.(IE)-MSCI WORLD ESG IE00BZ02LR44 (A2AQST)
REGISTERED SHARES 1C O.N.
Handels-/Ausführungsplatz Quotrix (Best Execution)
Börsensegment DUSD
Trailing-Stop-Order
Trailing-Stoplimit 36,70 EUR Trailing-Abstand 2,50 %
Schlusstag/-Zeit 22.03.2024 20:15:51 Auftraggeber uHatXF KrnLd zTIwZpW
Ausführungskurs 36,64 EUR Auftragserteilung/ -ort Online-Banking
Wertpapierrechnung Lagerland Irland
Kurswert 119.446,40 EUR
Provision 25,00- EUR
Übertragungs-/Liefergebühr 0,06- EUR
Ermittlung steuerrelevante Erträge
Veräußerungsgewinn (nach Teilfreistellung) 12.960,18 EUR
Berechnungsgrundlage für die Kapitalertragsteuer 12.960,18 EUR

Steuerberechnung
Kapitalertragsteuer 25,00% auf 12.960,18 EUR 3.240,05- EUR
Solidaritätszuschlag 5,50% auf 3.240,05 EUR 178,20- EUR
Ausmachender Betrag 116.003,09 EUR

Den Gegenwert buchen wir mit Valuta 26.03.2024 zu Gunsten des Kontos 2727799 (IBAN DE65 7013 0800 9999 9999 99),
BLZ 70130800 (BIC GENODEF1M06).
Die Wertpapiere entnehmen wir Ihrem Depotkonto.
6176.03251799.0000099OR07
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,8 @@ private void addBuySellTransaction()
.wrap(BuySellEntryItem::new);

addFeesSectionsTransaction(pdfTransaction, type);
addTaxesSectionsTransaction(pdfTransaction, type);

}

private void addAccountStatementTransaction()
Expand Down Expand Up @@ -159,6 +161,25 @@ private <T extends Transaction<?>> void addFeesSectionsTransaction(T transaction
.assign((t, v) -> processFeeEntries(t, v, type));
}

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

// Steuerberechnung
// Kapitalertragsteuer 25,00% auf 12.960,18 EUR
// 3.240,05- EUR
.section("tax", "currency").optional()
.match("^Kapitalertragsteuer [\\.,\\d]+([\\s]+)?% .* (?<tax>[\\.,\\d]+)\\- (?<currency>[\\w]{3})$")
.assign((t, v) -> processTaxEntries(t, v, type))

// Solidaritätszuschlag 5,50% auf 3.240,05 EUR 178,20-
// EUR
// Ausmachender Betrag 116.003,09 EUR
.section("tax", "currency").optional()
.match("^Solidarit.tszuschlag [\\.,\\d]+([\\s]+)?% .* (?<tax>[\\.,\\d]+)\\- (?<currency>[\\w]{3})$")
.assign((t, v) -> processTaxEntries(t, v, type));
}

private Transaction<AccountTransaction> depositRemovalTransaction(DocumentType type, String regex)
{
return new Transaction<AccountTransaction>() //
Expand Down

0 comments on commit 1b899ba

Please sign in to comment.