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 Quirion PDF-Importer to support new transaction #3484

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.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
PDFBox Version: 1.8.17
Portfolio Performance Version: 0.64.4
-----------------------------------------
Erträgnisabrechnung
Referenz-Nr 12345858
Datum 28.07.2023
Depot 1234567800
Muster, Hans
Frau
Hans Muster
Straße 2
12345 Berlin
Seite 1 von 2
Für aus Ihrem Depot fällig gewordene Erträgnisse erteilen wir nachstehende Abrechnung:
Wertpapierbezeichnung iShsIII-MSCI EM Sm.Cap U.ETF Registered Shares o.N.
ISIN IE00B3F81G20
WKN A0RGER
Verwahrart Wertpapierrechnung
Lagerland Irland
Nominal/Stück 1,9983 ST
Währung USD
Zahlungszeitraum 01.07.2023 - 30.06.2024
Ausschüttung USD 0,7849 pro Anteil
Ex-Tag 13.07.2023
Zahlungstag 26.07.2023
Betrag USD 1,57
Kapitalertragsteuer USD 0,00
Solidaritätszuschlag USD 0,00
Kirchensteuer USD 0,00
Ausmachender Betrag USD 1,57
Devisenkurs EUR/USD 1,110890
Ausmachender Betrag EUR 1,41
Der Abrechnungsbetrag wird mit Valuta 26.07.2023 über Ihr Konto 1234567800 EUR gebucht.
Gebietsansässigen Empfängern von Erträgen aus ausländischen Wertpapieren obliegt eine Meldepflicht nach §§ 67
ff. AWV (Außenwirtschaftsverordnung), wenn die Gutschrift EUR 12.500,00 übersteigt.
Keine Steuerbescheinigung!
Für weitere Fragen wenden Sie sich bitte an Ihren Kundenberater.
Diese Mitteilung wurde maschinell erstellt und wird von der Bank nicht unterschrieben.
Quirin Privatbank AG
Postfach 311105 | 10641 Berlin T +49 (0)30 890 21-300 Handelsregister: Vorstand: Karl Matthäus Schmidt
Kurfürstendamm 119 | 10711 Berlin F +49 (0)30 890 21-301 Berlin Charlottenburg, HRB 87859 Johannes Eismann
www.quirinprivatbank.de [email protected] USt-IdNr.: DE195661729 Aufsichtsratsvorsitzender: Holger Timm
SECTRX2 / 62243624 / 20230728 14:36:14
Erträgnisabrechnung
Referenz-Nr 12345858
Seite 2 von 2
Steuerliche Informationen
Steuerlicher Devisenumrechnungskurs: EUR/USD 1,110890
Ausschüttungsbetrag: EUR 1,41
Steuerpflichtiger Betrag nach Teilfreistellung im Privatvermögen: EUR 1,41
Kapitalertragsteuerpflichtiger Betrag: EUR 1,41
Stand allg. Verlustverrechnungstopf vor Veränderung: EUR 0,00
Veränderung allg. Verlustverrechnungstopf: EUR 0,00
Stand allg. Verlustverrechnungstopf nach Veränderung: EUR 0,00
Stand Freistellungsauftrag vor Veränderung: EUR 16,52
Veränderung Freistellungsauftrag: EUR -1,41
Stand Freistellungsauftrag nach Veränderung: EUR 15,11
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 1,41
Steuerpfl. Betrag nach Teilfreistellung im Betriebsvermögen (KStG): EUR 1,41
Quirin Privatbank AG
Postfach 311105 | 10641 Berlin T +49 (0)30 890 21-300 Handelsregister: Vorstand: Karl Matthäus Schmidt
Kurfürstendamm 119 | 10711 Berlin F +49 (0)30 890 21-301 Berlin Charlottenburg, HRB 87859 Johannes Eismann
www.quirinprivatbank.de [email protected] USt-IdNr.: DE195661729 Aufsichtsratsvorsitzender: Holger Timm
SECTRX2 / 62243624 / 20230728 14:36:14
Original file line number Diff line number Diff line change
@@ -1,10 +1,32 @@
package name.abuchen.portfolio.datatransfer.pdf.quirinbankag;

import static name.abuchen.portfolio.datatransfer.ExtractorTestUtilities.countAccountTransactions;
import static name.abuchen.portfolio.datatransfer.ExtractorTestUtilities.countBuySell;
import static name.abuchen.portfolio.datatransfer.ExtractorTestUtilities.countSecurities;
import static org.hamcrest.CoreMatchers.hasItem;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.collection.IsEmptyCollection.empty;
import static org.junit.Assert.assertNull;

import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.check;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.dividend;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasAmount;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasCurrencyCode;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasDate;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasFees;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasForexGrossValue;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasGrossValue;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasIsin;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasName;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasNote;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasShares;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasSource;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasTaxes;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasTicker;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasWkn;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.security;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Iterator;
Expand Down Expand Up @@ -624,6 +646,72 @@ public void testDividende03WithSecurityInEUR()
assertThat(s, is(Status.OK_STATUS));
}

@Test
public void testDividende04()
{
QuirinBankAGPDFExtractor extractor = new QuirinBankAGPDFExtractor(new Client());

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

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

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("IE00B3F81G20"), hasWkn("A0RGER"), hasTicker(null), //
hasName("iShsIII-MSCI EM Sm.Cap U.ETF Registered Shares o.N."), //
hasCurrencyCode("USD"))));

// check dividende transaction
assertThat(results, hasItem(dividend( //
hasDate("2023-07-26T00:00"), hasShares(1.9983), //
hasSource("Dividende04.txt"), hasNote("Referenz-Nr 12345858"), //
hasAmount("EUR", 1.41), hasGrossValue("EUR", 1.41), hasForexGrossValue("USD", 1.57), //
hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))));
}

@Test
public void testWertpapierKauf27WithSecurityInEUR()
{
Security security = new Security("iShsIII-MSCI EM Sm.Cap U.ETF Registered Shares o.N.", CurrencyUnit.EUR);
security.setIsin("IE00B3F81G20");
security.setWkn("A0RGER");

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

QuirinBankAGPDFExtractor extractor = new QuirinBankAGPDFExtractor(client);

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

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

assertThat(countSecurities(results), is(0L));
assertThat(countBuySell(results), is(0L));
assertThat(countAccountTransactions(results), is(1L));
assertThat(results.size(), is(1));
new AssertImportActions().check(results, CurrencyUnit.EUR);

// check check buy sell transaction
assertThat(results, hasItem(dividend( //
hasDate("2023-07-26T00:00"), hasShares(1.9983), //
hasSource("Dividende04.txt"), hasNote("Referenz-Nr 12345858"), //
hasAmount("EUR", 1.41), hasGrossValue("EUR", 1.41), //
hasTaxes("EUR", 0.00), hasFees("EUR", 0.00), //
check(tx -> {
CheckCurrenciesAction c = new CheckCurrenciesAction();
Account account = new Account();
account.setCurrencyCode(CurrencyUnit.EUR);
Status s = c.process((AccountTransaction) tx, account);
assertThat(s, is(Status.OK_STATUS));
}))));
}

@Test
public void testDepotauszug01()
{
Expand Down
Loading