Skip to content

Commit 20df9d3

Browse files
authored
1 parent 853e2c3 commit 20df9d3

7 files changed

Lines changed: 675 additions & 0 deletions

File tree

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
PDFBox Version: 3.0.3
2+
Portfolio Performance Version: 0.76.3
3+
System: win32 | x86_64 | 21.0.5+11-LTS | Azul Systems, Inc.
4+
-----------------------------------------
5+
vdk bank nv
6+
Keizer Karelstraat 15 | 9000 Gent | T 09 267 32 11 | vdk@vdk.be | vdk.be
7+
BTW BE 0400.067.788 RPR GENT | FSMA 020230 A | IBAN BE65 8900 0005 5096 | BIC VDSPBE91
8+
Overzicht transactie voor rekening 742-7257949-88 op 21/04/2025
9+
10+
Borderelreferentie: 2025.000123456789 Orderreferentie: 395693
11+
12+
13+
Uitvoering op: 21/04/2025 om 19:44:00
14+
Afrekendatum: 22/04/2025
15+
Plaats van uitvoering: Knight
16+
Type order: Limiet order
17+
Datum order: 21/04/2025
18+
ISIN: US0138721065
19+
20+
Je aankoop van: Alcoa Corp
21+
Aantal delen: 100
22+
Koers: 22,9856 USD
23+
24+
Totaal bedrag: 2.298,56 USD
25+
Makelaarsloon: 35,31 USD
26+
Vaste kosten: 5,65 USD
27+
Beurstaks (0,35%): 8,04 USD
28+
Netto bedrag: 2.347,56 USD
29+
Wisselkoers USD/EUR 1,146626
30+
Netto afrekening op BE12 7740 1745 3286 door afhaling van: -2.047,36 EUR
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
PDFBox Version: 3.0.3
2+
Portfolio Performance Version: 0.76.3
3+
System: win32 | x86_64 | 21.0.5+11-LTS | Azul Systems, Inc.
4+
-----------------------------------------
5+
vdk bank nv
6+
Sint-Michielsplein 16 | 9000 Gent | T 09 267 32 11 | vdk@vdk.be | vdk.be
7+
BTW BE 0400.067.788 RPR GENT | FSMA 020230 A | IBAN BE65 8900 0005 5096 | BIC VDSPBE91
8+
Overzicht transactie voor rekening 834-9216848-07 op 17/01/2024
9+
10+
Borderelreferentie: 2024.000123456789 Referentie: D046336-758
11+
12+
13+
Uitbetaling dividend in contanten van BE0003470755
14+
Ex-datum: 15/01/2024
15+
Betaaldatum: 17/01/2024
16+
17+
18+
Naam: Solvay NV
19+
Positie op ex-datum: 100
20+
Aan: 1,62 EUR
21+
22+
23+
Totaal bedrag: 162,00 EUR
24+
Belgische roerende voorheffing (30,00%): 48,60 EUR
25+
Netto bedrag: 113,40 EUR
26+
Netto afrekening op BE25 5623 1542 4335 door storting van: 113,40 EUR
Lines changed: 245 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,245 @@
1+
package name.abuchen.portfolio.datatransfer.pdf.vdkbanknv;
2+
3+
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.check;
4+
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.dividend;
5+
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasAmount;
6+
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasCurrencyCode;
7+
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasDate;
8+
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasFees;
9+
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasForexGrossValue;
10+
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasGrossValue;
11+
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasIsin;
12+
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasName;
13+
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasNote;
14+
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasShares;
15+
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasSource;
16+
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasTaxes;
17+
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasTicker;
18+
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasWkn;
19+
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.purchase;
20+
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.sale;
21+
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.security;
22+
import static name.abuchen.portfolio.datatransfer.ExtractorTestUtilities.countAccountTransactions;
23+
import static name.abuchen.portfolio.datatransfer.ExtractorTestUtilities.countBuySell;
24+
import static name.abuchen.portfolio.datatransfer.ExtractorTestUtilities.countSecurities;
25+
import static org.hamcrest.CoreMatchers.hasItem;
26+
import static org.hamcrest.CoreMatchers.is;
27+
import static org.hamcrest.MatcherAssert.assertThat;
28+
import static org.hamcrest.collection.IsEmptyCollection.empty;
29+
30+
import java.util.ArrayList;
31+
import java.util.List;
32+
33+
import org.junit.Test;
34+
35+
import name.abuchen.portfolio.datatransfer.ImportAction.Status;
36+
import name.abuchen.portfolio.datatransfer.actions.AssertImportActions;
37+
import name.abuchen.portfolio.datatransfer.actions.CheckCurrenciesAction;
38+
import name.abuchen.portfolio.datatransfer.pdf.PDFInputFile;
39+
import name.abuchen.portfolio.datatransfer.pdf.VDKBankNVPDFExtractor;
40+
import name.abuchen.portfolio.model.Client;
41+
import name.abuchen.portfolio.model.Portfolio;
42+
import name.abuchen.portfolio.model.PortfolioTransaction;
43+
import name.abuchen.portfolio.model.Security;
44+
45+
@SuppressWarnings("nls")
46+
public class VDKBankNVPDFExtractorTest
47+
{
48+
@Test
49+
public void testAankoop01()
50+
{
51+
var extractor = new VDKBankNVPDFExtractor(new Client());
52+
53+
List<Exception> errors = new ArrayList<>();
54+
55+
var results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Aankoop01.txt"), errors);
56+
57+
assertThat(errors, empty());
58+
assertThat(countSecurities(results), is(1L));
59+
assertThat(countBuySell(results), is(1L));
60+
assertThat(countAccountTransactions(results), is(0L));
61+
assertThat(results.size(), is(2));
62+
new AssertImportActions().check(results, "EUR");
63+
64+
// check security
65+
assertThat(results, hasItem(security( //
66+
hasIsin("US0138721065"), hasWkn(null), hasTicker(null), //
67+
hasName("Alcoa Corp"), //
68+
hasCurrencyCode("USD"))));
69+
70+
// check buy sell transaction
71+
assertThat(results, hasItem(purchase( //
72+
hasDate("2025-04-21T19:44"), hasShares(100.00), //
73+
hasSource("Aankoop01.txt"), //
74+
hasNote("Borderel-Ref.: 2025.000123456789 | Ord.-Ref.: 395693"), //
75+
hasAmount("EUR", 2047.36), hasGrossValue("EUR", 2004.63), //
76+
hasForexGrossValue("USD", 2298.56), //
77+
hasTaxes("EUR", (8.04 / 1.146626)), hasFees("EUR", 35.72))));
78+
}
79+
80+
@Test
81+
public void testAankoop01WithSecurityInEUR()
82+
{
83+
var security = new Security("Alcoa Corp", "EUR");
84+
security.setIsin("US0138721065");
85+
86+
var client = new Client();
87+
client.addSecurity(security);
88+
89+
var extractor = new VDKBankNVPDFExtractor(client);
90+
91+
List<Exception> errors = new ArrayList<>();
92+
93+
var results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Aankoop01.txt"), errors);
94+
95+
assertThat(errors, empty());
96+
assertThat(countSecurities(results), is(0L));
97+
assertThat(countBuySell(results), is(1L));
98+
assertThat(countAccountTransactions(results), is(0L));
99+
assertThat(results.size(), is(1));
100+
new AssertImportActions().check(results, "EUR");
101+
102+
// check buy sell transaction
103+
assertThat(results, hasItem(purchase( //
104+
hasDate("2025-04-21T19:44"), hasShares(100.00), //
105+
hasSource("Aankoop01.txt"), //
106+
hasNote("Borderel-Ref.: 2025.000123456789 | Ord.-Ref.: 395693"), //
107+
hasAmount("EUR", 2047.36), hasGrossValue("EUR", 2004.63), //
108+
hasTaxes("EUR", (8.04 / 1.146626)), hasFees("EUR", 35.72), //
109+
check(tx -> {
110+
var c = new CheckCurrenciesAction();
111+
var s = c.process((PortfolioTransaction) tx, new Portfolio());
112+
assertThat(s, is(Status.OK_STATUS));
113+
}))));
114+
}
115+
116+
@Test
117+
public void testVerkoop01()
118+
{
119+
var extractor = new VDKBankNVPDFExtractor(new Client());
120+
121+
List<Exception> errors = new ArrayList<>();
122+
123+
var results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Verkoop01.txt"), errors);
124+
125+
assertThat(errors, empty());
126+
assertThat(countSecurities(results), is(1L));
127+
assertThat(countBuySell(results), is(1L));
128+
assertThat(countAccountTransactions(results), is(0L));
129+
assertThat(results.size(), is(2));
130+
new AssertImportActions().check(results, "EUR");
131+
132+
// check security
133+
assertThat(results, hasItem(security( //
134+
hasIsin("BE0974320526"), hasWkn(null), hasTicker(null), //
135+
hasName("Umicore NV"), //
136+
hasCurrencyCode("EUR"))));
137+
138+
// check buy sell transaction
139+
assertThat(results, hasItem(sale( //
140+
hasDate("2025-04-03T12:45:20"), hasShares(100.00), //
141+
hasSource("Verkoop01.txt"), //
142+
hasNote("Borderel-Ref.: 2025.000123456789 | Ord.-Ref.: 297671"), //
143+
hasAmount("EUR", 852.07), hasGrossValue("EUR", 870.00), //
144+
hasTaxes("EUR", 3.05), hasFees("EUR", 9.92 + 4.96))));
145+
}
146+
147+
@Test
148+
public void testVerkoop02()
149+
{
150+
var extractor = new VDKBankNVPDFExtractor(new Client());
151+
152+
List<Exception> errors = new ArrayList<>();
153+
154+
var results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Verkoop02.txt"), errors);
155+
156+
assertThat(errors, empty());
157+
assertThat(countSecurities(results), is(1L));
158+
assertThat(countBuySell(results), is(1L));
159+
assertThat(countAccountTransactions(results), is(0L));
160+
assertThat(results.size(), is(2));
161+
new AssertImportActions().check(results, "EUR");
162+
163+
// check security
164+
assertThat(results, hasItem(security( //
165+
hasIsin("NO0010786288"), hasWkn(null), hasTicker(null), //
166+
hasName("Norwegian Govt 1,750% 17/02/2027"), //
167+
hasCurrencyCode("NOK"))));
168+
169+
// check buy sell transaction
170+
assertThat(results, hasItem(sale( //
171+
hasDate("2024-07-19T12:44:20"), hasShares(800.00), //
172+
hasSource("Verkoop02.txt"), //
173+
hasNote("Borderel-Ref.: 2024.000123456789 | Ord.-Ref.: 088618"), //
174+
hasAmount("EUR", 6449.78), hasGrossValue("EUR", 6493.67), //
175+
hasForexGrossValue("NOK", 76443.20), //
176+
hasTaxes("EUR", 0.00), hasFees("EUR", 43.89))));
177+
}
178+
179+
@Test
180+
public void testVerkoop02WithSecurityInEUR()
181+
{
182+
var security = new Security("Norwegian Govt 1,750% 17/02/2027", "EUR");
183+
security.setIsin("NO0010786288");
184+
185+
var client = new Client();
186+
client.addSecurity(security);
187+
188+
var extractor = new VDKBankNVPDFExtractor(client);
189+
190+
List<Exception> errors = new ArrayList<>();
191+
192+
var results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Verkoop02.txt"), errors);
193+
194+
assertThat(errors, empty());
195+
assertThat(countSecurities(results), is(0L));
196+
assertThat(countBuySell(results), is(1L));
197+
assertThat(countAccountTransactions(results), is(0L));
198+
assertThat(results.size(), is(1));
199+
new AssertImportActions().check(results, "EUR");
200+
201+
// check buy sell transaction
202+
assertThat(results, hasItem(sale( //
203+
hasDate("2024-07-19T12:44:20"), hasShares(800.00), //
204+
hasSource("Verkoop02.txt"), //
205+
hasNote("Borderel-Ref.: 2024.000123456789 | Ord.-Ref.: 088618"), //
206+
hasAmount("EUR", 6449.78), hasGrossValue("EUR", 6493.67), //
207+
hasTaxes("EUR", 0.00), hasFees("EUR", 43.89), //
208+
check(tx -> {
209+
var c = new CheckCurrenciesAction();
210+
var s = c.process((PortfolioTransaction) tx, new Portfolio());
211+
assertThat(s, is(Status.OK_STATUS));
212+
}))));
213+
}
214+
215+
@Test
216+
public void testDividende01()
217+
{
218+
var extractor = new VDKBankNVPDFExtractor(new Client());
219+
220+
List<Exception> errors = new ArrayList<>();
221+
222+
var results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividend01.txt"), errors);
223+
224+
assertThat(errors, empty());
225+
assertThat(countSecurities(results), is(1L));
226+
assertThat(countBuySell(results), is(0L));
227+
assertThat(countAccountTransactions(results), is(1L));
228+
assertThat(results.size(), is(2));
229+
new AssertImportActions().check(results, "EUR");
230+
231+
// check security
232+
assertThat(results, hasItem(security( //
233+
hasIsin("BE0003470755"), hasWkn(null), hasTicker(null), //
234+
hasName("Solvay NV"), //
235+
hasCurrencyCode("EUR"))));
236+
237+
// check dividends transaction
238+
assertThat(results, hasItem(dividend( //
239+
hasDate("2024-01-17T00:00"), hasShares(100.00), //
240+
hasSource("Dividend01.txt"), //
241+
hasNote("Borderel-Ref.: 2024.000123456789 | Ord.-Ref.: D046336-758"), //
242+
hasAmount("EUR", 113.40), hasGrossValue("EUR", 162.00), //
243+
hasTaxes("EUR", 48.60), hasFees("EUR", 0.00))));
244+
}
245+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
PDFBox Version: 3.0.3
2+
Portfolio Performance Version: 0.76.3
3+
System: win32 | x86_64 | 21.0.5+11-LTS | Azul Systems, Inc.
4+
-----------------------------------------
5+
vdk bank nv
6+
Keizer Karelstraat 15 | 9000 Gent | T 09 267 32 11 | vdk@vdk.be | vdk.be
7+
BTW BE 0400.067.788 RPR GENT | FSMA 020230 A | IBAN BE65 8900 0005 5096 | BIC VDSPBE91
8+
Overzicht transactie voor rekening 748-9395594-39 op 03/04/2025
9+
10+
Borderelreferentie: 2025.000123456789 Orderreferentie: 297671
11+
12+
13+
Uitvoering op: 03/04/2025 om 12:45:20
14+
Afrekendatum: 07/04/2025
15+
Plaats van uitvoering: Euronext BXL
16+
Type order: Limiet order
17+
Datum order: 03/04/2025
18+
ISIN: BE0974320526
19+
20+
Je verkoop van: Umicore NV
21+
Aantal delen: 100
22+
Koers: 8,7 EUR
23+
24+
Totaal bedrag: 870,00 EUR
25+
Makelaarsloon: 9,92 EUR
26+
Vaste kosten: 4,96 EUR
27+
Beurstaks (0,35%): 3,05 EUR
28+
Netto bedrag: 852,07 EUR
29+
Netto afrekening op BE17 1131 0380 5536 door storting van: 852,07 EUR
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
PDFBox Version: 3.0.3
2+
Portfolio Performance Version: 0.76.3
3+
System: win32 | x86_64 | 21.0.5+11-LTS | Azul Systems, Inc.
4+
-----------------------------------------
5+
vdk bank nv
6+
Sint-Michielsplein 16 | 9000 Gent | T 09 267 32 11 | vdk@vdk.be | vdk.be
7+
BTW BE 0400.067.788 RPR GENT | FSMA 020230 A | IBAN BE65 8900 0005 5096 | BIC VDSPBE91
8+
Overzicht transactie voor rekening 902-7449079-02 op 19/07/2024
9+
10+
Borderelreferentie: 2024.000123456789 Orderreferentie: 088618
11+
12+
13+
Uitvoering op: 19/07/2024 om 12:44:20
14+
Afrekendatum: 23/07/2024
15+
Plaats van uitvoering: BTFE
16+
Type order: Markt order
17+
Datum order: 19/07/2024
18+
ISIN: NO0010786288
19+
20+
Je verkoop van: Norwegian Govt 1,750% 17/02/2027
21+
Nominaal bedrag: 80.000,00 NOK
22+
Verlopen interest: 602,19 NOK
23+
Aantal verlopen dagen: 157 / 365
24+
Koers: 95,554 %
25+
26+
Totaal bedrag: 76.443,20 NOK
27+
Makelaarsloon: 462,27 NOK
28+
Vaste kosten: 58,48 NOK
29+
Netto bedrag: 76.524,64 NOK
30+
Wisselkoers NOK/EUR 11,864688
31+
Netto afrekening op BE36 3552 0281 7428 door storting van: 6.449,78 EUR

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ public PDFImportAssistant(Client client, List<File> files)
131131
extractors.add(new UnicreditPDFExtractor(client));
132132
extractors.add(new VanguardGroupEuropePDFExtractor(client));
133133
extractors.add(new VBankAGPDFExtractor(client));
134+
extractors.add(new VDKBankNVPDFExtractor(client));
134135
extractors.add(new VZVermoegenszentrumAGPDFExtractor(client));
135136
extractors.add(new WealthsimpleInvestmentsIncPDFExtractor(client));
136137
extractors.add(new WirBankPDFExtractor(client));

0 commit comments

Comments
 (0)