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 DADAT Bankenhaus PDF-Importer to support new transaction #3704

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
@@ -1,5 +1,28 @@
package name.abuchen.portfolio.datatransfer.pdf.dadatbankenhaus;

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.sale;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.security;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.taxRefund;
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;
Expand Down Expand Up @@ -69,7 +92,7 @@ public void testWertpapierKauf01()
assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2021-02-17T20:49:54")));
assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(3)));
assertThat(entry.getSource(), is("Kauf01.txt"));
assertNull(entry.getNote());
assertThat(entry.getNote(), is("Auftrags-Nr.: 45247499-17.2.2021"));

assertThat(entry.getPortfolioTransaction().getMonetaryAmount(),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(1800.00))));
Expand Down Expand Up @@ -1908,6 +1931,87 @@ public void testKontoauszug24()
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00))));
}

@Test
public void testKontoauszug25()
{
DADATBankenhausPDFExtractor extractor = new DADATBankenhausPDFExtractor(new Client());

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

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

assertThat(errors, empty());
assertThat(countSecurities(results), is(3L));
assertThat(countBuySell(results), is(3L));
assertThat(countAccountTransactions(results), is(3L));
assertThat(results.size(), is(9));
new AssertImportActions().check(results, CurrencyUnit.EUR);

// check security
assertThat(results, hasItem(security( //
hasIsin("US00206R1023"), hasWkn(null), hasTicker(null), //
hasName("AT + T INC. DL 1"), //
hasCurrencyCode("EUR"))));

assertThat(results, hasItem(security( //
hasIsin("US7672921050"), hasWkn(null), hasTicker(null), //
hasName("RIOT PLATFORMS DL-,001"), //
hasCurrencyCode("EUR"))));

assertThat(results, hasItem(security( //
hasIsin("US9344231041"), hasWkn(null), hasTicker(null), //
hasName("WB DISCOVERY SER.A DL-,01"), //
hasCurrencyCode("EUR"))));

// check 1st buy sell transaction
assertThat(results, hasItem(sale( //
hasDate("2023-11-23T00:00"), hasShares(200), //
hasSource("Kontoauszug25.txt"), //
hasNote(null), //
hasAmount("EUR", 2956.65), hasGrossValue("EUR", 2965.00), //
hasTaxes("EUR", 0.00), hasFees("EUR", 8.35))));

// check 2nd buy sell transaction
assertThat(results, hasItem(sale( //
hasDate("2023-11-23T00:00"), hasShares(50), //
hasSource("Kontoauszug25.txt"), //
hasNote(null), //
hasAmount("EUR", 513.92), hasGrossValue("EUR", 518.60), //
hasTaxes("EUR", 0.00), hasFees("EUR", 4.68))));

// check 3rd buy sell transaction
assertThat(results, hasItem(sale( //
hasDate("2023-11-23T00:00"), hasShares(48), //
hasSource("Kontoauszug25.txt"), //
hasNote(null), //
hasAmount("EUR", 463.11), hasGrossValue("EUR", 467.71), //
hasTaxes("EUR", 0.00), hasFees("EUR", 4.60))));

// check 1st tax refund transaction
assertThat(results, hasItem(taxRefund( //
hasDate("2023-11-23T00:00"), hasShares(0), //
hasSource("Kontoauszug25.txt"), //
hasNote("KESt-Verlustausgleich"), //
hasAmount("EUR", 461.29), hasGrossValue("EUR", 461.29), //
hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))));

// check 2nd tax refund transaction
assertThat(results, hasItem(taxRefund( //
hasDate("2023-11-23T00:00"), hasShares(0), //
hasSource("Kontoauszug25.txt"), //
hasNote("KESt-Verlustausgleich"), //
hasAmount("EUR", 258.64), hasGrossValue("EUR", 258.64), //
hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))));

// check 3rd tax refund transaction
assertThat(results, hasItem(taxRefund( //
hasDate("2023-11-23T00:00"), hasShares(0), //
hasSource("Kontoauszug25.txt"), //
hasNote("KESt-Verlustausgleich"), //
hasAmount("EUR", 196.77), hasGrossValue("EUR", 196.77), //
hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))));
}

@Test
public void testWertpapierDividende01()
{
Expand Down Expand Up @@ -1999,4 +2103,74 @@ public void testWertpapierDividende01WithSecurityInEUR()
Status s = c.process(transaction, account);
assertThat(s, is(Status.OK_STATUS));
}

@Test
public void testDividende02()
{
DADATBankenhausPDFExtractor extractor = new DADATBankenhausPDFExtractor(new Client());

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

List<Item> results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende02.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("US56035L1044"), hasWkn(null), hasTicker(null), //
hasName("M a i n S t r e e t Capital Corp. Registered Shares DL -,01"), //
hasCurrencyCode("USD"))));

// check dividends transaction
assertThat(results, hasItem(dividend( //
hasDate("2023-12-27T00:00"), hasShares(100), //
hasSource("Dividende02.txt"), //
hasNote(null), //
hasAmount("EUR", 17.99), hasGrossValue("EUR", 24.82), //
hasForexGrossValue("USD", 27.50), //
hasTaxes("EUR", (4.13 + 3.44) / 1.1082), hasFees("EUR", 0.00))));
}

