Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Modify Raiffeisenbank PDF-Importer to support new transaction #3143

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
@@ -0,0 +1,82 @@
PDFBox Version: 1.8.16
Portfolio Performance Version: 0.60.2
-----------------------------------------
da


Bank Direkt
der Raiffeisenlandesbank OÖ (BLZ: 34000)
Europaplatz 1a b
4020 Linz


a
a
Abrechnung Ereignis a
47467310 - 18.01.2023 a
Depotnummer: 12.345.678
Herrn Max Mustermann
Max Mustermann
Hauptstrasse 123 230/475
7890 Kufstein Bank Direkt
Wir haben für Sie am 18.01.2023 unten angeführtes Geschäft abgerechnet:
Geschäftsart: Ertrag
221 Stk
Titel: DE000A0D8Q49 iSh.DJ U.S.Select Div.U.ETF DE
Inhaber-Anteile
Fondsgesellschaft: BlackRock Asset Management Deutschl
and AG (KVG)
Ertrag: 0,540118 USD
Verwahrart: WR
Positionsdaten: Loco: Frankfurt am Main
Bruttoertrag: 119,37 USD
KESt ausländische Dividende: -0,64 USD
118,73 USD
Devisenkurs: 1,0856 (13.01.2023) 109,37 EUR
KESt: -10,00 EUR
Inkassogebühr: -1,45 EUR
Umsatzsteuer: -0,29 EUR
Zu Gunsten IBAN AT44 3400 0000 0123 456 97,63 EUR
Valuta 17.01.2023
Es wurde Umsatzsteuer in der Höhe von 20% berücksichtigt.
Bemessungsgrundlage USt: -1,45 EUR
Umsatzsteuer: -0,29 EUR
KESt wird mit dem Finanzamt für Großbetriebe abgerechnet.
KESt pro Fondsanteil 0,045228 EUR für Neubestand
Auslands-KESt pro Fondsanteil 0,002671 EUR für Neubestand
Extag: 17.01.2023
18.01.2023 1 / 2
BIC: RZOOAT2L, Landesgericht Linz, FN 247579m, UID: ATU57834268
Dieser Beleg wurde durch die Raiffeisenlandesbank Oberösterreich erstellt.
Ohne Unterschrift. Bitte geben Sie Unstimmigkeiten sofort bekannt.
Bank Direkt
der Raiffeisenlandesbank OÖ (BLZ: 34000)
Europaplatz 1a b
4020 Linz
a
a
Abrechnung Ereignis a
47467310 - 18.01.2023 a
Depotnummer: 12.345.678
Max Mustermann
230/475
Bank Direkt
Ausgangssituation:
KESt-Neubestand mit Anschaffungskosten nach dem gleitenden
Durchschnittsverfahren § 27a Abs. 4 Zi 3 EStG 221 Stk
steuerlicher Anschaffungswert: 14.342,52 EUR
KESt-Neubestand mit Anschaffungskosten nach dem gleitenden
Durchschnittsverfahren § 27a Abs. 4 Zi 3 EStG 221 Stk
ausschüttungsgleicher Ertrag: 39,59 EUR
Anschaffungswertreduzierender Betrag: 110,46 EUR
steuerlicher Anschaffungswert: 14.342,52 EUR
Bestand nach Buchung:
KESt-Neubestand mit Anschaffungskosten nach dem gleitenden
Durchschnittsverfahren § 27a Abs. 4 Zi 3 EStG 221 Stk
steuerlicher Anschaffungswert: 14.271,65 EUR
Steuerl. Behandlung vorbehaltlich Beurteilung durch BMF
Für ein Veranlagungsgespräch stehen wir Ihnen gerne zur Verfügung.
18.01.2023 2 / 2
BIC: RZOOAT2L, Landesgericht Linz, FN 247579m, UID: ATU57834268
Dieser Beleg wurde durch die Raiffeisenlandesbank Oberösterreich erstellt.
Ohne Unterschrift. Bitte geben Sie Unstimmigkeiten sofort bekannt.
@@ -0,0 +1,72 @@
PDFBox Version: 1.8.16
Portfolio Performance Version: 0.60.2
-----------------------------------------
da


Bank Direkt
der Raiffeisenlandesbank OÖ (BLZ: 34000)
Europaplatz 1a b
4020 Linz


