From 2e63115feaa750b556411ead28d835562a4f89d6 Mon Sep 17 00:00:00 2001 From: Nirus2000 Date: Fri, 5 Apr 2024 07:11:07 +0200 Subject: [PATCH] Modify LLB AG PDF-Importer to support new transaction https://forum.portfolio-performance.info/t/pdf-import-von-liechtensteinische-landesbank-ag/25886/6 --- .../Depotauszug01.txt | 122 ++++++++++++++++++ ...teinischeLandesbankAGPDFExtractorTest.java | 22 ++++ ...tensteinischeLandesbankAGPDFExtractor.java | 37 +++++- 3 files changed, 178 insertions(+), 3 deletions(-) create mode 100644 name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/liechtensteinischelandesbankag/Depotauszug01.txt diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/liechtensteinischelandesbankag/Depotauszug01.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/liechtensteinischelandesbankag/Depotauszug01.txt new file mode 100644 index 0000000000..81b52dad90 --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/liechtensteinischelandesbankag/Depotauszug01.txt @@ -0,0 +1,122 @@ +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.68.3 +----------------------------------------- +wiLLBe powered by +Liechtensteinische Landesbank +Aktiengesellschaft +Städtle 44 · Postfach 384 +9490 Vaduz · Liechtenstein +Sitz Vaduz +Registerbehörde: AJU +HR FL-0001.000.289-1 +service@willbe-invest.com +Vorname Nachname www.willbe-invest.com +XXXXX Straße XX +XXXXX XXXXX Vaduz, 29. Februar 2024 +DEUTSCHLAND Seite 1/3 +Kontonummer XXXX.XXXX.XXXX wiLLBe Investmentkonto CHF +IBAN LIXX XXXX XXXX XXXX XXXX X / BIC LILALI2X +Kontoauszug in CHF 01.02.2024 - 29.02.2024 +Datum Buchungstext / Details Valuta Zu Ihren Lasten Zu Ihren Gunsten Saldo in CHF +31.01. Saldovortrag 10'056.72 +01.02. Gutschrift 01.02. 465.86 10'522.58 +XXXXX XXXXX +Auftragsnummer: XXXXXXXXX +01.02. Kauf 05.02. 84.49 10'438.09 +0.759479 Shs Acciona SA Bearer (978954) +Preis EUR 118.80 +Auftragsnummer: XXXXXXXXX +01.02. Kauf 05.02. 245.12 10'192.97 +3.764574 Act-nom Alcon SA nom (43249246) +Preis CHF 65.06 +Auftragsnummer: XXXXXXXXX +01.02. Kauf 05.02. 54.67 10'138.30 +0.823824 Vz Akt Henkel AG&Co.KGaA Stimmrechtslos Vorz- (335910) +Preis EUR 71.092906 +Auftragsnummer: XXXXXXXXX +02.02. Kauf (Emission) 06.02. 64.26 10'074.04 +0.117617 Ant Robeco Capital Growth Fds SICAV RobecoSAM Sust +Water Equities Cap -I USD- +Preis USD 636.73 +Auftragsnummer: XXXXXXXXX +07.02. Kauf 09.02. 60.27 10'013.77 +0.283366 Reg Shs Biogen Inc (1720684) +Preis USD 242.9885 +Auftragsnummer: XXXXXXXXX +Elektronisch zugestellt +ACC_STMT_MTH_DT_LLB 20240229 54099-235023206-XXXXXXXXXX EBANKING +Vaduz, 29. Februar 2024 +Seite 2/3 +Kontonummer XXXX.XXXX.XXXX wiLLBe Investmentkonto CHF +IBAN LIXX XXXX XXXX XXXX XXXX X / BIC LILALI2X +Kontoauszug in CHF 01.02.2024 - 29.02.2024 +Datum Buchungstext / Details Valuta Zu Ihren Lasten Zu Ihren Gunsten Saldo in CHF +07.02. Kauf 09.02. 112.90 900.87 +4.328072 Reg Shs Hydro One Ltd (29777300) +Preis CAD 40.14 +Auftragsnummer: XXXXXXXXX +08.02. Verkauf 12.02. 191.66 10'092.53 +-18.68327 Reg Shs Pearson PLC (400018) +Preis GBP 9.326 +Auftragsnummer: XXXXXXXXX +08.02. Kauf 12.02. 287.16 8005.37 +4.26369 Vz Akt Henkel AG&Co.KGaA Stimmrechtslos Vorz- (335910) +Preis EUR 71.34 +Auftragsnummer: XXXXXXXXX +08.02. Kauf 12.02. 68.93 7306.44 +0.137197 N Akt Swisscom AG (874251) +Preis CHF 502.00 +Auftragsnummer: XXXXXXXXX +12.02. Kauf (Emission) 15.02. 107.03 629.41 +1.023156 Ant Plenum CAT Bond Fund Klasse -P CHF- (29034949) +Preis CHF 104.61 +Auftragsnummer: XXXXXXXXX +22.02. Kauf 26.02. 272.07 3057.34 +0.530129 N Akt Geberit AG (3017040) +Preis CHF 512.80 +Auftragsnummer: XXXXXXXXX +22.02. Kauf 26.02. 108.11 2409.23 +1.402835 N Akt Galenica AG (36067446) +Preis CHF 77.00 +Auftragsnummer: XXXXXXXXX +22.02. Kauf 26.02. 110.04 1309.19 +0.8881 N Akt Helvetia Holding AG (46664220) +Preis CHF 123.80 +Auftragsnummer: XXXXXXXXX +22.02. Verkauf 26.02. 249.55 3808.74 +-6.179007 N Akt ABB AG (1222171) +Preis CHF 40.42 +Auftragsnummer: XXXXXXXXX +22.02. Verkauf 26.02. 239.25 6207.99 +-1.55698 N Akt Allreal Holding AG (883756) +Preis CHF 153.79116 +Auftragsnummer: XXXXXXXXX +Elektronisch zugestellt +ACC_STMT_MTH_DT_LLB 20240229 54099-235023206-XXXXXXXXX EBANKING +Vaduz, 29. Februar 2024 +Seite 3/3 +Kontonummer XXXX.XXXX.XXXX wiLLBe Investmentkonto CHF +IBAN LIXX XXXX XXXX XXXX XXXX X / BIC LILALI2X +Kontoauszug in CHF 01.02.2024 - 29.02.2024 +Datum Buchungstext / Details Valuta Zu Ihren Lasten Zu Ihren Gunsten Saldo in CHF +26.02. Kapitaltransaktion 26.02. 3.75 631.74 +Bardividende US42250P1030 Reg Shs Healthpeak Pptys Inc +(50880191) +Auftragsnummer: XXXXXXXXX +Saldo per 29.02.2024 12631.74 +Umsatz 10'575.05 10'150.07 +Konditionen +Sollzinsen +01.01.2024 - 29.02.2024 0.00 % +Habenzinsen +01.01.2024 - 29.02.2024 0.00 % +Die Zinsmethodik bei Überschreitungen wurde per 01.01.2024 angepasst. Die neue Regelung lautet wie folgt: +Bei Überschreitungen des laufenden Kontos beträgt der aktuelle Sollzinssatz 0.00% pro Jahr ab dem Zeitpunkt der +Überschreitung. Als Referenzzinssatz gilt: SARON 3M Compound, zuzüglich einer Marge von 8.50%. Der Sollzinssatz wird +jeweils am ersten eines neuen Kalenderquartals aktualisiert und passt sich bei einer Änderung des Referenzzinssatzes +automatisch entsprechend an und ist ab diesem Tag wirksam. Vorbehalten bleiben anderslautende Vereinbarungen. +Einlagen auf diesem Konto sind nach Massgabe des Einlagensicherungs- und Anlegerentschädigungsgesetzes (EAG) +grundsätzlich erstattungsfähig. Nähere Informationen können dem Informationsbogen für Einleger entnommen werden, den +Sie auch unter www.llb.li/eag einsehen können. +Elektronisch zugestellt +ACC_STMT_MTH_DT_LLB 20240229 54099-235023206-XXXXXXXXX EBANKING \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/liechtensteinischelandesbankag/LiechtensteinischeLandesbankAGPDFExtractorTest.java b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/liechtensteinischelandesbankag/LiechtensteinischeLandesbankAGPDFExtractorTest.java index b0c14173d7..b0764b6f38 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/liechtensteinischelandesbankag/LiechtensteinischeLandesbankAGPDFExtractorTest.java +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/liechtensteinischelandesbankag/LiechtensteinischeLandesbankAGPDFExtractorTest.java @@ -1,6 +1,7 @@ package name.abuchen.portfolio.datatransfer.pdf.liechtensteinischelandesbankag; import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.check; +import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.deposit; import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.dividend; import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasAmount; import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasCurrencyCode; @@ -543,4 +544,25 @@ public void testKontoauzug01() assertThat(results, hasItem(interest(hasDate("2023-12-31"), hasAmount("EUR", 456.60), // hasSource("Kontoauszug01.txt"), hasNote("30.09.2023 - 31.12.2023")))); } + + @Test + public void testDepotauszug01() + { + LiechtensteinischeLandesbankAGPDFExtractor extractor = new LiechtensteinischeLandesbankAGPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Depotauszug01.txt"), errors); + + assertThat(errors, empty()); + assertThat(countSecurities(results), is(0L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(1)); + new AssertImportActions().check(results, "CHF"); + + // assert transaction + assertThat(results, hasItem(deposit(hasDate("2024-02-01"), hasAmount("CHF", 465.86), // + hasSource("Depotauszug01.txt"), hasNote("Auftragsnummer: XXXXXXXXX")))); + } } diff --git a/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/LiechtensteinischeLandesbankAGPDFExtractor.java b/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/LiechtensteinischeLandesbankAGPDFExtractor.java index 138d112991..347bd82664 100644 --- a/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/LiechtensteinischeLandesbankAGPDFExtractor.java +++ b/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/LiechtensteinischeLandesbankAGPDFExtractor.java @@ -255,12 +255,43 @@ private void addAccountStatementTransaction() // @formatter:off // Kontoauszug in EUR 01.12.2023 - 31.12.2023 // @formatter:on - .section("currency") // - .match("^Kontoauszug in (?[\\w]{3}) .*$") // - .assign((ctx, v) -> ctx.put("currency", asCurrencyCode(v.get("currency"))))); + .section("currency", "year") // + .match("^Kontoauszug in (?[\\w]{3}) [\\d]{2}\\.[\\d]{2}\\.(?[\\d]{4}).*$") // + .assign((ctx, v) -> { + ctx.put("currency", asCurrencyCode(v.get("currency"))); + ctx.put("year", v.get("year")); + })); this.addDocumentTyp(type); + // @formatter:off + // 01.02. Gutschrift 01.02. 465.86 10'522.58 + // XXXXX XXXXX + // Auftragsnummer: XXXXXXXXX + // @formatter:on + Block depositBlock = new Block("^[\\d]{2}\\.[\\d]{2}. Gutschrift [\\d]{2}\\.[\\d]{2}.*$"); + type.addBlock(depositBlock); + depositBlock.set(new Transaction() + + .subject(() -> { + AccountTransaction accountTransaction = new AccountTransaction(); + accountTransaction.setType(AccountTransaction.Type.DEPOSIT); + return accountTransaction; + }) + + .section("date", "amount", "note") // + .documentContext("currency", "year") // + .match("^[\\d]{2}\\.[\\d]{2}. Gutschrift (?[\\d]{2}\\.[\\d]{2}.) (?[\\.'\\d]+) [\\.'\\d]+$") // + .match("^(?Auftragsnummer: .*)$") // + .assign((t, v) -> { + t.setDateTime(asDate(v.get("date") + v.get("year"))); + t.setCurrencyCode(v.get("currency")); + t.setAmount(asAmount(v.get("amount"))); + t.setNote(trim(v.get("note"))); + }) + + .wrap(TransactionItem::new)); + // @formatter:off // Per 31. Dezember 2023 // Abrechnungsperiode 30.09.2023-31.12.2023