From 99f70798ce89c435c2cec966e089f864a923cb41 Mon Sep 17 00:00:00 2001 From: Nirus2000 Date: Sat, 10 Dec 2022 20:44:16 +0100 Subject: [PATCH] Modify Easybank PDF-Importer to support new transactions https://forum.portfolio-performance.info/t/pdf-import-von-easybank/21323/39 https://forum.portfolio-performance.info/t/pdf-import-von-easybank/21323/40 https://forum.portfolio-performance.info/t/pdf-import-von-easybank/21323/45 --- .../pdf/easybankag/Depotauszug02.txt | 27 + .../pdf/easybankag/Depotauszug03.txt | 49 ++ .../pdf/easybankag/Depotauszug04.txt | 26 + .../pdf/easybankag/Dividende16.txt | 35 + .../pdf/easybankag/Dividende17.txt | 35 + .../pdf/easybankag/Dividende18.txt | 36 + .../EasyBankAGPDFExtractorTest.java | 799 ++++++++++++++++++ .../datatransfer/pdf/easybankag/Kauf18.txt | 36 + .../datatransfer/pdf/easybankag/Kauf19.txt | 36 + .../datatransfer/pdf/easybankag/Kauf20.txt | 36 + .../datatransfer/pdf/easybankag/Kauf21.txt | 36 + .../datatransfer/pdf/easybankag/Kauf22.txt | 36 + .../datatransfer/pdf/easybankag/Kauf23.txt | 36 + .../datatransfer/pdf/easybankag/Kauf24.txt | 37 + .../datatransfer/pdf/easybankag/Kauf25.txt | 35 + .../datatransfer/pdf/easybankag/Kauf26.txt | 36 + .../datatransfer/pdf/easybankag/Kauf27.txt | 36 + .../datatransfer/pdf/easybankag/Kauf28.txt | 36 + .../datatransfer/pdf/easybankag/Kauf29.txt | 36 + .../datatransfer/pdf/easybankag/Kauf30.txt | 36 + .../pdf/EasyBankAGPDFExtractor.java | 49 +- 21 files changed, 1520 insertions(+), 4 deletions(-) create mode 100644 name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Depotauszug02.txt create mode 100644 name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Depotauszug03.txt create mode 100644 name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Depotauszug04.txt create mode 100644 name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Dividende16.txt create mode 100644 name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Dividende17.txt create mode 100644 name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Dividende18.txt create mode 100644 name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf18.txt create mode 100644 name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf19.txt create mode 100644 name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf20.txt create mode 100644 name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf21.txt create mode 100644 name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf22.txt create mode 100644 name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf23.txt create mode 100644 name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf24.txt create mode 100644 name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf25.txt create mode 100644 name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf26.txt create mode 100644 name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf27.txt create mode 100644 name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf28.txt create mode 100644 name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf29.txt create mode 100644 name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf30.txt diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Depotauszug02.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Depotauszug02.txt new file mode 100644 index 0000000000..4e700f0af9 --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Depotauszug02.txt @@ -0,0 +1,27 @@ +PDFBox Version: 1.8.16 +Portfolio Performance Version: 0.59.5 +----------------------------------------- +easybank Service Center KONTOAUSZUG +Wiedner Gürtel 11 | 1100 Wien vom 01.11.2022 +Alter Saldo per 03.10.2022 2.442,29 +Summe der Gutschriften 2.275,71 +Summe der Lastschriften 0,00 +Abs.: Wiedner Gürtel 11, 1100 Wien +Neuer Saldo zu Ihren Gunsten +Max Mustermann EUR 4.718,00 +Straße 74 +1234 Ort +Konto-Nr.: 12345678912 Bankleitzahl: 19250 +Empfängerhinweis: +Datum Buchungstext Wert Betrag +18.10 Max Mustermann 18.10 1.000,00 +IBAN: AT23 2123 2134 2234 2234 +REF: 38000221017-1648514-0002320 +18.10 Ertrag Depot 23456789012/20221017-36900795 17.10 1.043,22 +ISIN DE000A0F5UK5 IS.S.E.600 BA.RE.U.ETF A. +28.10 Ertrag Depot 23456789012/20221027-36215134 19.10 232,49 +ISIN DE000A0F5UH1 IS.S.GL.SE.D.100 U.ETF A. +Neuer Saldo zu Ihren Gunsten 4.718,00 +AT12 1234 1234 1234 1234 DIRAAT2S 35 0010 1/1 +IBAN BIC Filiale Auszug Blatt/Gesamt +R0042 18561 Doknr.: ON00-036-0000000001 \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Depotauszug03.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Depotauszug03.txt new file mode 100644 index 0000000000..49c1825d03 --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Depotauszug03.txt @@ -0,0 +1,49 @@ +PDFBox Version: 1.8.16 +Portfolio Performance Version: 0.59.5 +----------------------------------------- +easybank Service Center KONTOAUSZUG +Wiedner Gürtel 11 | 1100 Wien vom 01.12.2022 +Alter Saldo per 01.11.2022 10.048,65 +Summe der Gutschriften 10.000,00 +Summe der Lastschriften 10.445,03- +Abs.: Wiedner Gürtel 11, 1100 Wien +Neuer Saldo zu Ihren Gunsten +Max Mustermann EUR 9.603,62 +Straße 74 +1234 Ort +Konto-Nr.: 12345678912 Bankleitzahl: 19250 +Empfängerhinweis: Zertifikate-/Fondssparen +Datum Buchungstext Wert Betrag +14.11 Kauf aus Dauerauftrag Depot 23456789012/20221114-36409984 15.11 361,14- +ISIN IE00BM67HK77 X(IE)-MSCI WO.HE.CA. 1CDL +14.11 Kauf aus Dauerauftrag Depot 23456789012/20221114-36994332 15.11 726,78- +ISIN IE00BZ0PKT83 ISHSIV-E.MSCI WLD MUL.DLA +14.11 Kauf aus Dauerauftrag Depot 23456789012/20221114-36851000 15.11 727,09- +ISIN IE0032523478 ISHS-EO C.BD L.C.U.ETFEOD +14.11 Kauf aus Dauerauftrag Depot 23456789012/20221114-36129950 15.11 729,60- +ISIN IE00B9CQXS71 SPDR S+P GL.DIV.ARIST.ETF +14.11 Kauf aus Dauerauftrag Depot 23456789012/20221114-36562241 15.11 739,95- +ISIN IE00B4L5Y983 ISHSIII-CORE MSCI WLD DLA +14.11 Kauf aus Dauerauftrag Depot 23456789012/20221114-36821203 15.11 743,18- +ISIN IE00BYZK4776 ISHS IV-HEALTHC.INNOV.ETF +14.11 Kauf aus Dauerauftrag Depot 23456789012/20221114-36449879 15.11 746,48- +ISIN DE000A0F5UK5 IS.S.E.600 BA.RE.U.ETF A. +14.11 Kauf aus Dauerauftrag Depot 23456789012/20221114-36452752 15.11 748,10- +ISIN FR0010527275 L.M.WAT.ESG F.DR UC.ETF D +14.11 Kauf aus Dauerauftrag Depot 23456789012/20221114-36751271 15.11 751,64- +ISIN IE00BGL86Z12 ISHS IV-EL.VEH.+DR.T.DLA. +14.11 Kauf aus Dauerauftrag Depot 23456789012/20221114-36009995 15.11 764,17- +ISIN IE00BYWQWR46 VANECK VID ESPORTS UC.ETF +14.11 Kauf aus Dauerauftrag Depot 23456789012/20221114-36428406 15.11 1.148,29- +ISIN IE00BYZK4883 ISHSIV-DIGITALISATION DLA +14.11 Kauf aus Dauerauftrag Depot 23456789012/20221114-36975624 15.11 1.494,39- +ISIN IE00B1XNHC34 ISHSII-GL.CL.ENERGY DLDIS +25.11 Kauf aus Dauerauftrag Depot 23456789012/20221125-36292707 15.11 764,22- +ISIN IE00BM67HT60 X(IE)-MSCI WO.IN.TE. 1CDL +29.11 Max Mustermann 29.11 10.000,00 +IBAN: AT23 2123 2134 2234 2234 +REF: 38000221128-0294080-0002067 +Neuer Saldo zu Ihren Gunsten 9.603,62 +AT12 1234 1234 1234 1234 DIRAAT2S 35 0011 1/1 +IBAN BIC Filiale Auszug Blatt/Gesamt +R0042 01725 Doknr.: ON00-036-0000000001 \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Depotauszug04.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Depotauszug04.txt new file mode 100644 index 0000000000..3317b62859 --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Depotauszug04.txt @@ -0,0 +1,26 @@ +PDFBox Version: 1.8.16 +Portfolio Performance Version: 0.59.5 +----------------------------------------- +easybank Service Center KONTOAUSZUG +Wiedner Gürtel 11 | 1100 Wien vom 03.10.2022 +Alter Saldo per 05.09.2022 2.329,86 +Summe der Gutschriften 116,93 +Summe der Lastschriften 4,50- +Abs.: Wiedner Gürtel 11, 1100 Wien +Neuer Saldo zu Ihren Gunsten +Max Mustermann EUR 2.442,29 +Straße 74 +1234 Ort +Konto-Nr.: 12345678912 Bankleitzahl: 19250 +Empfängerhinweis: +Datum Buchungstext Wert Betrag +29.09 Ertrag Depot 23456789012/20220928-36308772 28.09 116,93 +ISIN IE0032523478 ISHS-EO C.BD L.C.U.ETFEOD +30.09 Abschluss 30.09 4,50- +Kontoführungsgebühr 4,50- +Wir bitten Sie, Ihre Reklamationen gemäß Ziffer 16 +unserer AGB innerhalb von zwei Monaten an uns zu richten. +Neuer Saldo zu Ihren Gunsten 2.442,29 +AT12 1234 1234 1234 1234 DIRAAT2S 35 0009 1/1 +IBAN BIC Filiale Auszug Blatt/Gesamt +R0042 12995 Doknr.: ON00-036-0000000001 \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Dividende16.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Dividende16.txt new file mode 100644 index 0000000000..b4f8e29bf5 --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Dividende16.txt @@ -0,0 +1,35 @@ +Abrechnung Ereignis +easybank Service Center 36900795-17.10.2022 +BAWAG P.S.K. AG Depot-Nr.: 23456789012 +Wiedner Gürtel 11 Max Mustermann +1100 Wien 35/9835 +BAWAG P.S.K. AG +An +Max Mustermann +Straße 74 +1234 Ort +Wir haben für Sie am 17.10.2022 unten angeführtes Geschäft abgerechnet: +Geschäftsart: Ertrag +966,48 Stk +Titel: DE000A0F5UK5 i S h . S T . E u . 6 00 Bas.Res.U.ETF DE +Inhaber-Anlageaktien +Fondsgesellschaft: iShares [DE] I Investmentaktiengese +llschaft mit Teilgesellschaftsvermö +Ertrag: 1,082646 EUR +Verwahrart: WR +Positionsdaten: Loco: Frankfurt +Bruttoertrag: 1.046,36 EUR +Inkassoprovision: -2,62 EUR +Umsatzsteuer: -0,52 EUR +Zu Gunsten IBAN AT12 1234 1234 1234 1234 1.043,22 EUR +Valuta 17.10.2022 +Kunden UID: ATU12312312 +Es wurde Umsatzsteuer in der Höhe von 20% berücksichtigt. +Extag: 17.10.2022 +Bemessungsgrundlage USt: -2,62 EUR +KESt auf inl. Dividende pro Fondsanteil (verlusttopfrelevant): 0,0003 EUR +KESt auf intransparente Grundstücksgesellschaften (verlusttopfrelevant): 0,00 EUR +1.11.2022 Seite 1 +____________________________________________________________________________________ +Diese Mitteilung wird nicht unterschrieben. Irrtum vorbehalten! +18563 Doknr.: ON00-036-0000000001 \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Dividende17.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Dividende17.txt new file mode 100644 index 0000000000..d18fad8853 --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Dividende17.txt @@ -0,0 +1,35 @@ +Abrechnung Ereignis +easybank Service Center 36215134-27.10.2022 +BAWAG P.S.K. AG Depot-Nr.: 23456789012 +Wiedner Gürtel 11 Max Mustermann +1100 Wien 35/9835 +BAWAG P.S.K. AG +An +Max Mustermann +Straße 74 +1234 Ort +Wir haben für Sie am 27.10.2022 unten angeführtes Geschäft abgerechnet: +Geschäftsart: Ertrag +750 Stk +Titel: DE000A0F5UH1 i S h . S T . G l . S el.Div.100 U.ETF DE +Inhaber-Anteile +Fondsgesellschaft: iShares [DE] I Investmentaktiengese +llschaft mit Teilgesellschaftsvermö +Ertrag: 0,311502 EUR +Verwahrart: WR +Positionsdaten: Loco: Frankfurt +Bruttoertrag: 233,63 EUR +Inkassoprovision: -0,95 EUR +Umsatzsteuer: -0,19 EUR +Zu Gunsten IBAN AT12 1234 1234 1234 1234 232,49 EUR +Valuta 19.10.2022 +Kunden UID: ATU12312312 +Es wurde Umsatzsteuer in der Höhe von 20% berücksichtigt. +Extag: 17.10.2022 +Bemessungsgrundlage USt: -0,95 EUR +KESt auf inl. Dividende pro Fondsanteil (verlusttopfrelevant): 0,00 EUR +KESt auf intransparente Grundstücksgesellschaften (verlusttopfrelevant): 0,00 EUR +1.11.2022 Seite 1 +____________________________________________________________________________________ +Diese Mitteilung wird nicht unterschrieben. Irrtum vorbehalten! +18564 Doknr.: ON00-036-0000000001 \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Dividende18.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Dividende18.txt new file mode 100644 index 0000000000..36f3281eef --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Dividende18.txt @@ -0,0 +1,36 @@ +Abrechnung Ereignis +easybank Service Center 36308772-28.9.2022 +BAWAG P.S.K. AG Depot-Nr.: 23456789012 +Wiedner Gürtel 11 Max Mustermann +1100 Wien 35/9835 +BAWAG P.S.K. AG +An +Max Mustermann +Straße 74 +1234 Ort +Wir haben für Sie am 28.9.2022 unten angeführtes Geschäft abgerechnet: +Geschäftsart: Ertrag +374,95 Stk +Titel: IE0032523478 i S h s - E O C o r p Bd Lar.Cap U.ETF +Registered Shares o.N. +Fondsgesellschaft: iShares PLC +Ertrag: 0,3149 EUR +Verwahrart: WR +Positionsdaten: Loco: Frankfurt +Bruttoertrag: 118,07 EUR +Inkassoprovision: -0,95 EUR +Umsatzsteuer: -0,19 EUR +Zu Gunsten IBAN AT12 1234 1234 1234 1234 116,93 EUR +Valuta 28.9.2022 +Kunden UID: ATU12312312 +Es wurde Umsatzsteuer in der Höhe von 20% berücksichtigt. +Extag: 15.9.2022 +Record-Tag: 16.9.2022 +Bemessungsgrundlage USt: -0,95 EUR +KESt auf inl. Dividende pro Fondsanteil (verlusttopfrelevant): 0,00 EUR +KESt auf intransparente Grundstücksgesellschaften (verlusttopfrelevant): 0,00 EUR +3.10.2022 Seite 1 +____________________________________________________________________________________ +Diese Mitteilung wird nicht unterschrieben. Irrtum vorbehalten! +12996 Doknr.: ON00-036-0000000001 + diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/EasyBankAGPDFExtractorTest.java b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/EasyBankAGPDFExtractorTest.java index fa53cd429e..e96d51d5a4 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/EasyBankAGPDFExtractorTest.java +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/EasyBankAGPDFExtractorTest.java @@ -750,6 +750,552 @@ public void testWertpapierKauf17() is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.69 + 2.00 + 8.95)))); } + @Test + public void testWertpapierKauf18() + { + EasyBankAGPDFExtractor extractor = new EasyBankAGPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kauf18.txt"), errors); + + assertThat(errors, empty()); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check security + Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() + .orElseThrow(IllegalArgumentException::new).getSecurity(); + assertThat(security.getIsin(), is("IE00BM67HK77")); + assertThat(security.getName(), is("X t r . ( I E ) - M S CI Wrld Health Care Registered Shares 1C USD o.N.")); + assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + + // check buy sell transaction + 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("2022-11-11T00:00"))); + assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(7.617))); + assertThat(entry.getSource(), is("Kauf18.txt")); + assertThat(entry.getNote(), is("Auftrags-Nr.: 36338031-3.5.2017")); + + assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(361.14)))); + assertThat(entry.getPortfolioTransaction().getGrossValue(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(357.16)))); + assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.TAX), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); + assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.FEE), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.98 + 3.00)))); + } + + @Test + public void testWertpapierKauf19() + { + EasyBankAGPDFExtractor extractor = new EasyBankAGPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kauf19.txt"), errors); + + assertThat(errors, empty()); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check security + Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() + .orElseThrow(IllegalArgumentException::new).getSecurity(); + assertThat(security.getIsin(), is("IE00BZ0PKT83")); + assertThat(security.getName(), is("i S h s I V - E d g e MSCI Wo.Mult.U.ETF Registered Shares USD (Acc)o.N")); + assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + + // check buy sell transaction + 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("2022-11-11T00:00"))); + assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(86))); + assertThat(entry.getSource(), is("Kauf19.txt")); + assertThat(entry.getNote(), is("Auftrags-Nr.: 36338031-3.5.2017")); + + assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(726.78)))); + assertThat(entry.getPortfolioTransaction().getGrossValue(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(721.80)))); + assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.TAX), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); + assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.FEE), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(1.98 + 3.00)))); + } + + @Test + public void testWertpapierKauf20() + { + EasyBankAGPDFExtractor extractor = new EasyBankAGPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kauf20.txt"), errors); + + assertThat(errors, empty()); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check security + Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() + .orElseThrow(IllegalArgumentException::new).getSecurity(); + assertThat(security.getIsin(), is("IE0032523478")); + assertThat(security.getName(), is("i S h s - E O C o r p Bd Lar.Cap U.ETF Registered Shares o.N.")); + assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + + // check buy sell transaction + 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("2022-11-11T00:00"))); + assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(6.05))); + assertThat(entry.getSource(), is("Kauf20.txt")); + assertThat(entry.getNote(), is("Auftrags-Nr.: 36338031-3.5.2017")); + + assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(727.09)))); + assertThat(entry.getPortfolioTransaction().getGrossValue(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(722.10)))); + assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.TAX), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); + assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.FEE), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(1.99 + 3.00)))); + } + + @Test + public void testWertpapierKauf21() + { + EasyBankAGPDFExtractor extractor = new EasyBankAGPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kauf21.txt"), errors); + + assertThat(errors, empty()); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check security + Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() + .orElseThrow(IllegalArgumentException::new).getSecurity(); + assertThat(security.getIsin(), is("IE00B9CQXS71")); + assertThat(security.getName(), is("S P D R S & P G l ob.Div.Aristocr.ETF Registered Shares o.N.")); + assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + + // check buy sell transaction + 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("2022-11-11T00:00"))); + assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(23.954))); + assertThat(entry.getSource(), is("Kauf21.txt")); + assertThat(entry.getNote(), is("Auftrags-Nr.: 36338031-3.5.2017")); + + assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(729.60)))); + assertThat(entry.getPortfolioTransaction().getGrossValue(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(724.61)))); + assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.TAX), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); + assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.FEE), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(1.99 + 3.00)))); + } + + @Test + public void testWertpapierKauf22() + { + EasyBankAGPDFExtractor extractor = new EasyBankAGPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kauf22.txt"), errors); + + assertThat(errors, empty()); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check security + Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() + .orElseThrow(IllegalArgumentException::new).getSecurity(); + assertThat(security.getIsin(), is("IE00B4L5Y983")); + assertThat(security.getName(), is("i S h s I I I - C o r e MSCI World U.ETF Registered Shs USD (Acc) o.N.")); + assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + + // check buy sell transaction + 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("2022-11-11T00:00"))); + assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(10.065))); + assertThat(entry.getSource(), is("Kauf22.txt")); + assertThat(entry.getNote(), is("Auftrags-Nr.: 36338031-3.5.2017")); + + assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(739.95)))); + assertThat(entry.getPortfolioTransaction().getGrossValue(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(734.93)))); + assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.TAX), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); + assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.FEE), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2.02 + 3.00)))); + } + + @Test + public void testWertpapierKauf23() + { + EasyBankAGPDFExtractor extractor = new EasyBankAGPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kauf23.txt"), errors); + + assertThat(errors, empty()); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check security + Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() + .orElseThrow(IllegalArgumentException::new).getSecurity(); + assertThat(security.getIsin(), is("IE00BYZK4776")); + assertThat(security.getName(), is("i S h a r e s I V - Healthc.Innovation Registered Shares o.N.")); + assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + + // check buy sell transaction + 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("2022-11-11T00:00"))); + assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(99.98))); + assertThat(entry.getSource(), is("Kauf23.txt")); + assertThat(entry.getNote(), is("Auftrags-Nr.: 36338031-3.5.2017")); + + assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(743.18)))); + assertThat(entry.getPortfolioTransaction().getGrossValue(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(738.15)))); + assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.TAX), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); + assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.FEE), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2.03 + 3.00)))); + } + + @Test + public void testWertpapierKauf24() + { + EasyBankAGPDFExtractor extractor = new EasyBankAGPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kauf24.txt"), errors); + + assertThat(errors, empty()); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check security + Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() + .orElseThrow(IllegalArgumentException::new).getSecurity(); + assertThat(security.getIsin(), is("DE000A0F5UK5")); + assertThat(security.getName(), is("i S h . S T . E u . 6 00 Bas.Res.U.ETF DE Inhaber-Anlageaktien")); + assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + + // check buy sell transaction + 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("2022-11-11T00:00"))); + assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(11.98))); + assertThat(entry.getSource(), is("Kauf24.txt")); + assertThat(entry.getNote(), is("Auftrags-Nr.: 36338031-3.5.2017")); + + assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(746.48)))); + assertThat(entry.getPortfolioTransaction().getGrossValue(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(741.44)))); + assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.TAX), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); + assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.FEE), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2.04 + 3.00)))); + } + + @Test + public void testWertpapierKauf25() + { + EasyBankAGPDFExtractor extractor = new EasyBankAGPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kauf25.txt"), errors); + + assertThat(errors, empty()); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check security + Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() + .orElseThrow(IllegalArgumentException::new).getSecurity(); + assertThat(security.getIsin(), is("FR0010527275")); + assertThat(security.getName(), is("L . M S C I W a t . ESG F.(DR)UCITS ETF Actions au Port.Dist o.N.")); + assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + + // check buy sell transaction + 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("2022-11-11T00:00"))); + assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(13.76))); + assertThat(entry.getSource(), is("Kauf25.txt")); + assertThat(entry.getNote(), is("Auftrags-Nr.: 36338031-3.5.2017")); + + assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(748.10)))); + assertThat(entry.getPortfolioTransaction().getGrossValue(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(745.10)))); + assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.TAX), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); + assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.FEE), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(3.00)))); + } + + @Test + public void testWertpapierKauf26() + { + EasyBankAGPDFExtractor extractor = new EasyBankAGPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kauf26.txt"), errors); + + assertThat(errors, empty()); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check security + Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() + .orElseThrow(IllegalArgumentException::new).getSecurity(); + assertThat(security.getIsin(), is("IE00BGL86Z12")); + assertThat(security.getName(), is("i S h a r e s I V - Electr.Veh.+Dr.Tech Registered Shares USD Acc.o.N.")); + assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + + // check buy sell transaction + 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("2022-11-11T00:00"))); + assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(118))); + assertThat(entry.getSource(), is("Kauf26.txt")); + assertThat(entry.getNote(), is("Auftrags-Nr.: 36338031-3.5.2017")); + + assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(751.64)))); + assertThat(entry.getPortfolioTransaction().getGrossValue(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(746.59)))); + assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.TAX), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); + assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.FEE), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2.05 + 3.00)))); + } + + @Test + public void testWertpapierKauf27() + { + EasyBankAGPDFExtractor extractor = new EasyBankAGPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kauf27.txt"), errors); + + assertThat(errors, empty()); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check security + Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() + .orElseThrow(IllegalArgumentException::new).getSecurity(); + assertThat(security.getIsin(), is("IE00BYWQWR46")); + assertThat(security.getName(), is("V a n E c k V i d eSports UC. ETF Reg. Shares A USD Acc. o.N.")); + assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + + // check buy sell transaction + 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("2022-11-11T00:00"))); + assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(28.89))); + assertThat(entry.getSource(), is("Kauf27.txt")); + assertThat(entry.getNote(), is("Auftrags-Nr.: 36338031-3.5.2017")); + + assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(764.17)))); + assertThat(entry.getPortfolioTransaction().getGrossValue(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(759.08)))); + assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.TAX), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); + assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.FEE), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2.09 + 3.00)))); + } + + @Test + public void testWertpapierKauf28() + { + EasyBankAGPDFExtractor extractor = new EasyBankAGPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kauf28.txt"), errors); + + assertThat(errors, empty()); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check security + Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() + .orElseThrow(IllegalArgumentException::new).getSecurity(); + assertThat(security.getIsin(), is("IE00BYZK4883")); + assertThat(security.getName(), is("i S h s I V - D i g i talisation U.ETF Registered Shares USD (Acc) oN")); + assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + + // check buy sell transaction + 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("2022-11-11T00:00"))); + assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(173))); + assertThat(entry.getSource(), is("Kauf28.txt")); + assertThat(entry.getNote(), is("Auftrags-Nr.: 36338031-3.5.2017")); + + assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(1148.29)))); + assertThat(entry.getPortfolioTransaction().getGrossValue(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(1142.15)))); + assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.TAX), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); + assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.FEE), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(3.14 + 3.00)))); + } + + @Test + public void testWertpapierKauf29() + { + EasyBankAGPDFExtractor extractor = new EasyBankAGPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kauf29.txt"), errors); + + assertThat(errors, empty()); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check security + Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() + .orElseThrow(IllegalArgumentException::new).getSecurity(); + assertThat(security.getIsin(), is("IE00B1XNHC34")); + assertThat(security.getName(), is("i S h s I I - G l . C lean Energy U.ETF Registered Shares o.N.")); + assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + + // check buy sell transaction + 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("2022-11-11T00:00"))); + assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(128.1618))); + assertThat(entry.getSource(), is("Kauf29.txt")); + assertThat(entry.getNote(), is("Auftrags-Nr.: 36338031-3.5.2017")); + + assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(1494.39)))); + assertThat(entry.getPortfolioTransaction().getGrossValue(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(1487.30)))); + assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.TAX), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); + assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.FEE), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(4.09 + 3.00)))); + } + + @Test + public void testWertpapierKauf30() + { + EasyBankAGPDFExtractor extractor = new EasyBankAGPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kauf30.txt"), errors); + + assertThat(errors, empty()); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check security + Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() + .orElseThrow(IllegalArgumentException::new).getSecurity(); + assertThat(security.getIsin(), is("IE00BM67HT60")); + assertThat(security.getName(), is("X t r . ( I E ) - M S CI Wo.Inform.Techn. Registered Shares 1C USD o.N.")); + assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + + // check buy sell transaction + 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("2022-11-11T00:00"))); + assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(15.67))); + assertThat(entry.getSource(), is("Kauf30.txt")); + assertThat(entry.getNote(), is("Auftrags-Nr.: 36338031-3.5.2017")); + + assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(764.22)))); + assertThat(entry.getPortfolioTransaction().getGrossValue(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(759.13)))); + assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.TAX), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); + assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.FEE), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2.09 + 3.00)))); + } + @Test public void testWertpapierVerkauf01() { @@ -1739,6 +2285,175 @@ public void testDividende15() assertThat(grossValueUnit.getForex(), is(Money.of(CurrencyUnit.USD, Values.Amount.factorize(16.00)))); } + @Test + public void testDividende15WithSecurityinEUR() + { + Security security = new Security("JPMorgan Chase & Co. Registered Shares DL 1", CurrencyUnit.EUR); + security.setIsin("US46625H1005"); + + Client client = new Client(); + client.addSecurity(security); + + EasyBankAGPDFExtractor extractor = new EasyBankAGPDFExtractor(client); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende15.txt"), errors); + + assertThat(errors, empty()); + assertThat(results.size(), is(1)); + 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-11-02T00:00"))); + assertThat(transaction.getShares(), is(Values.Share.factorize(16))); + assertThat(transaction.getSource(), is("Dividende15.txt")); + assertNull(transaction.getNote()); + + assertThat(transaction.getMonetaryAmount(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(11.56)))); + assertThat(transaction.getGrossValue(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(16.00 * 0.99975)))); + assertThat(transaction.getUnitSum(Unit.Type.TAX), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize((2.00 + 2.40) * 0.99975)))); + assertThat(transaction.getUnitSum(Unit.Type.FEE), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.04)))); + + CheckCurrenciesAction c = new CheckCurrenciesAction(); + Account account = new Account(); + account.setCurrencyCode(CurrencyUnit.EUR); + Status s = c.process(transaction, account); + assertThat(s, is(Status.OK_STATUS)); + } + + @Test + public void testDividende16() + { + EasyBankAGPDFExtractor extractor = new EasyBankAGPDFExtractor(new Client()); + + List errors = new ArrayList(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende16.txt"), errors); + + assertThat(errors, empty()); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check security + Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() + .orElseThrow(IllegalArgumentException::new).getSecurity(); + assertThat(security.getIsin(), is("DE000A0F5UK5")); + assertThat(security.getName(), is("i S h . S T . E u . 6 00 Bas.Res.U.ETF DE Inhaber-Anlageaktien")); + assertThat(security.getCurrencyCode(), is(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-10-17T00:00"))); + assertThat(transaction.getShares(), is(Values.Share.factorize(966.48))); + assertThat(transaction.getSource(), is("Dividende16.txt")); + assertNull(transaction.getNote()); + + assertThat(transaction.getMonetaryAmount(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(1043.22)))); + assertThat(transaction.getGrossValue(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(1046.36)))); + assertThat(transaction.getUnitSum(Unit.Type.TAX), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.52)))); + assertThat(transaction.getUnitSum(Unit.Type.FEE), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2.62)))); + } + + @Test + public void testDividende17() + { + EasyBankAGPDFExtractor extractor = new EasyBankAGPDFExtractor(new Client()); + + List errors = new ArrayList(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende17.txt"), errors); + + assertThat(errors, empty()); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check security + Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() + .orElseThrow(IllegalArgumentException::new).getSecurity(); + assertThat(security.getIsin(), is("DE000A0F5UH1")); + assertThat(security.getName(), is("i S h . S T . G l . S el.Div.100 U.ETF DE Inhaber-Anteile")); + assertThat(security.getCurrencyCode(), is(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-10-19T00:00"))); + assertThat(transaction.getShares(), is(Values.Share.factorize(750))); + assertThat(transaction.getSource(), is("Dividende17.txt")); + assertNull(transaction.getNote()); + + assertThat(transaction.getMonetaryAmount(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(232.49)))); + assertThat(transaction.getGrossValue(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(233.63)))); + assertThat(transaction.getUnitSum(Unit.Type.TAX), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.19)))); + assertThat(transaction.getUnitSum(Unit.Type.FEE), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.95)))); + } + + @Test + public void testDividende18() + { + EasyBankAGPDFExtractor extractor = new EasyBankAGPDFExtractor(new Client()); + + List errors = new ArrayList(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende18.txt"), errors); + + assertThat(errors, empty()); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check security + Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() + .orElseThrow(IllegalArgumentException::new).getSecurity(); + assertThat(security.getIsin(), is("IE0032523478")); + assertThat(security.getName(), is("i S h s - E O C o r p Bd Lar.Cap U.ETF Registered Shares o.N.")); + assertThat(security.getCurrencyCode(), is(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-28T00:00"))); + assertThat(transaction.getShares(), is(Values.Share.factorize(374.95))); + assertThat(transaction.getSource(), is("Dividende18.txt")); + assertNull(transaction.getNote()); + + assertThat(transaction.getMonetaryAmount(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(116.93)))); + assertThat(transaction.getGrossValue(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(118.07)))); + assertThat(transaction.getUnitSum(Unit.Type.TAX), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.19)))); + assertThat(transaction.getUnitSum(Unit.Type.FEE), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.95)))); + } + @Test public void testDepotauszug01() { @@ -1766,4 +2481,88 @@ public void testDepotauszug01() assertThat(transaction.getSource(), is("Depotauszug01.txt")); assertThat(transaction.getNote(), is("REF: 38000220627-5336530-0000561")); } + + @Test + public void testDepotauszug02() + { + EasyBankAGPDFExtractor extractor = new EasyBankAGPDFExtractor(new Client()); + + List errors = new ArrayList(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Depotauszug02.txt"), errors); + + assertThat(errors, empty()); + assertThat(results.size(), is(1)); + + // check transaction + // get transactions + Iterator iter = results.stream().filter(TransactionItem.class::isInstance).iterator(); + assertThat(results.stream().filter(i -> i instanceof TransactionItem).count(), is(1L)); + + Item item = iter.next(); + + // assert transaction + AccountTransaction transaction = (AccountTransaction) item.getSubject(); + assertThat(transaction.getType(), is(AccountTransaction.Type.DEPOSIT)); + assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2022-10-18T00:00"))); + assertThat(transaction.getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(1000.00)))); + assertThat(transaction.getSource(), is("Depotauszug02.txt")); + assertThat(transaction.getNote(), is("REF: 38000221017-1648514-0002320")); + } + + @Test + public void testDepotauszug03() + { + EasyBankAGPDFExtractor extractor = new EasyBankAGPDFExtractor(new Client()); + + List errors = new ArrayList(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Depotauszug03.txt"), errors); + + assertThat(errors, empty()); + assertThat(results.size(), is(1)); + + // check transaction + // get transactions + Iterator iter = results.stream().filter(TransactionItem.class::isInstance).iterator(); + assertThat(results.stream().filter(i -> i instanceof TransactionItem).count(), is(1L)); + + Item item = iter.next(); + + // assert transaction + AccountTransaction transaction = (AccountTransaction) item.getSubject(); + assertThat(transaction.getType(), is(AccountTransaction.Type.DEPOSIT)); + assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2022-11-29T00:00"))); + assertThat(transaction.getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(10000.00)))); + assertThat(transaction.getSource(), is("Depotauszug03.txt")); + assertThat(transaction.getNote(), is("REF: 38000221128-0294080-0002067")); + } + + @Test + public void testDepotauszug04() + { + EasyBankAGPDFExtractor extractor = new EasyBankAGPDFExtractor(new Client()); + + List errors = new ArrayList(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Depotauszug04.txt"), errors); + + assertThat(errors, empty()); + assertThat(results.size(), is(1)); + + // check transaction + // get transactions + Iterator iter = results.stream().filter(TransactionItem.class::isInstance).iterator(); + assertThat(results.stream().filter(i -> i instanceof TransactionItem).count(), is(1L)); + + Item item = iter.next(); + + // assert transaction + AccountTransaction transaction = (AccountTransaction) item.getSubject(); + assertThat(transaction.getType(), is(AccountTransaction.Type.FEES)); + assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2022-09-30T00:00"))); + assertThat(transaction.getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(4.50)))); + assertThat(transaction.getSource(), is("Depotauszug04.txt")); + assertThat(transaction.getNote(), is("Kontoführungsgebühr")); + } } diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf18.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf18.txt new file mode 100644 index 0000000000..dd5b98f292 --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf18.txt @@ -0,0 +1,36 @@ +Abrechnung Dauerauftrag +easybank Service Center 36409984-14.11.2022 +BAWAG P.S.K. AG Depot-Nr.: 23456789012 +Wiedner Gürtel 11 Max Mustermann +1100 Wien 35/9835 +BAWAG P.S.K. AG +An +Max Mustermann +Straße 74 +1234 Ort +Wir haben für Sie am 14.11.2022 unten angeführtes Geschäft abgerechnet: +Geschäftsart: Kauf aus Dauerauftrag +Auftrags-Nr.: 36338031-3.5.2017 +Auftragseingang: 11.11.2022-00:26:20 +Zugang: 7,617 Stk +Titel: IE00BM67HK77 X t r . ( I E ) - M S CI Wrld Health Care +Registered Shares 1C USD o.N. +Fondsgesellschaft: Xtrackers (IE) Plc +Kurs: 46,89 EUR +Handelsplatz: XETR Deutsche Börse - Frankfurt Xetra +Handelszeit: 11.11.2022 +Verwahrart: WR +Positionsdaten: Loco: Frankfurt +Kurswert: -357,16 EUR +Eigene Spesen: -0,98 EUR +Grundgebühr: -3,-- EUR +Zu Lasten IBAN AT12 1234 1234 1234 1234 -361,14 EUR +Valuta 15.11.2022 +Kunden UID: ATU12312312 +Es wurde keine Umsatzsteuer verrechnet. +Schlusstag: 11.11.2022 +Kassatag: 15.11.2022 +1.12.2022 Seite 1 +____________________________________________________________________________________ +Diese Mitteilung wird nicht unterschrieben. Irrtum vorbehalten! +01726 Doknr.: ON00-036-0000000001 \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf19.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf19.txt new file mode 100644 index 0000000000..2437671a4f --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf19.txt @@ -0,0 +1,36 @@ +Abrechnung Dauerauftrag +easybank Service Center 36994332-14.11.2022 +BAWAG P.S.K. AG Depot-Nr.: 23456789012 +Wiedner Gürtel 11 Max Mustermann +1100 Wien 35/9835 +BAWAG P.S.K. AG +An +Max Mustermann +Straße 74 +1234 Ort +Wir haben für Sie am 14.11.2022 unten angeführtes Geschäft abgerechnet: +Geschäftsart: Kauf aus Dauerauftrag +Auftrags-Nr.: 36338031-3.5.2017 +Auftragseingang: 11.11.2022-00:26:20 +Zugang: 86 Stk +Titel: IE00BZ0PKT83 i S h s I V - E d g e MSCI Wo.Mult.U.ETF +Registered Shares USD (Acc)o.N +Fondsgesellschaft: iShares IV PLC +Kurs: 8,393 EUR +Handelsplatz: XETR Deutsche Börse - Frankfurt Xetra +Handelszeit: 11.11.2022 +Verwahrart: WR +Positionsdaten: Loco: Frankfurt +Kurswert: -721,80 EUR +Eigene Spesen: -1,98 EUR +Grundgebühr: -3,-- EUR +Zu Lasten IBAN AT12 1234 1234 1234 1234 -726,78 EUR +Valuta 15.11.2022 +Kunden UID: ATU12312312 +Es wurde keine Umsatzsteuer verrechnet. +Schlusstag: 11.11.2022 +Kassatag: 15.11.2022 +1.12.2022 Seite 1 +____________________________________________________________________________________ +Diese Mitteilung wird nicht unterschrieben. Irrtum vorbehalten! +01727 Doknr.: ON00-036-0000000001 \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf20.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf20.txt new file mode 100644 index 0000000000..3e590d2b7c --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf20.txt @@ -0,0 +1,36 @@ +Abrechnung Dauerauftrag +easybank Service Center 36851000-14.11.2022 +BAWAG P.S.K. AG Depot-Nr.: 23456789012 +Wiedner Gürtel 11 Max Mustermann +1100 Wien 35/9835 +BAWAG P.S.K. AG +An +Max Mustermann +Straße 74 +1234 Ort +Wir haben für Sie am 14.11.2022 unten angeführtes Geschäft abgerechnet: +Geschäftsart: Kauf aus Dauerauftrag +Auftrags-Nr.: 36338031-3.5.2017 +Auftragseingang: 11.11.2022-00:26:20 +Zugang: 6,05 Stk +Titel: IE0032523478 i S h s - E O C o r p Bd Lar.Cap U.ETF +Registered Shares o.N. +Fondsgesellschaft: iShares PLC +Kurs: 119,355 EUR +Handelsplatz: XETR Deutsche Börse - Frankfurt Xetra +Handelszeit: 11.11.2022 +Verwahrart: WR +Positionsdaten: Loco: Frankfurt +Kurswert: -722,10 EUR +Eigene Spesen: -1,99 EUR +Grundgebühr: -3,-- EUR +Zu Lasten IBAN AT12 1234 1234 1234 1234 -727,09 EUR +Valuta 15.11.2022 +Kunden UID: ATU12312312 +Es wurde keine Umsatzsteuer verrechnet. +Schlusstag: 11.11.2022 +Kassatag: 15.11.2022 +1.12.2022 Seite 1 +____________________________________________________________________________________ +Diese Mitteilung wird nicht unterschrieben. Irrtum vorbehalten! +01728 Doknr.: ON00-036-0000000001 \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf21.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf21.txt new file mode 100644 index 0000000000..00af8b3153 --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf21.txt @@ -0,0 +1,36 @@ +Abrechnung Dauerauftrag +easybank Service Center 36129950-14.11.2022 +BAWAG P.S.K. AG Depot-Nr.: 23456789012 +Wiedner Gürtel 11 Max Mustermann +1100 Wien 35/9835 +BAWAG P.S.K. AG +An +Max Mustermann +Straße 74 +1234 Ort +Wir haben für Sie am 14.11.2022 unten angeführtes Geschäft abgerechnet: +Geschäftsart: Kauf aus Dauerauftrag +Auftrags-Nr.: 36338031-3.5.2017 +Auftragseingang: 11.11.2022-00:26:19 +Zugang: 23,954 Stk +Titel: IE00B9CQXS71 S P D R S & P G l ob.Div.Aristocr.ETF +Registered Shares o.N. +Fondsgesellschaft: SSgA SPDR ETFs EUROPE I PLC +Kurs: 30,25 EUR +Handelsplatz: XETR Deutsche Börse - Frankfurt Xetra +Handelszeit: 11.11.2022 +Verwahrart: WR +Positionsdaten: Loco: Frankfurt +Kurswert: -724,61 EUR +Eigene Spesen: -1,99 EUR +Grundgebühr: -3,-- EUR +Zu Lasten IBAN AT12 1234 1234 1234 1234 -729,60 EUR +Valuta 15.11.2022 +Kunden UID: ATU12312312 +Es wurde keine Umsatzsteuer verrechnet. +Schlusstag: 11.11.2022 +Kassatag: 15.11.2022 +1.12.2022 Seite 1 +____________________________________________________________________________________ +Diese Mitteilung wird nicht unterschrieben. Irrtum vorbehalten! +01729 Doknr.: ON00-036-0000000001 \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf22.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf22.txt new file mode 100644 index 0000000000..47b0d73d22 --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf22.txt @@ -0,0 +1,36 @@ +Abrechnung Dauerauftrag +easybank Service Center 36562241-14.11.2022 +BAWAG P.S.K. AG Depot-Nr.: 23456789012 +Wiedner Gürtel 11 Max Mustermann +1100 Wien 35/9835 +BAWAG P.S.K. AG +An +Max Mustermann +Straße 74 +1234 Ort +Wir haben für Sie am 14.11.2022 unten angeführtes Geschäft abgerechnet: +Geschäftsart: Kauf aus Dauerauftrag +Auftrags-Nr.: 36338031-3.5.2017 +Auftragseingang: 11.11.2022-00:26:19 +Zugang: 10,065 Stk +Titel: IE00B4L5Y983 i S h s I I I - C o r e MSCI World U.ETF +Registered Shs USD (Acc) o.N. +Fondsgesellschaft: iShares III PLC +Kurs: 73,0179 EUR +Handelsplatz: XETR Deutsche Börse - Frankfurt Xetra +Handelszeit: 11.11.2022 +Verwahrart: WR +Positionsdaten: Loco: Frankfurt +Kurswert: -734,93 EUR +Eigene Spesen: -2,02 EUR +Grundgebühr: -3,-- EUR +Zu Lasten IBAN AT12 1234 1234 1234 1234 -739,95 EUR +Valuta 15.11.2022 +Kunden UID: ATU12312312 +Es wurde keine Umsatzsteuer verrechnet. +Schlusstag: 11.11.2022 +Kassatag: 15.11.2022 +1.12.2022 Seite 1 +____________________________________________________________________________________ +Diese Mitteilung wird nicht unterschrieben. Irrtum vorbehalten! +01730 Doknr.: ON00-036-0000000001 \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf23.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf23.txt new file mode 100644 index 0000000000..60df15ec08 --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf23.txt @@ -0,0 +1,36 @@ +Abrechnung Dauerauftrag +easybank Service Center 36821203-14.11.2022 +BAWAG P.S.K. AG Depot-Nr.: 23456789012 +Wiedner Gürtel 11 Max Mustermann +1100 Wien 35/9835 +BAWAG P.S.K. AG +An +Max Mustermann +Straße 74 +1234 Ort +Wir haben für Sie am 14.11.2022 unten angeführtes Geschäft abgerechnet: +Geschäftsart: Kauf aus Dauerauftrag +Auftrags-Nr.: 36338031-3.5.2017 +Auftragseingang: 11.11.2022-00:26:20 +Zugang: 99,98 Stk +Titel: IE00BYZK4776 i S h a r e s I V - Healthc.Innovation +Registered Shares o.N. +Fondsgesellschaft: iShares IV PLC +Kurs: 7,383 EUR +Handelsplatz: XETR Deutsche Börse - Frankfurt Xetra +Handelszeit: 11.11.2022 +Verwahrart: WR +Positionsdaten: Loco: Frankfurt +Kurswert: -738,15 EUR +Eigene Spesen: -2,03 EUR +Grundgebühr: -3,-- EUR +Zu Lasten IBAN AT12 1234 1234 1234 1234 -743,18 EUR +Valuta 15.11.2022 +Kunden UID: ATU12312312 +Es wurde keine Umsatzsteuer verrechnet. +Schlusstag: 11.11.2022 +Kassatag: 15.11.2022 +1.12.2022 Seite 1 +____________________________________________________________________________________ +Diese Mitteilung wird nicht unterschrieben. Irrtum vorbehalten! +01731 Doknr.: ON00-036-0000000001 \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf24.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf24.txt new file mode 100644 index 0000000000..ecf5a3de4e --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf24.txt @@ -0,0 +1,37 @@ +Abrechnung Dauerauftrag +easybank Service Center 36449879-14.11.2022 +BAWAG P.S.K. AG Depot-Nr.: 23456789012 +Wiedner Gürtel 11 Max Mustermann +1100 Wien 35/9835 +BAWAG P.S.K. AG +An +Max Mustermann +Straße 74 +1234 Ort +Wir haben für Sie am 14.11.2022 unten angeführtes Geschäft abgerechnet: +Geschäftsart: Kauf aus Dauerauftrag +Auftrags-Nr.: 36338031-3.5.2017 +Auftragseingang: 11.11.2022-00:26:19 +Zugang: 11,98 Stk +Titel: DE000A0F5UK5 i S h . S T . E u . 6 00 Bas.Res.U.ETF DE +Inhaber-Anlageaktien +Fondsgesellschaft: iShares [DE] I Investmentaktiengese +llschaft mit Teilgesellschaftsvermö +Kurs: 61,89 EUR +Handelsplatz: XETR Deutsche Börse - Frankfurt Xetra +Handelszeit: 11.11.2022 +Verwahrart: WR +Positionsdaten: Loco: Frankfurt +Kurswert: -741,44 EUR +Eigene Spesen: -2,04 EUR +Grundgebühr: -3,-- EUR +Zu Lasten IBAN AT12 1234 1234 1234 1234 -746,48 EUR +Valuta 15.11.2022 +Kunden UID: ATU12312312 +Es wurde keine Umsatzsteuer verrechnet. +Schlusstag: 11.11.2022 +Kassatag: 15.11.2022 +1.12.2022 Seite 1 +____________________________________________________________________________________ +Diese Mitteilung wird nicht unterschrieben. Irrtum vorbehalten! +01732 Doknr.: ON00-036-0000000001 \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf25.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf25.txt new file mode 100644 index 0000000000..c2159ef8f1 --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf25.txt @@ -0,0 +1,35 @@ +Abrechnung Dauerauftrag +easybank Service Center 36452752-14.11.2022 +BAWAG P.S.K. AG Depot-Nr.: 23456789012 +Wiedner Gürtel 11 Max Mustermann +1100 Wien 35/9835 +BAWAG P.S.K. AG +An +Max Mustermann +Straße 74 +1234 Ort +Wir haben für Sie am 14.11.2022 unten angeführtes Geschäft abgerechnet: +Geschäftsart: Kauf aus Dauerauftrag +Auftrags-Nr.: 36338031-3.5.2017 +Auftragseingang: 11.11.2022-00:26:19 +Zugang: 13,76 Stk +Titel: FR0010527275 L . M S C I W a t . ESG F.(DR)UCITS ETF +Actions au Port.Dist o.N. +Fondsgesellschaft: Multi Units France SICAV +Kurs: 54,15 EUR +Handelsplatz: XETR Deutsche Börse - Frankfurt Xetra +Handelszeit: 11.11.2022 +Verwahrart: WR +Positionsdaten: Loco: Frankfurt +Kurswert: -745,10 EUR +Grundgebühr: -3,-- EUR +Zu Lasten IBAN AT12 1234 1234 1234 1234 -748,10 EUR +Valuta 15.11.2022 +Kunden UID: ATU12312312 +Es wurde keine Umsatzsteuer verrechnet. +Schlusstag: 11.11.2022 +Kassatag: 15.11.2022 +1.12.2022 Seite 1 +____________________________________________________________________________________ +Diese Mitteilung wird nicht unterschrieben. Irrtum vorbehalten! +01733 Doknr.: ON00-036-0000000001 \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf26.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf26.txt new file mode 100644 index 0000000000..22e0c51aa6 --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf26.txt @@ -0,0 +1,36 @@ +Abrechnung Dauerauftrag +easybank Service Center 36751271-14.11.2022 +BAWAG P.S.K. AG Depot-Nr.: 23456789012 +Wiedner Gürtel 11 Max Mustermann +1100 Wien 35/9835 +BAWAG P.S.K. AG +An +Max Mustermann +Straße 74 +1234 Ort +Wir haben für Sie am 14.11.2022 unten angeführtes Geschäft abgerechnet: +Geschäftsart: Kauf aus Dauerauftrag +Auftrags-Nr.: 36338031-3.5.2017 +Auftragseingang: 11.11.2022-00:26:20 +Zugang: 118 Stk +Titel: IE00BGL86Z12 i S h a r e s I V - Electr.Veh.+Dr.Tech +Registered Shares USD Acc.o.N. +Fondsgesellschaft: iShares IV PLC +Kurs: 6,327 EUR +Handelsplatz: XETR Deutsche Börse - Frankfurt Xetra +Handelszeit: 11.11.2022 +Verwahrart: WR +Positionsdaten: Loco: Frankfurt +Kurswert: -746,59 EUR +Eigene Spesen: -2,05 EUR +Grundgebühr: -3,-- EUR +Zu Lasten IBAN AT12 1234 1234 1234 1234 -751,64 EUR +Valuta 15.11.2022 +Kunden UID: ATU12312312 +Es wurde keine Umsatzsteuer verrechnet. +Schlusstag: 11.11.2022 +Kassatag: 15.11.2022 +1.12.2022 Seite 1 +____________________________________________________________________________________ +Diese Mitteilung wird nicht unterschrieben. Irrtum vorbehalten! +01734 Doknr.: ON00-036-0000000001 \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf27.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf27.txt new file mode 100644 index 0000000000..30f47a0831 --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf27.txt @@ -0,0 +1,36 @@ +Abrechnung Dauerauftrag +easybank Service Center 36009995-14.11.2022 +BAWAG P.S.K. AG Depot-Nr.: 23456789012 +Wiedner Gürtel 11 Max Mustermann +1100 Wien 35/9835 +BAWAG P.S.K. AG +An +Max Mustermann +Straße 74 +1234 Ort +Wir haben für Sie am 14.11.2022 unten angeführtes Geschäft abgerechnet: +Geschäftsart: Kauf aus Dauerauftrag +Auftrags-Nr.: 36338031-3.5.2017 +Auftragseingang: 11.11.2022-00:26:20 +Zugang: 28,89 Stk +Titel: IE00BYWQWR46 V a n E c k V i d eSports UC. ETF +Reg. Shares A USD Acc. o.N. +Fondsgesellschaft: VanEck UCITS ETFs PLC +Kurs: 26,275 EUR +Handelsplatz: XETR Deutsche Börse - Frankfurt Xetra +Handelszeit: 11.11.2022 +Verwahrart: WR +Positionsdaten: Loco: Frankfurt +Kurswert: -759,08 EUR +Eigene Spesen: -2,09 EUR +Grundgebühr: -3,-- EUR +Zu Lasten IBAN AT12 1234 1234 1234 1234 -764,17 EUR +Valuta 15.11.2022 +Kunden UID: ATU12312312 +Es wurde keine Umsatzsteuer verrechnet. +Schlusstag: 11.11.2022 +Kassatag: 15.11.2022 +1.12.2022 Seite 1 +____________________________________________________________________________________ +Diese Mitteilung wird nicht unterschrieben. Irrtum vorbehalten! +01735 Doknr.: ON00-036-0000000001 \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf28.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf28.txt new file mode 100644 index 0000000000..ba39b88cbf --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf28.txt @@ -0,0 +1,36 @@ +Abrechnung Dauerauftrag +easybank Service Center 36428406-14.11.2022 +BAWAG P.S.K. AG Depot-Nr.: 23456789012 +Wiedner Gürtel 11 Max Mustermann +1100 Wien 35/9835 +BAWAG P.S.K. AG +An +Max Mustermann +Straße 74 +1234 Ort +Wir haben für Sie am 14.11.2022 unten angeführtes Geschäft abgerechnet: +Geschäftsart: Kauf aus Dauerauftrag +Auftrags-Nr.: 36338031-3.5.2017 +Auftragseingang: 11.11.2022-00:26:20 +Zugang: 173 Stk +Titel: IE00BYZK4883 i S h s I V - D i g i talisation U.ETF +Registered Shares USD (Acc) oN +Fondsgesellschaft: iShares IV PLC +Kurs: 6,602 EUR +Handelsplatz: XETR Deutsche Börse - Frankfurt Xetra +Handelszeit: 11.11.2022 +Verwahrart: WR +Positionsdaten: Loco: Frankfurt +Kurswert: -1.142,15 EUR +Eigene Spesen: -3,14 EUR +Grundgebühr: -3,-- EUR +Zu Lasten IBAN AT12 1234 1234 1234 1234 -1.148,29 EUR +Valuta 15.11.2022 +Kunden UID: ATU12312312 +Es wurde keine Umsatzsteuer verrechnet. +Schlusstag: 11.11.2022 +Kassatag: 15.11.2022 +1.12.2022 Seite 1 +____________________________________________________________________________________ +Diese Mitteilung wird nicht unterschrieben. Irrtum vorbehalten! +01736 Doknr.: ON00-036-0000000001 \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf29.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf29.txt new file mode 100644 index 0000000000..573ecb144a --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf29.txt @@ -0,0 +1,36 @@ +Abrechnung Dauerauftrag +easybank Service Center 36975624-14.11.2022 +BAWAG P.S.K. AG Depot-Nr.: 23456789012 +Wiedner Gürtel 11 Max Mustermann +1100 Wien 35/9835 +BAWAG P.S.K. AG +An +Max Mustermann +Straße 74 +1234 Ort +Wir haben für Sie am 14.11.2022 unten angeführtes Geschäft abgerechnet: +Geschäftsart: Kauf aus Dauerauftrag +Auftrags-Nr.: 36338031-3.5.2017 +Auftragseingang: 11.11.2022-00:26:19 +Zugang: 128,1618 Stk +Titel: IE00B1XNHC34 i S h s I I - G l . C lean Energy U.ETF +Registered Shares o.N. +Fondsgesellschaft: iShares II PLC +Kurs: 11,6049 EUR +Handelsplatz: XETR Deutsche Börse - Frankfurt Xetra +Handelszeit: 11.11.2022 +Verwahrart: WR +Positionsdaten: Loco: Frankfurt +Kurswert: -1.487,30 EUR +Eigene Spesen: -4,09 EUR +Grundgebühr: -3,-- EUR +Zu Lasten IBAN AT12 1234 1234 1234 1234 -1.494,39 EUR +Valuta 15.11.2022 +Kunden UID: ATU12312312 +Es wurde keine Umsatzsteuer verrechnet. +Schlusstag: 11.11.2022 +Kassatag: 15.11.2022 +1.12.2022 Seite 1 +____________________________________________________________________________________ +Diese Mitteilung wird nicht unterschrieben. Irrtum vorbehalten! +01737 Doknr.: ON00-036-0000000001 \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf30.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf30.txt new file mode 100644 index 0000000000..d51bebc0f5 --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/easybankag/Kauf30.txt @@ -0,0 +1,36 @@ +Abrechnung Dauerauftrag +easybank Service Center 36292707-25.11.2022 +BAWAG P.S.K. AG Depot-Nr.: 23456789012 +Wiedner Gürtel 11 Max Mustermann +1100 Wien 35/9835 +BAWAG P.S.K. AG +An +Max Mustermann +Straße 74 +1234 Ort +Wir haben für Sie am 25.11.2022 unten angeführtes Geschäft abgerechnet: +Geschäftsart: Kauf aus Dauerauftrag +Auftrags-Nr.: 36338031-3.5.2017 +Auftragseingang: 11.11.2022-00:26:20 +Zugang: 15,67 Stk +Titel: IE00BM67HT60 X t r . ( I E ) - M S CI Wo.Inform.Techn. +Registered Shares 1C USD o.N. +Fondsgesellschaft: Xtrackers (IE) Plc +Kurs: 48,445 EUR +Handelsplatz: XETR Deutsche Börse - Frankfurt Xetra +Handelszeit: 11.11.2022 +Verwahrart: WR +Positionsdaten: Loco: Frankfurt +Kurswert: -759,13 EUR +Eigene Spesen: -2,09 EUR +Grundgebühr: -3,-- EUR +Zu Lasten IBAN AT12 1234 1234 1234 1234 -764,22 EUR +Valuta 15.11.2022 +Kunden UID: ATU12312312 +Es wurde keine Umsatzsteuer verrechnet. +Schlusstag: 11.11.2022 +Kassatag: 15.11.2022 +1.12.2022 Seite 1 +____________________________________________________________________________________ +Diese Mitteilung wird nicht unterschrieben. Irrtum vorbehalten! +01738 Doknr.: ON00-036-0000000001 \ No newline at end of file diff --git a/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/EasyBankAGPDFExtractor.java b/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/EasyBankAGPDFExtractor.java index 93db6f0aa1..35b1383972 100644 --- a/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/EasyBankAGPDFExtractor.java +++ b/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/EasyBankAGPDFExtractor.java @@ -48,7 +48,7 @@ private void addBuySellTransaction() return entry; }); - Block firstRelevantLine = new Block("^Gesch.ftsart: (Kauf|Verkauf|Kauf aus Dauerauftrag).*$"); + Block firstRelevantLine = new Block("^Wir haben f.r Sie am [\\d]{1,2}\\.[\\d]{1,2}\\.[\\d]{4} unten angef.hrtes Gesch.ft abgerechnet:$"); type.addBlock(firstRelevantLine); firstRelevantLine.set(pdfTransaction); @@ -87,6 +87,12 @@ private void addBuySellTransaction() .attributes("date", "time") .match("^Schlusstag\\/\\-zeit: (?[\\d]{1,2}\\.[\\d]{1,2}\\.[\\d]{4}) (?