Skip to content

Commit d29723e

Browse files
buchenclaude
andcommitted
Updated RaiffeisenBankgruppe 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 69e5e30 commit d29723e

File tree

2 files changed

+46
-7
lines changed

2 files changed

+46
-7
lines changed

name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/raiffeisenbankgruppe/RaiffeisenbankgruppePDFExtractorTest.java

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasAmount;
88
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasCurrencyCode;
99
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasDate;
10+
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasExDate;
1011
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasFees;
1112
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasForexGrossValue;
1213
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasGrossValue;
@@ -858,6 +859,7 @@ public void testDividende01()
858859
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
859860

860861
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2021-04-30T00:00")));
862+
assertThat(transaction.getExDate(), is(LocalDateTime.parse("2021-04-28T00:00")));
861863
assertThat(transaction.getShares(), is(Values.Share.factorize(90)));
862864
assertThat(transaction.getSource(), is("Dividende01.txt"));
863865
assertNull(transaction.getNote());
@@ -903,6 +905,7 @@ public void testDividende02()
903905
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
904906

905907
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2021-12-20T00:00")));
908+
assertThat(transaction.getExDate(), is(LocalDateTime.parse("2021-12-01T00:00")));
906909
assertThat(transaction.getShares(), is(Values.Share.factorize(100)));
907910
assertThat(transaction.getSource(), is("Dividende02.txt"));
908911
assertThat(transaction.getNote(), is("Abrechnungsnr. 85127406360 | Quartalsdividende"));
@@ -949,6 +952,7 @@ public void testDividende02WithSecurityInEUR()
949952
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
950953

951954
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2021-12-20T00:00")));
955+
assertThat(transaction.getExDate(), is(LocalDateTime.parse("2021-12-01T00:00")));
952956
assertThat(transaction.getShares(), is(Values.Share.factorize(100)));
953957
assertThat(transaction.getSource(), is("Dividende02.txt"));
954958
assertThat(transaction.getNote(), is("Abrechnungsnr. 85127406360 | Quartalsdividende"));
@@ -1000,6 +1004,7 @@ public void testDividende03()
10001004
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
10011005

10021006
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2022-10-28T00:00")));
1007+
assertThat(transaction.getExDate(), is(LocalDateTime.parse("2022-10-04T00:00")));
10031008
assertThat(transaction.getShares(), is(Values.Share.factorize(100)));
10041009
assertThat(transaction.getSource(), is("Dividende03.txt"));
10051010
assertThat(transaction.getNote(), is("Abrechnungsnr. 88888888888 | Quartalsdividende"));
@@ -1047,6 +1052,7 @@ public void testDividende03WithSecurityInEUR()
10471052
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
10481053

10491054
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2022-10-28T00:00")));
1055+
assertThat(transaction.getExDate(), is(LocalDateTime.parse("2022-10-04T00:00")));
10501056
assertThat(transaction.getShares(), is(Values.Share.factorize(100)));
10511057
assertThat(transaction.getSource(), is("Dividende03.txt"));
10521058
assertThat(transaction.getNote(), is("Abrechnungsnr. 88888888888 | Quartalsdividende"));
@@ -1099,6 +1105,7 @@ public void testDividende04()
10991105
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
11001106

11011107
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2022-11-03T00:00")));
1108+
assertThat(transaction.getExDate(), is(LocalDateTime.parse("2022-10-06T00:00")));
11021109
assertThat(transaction.getShares(), is(Values.Share.factorize(400)));
11031110
assertThat(transaction.getSource(), is("Dividende04.txt"));
11041111
assertThat(transaction.getNote(), is("Abrechnungsnr. 80642931040 | Quartalsdividende"));
@@ -1146,6 +1153,7 @@ public void testDividende04WithSecurityInEUR()
11461153
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
11471154

