Skip to content

Commit

Permalink
Modify Easybank PDF-Importer to support new transaction (#4439)
Browse files Browse the repository at this point in the history
  • Loading branch information
Nirus2000 authored Jan 2, 2025
1 parent 993308c commit 4e7e746
Show file tree
Hide file tree
Showing 3 changed files with 142 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.sale;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.security;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.taxRefund;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.taxes;
import static name.abuchen.portfolio.datatransfer.ExtractorTestUtilities.countAccountTransactions;
import static name.abuchen.portfolio.datatransfer.ExtractorTestUtilities.countBuySell;
import static name.abuchen.portfolio.datatransfer.ExtractorTestUtilities.countSecurities;
Expand Down Expand Up @@ -2831,6 +2832,37 @@ public void testDividende20WithSecurityInEUR()
hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))));
}

@Test
public void testSteuerkorrektur01()
{
EasyBankAGPDFExtractor extractor = new EasyBankAGPDFExtractor(new Client());

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

List<Item> results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Steuerkorrektur01.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("IE00B0M62Q58"), hasWkn(null), hasTicker(null), //
hasName("iShs-MSCI World UCITS ETF Registered Shares USD (Dist)oN"), //
hasCurrencyCode("EUR"))));

// check taxes transaction
assertThat(results, hasItem(taxes( //
hasDate("2024-12-31T00:00"), hasShares(57.802), //
hasSource("Steuerkorrektur01.txt"), //
hasNote("Steuerkorrektur | 47346359-18.12.2024/Nr.1"), //
hasAmount("EUR", 1.76), hasGrossValue("EUR", 1.76), //
hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))));
}

@Test
public void testDepotauszug01()
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
PDFBox Version: 1.8.17
Portfolio Performance Version: 0.73.0
System: win32 | x86_64 | 21.0.5+11-LTS | Azul Systems, Inc.
-----------------------------------------
KsBOD
NzPfTOj bzOqqtYFc
BbRYegGUKnUXPJISHu 1
0092 NzTo
NzTo, den 31.12.2024
Wir haben für Sie am 31.12.2024 unten angeführtes Geschäft abgerechnet:
Depot: 99279-241-108
Verlusttopf Nr.: 674459348557
Geschäftsart: Steuerkorrektur - Abrechnung Verkauf 47346359-18.12.2024/Nr.1
Abgang: Stk 57,802
davon
KESt-Neubestand mit Anschaffungskosten: Stk 57,802
Titel: IE00B0M62Q58 iShs-MSCI World UCITS ETF
Registered Shares USD (Dist)oN
Kurs: 77,284 EUR
Verwahrart: WR Wertpapierrechnung
Positionsdaten: Loco: Düsseldorf
Steuerkorrektur KESt aus Neubestand: -1,76 EUR
Zu Lasten IBAN oF94 4801 5892 6067 2199 Valuta 31.12.2024 -1,76 EUR
Handelsplatz: Lang & Schwarz
Eingang vorbehalten
Schlusstag/-zeit: 17.12.2024 17:46:53
Kassatag: 19.12.2024
Datum/Uhrzeit Auftragseingang: 17.12.2024 17.46.41
Verwaltungsgesellschaft: iShares PLC
KESt-pflichtiges Wertpapier
Steuerrelevante Hinweise finden Sie auf der Rückseite.
Seite 1 von 2
easybank Service Center | www.easybank.at | Wiedner Gürtel 11 | 1100 Wien
BAWAG P.S.K. Bank für Arbeit und Wirtschaft und Österreichische Postsparkasse Aktiengesellschaft | Handelsgericht Wien | FN 205340x
GEODRU02 WGEWTGSDR15ABREP2024123109861P31_a/113
Korrigiertes Geschäft / Abrechnungsnummer 31861061 - 31.12.2024 :
Hinweis für KESt aus Neubestand mit Anschaffungskosten:
Steuerrelevanter Anschaffungswert: 4.017,71 EUR
Steuerrelevanter Veräußerungswert : 4.467,17 EUR
Steuerpflichtiger Kursgewinn: 449,46 EUR
Hinweis für den Verlustausgleichstopf:
Bisheriger Stand KESt aus Verlust: -87,14 EUR
KESt aus Verlust Storno: 123,60 EUR
Aktueller Stand KESt bezahlt: 36,46 EUR
Gutschrift aus Verlustausgleich: 87,14 EUR
Die Steuerdaten zum korrigierten Geschäft ersetzen die Steuerdaten zum ursprünglichen Geschäft.
Ursprüngliches Geschäft / Abrechnungsnummer 86501537 - 18.12.2024 /Nr. 1 :
Hinweis für KESt aus Neubestand mit Anschaffungskosten:
Steuerrelevanter Anschaffungswert: 4.024,12 EUR
Steuerrelevanter Veräußerungswert : 4.467,17 EUR
Steuerpflichtiger Kursgewinn: 443,05 EUR
Hinweis für den Verlustausgleichstopf:
Bisheriger Stand KESt aus Verlust: -145,65 EUR
KESt bezahlt: 121,84 EUR
Aktueller Stand KESt aus Verlust: -23,81 EUR
Gutschrift aus Verlustausgleich: 121,84 EUR
Eine allfällige KESt-Abfuhr erfolgt an das Finanzamt für Großbetriebe.
Die BAWAG erbringt keine Steuerberatung und übernimmt keine Haftung für eventuelle steuerliche
Nachteile im Zusammenhang mit Wertpapiertransaktionen und Wertpapierveranlagungen ihrer
Kunden. Die Besteuerung der Kapitaleinkünfte hängt von den persönlichen Verhältnissen des Anlegers
ab und kann künftigen Änderungen unterworfen sein. Vor einer Veranlagungsentscheidung sollten Sie
sich bei Ihrem Steuerberater über die damit verbundenen steuerlichen Konsequenzen und
Meldepflichten informieren.
Mit freundlichen Grüßen
Ihr easybank Service Center
Dieser Beleg wird von der Bank nicht unterfertigt.
Seite 2 von 2
GEODRU02 WGEWTGSDR15ABREP2024123109861P31_a/114
Original file line number Diff line number Diff line change
Expand Up @@ -388,7 +388,7 @@ private void addDividendTransaction()

