Skip to content

Commit 7dc983a

Browse files
authored
Modify DADAT Bankenhaus PDF-Importer to support new transaction (#5170)
Closes #5169
1 parent c3c0e97 commit 7dc983a

File tree

4 files changed

+346
-151
lines changed

4 files changed

+346
-151
lines changed

name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/dadatbankenhaus/DADATBankenhausPDFExtractorTest.java

Lines changed: 117 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package name.abuchen.portfolio.datatransfer.pdf.dadatbankenhaus;
22

3-
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.check;
43
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.dividend;
4+
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.fee;
55
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasAmount;
66
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasCurrencyCode;
77
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasDate;
@@ -16,10 +16,13 @@
1616
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasTaxes;
1717
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasTicker;
1818
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasWkn;
19+
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.inboundCash;
20+
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.outboundCash;
1921
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.purchase;
2022
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.sale;
2123
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.security;
2224
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.taxRefund;
25+
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.taxes;
2326
import static name.abuchen.portfolio.datatransfer.ExtractorTestUtilities.countAccountTransactions;
2427
import static name.abuchen.portfolio.datatransfer.ExtractorTestUtilities.countAccountTransfers;
2528
import static name.abuchen.portfolio.datatransfer.ExtractorTestUtilities.countBuySell;
@@ -1915,25 +1918,17 @@ public void testKontoauszug22()
19151918
assertThat(errors, empty());
19161919
assertThat(countSecurities(results), is(0L));
19171920
assertThat(countBuySell(results), is(0L));
1918-
assertThat(countAccountTransactions(results), is(1L));
1919-
assertThat(countAccountTransfers(results), is(0L));
1921+
assertThat(countAccountTransactions(results), is(0L));
1922+
assertThat(countAccountTransfers(results), is(1L));
19201923
assertThat(countItemsWithFailureMessage(results), is(0L));
19211924
assertThat(results.size(), is(1));
19221925
new AssertImportActions().check(results, "EUR");
19231926

1924-
// check removal transaction
1925-
var transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance).findFirst()
1926-
.orElseThrow(IllegalArgumentException::new).getSubject();
1927-
1928-
assertThat(transaction.getType(), is(AccountTransaction.Type.REMOVAL));
1929-
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2021-11-15T00:00")));
1930-
assertThat(transaction.getSource(), is("Kontoauszug22.txt"));
1931-
assertThat(transaction.getNote(), is("UMBUCHUNG INTERNET AM 2021-11-15"));
1932-
1933-
assertThat(transaction.getMonetaryAmount(), is(Money.of("EUR", Values.Amount.factorize(2500.00))));
1934-
assertThat(transaction.getGrossValue(), is(Money.of("EUR", Values.Amount.factorize(2500.00))));
1935-
assertThat(transaction.getUnitSum(Unit.Type.TAX), is(Money.of("EUR", Values.Amount.factorize(0.00))));
1936-
assertThat(transaction.getUnitSum(Unit.Type.FEE), is(Money.of("EUR", Values.Amount.factorize(0.00))));
1927+
// check cash transfer transaction
1928+
assertThat(results, hasItem(outboundCash(hasDate("2021-11-15"), hasAmount("EUR", 2500.00), //
1929+
hasSource("Kontoauszug22.txt"), hasNote(null))));
1930+
assertThat(results, hasItem(inboundCash(hasDate("2021-11-15"), hasAmount("EUR", 2500.00), //
1931+
hasSource("Kontoauszug22.txt"), hasNote(null))));
19371932
}
19381933

19391934
@Test
@@ -2081,23 +2076,23 @@ public void testKontoauszug25()
20812076

20822077
// check 1st buy sell transaction
20832078
assertThat(results, hasItem(sale( //
2084-
hasDate("2023-11-23T00:00"), hasShares(200), //
2079+
hasDate("2023-11-23T00:00"), hasShares(200.00), //
20852080
hasSource("Kontoauszug25.txt"), //
20862081
hasNote(null), //
20872082
hasAmount("EUR", 2956.65), hasGrossValue("EUR", 2965.00), //
20882083
hasTaxes("EUR", 0.00), hasFees("EUR", 8.35))));
20892084

20902085
// check 2nd buy sell transaction
20912086
assertThat(results, hasItem(sale( //
2092-
hasDate("2023-11-23T00:00"), hasShares(50), //
2087+
hasDate("2023-11-23T00:00"), hasShares(50.00), //
20932088
hasSource("Kontoauszug25.txt"), //
20942089
hasNote(null), //
20952090
hasAmount("EUR", 513.92), hasGrossValue("EUR", 518.60), //
20962091
hasTaxes("EUR", 0.00), hasFees("EUR", 4.68))));
20972092

