Skip to content

Commit

Permalink
Modify ING Diba PDF-Importer to support new transaction
Browse files Browse the repository at this point in the history
  • Loading branch information
Nirus2000 committed Jan 18, 2024
1 parent ef62d3a commit b0df428
Show file tree
Hide file tree
Showing 4 changed files with 166 additions and 9 deletions.
@@ -0,0 +1,38 @@
PDFBox Version: 1.8.17
Portfolio Performance Version: 0.67.1
-----------------------------------------
ING-DiBa AG · 60628 Frankfurt am Main
Depotinhaber: wBfeWQzQR HQuqhL
Herrn Direkt-Depot Nr.: 4868266015
czLLoFgTH zsmzzg Datum: 02.01.2024
cfoDSdXzLrh. 6 Seite: 1 von 2
28674 Berlin
Zinsgutschrift
ISIN (WKN) DE000A3MP4P9 (A3MP4P)
Wertpapierbezeichnung 4,00000% PCC SE Inh.-Teilschuldv. v.21(22/26)
Nominale 5.000,00 EUR
Zins-/Dividendensatz 1,00 %
Kupon-Nr. / per 01.01.2024
Zinstermin 01. Ja/Ap/Jl/Ok
Ex-Tag 02.01.2024
Zahltag 01.01.2024
Brutto EUR 50,00
Gesamtbetrag zu Ihren Gunsten EUR 50,00
Abrechnungs-IBAN TH21 5001 0517 3241 1824 47
Valuta 02.01.2024
Jahressteuerbescheinigung folgt.
Weitere steuerliche Informationen entnehmen Sie bitte der Rückseite.
ING-DiBa AG · Theodor-Heuss-Allee 2 · 60486 Frankfurt am Main · Vorsitzende des Aufsichtsrates: Susanne Klöß-Braekler · Vorstand: Nick Jue (Vorsitzender),
Michael Clijdesdale, Eddy Henning, Sigrid Kozmiensky, Daniel Llano Manibardo, Dr. Ralph Müller · Sitz: Frankfurt am Main · AG Frankfurt am Main · HRB 7727
Steuernummer: 047 220 2800 4 · USt-IdNr.: DE 114 103 475 · Internet: www.ing.de · E-Mail: info@ing.de · BIC: INGDDEFFXXX · Mitglied im Einlagensicherungsfonds
Depotinhaber: zgmnqGPNs Zcsduc
Direkt-Depot Nr.: 6054747228
Datum: 02.01.2024
Seite: 2 von 2
ISIN (WKN) DE000A3MP4P9 (A3MP4P)
KapSt-pflichtiger Kapitalertrag 50,00 EUR
Mit Sparer-Pauschbetrag verrechnet -50,00 EUR
Sparer-Pauschbetrag vor Ertrag 123,45 EUR
Sparer-Pauschbetrag nach Ertrag 73,45 EUR
Bei Fragen besuchen Sie uns einfach unter www.ing.de/wertpapierwissen - da gibt es viele schnelle
Antworten. Oder senden Sie uns eine E-Mail an info@ing.de .
@@ -1,6 +1,7 @@
package name.abuchen.portfolio.datatransfer.pdf.ingdiba;

import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.check;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.dividend;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasAmount;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasCurrencyCode;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasDate;
Expand All @@ -18,6 +19,8 @@
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.purchase;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.sale;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.security;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.taxes;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.withFailureMessage;
import static name.abuchen.portfolio.datatransfer.ExtractorTestUtilities.countAccountTransactions;
import static name.abuchen.portfolio.datatransfer.ExtractorTestUtilities.countBuySell;
import static name.abuchen.portfolio.datatransfer.ExtractorTestUtilities.countSecurities;
Expand Down Expand Up @@ -1609,6 +1612,39 @@ public void testVorabpauschale02()
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00))));
}

