Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix Degiro PDF-Importer to support other transaction format #2377

Merged
merged 1 commit into from
Aug 15, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2127,6 +2127,53 @@ public void testTransaktionsuebersicht22()
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00))));
}

@Test
public void testTransaktionsuebersicht23()
{
DegiroPDFExtractor extractor = new DegiroPDFExtractor(new Client());

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

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

assertThat(errors, empty());
assertThat(results.size(), is(4));

// check security
Security security = results.stream().filter(i -> i instanceof SecurityItem).findFirst()
.orElseThrow(IllegalArgumentException::new).getSecurity();
assertThat(security.getName(), is("GENERAL ELECTRIC"));
assertThat(security.getIsin(), is("US3696043013"));
assertThat(security.getCurrencyCode(), is(CurrencyUnit.USD));

// check 1st buy transaction
BuySellEntry entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem)
.collect(Collectors.toList()).get(0).getSubject();

assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY));
assertThat(entry.getPortfolioTransaction().getMonetaryAmount(),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(175.97))));

assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2021-08-02T00:00")));
assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(2)));
assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.FEE),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00))));

// check buy/sell transaction
entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem)
.collect(Collectors.toList()).get(1).getSubject();

assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.SELL));
assertThat(entry.getPortfolioTransaction().getMonetaryAmount(),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(219.97))));

assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2021-08-02T00:00")));
assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(20)));
assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.FEE),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00))));
}

@Test
public void testTransacties1()
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
PDF Autor: ''
PDFBox Version: 1.8.16
-----------------------------------------
-
Transaktionsübersicht von 01-08-2021 bis 05-08-2021
Datum Uhrzei Produkt ISIN Referen Ausführungso Anzahl Kurs Wert in Wechse Transaktionst zbörse rt Lokalwährung Wert lkurs kosten Gesamt
02-08-2021 00:00 GENERAL ELECTRIC US3696043013 NSY 2 103,60 USD -207,20 USD -175,97 EUR 1,1774 -175,97 EUR
COMPANY COMMON STOCK
02-08-2021 00:00 GENERAL ELECTRIC COMPA US3696041033 NSY -20 12,95 USD 259,00 USD 219,97 EUR 1,1774 219,97 EUR
flatex DEGIRO Bank flatex DEGIRO Bank Dutch Branch, die
Dutch Branch E unter dem Namen DEGIRO handelt, ist
Amstelplein 1 kundenservice@degiro.de die niederländische Niederlassung der Seite 1 / 1
1096 HA Amsterdam I www.degiro.de flatexDEGIRO Bank AG. Die Konto 2021-08-05
flatexDEGIRO Bank AG wird primär
Original file line number Diff line number Diff line change
Expand Up @@ -641,13 +641,13 @@ private void addPortfolioTransactions()
.attributes("date", "name", "isin", "shares", "currency", "amount")
.match("^(?<date>\\d+-\\d+-\\d{4} \\d+:\\d+) "
+ "(?<name>.*) "
+ "(?<isin>\\w{12}) "
+ "\\w{3} "
+ "(?<isin>[\\w]{12}) "
+ "[\\w]{3} "
+ "(?<shares>[-]?[.\\d]+[,\\d]*) "
+ "[-.,\\d\\s]* \\w{3} "
+ "[-.,\\d\\s]* \\w{3} "
+ "[-.,\\d\\s]* \\w{3} "
+ "-?(?<amount>[.,\\d\\s]*) (?<currency>\\w{3})$")
+ "[-.,\\d\\s]* [\\w]{3} "
+ "[-.,\\d\\s]* [\\w]{3} "
+ "[-.,\\d\\s]* [\\w]{3} "
+ "-?(?<amount>[.\\d\\s]+,[\\d]*) (?<currency>[\\w]{3})$")
.assign((t, v) -> {
v.put("amount", stripBlanks(v.get("amount")));

Expand Down