Skip to content

Commit 2509a2f

Browse files
buchenclaude
andcommitted
Updated FinTechGroupBank PDF Extractor to support parsing of dividend ex-date
Issue: portfolio-performance#5439 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 9d6b9e3 commit 2509a2f

File tree

2 files changed

+61
-11
lines changed

2 files changed

+61
-11
lines changed

name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/fintechgroupbank/FinTechGroupBankPDFExtractorTest.java

Lines changed: 47 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasDate;
99
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasFeed;
1010
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasFeedProperty;
11+
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasExDate;
1112
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasFees;
1213
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasForexGrossValue;
1314
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasGrossValue;
@@ -1897,6 +1898,7 @@ public void testFinTechDividende01()
18971898
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
18981899

18991900
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2014-05-08T00:00")));
1901+
assertThat(transaction.getExDate(), is(LocalDateTime.parse("2014-05-08T00:00")));
19001902
assertThat(transaction.getShares(), is(Values.Share.factorize(360)));
19011903
assertThat(transaction.getSource(), is("FinTechDividende01.txt"));
19021904
assertThat(transaction.getNote(), is("Transaktion-Nr.: 716759781"));
@@ -1942,6 +1944,7 @@ public void testFinTechDividende02()
19421944
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
19431945

19441946
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2014-01-15T00:00")));
1947+
assertThat(transaction.getExDate(), is(LocalDateTime.parse("2014-01-15T00:00")));
19451948
assertThat(transaction.getShares(), is(Values.Share.factorize(99)));
19461949
assertThat(transaction.getSource(), is("FinTechDividende02.txt"));
19471950
assertThat(transaction.getNote(), is("Transaktion-Nr.: 111111111"));
@@ -1987,6 +1990,7 @@ public void testFinTechDividende03()
19871990
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
19881991

19891992
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2017-06-23T00:00")));
1993+
assertThat(transaction.getExDate(), is(LocalDateTime.parse("2017-06-21T00:00")));
19901994
assertThat(transaction.getShares(), is(Values.Share.factorize(15)));
19911995
assertThat(transaction.getSource(), is("FinTechDividende03.txt"));
19921996
assertThat(transaction.getNote(), is("Transaktion-Nr.: 1236644834"));
@@ -2032,6 +2036,7 @@ public void testFinTechDividende04()
20322036
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
20332037

20342038
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2017-08-25T00:00")));
2039+
assertThat(transaction.getExDate(), is(LocalDateTime.parse("2017-08-08T00:00")));
20352040
assertThat(transaction.getShares(), is(Values.Share.factorize(105)));
20362041
assertThat(transaction.getSource(), is("FinTechDividende04.txt"));
20372042
assertNull(transaction.getNote());
@@ -2079,6 +2084,7 @@ public void testFinTechDividende04WithSecurityInUSD()
20792084
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
20802085

20812086
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2017-08-25T00:00")));
2087+
assertThat(transaction.getExDate(), is(LocalDateTime.parse("2017-08-08T00:00")));
20822088
assertThat(transaction.getShares(), is(Values.Share.factorize(105)));
20832089
assertThat(transaction.getSource(), is("FinTechDividende04.txt"));
20842090
assertNull(transaction.getNote());
@@ -2130,6 +2136,7 @@ public void testFinTechDividende05()
21302136
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
21312137

21322138
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2017-12-20T00:00")));
2139+
assertThat(transaction.getExDate(), is(LocalDateTime.parse("2017-11-16T00:00")));
21332140
assertThat(transaction.getShares(), is(Values.Share.factorize(180)));
21342141
assertThat(transaction.getSource(), is("FinTechDividende05.txt"));
21352142
assertThat(transaction.getNote(), is("Transaktion-Nr.: 0000000000"));
@@ -2175,6 +2182,7 @@ public void testFinTechDividende06()
21752182
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
21762183

21772184
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2016-04-28T00:00")));
2185+
assertThat(transaction.getExDate(), is(LocalDateTime.parse("2016-04-28T00:00")));
21782186
assertThat(transaction.getShares(), is(Values.Share.factorize(10)));
21792187
assertThat(transaction.getSource(), is("FinTechDividende06.txt"));
21802188
assertThat(transaction.getNote(), is("Transaktion-Nr.: 111111111"));
@@ -3724,6 +3732,7 @@ public void testFlatExDividende01()
37243732
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
37253733