@Test
public void testVorabpauschale03()
{
INGDiBaPDFExtractor extractor = new INGDiBaPDFExtractor(new Client());

List<Exception> errors = new ArrayList<>();

List<Item> results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Vorabpauschale03.txt"), errors);

assertThat(errors, empty());
assertThat(countSecurities(results), is(1L));
assertThat(countBuySell(results), is(0L));
assertThat(countAccountTransactions(results), is(1L));
assertThat(results.size(), is(2));
new AssertImportActions().check(results, CurrencyUnit.EUR);

// check security
assertThat(results, hasItem(security( //
hasIsin("IE00BSPLC413"), hasWkn("A12HU5"), hasTicker(null), //
hasName("SPDR MSCI USA Sm.C.Val.W.UETF Registered Shares o.N."), //
hasCurrencyCode("EUR"))));

// check taxes transaction
assertThat(results, hasItem(withFailureMessage( //
Messages.MsgErrorTransactionTypeNotSupported, //
taxes( //
hasDate("2024-01-02T00:00"), hasShares(60.00), //
hasSource("Vorabpauschale03.txt"), //
hasNote(null), //
hasAmount("EUR", 0.00), hasGrossValue("EUR", 0.00), //
hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))));
}

@Test
public void testDividende01()
{
Expand Down Expand Up @@ -3026,6 +3062,37 @@ public void testDividende19WithSecurityinEUR()
assertThat(s, is(Status.OK_STATUS));
}

@Test
public void testDividende20()
{
INGDiBaPDFExtractor extractor = new INGDiBaPDFExtractor(new Client());

List<Exception> errors = new ArrayList<>();

List<Item> results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende20.txt"), errors);

assertThat(errors, empty());
assertThat(countSecurities(results), is(1L));
assertThat(countBuySell(results), is(0L));
assertThat(countAccountTransactions(results), is(1L));
assertThat(results.size(), is(2));
new AssertImportActions().check(results, CurrencyUnit.EUR);

// check security
assertThat(results, hasItem(security( //
hasIsin("DE000A3MP4P9"), hasWkn("A3MP4P"), hasTicker(null), //
hasName("4,00000% PCC SE Inh.-Teilschuldv. v.21(22/26)"), //
hasCurrencyCode("EUR"))));

// check dividends transaction
assertThat(results, hasItem(dividend( //
hasDate("2024-01-02T00:00"), hasShares(50.00), //
hasSource("Dividende20.txt"), //
hasNote(null), //
hasAmount("EUR", 50.00), hasGrossValue("EUR", 50.00), //
hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))));
}