private void addTaxesLostAdjustmentTransaction()
{
final DocumentType type = new DocumentType("Gesch.ftsart: (Ertrag|Verkauf|Tilgung)");
final DocumentType type = new DocumentType("Gesch.ftsart: (Steuerkorrektur|Ertrag|Verkauf|Tilgung)");
this.addDocumentTyp(type);

Transaction<AccountTransaction> pdfTransaction = new Transaction<>();
Expand Down Expand Up @@ -542,21 +542,38 @@ private void addTaxesLostAdjustmentTransaction()
.assign((t, v) -> t.setDateTime(asDate(v.get("date")))),
// @formatter:off
// Zu Gunsten IBAN AT11 1111 1111 1111 1111 Valuta 07.06.2022 478,50 EUR
// Zu Lasten IBAN oF94 4801 5892 6067 2199 Valuta 31.12.2024 -1,76 EUR
// @formatter:on
section -> section //
.attributes("date") //
.match("^Zu Gunsten .* Valuta (?<date>[\\d]{1,2}\\.[\\d]{1,2}\\.[\\d]{4}).*$") //
.match("^Zu (Gunsten|Lasten) .* Valuta (?<date>[\\d]{1,2}\\.[\\d]{1,2}\\.[\\d]{4}).*$") //
.assign((t, v) -> t.setDateTime(asDate(v.get("date")))))

// @formatter:off
// Gutschrift aus Verlustausgleich: 2,36 EUR
// @formatter:on
.section("amount", "currency").optional() //
.match("^Gutschrift aus Verlustausgleich: (?<amount>[\\.,\\d]+) (?<currency>[\\w]{3}).*$") //
.assign((t, v) -> {
t.setAmount(asAmount(v.get("amount")));
t.setCurrencyCode(asCurrencyCode(v.get("currency")));
})
.optionalOneOf( //
// @formatter:off
// Steuerkorrektur KESt aus Neubestand: -1,76 EUR
// Zu Lasten IBAN oF94 4801 5892 6067 2199 Valuta 31.12.2024 -1,76 EUR
// @formatter:on
section -> section //
.attributes("amount", "currency") //
.find("Steuerkorrektur KESt aus Neubestand: \\-[\\.,\\d]+ [\\w]{3}.*$") //
.match("^Zu Lasten .* \\-(?<amount>[\\.,\\d]+) (?<currency>[\\w]{3}).*$") //
.assign((t, v) -> {
t.setType(AccountTransaction.Type.TAXES);

t.setAmount(asAmount(v.get("amount")));
t.setCurrencyCode(asCurrencyCode(v.get("currency")));
}),
// @formatter:off
// Gutschrift aus Verlustausgleich: 2,36 EUR
// @formatter:on
section -> section //
.attributes("amount", "currency") //
.match("^Gutschrift aus Verlustausgleich: (?<amount>[\\.,\\d]+) (?<currency>[\\w]{3}).*$") //
.assign((t, v) -> {
t.setAmount(asAmount(v.get("amount")));
t.setCurrencyCode(asCurrencyCode(v.get("currency")));
}))

.optionalOneOf( //
// @formatter:off
Expand All @@ -580,6 +597,20 @@ private void addTaxesLostAdjustmentTransaction()
checkAndSetGrossUnit(gross, fxGross, t, type.getCurrentContext());
}))

// @formatter:off
// Geschäftsart: Steuerkorrektur - Abrechnung Verkauf 47346359-18.12.2024/Nr.1
// @formatter:on
.section("note").optional() //
.match("^.*(?<note>Steuerkorrektur).*$") //
.assign((t, v) -> t.setNote(v.get("note")))

// @formatter:off
// Geschäftsart: Steuerkorrektur - Abrechnung Verkauf 47346359-18.12.2024/Nr.1
// @formatter:on
.section("note").optional() //
.match("^.*Abrechnung Verkauf(?<note>.*).*$") //
.assign((t, v) -> t.setNote(concatenate(t.getNote(), trim(v.get("note")), " | ")))

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

0 comments on commit 4e7e746

Please sign in to comment.