20982093
// check 3rd buy sell transaction
20992094
assertThat(results, hasItem(sale( //
2100-
hasDate("2023-11-23T00:00"), hasShares(48), //
2095+
hasDate("2023-11-23T00:00"), hasShares(48.00), //
21012096
hasSource("Kontoauszug25.txt"), //
21022097
hasNote(null), //
21032098
hasAmount("EUR", 463.11), hasGrossValue("EUR", 467.71), //
@@ -2113,15 +2108,15 @@ public void testKontoauszug25()
21132108

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

21222117
// check 3rd tax refund transaction
21232118
assertThat(results, hasItem(taxRefund( //
2124-
hasDate("2023-11-23T00:00"), hasShares(0), //
2119+
hasDate("2023-11-23T00:00"), hasShares(0.00), //
21252120
hasSource("Kontoauszug25.txt"), //
21262121
hasNote("KESt-Verlustausgleich"), //
21272122
hasAmount("EUR", 196.77), hasGrossValue("EUR", 196.77), //
@@ -2154,7 +2149,7 @@ public void testKontoauszug26()
21542149

21552150
// check dividends transaction
21562151
assertThat(results, hasItem(dividend( //
2157-
hasDate("2024-01-09T00:00"), hasShares(55), //
2152+
hasDate("2024-01-09T00:00"), hasShares(55.00), //
21582153
hasSource("Kontoauszug26.txt"), //
21592154
hasNote(null), //
21602155
hasAmount("EUR", 45.97), hasGrossValue("EUR", 63.41), //
@@ -2188,18 +2183,106 @@ public void testKontoauszug26WithSecurityInEUR()
21882183

21892184
// check dividends transaction
21902185
assertThat(results, hasItem(dividend( //
2191-
hasDate("2024-01-09T00:00"), hasShares(55), //
2186+
hasDate("2024-01-09T00:00"), hasShares(55.00), //
21922187
hasSource("Kontoauszug26.txt"), //
21932188
hasNote(null), //
21942189
hasAmount("EUR", 45.97), hasGrossValue("EUR", 63.41), //
2195-
hasTaxes("EUR", (10.44 + 8.70) / 1.097300), hasFees("EUR", 0.00), //
2196-
check(tx -> {
2197-
var c = new CheckCurrenciesAction();
2198-
var account = new Account();
2199-
account.setCurrencyCode("EUR");
2200-
var s = c.process((AccountTransaction) tx, account);
2201-
assertThat(s, is(Status.OK_STATUS));
2202-
}))));
2190+
hasTaxes("EUR", (10.44 + 8.70) / 1.097300), hasFees("EUR", 0.00))));
2191+
}
2192+
2193+
@Test
2194+
public void testKontoauszug27()
2195+
{
2196+
var extractor = new DADATBankenhausPDFExtractor(new Client());
2197+
2198+
List<Exception> errors = new ArrayList<>();
2199+
2200+
var results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kontoauszug27.txt"), errors);
2201+
2202+
assertThat(errors, empty());
2203+
assertThat(countSecurities(results), is(1L));
2204+
assertThat(countBuySell(results), is(0L));
2205+
assertThat(countAccountTransactions(results), is(1L));
2206+
assertThat(countAccountTransfers(results), is(0L));
2207+
assertThat(countItemsWithFailureMessage(results), is(0L));
2208+
assertThat(results.size(), is(2));
2209+
new AssertImportActions().check(results, "EUR");
2210+
2211+
// check security
2212+
assertThat(results, hasItem(security( //
2213+
hasIsin("IE33AB1CD551"), hasWkn(null), hasTicker(null), //
2214+
hasName("Y(DR)-XDUI ABCDE 1F"), //
2215+
hasCurrencyCode("USD"))));
2216+
2217+
// check taxes transaction
2218+
assertThat(results, hasItem(taxes( //
2219+
hasDate("2024-07-30T00:00"), hasShares(1123.00), //
2220+
hasSource("Kontoauszug27.txt"), //
2221+
hasNote(null), //
2222+
hasAmount("EUR", 28.45), hasGrossValue("EUR", 28.45), //
2223+
hasForexGrossValue("USD", 31.05), //
2224+
hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))));
2225+
}
2226+
2227+
@Test
2228+
public void testKontoauszug27WithSecurityInEUR()
2229+
{
2230+
var security = new Security("Y(DR)-XDUI ABCDE 1F", "EUR");
2231+
security.setIsin("IE33AB1CD551");
2232+
2233+
var client = new Client();
2234+
client.addSecurity(security);
2235+
2236+
var extractor = new DADATBankenhausPDFExtractor(client);
2237+
2238+
List<Exception> errors = new ArrayList<>();
2239+
2240+
var results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kontoauszug27.txt"), errors);
2241+
2242+
assertThat(errors, empty());
2243+
assertThat(countSecurities(results), is(0L));
2244+
assertThat(countBuySell(results), is(0L));
2245+
assertThat(countAccountTransactions(results), is(1L));
2246+
assertThat(countAccountTransfers(results), is(0L));
2247+
assertThat(countItemsWithFailureMessage(results), is(0L));
2248+
assertThat(results.size(), is(1));
2249+
new AssertImportActions().check(results, "EUR");
2250+
2251+
// check taxes transaction
2252+
assertThat(results, hasItem(taxes( //
2253+
hasDate("2024-07-30T00:00"), hasShares(1123.00), //
2254+
hasSource("Kontoauszug27.txt"), hasNote(null), //
2255+
hasAmount("EUR", 28.45), hasGrossValue("EUR", 28.45), //
2256+
hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))));
2257+
}
2258+
2259+
@Test
2260+
public void testKontoauszug28()
2261+
{
2262+
var extractor = new DADATBankenhausPDFExtractor(new Client());
2263+
2264+
List<Exception> errors = new ArrayList<>();
2265+
2266+
var results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kontoauszug28.txt"), errors);
2267+
2268+
assertThat(errors, empty());
2269+
assertThat(countSecurities(results), is(0L));
2270+
assertThat(countBuySell(results), is(0L));
2271+
assertThat(countAccountTransactions(results), is(1L));
2272+
assertThat(countAccountTransfers(results), is(1L));
2273+
assertThat(countItemsWithFailureMessage(results), is(0L));
2274+
assertThat(results.size(), is(2));
2275+
new AssertImportActions().check(results, "EUR");
2276+
2277+
// check cash transfer transaction
2278+
assertThat(results, hasItem(outboundCash(hasDate("2024-01-07"), hasAmount("EUR", 20000.00), //
2279+
hasSource("Kontoauszug28.txt"), hasNote(null))));
2280+
assertThat(results, hasItem(inboundCash(hasDate("2024-01-07"), hasAmount("EUR", 20000.00), //
2281+
hasSource("Kontoauszug28.txt"), hasNote(null))));
2282+
2283+
// assert transaction
2284+
assertThat(results, hasItem(fee(hasDate("2025-01-07"), hasAmount("EUR", 277.33), //
2285+
hasSource("Kontoauszug28.txt"), hasNote("Depotgebührenabrechnung per 31.12.2024"))));
22032286
}
22042287

22052288
@Test
@@ -2360,14 +2443,7 @@ public void testDividende02WithSecurityInEUR()
23602443
hasSource("Dividende02.txt"), //
23612444
hasNote("R.-Nr.: 84052423"), //
23622445
hasAmount("EUR", 17.99), hasGrossValue("EUR", 24.82), //
2363-
hasTaxes("EUR", (4.13 + 3.44) / 1.1082), hasFees("EUR", 0.00), //
2364-
check(tx -> {
2365-
var c = new CheckCurrenciesAction();
2366-
var account = new Account();
2367-
account.setCurrencyCode("EUR");
2368-
var s = c.process((AccountTransaction) tx, account);
2369-
assertThat(s, is(Status.OK_STATUS));
2370-
}))));
2446+
hasTaxes("EUR", (4.13 + 3.44) / 1.1082), hasFees("EUR", 0.00))));
23712447
}
23722448