37263734
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2019-04-10T00:00")));
3735+
assertThat(transaction.getExDate(), is(LocalDateTime.parse("2019-03-28T00:00")));
37273736
assertThat(transaction.getShares(), is(Values.Share.factorize(197)));
37283737
assertThat(transaction.getSource(), is("FlatExDividende01.txt"));
37293738
assertThat(transaction.getNote(), is("Transaktion-Nr.: 1234567890"));
@@ -3769,6 +3778,7 @@ public void testFlatExDividende02()
37693778
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
37703779

37713780
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2019-12-12T00:00")));
3781+
assertThat(transaction.getExDate(), is(LocalDateTime.parse("2019-11-20T00:00")));
37723782
assertThat(transaction.getShares(), is(Values.Share.factorize(15)));
37733783
assertThat(transaction.getSource(), is("FlatExDividende02.txt"));
37743784
assertThat(transaction.getNote(), is("Transaktion-Nr.: 1757281127"));
@@ -3816,6 +3826,7 @@ public void testFlatExDividende02WithSecurityInEUR()
38163826
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
38173827

38183828
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2019-12-12T00:00")));
3829+
assertThat(transaction.getExDate(), is(LocalDateTime.parse("2019-11-20T00:00")));
38193830
assertThat(transaction.getShares(), is(Values.Share.factorize(15)));
38203831
assertThat(transaction.getSource(), is("FlatExDividende02.txt"));
38213832
assertThat(transaction.getNote(), is("Transaktion-Nr.: 1757281127"));
@@ -3868,6 +3879,7 @@ public void testFlatExDividende03()
38683879
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
38693880

38703881
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2020-06-24T00:00")));
3882+
assertThat(transaction.getExDate(), is(LocalDateTime.parse("2020-06-11T00:00")));
38713883
assertThat(transaction.getShares(), is(Values.Share.factorize(31.89)));
38723884
assertThat(transaction.getSource(), is("FlatExDividende03.txt"));
38733885
assertThat(transaction.getNote(), is("Transaktion-Nr.: 2222222222"));
@@ -3914,6 +3926,7 @@ public void testFlatExDividende03WithSecurityInEUR()
39143926
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
39153927

39163928
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2020-06-24T00:00")));
3929+
assertThat(transaction.getExDate(), is(LocalDateTime.parse("2020-06-11T00:00")));
39173930
assertThat(transaction.getShares(), is(Values.Share.factorize(31.89)));
39183931
assertThat(transaction.getSource(), is("FlatExDividende03.txt"));
39193932
assertThat(transaction.getNote(), is("Transaktion-Nr.: 2222222222"));
@@ -3965,6 +3978,7 @@ public void testFlatExDividende04()
39653978
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
39663979

39673980
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2020-10-02T00:00")));
3981+
assertThat(transaction.getExDate(), is(LocalDateTime.parse("2020-09-14T00:00")));
39683982
assertThat(transaction.getShares(), is(Values.Share.factorize(197)));
39693983
assertThat(transaction.getSource(), is("FlatExDividende04.txt"));
39703984
assertThat(transaction.getNote(), is("Transaktion-Nr.: 2041157988"));
@@ -4012,6 +4026,7 @@ public void testFlatExDividende04WithSecurityInEUR()
40124026
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
40134027

40144028
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2020-10-02T00:00")));
4029+
assertThat(transaction.getExDate(), is(LocalDateTime.parse("2020-09-14T00:00")));
40154030
assertThat(transaction.getShares(), is(Values.Share.factorize(197)));
40164031
assertThat(transaction.getSource(), is("FlatExDividende04.txt"));
40174032
assertThat(transaction.getNote(), is("Transaktion-Nr.: 2041157988"));
@@ -4064,6 +4079,7 @@ public void testFlatExDividende05()
40644079
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
40654080

