Skip to content

Commit c1ad920

Browse files
buchenclaude
andcommitted
Updated SantanderConsumerBank 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 c1ad920

File tree

2 files changed

+20
-4
lines changed

2 files changed

+20
-4
lines changed

name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/santanderconsumerbank/SantanderConsumerBankPDFExtractorTest.java

Lines changed: 12 additions & 4 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.hasFees;
1010
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasForexGrossValue;
11+
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasExDate;
1112
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasGrossValue;
1213
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasIsin;
1314
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasName;
@@ -194,6 +195,7 @@ public void testDividende01()
194195
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
195196

196197
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2021-06-16T00:00")));
198+
assertThat(transaction.getExDate(), is(LocalDateTime.parse("2021-05-20T00:00")));
197199
assertThat(transaction.getShares(), is(Values.Share.factorize(2)));
198200
assertThat(transaction.getSource(), is("Dividende01.txt"));
199201
assertThat(transaction.getNote(), is("Abrechnungsnr. 00000000000 | Quartalsdividende"));
@@ -240,6 +242,7 @@ public void testDividende01WithSecurityInEUR()
240242
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
241243

242244
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2021-06-16T00:00")));
245+
assertThat(transaction.getExDate(), is(LocalDateTime.parse("2021-05-20T00:00")));
243246
assertThat(transaction.getShares(), is(Values.Share.factorize(2)));
244247
assertThat(transaction.getSource(), is("Dividende01.txt"));
245248
assertThat(transaction.getNote(), is("Abrechnungsnr. 00000000000 | Quartalsdividende"));
@@ -291,6 +294,7 @@ public void testDividende02()
291294
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
292295

293296
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2021-05-10T00:00")));
297+
assertThat(transaction.getExDate(), is(LocalDateTime.parse("2021-05-06T00:00")));
294298
assertThat(transaction.getShares(), is(Values.Share.factorize(2)));
295299
assertThat(transaction.getSource(), is("Dividende02.txt"));
296300
assertThat(transaction.getNote(), is("Abrechnungsnr. 0000000000"));
@@ -328,7 +332,8 @@ public void testDividende03()
328332

329333
// check dividends transaction
330334
assertThat(results, hasItem(dividend( //
331-
hasDate("2023-06-30T00:00"), hasShares(495.00), //
335+
hasDate("2023-06-30T00:00"), hasExDate("2023-06-15T00:00"), //
336+
hasShares(495.00), //
332337
hasSource("Dividende03.txt"), //
333338
hasNote("Abrechnungsnr. 00000000000"), //
334339
hasAmount("EUR", 327.96), hasGrossValue("EUR", 327.96), //
@@ -364,7 +369,8 @@ public void testDividende03WithSecurityInEUR()
364369

365370
// check dividends transaction
366371
assertThat(results, hasItem(dividend( //
367-
hasDate("2023-06-30T00:00"), hasShares(495.00), //
372+
hasDate("2023-06-30T00:00"), hasExDate("2023-06-15T00:00"), //
373+
hasShares(495.00), //
368374
hasSource("Dividende03.txt"), //
369375
hasNote("Abrechnungsnr. 00000000000"), //
370376
hasAmount("EUR", 327.96), hasGrossValue("EUR", 327.96), //
@@ -405,7 +411,8 @@ public void testDividende04()
405411

406412
// check dividends transaction
407413
assertThat(results, hasItem(dividend( //
408-
hasDate("2024-06-27T00:00"), hasShares(495.00), //
414+
hasDate("2024-06-27T00:00"), hasExDate("2024-06-13T00:00"), //
415+
hasShares(495.00), //
409416
hasSource("Dividende04.txt"), //
410417
hasNote("Abrechnungsnr. 00000000000"), //
411418
hasAmount("EUR", 291.95), hasGrossValue("EUR", 363.10), //
@@ -441,7 +448,8 @@ public void testDividende04WithSecurityInEUR()
441448

442449
// check dividends transaction
443450
assertThat(results, hasItem(dividend( //
444-
hasDate("2024-06-27T00:00"), hasShares(495.00), //
451+
hasDate("2024-06-27T00:00"), hasExDate("2024-06-13T00:00"), //
452+
hasShares(495.00), //
445453
hasSource("Dividende04.txt"), //
446454
hasNote("Abrechnungsnr. 00000000000"), //
447455
hasAmount("EUR", 291.95), hasGrossValue("EUR", 363.10), //

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,14 @@ private void addDividendeTransaction()
166166
.match("^Den Betrag buchen wir mit Wertstellung (?<date>[\\d]{2}\\.[\\d]{2}\\.[\\d]{4}) .*$") //
167167
.assign((t, v) -> t.setDateTime(asDate(v.get("date"))))
168168

169+
// @formatter:off
170+
// Ex-Tag 20.05.2021 Art der Dividende Quartalsdividende
171+
// Ex-Tag 06.05.2021
172+
// @formatter:on
173+
.section("exDate").optional() //
174+
.match("^Ex\\-Tag (?<exDate>[\\d]{2}\\.[\\d]{2}\\.[\\d]{4}).*$") //
175+
.assign((t, v) -> t.setExDate(asDate(v.get("exDate"))))
176+
169177
// @formatter:off
170178
// Ausmachender Betrag 2,07+ EUR
171179
// @formatter:on

0 commit comments

Comments
 (0)