a
a
Abrechnung Ereignis a
42008422 - 09.01.2023 a
Depotnummer: 12.345.678
Herrn Max Mustermann
Max Mustermann
Hauptstraße 123 230/475
9876 Kufstein Bank Direkt
Wir haben für Sie am 09.01.2023 unten angeführtes Geschäft abgerechnet:
Geschäftsart: Ertrag
70 Stk
Titel: DE0007664039 VOLKSWAGEN AG
VORZUGSAKTIEN O.ST. O.N.
Dividende: 19,06 EUR
Verwahrart: WR
Positionsdaten: Loco: Frankfurt am Main
Bruttoertrag: 1.334,20 EUR
Quellensteuer: -351,90 EUR
KESt ausländische Dividende: -166,78 EUR
Inkassogebühr: -1,45 EUR
Umsatzsteuer: -0,29 EUR
Zu Gunsten IBAN AT44 3400 0000 0123 4567 813,78 EUR
Valuta 09.01.2023
Es wurde Umsatzsteuer in der Höhe von 20% berücksichtigt.
Bemessungsgrundlage USt: -1,45 EUR
Umsatzsteuer: -0,29 EUR
KESt wird mit dem Finanzamt für Großbetriebe abgerechnet.
Quellensteuer: 26,375%
Extag: 19.12.2022
Record-Tag: 20.12.2022
09.01.2023 1 / 2
BIC: RZOOAT2L, Landesgericht Linz, FN 247579m, UID: ATU57834268
Dieser Beleg wurde durch die Raiffeisenlandesbank Oberösterreich erstellt.
Ohne Unterschrift. Bitte geben Sie Unstimmigkeiten sofort bekannt.
Bank Direkt
der Raiffeisenlandesbank OÖ (BLZ: 34000)
Europaplatz 1a b
4020 Linz
a
a
Abrechnung Ereignis a
42008422 - 09.01.2023 a
Depotnummer: 12.345.678
Max Mustermann
230/475
Bank Direkt
Ausgangssituation:
KESt-Neubestand mit Anschaffungskosten nach dem gleitenden
Durchschnittsverfahren § 27a Abs. 4 Zi 3 EStG 70 Stk
steuerlicher Anschaffungswert: 9.996,00 EUR
KESt-Neubestand mit Anschaffungskosten nach dem gleitenden
Durchschnittsverfahren § 27a Abs. 4 Zi 3 EStG 70 Stk
Ertrag: 1.334,20 EUR
Steuerl. Behandlung vorbehaltlich Beurteilung durch BMF
Für ein Veranlagungsgespräch stehen wir Ihnen gerne zur Verfügung.
09.01.2023 2 / 2
BIC: RZOOAT2L, Landesgericht Linz, FN 247579m, UID: ATU57834268
Dieser Beleg wurde durch die Raiffeisenlandesbank Oberösterreich erstellt.
Ohne Unterschrift. Bitte geben Sie Unstimmigkeiten sofort bekannt.
Expand Up @@ -693,6 +693,136 @@ public void testDividende04WithSecurityInEUR()
assertThat(s, is(Status.OK_STATUS));
}

@Test
public void testDividende05()
{
RaiffeisenBankgruppePDFExtractor extractor = new RaiffeisenBankgruppePDFExtractor(new Client());

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

List<Item> results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende05.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("DE000A0D8Q49"));
assertThat(security.getName(), is("iSh.DJ U.S.Select Div.U.ETF DE Inhaber-Anteile"));
assertThat(security.getCurrencyCode(), is(CurrencyUnit.USD));

// check dividends transaction
AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance)
.findFirst().orElseThrow(IllegalArgumentException::new).getSubject();

assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));

assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2023-01-17T00:00")));
assertThat(transaction.getShares(), is(Values.Share.factorize(221)));
assertThat(transaction.getSource(), is("Dividende05.txt"));
assertNull(transaction.getNote());

assertThat(transaction.getMonetaryAmount(),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(97.63))));
assertThat(transaction.getGrossValue(),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(109.96))));
assertThat(transaction.getUnitSum(Unit.Type.TAX),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(10.00 + 0.29 + (0.64 / 1.0856)))));
assertThat(transaction.getUnitSum(Unit.Type.FEE),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(1.45))));

Unit grossValueUnit = transaction.getUnit(Unit.Type.GROSS_VALUE).orElseThrow(IllegalArgumentException::new);
assertThat(grossValueUnit.getForex(), is(Money.of(CurrencyUnit.USD, Values.Amount.factorize(119.37))));
}

@Test
public void testDividende05WithSecurityInEUR()
{
Security security = new Security("iSh.DJ U.S.Select Div.U.ETF DE Inhaber-Anteile", CurrencyUnit.EUR);
security.setIsin("DE000A0D8Q49");

Client client = new Client();
client.addSecurity(security);

RaiffeisenBankgruppePDFExtractor extractor = new RaiffeisenBankgruppePDFExtractor(client);

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

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

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

// check dividends transaction
AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance)
.findFirst().orElseThrow(IllegalArgumentException::new).getSubject();

assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));

assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2023-01-17T00:00")));
assertThat(transaction.getShares(), is(Values.Share.factorize(221)));
assertThat(transaction.getSource(), is("Dividende05.txt"));
assertNull(transaction.getNote());

assertThat(transaction.getMonetaryAmount(),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(97.63))));
assertThat(transaction.getGrossValue(),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(109.96))));
assertThat(transaction.getUnitSum(Unit.Type.TAX),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(10.00 + 0.29 + (0.64 / 1.0856)))));
assertThat(transaction.getUnitSum(Unit.Type.FEE),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(1.45))));

CheckCurrenciesAction c = new CheckCurrenciesAction();
Account account = new Account();
account.setCurrencyCode(CurrencyUnit.EUR);
Status s = c.process(transaction, account);
assertThat(s, is(Status.OK_STATUS));
}

@Test
public void testDividende06()
{
RaiffeisenBankgruppePDFExtractor extractor = new RaiffeisenBankgruppePDFExtractor(new Client());

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

List<Item> results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende06.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("DE0007664039"));
assertThat(security.getName(), is("VOLKSWAGEN AG VORZUGSAKTIEN O.ST. O.N."));
assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR));

// check dividends transaction
AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance)
.findFirst().orElseThrow(IllegalArgumentException::new).getSubject();

assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));

assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2023-01-09T00:00")));
assertThat(transaction.getShares(), is(Values.Share.factorize(70)));
assertThat(transaction.getSource(), is("Dividende06.txt"));
assertNull(transaction.getNote());

assertThat(transaction.getMonetaryAmount(),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(813.78))));
assertThat(transaction.getGrossValue(),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(1334.20))));
assertThat(transaction.getUnitSum(Unit.Type.TAX),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(351.90 + 166.78 + 0.29))));
assertThat(transaction.getUnitSum(Unit.Type.FEE),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(1.45))));
}

@Test
public void testKontoauszug01()
{
Expand Down