From b428dc221b2a6bbeb02154a290e538731d584caa Mon Sep 17 00:00:00 2001 From: Nirus2000 Date: Wed, 16 Mar 2022 19:41:54 +0100 Subject: [PATCH] Modify DZ Bank PDF-Importer to support new transactions https://forum.portfolio-performance.info/t/pdf-import-von-unioninvest-volksbank-dz-bank/1686/82 Add missing testparts Optimize regEx Optimize source Optimize testcases (Standardization) --- .../DZBankGruppePDFExtractorTest.java | 799 ++++++++++++------ .../pdf/dzbankgruppe/Umsatzuebersicht12.txt | 176 ++++ .../pdf/DZBankGruppePDFExtractor.java | 269 ++++-- 3 files changed, 925 insertions(+), 319 deletions(-) create mode 100644 name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/dzbankgruppe/Umsatzuebersicht12.txt diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/dzbankgruppe/DZBankGruppePDFExtractorTest.java b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/dzbankgruppe/DZBankGruppePDFExtractorTest.java index d424533343..c34e52871f 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/dzbankgruppe/DZBankGruppePDFExtractorTest.java +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/dzbankgruppe/DZBankGruppePDFExtractorTest.java @@ -1,15 +1,13 @@ package name.abuchen.portfolio.datatransfer.pdf.dzbankgruppe; -import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.collection.IsEmptyCollection.empty; +import static org.junit.Assert.assertNull; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; -import java.util.Optional; -import java.util.stream.Collectors; import org.junit.Test; @@ -47,7 +45,7 @@ public void testWertpapierKauf01() new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(i -> i instanceof SecurityItem).findFirst() + Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() .orElseThrow(IllegalArgumentException::new).getSecurity(); assertThat(security.getIsin(), is("ES0177542018")); assertThat(security.getWkn(), is("A1H6AJ")); @@ -55,8 +53,8 @@ public void testWertpapierKauf01() assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); // check buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem) - .collect(Collectors.toList()).get(0).getSubject(); + BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); @@ -90,7 +88,7 @@ public void testWertpapierKauf02() new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(i -> i instanceof SecurityItem).findFirst() + Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() .orElseThrow(IllegalArgumentException::new).getSecurity(); assertThat(security.getIsin(), is("DE000XNG8888")); assertThat(security.getWkn(), is("XNG888")); @@ -98,8 +96,8 @@ public void testWertpapierKauf02() assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); // check buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem) - .collect(Collectors.toList()).get(0).getSubject(); + BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); @@ -133,7 +131,7 @@ public void testWertpapierKauf03() new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(i -> i instanceof SecurityItem).findFirst() + Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() .orElseThrow(IllegalArgumentException::new).getSecurity(); assertThat(security.getIsin(), is("DE0007100000")); assertThat(security.getWkn(), is("710000")); @@ -141,8 +139,8 @@ public void testWertpapierKauf03() assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); // check buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem) - .collect(Collectors.toList()).get(0).getSubject(); + BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); @@ -176,7 +174,7 @@ public void testWertpapierKauf04() new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(i -> i instanceof SecurityItem).findFirst() + Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() .orElseThrow(IllegalArgumentException::new).getSecurity(); assertThat(security.getIsin(), is("US65339F1012")); assertThat(security.getWkn(), is("A1CZ4H")); @@ -184,8 +182,8 @@ public void testWertpapierKauf04() assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); // check buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem) - .collect(Collectors.toList()).get(0).getSubject(); + BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); @@ -219,7 +217,7 @@ public void testWertpapierKauf05() new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(i -> i instanceof SecurityItem).findFirst() + Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() .orElseThrow(IllegalArgumentException::new).getSecurity(); assertThat(security.getIsin(), is("US90353T1007")); assertThat(security.getWkn(), is("A2PHHG")); @@ -227,8 +225,8 @@ public void testWertpapierKauf05() assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); // check buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem) - .collect(Collectors.toList()).get(0).getSubject(); + BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); @@ -262,7 +260,7 @@ public void testWertpapierKauf06() new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(i -> i instanceof SecurityItem).findFirst() + Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() .orElseThrow(IllegalArgumentException::new).getSecurity(); assertThat(security.getIsin(), is("DE0008404005")); assertThat(security.getWkn(), is("840400")); @@ -270,8 +268,8 @@ public void testWertpapierKauf06() assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); // check buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem) - .collect(Collectors.toList()).get(0).getSubject(); + BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); @@ -305,7 +303,7 @@ public void testWertpapierKauf07() new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(i -> i instanceof SecurityItem).findFirst() + Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() .orElseThrow(IllegalArgumentException::new).getSecurity(); assertThat(security.getIsin(), is("IE00BYYXBF44")); assertThat(security.getWkn(), is("A2AHZU")); @@ -313,8 +311,8 @@ public void testWertpapierKauf07() assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); // check buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem) - .collect(Collectors.toList()).get(0).getSubject(); + BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); @@ -348,7 +346,7 @@ public void testWertpapierVerkauf01() new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(i -> i instanceof SecurityItem).findFirst() + Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() .orElseThrow(IllegalArgumentException::new).getSecurity(); assertThat(security.getIsin(), is("DE000NWRK013")); assertThat(security.getWkn(), is("NWRK01")); @@ -356,8 +354,8 @@ public void testWertpapierVerkauf01() assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); // check buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem) - .collect(Collectors.toList()).get(0).getSubject(); + BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.SELL)); assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.SELL)); @@ -376,18 +374,16 @@ public void testWertpapierVerkauf01() assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.FEE), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(9.95 + 0.10)))); - // check tax-refund buy sell transaction - Optional item = results.stream().filter(i -> i instanceof BuySellEntryItem).findFirst(); - item = results.stream().filter(i -> i instanceof TransactionItem).findFirst(); - assertThat(item.isPresent(), is(true)); - assertThat(item.get().getSubject(), instanceOf(AccountTransaction.class)); - AccountTransaction transaction = (AccountTransaction) item.get().getSubject(); + // check tax refund transaction + AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) + .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(transaction.getType(), is(AccountTransaction.Type.TAX_REFUND)); - assertThat(transaction.getSource(), is("Verkauf01.txt")); - assertThat(transaction.getNote(), is("Verrechnete Aktienverluste 112,10- EUR")); assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2019-08-13T00:00"))); + assertThat(transaction.getShares(), is(Values.Share.factorize(2))); + assertThat(transaction.getSource(), is("Verkauf01.txt")); + assertThat(transaction.getNote(), is("Verrechnete Aktienverluste 112,10- EUR")); assertThat(transaction.getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(29.57)))); @@ -413,7 +409,7 @@ public void testWertpapierVerkauf02() new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(i -> i instanceof SecurityItem).findFirst() + Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() .orElseThrow(IllegalArgumentException::new).getSecurity(); assertThat(security.getIsin(), is("DE000BAY0017")); assertThat(security.getWkn(), is("BAY001")); @@ -421,8 +417,8 @@ public void testWertpapierVerkauf02() assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); // check buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem) - .collect(Collectors.toList()).get(0).getSubject(); + BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.SELL)); assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.SELL)); @@ -456,7 +452,7 @@ public void testWertpapierVerkauf03() new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(i -> i instanceof SecurityItem).findFirst() + Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() .orElseThrow(IllegalArgumentException::new).getSecurity(); assertThat(security.getIsin(), is("US64110L1061")); assertThat(security.getWkn(), is("552484")); @@ -464,8 +460,8 @@ public void testWertpapierVerkauf03() assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); // check buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem) - .collect(Collectors.toList()).get(0).getSubject(); + BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.SELL)); assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.SELL)); @@ -499,7 +495,7 @@ public void testWertpapierVerkauf04() new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(i -> i instanceof SecurityItem).findFirst() + Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() .orElseThrow(IllegalArgumentException::new).getSecurity(); assertThat(security.getIsin(), is("US29786A1060")); assertThat(security.getWkn(), is("A14P98")); @@ -507,8 +503,8 @@ public void testWertpapierVerkauf04() assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); // check buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem) - .collect(Collectors.toList()).get(0).getSubject(); + BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.SELL)); assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.SELL)); @@ -527,18 +523,16 @@ public void testWertpapierVerkauf04() assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.FEE), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(9.95 + 0.10)))); - // check tax-refund buy sell transaction - Optional item = results.stream().filter(i -> i instanceof BuySellEntryItem).findFirst(); - item = results.stream().filter(i -> i instanceof TransactionItem).findFirst(); - assertThat(item.isPresent(), is(true)); - assertThat(item.get().getSubject(), instanceOf(AccountTransaction.class)); - AccountTransaction transaction = (AccountTransaction) item.get().getSubject(); + // check tax refund transaction + AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) + .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(transaction.getType(), is(AccountTransaction.Type.TAX_REFUND)); - assertThat(transaction.getSource(), is("Verkauf04.txt")); - assertThat(transaction.getNote(), is("Verrechnete Aktienverluste 99,50- EUR")); assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2021-01-27T00:00"))); + assertThat(transaction.getShares(), is(Values.Share.factorize(5))); + assertThat(transaction.getSource(), is("Verkauf04.txt")); + assertThat(transaction.getNote(), is("Verrechnete Aktienverluste 99,50- EUR")); assertThat(transaction.getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(26.23)))); @@ -564,14 +558,14 @@ public void testWertpapierDividende01() new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(i -> i instanceof SecurityItem).findFirst() + Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() .orElseThrow(IllegalArgumentException::new).getSecurity(); assertThat(security.getIsin(), is("PLOPTTC00011")); assertThat(security.getWkn(), is("534356")); assertThat(security.getName(), is("CD PROJEKT S.A. INHABER-AKTIEN C ZY 1")); // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(i -> i instanceof TransactionItem) + AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); @@ -579,10 +573,11 @@ public void testWertpapierDividende01() assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2021-06-10T00:00"))); assertThat(transaction.getShares(), is(Values.Share.factorize(17))); assertThat(transaction.getSource(), is("Dividende01.txt")); + assertNull(transaction.getNote()); - assertThat(transaction.getMonetaryAmount(), + assertThat(transaction.getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(13.28)))); - assertThat(transaction.getGrossValue(), + assertThat(transaction.getGrossValue(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(18.87)))); assertThat(transaction.getUnitSum(Unit.Type.TAX), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(3.59 + 1.89 + 0.11)))); @@ -604,14 +599,14 @@ public void testWertpapierDividende02() new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(i -> i instanceof SecurityItem).findFirst() + Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() .orElseThrow(IllegalArgumentException::new).getSecurity(); assertThat(security.getIsin(), is("CA0679011084")); assertThat(security.getWkn(), is("870450")); assertThat(security.getName(), is("BARRICK GOLD CORP. SHARES REGISTERED SHARES O.N.")); // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(i -> i instanceof TransactionItem) + AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); @@ -621,9 +616,9 @@ public void testWertpapierDividende02() assertThat(transaction.getSource(), is("Dividende02.txt")); assertThat(transaction.getNote(), is("Quartalsdividende")); - assertThat(transaction.getMonetaryAmount(), + assertThat(transaction.getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(9.92)))); - assertThat(transaction.getGrossValue(), + assertThat(transaction.getGrossValue(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(15.39)))); assertThat(transaction.getUnitSum(Unit.Type.TAX), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2.31 + 1.54 + 0.08 + (1.85 / 1.1989))))); @@ -645,14 +640,14 @@ public void testWertpapierDividende03() new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(i -> i instanceof SecurityItem).findFirst() + Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() .orElseThrow(IllegalArgumentException::new).getSecurity(); assertThat(security.getIsin(), is("DE0007236101")); assertThat(security.getWkn(), is("723610")); assertThat(security.getName(), is("SIEMENS AG NAMENS-AKTIEN O.N.")); // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(i -> i instanceof TransactionItem) + AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); @@ -660,10 +655,11 @@ public void testWertpapierDividende03() assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2021-02-08T00:00"))); assertThat(transaction.getShares(), is(Values.Share.factorize(160))); assertThat(transaction.getSource(), is("Dividende03.txt")); + assertNull(transaction.getNote()); - assertThat(transaction.getMonetaryAmount(), + assertThat(transaction.getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(560.00)))); - assertThat(transaction.getGrossValue(), + assertThat(transaction.getGrossValue(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(560.00)))); assertThat(transaction.getUnitSum(Unit.Type.TAX), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); @@ -685,14 +681,14 @@ public void testWertpapierDividende04() new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(i -> i instanceof SecurityItem).findFirst() + Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() .orElseThrow(IllegalArgumentException::new).getSecurity(); assertThat(security.getIsin(), is("IE00BYYXBF44")); assertThat(security.getWkn(), is("A2AHZU")); assertThat(security.getName(), is("I.M.III-I.FTSE EM H.D.L.V.UETF REG. SHARES DIS O.N.")); // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(i -> i instanceof TransactionItem) + AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); @@ -700,10 +696,11 @@ public void testWertpapierDividende04() assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2021-03-24T00:00"))); assertThat(transaction.getShares(), is(Values.Share.factorize(350))); assertThat(transaction.getSource(), is("Dividende04.txt")); + assertNull(transaction.getNote()); - assertThat(transaction.getMonetaryAmount(), + assertThat(transaction.getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(61.58)))); - assertThat(transaction.getGrossValue(), + assertThat(transaction.getGrossValue(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(61.58)))); assertThat(transaction.getUnitSum(Unit.Type.TAX), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); @@ -725,14 +722,14 @@ public void testWertpapierDividende05() new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(i -> i instanceof SecurityItem).findFirst() + Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() .orElseThrow(IllegalArgumentException::new).getSecurity(); assertThat(security.getIsin(), is("DE000A0Z2ZZ5")); assertThat(security.getWkn(), is("A0Z2ZZ")); assertThat(security.getName(), is("FREENET AG NAMENS-AKTIEN O.N.")); // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(i -> i instanceof TransactionItem) + AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); @@ -740,10 +737,11 @@ public void testWertpapierDividende05() assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2021-06-23T00:00"))); assertThat(transaction.getShares(), is(Values.Share.factorize(250))); assertThat(transaction.getSource(), is("Dividende05.txt")); + assertNull(transaction.getNote()); - assertThat(transaction.getMonetaryAmount(), + assertThat(transaction.getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(412.50)))); - assertThat(transaction.getGrossValue(), + assertThat(transaction.getGrossValue(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(412.50)))); assertThat(transaction.getUnitSum(Unit.Type.TAX), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); @@ -765,15 +763,15 @@ public void testUmsatzuebersicht01() new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(i -> i instanceof SecurityItem).findFirst() + Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() .orElseThrow(IllegalArgumentException::new).getSecurity(); assertThat(security.getIsin(), is("DE000A0RPAN3")); assertThat(security.getName(), is("PrivatFonds: Kontrolliert pro")); assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); // check buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem) - .collect(Collectors.toList()).get(0).getSubject(); + BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); @@ -781,6 +779,7 @@ public void testUmsatzuebersicht01() assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2017-07-17T00:00"))); assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(14.286))); assertThat(entry.getSource(), is("Umsatzuebersicht01.txt")); + assertNull(entry.getNote()); assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2125.00)))); @@ -806,51 +805,51 @@ public void testUmsatzuebersicht02() new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security1 = results.stream().filter(i -> i instanceof SecurityItem).findFirst() + Security security1 = results.stream().filter(SecurityItem.class::isInstance).findFirst() .orElseThrow(IllegalArgumentException::new).getSecurity(); assertThat(security1.getIsin(), is("FR0011269588")); assertThat(security1.getName(), is("Carmignac Patrimoine FCP D EUR")); assertThat(security1.getCurrencyCode(), is(CurrencyUnit.EUR)); - Security security2 = results.stream().filter(i -> i instanceof SecurityItem).skip(1).findFirst() + Security security2 = results.stream().filter(SecurityItem.class::isInstance).skip(1).findFirst() .orElseThrow(IllegalArgumentException::new).getSecurity(); assertThat(security2.getIsin(), is("LU0599946976")); assertThat(security2.getName(), is("Deutsche Concept SICAV - Kaldemorge")); assertThat(security2.getCurrencyCode(), is(CurrencyUnit.EUR)); - Security security3 = results.stream().filter(i -> i instanceof SecurityItem).skip(2).findFirst() + Security security3 = results.stream().filter(SecurityItem.class::isInstance).skip(2).findFirst() .orElseThrow(IllegalArgumentException::new).getSecurity(); assertThat(security3.getIsin(), is("DE000A0KFTH1")); assertThat(security3.getName(), is("First Private Wealth B")); assertThat(security3.getCurrencyCode(), is(CurrencyUnit.EUR)); - Security security4 = results.stream().filter(i -> i instanceof SecurityItem).skip(3).findFirst() + Security security4 = results.stream().filter(SecurityItem.class::isInstance).skip(3).findFirst() .orElseThrow(IllegalArgumentException::new).getSecurity(); assertThat(security4.getIsin(), is("LU0720541993")); assertThat(security4.getName(), is("LOYS FCP-Global L/S P")); assertThat(security4.getCurrencyCode(), is(CurrencyUnit.EUR)); - Security security5 = results.stream().filter(i -> i instanceof SecurityItem).skip(4).findFirst() + Security security5 = results.stream().filter(SecurityItem.class::isInstance).skip(4).findFirst() .orElseThrow(IllegalArgumentException::new).getSecurity(); assertThat(security5.getIsin(), is("DE000A0RPAN3")); assertThat(security5.getName(), is("PrivatFonds: Kontrolliert pro")); assertThat(security5.getCurrencyCode(), is(CurrencyUnit.EUR)); - Security security6 = results.stream().filter(i -> i instanceof SecurityItem).skip(5).findFirst() + Security security6 = results.stream().filter(SecurityItem.class::isInstance).skip(5).findFirst() .orElseThrow(IllegalArgumentException::new).getSecurity(); assertThat(security6.getIsin(), is("LU0323578657")); assertThat(security6.getName(), is("Flossbach von Storch SICAV - Multip")); assertThat(security6.getCurrencyCode(), is(CurrencyUnit.EUR)); - Security security7 = results.stream().filter(i -> i instanceof SecurityItem).skip(6).findFirst() + Security security7 = results.stream().filter(SecurityItem.class::isInstance).skip(6).findFirst() .orElseThrow(IllegalArgumentException::new).getSecurity(); assertThat(security7.getIsin(), is("LU0395794307")); assertThat(security7.getName(), is("JPMorgan Funds - Global Income Fund")); assertThat(security7.getCurrencyCode(), is(CurrencyUnit.EUR)); // check 1st security buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem) - .collect(Collectors.toList()).get(0).getSubject(); + BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); @@ -858,6 +857,7 @@ public void testUmsatzuebersicht02() assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2017-09-15T00:00"))); assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(18.730))); assertThat(entry.getSource(), is("Umsatzuebersicht02.txt")); + assertNull(entry.getNote()); assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2125.00)))); @@ -868,8 +868,8 @@ public void testUmsatzuebersicht02() assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.FEE), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(41.67)))); - entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem) - .collect(Collectors.toList()).get(1).getSubject(); + entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).skip(1).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); @@ -877,6 +877,7 @@ public void testUmsatzuebersicht02() assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2017-10-16T00:00"))); assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(18.658))); assertThat(entry.getSource(), is("Umsatzuebersicht02.txt")); + assertNull(entry.getNote()); assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2125.00)))); @@ -887,8 +888,8 @@ public void testUmsatzuebersicht02() assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.FEE), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(41.67)))); - entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem) - .collect(Collectors.toList()).get(2).getSubject(); + entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).skip(2).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); @@ -896,6 +897,7 @@ public void testUmsatzuebersicht02() assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2017-11-15T00:00"))); assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(19.010))); assertThat(entry.getSource(), is("Umsatzuebersicht02.txt")); + assertNull(entry.getNote()); assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2125.00)))); @@ -907,8 +909,8 @@ public void testUmsatzuebersicht02() is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(41.67)))); // check 2nd security buy sell transaction - entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem) - .collect(Collectors.toList()).get(3).getSubject(); + entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).skip(3).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); @@ -916,6 +918,7 @@ public void testUmsatzuebersicht02() assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2017-09-15T00:00"))); assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(15.025))); assertThat(entry.getSource(), is("Umsatzuebersicht02.txt")); + assertNull(entry.getNote()); assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2125.00)))); @@ -926,8 +929,8 @@ public void testUmsatzuebersicht02() assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.FEE), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(56.87)))); - entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem) - .collect(Collectors.toList()).get(4).getSubject(); + entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).skip(4).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); @@ -935,6 +938,7 @@ public void testUmsatzuebersicht02() assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2017-10-16T00:00"))); assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(14.869))); assertThat(entry.getSource(), is("Umsatzuebersicht02.txt")); + assertNull(entry.getNote()); assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2125.00)))); @@ -946,8 +950,8 @@ public void testUmsatzuebersicht02() is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(56.87)))); // check 3rd security buy sell transaction - entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem) - .collect(Collectors.toList()).get(5).getSubject(); + entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).skip(5).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); @@ -955,6 +959,7 @@ public void testUmsatzuebersicht02() assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2017-11-15T00:00"))); assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(14.950))); assertThat(entry.getSource(), is("Umsatzuebersicht02.txt")); + assertNull(entry.getNote()); assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2125.00)))); @@ -966,8 +971,8 @@ public void testUmsatzuebersicht02() is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(56.87)))); // check 4th security buy sell transaction - entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem) - .collect(Collectors.toList()).get(6).getSubject(); + entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).skip(6).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); @@ -975,6 +980,7 @@ public void testUmsatzuebersicht02() assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2017-09-15T00:00"))); assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(28.739))); assertThat(entry.getSource(), is("Umsatzuebersicht02.txt")); + assertNull(entry.getNote()); assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2125.00)))); @@ -985,8 +991,8 @@ public void testUmsatzuebersicht02() assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.FEE), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(31.40)))); - entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem) - .collect(Collectors.toList()).get(7).getSubject(); + entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).skip(7).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); @@ -994,6 +1000,7 @@ public void testUmsatzuebersicht02() assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2017-10-16T00:00"))); assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(28.395))); assertThat(entry.getSource(), is("Umsatzuebersicht02.txt")); + assertNull(entry.getNote()); assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2125.00)))); @@ -1004,8 +1011,8 @@ public void testUmsatzuebersicht02() assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.FEE), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(31.40)))); - entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem) - .collect(Collectors.toList()).get(8).getSubject(); + entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).skip(8).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); @@ -1013,6 +1020,7 @@ public void testUmsatzuebersicht02() assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2017-11-15T00:00"))); assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(28.461))); assertThat(entry.getSource(), is("Umsatzuebersicht02.txt")); + assertNull(entry.getNote()); assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2125.00)))); @@ -1024,8 +1032,8 @@ public void testUmsatzuebersicht02() is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(31.40)))); // check 5th security buy sell transaction - entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem) - .collect(Collectors.toList()).get(9).getSubject(); + entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).skip(9).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); @@ -1033,6 +1041,7 @@ public void testUmsatzuebersicht02() assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2017-09-15T00:00"))); assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(29.894))); assertThat(entry.getSource(), is("Umsatzuebersicht02.txt")); + assertNull(entry.getNote()); assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2125.00)))); @@ -1043,8 +1052,8 @@ public void testUmsatzuebersicht02() assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.FEE), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(51.83)))); - entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem) - .collect(Collectors.toList()).get(10).getSubject(); + entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).skip(10).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); @@ -1052,6 +1061,7 @@ public void testUmsatzuebersicht02() assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2017-10-16T00:00"))); assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(29.766))); assertThat(entry.getSource(), is("Umsatzuebersicht02.txt")); + assertNull(entry.getNote()); assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2125.00)))); @@ -1062,8 +1072,8 @@ public void testUmsatzuebersicht02() assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.FEE), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(51.83)))); - entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem) - .collect(Collectors.toList()).get(11).getSubject(); + entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).skip(11).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); @@ -1071,6 +1081,7 @@ public void testUmsatzuebersicht02() assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2017-11-15T00:00"))); assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(30.199))); assertThat(entry.getSource(), is("Umsatzuebersicht02.txt")); + assertNull(entry.getNote()); assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2125.00)))); @@ -1082,8 +1093,8 @@ public void testUmsatzuebersicht02() is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(51.83)))); // check 6th security buy sell transaction - entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem) - .collect(Collectors.toList()).get(12).getSubject(); + entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).skip(12).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); @@ -1091,6 +1102,7 @@ public void testUmsatzuebersicht02() assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2017-09-15T00:00"))); assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(14.420))); assertThat(entry.getSource(), is("Umsatzuebersicht02.txt")); + assertNull(entry.getNote()); assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2125.00)))); @@ -1101,8 +1113,8 @@ public void testUmsatzuebersicht02() assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.FEE), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); - entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem) - .collect(Collectors.toList()).get(13).getSubject(); + entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).skip(13).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); @@ -1110,6 +1122,7 @@ public void testUmsatzuebersicht02() assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2017-10-16T00:00"))); assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(14.086))); assertThat(entry.getSource(), is("Umsatzuebersicht02.txt")); + assertNull(entry.getNote()); assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2125.00)))); @@ -1120,8 +1133,8 @@ public void testUmsatzuebersicht02() assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.FEE), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); - entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem) - .collect(Collectors.toList()).get(14).getSubject(); + entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).skip(14).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); @@ -1129,6 +1142,7 @@ public void testUmsatzuebersicht02() assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2017-11-15T00:00"))); assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(14.251))); assertThat(entry.getSource(), is("Umsatzuebersicht02.txt")); + assertNull(entry.getNote()); assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2125.00)))); @@ -1140,8 +1154,8 @@ public void testUmsatzuebersicht02() is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); // check 7th security buy sell transaction - entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem) - .collect(Collectors.toList()).get(15).getSubject(); + entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).skip(15).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); @@ -1149,6 +1163,7 @@ public void testUmsatzuebersicht02() assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2017-09-15T00:00"))); assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(8.853))); assertThat(entry.getSource(), is("Umsatzuebersicht02.txt")); + assertNull(entry.getNote()); assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2125.00)))); @@ -1159,8 +1174,8 @@ public void testUmsatzuebersicht02() assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.FEE), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(51.83)))); - entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem) - .collect(Collectors.toList()).get(16).getSubject(); + entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).skip(16).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); @@ -1168,6 +1183,7 @@ public void testUmsatzuebersicht02() assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2017-10-16T00:00"))); assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(8.708))); assertThat(entry.getSource(), is("Umsatzuebersicht02.txt")); + assertNull(entry.getNote()); assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2125.00)))); @@ -1178,8 +1194,8 @@ public void testUmsatzuebersicht02() assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.FEE), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(51.83)))); - entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem) - .collect(Collectors.toList()).get(17).getSubject(); + entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).skip(17).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); @@ -1187,6 +1203,7 @@ public void testUmsatzuebersicht02() assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2017-11-15T00:00"))); assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(8.729))); assertThat(entry.getSource(), is("Umsatzuebersicht02.txt")); + assertNull(entry.getNote()); assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2125.00)))); @@ -1198,8 +1215,8 @@ public void testUmsatzuebersicht02() is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(51.83)))); // check 7th security buy sell transaction - entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem) - .collect(Collectors.toList()).get(18).getSubject(); + entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).skip(18).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); @@ -1207,6 +1224,7 @@ public void testUmsatzuebersicht02() assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2017-09-15T00:00"))); assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(14.585))); assertThat(entry.getSource(), is("Umsatzuebersicht02.txt")); + assertNull(entry.getNote()); assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2125.00)))); @@ -1217,8 +1235,8 @@ public void testUmsatzuebersicht02() assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.FEE), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(51.83)))); - entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem) - .collect(Collectors.toList()).get(19).getSubject(); + entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).skip(19).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); @@ -1226,6 +1244,7 @@ public void testUmsatzuebersicht02() assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2017-10-16T00:00"))); assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(14.364))); assertThat(entry.getSource(), is("Umsatzuebersicht02.txt")); + assertNull(entry.getNote()); assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2125.00)))); @@ -1236,8 +1255,8 @@ public void testUmsatzuebersicht02() assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.FEE), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(51.83)))); - entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem) - .collect(Collectors.toList()).get(20).getSubject(); + entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).skip(20).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); @@ -1245,6 +1264,7 @@ public void testUmsatzuebersicht02() assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2017-11-15T00:00"))); assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(14.671))); assertThat(entry.getSource(), is("Umsatzuebersicht02.txt")); + assertNull(entry.getNote()); assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2125.00)))); @@ -1255,8 +1275,8 @@ public void testUmsatzuebersicht02() assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.FEE), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(51.83)))); - entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem) - .collect(Collectors.toList()).get(21).getSubject(); + entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).skip(21).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); @@ -1276,7 +1296,7 @@ public void testUmsatzuebersicht02() is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); // check 7th security dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(i -> i instanceof TransactionItem) + AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); @@ -1284,6 +1304,7 @@ public void testUmsatzuebersicht02() assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2017-11-24T00:00"))); assertThat(transaction.getShares(), is(Values.Share.factorize(0.665))); assertThat(transaction.getSource(), is("Umsatzuebersicht02.txt")); + assertNull(transaction.getNote()); assertThat(transaction.getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(94.78)))); @@ -1309,15 +1330,15 @@ public void testUmsatzuebersicht03() new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(i -> i instanceof SecurityItem).findFirst() + Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() .orElseThrow(IllegalArgumentException::new).getSecurity(); assertThat(security.getIsin(), is("DE0009805515")); assertThat(security.getName(), is("UniImmo: Europa")); assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); // check buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem) - .collect(Collectors.toList()).get(0).getSubject(); + BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); @@ -1337,7 +1358,7 @@ public void testUmsatzuebersicht03() is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(i -> i instanceof TransactionItem) + AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); @@ -1345,6 +1366,7 @@ public void testUmsatzuebersicht03() assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2020-12-10T00:00"))); assertThat(transaction.getShares(), is(Values.Share.factorize(6.730))); assertThat(transaction.getSource(), is("Umsatzuebersicht03.txt")); + assertNull(transaction.getNote()); assertThat(transaction.getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(362.80)))); @@ -1370,21 +1392,21 @@ public void testUmsatzuebersicht04() new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security1 = results.stream().filter(i -> i instanceof SecurityItem).findFirst() + Security security1 = results.stream().filter(SecurityItem.class::isInstance).findFirst() .orElseThrow(IllegalArgumentException::new).getSecurity(); assertThat(security1.getIsin(), is("LU0720541993")); assertThat(security1.getName(), is("LOYS FCP-Global L/S P")); assertThat(security1.getCurrencyCode(), is(CurrencyUnit.EUR)); - Security security2 = results.stream().filter(i -> i instanceof SecurityItem).skip(1).findFirst() + Security security2 = results.stream().filter(SecurityItem.class::isInstance).skip(1).findFirst() .orElseThrow(IllegalArgumentException::new).getSecurity(); assertThat(security2.getIsin(), is("LU0323578657")); assertThat(security2.getName(), is("Flossbach von Storch SICAV - Multip")); assertThat(security2.getCurrencyCode(), is(CurrencyUnit.EUR)); // check 1st security buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem) - .collect(Collectors.toList()).get(0).getSubject(); + BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); @@ -1392,6 +1414,7 @@ public void testUmsatzuebersicht04() assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2017-12-15T00:00"))); assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(29.570))); assertThat(entry.getSource(), is("Umsatzuebersicht04.txt")); + assertNull(entry.getNote()); assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2125.00)))); @@ -1403,8 +1426,8 @@ public void testUmsatzuebersicht04() is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(51.83)))); // check 2nd security buy sell transaction - entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem) - .collect(Collectors.toList()).get(1).getSubject(); + entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).skip(1).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); @@ -1412,6 +1435,7 @@ public void testUmsatzuebersicht04() assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2017-12-15T00:00"))); assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(8.658))); assertThat(entry.getSource(), is("Umsatzuebersicht04.txt")); + assertNull(entry.getNote()); assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2125.00)))); @@ -1422,8 +1446,8 @@ public void testUmsatzuebersicht04() assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.FEE), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(51.83)))); - entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem) - .collect(Collectors.toList()).get(2).getSubject(); + entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).skip(2).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); @@ -1443,7 +1467,7 @@ public void testUmsatzuebersicht04() is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(i -> i instanceof TransactionItem) + AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); @@ -1451,6 +1475,7 @@ public void testUmsatzuebersicht04() assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2017-12-15T00:00"))); assertThat(transaction.getShares(), is(Values.Share.factorize(0.387))); assertThat(transaction.getSource(), is("Umsatzuebersicht04.txt")); + assertNull(transaction.getNote()); assertThat(transaction.getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(92.69)))); @@ -1476,15 +1501,15 @@ public void testUmsatzuebersicht05() new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security1 = results.stream().filter(i -> i instanceof SecurityItem).findFirst() + Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security1.getIsin(), is("DE000A0RPAN3")); - assertThat(security1.getName(), is("PrivatFonds: Kontrolliert pro")); - assertThat(security1.getCurrencyCode(), is(CurrencyUnit.EUR)); + assertThat(security.getIsin(), is("DE000A0RPAN3")); + assertThat(security.getName(), is("PrivatFonds: Kontrolliert pro")); + assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); // check 1st security buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem) - .collect(Collectors.toList()).get(0).getSubject(); + BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.SELL)); assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.SELL)); @@ -1492,6 +1517,7 @@ public void testUmsatzuebersicht05() assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2020-12-22T00:00"))); assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(0.092))); assertThat(entry.getSource(), is("Umsatzuebersicht05.txt")); + assertNull(entry.getNote()); assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(14.45)))); @@ -1503,7 +1529,7 @@ public void testUmsatzuebersicht05() is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); // check fee transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(i -> i instanceof TransactionItem) + AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(transaction.getType(), is(AccountTransaction.Type.FEES)); @@ -1522,8 +1548,8 @@ public void testUmsatzuebersicht05() is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); // check tax refund transaction - transaction = (AccountTransaction) results.stream().filter(i -> i instanceof TransactionItem) - .skip(1).findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); + transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance).skip(1) + .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(transaction.getType(), is(AccountTransaction.Type.TAX_REFUND)); @@ -1540,8 +1566,8 @@ public void testUmsatzuebersicht05() assertThat(transaction.getUnitSum(Unit.Type.FEE), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); - transaction = (AccountTransaction) results.stream().filter(i -> i instanceof TransactionItem) - .skip(2).findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); + transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance).skip(2) + .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(transaction.getType(), is(AccountTransaction.Type.TAX_REFUND)); @@ -1573,21 +1599,21 @@ public void testUmsatzuebersicht06() new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security1 = results.stream().filter(i -> i instanceof SecurityItem).findFirst() + Security security1 = results.stream().filter(SecurityItem.class::isInstance).findFirst() .orElseThrow(IllegalArgumentException::new).getSecurity(); assertThat(security1.getIsin(), is("DE000A0KFTH1")); assertThat(security1.getName(), is("First Private Wealth B")); assertThat(security1.getCurrencyCode(), is(CurrencyUnit.EUR)); - Security security2 = results.stream().filter(i -> i instanceof SecurityItem).skip(1).findFirst() + Security security2 = results.stream().filter(SecurityItem.class::isInstance).skip(1).findFirst() .orElseThrow(IllegalArgumentException::new).getSecurity(); assertThat(security2.getIsin(), is("LU0395794307")); assertThat(security2.getName(), is("JPMorgan Funds - Global Income Fund")); assertThat(security2.getCurrencyCode(), is(CurrencyUnit.EUR)); // check 1st security buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem) - .collect(Collectors.toList()).get(0).getSubject(); + BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.SELL)); assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.SELL)); @@ -1595,6 +1621,7 @@ public void testUmsatzuebersicht06() assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2020-11-19T00:00"))); assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(285.637))); assertThat(entry.getSource(), is("Umsatzuebersicht06.txt")); + assertNull(entry.getNote()); assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(18103.67)))); @@ -1606,8 +1633,8 @@ public void testUmsatzuebersicht06() is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); // check 2nd security buy sell transaction - entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem) - .collect(Collectors.toList()).get(1).getSubject(); + entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).skip(1).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); @@ -1627,7 +1654,7 @@ public void testUmsatzuebersicht06() is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(i -> i instanceof TransactionItem) + AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); @@ -1635,6 +1662,7 @@ public void testUmsatzuebersicht06() assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2020-11-24T00:00"))); assertThat(transaction.getShares(), is(Values.Share.factorize(1.591))); assertThat(transaction.getSource(), is("Umsatzuebersicht06.txt")); + assertNull(transaction.getNote()); assertThat(transaction.getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(207.69)))); @@ -1660,15 +1688,15 @@ public void testUmsatzuebersicht07() new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(i -> i instanceof SecurityItem).findFirst() + Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() .orElseThrow(IllegalArgumentException::new).getSecurity(); assertThat(security.getIsin(), is("DE000A1W2CK8")); assertThat(security.getName(), is("GLS Bank Aktienfonds")); assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); // check buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem) - .collect(Collectors.toList()).get(0).getSubject(); + BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); @@ -1676,6 +1704,7 @@ public void testUmsatzuebersicht07() assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2021-02-02T00:00"))); assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(0.346))); assertThat(entry.getSource(), is("Umsatzuebersicht07.txt")); + assertNull(entry.getNote()); assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(30.00)))); @@ -1701,15 +1730,15 @@ public void testUmsatzuebersicht08() new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(i -> i instanceof SecurityItem).findFirst() + Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() .orElseThrow(IllegalArgumentException::new).getSecurity(); assertThat(security.getIsin(), is("LU0260869739")); assertThat(security.getName(), is("Franklin U.S. Opportunities Fund A")); assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); // check buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem) - .collect(Collectors.toList()).get(0).getSubject(); + BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); @@ -1717,6 +1746,7 @@ public void testUmsatzuebersicht08() assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2021-06-02T00:00"))); assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(28.405))); assertThat(entry.getSource(), is("Umsatzuebersicht08.txt")); + assertNull(entry.getNote()); assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(700.00)))); @@ -1742,21 +1772,21 @@ public void testUmsatzuebersicht09() new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security1 = results.stream().filter(i -> i instanceof SecurityItem).findFirst() + Security security1 = results.stream().filter(SecurityItem.class::isInstance).findFirst() .orElseThrow(IllegalArgumentException::new).getSecurity(); assertThat(security1.getIsin(), is("DE0008491051")); assertThat(security1.getName(), is("UniGlobal")); assertThat(security1.getCurrencyCode(), is(CurrencyUnit.EUR)); - Security security2 = results.stream().filter(i -> i instanceof SecurityItem).skip(1).findFirst() + Security security2 = results.stream().filter(SecurityItem.class::isInstance).skip(1).findFirst() .orElseThrow(IllegalArgumentException::new).getSecurity(); assertThat(security2.getIsin(), is("DE0008491044")); assertThat(security2.getName(), is("UniRak")); assertThat(security2.getCurrencyCode(), is(CurrencyUnit.EUR)); // check 1th security buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem) - .collect(Collectors.toList()).get(0).getSubject(); + BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); @@ -1764,6 +1794,7 @@ public void testUmsatzuebersicht09() assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2016-04-11T00:00"))); assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(0.137))); assertThat(entry.getSource(), is("Umsatzuebersicht09.txt")); + assertNull(entry.getNote()); assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(25.00)))); @@ -1775,8 +1806,8 @@ public void testUmsatzuebersicht09() is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(1.19)))); // check 2nd security buy sell transaction - entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem) - .collect(Collectors.toList()).get(1).getSubject(); + entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).skip(1).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); @@ -1784,6 +1815,7 @@ public void testUmsatzuebersicht09() assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2016-04-11T00:00"))); assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(0.225))); assertThat(entry.getSource(), is("Umsatzuebersicht09.txt")); + assertNull(entry.getNote()); assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(25.00)))); @@ -1809,102 +1841,102 @@ public void testUmsatzuebersicht10() new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security1 = results.stream().filter(i -> i instanceof SecurityItem).findFirst() + Security security1 = results.stream().filter(SecurityItem.class::isInstance).findFirst() .orElseThrow(IllegalArgumentException::new).getSecurity(); assertThat(security1.getIsin(), is("LU0089558679")); assertThat(security1.getName(), is("UniDynamicFonds: Global A")); assertThat(security1.getCurrencyCode(), is(CurrencyUnit.EUR)); - Security security2 = results.stream().filter(i -> i instanceof SecurityItem).skip(1).findFirst() + Security security2 = results.stream().filter(SecurityItem.class::isInstance).skip(1).findFirst() .orElseThrow(IllegalArgumentException::new).getSecurity(); assertThat(security2.getIsin(), is("LU0186860408")); assertThat(security2.getName(), is("UniDividendenAss")); assertThat(security2.getCurrencyCode(), is(CurrencyUnit.EUR)); - Security security3 = results.stream().filter(i -> i instanceof SecurityItem).skip(2).findFirst() + Security security3 = results.stream().filter(SecurityItem.class::isInstance).skip(2).findFirst() .orElseThrow(IllegalArgumentException::new).getSecurity(); assertThat(security3.getIsin(), is("LU0115904467")); assertThat(security3.getName(), is("UniEM Global")); assertThat(security3.getCurrencyCode(), is(CurrencyUnit.EUR)); - // check 1st transaction - PortfolioTransaction transaction = (PortfolioTransaction) results.stream().filter(i -> i instanceof TransactionItem) - .collect(Collectors.toList()).get(0).getSubject(); + // check 1st delivery inbound (Einlieferung) transaction + PortfolioTransaction entry = (PortfolioTransaction) results.stream().filter(TransactionItem.class::isInstance) + .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); - assertThat(transaction.getType(), is(PortfolioTransaction.Type.DELIVERY_INBOUND)); + assertThat(entry.getType(), is(PortfolioTransaction.Type.DELIVERY_INBOUND)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2014-02-10T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(12.152))); - assertThat(transaction.getSource(), is("Umsatzuebersicht10.txt")); - assertThat(transaction.getNote(), is("Umtausch aus Unterdepot 1345674218")); + assertThat(entry.getDateTime(), is(LocalDateTime.parse("2014-02-10T00:00"))); + assertThat(entry.getShares(), is(Values.Share.factorize(12.152))); + assertThat(entry.getSource(), is("Umsatzuebersicht10.txt")); + assertThat(entry.getNote(), is("Umtausch aus Unterdepot 1345674218")); - assertThat(transaction.getMonetaryAmount(), + assertThat(entry.getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(458.99)))); - assertThat(transaction.getGrossValue(), + assertThat(entry.getGrossValue(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(458.99)))); - assertThat(transaction.getUnitSum(Unit.Type.TAX), + assertThat(entry.getUnitSum(Unit.Type.TAX), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); - assertThat(transaction.getUnitSum(Unit.Type.FEE), + assertThat(entry.getUnitSum(Unit.Type.FEE), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); - // check 2nd transaction - transaction = (PortfolioTransaction) results.stream().filter(i -> i instanceof TransactionItem) - .collect(Collectors.toList()).get(1).getSubject(); + // check 2nd delivery inbound (Einlieferung) transaction + entry = (PortfolioTransaction) results.stream().filter(TransactionItem.class::isInstance).skip(1).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); - assertThat(transaction.getType(), is(PortfolioTransaction.Type.DELIVERY_INBOUND)); + assertThat(entry.getType(), is(PortfolioTransaction.Type.DELIVERY_INBOUND)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2014-02-10T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(5.148))); - assertThat(transaction.getSource(), is("Umsatzuebersicht10.txt")); - assertThat(transaction.getNote(), is("Umtausch aus Unterdepot 1345674218")); + assertThat(entry.getDateTime(), is(LocalDateTime.parse("2014-02-10T00:00"))); + assertThat(entry.getShares(), is(Values.Share.factorize(5.148))); + assertThat(entry.getSource(), is("Umsatzuebersicht10.txt")); + assertThat(entry.getNote(), is("Umtausch aus Unterdepot 1345674218")); - assertThat(transaction.getMonetaryAmount(), + assertThat(entry.getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(271.20)))); - assertThat(transaction.getGrossValue(), + assertThat(entry.getGrossValue(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(271.20)))); - assertThat(transaction.getUnitSum(Unit.Type.TAX), + assertThat(entry.getUnitSum(Unit.Type.TAX), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); - assertThat(transaction.getUnitSum(Unit.Type.FEE), + assertThat(entry.getUnitSum(Unit.Type.FEE), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); - // check 3rd transaction - transaction = (PortfolioTransaction) results.stream().filter(i -> i instanceof TransactionItem) - .collect(Collectors.toList()).get(2).getSubject(); + // check 3rd delivery outbound (Auslieferung) transaction + entry = (PortfolioTransaction) results.stream().filter(TransactionItem.class::isInstance).skip(2).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); - assertThat(transaction.getType(), is(PortfolioTransaction.Type.DELIVERY_OUTBOUND)); + assertThat(entry.getType(), is(PortfolioTransaction.Type.DELIVERY_OUTBOUND)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2014-02-10T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(4.136))); - assertThat(transaction.getSource(), is("Umsatzuebersicht10.txt")); - assertThat(transaction.getNote(), is("Umtausch zugunsten Unterdepot 1345674217")); + assertThat(entry.getDateTime(), is(LocalDateTime.parse("2014-02-10T00:00"))); + assertThat(entry.getShares(), is(Values.Share.factorize(4.136))); + assertThat(entry.getSource(), is("Umsatzuebersicht10.txt")); + assertThat(entry.getNote(), is("Umtausch zugunsten Unterdepot 1345674217")); - assertThat(transaction.getMonetaryAmount(), + assertThat(entry.getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(271.20)))); - assertThat(transaction.getGrossValue(), + assertThat(entry.getGrossValue(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(271.20)))); - assertThat(transaction.getUnitSum(Unit.Type.TAX), + assertThat(entry.getUnitSum(Unit.Type.TAX), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); - assertThat(transaction.getUnitSum(Unit.Type.FEE), + assertThat(entry.getUnitSum(Unit.Type.FEE), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); - // check 4th transaction - transaction = (PortfolioTransaction) results.stream().filter(i -> i instanceof TransactionItem) - .collect(Collectors.toList()).get(3).getSubject(); + // check 4th delivery outbound (Auslieferung) transaction + entry = (PortfolioTransaction) results.stream().filter(TransactionItem.class::isInstance).skip(3).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); - assertThat(transaction.getType(), is(PortfolioTransaction.Type.DELIVERY_OUTBOUND)); + assertThat(entry.getType(), is(PortfolioTransaction.Type.DELIVERY_OUTBOUND)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2014-02-10T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(7))); - assertThat(transaction.getSource(), is("Umsatzuebersicht10.txt")); - assertThat(transaction.getNote(), is("Umtausch zugunsten Unterdepot 1345674205")); + assertThat(entry.getDateTime(), is(LocalDateTime.parse("2014-02-10T00:00"))); + assertThat(entry.getShares(), is(Values.Share.factorize(7))); + assertThat(entry.getSource(), is("Umsatzuebersicht10.txt")); + assertThat(entry.getNote(), is("Umtausch zugunsten Unterdepot 1345674205")); - assertThat(transaction.getMonetaryAmount(), + assertThat(entry.getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(458.99)))); - assertThat(transaction.getGrossValue(), + assertThat(entry.getGrossValue(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(458.99)))); - assertThat(transaction.getUnitSum(Unit.Type.TAX), + assertThat(entry.getUnitSum(Unit.Type.TAX), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); - assertThat(transaction.getUnitSum(Unit.Type.FEE), + assertThat(entry.getUnitSum(Unit.Type.FEE), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); } @@ -1922,69 +1954,328 @@ public void testUmsatzuebersicht11() new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(i -> i instanceof SecurityItem).findFirst() + Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() .orElseThrow(IllegalArgumentException::new).getSecurity(); assertThat(security.getIsin(), is("DE0008491051")); assertThat(security.getName(), is("UniGlobal")); assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); // check 1th security buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem) - .collect(Collectors.toList()).get(0).getSubject(); + BuySellEntry entry1 = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); - assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.SELL)); - assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.SELL)); + assertThat(entry1.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.SELL)); + assertThat(entry1.getAccountTransaction().getType(), is(AccountTransaction.Type.SELL)); - assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2019-12-20T00:00"))); - assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(0.036))); - assertThat(entry.getSource(), is("Umsatzuebersicht11.txt")); + assertThat(entry1.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2019-12-20T00:00"))); + assertThat(entry1.getPortfolioTransaction().getShares(), is(Values.Share.factorize(0.036))); + assertThat(entry1.getSource(), is("Umsatzuebersicht11.txt")); + assertNull(entry1.getNote()); - assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), + assertThat(entry1.getPortfolioTransaction().getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(9.00)))); - assertThat(entry.getPortfolioTransaction().getGrossValue(), + assertThat(entry1.getPortfolioTransaction().getGrossValue(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(9.00)))); - assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.TAX), + assertThat(entry1.getPortfolioTransaction().getUnitSum(Unit.Type.TAX), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); - assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.FEE), + assertThat(entry1.getPortfolioTransaction().getUnitSum(Unit.Type.FEE), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); - // check 1st transaction - PortfolioTransaction transaction = (PortfolioTransaction) results.stream().filter(i -> i instanceof TransactionItem) - .collect(Collectors.toList()).get(0).getSubject(); + // check 1st delivery inbound (Einlieferung) transaction + PortfolioTransaction entry2 = (PortfolioTransaction) results.stream().filter(TransactionItem.class::isInstance) + .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); - assertThat(transaction.getType(), is(PortfolioTransaction.Type.DELIVERY_INBOUND)); + assertThat(entry2.getType(), is(PortfolioTransaction.Type.DELIVERY_INBOUND)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2019-11-21T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(0.009))); - assertThat(transaction.getSource(), is("Umsatzuebersicht11.txt")); - assertThat(transaction.getNote(), is("Ausgleichsbuchung Steuer")); + assertThat(entry2.getDateTime(), is(LocalDateTime.parse("2019-11-21T00:00"))); + assertThat(entry2.getShares(), is(Values.Share.factorize(0.009))); + assertThat(entry2.getSource(), is("Umsatzuebersicht11.txt")); + assertThat(entry2.getNote(), is("Ausgleichsbuchung Steuer")); - assertThat(transaction.getMonetaryAmount(), + assertThat(entry2.getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2.09)))); - assertThat(transaction.getGrossValue(), + assertThat(entry2.getGrossValue(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2.09)))); - assertThat(transaction.getUnitSum(Unit.Type.TAX), + assertThat(entry2.getUnitSum(Unit.Type.TAX), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); - assertThat(transaction.getUnitSum(Unit.Type.FEE), + assertThat(entry2.getUnitSum(Unit.Type.FEE), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); // check fee transaction - AccountTransaction transaction1 = (AccountTransaction) results.stream().filter(i -> i instanceof TransactionItem) + AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) .skip(1).findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); - assertThat(transaction1.getType(), is(AccountTransaction.Type.FEES)); + assertThat(transaction.getType(), is(AccountTransaction.Type.FEES)); - assertThat(transaction1.getDateTime(), is(LocalDateTime.parse("2019-12-24T00:00"))); - assertThat(transaction1.getSource(), is("Umsatzuebersicht11.txt")); - assertThat(transaction1.getNote(), is("Depotgebühr")); + assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2019-12-24T00:00"))); + assertThat(transaction.getSource(), is("Umsatzuebersicht11.txt")); + assertThat(transaction.getNote(), is("Depotgebühr")); - assertThat(transaction1.getMonetaryAmount(), + assertThat(transaction.getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(9.00)))); - assertThat(transaction1.getGrossValue(), + assertThat(transaction.getGrossValue(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(9.00)))); - assertThat(transaction1.getUnitSum(Unit.Type.TAX), + assertThat(transaction.getUnitSum(Unit.Type.TAX), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); + assertThat(transaction.getUnitSum(Unit.Type.FEE), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); - assertThat(transaction1.getUnitSum(Unit.Type.FEE), + } + + @Test + public void testUmsatzuebersicht12() + { + DZBankGruppePDFExtractor extractor = new DZBankGruppePDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Umsatzuebersicht12.txt"), errors); + + assertThat(errors, empty()); + assertThat(results.size(), is(18)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check security + Security security1 = results.stream().filter(SecurityItem.class::isInstance).findFirst() + .orElseThrow(IllegalArgumentException::new).getSecurity(); + assertThat(security1.getIsin(), is("DE000A2H9A01")); + assertThat(security1.getName(), is("UniMultiAsset: Exklusiv")); + assertThat(security1.getCurrencyCode(), is(CurrencyUnit.EUR)); + + Security security2 = results.stream().filter(SecurityItem.class::isInstance).skip(1).findFirst() + .orElseThrow(IllegalArgumentException::new).getSecurity(); + assertThat(security2.getIsin(), is("DE000A2H9A19")); + assertThat(security2.getName(), is("UniMultiAsset: Chance I")); + assertThat(security2.getCurrencyCode(), is(CurrencyUnit.EUR)); + + Security security3 = results.stream().filter(SecurityItem.class::isInstance).skip(2).findFirst() + .orElseThrow(IllegalArgumentException::new).getSecurity(); + assertThat(security3.getIsin(), is("IE00BMDQ4622")); + assertThat(security3.getName(), is("LMGF-L.M.Mart.Cu.Gl.L.T.Uncon. Reg.")); + assertThat(security3.getCurrencyCode(), is(CurrencyUnit.EUR)); + + Security security4 = results.stream().filter(SecurityItem.class::isInstance).skip(3).findFirst() + .orElseThrow(IllegalArgumentException::new).getSecurity(); + assertThat(security4.getIsin(), is("IE00B4WXJJ64")); + assertThat(security4.getName(), is("iShares III- Core EO Govt Bond UCIT")); + assertThat(security4.getCurrencyCode(), is(CurrencyUnit.EUR)); + + Security security5 = results.stream().filter(SecurityItem.class::isInstance).skip(4).findFirst() + .orElseThrow(IllegalArgumentException::new).getSecurity(); + assertThat(security5.getIsin(), is("LU0113258742")); + assertThat(security5.getName(), is("SISF EURO Corporate Bond C Acc EUR")); + assertThat(security5.getCurrencyCode(), is(CurrencyUnit.EUR)); + + Security security6 = results.stream().filter(SecurityItem.class::isInstance).skip(5).findFirst() + .orElseThrow(IllegalArgumentException::new).getSecurity(); + assertThat(security6.getIsin(), is("LU0368266499")); + assertThat(security6.getName(), is("BGF Euro Corporate Bond Fund D2 EUR")); + assertThat(security6.getCurrencyCode(), is(CurrencyUnit.EUR)); + + Security security7 = results.stream().filter(SecurityItem.class::isInstance).skip(6).findFirst() + .orElseThrow(IllegalArgumentException::new).getSecurity(); + assertThat(security7.getIsin(), is("LU0480132876")); + assertThat(security7.getName(), is("UBS(L)F.S-MSCI EM.MKTS UC ETF A USD")); + assertThat(security7.getCurrencyCode(), is(CurrencyUnit.EUR)); + + Security security8 = results.stream().filter(SecurityItem.class::isInstance).skip(7).findFirst() + .orElseThrow(IllegalArgumentException::new).getSecurity(); + assertThat(security8.getIsin(), is("LU0659579733")); + assertThat(security8.getName(), is("Xtrackers MSCI World Swap")); + assertThat(security8.getCurrencyCode(), is(CurrencyUnit.EUR)); + + Security security9 = results.stream().filter(SecurityItem.class::isInstance).skip(8).findFirst() + .orElseThrow(IllegalArgumentException::new).getSecurity(); + assertThat(security9.getIsin(), is("LU1663883681")); + assertThat(security9.getName(), is("DWS Inv.-Euro-Gov Bonds")); + assertThat(security9.getCurrencyCode(), is(CurrencyUnit.EUR)); + + // check 1th security 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-03-01T00:00"))); + assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(0.915))); + assertThat(entry.getSource(), is("Umsatzuebersicht12.txt")); + assertThat(entry.getNote(), is("Anlage")); + + assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(55.39)))); + assertThat(entry.getPortfolioTransaction().getGrossValue(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(55.39)))); + 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.00)))); + + // check 2nd security buy sell transaction + entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).skip(1).findFirst() + .orElseThrow(IllegalArgumentException::new).getSubject(); + + assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); + assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); + + assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2022-03-01T00:00"))); + assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(0.926))); + assertThat(entry.getSource(), is("Umsatzuebersicht12.txt")); + assertThat(entry.getNote(), is("Anlage")); + + assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(51.30)))); + assertThat(entry.getPortfolioTransaction().getGrossValue(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(51.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(0.00)))); + + // check 3rd security buy sell transaction + entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).skip(2).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-03-01T00:00"))); + assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(0.022))); + assertThat(entry.getSource(), is("Umsatzuebersicht12.txt")); + assertThat(entry.getNote(), is("Anlage")); + + assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2.04)))); + assertThat(entry.getPortfolioTransaction().getGrossValue(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2.04)))); + 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.00)))); + + // check 4th security buy sell transaction + entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).skip(3).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-03-01T15:48"))); + assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(0.095))); + assertThat(entry.getSource(), is("Umsatzuebersicht12.txt")); + assertThat(entry.getNote(), is("Anlage")); + + assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(12.20)))); + assertThat(entry.getPortfolioTransaction().getGrossValue(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(12.20)))); + 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.00)))); + + // check 5th security buy sell transaction + entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).skip(4).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-03-01T00:00"))); + assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(0.166))); + assertThat(entry.getSource(), is("Umsatzuebersicht12.txt")); + assertThat(entry.getNote(), is("Anlage")); + + assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(4.24)))); + assertThat(entry.getPortfolioTransaction().getGrossValue(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(4.24)))); + 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.00)))); + + // check 6th security buy sell transaction + entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).skip(5).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-03-01T00:00"))); + assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(0.227))); + assertThat(entry.getSource(), is("Umsatzuebersicht12.txt")); + assertThat(entry.getNote(), is("Anlage")); + + assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(4.05)))); + assertThat(entry.getPortfolioTransaction().getGrossValue(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(4.05)))); + 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.00)))); + + // check 7th security buy sell transaction + entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).skip(6).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-03-01T15:44"))); + assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(0.034))); + assertThat(entry.getSource(), is("Umsatzuebersicht12.txt")); + assertThat(entry.getNote(), is("Anlage")); + + assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(3.46)))); + assertThat(entry.getPortfolioTransaction().getGrossValue(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(3.46)))); + 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.00)))); + + // check 8th security buy sell transaction + entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).skip(7).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-03-01T15:46"))); + assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(0.289))); + assertThat(entry.getSource(), is("Umsatzuebersicht12.txt")); + assertThat(entry.getNote(), is("Anlage")); + + assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(9.09)))); + assertThat(entry.getPortfolioTransaction().getGrossValue(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(9.09)))); + 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.00)))); + + // check 9th security buy sell transaction + entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).skip(8).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-03-01T00:00"))); + assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(0.086))); + assertThat(entry.getSource(), is("Umsatzuebersicht12.txt")); + assertThat(entry.getNote(), is("Anlage")); + + assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(8.23)))); + assertThat(entry.getPortfolioTransaction().getGrossValue(), + is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(8.23)))); + 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.00)))); } } diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/dzbankgruppe/Umsatzuebersicht12.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/dzbankgruppe/Umsatzuebersicht12.txt new file mode 100644 index 0000000000..c36b8eb1ea --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/dzbankgruppe/Umsatzuebersicht12.txt @@ -0,0 +1,176 @@ +PDFBox Version: 1.8.16 +----------------------------------------- +Gern betreut Sie: +Volksbank Münsterland Nord eG +Union Investment - Kundenservice +Telefon: 069 58998-6000 +Telefax: 069 58998-9000 +Herrn E-Mail: service@union-investment.de +Max Mustermann +Straße. 1 UnionDepot: 123456789 +12345 Musterstadt Depotinhaber: +Max Mustermann +2. März 2022 +Abrechnung Nr. 33 +Unterdepot-Nr.: 123456789 +Fonds: UniMultiAsset: Exklusiv ISIN: DE000A2H9A01 Verwaltungsvergütung: 0,50 % p. a. +UniMultiAsset: Chance I ISIN: DE000A2H9A19 Verwaltungsvergütung: 0,40 % p. a. +LMGF-L.M.Mart.Cu.Gl.L.T.Uncon. Reg. ISIN: IE00BMDQ4622 Verwaltungsvergütung: 0,40 % p. a. +iShares III- Core EO Govt Bond UCIT ISIN: IE00B4WXJJ64 Verwaltungsvergütung: 0,20 % p. a. +J O H.C.M.U.Fd-Glob.Opport.Fd ISIN: IE00B7MR5575 Verwaltungsvergütung: 0,75 % p. a. +SISF EURO Corporate Bond C Acc EUR ISIN: LU0113258742 Verwaltungsvergütung: 0,45 % p. a. +BGF Euro Corporate Bond Fund D2 EUR ISIN: LU0368266499 Verwaltungsvergütung: 0,40 % p. a. +UBS(L)F.S-MSCI EM.MKTS UC ETF A USD ISIN: LU0480132876 Verwaltungsvergütung: 0,225 % p. a. +Xtrackers MSCI World Swap ISIN: LU0659579733 Verwaltungsvergütung: 0,42 % p. a. +DWS Inv.-Euro-Gov Bonds ISIN: LU1663883681 Verwaltungsvergütung: 0,35 % p. a. +Hinweis: VermögenPlus Strategie I +Buchungs-/ Umsatzart Betrag/EUR Ausgabe- Preis/EUR Anteile +Preisdatum aufschlag % +Vortrag UniMultiAsset: Exklusiv vom 25.02.2022 16,082 +Vortrag UniMultiAsset: Chance I vom 02.02.2022 16,286 +Vortrag LMGF-L.M.Mart.Cu.Gl.L.T.Uncon. Reg. vom 02.02.2022 0,554 +Vortrag iShares III- Core EO Govt Bond UCIT vom 01.02.2022 1,699 +Vortrag J O H.C.M.U.Fd-Glob.Opport.Fd vom 13.10.2021 0,000 +Vortrag SISF EURO Corporate Bond C Acc EUR vom 02.02.2022 3,178 +Vortrag BGF Euro Corporate Bond Fund D2 EUR vom 25.02.2022 3,988 +Vortrag UBS(L)F.S-MSCI EM.MKTS UC ETF A USD vom 14.02.2022 0,356 +Vortrag Xtrackers MSCI World Swap vom 25.02.2022 5,053 +Vortrag DWS Inv.-Euro-Gov Bonds vom 02.02.2022 1,552 +UniMultiAsset: Exklusiv +02.03.2022 +01.03.2022 Anlage 55,39 60,54 0,915 +UniMultiAsset: Chance I +02.03.2022 +01.03.2022 Anlage 51,30 55,37 0,926 +LMGF-L.M.Mart.Cu.Gl.L.T.Uncon. Reg. +02.03.2022 +01.03.2022 Anlage 2,04 93,84 0,022 +iShares III- Core EO Govt Bond UCIT +01.03.2022 +01.03.2022 Anlage 12,20 129,0707 0,095 +Handelszeit: 15:48 UTC, Handelsort: OTC via RFQ MM +Fortsetzung auf Seite 2 +Union Investment Service Bank AG · 60621 Frankfurt am Main +Tel.: 069 58998-0, Fax: 069 58998-9000 · E-Mail: service@union-investment.de · Internet: www.union-investment.de · Registergericht: Amtsgericht Frankfurt am Main HRB 54979 +Vorstand: Rainer Kobusch, Christoph Pöhlsen, Barbara Resch · Aufsichtsratsvorsitzender: Alexander Lichtenberg · Gläubiger-ID: DE81USB00000002100 +Einzahlungen: DZ BANK AG Deutsche Zentral-Genossenschaftsbank, Frankfurt am Main, IBAN: DE34 5006 0400 0000 0006 86 (BIC: GENODEFFXXX) +ññ ññ +Seite 2 von 4 Datenschutzfeld +zum Schreiben vom 2. März 2022 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +UnionDepot: 123456789 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +Depotinhaber: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +Max MustermannXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +Buchungs-/ Umsatzart Betrag/EUR Ausgabe- Preis/EUR Anteile +Preisdatum aufschlag % +SISF EURO Corporate Bond C Acc EUR +02.03.2022 +01.03.2022 Anlage 4,24 25,5849 0,166 +BGF Euro Corporate Bond Fund D2 EUR +02.03.2022 +01.03.2022 Anlage 4,05 17,88 0,227 +UBS(L)F.S-MSCI EM.MKTS UC ETF A USD +01.03.2022 +01.03.2022 Anlage 3,46 103,137 0,034 +Handelszeit: 15:44 UTC, Handelsort: OTC via RFQ MM +Xtrackers MSCI World Swap +01.03.2022 +01.03.2022 Anlage 9,09 31,4661 0,289 +Handelszeit: 15:46 UTC, Handelsort: OTC via RFQ MM +DWS Inv.-Euro-Gov Bonds +02.03.2022 +01.03.2022 Anlage 8,23 95,48 0,086 +Kauf 150,00 0,00 +Bestand UniMultiAsset: Exklusiv am 02.03.2022 16,997 +Bestand UniMultiAsset: Chance I am 02.03.2022 17,212 +Bestand LMGF-L.M.Mart.Cu.Gl.L.T.Uncon. Reg. am 02.03.2022 0,576 +Bestand iShares III- Core EO Govt Bond UCIT am 02.03.2022 1,794 +Bestand J O H.C.M.U.Fd-Glob.Opport.Fd am 02.03.2022 0,000 +Bestand SISF EURO Corporate Bond C Acc EUR am 02.03.2022 3,344 +Bestand BGF Euro Corporate Bond Fund D2 EUR am 02.03.2022 4,215 +Bestand UBS(L)F.S-MSCI EM.MKTS UC ETF A USD am 02.03.2022 0,390 +Bestand Xtrackers MSCI World Swap am 02.03.2022 5,342 +Bestand DWS Inv.-Euro-Gov Bonds am 02.03.2022 1,638 +Die Anteilspreise für einige der aufgeführten Fonds werden mit 4 oder sogar 5 Nachkommastellen berechnet. In unserer Darstellung zeigen wir +jedoch nur 3 Nachkommastellen. Alle Berechnungen wurden jedoch mit allen Nachkommastellen vorgenommen. +Fortsetzung auf Seite 3 +Seite 3 von 4 +zum Schreiben vom 2. März 2022 +UnionDepot: 123456789 +Depotinhaber: +Max Mustermann +Steuerübersicht per 02.03.2022 +Es liegt kein Freistellungsauftrag vor. +Verlustverrechnungstopf für Kapitalerträge in EUR: -1,63 +gezahlte Kapitalertragsteuer in EUR: 6,07 +gezahlte Kirchensteuer in EUR*: 0,49 +gezahlter Solidaritätszuschlag in EUR: 0,29 +* Wir führen die Kirchensteuer an die Religionsgemeinschaft ab, die uns das Bundeszentralamt für Steuern (BZSt) mit Ihrem Kirchensteuerab- +zugsmerkmal (KISTAM) übermittelt hat. Aus Gründen des Datenschutzes dürfen wir keine konkreten Daten zu Ihrer Religionszugehörigkeit +ausweisen. +Depotübersicht zum 02.03.2022 +Unterdepot- Fondsname/Produktname Anteil- Rücknahme- Depotwert/ +Nr. ISIN/Ertragsverwendung bestand preis/Währung Währung +Verwahrart/Lagerland +123456789 VermögenPlus Strategie I 2.791,98 EUR +UniMultiAsset: Exklusiv 16,997 60,54 EUR +DE000A2H9A01/thesaurierend +Girosammelverwahrung/Bundesrepublik Deutschland +UniMultiAsset: Chance I 17,212 55,37 EUR +DE000A2H9A19/thesaurierend +Girosammelverwahrung/Bundesrepublik Deutschland +LMGF-L.M.Mart.Cu.Gl.L.T.Uncon. Reg. 0,576 93,84 EUR +IE00BMDQ4622/thesaurierend +Wertpapierrechnung/CBL - Luxemburg +iShares III- Core EO Govt Bond UCIT 1,794 128,1312 EUR +IE00B4WXJJ64/ausschüttend +Wertpapierrechnung/CBL - Luxemburg +J O H.C.M.U.Fd-Glob.Opport.Fd 0,000 2,625 EUR +IE00B7MR5575/ausschüttend +Wertpapierrechnung/CBL - Luxemburg +SISF EURO Corporate Bond C Acc EUR 3,344 25,5849 EUR +LU0113258742/thesaurierend +Wertpapierrechnung/CBL - Luxemburg +BGF Euro Corporate Bond Fund D2 EUR 4,215 17,88 EUR +LU0368266499/thesaurierend +Wertpapierrechnung/CBL - Luxemburg +UBS(L)F.S-MSCI EM.MKTS UC ETF A USD 0,390 102,32 EUR +LU0480132876/ausschüttend +Wertpapierrechnung/CBL - Luxemburg +Xtrackers MSCI World Swap 5,342 31,60 EUR +LU0659579733/thesaurierend +Wertpapierrechnung/CBL - Luxemburg +DWS Inv.-Euro-Gov Bonds 1,638 95,48 EUR +LU1663883681/ausschüttend +Wertpapierrechnung/CBL - Luxemburg +Gesamt-Depotwert 2.791,98 EUR +Fortsetzung auf Seite 4 +ñ ñ +Seite 4 von 4 +zum Schreiben vom 2. März 2022 +UnionDepot: 123456789 +Depotinhaber: +Max Mustermann +Die Bewertung der Fonds erfolgt zum jeweils letzten verfügbaren Rücknahmepreis. In der Depotübersicht sind alle Fondsanteile enthalten, die +am Tag der Erstellung dieser Abrechnung in Ihrem Depotbestand sind. +In manchen Fällen weichen die Werte der Depotübersicht von der Abrechnungsübersicht ab. Das kann dann vorkommen, wenn zum Beispiel +Fonds betroffen sind, die nicht taggleich abgerechnet werden. Das ist bei den meisten Drittfonds oder Finanzportfolioverwaltungen der Fall. +Hier können Transaktionen zwar bereits für einen der betroffenen Fonds gebucht und abgerechnet sein, für den anderen betroffenen Fonds +aber noch nicht. In Ihrer nächsten Depotübersicht ist die ausstehende Buchung berücksichtigt. +Bei Fragen sind wir gern für Sie da. Rufen Sie uns einfach an! Sie erreichen uns montags bis freitags zwischen 08:00 und 18:00 Uhr. \ No newline at end of file diff --git a/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/DZBankGruppePDFExtractor.java b/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/DZBankGruppePDFExtractor.java index 5e863495e9..515ec7a071 100644 --- a/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/DZBankGruppePDFExtractor.java +++ b/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/DZBankGruppePDFExtractor.java @@ -6,6 +6,8 @@ import java.math.BigDecimal; import java.math.RoundingMode; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -77,27 +79,33 @@ private void addBuySellTransaction() } }) - // Stück 2.700 INTERNAT. CONS. AIRL. GROUP SA - // ES0177542018 (A1H6AJ) + // Stück 2.700 INTERNAT. CONS. AIRL. GROUP SA ES0177542018 (A1H6AJ) // ACCIONES NOM. EO -,10 // Handels-/Ausführungsplatz XETRA (gemäß Weisung) // Kurswert 5.047,65- EUR - .section("shares", "name", "isin", "wkn", "name1", "currency") - .match("^St.ck (?[\\.,\\d]+) (?.*) (?[\\w]{12}) \\((?.*)\\)$") + .section("name", "isin", "wkn", "name1", "currency") + .match("^St.ck [\\.,\\d]+ (?.*) (?[\\w]{12}) \\((?.*)\\)$") .match("^(?.*)$") .match("^Kurswert [\\.,\\d]+(\\-)? (?[\\w]{3})$") .assign((t, v) -> { if (!v.get("name1").startsWith("Handels-/Ausführungsplatz")) v.put("name", trim(v.get("name")) + " " + trim(v.get("name1"))); - v.put("name", v.get("name")); - t.setShares(asShares(v.get("shares"))); t.setSecurity(getOrCreateSecurity(v)); // Handshake, if there is a tax refund context.put("name", v.get("name")); context.put("isin", v.get("isin")); context.put("wkn", v.get("wkn")); + }) + + // Stück 2.700 INTERNAT. CONS. AIRL. GROUP SA ES0177542018 (A1H6AJ) + .section("shares") + .match("^St.ck (?[\\.,\\d]+) .*$") + .assign((t, v) -> { + t.setShares(asShares(v.get("shares"))); + + // Handshake, if there is a tax refund context.put("shares", v.get("shares")); }) @@ -131,7 +139,7 @@ private void addBuySellTransaction() private void addDividendeTransaction() { - DocumentType type = new DocumentType("(Dividendengutschrift|Ausschüttung Investmentfonds|Ertragsgutschrift)"); + DocumentType type = new DocumentType("(Dividendengutschrift|Aussch.ttung Investmentfonds|Ertragsgutschrift)"); this.addDocumentTyp(type); Block block = new Block("^(Dividendengutschrift|Aussch.ttung Investmentfonds|Ertragsgutschrift .*)$"); @@ -146,26 +154,29 @@ private void addDividendeTransaction() // Stück 17 CD PROJEKT S.A. PLOPTTC00011 (534356) // INHABER-AKTIEN C ZY 1 // Zahlbarkeitstag 08.06.2021 Dividende pro Stück 5,00 PLN - .section("shares", "name", "isin", "wkn", "name1", "currency") - .match("^St.ck (?[\\.,\\d]+) (?.*) (?[\\w]{12}) \\((?.*)\\)$") + .section("name", "isin", "wkn", "name1", "currency") + .match("^St.ck [\\.,\\d]+ (?.*) (?[\\w]{12}) \\((?.*)\\)$") .match("^(?.*)$") .match("^.* ((Dividende|Ertrag) ([\\s]+)?pro St.ck|Aussch.ttung pro St\\.) [\\.,\\d]+ (?[\\w]{3})$") .assign((t, v) -> { if (!v.get("name1").startsWith("Zahlbarkeitstag")) - v.put("name", v.get("name").trim() + " " + v.get("name1").trim()); + v.put("name", trim(v.get("name")) + " " + trim(v.get("name1"))); - v.put("name", v.get("name").trim()); - t.setShares(asShares(v.get("shares"))); t.setSecurity(getOrCreateSecurity(v)); }) + // Stück 17 CD PROJEKT S.A. PLOPTTC00011 (534356) + .section("shares") + .match("^St.ck (?[\\.,\\d]+) .*$") + .assign((t, v) -> t.setShares(asShares(v.get("shares")))) + // Den Betrag buchen wir mit Wertstellung 10.06.2021 zu Gunsten des Kontos XXXX (IBAN DE88 4306 0967 1154 .section("date") .match("^Den Betrag buchen wir mit Wertstellung (?[\\d]{2}\\.[\\d]{2}\\.[\\d]{4}) .*$") .assign((t, v) -> t.setDateTime(asDate(v.get("date")))) // Ausmachender Betrag 13,28+ EUR - .section("amount", "currency").optional() + .section("amount", "currency") .match("^Ausmachender Betrag (?[\\.,\\d]+)\\+ (?[\\w]{3})$") .assign((t, v) -> { t.setAmount(asAmount(v.get("amount"))); @@ -175,7 +186,7 @@ private void addDividendeTransaction() // Devisenkurs EUR / PLN 4,5044 // Dividendengutschrift 85,00 PLN 18,87+ EUR .section("exchangeRate", "fxAmount", "fxCurrency", "amount", "currency").optional() - .match("^Devisenkurs (?[\\w]{3}) \\/ (?[\\w]{3}) ([\\s]+)?(?[\\.,\\d]+)$") + .match("^Devisenkurs [\\w]{3} \\/ [\\w]{3} ([\\s]+)?(?[\\.,\\d]+)$") .match("^(Dividendengutschrift|Aussch.ttung) (?[\\.,\\d]+) (?[\\w]{3}) (?[\\.,\\d]+)\\+ (?[\\w]{3})") .assign((t, v) -> { BigDecimal exchangeRate = asExchangeRate(v.get("exchangeRate")); @@ -229,31 +240,37 @@ private void addDividendeTransaction() public void addDepotStatementTransaction() { final DocumentType type = new DocumentType("Abrechnung Nr\\. [\\d]+", (context, lines) -> { - Pattern pAccountingNumber = Pattern.compile("(?Abrechnung Nr\\. [\\d]+)"); - Pattern pBaseCurrency = Pattern.compile(".* Preis\\/(?[\\w]{3}) .*"); - Pattern pIsin = Pattern.compile("Fonds: (?(?!MusterFonds).*) ISIN: (?[\\w]{12}) .*"); + Pattern pAccountingNumber = Pattern.compile("^(?Abrechnung Nr\\. [\\d]+)$"); + Pattern pBaseCurrency = Pattern.compile("^.* Preis\\/(?[\\w]{3}) .*$"); + Pattern pNameIsin = Pattern.compile("^(Fonds: )?(?((?!MusterFonds).)*) ISIN: (?[\\w]{12}) .*$"); - int endBlock = lines.length; + // Set end of line of the securities transaction block + int endOfLineOfSecurityTransactionBlock = lines.length; String baseCurrency = CurrencyUnit.EUR; + // Create security list + List securityList = new ArrayList(); - for (int i = lines.length - 1; i >= 0; i--) + // Set patter of security names + String patterOfSecurityNames = ""; + + for (int i = lines.length - 1; i >= 1; i--) { - Matcher m = pAccountingNumber.matcher(lines[i]); - if (m.matches()) - context.put("accountingNumber", m.group("accountingNumber")); + Matcher m1 = pAccountingNumber.matcher(lines[i]); + if (m1.matches()) + context.put("accountingNumber", m1.group("accountingNumber")); - m = pIsin.matcher(lines[i]); - if (m.matches()) + m1 = pNameIsin.matcher(lines[i]); + if (m1.matches()) { /*** * Search the base currency in the block */ - for (int ii = i; ii < endBlock; ii++) + for (int ii = i; ii < endOfLineOfSecurityTransactionBlock; ii++) { - Matcher m1 = pBaseCurrency.matcher(lines[ii]); - if (m1.matches()) - baseCurrency = m1.group("baseCurrency"); + Matcher m2 = pBaseCurrency.matcher(lines[ii]); + if (m2.matches()) + baseCurrency = m2.group("baseCurrency"); } /*** @@ -268,16 +285,91 @@ public void addDepotStatementTransaction() * Hinweis: UniProfiRente Altersvorsorgevertrag * - gefördert - * Buchungs-/ Umsatzart Betrag/EUR Ausgabe- Preis/EUR Anteile + * + * Fonds: UniMultiAsset: Exklusiv ISIN: DE000A2H9A01 Verwaltungsvergütung: 0,50 % p. a. + * UniMultiAsset: Chance I ISIN: DE000A2H9A19 Verwaltungsvergütung: 0,40 % p. a. + * LMGF-L.M.Mart.Cu.Gl.L.T.Uncon. Reg. ISIN: IE00BMDQ4622 Verwaltungsvergütung: 0,40 % p. a. */ - - StringBuilder securityListKey = new StringBuilder("security_"); - securityListKey.append(trim(m.group("name"))).append("_"); - securityListKey.append(baseCurrency).append("_"); - securityListKey.append(Integer.toString(i)).append("_"); - securityListKey.append(Integer.toString(endBlock)); - context.put(securityListKey.toString(), m.group("isin")); - - endBlock = i; + if (i != (endOfLineOfSecurityTransactionBlock - 1)) + { + StringBuilder securityListKey = new StringBuilder("security_"); + securityListKey.append(trim(m1.group("name"))).append("_"); + securityListKey.append(baseCurrency).append("_"); + securityListKey.append(Integer.toString(i + 1)).append("_"); + securityListKey.append(Integer.toString(((endOfLineOfSecurityTransactionBlock)))); + context.put(securityListKey.toString(), m1.group("isin")); + + // Add security to securityList + String[] security = {m1.group("isin"), trim(m1.group("name"))}; + securityList.add(security); + } + else + { + /*** + * Example: + * Fonds: UniMultiAsset: Exklusiv ISIN: DE000A2H9A01 Verwaltungsvergütung: 0,50 % p. a. + * UniMultiAsset: Chance I ISIN: DE000A2H9A19 Verwaltungsvergütung: 0,40 % p. a. + * LMGF-L.M.Mart.Cu.Gl.L.T.Uncon. Reg. ISIN: IE00BMDQ4622 Verwaltungsvergütung: 0,40 % p. a. + * iShares III- Core EO Govt Bond UCIT ISIN: IE00B4WXJJ64 Verwaltungsvergütung: 0,20 % p. a. + * J O H.C.M.U.Fd-Glob.Opport.Fd ISIN: IE00B7MR5575 Verwaltungsvergütung: 0,75 % p. a. + * SISF EURO Corporate Bond C Acc EUR ISIN: LU0113258742 Verwaltungsvergütung: 0,45 % p. a. + * BGF Euro Corporate Bond Fund D2 EUR ISIN: LU0368266499 Verwaltungsvergütung: 0,40 % p. a. + * UBS(L)F.S-MSCI EM.MKTS UC ETF A USD ISIN: LU0480132876 Verwaltungsvergütung: 0,225 % p. a. + * Xtrackers MSCI World Swap ISIN: LU0659579733 Verwaltungsvergütung: 0,42 % p. a + * DWS Inv.-Euro-Gov Bonds ISIN: LU1663883681 Verwaltungsvergütung: 0,35 % p. a. + * */ + + // Add security to securityList + String[] security = {m1.group("isin"), trim(m1.group("name"))}; + securityList.add(security); + } + + endOfLineOfSecurityTransactionBlock = i; + } + } + + // Create patter of security names + for (String[] security : securityList) + { + if (patterOfSecurityNames.isEmpty()) + patterOfSecurityNames = security[1]; + else + patterOfSecurityNames = patterOfSecurityNames + "|" + security[1]; + } + + endOfLineOfSecurityTransactionBlock = lines.length; + + // Characters that have to be escaped in regular expressions + patterOfSecurityNames = patterOfSecurityNames + .replaceAll("\\(", "\\\\(") + .replaceAll("\\)", "\\\\)") + .replaceAll("\\.", "\\\\.") + .replaceAll("\\-", "\\\\-") + .replaceAll("\\+", "\\\\+"); + + for (int i = lines.length - 1; i >= 0; i--) + { + Pattern pSearchSecurity = Pattern.compile("^(?(" + patterOfSecurityNames + "))$"); + Matcher m = pSearchSecurity.matcher(lines[i]); + if (m.matches()) + { + for (String[] security : securityList) + { + if (m.group("name").equals(security[1])) + { + /*** + * Stringbuilder: + * security_(security name)_(currency)_(start@line)_(end@line) = isin + */ + StringBuilder securityListKey = new StringBuilder("security_"); + securityListKey.append(trim(m.group("name"))).append("_"); + securityListKey.append(baseCurrency).append("_"); + securityListKey.append(Integer.toString(i + 1)).append("_"); + securityListKey.append(Integer.toString(((endOfLineOfSecurityTransactionBlock)))); + context.put(securityListKey.toString(), security[0]); + } + } + endOfLineOfSecurityTransactionBlock = i; } } }); @@ -297,6 +389,8 @@ public void addDepotStatementTransaction() * * 27.11.2017 * 2 4.11.2017 Wiederanlage 94,78 0,00 142,61 0,665 + * + * 01.03.2022 Anlage 4,24 25,5849 0,166 */ Transaction pdfTransaction1 = new Transaction<>(); pdfTransaction1.subject(() -> { @@ -305,7 +399,7 @@ public void addDepotStatementTransaction() return entry; }); - Block firstRelevantLine1 = new Block("^[\\s\\d]{2,3}\\.[\\d]{2}\\.[\\d]{4} (Kauf|Wiederanlage|Verkauf) .*$"); + Block firstRelevantLine1 = new Block("^[\\s\\d]{2,3}\\.[\\d]{2}\\.[\\d]{4} (Kauf|Wiederanlage|Verkauf|Anlage) .*$"); type.addBlock(firstRelevantLine1); firstRelevantLine1.set(pdfTransaction1); @@ -325,37 +419,37 @@ public void addDepotStatementTransaction() v.put("isin", securityData.getIsin()); v.put("currency", asCurrencyCode(securityData.getCurrency())); } - + t.setSecurity(getOrCreateSecurity(v)); + t.setDate(asDate(stripBlanks(v.get("date")))); t.setShares(asShares(v.get("shares"))); - t.setAmount(asAmount(v.get("amount"))); t.setCurrencyCode(asCurrencyCode(context.get("baseCurrency"))); - t.setSecurity(getOrCreateSecurity(v)); + t.setAmount(asAmount(v.get("amount"))); }) , section -> section - .attributes("date", "amount", "shares") - .match("(?[\\s\\d]{2,3}\\.[\\d]{2}\\.[\\d]{4}) Verkauf \\*[\\d]+ (?[\\.,\\d]+) [\\.,\\d]+ \\-(?[\\.,\\d]+)$") - .assign((t, v) -> { - Map context = type.getCurrentContext(); - - // We switch to SELL - t.setType(PortfolioTransaction.Type.SELL); - - Security securityData = getSecurity(context, v.getStartLineNumber()); - if (securityData != null) - { - v.put("name", securityData.getName()); - v.put("isin", securityData.getIsin()); - v.put("currency", asCurrencyCode(securityData.getCurrency())); - } - - t.setDate(asDate(stripBlanks(v.get("date")))); - t.setShares(asShares(v.get("shares"))); - t.setAmount(asAmount(v.get("amount"))); - t.setCurrencyCode(asCurrencyCode(context.get("baseCurrency"))); - t.setSecurity(getOrCreateSecurity(v)); - }) + .attributes("date", "amount", "shares") + .match("(?[\\s\\d]{2,3}\\.[\\d]{2}\\.[\\d]{4}) Verkauf \\*[\\d]+ (?[\\.,\\d]+) [\\.,\\d]+ \\-(?[\\.,\\d]+)$") + .assign((t, v) -> { + Map context = type.getCurrentContext(); + + // We switch to SELL + t.setType(PortfolioTransaction.Type.SELL); + + Security securityData = getSecurity(context, v.getStartLineNumber()); + if (securityData != null) + { + v.put("name", securityData.getName()); + v.put("isin", securityData.getIsin()); + v.put("currency", asCurrencyCode(securityData.getCurrency())); + } + t.setSecurity(getOrCreateSecurity(v)); + + t.setDate(asDate(stripBlanks(v.get("date")))); + t.setShares(asShares(v.get("shares"))); + t.setCurrencyCode(asCurrencyCode(context.get("baseCurrency"))); + t.setAmount(asAmount(v.get("amount"))); + }) , section -> section .attributes("date", "note", "amount", "shares") @@ -370,12 +464,57 @@ public void addDepotStatementTransaction() v.put("isin", securityData.getIsin()); v.put("currency", asCurrencyCode(securityData.getCurrency())); } + t.setSecurity(getOrCreateSecurity(v)); t.setDate(asDate(stripBlanks(v.get("date")))); t.setShares(asShares(v.get("shares"))); + t.setCurrencyCode(asCurrencyCode(context.get("baseCurrency"))); t.setAmount(asAmount(v.get("amount"))); + t.setNote(v.get("note")); + }) + , + section -> section + .attributes("date", "note", "amount", "shares", "time") + .match("^(?[\\s\\d]{2,3}\\.[\\d]{2}\\.[\\d]{4}) (?Anlage) (?[\\.,\\d]+) [\\.,\\d]+ (?[\\.,\\d]+)$") + .match("^Handelszeit: (?