From e96d3f4d675a79f3d46b9c00c5485604227428bf Mon Sep 17 00:00:00 2001 From: Alexander Ott <45203494+Nirus2000@users.noreply.github.com> Date: Sun, 19 Jan 2025 10:07:01 +0100 Subject: [PATCH] Modify BoursoBank PDF-Importer to support new transaction (#4483) https://forum.portfolio-performance.info/t/pdf-import-from-boursobank-ex-boursorama-banque/28876/7 --- .../datatransfer/pdf/boursobank/AChat05.txt | 42 +++++++++++++++++++ .../BoursoBankPDFExtractorTest.java | 31 ++++++++++++++ .../pdf/BoursoBankPDFExtractor.java | 11 ++++- 3 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/boursobank/AChat05.txt diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/boursobank/AChat05.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/boursobank/AChat05.txt new file mode 100644 index 0000000000..7c52020c6c --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/boursobank/AChat05.txt @@ -0,0 +1,42 @@ +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.73.0 +System: win32 | x86_64 | 21.0.5+11-LTS | Azul Systems, Inc. +----------------------------------------- +OPERATION DE BOURSE +le 08/01/2024 +€ +a(B;QEKetEL!JafM+€)T!MqBJ1Th/XzG3J+ + 000000 +€fn 'x v!"*TaN= D aV€%RaHi& +;F@|6j,TV +P26025 +a!!!a!!a!aa!!!aaa!a!aaa!a!!a!!a!!!a!aa!!aa!a!a!! +MR qKIEgu ksBtL +Uhr 73 +14 FLZ xi vNJUMaL lGNpYi +34668 xJGsT +Références de votre compte titres +Compte PEA +11241 79887 49486422235 +Résident Français +ACHAT COMPTANT +ACTION +Date et heure +locale d'exécution Quantité Informations sur la valeur Informations sur l'exécution +Référence : 337163166408 +08/01/2024 7 AM.MSCI WORLD UCITS ETF EUR C +Type d'ordre : au marché +14:20:31 +Code ISIN : LU1681043599 Cours exécuté : 447,5239 EUR +Lieu d'exécution : EURONEXT PARIS +Montant brut Commission Frais (¨) Montant net au débit de votre compte +3 132,67 EUR 15,66 EUR 3 148,33 EUR +Sous réserve de bonne fin. +(¨) Frais inhérents à la Taxe sur les Transactions Financières française +Cet avis ne tient pas compte des frais inhérents aux Taxes sur les Transactions Financières européennes (hors France), s'ils doivent s'appliquer. + +Service Clientèle : 01 46 09 49 49 ou +33 146 09 49 49 depuis l'étranger, du lundi au vendredi de 8h à 20h et le samedi de 8h45 à 16h30 – www.boursobank.com +Boursorama S.A. au capital de 51 171 597,60 € - RCS Nanterre 351 058 151 - TVA 69 351 058 151 - 44 rue Traversière - CS 80134 - 92772 Boulogne Billancourt Cedex +AA1 +Adresse du médiateur : Médiateur de l'AMF - 17, place de la Bourse - 75082 PARIS CEDEX 02 +000000 F1 P26025 1/1 \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/boursobank/BoursoBankPDFExtractorTest.java b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/boursobank/BoursoBankPDFExtractorTest.java index 393e70a8f9..f98ec5dc14 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/boursobank/BoursoBankPDFExtractorTest.java +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/boursobank/BoursoBankPDFExtractorTest.java @@ -163,6 +163,37 @@ public void testCompteAChat04() hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); } + @Test + public void testCompteAChat05() + { + BoursoBankPDFExtractor extractor = new BoursoBankPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "AChat05.txt"), errors); + + assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(1L)); + assertThat(countAccountTransactions(results), is(0L)); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, "EUR"); + + // check security + assertThat(results, hasItem(security( // + hasIsin("LU1681043599"), hasWkn(null), hasTicker(null), // + hasName("AM.MSCI WORLD UCITS ETF EUR C"), // + hasCurrencyCode("EUR")))); + + // check buy sell transaction + assertThat(results, hasItem(purchase( // + hasDate("2024-01-08T14:20:31"), hasShares(7.00), // + hasSource("AChat05.txt"), // + hasNote("au marché | Référence : 337163166408"), // + hasAmount("EUR", 3148.33), hasGrossValue("EUR", 3132.67), // + hasTaxes("EUR", 0.00), hasFees("EUR", 15.66)))); + } + @Test public void testCompteVente01() { diff --git a/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/BoursoBankPDFExtractor.java b/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/BoursoBankPDFExtractor.java index 37d6bd14c1..ecac4b361b 100644 --- a/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/BoursoBankPDFExtractor.java +++ b/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/BoursoBankPDFExtractor.java @@ -89,7 +89,16 @@ private void addBuySellTransaction() section -> section // .attributes("name", "isin", "currency") // .match("^[\\d]{2}\\/[\\d]{2}\\/[\\d]{4} [\\,\\d\\s]+ (?.*) R.f.rence : .*$") // - .match("^Code ISIN : (?[A-Z]{2}[A-Z0-9]{9}[0-9]) Cours ex.cu.é : [\\,\\d\\s]+ (?[\\w]{3})$") // + .match("^Code ISIN : (?[A-Z]{2}[A-Z0-9]{9}[0-9]) Cours ex.cu.. : [\\,\\d\\s]+ (?[\\w]{3})$") // + .assign((t, v) -> t.setSecurity(getOrCreateSecurity(v))), + // @formatter:off + // 08/01/2024 7 AM.MSCI WORLD UCITS ETF EUR C + // Code ISIN : LU1681043599 Cours exécuté : 447,5239 EUR + // @formatter:on + section -> section // + .attributes("name", "isin", "currency") // + .match("^[\\d]{2}\\/[\\d]{2}\\/[\\d]{4} [\\,\\d\\s]+ (?.*)$") // + .match("^Code ISIN : (?[A-Z]{2}[A-Z0-9]{9}[0-9]) Cours ex.cu.. : [\\,\\d\\s]+ (?[\\w]{3})$") // .assign((t, v) -> t.setSecurity(getOrCreateSecurity(v)))) // @formatter:off