40664081
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2020-06-11T00:00")));
4082+
assertThat(transaction.getExDate(), is(LocalDateTime.parse("2020-05-20T00:00")));
40674083
assertThat(transaction.getShares(), is(Values.Share.factorize(50)));
40684084
assertThat(transaction.getSource(), is("FlatExDividende05.txt"));
40694085
assertThat(transaction.getNote(), is("Transaktion-Nr. : 1111111111"));
@@ -4111,6 +4127,7 @@ public void testFlatExDividende05WithSecurityInEUR()
41114127
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
41124128

41134129
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2020-06-11T00:00")));
4130+
assertThat(transaction.getExDate(), is(LocalDateTime.parse("2020-05-20T00:00")));
41144131
assertThat(transaction.getShares(), is(Values.Share.factorize(50)));
41154132
assertThat(transaction.getSource(), is("FlatExDividende05.txt"));
41164133
assertThat(transaction.getNote(), is("Transaktion-Nr. : 1111111111"));
@@ -4163,6 +4180,7 @@ public void testFlatExDividende06()
41634180
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
41644181

41654182
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2020-06-11T00:00")));
4183+
assertThat(transaction.getExDate(), is(LocalDateTime.parse("2020-05-20T00:00")));
41664184
assertThat(transaction.getShares(), is(Values.Share.factorize(50)));
41674185
assertThat(transaction.getSource(), is("FlatExDividende06.txt"));
41684186
assertThat(transaction.getNote(), is("Transaktion-Nr. : 1111111111"));
@@ -5463,6 +5481,7 @@ public void testFlatExDegiroDividende02WithNegativeAmount()
54635481
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
54645482

54655483
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2022-03-02T00:00")));
5484+
assertThat(transaction.getExDate(), is(LocalDateTime.parse("2022-02-17T00:00")));
54665485
assertThat(transaction.getShares(), is(Values.Share.factorize(162.19)));
54675486
assertThat(transaction.getSource(), is("FlatExDegiroDividende02.txt"));
54685487
assertThat(transaction.getNote(), is("Transaktion-Nr.: 1234567891"));
@@ -5482,6 +5501,7 @@ public void testFlatExDegiroDividende02WithNegativeAmount()
54825501
assertThat(transaction.getType(), is(AccountTransaction.Type.TAXES));
54835502

54845503
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2022-03-02T00:00")));
5504+
assertNull(transaction.getExDate());
54855505
assertThat(transaction.getShares(), is(Values.Share.factorize(162.19)));
54865506
assertThat(transaction.getSource(), is("FlatExDegiroDividende02.txt"));
54875507
assertThat(transaction.getNote(), is("Transaktion-Nr.: 1234567891 | Bruttoausschüttung 34,66 USD"));
@@ -5525,6 +5545,7 @@ public void testFlatExDegiroDividende02WithNegativeAmountAndSecurityInEUR()
55255545
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
55265546

55275547
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2022-03-02T00:00")));
5548+
assertThat(transaction.getExDate(), is(LocalDateTime.parse("2022-02-17T00:00")));
55285549
assertThat(transaction.getShares(), is(Values.Share.factorize(162.19)));
55295550
assertThat(transaction.getSource(), is("FlatExDegiroDividende02.txt"));
55305551
assertThat(transaction.getNote(), is("Transaktion-Nr.: 1234567891"));
@@ -5541,6 +5562,7 @@ public void testFlatExDegiroDividende02WithNegativeAmountAndSecurityInEUR()
55415562
assertThat(transaction.getType(), is(AccountTransaction.Type.TAXES));
55425563

55435564
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2022-03-02T00:00")));
5565+
assertNull(transaction.getExDate());
55445566
assertThat(transaction.getShares(), is(Values.Share.factorize(162.19)));
55455567
assertThat(transaction.getSource(), is("FlatExDegiroDividende02.txt"));
55465568
assertThat(transaction.getNote(), is("Transaktion-Nr.: 1234567891 | Bruttoausschüttung 34,66 USD"));
@@ -5592,6 +5614,7 @@ public void testFlatExDegiroDividende03()
55925614
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
55935615

