Skip to content

Commit b37c471

Browse files
buchenclaude
andcommitted
Updated SBroker PDF Extractor to support parsing of dividend ex-date
Issue: #5439 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent e784ce3 commit b37c471

File tree

2 files changed

+29
-5
lines changed

2 files changed

+29
-5
lines changed

name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/sbroker/SBrokerPDFExtractorTest.java

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasAmount;
99
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasCurrencyCode;
1010
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasDate;
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;
@@ -1481,6 +1482,7 @@ public void testDividende04()
14811482
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
14821483

14831484
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2021-12-31T00:00")));
1485+
assertThat(transaction.getExDate(), is(LocalDateTime.parse("2021-12-22T00:00")));
14841486
assertThat(transaction.getShares(), is(Values.Share.factorize(250)));
14851487
assertThat(transaction.getSource(), is("Dividende04.txt"));
14861488
assertThat(transaction.getNote(), is("Abrechnungsnr."));
@@ -1528,6 +1530,7 @@ public void testDividende04WithSecurityInEUR()
15281530
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
15291531

15301532
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2021-12-31T00:00")));
1533+
assertThat(transaction.getExDate(), is(LocalDateTime.parse("2021-12-22T00:00")));
15311534
assertThat(transaction.getShares(), is(Values.Share.factorize(250)));
15321535
assertThat(transaction.getSource(), is("Dividende04.txt"));
15331536
assertThat(transaction.getNote(), is("Abrechnungsnr."));
@@ -1580,6 +1583,7 @@ public void testDividende05()
15801583
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
15811584

15821585
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2021-12-31T00:00")));
1586+
assertThat(transaction.getExDate(), is(LocalDateTime.parse("2021-12-22T00:00")));
15831587
assertThat(transaction.getShares(), is(Values.Share.factorize(150)));
15841588
assertThat(transaction.getSource(), is("Dividende05.txt"));
15851589
assertThat(transaction.getNote(), is("Abrechnungsnr."));
@@ -1627,6 +1631,7 @@ public void testDividende05WithSecurityInEUR()
16271631
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
16281632

16291633
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2021-12-31T00:00")));
1634+
assertThat(transaction.getExDate(), is(LocalDateTime.parse("2021-12-22T00:00")));
16301635
assertThat(transaction.getShares(), is(Values.Share.factorize(150)));
16311636
assertThat(transaction.getSource(), is("Dividende05.txt"));
16321637
assertThat(transaction.getNote(), is("Abrechnungsnr."));
@@ -1679,6 +1684,7 @@ public void testDividende06()
16791684
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
16801685

16811686
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2021-12-31T00:00")));
1687+
assertThat(transaction.getExDate(), is(LocalDateTime.parse("2021-11-29T00:00")));
16821688
assertThat(transaction.getShares(), is(Values.Share.factorize(250)));
16831689
assertThat(transaction.getSource(), is("Dividende06.txt"));
16841690
assertThat(transaction.getNote(), is("Abrechnungsnr."));
@@ -1726,6 +1732,7 @@ public void testDividende06WithSecurityInEUR()
17261732
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
17271733

17281734
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2021-12-31T00:00")));
1735+
assertThat(transaction.getExDate(), is(LocalDateTime.parse("2021-11-29T00:00")));
17291736
assertThat(transaction.getShares(), is(Values.Share.factorize(250)));
17301737
assertThat(transaction.getSource(), is("Dividende06.txt"));
17311738
assertThat(transaction.getNote(), is("Abrechnungsnr."));
@@ -1778,6 +1785,7 @@ public void testDividende07()
17781785
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
17791786

17801787
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2022-01-10T00:00")));
1788+
assertThat(transaction.getExDate(), is(LocalDateTime.parse("2021-12-22T00:00")));
17811789
assertThat(transaction.getShares(), is(Values.Share.factorize(100)));
17821790
assertThat(transaction.getSource(), is("Dividende07.txt"));
17831791
assertThat(transaction.getNote(), is("Abrechnungsnr. | Quartalsdividende"));
@@ -1825,6 +1833,7 @@ public void testDividende07WithSecurityInEUR()
18251833
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
18261834

18271835
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2022-01-10T00:00")));
1836+
assertThat(transaction.getExDate(), is(LocalDateTime.parse("2021-12-22T00:00")));
18281837
assertThat(transaction.getShares(), is(Values.Share.factorize(100)));
18291838
assertThat(transaction.getSource(), is("Dividende07.txt"));
18301839
assertThat(transaction.getNote(), is("Abrechnungsnr. | Quartalsdividende"));
@@ -1877,6 +1886,7 @@ public void testDividende08()
18771886
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
18781887

