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 issue #3991 to be able to import French Transactions Degiro PDF #3992

Original file line number Diff line number Diff line change
Expand Up @@ -7317,6 +7317,52 @@ public void testTransactions_french01()
.orElseThrow(IllegalArgumentException::new);
assertThat(grossValueUnit.getForex(), is(Money.of(CurrencyUnit.USD, Values.Amount.factorize(78.21))));
}



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

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

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

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

// check 1st security
List<Security> securities = results.stream()
.filter(SecurityItem.class::isInstance)
.map(Item::getSecurity)
.collect(Collectors.toList());

assertThat(securities.size(), is(5));

checkOneSecurity(securities.get(0), "ADR ON AMBEV", "US02319V1035", CurrencyUnit.USD);
checkOneSecurity(securities.get(1), "ISHARES PROP US", "IE00B1FZSF77", CurrencyUnit.EUR);
checkOneSecurity(securities.get(2), "UNITEDHEALTH GROUP INC", "US91324P1021", CurrencyUnit.USD);
checkOneSecurity(securities.get(3), "ELEVANCE HEALTH INC", "US0367521038", CurrencyUnit.USD);
checkOneSecurity(securities.get(4), "MICRON TECHNOLOGY INC", "US5951121038", CurrencyUnit.USD);

// check 1st buy transaction
List<BuySellEntry> entries = results.stream()
.filter(BuySellEntryItem.class::isInstance)
.map(item -> (BuySellEntry)item.getSubject())
.collect(Collectors.toList());

assertThat(entries.size(), is(6));

checkOneBuySellEntry(entries.get(0), PortfolioTransaction.Type.SELL, AccountTransaction.Type.SELL, "2024-04-16T21:56", 150, CurrencyUnit.EUR, 317.95, 319.95, 0, 2, CurrencyUnit.USD, 339.75);
checkOneBuySellEntry(entries.get(1), PortfolioTransaction.Type.SELL, AccountTransaction.Type.SELL, "2024-03-26T10:27", 4, CurrencyUnit.EUR, 101, 101, 0, 0, null, 0);
checkOneBuySellEntry(entries.get(2), PortfolioTransaction.Type.SELL, AccountTransaction.Type.SELL, "2024-03-26T10:13", 12, CurrencyUnit.EUR, 300, 303, 0, 3, null, 0);
checkOneBuySellEntry(entries.get(3), PortfolioTransaction.Type.BUY, AccountTransaction.Type.BUY, "2024-01-22T16:51", 1, CurrencyUnit.EUR, 468.94, 466.94, 0, 2, CurrencyUnit.USD, 508.4);
checkOneBuySellEntry(entries.get(4), PortfolioTransaction.Type.SELL, AccountTransaction.Type.SELL, "2024-01-22T16:31", 1, CurrencyUnit.EUR, 428.59, 430.59, 0, 2, CurrencyUnit.USD, 469);
checkOneBuySellEntry(entries.get(5), PortfolioTransaction.Type.SELL, AccountTransaction.Type.SELL, "2024-01-22T16:30", 4, CurrencyUnit.EUR, 322.22, 324.22, 0, 2, CurrencyUnit.USD, 353.24);

}

@Test
public void testTransakce01()
Expand Down Expand Up @@ -8758,4 +8804,64 @@ public void testTransacoes01()
assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.FEE),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00))));
}

/**
* Utility function to check one security
*
* @param security
* @param expName
* @param expIsin
* @param expCurrency
*/
private void checkOneSecurity( Security security, String expName, String expIsin, String expCurrency)
{
assertThat(security.getName(), is(expName));
assertThat(security.getIsin(), is(expIsin));
assertThat(security.getCurrencyCode(), is(expCurrency));
}