55945616
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2022-06-17T00:00")));
5617+
assertThat(transaction.getExDate(), is(LocalDateTime.parse("2022-06-02T00:00")));
55955618
assertThat(transaction.getShares(), is(Values.Share.factorize(5)));
55965619
assertThat(transaction.getSource(), is("FlatExDegiroDividende03.txt"));
55975620
assertThat(transaction.getNote(), is("Transaktion-Nr. : 2877924522"));
@@ -5640,6 +5663,7 @@ public void testFlatExDegiroDividende03WithSecurityInEUR()
56405663
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
56415664

56425665
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2022-06-17T00:00")));
5666+
assertThat(transaction.getExDate(), is(LocalDateTime.parse("2022-06-02T00:00")));
56435667
assertThat(transaction.getShares(), is(Values.Share.factorize(5)));
56445668
assertThat(transaction.getSource(), is("FlatExDegiroDividende03.txt"));
56455669
assertThat(transaction.getNote(), is("Transaktion-Nr. : 2877924522"));
@@ -5693,6 +5717,7 @@ public void testFlatExDegiroDividende04()
56935717
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
56945718

56955719
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2022-06-17T00:00")));
5720+
assertThat(transaction.getExDate(), is(LocalDateTime.parse("2022-06-02T00:00")));
56965721
assertThat(transaction.getShares(), is(Values.Share.factorize(10)));
56975722
assertThat(transaction.getSource(), is("FlatExDegiroDividende04.txt"));
56985723
assertThat(transaction.getNote(), is("Transaktion-Nr. : 2877924406"));
@@ -5943,7 +5968,8 @@ public void testFlatExDegiroDividende08()
59435968
hasDate("2023-03-22T00:00"), hasShares(96.00), //
59445969
hasSource("FlatExDegiroDividende08.txt"), hasNote("Transaktion-Nr.: 2222222222"), //
59455970
hasAmount("USD", 244.72), hasGrossValue("USD", 244.72), //
5946-
hasTaxes("USD", 0.00), hasFees("USD", 0.00))));
5971+
hasTaxes("USD", 0.00), hasFees("USD", 0.00), //
5972+
hasExDate("2023-03-13T00:00"))));
59475973
}
59485974

59495975
@Test
@@ -5976,7 +6002,8 @@ public void testFlatExDegiroDividende09()
59766002
hasDate("2022-06-25T00:00"), hasShares(117.82), //
59776003
hasSource("FlatExDegiroDividende09.txt"), hasNote("Transaktion-Nr.: 2222222222"), //
59786004
hasAmount("CHF", 188.93), hasGrossValue("CHF", 231.71), //
5979-
hasTaxes("CHF", 42.78), hasFees("CHF", 0.00))));
6005+
hasTaxes("CHF", 42.78), hasFees("CHF", 0.00), //
6006+
hasExDate("2022-06-10T00:00"))));
59806007
}
59816008

59826009
@Test
@@ -6011,7 +6038,8 @@ public void testFlatExDegiroDividende10()
60116038
hasNote("Transaktion-Nr.: 3415691892"), //
60126039
hasAmount("EUR", 109.86), hasGrossValue("EUR", 151.53), //
60136040
hasForexGrossValue("USD", 162.50), //
6014-
hasTaxes("EUR", 41.67), hasFees("EUR", 0.00))));
6041+
hasTaxes("EUR", 41.67), hasFees("EUR", 0.00), //
6042+
hasExDate("2023-09-11T00:00"))));
60156043
}
60166044

60176045
@Test
@@ -6046,7 +6074,8 @@ public void testFlatExDegiroDividende10WithSecurityInEUR()
60466074
hasSource("FlatExDegiroDividende10.txt"), //
60476075
hasNote("Transaktion-Nr.: 3415691892"), //
60486076
hasAmount("EUR", 109.86), hasGrossValue("EUR", 151.53), //
6049-
hasTaxes("EUR", 41.67), hasFees("EUR", 0.00))));
6077+
hasTaxes("EUR", 41.67), hasFees("EUR", 0.00), //
6078+
hasExDate("2023-09-11T00:00"))));
60506079
}
60516080