11481155
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2022-11-03T00:00")));
1156+
assertThat(transaction.getExDate(), is(LocalDateTime.parse("2022-10-06T00:00")));
11491157
assertThat(transaction.getShares(), is(Values.Share.factorize(400)));
11501158
assertThat(transaction.getSource(), is("Dividende04.txt"));
11511159
assertThat(transaction.getNote(), is("Abrechnungsnr. 80642931040 | Quartalsdividende"));
@@ -1198,6 +1206,7 @@ public void testDividende05()
11981206
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
11991207

12001208
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2023-01-17T00:00")));
1209+
assertThat(transaction.getExDate(), is(LocalDateTime.parse("2023-01-17T00:00")));
12011210
assertThat(transaction.getShares(), is(Values.Share.factorize(221)));
12021211
assertThat(transaction.getSource(), is("Dividende05.txt"));
12031212
assertNull(transaction.getNote());
@@ -1244,6 +1253,7 @@ public void testDividende05WithSecurityInEUR()
12441253
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
12451254

12461255
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2023-01-17T00:00")));
1256+
assertThat(transaction.getExDate(), is(LocalDateTime.parse("2023-01-17T00:00")));
12471257
assertThat(transaction.getShares(), is(Values.Share.factorize(221)));
12481258
assertThat(transaction.getSource(), is("Dividende05.txt"));
12491259
assertNull(transaction.getNote());
@@ -1296,6 +1306,7 @@ public void testDividende06()
12961306
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
12971307

12981308
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2023-01-09T00:00")));
1309+
assertThat(transaction.getExDate(), is(LocalDateTime.parse("2022-12-19T00:00")));
12991310
assertThat(transaction.getShares(), is(Values.Share.factorize(70)));
13001311
assertThat(transaction.getSource(), is("Dividende06.txt"));
13011312
assertNull(transaction.getNote());
@@ -1342,6 +1353,7 @@ public void testDividende07()
13421353
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
13431354

13441355
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2023-04-12T00:00")));
1356+
assertThat(transaction.getExDate(), is(LocalDateTime.parse("2023-04-06T00:00")));
13451357
assertThat(transaction.getShares(), is(Values.Share.factorize(111)));
13461358
assertThat(transaction.getSource(), is("Dividende07.txt"));
13471359
assertThat(transaction.getNote(), is("Abrechnungsnr. 66666666666"));
@@ -1413,7 +1425,8 @@ public void testDividende09()
14131425