/**
* Utility to check one Buy/Sell transaction
*
* @param entry
* @param portfolioTransactionType
* @param accountTransactionType
* @param dateTime
* @param shares
* @param currency
* @param monetaryAmount
* @param grossValue
* @param taxSum
* @param feeSum
* @param forexCurrency
* @param forexValue
*/
private void checkOneBuySellEntry( BuySellEntry entry, PortfolioTransaction.Type portfolioTransactionType, AccountTransaction.Type accountTransactionType,
String dateTime, double shares, String currency, double monetaryAmount,
double grossValue, double taxSum, double feeSum, String forexCurrency, double forexValue)
{

assertThat(entry.getPortfolioTransaction().getType(), is(portfolioTransactionType));
assertThat(entry.getAccountTransaction().getType(), is(accountTransactionType));

assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse(dateTime)));
assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(shares)));

assertThat(entry.getPortfolioTransaction().getMonetaryAmount(),
is(Money.of(currency, Values.Amount.factorize(monetaryAmount))));
assertThat(entry.getPortfolioTransaction().getGrossValue(),
is(Money.of(currency, Values.Amount.factorize(grossValue))));
assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.TAX),
is(Money.of(currency, Values.Amount.factorize(taxSum))));
assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.FEE),
is(Money.of(currency, Values.Amount.factorize(feeSum))));

if (forexCurrency != null)
{
Unit grossValueUnit = entry.getPortfolioTransaction().getUnit(Unit.Type.GROSS_VALUE)
.orElseThrow(IllegalArgumentException::new);
assertThat(grossValueUnit.getForex(), is(Money.of(forexCurrency, Values.Amount.factorize(forexValue))));
}

}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hello @couclock
please undo this. We already have a simple test variant.

As you can see in the other tests and also read in the contributing rules, we use these variants.

From April 2023 we will use the simplified notation of test cases (preferred variant)
ComDirect Bank
Baader Bank with testWertpapierKauf23()
Sbroker with testDividende11()
Sbroker with testGiroKontoauszug10()

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
PDFBox Version: 1.8.17
Portfolio Performance Version: 0.68.4
-----------------------------------------

Transactions du 01-03-2024 au 03-05-2024
Date Heure Produit Code ISIN Place Lieu Quantit Cours Montant devise Montant Taux de Frais deboursiè d'exécution é locale change courtage Montant négocié
16-04-2024 21:56 ADR ON AMBEV US02319V1035 NSY CDED -150 2,265 USD 339,75 USD 319,95 EUR 1,0619 -2,00 EUR 317,95 EUR
26-03-2024 10:27 ISHARES PROP US IE00B1FZSF77 EAM XAMS -4 25,25 EUR 101,00 EUR 101,00 EUR EUR 101,00 EUR
26-03-2024 10:13 ISHARES PROP US IE00B1FZSF77 EAM XAMS -12 25,25 EUR 303,00 EUR 303,00 EUR -3,00 EUR 300,00 EUR
22-01-2024 16:51 UNITEDHEALTH GROUP INC US91324P1021 NSY XNAS 1 508,4 USD -508,40 USD -466,94 EUR 1,0888 -2,00 EUR -468,94 EUR
22-01-2024 16:31 ELEVANCE HEALTH INC US0367521038 NSY BATS -1 469 USD 469,00 USD 430,59 EUR 1,0892 -2,00 EUR 428,59 EUR
22-01-2024 16:30 MICRON TECHNOLOGY INC US5951121038 NDQ XNAS -4 88,31 USD 353,24 USD 324,22 EUR 1,0895 -2,00 EUR 322,22 EUR
flatexDEGIRO Bank Dutch Branch, qui opère sous le nom de www.degiro.fr Compte
DEGIRO, est la succursale néerlandaise de flatexDEGIRO Bank AG. clients@degiro.fr
flatexDEGIRO Bank AG est principalement supervisée par le
régulateur financier allemand (BaFin). Aux Pays-Bas, flatexDEGIRO Amstelplein 1 1096 HA 2024-05-03
Bank Dutch Branch est enregistrée auprès de la DNB et supervisée Page 1 / 1
par l'AFM et la DNB.
Loading