@Test
public void testDividende02WithSecurityInEUR()
{
Security security = new Security("M a i n S t r e e t Capital Corp. Registered Shares DL -,01", CurrencyUnit.EUR);
security.setIsin("US56035L1044");

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

DADATBankenhausPDFExtractor extractor = new DADATBankenhausPDFExtractor(client);

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

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

assertThat(errors, empty());
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 dividends transaction
assertThat(results, hasItem(dividend( //
hasDate("2023-12-27T00:00"), hasShares(100), //
hasSource("Dividende02.txt"), //
hasNote(null), //
hasAmount("EUR", 17.99), hasGrossValue("EUR", 24.82), //
hasTaxes("EUR", (4.13 + 3.44) / 1.1082), 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));
}))));
}
}
@@ -0,0 +1,41 @@
PDFBox Version: 1.8.17
Portfolio Performance Version: 0.67.0
-----------------------------------------
Abrechnung Ereignis
84052423-27.12.2023
Depot-Nr.: Depotnummer
Vorname Nachname
01/5020
DADAT-Bank
Herrn
Vorname Nachname
Straße
PLZ Ort
Wir haben für Sie am 27.12.2023 unten angeführtes Geschäft abgerechnet:
Geschäftsart: Ertrag
100 Stk
Titel: US56035L1044 M a i n S t r e e t Capital Corp.
Registered Shares DL -,01
Dividende: 0,275 USD
Verwahrart: WR
Positionsdaten: Loco: München
Zinsen/Dividenden: 27,50 USD
Quellensteuer: -4,13 USD
Auslands-KESt: -3,44 USD
19,93 USD
Devisenkurs: 1,1082 (22.12.2023) 17,99 EUR
Zu Gunsten IBAN IBAN 17,99 EUR
Valuta 27.12.2023
Extag: 19.12.2023
Record-Tag: 20.12.2023
QUSt pro Stück 15,00 %
Es wurde Auslands-KESt in der Höhe von +12,5% berücksichtigt.
Die KESt wird an das Finanzamt Wien 1/23 abgeführt.
Devisenkurs: 1,1082 (22.12.2023)
KESt-Neubestand mit Anschaffungskosten nach dem gleitenden
Durchschnittsverfahren § 27a Abs. 4 Zi 3 EStG 100 Stk
Ertrag: 24,82 EUR
27.12.2023 Seite 1
DVR 0060011 ,HG WIEN ,FN58248i, Irrtum vorbehalten! Dieser Beleg wird von der Bank
nicht unterschrieben!
05181 Doknr.: BSG0-045-0000005138
@@ -0,0 +1,43 @@
PDFBox Version: 1.8.17
Portfolio Performance Version: 0.65.6
-----------------------------------------
DADAT-Bank KONTOAUSZUG
Schelhammer Capital Bank AG vom 23.11.2023
58287
Kundennummer
Alter Saldo per 20.11.2023 999.432,08
Summe der Gutschriften 4.850,38
Summe der Lastschriften 0,00
Schelhammer, PF 1000, A-5021 Salzburg
Neuer Saldo zu Ihren Gunsten
DI IMWEfP Tiftrog EUR 999.282,46
FjHheInmmr 52/05
8353 OwRR
Konto-Nr.: 79392714506 Bankleitzahl: 19190
Empfängerhinweis:
Datum Buchungstext Wert Betrag
23.11 Verkauf Depot 5918883102/20231123-14860266 27.11 2.956,65
ISIN US00206R1023 AT + T INC. DL 1 200,00000 STK
Kurs 14,825000 Kurswert 2.965,00 EUR
DADAT Handelsspesen -8,35 EUR
23.11 Verkauf Depot 5279346261/20231123-33398267 27.11 513,92
ISIN US7672921050 RIOT PLATFORMS DL-,001 50,00000 STK
Kurs 10,372000 Kurswert 518,60 EUR
DADAT Handelsspesen -4,68 EUR
23.11 Verkauf Depot 4983739396/20231123-58126687 27.11 463,11
ISIN US9344231041 WB DISCOVERY SER.A DL-,01 48,00000 STK
Kurs 9,744000 Kurswert 467,71 EUR
DADAT Handelsspesen -4,60 EUR
23.11 KESt-Verlustausgleich Depot 8607012549/20231123-42573067 27.11 461,29
ISIN US7672921050 RIOT PLATFORMS DL-,001
Kapitalertragsteuer 461,29 EUR
23.11 KESt-Verlustausgleich Depot 4792614121/20231123-24844866 27.11 258,64
ISIN US00206R1023 AT + T INC. DL 1
Kapitalertragsteuer 258,64 EUR
23.11 KESt-Verlustausgleich Depot 1375641157/20231123-14881168 27.11 196,77
ISIN US9344231041 WB DISCOVERY SER.A DL-,01
Kapitalertragsteuer 196,77 EUR
Neuer Saldo zu Ihren Gunsten 999.282,46
AT21 1919 1099 9056 4592 BSSWATWW 01 0050 1/1
IBAN BIC Filiale Auszug Blatt/Gesamt
C4879 41893 Doknr.: EK00-257-3848870016