18791888
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2023-01-31T00:00")));
1889+
assertThat(transaction.getExDate(), is(LocalDateTime.parse("2023-01-20T00:00")));
18801890
assertThat(transaction.getShares(), is(Values.Share.factorize(57)));
18811891
assertThat(transaction.getSource(), is("Dividende08.txt"));
18821892
assertNull(transaction.getNote());
@@ -1923,6 +1933,7 @@ public void testDividende08WithSecurityInEUR()
19231933
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
19241934

19251935
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2023-01-31T00:00")));
1936+
assertThat(transaction.getExDate(), is(LocalDateTime.parse("2023-01-20T00:00")));
19261937
assertThat(transaction.getShares(), is(Values.Share.factorize(57)));
19271938
assertThat(transaction.getSource(), is("Dividende08.txt"));
19281939
assertNull(transaction.getNote());
@@ -2107,7 +2118,8 @@ public void testDividende11()
21072118

21082119
// check dividende transaction
21092120
assertThat(results, hasItem(dividend( //
2110-
hasDate("2023-05-09T00:00"), hasShares(28), //
2121+
hasDate("2023-05-09T00:00"), hasExDate("2023-04-28T00:00"), //
2122+
hasShares(28), //
21112123
hasSource("Dividende11.txt"), //
21122124
hasNote("Abrechnungsnr. 12345678 | Zwischendividende"), //
21132125
hasAmount("EUR", 9.10), hasGrossValue("EUR", 14.00), //
@@ -2213,7 +2225,8 @@ public void testDividende14()
22132225

22142226
// check dividende transaction
22152227
assertThat(results, hasItem(dividend( //
2216-
hasDate("2023-12-08T00:00"), hasShares(105.000), //
2228+
hasDate("2023-12-08T00:00"), hasExDate("2023-11-27T00:00"), //
2229+
hasShares(105.000), //
22172230
hasSource("Dividende14.txt"), //
22182231
hasNote("Abrechnungsnr. 84528768080 | Quartalsdividende"), //
22192232
hasAmount("EUR", 43.51), hasGrossValue("EUR", 58.89), //
@@ -2249,7 +2262,8 @@ public void testDividende14WithSecurityInEUR()
22492262

22502263
// check dividends transaction
22512264
assertThat(results, hasItem(dividend( //
2252-
hasDate("2023-12-08T00:00"), hasShares(105.000), //
2265+
hasDate("2023-12-08T00:00"), hasExDate("2023-11-27T00:00"), //
2266+
hasShares(105.000), //
22532267
hasSource("Dividende14.txt"), //
22542268
hasNote("Abrechnungsnr. 84528768080 | Quartalsdividende"), //
22552269
hasAmount("EUR", 43.51), hasGrossValue("EUR", 58.89), //
@@ -2290,7 +2304,8 @@ public void testDividende15()
22902304

22912305
// check dividende transaction
22922306
assertThat(results, hasItem(dividend( //
2293-
hasDate("2023-12-14T00:00"), hasShares(47.00), //
2307+
hasDate("2023-12-14T00:00"), hasExDate("2023-11-15T00:00"), //
2308+
hasShares(47.00), //
22942309
hasSource("Dividende15.txt"), //
22952310
hasNote("Abrechnungsnr. 84953682750 | Quartalsdividende"), //
22962311
hasAmount("EUR", 23.64), hasGrossValue("EUR", 31.99), //
@@ -2326,7 +2341,8 @@ public void testDividende15WithSecurityInEUR()
23262341

23272342
// check dividends transaction
23282343
assertThat(results, hasItem(dividend( //
2329-
hasDate("2023-12-14T00:00"), hasShares(47.00), //
2344+
hasDate("2023-12-14T00:00"), hasExDate("2023-11-15T00:00"), //
2345+
hasShares(47.00), //
23302346
hasSource("Dividende15.txt"), //
23312347
hasNote("Abrechnungsnr. 84953682750 | Quartalsdividende"), //
23322348
hasAmount("EUR", 23.64), hasGrossValue("EUR", 31.99), //

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -383,6 +383,14 @@ private void addDividendTransaction()
383383
.match("^Zahlbarkeitstag (?<date>[\\d]{2}\\.[\\d]{2}\\.[\\d]{4}).*$") //
384384
.assign((t, v) -> t.setDateTime(asDate(v.get("date")))))
385385

386+
// @formatter:off
387+
// Ex-Tag 22.12.2021 Art der Dividende Quartalsdividende
388+
// Ex-Tag 22.12.2021
389+
// @formatter:on
390+
.section("exDate").optional() //
391+
.match("^Ex\\-Tag (?<exDate>[\\d]{2}\\.[\\d]{2}\\.[\\d]{4}).*$") //
392+
.assign((t, v) -> t.setExDate(asDate(v.get("exDate"))))
393+
386394
.oneOf( //
387395
// @formatter:off
388396
// Wert Konto-Nr. Betrag zu Ihren Gunsten

0 commit comments

Comments
 (0)