14141426
// check dividends transaction
14151427
assertThat(results, hasItem(dividend( //
1416-
hasDate("2020-04-15T00:00"), hasShares(221), //
1428+
hasDate("2020-04-15T00:00"), hasExDate("2020-04-15T00:00"), //
1429+
hasShares(221), //
14171430
hasSource("Dividende09.txt"), //
14181431
hasNote(null), //
14191432
hasAmount("EUR", 82.99), hasGrossValue("EUR", 97.81), //
@@ -1448,7 +1461,8 @@ public void testDividende09WithSecurityInEUR()
14481461

14491462
// check dividends transaction
14501463
assertThat(results, hasItem(dividend( //
1451-
hasDate("2020-04-15T00:00"), hasShares(221), //
1464+
hasDate("2020-04-15T00:00"), hasExDate("2020-04-15T00:00"), //
1465+
hasShares(221), //
14521466
hasSource("Dividende09.txt"), //
14531467
hasNote(null), //
14541468
hasAmount("EUR", 82.99), hasGrossValue("EUR", 97.81), //
@@ -1489,7 +1503,8 @@ public void testDividende10()
14891503

14901504
// check dividends transaction
14911505
assertThat(results, hasItem(dividend( //
1492-
hasDate("2021-08-16T00:00"), hasShares(7.01), //
1506+
hasDate("2021-08-16T00:00"), hasExDate("2021-08-16T00:00"), //
1507+
hasShares(7.01), //
14931508
hasSource("Dividende10.txt"), //
14941509
hasNote(null), //
14951510
hasAmount("EUR", 5.59), hasGrossValue("EUR", 8.34), //
@@ -1523,7 +1538,8 @@ public void testDividende11()
15231538

15241539
// check dividends transaction
15251540
assertThat(results, hasItem(dividend( //
1526-
hasDate("2024-05-02T00:00"), hasShares(25.00), //
1541+
hasDate("2024-05-02T00:00"), hasExDate("2024-04-29T00:00"), //
1542+
hasShares(25.00), //
15271543
hasSource("Dividende11.txt"), //
15281544
hasNote("Abrechnungsnr. 76560429680"), //
15291545
hasAmount("EUR", 40.50), hasGrossValue("EUR", 55.00), //
@@ -1557,7 +1573,8 @@ public void testDividende12()
15571573

15581574
// check dividends transaction
15591575
assertThat(results, hasItem(dividend( //
1560-
hasDate("2023-09-25T00:00"), hasShares(29.00), //
1576+
hasDate("2023-09-25T00:00"), hasExDate("2023-08-30T00:00"), //
1577+
hasShares(29.00), //
15611578
hasSource("Dividende12.txt"), //
15621579
hasNote("Abrechnungsnr. 76560429680 | Quartalsdividende"), //
15631580
hasAmount("EUR", 16.16), hasGrossValue("EUR", 21.71), //
@@ -1593,7 +1610,8 @@ public void testDividende12WithSecurityInEUR()
15931610

15941611
// check dividends transaction
15951612
assertThat(results, hasItem(dividend( //
1596-
hasDate("2023-09-25T00:00"), hasShares(29.00), //
1613+
hasDate("2023-09-25T00:00"), hasExDate("2023-08-30T00:00"), //
1614+
hasShares(29.00), //
15971615
hasSource("Dividende12.txt"), //
15981616
hasNote("Abrechnungsnr. 76560429680 | Quartalsdividende"), //
15991617
hasAmount("EUR", 16.16), hasGrossValue("EUR", 21.71), //
@@ -1634,7 +1652,8 @@ public void testDividende13()
16341652

16351653
// check dividends transaction
16361654
assertThat(results, hasItem(dividend( //
1637-
hasDate("2024-09-11T00:00"), hasShares(254.00), //
1655+
hasDate("2024-09-11T00:00"), hasExDate("2024-09-06T00:00"), //
1656+
hasShares(254.00), //
16381657
hasSource("Dividende13.txt"), //
16391658
hasNote("Ref.-Nr.: 17518731738"), //
16401659
hasAmount("CHF", 392.94), hasGrossValue("CHF", 604.52), //

name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/RaiffeisenBankgruppePDFExtractor.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -401,6 +401,26 @@ private void addDividendeTransaction()
401401
.match("^Gutschrift Valuta (?<date>[\\d]{2}\\. .* [\\d]{4}).*$") //
402402
.assign((t, v) -> t.setDateTime(asDate(v.get("date")))))
403403

404+
// @formatter:off
405+
// Ex-Tag 01.12.2021 Art der Dividende Quartalsdividende
406+
// Ex-Tag 06.04.2023
407+
// Extag: 28.04.2021
408+
// Ex-Datum 6. September 2024
409+
// @formatter:on
410+
.optionalOneOf( //
411+
section -> section //
412+
.attributes("exDate") //
413+
.match("^Ex\\-Tag (?<exDate>[\\d]{2}\\.[\\d]{2}\\.[\\d]{4}).*$") //
414+
.assign((t, v) -> t.setExDate(asDate(v.get("exDate")))), //
415+
section -> section //
416+
.attributes("exDate") //
417+
.match("^Extag: (?<exDate>[\\d]{2}\\.[\\d]{2}\\.[\\d]{4}).*$") //
418+
.assign((t, v) -> t.setExDate(asDate(v.get("exDate")))), //
419+
section -> section //
420+
.attributes("exDate") //
421+
.match("^Ex-Datum (?<exDate>[\\d]{1,2}\\. .* [\\d]{4}).*$") //
422+
.assign((t, v) -> t.setExDate(asDate(v.get("exDate")))))
423+
404424
.oneOf( //
405425
// @formatter:off
406426
// Zu Gunsten IBAN AT99 9999 9000 0011 1111 110,02 EUR

0 commit comments

Comments
 (0)