23732449
@Test
@@ -2434,14 +2510,7 @@ public void testDividende03WithSecurityInEUR()
24342510
hasSource("Dividende03.txt"), //
24352511
hasNote(null), //
24362512
hasAmount("EUR", 32.99), hasGrossValue("EUR", 45.50), //
2437-
hasTaxes("EUR", 12.51), hasFees("EUR", 0.00), //
2438-
check(tx -> {
2439-
var c = new CheckCurrenciesAction();
2440-
var account = new Account();
2441-
account.setCurrencyCode("EUR");
2442-
var s = c.process((AccountTransaction) tx, account);
2443-
assertThat(s, is(Status.OK_STATUS));
2444-
}))));
2513+
hasTaxes("EUR", 12.51), hasFees("EUR", 0.00))));
24452514
}
24462515

24472516
@Test
@@ -2508,13 +2577,6 @@ public void testDividende04WithSecurityInEUR()
25082577
hasSource("Dividende04.txt"), //
25092578
hasNote("R.-Nr.: 92276651"), //
25102579
hasAmount("EUR", 32.34), hasGrossValue("EUR", 51.74), //
2511-
hasTaxes("EUR", (150.00 + 75.04) / 11.5975), hasFees("EUR", 0.00), //
2512-
check(tx -> {
2513-
var c = new CheckCurrenciesAction();
2514-
var account = new Account();
2515-
account.setCurrencyCode("EUR");
2516-
var s = c.process((AccountTransaction) tx, account);
2517-
assertThat(s, is(Status.OK_STATUS));
2518-
}))));
2580+
hasTaxes("EUR", (150.00 + 75.04) / 11.5975), hasFees("EUR", 0.00))));
25192581
}
25202582
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
PDFBox Version: 1.8.17
2+
Portfolio Performance Version: 0.73.0
3+
System: win32 | x86_64 | 21.0.5+11-LTS | Azul Systems, Inc.
4+
-----------------------------------------
5+
DADAT-Bank KONTOAUSZUG
6+
Schelhammer Capital Bank AG vom 30.07.2024
7+
90011
8+
Kundennummer
9+
Alter Saldo per 30.06.2024 1.896,08
10+
Summe der Gutschriften 0,00
11+
Summe der Lastschriften 28,45-
12+
Schelhammer, PF 1000, A-5021 Salzburg
13+
Neuer Saldo zu Ihren Gunsten
14+
BAYAr TnPZt EUR 1.867,63
15+
eGykORRRd 55
16+
0888 qsxq
17+
Konto-Nr.: 1234567890 Bankleitzahl: 12345
18+
Empfängerhinweis:
19+
Datum Buchungstext Wert Betrag
20+
30.07 Steuern ausschüttungsgl. Erträge Depot 1234567890/20240729-12345678 29.07 28,45-
21+
ISIN IE33AB1CD551 Y(DR)-XDUI ABCDE 1F 1.123,00000 STK
22+
Kurs 0,000000 Kapitalertragsteuer -31,05 USD
23+
DevKurs 1,091300/26.7.2024
24+
Neuer Saldo zu Ihren Gunsten 1.867,63
25+
nv11 9612 9702 1282 7487 hPYECxHa 01 0014 1/1
26+
IBAN BIC Filiale Auszug Blatt/Gesamt
27+
R0042 60354 Doknr.: EK00-627-0486525489
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
PDFBox Version: 1.8.17
2+
Portfolio Performance Version: 0.73.0
3+
System: win32 | x86_64 | 21.0.5+11-LTS | Azul Systems, Inc.
4+
-----------------------------------------
5+
DADAT-Bank KONTOAUSZUG
6+
Schelhammer Capital Bank AG vom 07.01.2025
7+
28567
8+
Kundennummer
9+
Alter Saldo per 31.12.2024 1.318,34
10+
Summe der Gutschriften 20.000,00
11+
Summe der Lastschriften 277,33-
12+
Schelhammer, PF 1000, A-5021 Salzburg
13+
Neuer Saldo zu Ihren Gunsten
14+
ppoDo sTnWu EUR 21.041,01
15+
tsMRfFPLH 17
16+
2904 TSBk
17+
Konto-Nr.: 00523016443 Bankleitzahl: 17660
18+
Empfängerhinweis:
19+
Datum Buchungstext Wert Betrag
20+
02.01 Einlagen auf diesem Konto sind grundsätzlich 31.12 0,00
21+
erstattungsfähig. Ihre Sicherungseinrichtung ist
22+
die Einlagensicherung AUSTRIA Ges.m.b.H.
23+
Nähere Informationen finden Sie im Informationsbogen
24+
gem. §37a BWG (Homepage bzw. Filiale)
25+
07.01 UMBUCHUNG INTERNET AM 2025-01-03 03.01 20.000,00
26+
MVYxa UelDv
27+
07.01 Depotgebührenabrechnung per 31.12.2024 20250104 15078030 31.12 277,33-
28+
DPNR.: 0407824350 231,11 ZUZüGL. 46,22 UST
29+
Neuer Saldo zu Ihren Gunsten 21.041,01
30+
yu12 9622 8492 7639 6500 HLsjssEU 01 0001 1/1
31+
IBAN BIC Filiale Auszug Blatt/Gesamt
32+
R0042 27166 Doknr.: EK00-412-2770822466

0 commit comments

Comments
 (0)