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

Modify Degiro PDF-Importer to support new transaction #3136

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.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -6078,11 +6078,11 @@ public void testEstrattoConto02()
assertNull(transaction.getNote());

assertThat(transaction.getMonetaryAmount(),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(1.43))));
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(1.42))));
assertThat(transaction.getGrossValue(),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(1.68))));
assertThat(transaction.getUnitSum(Unit.Type.TAX),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.25))));
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.26))));
assertThat(transaction.getUnitSum(Unit.Type.FEE),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00))));

Expand All @@ -6101,11 +6101,11 @@ public void testEstrattoConto02()
assertNull(transaction.getNote());

assertThat(transaction.getMonetaryAmount(),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(1.39))));
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(1.38))));
assertThat(transaction.getGrossValue(),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(1.64))));
assertThat(transaction.getUnitSum(Unit.Type.TAX),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.25))));
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.26))));
assertThat(transaction.getUnitSum(Unit.Type.FEE),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00))));

Expand Down Expand Up @@ -6247,6 +6247,49 @@ public void testEstrattoConto02()
assertThat(transaction.getNote(), is("DEGIRO Costi di connessione 2021"));
}

@Test
public void testEstrattoConto03()
{
Security security = new Security("ISHARES GLOB HIG YLD CORP BOND UCITS", CurrencyUnit.EUR);
security.setIsin("IE00B74DQ490");

Client client = new Client();
client.addSecurity(security);

DegiroPDFExtractor extractor = new DegiroPDFExtractor(new Client());

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

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

assertThat(errors, empty());
assertThat(results.size(), is(2));
new AssertImportActions().check(results, CurrencyUnit.EUR);

// check dividends transaction
AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance)
.findFirst().orElseThrow(IllegalArgumentException::new).getSubject();

assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));

assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2022-09-29T07:55")));
assertThat(transaction.getShares(), is(Values.Share.factorize(0L)));
assertThat(transaction.getSource(), is("EstrattoConto03.txt"));
assertNull(transaction.getNote());

assertThat(transaction.getMonetaryAmount(),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(68.23))));
assertThat(transaction.getGrossValue(),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(68.23))));
assertThat(transaction.getUnitSum(Unit.Type.TAX),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00))));
assertThat(transaction.getUnitSum(Unit.Type.FEE),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00))));

Unit grossValueUnit = transaction.getUnit(Unit.Type.GROSS_VALUE).orElseThrow(IllegalArgumentException::new);
assertThat(grossValueUnit.getForex(), is(Money.of(CurrencyUnit.USD, Values.Amount.factorize(67.14))));
}

@Test
public void testOperazioni01()
{
Expand All @@ -6261,22 +6304,23 @@ public void testOperazioni01()
new AssertImportActions().check(results, CurrencyUnit.EUR);

// check security
Security security = results.stream().filter(i -> i instanceof SecurityItem).findFirst()
Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst()
.orElseThrow(IllegalArgumentException::new).getSecurity();
assertThat(security.getName(), is("VANGUARD FTSE ALL-"));
assertThat(security.getIsin(), is("IE00BK5BQT80"));
assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR));

// check 1st buy transaction
BuySellEntry entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem)
.collect(Collectors.toList()).get(0).getSubject();
BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst()
.orElseThrow(IllegalArgumentException::new).getSubject();

assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY));
assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY));

assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2021-10-04T09:04")));
assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(2)));
assertThat(entry.getSource(), is("Operazioni01.txt"));
assertNull(entry.getNote());

assertThat(entry.getPortfolioTransaction().getMonetaryAmount(),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(191.22))));
Expand All @@ -6287,15 +6331,17 @@ public void testOperazioni01()
assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.FEE),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00))));

// check 234th buy/sell transaction
entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem)
.collect(Collectors.toList()).get(1).getSubject();
// check 2th buy/sell transaction
entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).skip(1).findFirst()
.orElseThrow(IllegalArgumentException::new).getSubject();

assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY));
assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY));

assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2021-09-24T09:04")));
assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(3)));
assertThat(entry.getSource(), is("Operazioni01.txt"));
assertNull(entry.getNote());

assertThat(entry.getPortfolioTransaction().getMonetaryAmount(),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(291.75))));
Expand Down
@@ -0,0 +1,21 @@
PDFBox Version: 1.8.16
Portfolio Performance Version: 0.60.2
-----------------------------------------
Signor X
X
X X
X
Nome Utente: ***oto
Estratto conto da 01-03-2019 a 16-01-2023
Data Ora Data Valore Prodotto ISIN Descrizione Borsa Variazioni Saldo
30-09-2022 17:50 30-09-2022 FLATEX EURO BANKACCOUNT NLFLATEXACNT Degiro Cash Sweep Transfer EUR -68,23 EUR 693,91
30-09-2022 07:52 29-09-2022 Credito FX EUR 68,23 EUR 762,14
30-09-2022 07:52 29-09-2022 Prelievo FX 0,9840 USD -67,14 USD 0,00
29-09-2022 07:55 28-09-2022 ISHARES GLOB HIG YLD CORP BOND UCITS IE00B74DQ490 Dividendo USD 67,14 USD 67,14
ETF

flatex DEGIRO Bank Dutch Branch, che opera come DEGIRO, e' la www.degiro.it Estratto conto
branca olandese della flatexDEGIRO Bank AG. flatexDEGIRO Bank clienti@degiro.it 2023-01-16
AG opera innanzi tutto sotto la supervisione dell'Ente Tedesco di
Vigilanza dei Servizi Finanziari (BaFin) e, In Olanda, e' registrata Amstelplein 1 1096 HA Pagina 23 /23
presso la DNB.