88import static name .abuchen .portfolio .datatransfer .ExtractorMatchers .hasAmount ;
99import static name .abuchen .portfolio .datatransfer .ExtractorMatchers .hasCurrencyCode ;
1010import static name .abuchen .portfolio .datatransfer .ExtractorMatchers .hasDate ;
11+ import static name .abuchen .portfolio .datatransfer .ExtractorMatchers .hasExDate ;
1112import static name .abuchen .portfolio .datatransfer .ExtractorMatchers .hasFees ;
1213import static name .abuchen .portfolio .datatransfer .ExtractorMatchers .hasForexGrossValue ;
1314import static name .abuchen .portfolio .datatransfer .ExtractorMatchers .hasGrossValue ;
3738import static org .hamcrest .CoreMatchers .hasItem ;
3839import static org .hamcrest .CoreMatchers .is ;
3940import static org .hamcrest .MatcherAssert .assertThat ;
41+ import static org .hamcrest .Matchers .nullValue ;
4042import static org .hamcrest .collection .IsEmptyCollection .empty ;
4143import static org .junit .Assert .assertNull ;
4244
@@ -2053,6 +2055,7 @@ public void testDividende01()
20532055 assertThat (transaction .getType (), is (AccountTransaction .Type .DIVIDENDS ));
20542056
20552057 assertThat (transaction .getDateTime (), is (LocalDateTime .parse ("2016-04-21T00:00" )));
2058+ assertThat (transaction .getExDate (), is (LocalDateTime .parse ("2016-04-21T00:00" )));
20562059 assertThat (transaction .getShares (), is (Values .Share .factorize (50 )));
20572060 assertThat (transaction .getSource (), is ("Dividende01.txt" ));
20582061 assertThat (transaction .getNote (), is ("Abrechnungs-Nr. 77110599" ));
@@ -2113,6 +2116,7 @@ public void testDividende02()
21132116 assertThat (transaction .getType (), is (AccountTransaction .Type .DIVIDENDS ));
21142117
21152118 assertThat (transaction .getDateTime (), is (LocalDateTime .parse ("2016-12-16T00:00" )));
2119+ assertThat (transaction .getExDate (), is (LocalDateTime .parse ("2016-12-14T00:00" )));
21162120 assertThat (transaction .getShares (), is (Values .Share .factorize (1.0545 )));
21172121 assertThat (transaction .getSource (), is ("Dividende02.txt" ));
21182122 assertThat (transaction .getNote (), is ("Abrechnungs-Nr. 55746925 | Ertrag für 2016/17" ));
@@ -2129,6 +2133,7 @@ public void testDividende02()
21292133 assertThat (transaction .getType (), is (AccountTransaction .Type .DIVIDENDS ));
21302134
21312135 assertThat (transaction .getDateTime (), is (LocalDateTime .parse ("2016-12-16T00:00" )));
2136+ assertThat (transaction .getExDate (), is (LocalDateTime .parse ("2016-12-14T00:00" )));
21322137 assertThat (transaction .getShares (), is (Values .Share .factorize (1.2879 )));
21332138 assertThat (transaction .getSource (), is ("Dividende02.txt" ));
21342139 assertThat (transaction .getNote (), is ("Abrechnungs-Nr. 97603916 | Ertrag für 2016/17" ));
@@ -2145,6 +2150,7 @@ public void testDividende02()
21452150 assertThat (transaction .getType (), is (AccountTransaction .Type .DIVIDENDS ));
21462151
21472152 assertThat (transaction .getDateTime (), is (LocalDateTime .parse ("2016-12-16T00:00" )));
2153+ assertThat (transaction .getExDate (), is (LocalDateTime .parse ("2016-12-14T00:00" )));
21482154 assertThat (transaction .getShares (), is (Values .Share .factorize (9.9225 )));
21492155 assertThat (transaction .getSource (), is ("Dividende02.txt" ));
21502156 assertThat (transaction .getNote (), is ("Abrechnungs-Nr. 33071326 | Ertrag für 2016" ));
@@ -2189,6 +2195,7 @@ public void testDividende03()
21892195 assertThat (transaction .getType (), is (AccountTransaction .Type .DIVIDENDS ));
21902196
21912197 assertThat (transaction .getDateTime (), is (LocalDateTime .parse ("2019-07-15T00:00" )));
2198+ assertThat (transaction .getExDate (), is (LocalDateTime .parse ("2019-06-27T00:00" )));
21922199 assertThat (transaction .getShares (), is (Values .Share .factorize (100 )));
21932200 assertThat (transaction .getSource (), is ("Dividende03.txt" ));
21942201 assertNull (transaction .getNote ());
@@ -2234,6 +2241,7 @@ public void testDividende03WithSecurityInEUR()
22342241 assertThat (transaction .getType (), is (AccountTransaction .Type .DIVIDENDS ));
22352242
22362243 assertThat (transaction .getDateTime (), is (LocalDateTime .parse ("2019-07-15T00:00" )));
2244+ assertThat (transaction .getExDate (), is (LocalDateTime .parse ("2019-06-27T00:00" )));
22372245 assertThat (transaction .getShares (), is (Values .Share .factorize (100 )));
22382246 assertThat (transaction .getSource (), is ("Dividende03.txt" ));
22392247 assertNull (transaction .getNote ());
@@ -2285,6 +2293,7 @@ public void testDividende04()
22852293 assertThat (transaction .getType (), is (AccountTransaction .Type .DIVIDENDS ));
22862294
22872295 assertThat (transaction .getDateTime (), is (LocalDateTime .parse ("2019-03-26T00:00" )));
2296+ assertThat (transaction .getExDate (), is (LocalDateTime .parse ("2019-03-22T00:00" )));
22882297 assertThat (transaction .getShares (), is (Values .Share .factorize (6 )));
22892298 assertThat (transaction .getSource (), is ("Dividende04.txt" ));
22902299 assertThat (transaction .getNote (), is ("Abrechnungs-Nr. 29013705" ));
@@ -2329,6 +2338,7 @@ public void testDividende04WithSecurityInEUR()
23292338 assertThat (transaction .getType (), is (AccountTransaction .Type .DIVIDENDS ));
23302339
23312340 assertThat (transaction .getDateTime (), is (LocalDateTime .parse ("2019-03-26T00:00" )));
2341+ assertThat (transaction .getExDate (), is (LocalDateTime .parse ("2019-03-22T00:00" )));
23322342 assertThat (transaction .getShares (), is (Values .Share .factorize (6 )));
23332343 assertThat (transaction .getSource (), is ("Dividende04.txt" ));
23342344 assertThat (transaction .getNote (), is ("Abrechnungs-Nr. 29013705" ));
@@ -2379,6 +2389,7 @@ public void testDividende05()
23792389 assertThat (transaction .getType (), is (AccountTransaction .Type .DIVIDENDS ));
23802390
23812391 assertThat (transaction .getDateTime (), is (LocalDateTime .parse ("2020-02-14T00:00" )));
2392+ assertNull (transaction .getExDate ());
23822393 assertThat (transaction .getShares (), is (Values .Share .factorize (50 )));
23832394 assertThat (transaction .getSource (), is ("Dividende05.txt" ));
23842395 assertNull (transaction .getNote ());
@@ -2424,6 +2435,7 @@ public void testDividende06()
24242435 assertThat (transaction .getType (), is (AccountTransaction .Type .DIVIDENDS ));
24252436
24262437 assertThat (transaction .getDateTime (), is (LocalDateTime .parse ("2015-03-04T00:00" )));
2438+ assertThat (transaction .getExDate (), is (LocalDateTime .parse ("2015-03-02T00:00" )));
24272439 assertThat (transaction .getShares (), is (Values .Share .factorize (28 )));
24282440 assertThat (transaction .getSource (), is ("Dividende06.txt" ));
24292441 assertThat (transaction .getNote (), is ("Abrechnungs-Nr. 96937413 | Ertrag für 2014" ));
@@ -2469,6 +2481,7 @@ public void testDividende07()
24692481 assertThat (transaction .getType (), is (AccountTransaction .Type .DIVIDENDS ));
24702482
24712483 assertThat (transaction .getDateTime (), is (LocalDateTime .parse ("2016-12-15T00:00" )));
2484+ assertThat (transaction .getExDate (), is (LocalDateTime .parse ("2016-12-15T00:00" )));
24722485 assertThat (transaction .getShares (), is (Values .Share .factorize (5.8192 )));
24732486 assertThat (transaction .getSource (), is ("Dividende07.txt" ));
24742487 assertThat (transaction .getNote (), is ("Abrechnungs-Nr. 14053767 | Ertrag für 2016/17" ));
@@ -2513,6 +2526,7 @@ public void testDividende08()
25132526 assertThat (transaction .getType (), is (AccountTransaction .Type .DIVIDENDS ));
25142527
25152528 assertThat (transaction .getDateTime (), is (LocalDateTime .parse ("2019-02-05T00:00" )));
2529+ assertThat (transaction .getExDate (), is (LocalDateTime .parse ("2019-01-31T00:00" )));
25162530 assertThat (transaction .getShares (), is (Values .Share .factorize (32 )));
25172531 assertThat (transaction .getSource (), is ("Dividende08.txt" ));
25182532 assertThat (transaction .getNote (), is ("Abrechnungs-Nr. 12345 | Ertrag für 2018" ));
@@ -2557,6 +2571,7 @@ public void testDividende08WithSecurityInEUR()
25572571 assertThat (transaction .getType (), is (AccountTransaction .Type .DIVIDENDS ));
25582572
25592573 assertThat (transaction .getDateTime (), is (LocalDateTime .parse ("2019-02-05T00:00" )));
2574+ assertThat (transaction .getExDate (), is (LocalDateTime .parse ("2019-01-31T00:00" )));
25602575 assertThat (transaction .getShares (), is (Values .Share .factorize (32 )));
25612576 assertThat (transaction .getSource (), is ("Dividende08.txt" ));
25622577 assertThat (transaction .getNote (), is ("Abrechnungs-Nr. 12345 | Ertrag für 2018" ));
@@ -2607,6 +2622,7 @@ public void testDividende09()
26072622 assertThat (transaction .getType (), is (AccountTransaction .Type .DIVIDENDS ));
26082623
26092624 assertThat (transaction .getDateTime (), is (LocalDateTime .parse ("2019-09-11T00:00" )));
2625+ assertThat (transaction .getExDate (), is (LocalDateTime .parse ("2019-08-08T00:00" )));
26102626 assertThat (transaction .getShares (), is (Values .Share .factorize (40 )));
26112627 assertThat (transaction .getSource (), is ("Dividende09.txt" ));
26122628 assertNull (transaction .getNote ());
@@ -2652,6 +2668,7 @@ public void testDividende10()
26522668 assertThat (transaction .getType (), is (AccountTransaction .Type .DIVIDENDS ));
26532669
26542670 assertThat (transaction .getDateTime (), is (LocalDateTime .parse ("2020-11-25T00:00" )));
2671+ assertThat (transaction .getExDate (), is (LocalDateTime .parse ("2020-09-29T00:00" )));
26552672 assertThat (transaction .getShares (), is (Values .Share .factorize (46 )));
26562673 assertThat (transaction .getSource (), is ("Dividende10.txt" ));
26572674 assertThat (transaction .getNote (), is ("Abrechnungs-Nr. 11223344" ));
@@ -2697,6 +2714,7 @@ public void testDividende10WithSecurityInEUR()
26972714 assertThat (transaction .getType (), is (AccountTransaction .Type .DIVIDENDS ));
26982715
26992716 assertThat (transaction .getDateTime (), is (LocalDateTime .parse ("2020-11-25T00:00" )));
2717+ assertThat (transaction .getExDate (), is (LocalDateTime .parse ("2020-09-29T00:00" )));
27002718 assertThat (transaction .getShares (), is (Values .Share .factorize (46 )));
27012719 assertThat (transaction .getSource (), is ("Dividende10.txt" ));
27022720 assertThat (transaction .getNote (), is ("Abrechnungs-Nr. 11223344" ));
@@ -2748,6 +2766,7 @@ public void testDividende11()
27482766 assertThat (transaction .getType (), is (AccountTransaction .Type .DIVIDENDS ));
27492767
27502768 assertThat (transaction .getDateTime (), is (LocalDateTime .parse ("2020-11-12T00:00" )));
2769+ assertThat (transaction .getExDate (), is (LocalDateTime .parse ("2020-11-04T00:00" )));
27512770 assertThat (transaction .getShares (), is (Values .Share .factorize (500 )));
27522771 assertThat (transaction .getSource (), is ("Dividende11.txt" ));
27532772 assertThat (transaction .getNote (), is ("Abrechnungs-Nr. 23344420 | Ertrag für 2020" ));
@@ -2793,6 +2812,7 @@ public void testDividende11WithSecurityInEUR()
27932812 assertThat (transaction .getType (), is (AccountTransaction .Type .DIVIDENDS ));
27942813
27952814 assertThat (transaction .getDateTime (), is (LocalDateTime .parse ("2020-11-12T00:00" )));
2815+ assertThat (transaction .getExDate (), is (LocalDateTime .parse ("2020-11-04T00:00" )));
27962816 assertThat (transaction .getShares (), is (Values .Share .factorize (500 )));
27972817 assertThat (transaction .getSource (), is ("Dividende11.txt" ));
27982818 assertThat (transaction .getNote (), is ("Abrechnungs-Nr. 23344420 | Ertrag für 2020" ));
@@ -2844,6 +2864,7 @@ public void testDividende12()
28442864 assertThat (transaction .getType (), is (AccountTransaction .Type .DIVIDENDS ));
28452865
28462866 assertThat (transaction .getDateTime (), is (LocalDateTime .parse ("2010-11-17T00:00" )));
2867+ assertNull (transaction .getExDate ());
28472868 assertThat (transaction .getShares (), is (Values .Share .factorize (1 )));
28482869 assertThat (transaction .getSource (), is ("Dividende12.txt" ));
28492870 assertThat (transaction .getNote (), is ("Abrechnungs-Nr. 63302459" ));
@@ -2888,6 +2909,7 @@ public void testDividende13()
28882909 assertThat (transaction .getType (), is (AccountTransaction .Type .DIVIDENDS ));
28892910
28902911 assertThat (transaction .getDateTime (), is (LocalDateTime .parse ("2021-09-15T00:00" )));
2912+ assertThat (transaction .getExDate (), is (LocalDateTime .parse ("2021-09-15T00:00" )));
28912913 assertThat (transaction .getShares (), is (Values .Share .factorize (549 )));
28922914 assertThat (transaction .getSource (), is ("Dividende13.txt" ));
28932915 assertThat (transaction .getNote (), is ("Abrechnungs-Nr. 34091609 | Ertrag für 2021/22" ));
@@ -2933,6 +2955,7 @@ public void testDividende14()
29332955 assertThat (transaction .getType (), is (AccountTransaction .Type .DIVIDENDS ));
29342956
29352957 assertThat (transaction .getDateTime (), is (LocalDateTime .parse ("2021-12-17T00:00" )));
2958+ assertThat (transaction .getExDate (), is (LocalDateTime .parse ("2021-12-02T00:00" )));
29362959 assertThat (transaction .getShares (), is (Values .Share .factorize (1000 )));
29372960 assertThat (transaction .getSource (), is ("Dividende14.txt" ));
29382961 assertThat (transaction .getNote (), is ("Abrechnungs-Nr. 59788848" ));
@@ -2978,6 +3001,7 @@ public void testDividende14WithSecurityInEUR()
29783001 assertThat (transaction .getType (), is (AccountTransaction .Type .DIVIDENDS ));
29793002
29803003 assertThat (transaction .getDateTime (), is (LocalDateTime .parse ("2021-12-17T00:00" )));
3004+ assertThat (transaction .getExDate (), is (LocalDateTime .parse ("2021-12-02T00:00" )));
29813005 assertThat (transaction .getShares (), is (Values .Share .factorize (1000 )));
29823006 assertThat (transaction .getSource (), is ("Dividende14.txt" ));
29833007 assertThat (transaction .getNote (), is ("Abrechnungs-Nr. 59788848" ));
@@ -3029,6 +3053,7 @@ public void testDividende15()
30293053 assertThat (transaction .getType (), is (AccountTransaction .Type .TAXES ));
30303054
30313055 assertThat (transaction .getDateTime (), is (LocalDateTime .parse ("2017-10-20T00:00" )));
3056+ assertThat (transaction .getExDate (), is (nullValue ()));
30323057 assertThat (transaction .getShares (), is (Values .Share .factorize (0.4512 )));
30333058 assertThat (transaction .getSource (), is ("Dividende15.txt" ));
30343059 assertThat (transaction .getNote (), is ("Abrechnungs-Nr. 12345678 | Ertrag für 2017" ));
@@ -3073,6 +3098,7 @@ public void testDividende16()
30733098 assertThat (transaction .getType (), is (AccountTransaction .Type .DIVIDENDS ));
30743099
30753100 assertThat (transaction .getDateTime (), is (LocalDateTime .parse ("2022-09-30T00:00" )));
3101+ assertNull (transaction .getExDate ());
30763102 assertThat (transaction .getShares (), is (Values .Share .factorize (15 )));
30773103 assertThat (transaction .getSource (), is ("Dividende16.txt" ));
30783104 assertThat (transaction .getNote (), is ("Abrechnungs-Nr. 42739637 | Kapitalrückzahlung" ));
@@ -3117,6 +3143,7 @@ public void testDividende16WithSecurityInEUR()
31173143 assertThat (transaction .getType (), is (AccountTransaction .Type .DIVIDENDS ));
31183144
31193145 assertThat (transaction .getDateTime (), is (LocalDateTime .parse ("2022-09-30T00:00" )));
3146+ assertNull (transaction .getExDate ());
31203147 assertThat (transaction .getShares (), is (Values .Share .factorize (15 )));
31213148 assertThat (transaction .getSource (), is ("Dividende16.txt" ));
31223149 assertThat (transaction .getNote (), is ("Abrechnungs-Nr. 42739637 | Kapitalrückzahlung" ));
@@ -3160,6 +3187,7 @@ public void testDividende17()
31603187 // check dividends transaction
31613188 assertThat (results , hasItem (dividend ( //
31623189 hasDate ("2019-09-09" ), hasShares (60 ), //
3190+ hasExDate ("2019-08-30" ), //
31633191 hasSource ("Dividende17.txt" ), //
31643192 hasNote ("Abrechnungs-Nr. 26128781" ), //
31653193 hasAmount ("EUR" , 7.65 ), hasGrossValue ("EUR" , 15.73 ), //
@@ -3194,6 +3222,7 @@ public void testDividende17WithSecurityInEUR()
31943222 // check dividends transaction
31953223 assertThat (results , hasItem (dividend ( //
31963224 hasDate ("2019-09-09" ), hasShares (60 ), //
3225+ hasExDate ("2019-08-30" ), //
31973226 hasSource ("Dividende17.txt" ), hasNote ("Abrechnungs-Nr. 26128781" ), //
31983227 hasAmount ("EUR" , 7.65 ), hasGrossValue ("EUR" , 15.73 ), //
31993228 hasTaxes ("EUR" , (39.00 / 9.9148 ) + 3.93 + 0.22 ), hasFees ("EUR" , 0.00 ), //
@@ -3234,6 +3263,7 @@ public void testDividende18()
32343263 // check dividends transaction
32353264 assertThat (results , hasItem (dividend ( //
32363265 hasDate ("2015-12-17T00:00" ), hasShares (156.729 ), //
3266+ hasExDate ("2015-12-15" ), //
32373267 hasSource ("Dividende18.txt" ), //
32383268 hasNote ("Abrechnungs-Nr. 70187215 | Ertrag für 2014/15" ), //
32393269 hasAmount ("EUR" , 7.68 ), hasGrossValue ("EUR" , 11.84 ), //
@@ -3278,6 +3308,8 @@ public void testDividendeStorno01()
32783308
32793309 assertThat (((Transaction ) cancellation .getSubject ()).getDateTime (),
32803310 is (LocalDateTime .parse ("2020-05-15T00:00" )));
3311+ assertThat (((AccountTransaction ) cancellation .getSubject ()).getExDate (),
3312+ is (LocalDateTime .parse ("2020-04-29T00:00" )));
32813313 assertThat (((Transaction ) cancellation .getSubject ()).getShares (), is (Values .Share .factorize (46 )));
32823314 assertThat (((Transaction ) cancellation .getSubject ()).getSource (), is ("DividendeStorno01.txt" ));
32833315 assertThat (((Transaction ) cancellation .getSubject ()).getNote (), is (
0 commit comments