11package name .abuchen .portfolio .datatransfer .pdf .dadatbankenhaus ;
22
3- import static name .abuchen .portfolio .datatransfer .ExtractorMatchers .check ;
43import static name .abuchen .portfolio .datatransfer .ExtractorMatchers .dividend ;
4+ import static name .abuchen .portfolio .datatransfer .ExtractorMatchers .fee ;
55import static name .abuchen .portfolio .datatransfer .ExtractorMatchers .hasAmount ;
66import static name .abuchen .portfolio .datatransfer .ExtractorMatchers .hasCurrencyCode ;
77import static name .abuchen .portfolio .datatransfer .ExtractorMatchers .hasDate ;
1616import static name .abuchen .portfolio .datatransfer .ExtractorMatchers .hasTaxes ;
1717import static name .abuchen .portfolio .datatransfer .ExtractorMatchers .hasTicker ;
1818import 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 ;
1921import static name .abuchen .portfolio .datatransfer .ExtractorMatchers .purchase ;
2022import static name .abuchen .portfolio .datatransfer .ExtractorMatchers .sale ;
2123import static name .abuchen .portfolio .datatransfer .ExtractorMatchers .security ;
2224import static name .abuchen .portfolio .datatransfer .ExtractorMatchers .taxRefund ;
25+ import static name .abuchen .portfolio .datatransfer .ExtractorMatchers .taxes ;
2326import static name .abuchen .portfolio .datatransfer .ExtractorTestUtilities .countAccountTransactions ;
2427import static name .abuchen .portfolio .datatransfer .ExtractorTestUtilities .countAccountTransfers ;
2528import 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}
0 commit comments