@Test
public void testDividendeStorno01()
{
Expand Down
@@ -0,0 +1,43 @@
PDFBox Version: 1.8.17
Portfolio Performance Version: 0.67.1
-----------------------------------------
ING-DiBa AG · 60628 Frankfurt am Main
Depotinhaber: RZEN veqd
Herrn Direkt-Depot Nr.: 0751021723
ZUPk rByb Datum: 17.01.2024
pZ IBxiAeowf 94 Seite: 1 von 2
14403 HfuSZqUF
Vorabpauschale
ISIN (WKN) IE00BSPLC413 (A12HU5)
Wertpapierbezeichnung SPDR MSCI USA Sm.C.Val.W.UETF
Registered Shares o.N.
Nominale 60,00 Stück
Vorabpauschale per Stück 0,86941603 EUR
Vorabpauschale mit Teilfreist. per St. 0,60859122 EUR
Ex-Tag 02.01.2024
Zahltag 02.01.2024
Gesamtbetrag zu Ihren Gunsten EUR 0,00
Abrechnungs-IBAN ix14 5511 8841 2561 2896 31
Sie erhalten eine neue Abrechnung.
Jahressteuerbescheinigung folgt.
Weitere steuerliche Informationen entnehmen Sie bitte der Rückseite.
ING-DiBa AG · Theodor-Heuss-Allee 2 · 60486 Frankfurt am Main · Vorsitzende des Aufsichtsrates: Susanne Klöß-Braekler · Vorstand: Nick Jue (Vorsitzender),
Michael Clijdesdale, Eddy Henning, Sigrid Kozmiensky, Daniel Llano Manibardo, Dr. Ralph Müller · Sitz: Frankfurt am Main · AG Frankfurt am Main · HRB 7727
Steuernummer: 047 220 2800 4 · USt-IdNr.: DE 114 103 475 · Internet: www.ing.de · E-Mail: info@ing.de · BIC: INGDDEFFXXX · Mitglied im Einlagensicherungsfonds
Depotinhaber: gnXP AmcP
Direkt-Depot Nr.: 4422164321
Datum: 17.01.2024
Seite: 2 von 2
ISIN (WKN) IE00BSPLC413 (A12HU5)
Vorabpauschale gem. § 18 InvStG 4,35 EUR
abzgl. Teilfreistellungsbetrag 30,00 % 1,31 EUR
Vorabpauschale nach Teilfreistellung 3,04 EUR
KapSt-pflichtiger Kapitalertrag 3,04 EUR
Mit Sparer-Pauschbetrag verrechnet -3,04 EUR
Sparer-Pauschbetrag vor Ertrag 1.000,00 EUR
Sparer-Pauschbetrag nach Ertrag 996,96 EUR
Wenn Sie Anteile unter dem Jahr erworben haben, fällt die Vorabpauschale nur für die seit
Kauf angefangenen Monate an. Jeder vorherige Monat mindert die Vorabpauschale damit
um ein Zwölftel.
Bei Fragen besuchen Sie uns einfach unter www.ing.de/wertpapierwissen - da gibt es viele schnelle
Antworten. Oder senden Sie uns eine E-Mail an info@ing.de .
Expand Up @@ -311,16 +311,23 @@ private void addDividendeTransaction()
// Nominale 1.000,00 EUR
// @formatter:on
section -> section //
.attributes("isin", "wkn", "name", "name1", "currency") //
.attributes("isin", "wkn", "name", "nameContinued", "currency") //
.match("^ISIN \\(WKN\\) (?<isin>[A-Z]{2}[A-Z0-9]{9}[0-9]) \\((?<wkn>[A-Z0-9]{6})\\)$") //
.match("^Wertpapierbezeichnung (?<name>.*)$") //
.match("^(?<name1>.*)$") //
.match("^(?<nameContinued>.*)$") //
.match("^Nominale [\\.,\\d]+ (?<currency>[\\w]{3})$") //
.assign((t, v) -> {
v.put("name", trim(v.get("name")) + " " + trim(v.get("name1")));

t.setSecurity(getOrCreateSecurity(v));
}))
.assign((t, v) -> t.setSecurity(getOrCreateSecurity(v))),
// @formatter:off
// ISIN (WKN) DE000A3MP4P9 (A3MP4P)
// Wertpapierbezeichnung 4,00000% PCC SE Inh.-Teilschuldv. v.21(22/26)
// Nominale 5.000,00 EUR
// @formatter:on
section -> section //
.attributes("isin", "wkn", "name", "currency") //
.match("^ISIN \\(WKN\\) (?<isin>[A-Z]{2}[A-Z0-9]{9}[0-9]) \\((?<wkn>[A-Z0-9]{6})\\)$") //
.match("^Wertpapierbezeichnung (?<name>.*)$") //
.match("^Nominale [\\.,\\d]+ (?<currency>[\\w]{3})$") //
.assign((t, v) -> t.setSecurity(getOrCreateSecurity(v))))

// @formatter:off
// Nominale 66,00 Stück
Expand Down Expand Up @@ -456,16 +463,18 @@ private void addAdvanceTaxTransaction()

// @formatter:off
// Valuta 04.01.2021
// Zahltag 02.01.2024
// @formatter:on
.section("date") //
.match("^Valuta (?<date>[\\d]{2}\\.[\\d]{2}\\.[\\d]{4})$") //
.match("^(Valuta|Zahltag) (?<date>[\\d]{2}\\.[\\d]{2}\\.[\\d]{4})$") //
.assign((t, v) -> t.setDateTime(asDate(v.get("date"))))

// @formatter:off
// Gesamtbetrag zu Ihren Lasten EUR - 0,16
// Gesamtbetrag zu Ihren Gunsten EUR 0,00
// @formatter:on
.section("currency", "amount") //
.match("^Gesamtbetrag zu Ihren Lasten (?<currency>[\\w]{3}) \\- (?<amount>[.,\\d]+)$") //
.match("^Gesamtbetrag zu Ihren (Lasten|Gunsten) (?<currency>[\\w]{3}) (\\- )?(?<amount>[.,\\d]+)$") //
.assign((t, v) -> {
t.setAmount(asAmount(v.get("amount")));
t.setCurrencyCode(asCurrencyCode(v.get("currency")));
Expand Down

0 comments on commit b0df428

Please sign in to comment.