60526081
@Test
@@ -6082,7 +6111,8 @@ public void testFlatExDegiroDividende11()
60826111
hasSource("FlatExDegiroDividende11.txt"), //
60836112
hasNote(null), //
60846113
hasAmount("EUR", 2484.43), hasGrossValue("EUR", 3016.20), //
6085-
hasTaxes("EUR", 504.06 + 27.71), hasFees("EUR", 0.00)))));
6114+
hasTaxes("EUR", 504.06 + 27.71), hasFees("EUR", 0.00), //
6115+
hasExDate("2024-02-09T00:00")))));
60866116
}
60876117

60886118
@Test
@@ -6117,7 +6147,8 @@ public void testFlatExDegiroDividende12()
61176147
hasNote("Transaktion-Nr. : 4620331518"), //
61186148
hasAmount("EUR", 4.31), hasGrossValue("EUR", 5.79), //
61196149
hasForexGrossValue("USD", 6.70), //
6120-
hasTaxes("EUR", 1.48), hasFees("EUR", 0.00))));
6150+
hasTaxes("EUR", 1.48), hasFees("EUR", 0.00), //
6151+
hasExDate("2025-11-12T00:00"))));
61216152
}
61226153

61236154
@Test
@@ -6152,7 +6183,8 @@ public void testFlatExDegiroDividende12WithSecurityInEUR()
61526183
hasSource("FlatExDegiroDividende12.txt"), //
61536184
hasNote("Transaktion-Nr. : 4620331518"), //
61546185
hasAmount("EUR", 4.31), hasGrossValue("EUR", 5.79), //
6155-
hasTaxes("EUR", 1.48), hasFees("EUR", 0.00))));
6186+
hasTaxes("EUR", 1.48), hasFees("EUR", 0.00), //
6187+
hasExDate("2025-11-12T00:00"))));
61566188
}
61576189

61586190
@Test
@@ -6190,7 +6222,8 @@ public void testFlatExDegiroDividende13()
61906222
hasSource("FlatExDegiroDividende13.txt"), //
61916223
hasNote("Transaktion-Nr. : 6155515228"), //
61926224
hasAmount("USD", 24.57), hasGrossValue("USD", 29.52), // Wrong gross value, is 33.00 USD
6193-
hasTaxes("USD", 4.95), hasFees("USD", 0.00))))); // Missing 2.99 EUR tax conversion
6225+
hasTaxes("USD", 4.95), hasFees("USD", 0.00), // Missing 2.99 EUR tax conversion
6226+
hasExDate("2025-11-14T00:00")))));
61946227
}
61956228

61966229
@Test
@@ -6224,7 +6257,8 @@ public void testFlatExDegiroDividende14()
62246257
hasSource("FlatExDegiroDividende14.txt"), //
62256258
hasNote("Transaktion-Nr. : 4741404453"), //
62266259
hasAmount("EUR", 12.68), hasGrossValue("EUR", 17.03), //
6227-
hasTaxes("EUR", 4.35), hasFees("EUR", 0.00))));
6260+
hasTaxes("EUR", 4.35), hasFees("EUR", 0.00), //
6261+
hasExDate("2026-01-02T00:00"))));
62286262
}
62296263

62306264
@Test
@@ -6295,7 +6329,8 @@ public void testFlatExDegiroDividende16()
62956329
hasSource("FlatExDegiroDividende16.txt"), //
62966330
hasNote("Transaktion-Nr. : 4773716165"), //
62976331
hasAmount("USD", 1.95), hasGrossValue("USD", 2.34), //
6298-
hasTaxes("USD", 0.39), hasFees("USD", 0.00)))));
6332+
hasTaxes("USD", 0.39), hasFees("USD", 0.00), //
6333+
hasExDate("2026-01-09T00:00")))));
62996334
}
63006335

63016336
@Test
@@ -6331,7 +6366,8 @@ public void testFlatExDegiroDividendeStorno01()
63316366
hasSource("FlatExDegiroDividendeStorno01.txt"), //
63326367
hasNote("Transaktion-Nr.: 1011111111"), //
63336368
hasAmount("EUR", 19.99), hasGrossValue("EUR", 19.99), //
6334-
hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))));
6369+
hasTaxes("EUR", 0.00), hasFees("EUR", 0.00), //
6370+
hasExDate("2024-12-16T00:00")))));
63356371
}
63366372

63376373
@Test

0 commit comments

Comments
 (0)