Skip to content

Commit

Permalink
Improve V-Bank PDF-Importer
Browse files Browse the repository at this point in the history
Adding additional sale test case
  • Loading branch information
cthiel committed Sep 1, 2024
1 parent f2d213c commit d6ce3ff
Show file tree
Hide file tree
Showing 3 changed files with 113 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,50 @@ public void testWertpapierVerkauf01()
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(42.66))));
}

@Test
public void testWertpapierVerkauf02()
{
VBankAGPDFExtractor extractor = new VBankAGPDFExtractor(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
Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst()
.orElseThrow(IllegalArgumentException::new).getSecurity();
assertThat(security.getIsin(), is("DE000A0KEXM6"));
assertThat(security.getWkn(), is("A0KEXM"));
assertNull(security.getTickerSymbol());
assertThat(security.getName(), is("Siemens Balanced Inhaber-Anteile"));
assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR));

// check buy sell 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.getAccountTransaction().getType(), is(AccountTransaction.Type.SELL));

assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2022-08-11T08:02:38")));
assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(110)));
assertThat(entry.getSource(), is("Verkauf02.txt"));
assertNull(entry.getNote());

assertThat(entry.getPortfolioTransaction().getMonetaryAmount(),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2231.70))));
assertThat(entry.getPortfolioTransaction().getGrossValue(),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2251.70))));
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(20.00))));
}

@Test
public void testWertpapierDividende01()
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
PDFBox Version: 1.8.17
Portfolio Performance Version: 0.70.4
-----------------------------------------
Wertpapierabrechnung
Verkauf (Rücknahme)
Referenz-Nr 90209279
Datum 16.08.2022
Depot 1234567890
Herrn Mustermann, Max
Max Mustermann
Musterstrasse 1
12345 Musterstadt Telefon +49 - (0) 69 - 1234567890
E-Mail max.muller@muller.de
Seite 1 von 2
Wertpapierbezeichnung Siemens Balanced Inhaber-Anteile
ISIN DE000A0KEXM6
WKN A0KEXM
Ausführungsplatz FH V-Bank AG/RZB
Verwahrart Wertpapierrechnung
Lagerland Luxemburg
Handelstag / Zeit 11.08.2022 08:02:38
Nominal / Stück 110,0000 ST
Kurs EUR 20,47
Kurswert EUR 2.251,70
Bank-Provision EUR - 20,00
Courtage * EUR 0,00
Spesen * EUR 0,00
Gebühren EUR 0,00
Ausmachender Betrag EUR 2.231,70
Der Abrechnungsbetrag wird mit Valuta 16.08.2022 über Ihr Konto 1234567890 EUR gebucht.
Keine Steuerbescheinigung!
*Fremde Gebühren und Spesen
Diese Mitteilung wurde maschinell erstellt und wird von der Bank nicht unterschrieben.
V-Bank AG Telefon +49 (0)89 740 800-0 Aufsichtsratsvorsitzender: Vorstand:
Arnulfstr. 58 - 80335 München Telefax +49 (0)89 740 800-222 Jürgen Steffan Lars Hille
Postfach 310340 - 80103 München USt-Id. DE 255554184 Stefan Lettmeier
Gerichtsstand: München BIC VBANDEMMXXX Florian Grenzebach
Amtsgericht München HRB 167737 BLZ 700 123 00
www.V-Bank.com
MetaType: STEX / OrderType: SRDPT / Timestamp: 20220816 08:10:23
Wertpapierabrechnung
Verkauf (Rücknahme)
Referenz-Nr 309403277
Seite 2 von 2
Steuerliche Informationen
Veräußerungsgewinn/-verlust vor Teilfreistellung: EUR -179,70
Ersatzbemessungsgrundlage § 43a Abs. 2 EStG: EUR 0,00
Besitzzeitanteilige akkumulierte Vorabpauschale vor Teilfreistellung: EUR 0,00
Zu berücksichtigende Teilfreistellung (im Privatvermögen): EUR 26,95
Steuerpflichtiger Betrag nach Teilfreistellung im Privatvermögen: EUR -152,75
Veräußerungsgewinn/-verlust aus der Veräußerungsfiktion § 22 InvStG ab 01.01.2018: EUR 0,00
Kapitalertragsteuerpflichtiger Betrag: EUR -152,75
Bemessungsgrundlage für Kapitalertragsteuer: EUR 0,00
Kapitalertragsteuer: EUR 0,00
Solidaritätszuschlag: EUR 0,00
Kirchensteuer: EUR 0,00
Steuerliche Information für Veranlagungszwecke
Steuerpfl. Betrag nach Teilfreistellung im Betriebsvermögen (EStG): EUR -125,79
Steuerpfl. Betrag nach Teilfreistellung im Betriebsvermögen (KStG): EUR -107,82
V-Bank AG Telefon +49 (0)89 740 800-0 Aufsichtsratsvorsitzender: Vorstand:
Arnulfstr. 58 - 80335 München Telefax +49 (0)89 740 800-222 Jürgen Steffan Lars Hille
Postfach 310340 - 80103 München USt-Id. DE 255554184 Stefan Lettmeier
Gerichtsstand: München BIC VBANDEMMXXX Florian Grenzebach
Amtsgericht München HRB 167737 BLZ 700 123 00
www.V-Bank.com
MetaType: STEX / OrderType: SRDPT / Timestamp: 20220816 08:10:23
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,12 @@ public String getLabel()

private void addBuySellTransaction()
{
DocumentType type = new DocumentType("(Kauf|Verkauf)( \\(Zeichnung\\))?");
DocumentType type = new DocumentType("(Kauf|Verkauf)( \\(Zeichnung\\))?( \\(Rücknahme\\))?");
this.addDocumentTyp(type);

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

Block firstRelevantLine = new Block("^(Kauf|Verkauf)( \\(Zeichnung\\))?$", "^Diese Mitteilung wurde maschinell .*$");
Block firstRelevantLine = new Block("^(Kauf|Verkauf)( \\(Zeichnung\\))?( \\(Rücknahme\\))?$", "^Diese Mitteilung wurde maschinell .*$");
type.addBlock(firstRelevantLine);
firstRelevantLine.set(pdfTransaction);

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

// Is type --> "Verkauf" change from BUY to SELL
.section("type").optional() //
.match("^(?<type>(Kauf|Verkauf))( \\(Zeichnung\\))?$") //
.match("^(?<type>(Kauf|Verkauf))( \\(Zeichnung\\))?( \\(Rücknahme\\))?$") //
.assign((t, v) -> {
if ("Verkauf".equals(v.get("type")))
t.setType(PortfolioTransaction.Type.SELL);
Expand Down

0 comments on commit d6ce3ff

Please sign in to comment.