diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/ComdirectPDFExtractorTest.java b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/ComdirectPDFExtractorTest.java index dcdfcd5cb8..8435735890 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/ComdirectPDFExtractorTest.java +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/ComdirectPDFExtractorTest.java @@ -1,24 +1,48 @@ package name.abuchen.portfolio.datatransfer.pdf.comdirect; +import static name.abuchen.portfolio.datatransfer.ExtractorTestUtilities.countAccountTransactions; +import static name.abuchen.portfolio.datatransfer.ExtractorTestUtilities.countBuySell; +import static name.abuchen.portfolio.datatransfer.ExtractorTestUtilities.countSecurities; +import static org.hamcrest.CoreMatchers.hasItem; 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 static name.abuchen.portfolio.datatransfer.ExtractorMatchers.check; +import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.deposit; +import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.dividend; +import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.fee; +import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasAmount; +import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasCurrencyCode; +import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasDate; +import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasFees; +import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasForexGrossValue; +import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasGrossValue; +import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasIsin; +import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasName; +import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasNote; +import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasShares; +import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasSource; +import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasTaxes; +import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasTicker; +import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasWkn; +import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.interest; +import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.interestCharge; +import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.purchase; +import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.removal; +import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.sale; +import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.security; +import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.taxRefund; +import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.taxes; +import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.withFailureMessage; + import java.util.ArrayList; -import java.util.Iterator; import java.util.List; -import java.util.Optional; -import java.util.stream.Collectors; import org.junit.Test; -import name.abuchen.portfolio.datatransfer.Extractor; -import name.abuchen.portfolio.datatransfer.Extractor.BuySellEntryItem; +import name.abuchen.portfolio.Messages; import name.abuchen.portfolio.datatransfer.Extractor.Item; -import name.abuchen.portfolio.datatransfer.Extractor.SecurityItem; -import name.abuchen.portfolio.datatransfer.Extractor.TransactionItem; import name.abuchen.portfolio.datatransfer.ImportAction.Status; import name.abuchen.portfolio.datatransfer.actions.AssertImportActions; import name.abuchen.portfolio.datatransfer.actions.CheckCurrenciesAction; @@ -26,14 +50,11 @@ import name.abuchen.portfolio.datatransfer.pdf.PDFInputFile; import name.abuchen.portfolio.model.Account; import name.abuchen.portfolio.model.AccountTransaction; -import name.abuchen.portfolio.model.BuySellEntry; import name.abuchen.portfolio.model.Client; +import name.abuchen.portfolio.model.Portfolio; import name.abuchen.portfolio.model.PortfolioTransaction; import name.abuchen.portfolio.model.Security; -import name.abuchen.portfolio.model.Transaction.Unit; import name.abuchen.portfolio.money.CurrencyUnit; -import name.abuchen.portfolio.money.Money; -import name.abuchen.portfolio.money.Values; @SuppressWarnings("nls") public class ComdirectPDFExtractorTest @@ -48,38 +69,25 @@ public void testWertpapierKauf01() List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kauf01.txt"), errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(1L)); + assertThat(countAccountTransactions(results), is(0L)); assertThat(results.size(), is(2)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("DE000BASF111")); - assertThat(security.getWkn(), is("BASF11")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("BASF Inhaber-Anteile")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + assertThat(results, hasItem(security( // + hasIsin("FR0000121014"), hasWkn("853292"), hasTicker(null), // + hasName("LVMH Moët Henn. L. Vuitton SA Actions Port. (C.R.) EO 0,3"), // + hasCurrencyCode("EUR")))); // check buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); - assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); - assertThat(entry.getSource(), is("Kauf01.txt")); - assertNull(entry.getNote()); - - assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2000-01-01T00:00"))); - assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(1))); - - assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(1.00)))); - assertThat(entry.getPortfolioTransaction().getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(1.00)))); - 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)))); + assertThat(results, hasItem(purchase( // + hasDate("2007-05-19T00:00"), hasShares(100.00), // + hasSource("Kauf01.txt"), // + hasNote("Ord.-Nr.: 111111111111 | R.-Nr.: 11111111111DB11"), // + hasAmount("EUR", 8627.90), hasGrossValue("EUR", 8600.00), // + hasTaxes("EUR", 0.00), hasFees("EUR", 26.40 + 1.50)))); } @Test @@ -92,38 +100,25 @@ public void testWertpapierKauf02() List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kauf02.txt"), errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(1L)); + assertThat(countAccountTransactions(results), is(0L)); assertThat(results.size(), is(2)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("LU1234444444")); - assertThat(security.getWkn(), is("ETF999")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("ComSta foobar .ETF Inhaber-Anteile I o.N.")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + assertThat(results, hasItem(security( // + hasIsin("US0970231058"), hasWkn("850471"), hasTicker(null), // + hasName("Boeing Co. Registered Shares DL 5"), // + hasCurrencyCode("EUR")))); // check buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); - assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); - - assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2011-01-01T09:04"))); - assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(42))); - assertThat(entry.getSource(), is("Kauf02.txt")); - assertNull(entry.getNote()); - - assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(1413.46)))); - assertThat(entry.getPortfolioTransaction().getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(1399.86)))); - 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(12.10 + 1.50)))); + assertThat(results, hasItem(purchase( // + hasDate("2016-07-18T17:02"), hasShares(160.00), // + hasSource("Kauf02.txt"), // + hasNote("Ord.-Nr.: 072324316214-001 | R.-Nr.: 395955075438D1F5"), // + hasAmount("EUR", 19359.18), hasGrossValue("EUR", 19303.52), // + hasTaxes("EUR", 0.00), hasFees("EUR", 53.16 + 2.50)))); } @Test @@ -136,38 +131,25 @@ public void testWertpapierKauf03() List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kauf03.txt"), errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(1L)); + assertThat(countAccountTransactions(results), is(0L)); assertThat(results.size(), is(2)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("NL0009538784")); - assertThat(security.getWkn(), is("A1C5WJ")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("NXP Semiconductors NV Aandelen aan toonder EO -,20")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + assertThat(results, hasItem(security( // + hasIsin("DE0005194062"), hasWkn("519406"), hasTicker(null), // + hasName("BayWa AG vink. Namens-Aktien o.N."), // + hasCurrencyCode("EUR")))); // check buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); - assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); - - assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2016-06-27T17:00"))); - assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(12))); - assertThat(entry.getSource(), is("Kauf03.txt")); - assertNull(entry.getNote()); - - assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(822.66)))); - assertThat(entry.getPortfolioTransaction().getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(812.76)))); - 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(9.90)))); + assertThat(results, hasItem(purchase( // + hasDate("2013-03-14T12:09"), hasShares(1437.00), // + hasSource("Kauf03.txt"), // + hasNote("Ord.-Nr.: 071077639314-001 | R.-Nr.: 290356708923DCA5"), // + hasAmount("EUR", 16312.80), hasGrossValue("EUR", 16265.14), // + hasTaxes("EUR", 0.00), hasFees("EUR", 45.56 + 1.50 + 0.60)))); } @Test @@ -180,358 +162,314 @@ public void testWertpapierKauf04() List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kauf04.txt"), errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(1L)); + assertThat(countAccountTransactions(results), is(0L)); assertThat(results.size(), is(2)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("IE00BTN1Y115")); - assertThat(security.getWkn(), is("A14M2J")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("Medtronic PLC Registered Shares DL -,0001")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + assertThat(results, hasItem(security( // + hasIsin("US0231351067"), hasWkn("906866"), hasTicker(null), // + hasName("Amazon.com Inc. Registered Shares DL -,01"), // + hasCurrencyCode("USD")))); // check buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); - assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); - - assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2016-11-22T00:00"))); - assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(20))); - assertThat(entry.getSource(), is("Kauf04.txt")); - assertNull(entry.getNote()); - - assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(1431.40)))); - assertThat(entry.getPortfolioTransaction().getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(1420.00)))); - 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(9.90 + 1.50)))); + assertThat(results, hasItem(purchase( // + hasDate("2020-04-16T18:33"), hasShares(2.00), // + hasSource("Kauf04.txt"), // + hasNote("Ord.-Nr.: -001 | R.-Nr.: "), // + hasAmount("EUR", 4444.15), hasGrossValue("EUR", 4412.36), // + hasForexGrossValue("USD", 4768.00), // + hasTaxes("EUR", 0.00), hasFees("EUR", 18.93 + (13.90 / 1.080600))))); } @Test - public void testWertpapierKauf05() + public void testWertpapierKauf04WithSecurityInEUR() { - ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); + Security security = new Security("Amazon.com Inc. Registered Shares DL -,01", CurrencyUnit.EUR); + security.setIsin("US0231351067"); + security.setWkn("906866"); + + Client client = new Client(); + client.addSecurity(security); + + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(client); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kauf05.txt"), errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kauf04.txt"), errors); assertThat(errors, empty()); - assertThat(results.size(), is(2)); + assertThat(countSecurities(results), is(0L)); + assertThat(countBuySell(results), is(1L)); + assertThat(countAccountTransactions(results), is(0L)); + assertThat(results.size(), is(1)); new AssertImportActions().check(results, CurrencyUnit.EUR); - // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("US0970231058")); - assertThat(security.getWkn(), is("850471")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("Boeing Co. Registered Shares DL 5")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); - - // check buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); - assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); - - assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2016-07-18T17:02"))); - assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(160))); - assertThat(entry.getSource(), is("Kauf05.txt")); - assertNull(entry.getNote()); - - assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(19359.18)))); - assertThat(entry.getPortfolioTransaction().getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(19303.52)))); - 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(53.16 + 2.50)))); + // check check buy sell transaction + assertThat(results, hasItem(purchase( // + hasDate("2020-04-16T18:33"), hasShares(2.00), // + hasSource("Kauf04.txt"), // + hasNote("Ord.-Nr.: -001 | R.-Nr.: "), // + hasAmount("EUR", 4444.15), hasGrossValue("EUR", 4412.36), // + hasTaxes("EUR", 0.00), hasFees("EUR", 18.93 + (13.90 / 1.080600)), // + check(tx -> { + CheckCurrenciesAction c = new CheckCurrenciesAction(); + Status s = c.process((PortfolioTransaction) tx, new Portfolio()); + assertThat(s, is(Status.OK_STATUS)); + })))); } @Test - public void testWertpapierKauf06() + public void testWertpapierKauf05() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kauf06.txt"), errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kauf05.txt"), errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(1L)); + assertThat(countAccountTransactions(results), is(0L)); assertThat(results.size(), is(2)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("DE0005194062")); - assertThat(security.getWkn(), is("519406")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("BayWa AG vink. Namens-Aktien o.N.")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + assertThat(results, hasItem(security( // + hasIsin("US00845V3087"), hasWkn("A0ET5J"), hasTicker(null), // + hasName("Agere Systems Inc. Registered Shares DL -,01"), // + hasCurrencyCode("EUR")))); // check buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); - assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); - - assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2013-03-14T12:09"))); - assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(1437))); - assertThat(entry.getSource(), is("Kauf06.txt")); - assertNull(entry.getNote()); - - assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(16312.80)))); - assertThat(entry.getPortfolioTransaction().getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(16265.14)))); - 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(45.56 + 1.50 + 0.6)))); + assertThat(results, hasItem(purchase( // + hasDate("2005-06-06T00:00"), hasShares(0.10), // + hasSource("Kauf05.txt"), // + hasNote("Ord.-Nr.: 111111111111 | R.-Nr.: 111111111111D111"), // + hasAmount("EUR", 0.88), hasGrossValue("EUR", 0.88), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); } @Test - public void testWertpapierKauf07() + public void testWertpapierKaufMitSteuerbehandlung01() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kauf07.txt"), errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "KaufMitSteuerbehandlung01.txt"), + errors); assertThat(errors, empty()); - assertThat(results.size(), is(2)); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(1L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(3)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("DE0008404005")); - assertThat(security.getWkn(), is("840400")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("Allianz SE vink.Namens-Aktien o.N.")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + assertThat(results, hasItem(security( // + hasIsin("LU2114851830"), hasWkn("DWS26Y"), hasTicker(null), // + hasName("ARERO Der Weltfonds - ESG Inhaber-Anteile LC o.N."), // + hasCurrencyCode("EUR")))); // check buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); - assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); - - assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2008-10-16T09:54"))); - assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(100))); - assertThat(entry.getSource(), is("Kauf07.txt")); - assertNull(entry.getNote()); - - assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(7586.80)))); - assertThat(entry.getPortfolioTransaction().getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(7560.90)))); - 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(23.80 + 1.50 + 0.6)))); + assertThat(results, hasItem(purchase( // + hasDate("2023-01-02T00:00"), hasShares(8.544), // + hasSource("KaufMitSteuerbehandlung01.txt"), // + hasNote("Ord.-Nr.: 592581219254 | R.-Nr.: 878649826981vsP4"), // + hasAmount("EUR", 999.90), hasGrossValue("EUR", 999.90), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); + + // check cancellation transaction + assertThat(results, hasItem(withFailureMessage( // + Messages.MsgErrorTransactionTypeNotSupported, // + taxes( // + hasDate("2023-01-02T00:00"), hasShares(8.544), // + hasSource("KaufMitSteuerbehandlung01.txt"), // + hasNote(null), // + hasAmount("EUR", 0.00), hasGrossValue("EUR", 0.00), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))))); } @Test - public void testWertpapierKauf08() + public void testWertpapierKaufMitSteuerbehandlung02() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kauf08.txt"), errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "KaufMitSteuerbehandlung02.txt"), + errors); assertThat(errors, empty()); - assertThat(results.size(), is(2)); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(1L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(3)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("US74144T1088")); - assertThat(security.getWkn(), is("870967")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("T. Rowe Price Group Inc. Registered Shares DL -,20")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + assertThat(results, hasItem(security( // + hasIsin("LU0378437502"), hasWkn("ETF010"), hasTicker(null), // + hasName("ComSt.-DJ Industr.Averag.U.ETF Inhaber-Anteile I o.N."), // + hasCurrencyCode("EUR")))); // check buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); - assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); - - assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2016-11-08T11:51"))); - assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(25))); - assertThat(entry.getSource(), is("Kauf08.txt")); - assertNull(entry.getNote()); - - assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(1469.55)))); - assertThat(entry.getPortfolioTransaction().getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(1456.75)))); - assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.TAX), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); - assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.FEE), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2.90 + 9.90)))); + assertThat(results, hasItem(purchase( // + hasDate("2018-06-01T00:00"), hasShares(0.10), // + hasSource("KaufMitSteuerbehandlung02.txt"), // + hasNote("Ord.-Nr.: 150799808720 | R.-Nr.: 454960516206DB75"), // + hasAmount("EUR", 24.99), hasGrossValue("EUR", 24.62), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.37)))); + + // check cancellation transaction + assertThat(results, hasItem(withFailureMessage( // + Messages.MsgErrorTransactionTypeNotSupported, // + taxes( // + hasDate("2018-06-01T00:00"), hasShares(0.10), // + hasSource("KaufMitSteuerbehandlung02.txt"), // + hasNote(null), // + hasAmount("EUR", 0.00), hasGrossValue("EUR", 0.00), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))))); } @Test - public void testWertpapierKauf09() + public void testWertpapierKaufMitSteuerbehandlung03() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kauf09.txt"), errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "KaufMitSteuerbehandlung03.txt"), + errors); assertThat(errors, empty()); - assertThat(results.size(), is(2)); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(1L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(3)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("DE0005785604")); - assertThat(security.getWkn(), is("578560")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("Fresenius SE & Co. KGaA Inhaber-Aktien o.N.")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + assertThat(results, hasItem(security( // + hasIsin("LU1273675402"), hasWkn("A14X2L"), hasTicker(null), // + hasName("BSF - BlackRock MIPG Actions Nom.A4 EUR o.N."), // + hasCurrencyCode("EUR")))); // check buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); - assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); - - assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2018-04-03T00:00"))); - assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(0.805))); - assertThat(entry.getSource(), is("Kauf09.txt")); - assertNull(entry.getNote()); - - assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(49.96)))); - assertThat(entry.getPortfolioTransaction().getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(49.22)))); - 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.74)))); + assertThat(results, hasItem(purchase( // + hasDate("2018-01-08T00:00"), hasShares(0.205), // + hasSource("KaufMitSteuerbehandlung03.txt"), // + hasNote("Ord.-Nr.: 004786949040 | R.-Nr.: 442604441030D195"), // + hasAmount("EUR", 24.97), hasGrossValue("EUR", 24.97), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); + + // check cancellation transaction + assertThat(results, hasItem(withFailureMessage( // + Messages.MsgErrorTransactionTypeNotSupported, // + taxes( // + hasDate("2018-01-08T00:00"), hasShares(0.205), // + hasSource("KaufMitSteuerbehandlung03.txt"), // + hasNote(null), // + hasAmount("EUR", 0.00), hasGrossValue("EUR", 0.00), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))))); } @Test - public void testWertpapierKauf10() + public void testWertpapierKaufMitSteuerbehandlung04() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kauf10.txt"), errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "KaufMitSteuerbehandlung04.txt"), + errors); assertThat(errors, empty()); - assertThat(results.size(), is(2)); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(1L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(3)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("CA8911021050")); - assertThat(security.getWkn(), is("914305")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("Toromont Industries Ltd. Registered Shares o.N.")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + assertThat(results, hasItem(security( // + hasIsin("DE000BASF111"), hasWkn("BASF11"), hasTicker(null), // + hasName("BASF SE Namens-Aktien o.N."), // + hasCurrencyCode("EUR")))); // check buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); - assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); - - assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2020-02-21T15:43"))); - assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(34))); - assertThat(entry.getSource(), is("Kauf10.txt")); - assertNull(entry.getNote()); - - assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(1686.80)))); - assertThat(entry.getPortfolioTransaction().getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(1666.00)))); - assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.TAX), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); - assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.FEE), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2.90 + 9.90 + 5.00 + 3.00)))); + assertThat(results, hasItem(purchase( // + hasDate("2018-11-01T00:00"), hasShares(2.17), // + hasSource("KaufMitSteuerbehandlung04.txt"), // + hasNote("Ord.-Nr.: 303796885690 | R.-Nr.: 468179348267DC35"), // + hasAmount("EUR", 149.95), hasGrossValue("EUR", 146.80), // + hasTaxes("EUR", 0.00), hasFees("EUR", 2.20 + 0.95)))); + + // check cancellation transaction + assertThat(results, hasItem(withFailureMessage( // + Messages.MsgErrorTransactionTypeNotSupported, // + taxes( // + hasDate("2018-11-01T00:00"), hasShares(2.17), // + hasSource("KaufMitSteuerbehandlung04.txt"), // + hasNote(null), // + hasAmount("EUR", 0.00), hasGrossValue("EUR", 0.00), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))))); } @Test - public void testWertpapierKauf11() + public void testWertpapierKaufMitSteuerbehandlung05() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kauf11.txt"), errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "KaufMitSteuerbehandlung05.txt"), + errors); assertThat(errors, empty()); - assertThat(results.size(), is(2)); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(1L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(3)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("US0231351067")); - assertThat(security.getWkn(), is("906866")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("Amazon.com Inc. Registered Shares DL -,01")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.USD)); + assertThat(results, hasItem(security( // + hasIsin("LU0055631609"), hasWkn("974119"), hasTicker(null), // + hasName("BGF - World Gold Fund Act. Nom. A2RF USD o.N."), // + hasCurrencyCode("USD")))); // check buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); - assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); - - assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2020-04-16T18:33"))); - assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(2))); - assertThat(entry.getSource(), is("Kauf11.txt")); - assertNull(entry.getNote()); - - assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(4444.15)))); - assertThat(entry.getPortfolioTransaction().getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(4412.36)))); - 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(18.93 + (13.90 / 1.080600))))); - - Unit grossValueUnit = entry.getPortfolioTransaction().getUnit(Unit.Type.GROSS_VALUE) - .orElseThrow(IllegalArgumentException::new); - assertThat(grossValueUnit.getForex(), is(Money.of(CurrencyUnit.USD, Values.Amount.factorize(4768.00)))); + assertThat(results, hasItem(purchase( // + hasDate("2017-06-07T00:00"), hasShares(0.843), // + hasSource("KaufMitSteuerbehandlung05.txt"), // + hasNote("Ord.-Nr.: 153797450590 | R.-Nr.: 424029016868D1B5"), // + hasAmount("EUR", 24.97), hasGrossValue("EUR", 24.97), // + hasForexGrossValue("USD", 28.05), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); + + // check cancellation transaction + assertThat(results, hasItem(withFailureMessage( // + Messages.MsgErrorTransactionTypeNotSupported, // + taxes( // + hasDate("2017-06-07T00:00"), hasShares(0.843), // + hasSource("KaufMitSteuerbehandlung05.txt"), // + hasNote(null), // + hasAmount("EUR", 0.00), hasGrossValue("EUR", 0.00), // + hasForexGrossValue("USD", 0.00), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))))); } @Test - public void testWertpapierKauf11WithSecurityInEUR() + public void testWertpapierKaufMitSteuerbehandlung05WithSecurityInEUR() { - Security security = new Security("Amazon.com Inc. Registered Shares DL -,01", CurrencyUnit.EUR); - security.setIsin("US0231351067"); - security.setWkn("906866"); + Security security = new Security("BGF - World Gold Fund Act. Nom. A2RF USD o.N.", CurrencyUnit.EUR); + security.setIsin("LU0055631609"); + security.setWkn("974119"); Client client = new Client(); client.addSecurity(security); @@ -540,182 +478,132 @@ public void testWertpapierKauf11WithSecurityInEUR() List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kauf11.txt"), errors); - - assertThat(errors, empty()); - assertThat(results.size(), is(1)); - new AssertImportActions().check(results, CurrencyUnit.EUR); - - // check buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); - assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); - - assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2020-04-16T18:33"))); - assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(2))); - assertThat(entry.getSource(), is("Kauf11.txt")); - assertNull(entry.getNote()); - - assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(4444.15)))); - assertThat(entry.getPortfolioTransaction().getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(4412.36)))); - 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(18.93 + (13.90 / 1.080600))))); - - CheckCurrenciesAction c = new CheckCurrenciesAction(); - Account account = new Account(); - account.setCurrencyCode(CurrencyUnit.EUR); - Status s = c.process(entry, account, entry.getPortfolio()); - assertThat(s, is(Status.OK_STATUS)); - } - - @Test - public void testWertpapierKauf12() - { - ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); - - List errors = new ArrayList<>(); - - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kauf12.txt"), errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "KaufMitSteuerbehandlung05.txt"), + errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(0L)); + assertThat(countBuySell(results), is(1L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(2)); new AssertImportActions().check(results, CurrencyUnit.EUR); - // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("US09259E1082")); - assertThat(security.getWkn(), is("A2N4AB")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("BlackRock TCP Capital Corp. Registered Shares DL -,001")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); - - // check buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); - assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); - - assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2020-12-28T16:50"))); - assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(150))); - assertThat(entry.getSource(), is("Kauf12.txt")); - assertNull(entry.getNote()); - - assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(1430.30)))); - assertThat(entry.getPortfolioTransaction().getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(1417.50)))); - assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.TAX), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); - assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.FEE), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2.90 + 9.90)))); + // check check buy sell transaction + assertThat(results, hasItem(purchase( // + hasDate("2017-06-07T00:00"), hasShares(0.843), // + hasSource("KaufMitSteuerbehandlung05.txt"), // + hasNote("Ord.-Nr.: 153797450590 | R.-Nr.: 424029016868D1B5"), // + hasAmount("EUR", 24.97), hasGrossValue("EUR", 24.97), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00), // + check(tx -> { + CheckCurrenciesAction c = new CheckCurrenciesAction(); + Status s = c.process((PortfolioTransaction) tx, new Portfolio()); + assertThat(s, is(Status.OK_STATUS)); + })))); + + // check cancellation transaction + assertThat(results, hasItem(withFailureMessage( // + Messages.MsgErrorTransactionTypeNotSupported, // + taxes( // + hasDate("2017-06-07T00:00"), hasShares(0.843), // + hasSource("KaufMitSteuerbehandlung05.txt"), // + hasNote(null), // + hasAmount("EUR", 0.00), hasGrossValue("EUR", 0.00), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))))); } @Test - public void testWertpapierKauf13() + public void testWertpapierKaufMitSteuerbehandlung06() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kauf13.txt"), errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "KaufMitSteuerbehandlung06.txt"), + errors); assertThat(errors, empty()); - assertThat(results.size(), is(2)); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(1L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(3)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("DE0008232125")); - assertThat(security.getWkn(), is("823212")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("Deutsche Lufthansa AG vink.Namens-Aktien o.N.")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + assertThat(results, hasItem(security( // + hasIsin("IE00BTN1Y115"), hasWkn("A14M2J"), hasTicker(null), // + hasName("Medtronic PLC Registered Shares DL -,0001"), // + hasCurrencyCode("EUR")))); // check buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); - assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); - - assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2021-10-05T00:00"))); - assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(1303))); - assertThat(entry.getSource(), is("Kauf13.txt")); - assertNull(entry.getNote()); - - assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(4682.25)))); - assertThat(entry.getPortfolioTransaction().getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(4664.74)))); - 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(16.56 + 0.95)))); + assertThat(results, hasItem(purchase( // + hasDate("2016-11-22T00:00"), hasShares(20.00), // + hasSource("KaufMitSteuerbehandlung06.txt"), // + hasNote("Ord.-Nr.: 072450450919 | R.-Nr.: 406909971273D0D5"), // + hasAmount("EUR", 1431.40), hasGrossValue("EUR", 1420.00), // + hasTaxes("EUR", 0.00), hasFees("EUR", 9.90 + 1.50)))); + + // check cancellation transaction + assertThat(results, hasItem(withFailureMessage( // + Messages.MsgErrorTransactionTypeNotSupported, // + taxes( // + hasDate("2016-11-22T00:00"), hasShares(20.00), // + hasSource("KaufMitSteuerbehandlung06.txt"), // + hasNote(null), // + hasAmount("EUR", 0.00), hasGrossValue("EUR", 0.00), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))))); } @Test - public void testWertpapierKauf14() + public void testWertpapierKaufMitSteuerbehandlung07() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kauf14.txt"), errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "KaufMitSteuerbehandlung07.txt"), + errors); assertThat(errors, empty()); - assertThat(results.size(), is(2)); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(1L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(3)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("LU0048580855")); - assertThat(security.getWkn(), is("973265")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("Fidelity Fds-Greater China Fd. Reg.Shares A (Glob.Cert.) o.N.")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.USD)); + assertThat(results, hasItem(security( // + hasIsin("NL0000687663"), hasWkn("A0LFB3"), hasTicker(null), // + hasName("AerCap Holdings N.V. Aandelen op naam EO -,01"), // + hasCurrencyCode("USD")))); // check buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); - assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); - - assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2021-05-07T00:00"))); - assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(0.165))); - assertThat(entry.getSource(), is("Kauf14.txt")); - assertNull(entry.getNote()); - - assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(49.98)))); - assertThat(entry.getPortfolioTransaction().getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(49.98)))); - 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)))); - - Unit grossValueUnit = entry.getPortfolioTransaction().getUnit(Unit.Type.GROSS_VALUE) - .orElseThrow(IllegalArgumentException::new); - assertThat(grossValueUnit.getForex(), is(Money.of(CurrencyUnit.USD, Values.Amount.factorize(49.98 * 1.2165)))); + assertThat(results, hasItem(purchase( // + hasDate("2020-03-11T00:00"), hasShares(720.00), // + hasSource("KaufMitSteuerbehandlung07.txt"), // + hasNote("Ord.-Nr.: 000121111681 | R.-Nr.: 511138111156DA65"), // + hasAmount("EUR", 25847.07), hasGrossValue("EUR", 25759.28), // + hasForexGrossValue("USD", 28870.99), // + hasTaxes("EUR", 0.00), hasFees("EUR", 62.90 + (27.90 / 1.120800))))); + + // check cancellation transaction + assertThat(results, hasItem(withFailureMessage( // + Messages.MsgErrorTransactionTypeNotSupported, // + taxes( // + hasDate("2020-03-11T00:00"), hasShares(720.00), // + hasSource("KaufMitSteuerbehandlung07.txt"), // + hasNote(null), // + hasAmount("EUR", 0.00), hasGrossValue("EUR", 0.00), // + hasForexGrossValue("USD", 0.00), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))))); } @Test - public void testWertpapierKauf14WithSecurityInEUR() + public void testWertpapierKaufMitSteuerbehandlung07WithSecurityInEUR() { - Security security = new Security("Fidelity Fds-Greater China Fd. Reg.Shares A (Glob.Cert.) o.N.", CurrencyUnit.EUR); - security.setIsin("LU0048580855"); - security.setWkn("973265"); + Security security = new Security("AerCap Holdings N.V. Aandelen op naam EO -,01", CurrencyUnit.EUR); + security.setIsin("NL0000687663"); + security.setWkn("A0LFB3"); Client client = new Client(); client.addSecurity(security); @@ -724,94 +612,90 @@ public void testWertpapierKauf14WithSecurityInEUR() List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kauf14.txt"), errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "KaufMitSteuerbehandlung07.txt"), + errors); assertThat(errors, empty()); - assertThat(results.size(), is(1)); + assertThat(countSecurities(results), is(0L)); + assertThat(countBuySell(results), is(1L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(2)); new AssertImportActions().check(results, CurrencyUnit.EUR); - // check buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); - assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); - - assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2021-05-07T00:00"))); - assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(0.165))); - assertThat(entry.getSource(), is("Kauf14.txt")); - assertNull(entry.getNote()); - - assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(49.98)))); - assertThat(entry.getPortfolioTransaction().getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(49.98)))); - 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)))); - - CheckCurrenciesAction c = new CheckCurrenciesAction(); - Account account = new Account(); - account.setCurrencyCode(CurrencyUnit.EUR); - Status s = c.process(entry, account, entry.getPortfolio()); - assertThat(s, is(Status.OK_STATUS)); + // check check buy sell transaction + assertThat(results, hasItem(purchase( // + hasDate("2020-03-11T00:00"), hasShares(720.00), // + hasSource("KaufMitSteuerbehandlung07.txt"), // + hasNote("Ord.-Nr.: 000121111681 | R.-Nr.: 511138111156DA65"), // + hasAmount("EUR", 25847.07), hasGrossValue("EUR", 25759.28), // + hasTaxes("EUR", 0.00), hasFees("EUR", 62.90 + (27.90 / 1.120800)), // + check(tx -> { + CheckCurrenciesAction c = new CheckCurrenciesAction(); + Status s = c.process((PortfolioTransaction) tx, new Portfolio()); + assertThat(s, is(Status.OK_STATUS)); + })))); + + // check cancellation transaction + assertThat(results, hasItem(withFailureMessage( // + Messages.MsgErrorTransactionTypeNotSupported, // + taxes( // + hasDate("2020-03-11T00:00"), hasShares(720.00), // + hasSource("KaufMitSteuerbehandlung07.txt"), // + hasNote(null), // + hasAmount("EUR", 0.00), hasGrossValue("EUR", 0.00), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))))); } @Test - public void testWertpapierKauf15() + public void testWertpapierKaufMitSteuerbehandlung08() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kauf15.txt"), errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "KaufMitSteuerbehandlung08.txt"), + errors); assertThat(errors, empty()); - assertThat(results.size(), is(2)); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(1L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(3)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("NL0000687663")); - assertThat(security.getWkn(), is("A0LFB3")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("AerCap Holdings N.V. Aandelen op naam EO -,01")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.USD)); + assertThat(results, hasItem(security( // + hasIsin("GB00B63H8491"), hasWkn("A1H81L"), hasTicker(null), // + hasName("Rolls Royce Holdings PLC Registered Shares LS 0.20"), // + hasCurrencyCode("GBP")))); // check buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); - assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); - - assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2020-03-11T00:00"))); - assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(720))); - assertThat(entry.getSource(), is("Kauf15.txt")); - assertNull(entry.getNote()); - - assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(25847.07)))); - assertThat(entry.getPortfolioTransaction().getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(25759.28)))); - 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(62.90 + (27.90 / 1.120800))))); - - Unit grossValueUnit = entry.getPortfolioTransaction().getUnit(Unit.Type.GROSS_VALUE) - .orElseThrow(IllegalArgumentException::new); - assertThat(grossValueUnit.getForex(), is(Money.of(CurrencyUnit.USD, Values.Amount.factorize(28870.99)))); + assertThat(results, hasItem(purchase( // + hasDate("2019-12-02T00:00"), hasShares(6000.00), // + hasSource("KaufMitSteuerbehandlung08.txt"), // + hasNote("Ord.-Nr.: 111111111111 | R.-Nr.: 111111111111DB11"), // + hasAmount("EUR", 50569.94), hasGrossValue("EUR", 50238.13), // + hasForexGrossValue("GBP", 42720.00), // + hasTaxes("EUR", (213.60 / 0.850350)), hasFees("EUR", 62.90 + (15.07 / 0.850350))))); + + // check cancellation transaction + assertThat(results, hasItem(withFailureMessage( // + Messages.MsgErrorTransactionTypeNotSupported, // + taxes( // + hasDate("2019-12-02T00:00"), hasShares(6000.00), // + hasSource("KaufMitSteuerbehandlung08.txt"), // + hasNote(null), // + hasAmount("EUR", 0.00), hasGrossValue("EUR", 0.00), // + hasForexGrossValue("GBP", 0.00), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))))); } @Test - public void testWertpapierKauf15WithSecurityInEUR() + public void testWertpapierKaufMitSteuerbehandlung08WithSecurityInEUR() { - Security security = new Security("AerCap Holdings N.V. Aandelen op naam EO -,01", CurrencyUnit.EUR); - security.setIsin("NL0000687663"); - security.setWkn("A0LFB3"); + Security security = new Security("Rolls Royce Holdings PLC Registered Shares LS 0.20", CurrencyUnit.EUR); + security.setIsin("GB00B63H8491"); + security.setWkn("A1H81L"); Client client = new Client(); client.addSecurity(security); @@ -820,470 +704,343 @@ public void testWertpapierKauf15WithSecurityInEUR() List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kauf15.txt"), errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "KaufMitSteuerbehandlung08.txt"), + errors); assertThat(errors, empty()); - assertThat(results.size(), is(1)); + assertThat(countSecurities(results), is(0L)); + assertThat(countBuySell(results), is(1L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(2)); new AssertImportActions().check(results, CurrencyUnit.EUR); - // check buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); - assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); - - assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2020-03-11T00:00"))); - assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(720))); - assertThat(entry.getSource(), is("Kauf15.txt")); - assertNull(entry.getNote()); - - assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(25847.07)))); - assertThat(entry.getPortfolioTransaction().getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(25759.28)))); - 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(62.90 + (27.90 / 1.120800))))); - - CheckCurrenciesAction c = new CheckCurrenciesAction(); - Account account = new Account(); - account.setCurrencyCode(CurrencyUnit.EUR); - Status s = c.process(entry, account, entry.getPortfolio()); - assertThat(s, is(Status.OK_STATUS)); + // check check buy sell transaction + assertThat(results, hasItem(purchase( // + hasDate("2019-12-02T00:00"), hasShares(6000.00), // + hasSource("KaufMitSteuerbehandlung08.txt"), // + hasNote("Ord.-Nr.: 111111111111 | R.-Nr.: 111111111111DB11"), // + hasAmount("EUR", 50569.94), hasGrossValue("EUR", 50238.13), // + hasTaxes("EUR", (213.60 / 0.850350)), hasFees("EUR", 62.90 + (15.07 / 0.850350)), // + check(tx -> { + CheckCurrenciesAction c = new CheckCurrenciesAction(); + Status s = c.process((PortfolioTransaction) tx, new Portfolio()); + assertThat(s, is(Status.OK_STATUS)); + })))); + + // check cancellation transaction + assertThat(results, hasItem(withFailureMessage( // + Messages.MsgErrorTransactionTypeNotSupported, // + taxes( // + hasDate("2019-12-02T00:00"), hasShares(6000.00), // + hasSource("KaufMitSteuerbehandlung08.txt"), // + hasNote(null), // + hasAmount("EUR", 0.00), hasGrossValue("EUR", 0.00), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))))); } @Test - public void testWertpapierKauf16() + public void testWertpapierKaufMitSteuerbehandlung09() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kauf16.txt"), errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "KaufMitSteuerbehandlung09.txt"), + errors); assertThat(errors, empty()); - assertThat(results.size(), is(2)); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(1L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(3)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("GB00B63H8491")); - assertThat(security.getWkn(), is("A1H81L")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("Rolls Royce Holdings PLC Registered Shares LS 0.20")); - assertThat(security.getCurrencyCode(), is("GBP")); - - // check buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); - assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); - - assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2019-12-02T00:00"))); - assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(6000))); - assertThat(entry.getSource(), is("Kauf16.txt")); - assertNull(entry.getNote()); - - assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(50569.94)))); - assertThat(entry.getPortfolioTransaction().getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(50238.13)))); - assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.TAX), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(213.60 / 0.850350)))); - assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.FEE), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(62.90 + (15.07 / 0.850350))))); - - Unit grossValueUnit = entry.getPortfolioTransaction().getUnit(Unit.Type.GROSS_VALUE) - .orElseThrow(IllegalArgumentException::new); - assertThat(grossValueUnit.getForex(), is(Money.of("GBP", Values.Amount.factorize(42720.00)))); - } - - @Test - public void testWertpapierKauf16WithSecurityInEUR() - { - Security security = new Security("Rolls Royce Holdings PLC Registered Shares LS 0.20", CurrencyUnit.EUR); - security.setIsin("GB00B63H8491"); - security.setWkn("A1H81L"); - - Client client = new Client(); - client.addSecurity(security); - - ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(client); - - List errors = new ArrayList<>(); - - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kauf16.txt"), errors); - - assertThat(errors, empty()); - assertThat(results.size(), is(1)); - new AssertImportActions().check(results, CurrencyUnit.EUR); + assertThat(results, hasItem(security( // + hasIsin("CA8911021050"), hasWkn("914305"), hasTicker(null), // + hasName("Toromont Industries Ltd. Registered Shares o.N."), // + hasCurrencyCode("EUR")))); // check buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); - assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); - - assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2019-12-02T00:00"))); - assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(6000))); - assertThat(entry.getSource(), is("Kauf16.txt")); - assertNull(entry.getNote()); - - assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(50569.94)))); - assertThat(entry.getPortfolioTransaction().getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(50238.13)))); - assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.TAX), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(213.60 / 0.850350)))); - assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.FEE), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(62.90 + (15.07 / 0.850350))))); - - CheckCurrenciesAction c = new CheckCurrenciesAction(); - Account account = new Account(); - account.setCurrencyCode(CurrencyUnit.EUR); - Status s = c.process(entry, account, entry.getPortfolio()); - assertThat(s, is(Status.OK_STATUS)); + assertThat(results, hasItem(purchase( // + hasDate("2020-02-21T15:43"), hasShares(34.00), // + hasSource("KaufMitSteuerbehandlung09.txt"), // + hasNote("Ord.-Nr.: 111111111111-111 | R.-Nr.: 2222222222222A22"), // + hasAmount("EUR", 1686.80), hasGrossValue("EUR", 1666.00), // + hasTaxes("EUR", 0.00), hasFees("EUR", 2.90 + 9.90 + 5.00 + 3.00)))); + + // check cancellation transaction + assertThat(results, hasItem(withFailureMessage( // + Messages.MsgErrorTransactionTypeNotSupported, // + taxes( // + hasDate("2020-02-21T00:00"), hasShares(34.00), // + hasSource("KaufMitSteuerbehandlung09.txt"), // + hasNote(null), // + hasAmount("EUR", 0.00), hasGrossValue("EUR", 0.00), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))))); } @Test - public void testWertpapierKauf17() + public void testWertpapierKaufMitSteuerbehandlung10() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kauf17.txt"), errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "KaufMitSteuerbehandlung10.txt"), + errors); assertThat(errors, empty()); - assertThat(results.size(), is(2)); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(1L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(3)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("FR0000121014")); - assertThat(security.getWkn(), is("853292")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("LVMH Moët Henn. L. Vuitton SA Actions Port. (C.R.) EO 0,3")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + assertThat(results, hasItem(security( // + hasIsin("US09259E1082"), hasWkn("A2N4AB"), hasTicker(null), // + hasName("BlackRock TCP Capital Corp. Registered Shares DL -,001"), // + hasCurrencyCode("EUR")))); // check buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY)); - assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY)); - - assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2007-05-19T00:00"))); - assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(100))); - assertThat(entry.getSource(), is("Kauf17.txt")); - assertNull(entry.getNote()); - - assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(8627.90)))); - assertThat(entry.getPortfolioTransaction().getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(8600.00)))); - 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(26.40 + 1.50)))); + assertThat(results, hasItem(purchase( // + hasDate("2020-12-28T16:50"), hasShares(150.00), // + hasSource("KaufMitSteuerbehandlung10.txt"), // + hasNote("R.-Nr.: "), // + hasAmount("EUR", 1430.30), hasGrossValue("EUR", 1417.50), // + hasTaxes("EUR", 0.00), hasFees("EUR", 2.90 + 9.90)))); + + // check cancellation transaction + assertThat(results, hasItem(withFailureMessage( // + Messages.MsgErrorTransactionTypeNotSupported, // + taxes( // + hasDate("2020-12-28T00:00"), hasShares(150.00), // + hasSource("KaufMitSteuerbehandlung10.txt"), // + hasNote(null), // + hasAmount("EUR", 0.00), hasGrossValue("EUR", 0.00), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))))); } @Test - public void testWertpapierVerkauf01() + public void testWertpapierKaufMitSteuerbehandlung11() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Verkauf01.txt"), errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "KaufMitSteuerbehandlung11.txt"), + errors); assertThat(errors, empty()); - assertThat(results.size(), is(2)); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(1L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(3)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("DE1234567890")); - assertThat(security.getWkn(), is("ABC123")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("FooBar. ETF Inhaber-Anteile I o.N.")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + assertThat(results, hasItem(security( // + hasIsin("LU2114851830"), hasWkn("DWS26Y"), hasTicker(null), // + hasName("ARERO Der Weltfonds - ESG Inhaber-Anteile LC o.N."), // + hasCurrencyCode("EUR")))); // check buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.SELL)); - assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.SELL)); - - assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2010-01-01T10:57"))); - assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(100))); - assertThat(entry.getSource(), is("Verkauf01.txt")); - assertNull(entry.getNote()); - - assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(10100.00)))); - assertThat(entry.getPortfolioTransaction().getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(10111.51)))); - 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(10.01 + 1.50)))); + assertThat(results, hasItem(purchase( // + hasDate("2023-01-16T00:00"), hasShares(8.261), // + hasSource("KaufMitSteuerbehandlung11.txt"), // + hasNote("Ord.-Nr.: 000000000000 | R.-Nr.: 600000000000DBD5"), // + hasAmount("EUR", 999.91), hasGrossValue("EUR", 999.91), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); + + // check cancellation transaction + assertThat(results, hasItem(withFailureMessage( // + Messages.MsgErrorTransactionTypeNotSupported, // + taxes( // + hasDate("2023-01-16T00:00"), hasShares(8.261), // + hasSource("KaufMitSteuerbehandlung11.txt"), // + hasNote(null), // + hasAmount("EUR", 0.00), hasGrossValue("EUR", 0.00), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))))); } @Test - public void testWertpapierVerkauf02() + public void testWertpapierKaufMitSteuerbehandlung12() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Verkauf02.txt"), errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "KaufMitSteuerbehandlung12.txt"), + errors); assertThat(errors, empty()); - assertThat(results.size(), is(2)); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(1L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(3)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("US0970231058")); - assertThat(security.getWkn(), is("850471")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("Boeing Co. Registered Shares DL 5")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + assertThat(results, hasItem(security( // + hasIsin("LU2114851830"), hasWkn("DWS26Y"), hasTicker(null), // + hasName("ARERO Der Weltfonds - ESG Inhaber-Anteile LC o.N."), // + hasCurrencyCode("EUR")))); // check buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.SELL)); - assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.SELL)); - - assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2016-12-08T17:03"))); - assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(1140))); - assertThat(entry.getSource(), is("Verkauf02.txt")); - assertNull(entry.getNote()); - - assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(20413.33)))); - assertThat(entry.getPortfolioTransaction().getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(20469.40)))); - 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(56.07)))); + assertThat(results, hasItem(purchase( // + hasDate("2023-05-02T00:00"), hasShares(2.734), // + hasSource("KaufMitSteuerbehandlung12.txt"), // + hasNote("Ord.-Nr.: 302789004599 | R.-Nr.: 019579984081kw86"), // + hasAmount("EUR", 323.49), hasGrossValue("EUR", 323.49), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); + + // check cancellation transaction + assertThat(results, hasItem(withFailureMessage( // + Messages.MsgErrorTransactionTypeNotSupported, // + taxes( // + hasDate("2023-05-02T00:00"), hasShares(2.734), // + hasSource("KaufMitSteuerbehandlung12.txt"), // + hasNote(null), // + hasAmount("EUR", 0.00), hasGrossValue("EUR", 0.00), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))))); } @Test - public void testWertpapierVerkauf03() + public void testWertpapierKaufMitSteuerbehandlung13() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Verkauf03.txt"), errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "KaufMitSteuerbehandlung13.txt"), + errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(1L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(3)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("US4656851056")); - assertThat(security.getWkn(), is("A0F401")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("ITC Holdings Corp. Registered Shares o. N.")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + assertThat(results, hasItem(security( // + hasIsin("DE000BASF111"), hasWkn("BASF11"), hasTicker(null), // + hasName("BASF SE Namens-Aktien o.N."), // + hasCurrencyCode("EUR")))); // check buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.SELL)); - assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.SELL)); - - assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2016-02-25T00:00"))); - assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(570))); - assertThat(entry.getSource(), is("Verkauf03.txt")); - assertNull(entry.getNote()); - - assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(21239.83)))); - assertThat(entry.getPortfolioTransaction().getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(21306.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(5.80 + 58.17 + 2.50)))); - - // 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.getDateTime(), is(LocalDateTime.parse("2016-02-25T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(570))); - assertThat(transaction.getSource(), is("Verkauf03.txt")); - assertNull(transaction.getNote()); - - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(71.73)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(71.73)))); - 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(results, hasItem(purchase( // + hasDate("2022-10-04T00:00"), hasShares(0.565), // + hasSource("KaufMitSteuerbehandlung13.txt"), // + hasNote("Ord.-Nr.: 272803480270 | R.-Nr.: 591997149596D095"), // + hasAmount("EUR", 24.99), hasGrossValue("EUR", 23.68), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.36 + 0.95)))); + + // check cancellation transaction + assertThat(results, hasItem(withFailureMessage( // + Messages.MsgErrorTransactionTypeNotSupported, // + taxes( // + hasDate("2022-10-04T00:00"), hasShares(0.565), // + hasSource("KaufMitSteuerbehandlung13.txt"), // + hasNote(null), // + hasAmount("EUR", 0.00), hasGrossValue("EUR", 0.00), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))))); } @Test - public void testWertpapierVerkauf04() + public void testWertpapierKaufMitSteuerbehandlung14() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Verkauf04.txt"), errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "KaufMitSteuerbehandlung14.txt"), + errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(1L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(3)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("DE0007472060")); - assertThat(security.getWkn(), is("747206")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("Wirecard AG Inhaber-Aktien o.N.")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + assertThat(results, hasItem(security( // + hasIsin("DE000BASF111"), hasWkn("BASF11"), hasTicker(null), // + hasName("BASF SE Namens-Aktien o.N."), // + hasCurrencyCode("EUR")))); // check buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.SELL)); - assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.SELL)); - - assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2020-08-25T14:34"))); - assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(3))); - assertThat(entry.getSource(), is("Verkauf04.txt")); - assertNull(entry.getNote()); - - assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(3.54)))); - assertThat(entry.getPortfolioTransaction().getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(3.54)))); - 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 fee transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(transaction.getType(), is(AccountTransaction.Type.FEES)); - - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2020-08-25T14:34"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(3))); - assertThat(entry.getSource(), is("Verkauf04.txt")); - assertNull(entry.getNote()); - - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(12.40)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(12.40)))); - 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(results, hasItem(purchase( // + hasDate("2022-10-04T09:02"), hasShares(5.00), // + hasSource("KaufMitSteuerbehandlung14.txt"), // + hasNote("Ord.-Nr.: 000312226831-001 | R.-Nr.: 591958998217D175"), // + hasAmount("EUR", 220.85), hasGrossValue("EUR", 207.50), // + hasTaxes("EUR", 0.00), hasFees("EUR", 9.90 + 0.95 + 2.50)))); + + // check cancellation transaction + assertThat(results, hasItem(withFailureMessage( // + Messages.MsgErrorTransactionTypeNotSupported, // + taxes( // + hasDate("2022-10-04T00:00"), hasShares(5.00), // + hasSource("KaufMitSteuerbehandlung14.txt"), // + hasNote(null), // + hasAmount("EUR", 0.00), hasGrossValue("EUR", 0.00), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))))); } @Test - public void testWertpapierVerkauf05() + public void testWertpapierKaufMitSteuerbehandlung15() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Verkauf05.txt"), errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "KaufMitSteuerbehandlung15.txt"), + errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(1L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(3)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("US86771W1053")); - assertThat(security.getWkn(), is("A14V1T")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("Sunrun Inc. Registered Shares DL -,0001")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.USD)); + assertThat(results, hasItem(security( // + hasIsin("LU0048580855"), hasWkn("973265"), hasTicker(null), // + hasName("Fidelity Fds-Greater China Fd. Reg.Shares A (Glob.Cert.) o.N."), // + hasCurrencyCode("USD")))); // check buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.SELL)); - assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.SELL)); - - assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2020-12-15T20:37"))); - assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(25))); - assertThat(entry.getSource(), is("Verkauf05.txt")); - assertNull(entry.getNote()); - - assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(1263.05)))); - assertThat(entry.getPortfolioTransaction().getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(1287.32)))); - 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(12.90 + (13.90 / 1.222500))))); - - Unit grossValueUnit = entry.getPortfolioTransaction().getUnit(Unit.Type.GROSS_VALUE) - .orElseThrow(IllegalArgumentException::new); - assertThat(grossValueUnit.getForex(), is(Money.of(CurrencyUnit.USD, Values.Amount.factorize(1573.75)))); - - // 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.getDateTime(), is(LocalDateTime.parse("2020-12-15T20:37"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(25))); - assertThat(transaction.getSource(), is("Verkauf05.txt")); - assertNull(transaction.getNote()); - - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(10.84)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(10.84)))); - 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(results, hasItem(purchase( // + hasDate("2021-05-07T00:00"), hasShares(0.165), // + hasSource("KaufMitSteuerbehandlung15.txt"), // + hasNote("Ord.-Nr.: 1123456789560 | R.-Nr.: 123456784001DF35"), // + hasAmount("EUR", 49.98), hasGrossValue("EUR", 49.98), // + hasForexGrossValue("USD", 60.80), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); + + // check cancellation transaction + assertThat(results, hasItem(withFailureMessage( // + Messages.MsgErrorTransactionTypeNotSupported, // + taxes( // + hasDate("2021-05-07T00:00"), hasShares(0.165), // + hasSource("KaufMitSteuerbehandlung15.txt"), // + hasNote(null), // + hasAmount("EUR", 0.00), hasGrossValue("EUR", 0.00), // + hasForexGrossValue("USD", 0.00), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))))); } @Test - public void testWertpapierVerkauf05WithSecurityInEUR() + public void testWertpapierKaufMitSteuerbehandlung15WithSecurityInEUR() { - Security security = new Security("Sunrun Inc. Registered Shares DL -,0001", CurrencyUnit.EUR); - security.setIsin("US86771W1053"); - security.setWkn("A14V1T"); + Security security = new Security("Fidelity Fds-Greater China Fd. Reg.Shares A (Glob.Cert.) o.N.", + CurrencyUnit.EUR); + security.setIsin("LU0048580855"); + security.setWkn("973265"); Client client = new Client(); client.addSecurity(security); @@ -1292,502 +1049,1515 @@ public void testWertpapierVerkauf05WithSecurityInEUR() List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Verkauf05.txt"), errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "KaufMitSteuerbehandlung15.txt"), + errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(0L)); + assertThat(countBuySell(results), is(1L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(2)); new AssertImportActions().check(results, CurrencyUnit.EUR); - // check buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.SELL)); - assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.SELL)); - - assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2020-12-15T20:37"))); - assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(25))); - assertThat(entry.getSource(), is("Verkauf05.txt")); - assertNull(entry.getNote()); - - assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(1263.05)))); - assertThat(entry.getPortfolioTransaction().getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(1287.32)))); - 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(12.90 + (13.90 / 1.222500))))); - - // 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.getDateTime(), is(LocalDateTime.parse("2020-12-15T20:37"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(25))); - assertThat(transaction.getSource(), is("Verkauf05.txt")); - assertNull(transaction.getNote()); - - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(10.84)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(10.84)))); - 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)))); - - CheckCurrenciesAction c = new CheckCurrenciesAction(); - Account account = new Account(); - account.setCurrencyCode(CurrencyUnit.EUR); - Status s = c.process(entry, account, entry.getPortfolio()); - assertThat(s, is(Status.OK_STATUS)); + // check check buy sell transaction + assertThat(results, hasItem(purchase( // + hasDate("2021-05-07T00:00"), hasShares(0.165), // + hasSource("KaufMitSteuerbehandlung15.txt"), // + hasNote("Ord.-Nr.: 1123456789560 | R.-Nr.: 123456784001DF35"), // + hasAmount("EUR", 49.98), hasGrossValue("EUR", 49.98), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00), // + check(tx -> { + CheckCurrenciesAction c = new CheckCurrenciesAction(); + Status s = c.process((PortfolioTransaction) tx, new Portfolio()); + assertThat(s, is(Status.OK_STATUS)); + })))); + + // check cancellation transaction + assertThat(results, hasItem(withFailureMessage( // + Messages.MsgErrorTransactionTypeNotSupported, // + taxes( // + hasDate("2021-05-07T00:00"), hasShares(0.165), // + hasSource("KaufMitSteuerbehandlung15.txt"), // + hasNote(null), // + hasAmount("EUR", 0.00), hasGrossValue("EUR", 0.00), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))))); } @Test - public void testWertpapierVerkauf06() + public void testWertpapierKaufSteuerbehandlung01() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Verkauf06.txt"), errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "KaufSteuerbehandlung01.txt"), + errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(2)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("DE000TB1AF62")); - assertThat(security.getWkn(), is("TB1AF6")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("HSBC Trinkaus & Burkhardt AG Call 14.01.11 Juniper 30")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); - - // check buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.SELL)); - assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.SELL)); - - assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2008-06-11T18:54"))); - assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(2000))); - assertThat(entry.getSource(), is("Verkauf06.txt")); - assertNull(entry.getNote()); - - assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(906.85)))); - assertThat(entry.getPortfolioTransaction().getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(920.00)))); - 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(9.90 + 2.50 + 0.75)))); + assertThat(results, hasItem(security( // + hasIsin("US7427181091"), hasWkn("852062"), hasTicker(null), // + hasName("PROCTER GAMBLE"), // + hasCurrencyCode("EUR")))); + + // check cancellation transaction + assertThat(results, hasItem(withFailureMessage( // + Messages.MsgErrorTransactionTypeNotSupported, // + taxes( // + hasDate("2021-01-04T00:00"), hasShares(0.216), // + hasSource("KaufSteuerbehandlung01.txt"), // + hasNote(null), // + hasAmount("EUR", 0.00), hasGrossValue("EUR", 0.00), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))))); } @Test - public void testWertpapierVerkauf07() + public void testWertpapierVerkauf01() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Verkauf07.txt"), errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Verkauf01.txt"), errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(1L)); + assertThat(countAccountTransactions(results), is(0L)); assertThat(results.size(), is(2)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("DE0009503540")); - assertThat(security.getWkn(), is("950354")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("Citigroup Global Markets Dt. KOS03/21.12.04 Allianz 80")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + assertThat(results, hasItem(security( // + hasIsin("DE0009848002"), hasWkn("984800"), hasTicker(null), // + hasName("DWS Internet-Aktien Typ O Inhaber-Anteile"), // + hasCurrencyCode("EUR")))); // check buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.SELL)); - assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.SELL)); - - assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2003-12-08T00:00"))); - assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(550))); - assertThat(entry.getSource(), is("Verkauf07.txt")); - assertNull(entry.getNote()); - - assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(1086.72)))); - assertThat(entry.getPortfolioTransaction().getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(1100.00)))); - 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.88 + 9.90 + 2.50)))); + assertThat(results, hasItem(sale( // + hasDate("2007-02-20T00:00"), hasShares(67.00), // + hasSource("Verkauf01.txt"), // + hasNote("Ord.-Nr.: 007301624026-004 | R.-Nr.: 099094791965DAF2"), // + hasAmount("EUR", 1004.33), hasGrossValue("EUR", 1004.33), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); } @Test - public void testWertpapierVerkauf08() + public void testWertpapierVerkauf02() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Verkauf08.txt"), errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Verkauf02.txt"), errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(1L)); + assertThat(countAccountTransactions(results), is(0L)); assertThat(results.size(), is(2)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("DE0005601215")); - assertThat(security.getWkn(), is("560121")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("Deutsche Bank AG KOS03/13.12.04 SAP 150")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + assertThat(results, hasItem(security( // + hasIsin("DE0009503540"), hasWkn("950354"), hasTicker(null), // + hasName("Citigroup Global Markets Dt. KOS03/21.12.04 Allianz 80"), // + hasCurrencyCode("EUR")))); // check buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.SELL)); - assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.SELL)); - - assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2004-03-10T00:00"))); - assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(300))); - assertThat(entry.getSource(), is("Verkauf08.txt")); - assertNull(entry.getNote()); - - assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(136.85)))); - assertThat(entry.getPortfolioTransaction().getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(150.00)))); - 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.75 + 9.90 + 2.50)))); + assertThat(results, hasItem(sale( // + hasDate("2003-12-08T00:00"), hasShares(550.00), // + hasSource("Verkauf02.txt"), // + hasNote(null), // + hasAmount("EUR", 1086.72), hasGrossValue("EUR", 1100.00), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.88 + 9.90 + 2.50)))); } @Test - public void testWertpapierVerkauf09() + public void testWertpapierVerkauf03() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Verkauf09.txt"), errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Verkauf03.txt"), errors); assertThat(errors, empty()); - assertThat(results.size(), is(3)); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(1L)); + assertThat(countAccountTransactions(results), is(0L)); + assertThat(results.size(), is(2)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("DE0007472060")); - assertThat(security.getWkn(), is("747206")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("Wirecard AG Inhaber-Aktien o.N.")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + assertThat(results, hasItem(security( // + hasIsin("IE00B0M62Q58"), hasWkn("A0HGV0"), hasTicker(null), // + hasName("iShares PLC-MSCI Wo.UC.ETF DIS Registered Shares o.N."), // + hasCurrencyCode("EUR")))); // check buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.SELL)); - assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.SELL)); - - assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2020-08-25T14:34"))); - assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(3))); - assertThat(entry.getSource(), is("Verkauf09.txt")); - assertNull(entry.getNote()); - - assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(3.54)))); - assertThat(entry.getPortfolioTransaction().getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(3.54)))); - 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 fee transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(transaction.getType(), is(AccountTransaction.Type.FEES)); - - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2020-08-25T14:34"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(3))); - assertThat(entry.getSource(), is("Verkauf09.txt")); - assertNull(entry.getNote()); - - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(13.15)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(13.15)))); - 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(results, hasItem(sale( // + hasDate("2015-06-08T00:00"), hasShares(16.00), // + hasSource("Verkauf03.txt"), // + hasNote("Ord.-Nr.: 71871368321 / 001"), // + hasAmount("EUR", 535.52), hasGrossValue("EUR", 535.52), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); } @Test - public void testWertpapierVerkauf10() + public void testWertpapierVerkaufMitSteuerbehandlung01() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Verkauf10.txt"), errors); + List results = extractor + .extract(PDFInputFile.loadTestCase(getClass(), "VerkaufMitSteuerbehandlung01.txt"), errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(1L)); + assertThat(countAccountTransactions(results), is(0L)); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check security + assertThat(results, hasItem(security( // + hasIsin("DE000BAY0017"), hasWkn("BAY001"), hasTicker(null), // + hasName("Bayer AG Namens-Aktien o.N."), // + hasCurrencyCode("EUR")))); + + // check buy sell transaction + assertThat(results, hasItem(sale( // + hasDate("2020-02-06T20:06"), hasShares(8.00), // + hasSource("VerkaufMitSteuerbehandlung01.txt"), // + hasNote("Ord.-Nr.: 000117637940-001 | R.-Nr.: 508104401078D295"), // + hasAmount("EUR", 616.18), hasGrossValue("EUR", 626.08), // + hasTaxes("EUR", 0.00), hasFees("EUR", 9.90)))); + } + + @Test + public void testWertpapierVerkaufMitSteuerbehandlung02() + { + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor + .extract(PDFInputFile.loadTestCase(getClass(), "VerkaufMitSteuerbehandlung02.txt"), errors); + + assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(1L)); + assertThat(countAccountTransactions(results), is(0L)); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check security + assertThat(results, hasItem(security( // + hasIsin("LU0055631609"), hasWkn("974119"), hasTicker(null), // + hasName("BGF - World Gold Fund Act. Nom. A2 USD o.N."), // + hasCurrencyCode("EUR")))); + + // check buy sell transaction + assertThat(results, hasItem(sale( // + hasDate("2018-06-05T20:19"), hasShares(1.00), // + hasSource("VerkaufMitSteuerbehandlung02.txt"), // + hasNote("Ord.-Nr.: 000062293103-001 | R.-Nr.: 455380245510DC35"), // + hasAmount("EUR", 10.18), hasGrossValue("EUR", 22.98), // + hasTaxes("EUR", 0.00), hasFees("EUR", 2.90 + 9.90)))); + } + + @Test + public void testWertpapierVerkaufMitSteuerbehandlung03() + { + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor + .extract(PDFInputFile.loadTestCase(getClass(), "VerkaufMitSteuerbehandlung03.txt"), errors); + + assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(1L)); + assertThat(countAccountTransactions(results), is(0L)); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check security + assertThat(results, hasItem(security( // + hasIsin("IE00B0M62Q58"), hasWkn("A0HGV0"), hasTicker(null), // + hasName("iShares PLC-MSCI Wo.UC.ETF DIS Registered Shares o.N."), // + hasCurrencyCode("EUR")))); + + // check buy sell transaction + assertThat(results, hasItem(sale( // + hasDate("2015-07-17T11:28"), hasShares(1.00), // + hasSource("VerkaufMitSteuerbehandlung03.txt"), // + hasNote("Ord.-Nr.: 071915155121-001 | R.-Nr.: 364505682358DE85"), // + hasAmount("EUR", 23.34), hasGrossValue("EUR", 34.74), // + hasTaxes("EUR", 0.00), hasFees("EUR", 9.90 + 1.50)))); + } + + @Test + public void testWertpapierVerkaufMitSteuerbehandlung04() + { + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor + .extract(PDFInputFile.loadTestCase(getClass(), "VerkaufMitSteuerbehandlung04.txt"), errors); + + assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(1L)); + assertThat(countAccountTransactions(results), is(0L)); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check security + assertThat(results, hasItem(security( // + hasIsin("DE0005545503"), hasWkn("554550"), hasTicker(null), // + hasName("Drillisch AG Inhaber-Aktien o.N."), // + hasCurrencyCode("EUR")))); + + // check buy sell transaction + assertThat(results, hasItem(sale( // + hasDate("2016-09-12T10:28"), hasShares(21.00), // + hasSource("VerkaufMitSteuerbehandlung04.txt"), // + hasNote("Ord.-Nr.: 072368222219-001 | R.-Nr.: 400775538910DB25"), // + hasAmount("EUR", 832.69), hasGrossValue("EUR", 849.66), // + hasTaxes("EUR", 4.88 + 0.26 + 0.43), hasFees("EUR", 9.90 + 1.50)))); + } + + @Test + public void testWertpapierVerkaufMitSteuerbehandlung05() + { + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor + .extract(PDFInputFile.loadTestCase(getClass(), "VerkaufMitSteuerbehandlung05.txt"), errors); + + assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(1L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(3)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check security + assertThat(results, hasItem(security( // + hasIsin("DE0007472060"), hasWkn("747206"), hasTicker(null), // + hasName("Wirecard AG Inhaber-Aktien o.N."), // + hasCurrencyCode("EUR")))); + + // check buy sell transaction + assertThat(results, hasItem(sale( // + hasDate("2020-08-25T14:34"), hasShares(3.00), // + hasSource("VerkaufMitSteuerbehandlung05.txt"), // + hasNote("Ord.-Nr.: 123-123 | R.-Nr.: XXXXXXXXXXXXXXXX"), // + hasAmount("EUR", 3.54), hasGrossValue("EUR", 3.54), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); + + // check fee transaction + assertThat(results, hasItem(fee( // + hasDate("2020-08-25T14:34"), hasShares(3.00), // + hasSource("VerkaufMitSteuerbehandlung05.txt"), // + hasNote("Ord.-Nr.: 123-123 | R.-Nr.: XXXXXXXXXXXXXXXX"), // + hasAmount("EUR", 9.90 + 2.50), hasGrossValue("EUR", 9.90 + 2.50), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); + } + + @Test + public void testWertpapierVerkaufMitSteuerbehandlung06() + { + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor + .extract(PDFInputFile.loadTestCase(getClass(), "VerkaufMitSteuerbehandlung06.txt"), errors); + + assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(1L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(3)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check security + assertThat(results, hasItem(security( // + hasIsin("DE0007472060"), hasWkn("747206"), hasTicker(null), // + hasName("Wirecard AG Inhaber-Aktien o.N."), // + hasCurrencyCode("EUR")))); + + // check buy sell transaction + assertThat(results, hasItem(sale( // + hasDate("2020-08-25T14:34"), hasShares(3.00), // + hasSource("VerkaufMitSteuerbehandlung06.txt"), // + hasNote("Ord.-Nr.: 123-123 | R.-Nr.: XXXXXXXXXXXXXXXX"), // + hasAmount("EUR", 3.54), hasGrossValue("EUR", 3.54), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); + + // check fee transaction + assertThat(results, hasItem(fee( // + hasDate("2020-08-25T14:34"), hasShares(3.00), // + hasSource("VerkaufMitSteuerbehandlung06.txt"), // + hasNote("Ord.-Nr.: 123-123 | R.-Nr.: XXXXXXXXXXXXXXXX"), // + hasAmount("EUR", 9.90 + 2.50 + 0.75), hasGrossValue("EUR", 9.90 + 2.50 + 0.75), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); + } + + @Test + public void testWertpapierVerkaufMitSteuerbehandlung07() + { + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor + .extract(PDFInputFile.loadTestCase(getClass(), "VerkaufMitSteuerbehandlung07.txt"), errors); + + assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(1L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(3)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check security + assertThat(results, hasItem(security( // + hasIsin("US86771W1053"), hasWkn("A14V1T"), hasTicker(null), // + hasName("Sunrun Inc. Registered Shares DL -,0001"), // + hasCurrencyCode("USD")))); + + // check buy sell transaction + assertThat(results, hasItem(sale( // + hasDate("2020-12-15T20:37"), hasShares(25.00), // + hasSource("VerkaufMitSteuerbehandlung07.txt"), // + hasNote("Ord.-Nr.: 000184824005-001 | R.-Nr.: 535214798006DA55"), // + hasAmount("EUR", 1263.05), hasGrossValue("EUR", 1287.32), // + hasForexGrossValue("USD", 1573.75), // + hasTaxes("EUR", 0.00), hasFees("EUR", 12.90 + (13.90 / 1.222500))))); + + // check tax refund transaction + assertThat(results, hasItem(taxRefund( // + hasDate("2020-12-15T00:00"), hasShares(25.00), // + hasSource("VerkaufMitSteuerbehandlung07.txt"), // + hasNote("Ref.-Nr.: 2GIG7N0VBSQ00112"), // + hasAmount("EUR", 9.47 + 0.52 + 0.85), hasGrossValue("EUR", 9.47 + 0.52 + 0.85), // + hasForexGrossValue("USD", 13.25), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); + } + + @Test + public void testWertpapierVerkaufMitSteuerbehandlung07WithSecurityInEUR() + { + Security security = new Security("Sunrun Inc. Registered Shares DL -,0001", CurrencyUnit.EUR); + security.setIsin("US86771W1053"); + security.setWkn("A14V1T"); + + Client client = new Client(); + client.addSecurity(security); + + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(client); + + List errors = new ArrayList<>(); + + List results = extractor + .extract(PDFInputFile.loadTestCase(getClass(), "VerkaufMitSteuerbehandlung07.txt"), errors); + + assertThat(errors, empty()); + assertThat(countSecurities(results), is(0L)); + assertThat(countBuySell(results), is(1L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check buy sell transaction + assertThat(results, hasItem(sale( // + hasDate("2020-12-15T20:37"), hasShares(25.00), // + hasSource("VerkaufMitSteuerbehandlung07.txt"), // + hasNote("Ord.-Nr.: 000184824005-001 | R.-Nr.: 535214798006DA55"), // + hasAmount("EUR", 1263.05), hasGrossValue("EUR", 1287.32), // + hasTaxes("EUR", 0.00), hasFees("EUR", 12.90 + (13.90 / 1.222500))))); + + // check tax refund transaction + assertThat(results, hasItem(taxRefund( // + hasDate("2020-12-15T00:00"), hasShares(25.00), // + hasSource("VerkaufMitSteuerbehandlung07.txt"), // + hasNote("Ref.-Nr.: 2GIG7N0VBSQ00112"), // + hasAmount("EUR", 9.47 + 0.52 + 0.85), hasGrossValue("EUR", 9.47 + 0.52 + 0.85), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); + } + + @Test + public void testWertpapierVerkaufMitSteuerbehandlung08() + { + // This is a manipulated PDF debug to check if a fee refund works with a + // security with foreign currency, as well as with fees in foreign + // currency. If there are problems here, this can also be deleted and + // replaced with a correct PDF debug. + + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor + .extract(PDFInputFile.loadTestCase(getClass(), "VerkaufMitSteuerbehandlung08.txt"), errors); + + assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(1L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(3)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check security + assertThat(results, hasItem(security( // + hasIsin("DE0007472060"), hasWkn("747206"), hasTicker(null), // + hasName("Wirecard AG Inhaber-Aktien o.N."), // + hasCurrencyCode("USD")))); + + // check buy sell transaction + assertThat(results, hasItem(sale( // + hasDate("2020-08-25T14:34"), hasShares(3.00), // + hasSource("VerkaufMitSteuerbehandlung08.txt"), // + hasNote("Ord.-Nr.: 123-123 | R.-Nr.: XXXXXXXXXXXXXXXX"), // + hasAmount("EUR", (2.90 / 1.222500)), hasGrossValue("EUR", (2.90 / 1.222500)), // + hasForexGrossValue("USD", 2.90), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); + + // check fee transaction + assertThat(results, hasItem(fee( // + hasDate("2020-08-25T14:34"), hasShares(3.00), // + hasSource("VerkaufMitSteuerbehandlung08.txt"), // + hasNote("Ord.-Nr.: 123-123 | R.-Nr.: XXXXXXXXXXXXXXXX"), // + hasAmount("EUR", (2.90 / 1.222500) + 8.23), hasGrossValue("EUR", (2.90 / 1.222500) + 8.23), // + hasForexGrossValue("USD", 2.90 + (8.23 * 1.222500)), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); + } + + @Test + public void testWertpapierVerkaufMitSteuerbehandlung08WithSecurityInEUR() + { + // This is a manipulated PDF debug to check if a fee refund works with a + // security with foreign currency, as well as with fees in foreign + // currency. If there are problems here, this can also be deleted and + // replaced with a correct PDF debug. + + Security security = new Security("Wirecard AG Inhaber-Aktien o.N.", CurrencyUnit.EUR); + security.setIsin("DE0007472060"); + security.setWkn("747206"); + + Client client = new Client(); + client.addSecurity(security); + + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(client); + + List errors = new ArrayList<>(); + + List results = extractor + .extract(PDFInputFile.loadTestCase(getClass(), "VerkaufMitSteuerbehandlung08.txt"), errors); + + assertThat(errors, empty()); + assertThat(countSecurities(results), is(0L)); + assertThat(countBuySell(results), is(1L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check buy sell transaction + assertThat(results, hasItem(sale( // + hasDate("2020-08-25T14:34"), hasShares(3.00), // + hasSource("VerkaufMitSteuerbehandlung08.txt"), // + hasNote("Ord.-Nr.: 123-123 | R.-Nr.: XXXXXXXXXXXXXXXX"), // + hasAmount("EUR", (2.90 / 1.222500)), hasGrossValue("EUR", (2.90 / 1.222500)), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); + + // check fee transaction + assertThat(results, hasItem(fee( // + hasDate("2020-08-25T14:34"), hasShares(3.00), // + hasSource("VerkaufMitSteuerbehandlung08.txt"), // + hasNote("Ord.-Nr.: 123-123 | R.-Nr.: XXXXXXXXXXXXXXXX"), // + hasAmount("EUR", (2.90 / 1.222500) + 8.23), hasGrossValue("EUR", (2.90 / 1.222500) + 8.23), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); + } + + @Test + public void testWertpapierVerkaufMitSteuerbehandlung09() + { + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor + .extract(PDFInputFile.loadTestCase(getClass(), "VerkaufMitSteuerbehandlung09.txt"), errors); + + assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(1L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(3)); new AssertImportActions().check(results, CurrencyUnit.USD); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("US4405431069")); - assertThat(security.getWkn(), is("A0B9UT")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("Hornbeck Offshore Svcs Inc. Registered Shares DL -,01")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.USD)); + assertThat(results, hasItem(security( // + hasIsin("US4405431069"), hasWkn("A0B9UT"), hasTicker(null), // + hasName("Hornbeck Offshore Svcs Inc. Registered Shares DL -,01"), // + hasCurrencyCode("USD")))); + + // check buy sell transaction + assertThat(results, hasItem(sale( // + hasDate("2016-06-13T00:00"), hasShares(1300.00), // + hasSource("VerkaufMitSteuerbehandlung09.txt"), // + hasNote("Ord.-Nr.: 111111111111 | R.-Nr.: 111111111111A011"), // + hasAmount("USD", 11958.85), hasGrossValue("USD", 12012.00), // + hasTaxes("USD", 0.00), hasFees("USD", 38.89 + 14.26)))); + + // check tax refund transaction + assertThat(results, hasItem(taxRefund( // + hasDate("2016-06-13T00:00"), hasShares(1300.00), // + hasSource("VerkaufMitSteuerbehandlung09.txt"), // + hasNote("Ref.-Nr.: 11IAAA1A11XA111A"), // + hasAmount("USD", 3999.37), hasGrossValue("USD", 3999.37), // + hasTaxes("USD", 0.00), hasFees("USD", 0.00)))); + } + + @Test + public void testWertpapierVerkaufMitSteuerbehandlung10() + { + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor + .extract(PDFInputFile.loadTestCase(getClass(), "VerkaufMitSteuerbehandlung10.txt"), errors); + + assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(1L)); + assertThat(countAccountTransactions(results), is(0L)); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check security + assertThat(results, hasItem(security( // + hasIsin("FR0000121014"), hasWkn("853292"), hasTicker(null), // + hasName("LVMH Moët Henn. L. Vuitton SE Actions Port. (C.R.) EO 0,3"), // + hasCurrencyCode("EUR")))); + + // check buy sell transaction + assertThat(results, hasItem(sale( // + hasDate("2022-08-11T17:27"), hasShares(20.00), // + hasSource("VerkaufMitSteuerbehandlung10.txt"), // + hasNote("Ord.-Nr.: 123-001 | R.-Nr.: 123"), // + hasAmount("EUR", 13249.46), hasGrossValue("EUR", 13886.00), // + hasTaxes("EUR", 551.67 + 30.34 + 44.13), hasFees("EUR", 7.90 + 2.50)))); + } + + @Test + public void testWertpapierVerkaufMitSteuerbehandlung11() + { + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor + .extract(PDFInputFile.loadTestCase(getClass(), "VerkaufMitSteuerbehandlung11.txt"), errors); + + assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(1L)); + assertThat(countAccountTransactions(results), is(0L)); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check security + assertThat(results, hasItem(security( // + hasIsin("US0231351067"), hasWkn("906866"), hasTicker(null), // + hasName("Amazon.com Inc. Registered Shares DL -,01"), // + hasCurrencyCode("EUR")))); + + // check buy sell transaction + assertThat(results, hasItem(sale( // + hasDate("2023-06-05T00:00"), hasShares(0.788), // + hasSource("VerkaufMitSteuerbehandlung11.txt"), // + hasNote("Ord.-Nr.: 156003283640 | R.-Nr.: 613071635311DDB5"), // + hasAmount("EUR", 83.42), hasGrossValue("EUR", 91.83), // + hasTaxes("EUR", 7.98 + 0.43), hasFees("EUR", 0.00)))); + } + + @Test + public void testWertpapierVerkaufMitSteuerbehandlung12() + { + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor + .extract(PDFInputFile.loadTestCase(getClass(), "VerkaufMitSteuerbehandlung12.txt"), errors); + + assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(1L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(3)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check security + assertThat(results, hasItem(security( // + hasIsin("DE000BAY0017"), hasWkn("BAY001"), hasTicker(null), // + hasName("Bayer AG Namens-Aktien o.N."), // + hasCurrencyCode("EUR")))); + + // check buy sell transaction + assertThat(results, hasItem(sale( // + hasDate("2021-07-12T00:00"), hasShares(0.329), // + hasSource("VerkaufMitSteuerbehandlung12.txt"), // + hasNote("Ord.-Nr.: 117113463595 | R.-Nr.: 900515157905fwH2"), // + hasAmount("EUR", 16.54), hasGrossValue("EUR", 16.54), // + hasTaxes("EUR", 0.0), hasFees("EUR", 0.00)))); + + // check tax refund transaction + assertThat(results, hasItem(taxRefund( // + hasDate("2021-07-12T00:00"), hasShares(0.329), // + hasSource("VerkaufMitSteuerbehandlung12.txt"), // + hasNote("Ref.-Nr.: 0QIH75Q77DT000PI"), // + hasAmount("EUR", 2.03 + 0.11), hasGrossValue("EUR", 2.03 + 0.11), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); + } + + @Test + public void testWertpapierVerkaufMitSteuerbehandlung13() + { + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor + .extract(PDFInputFile.loadTestCase(getClass(), "VerkaufMitSteuerbehandlung13.txt"), errors); + + assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(1L)); + assertThat(countAccountTransactions(results), is(0L)); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check security + assertThat(results, hasItem(security( // + hasIsin("US38259P5089"), hasWkn("A0B7FY"), hasTicker(null), // + hasName("Google Inc. Reg. Shares Class A DL -,001"), // + hasCurrencyCode("EUR")))); + + // check buy sell transaction + assertThat(results, hasItem(sale( // + hasDate("2013-05-15T12:34"), hasShares(2.00), // + hasSource("VerkaufMitSteuerbehandlung13.txt"), // + hasNote("Ord.-Nr.: 071132136214-001 | R.-Nr.: 295713531330DE85"), // + hasAmount("EUR", 1366.60), hasGrossValue("EUR", 1378.00), // + hasTaxes("EUR", 0.0), hasFees("EUR", 9.90 + 1.50)))); + } + + @Test + public void testWertpapierVerkaufSteuerbehandlung01() + { + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "VerkaufSteuerbehandlung01.txt"), + errors); + + assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check security + assertThat(results, hasItem(security( // + hasIsin("US38259P7069"), hasWkn("A110NH"), hasTicker(null), // + hasName("GOOGLE INC.C DL-,001"), // + hasCurrencyCode("EUR")))); + + // check cancellation transaction + assertThat(results, hasItem(withFailureMessage( // + Messages.MsgErrorTransactionTypeNotSupported, // + taxes( // + hasDate("2015-05-05T00:00"), hasShares(0.049), // + hasSource("VerkaufSteuerbehandlung01.txt"), // + hasNote(null), // + hasAmount("EUR", 0.00), hasGrossValue("EUR", 0.00), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))))); + } + + @Test + public void testDividende01() + { + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende01.txt"), errors); + + assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check security + assertThat(results, hasItem(security( // + hasIsin("US7427181091"), hasWkn("852062"), hasTicker(null), // + hasName("P r oc t e r & G a m b l e C o ., T he R e gi st er ed S ha r e s o .N ."), // + hasCurrencyCode("USD")))); + + // check dividends transaction + assertThat(results, hasItem(dividend( // + hasDate("2018-02-19T00:00"), hasShares(0.316), // + hasSource("Dividende01.txt"), // + hasNote("Ref.-Nr.: 0SID3MHIVFT000ZN | Quartalsdividende"), // + hasAmount("EUR", 0.17), hasGrossValue("EUR", 0.17), // + hasForexGrossValue("USD", 0.22), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); + } + + @Test + public void testDividende01WithSecurityInEUR() + { + Security security = new Security("P r oc t e r & G a m b l e C o ., T he R e gi st er ed S ha r e s o .N .", + CurrencyUnit.EUR); + security.setIsin("US7427181091"); + security.setWkn("852062"); + + Client client = new Client(); + client.addSecurity(security); + + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(client); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende01.txt"), errors); + + assertThat(errors, empty()); + assertThat(countSecurities(results), is(0L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(1)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check dividends transaction + assertThat(results, hasItem(dividend( // + hasDate("2018-02-19T00:00"), hasShares(0.316), // + hasSource("Dividende01.txt"), // + hasNote("Ref.-Nr.: 0SID3MHIVFT000ZN | Quartalsdividende"), // + hasAmount("EUR", 0.17), hasGrossValue("EUR", 0.17), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00), // + check(tx -> { + CheckCurrenciesAction c = new CheckCurrenciesAction(); + Account account = new Account(); + account.setCurrencyCode(CurrencyUnit.EUR); + Status s = c.process((AccountTransaction) tx, account); + assertThat(s, is(Status.OK_STATUS)); + })))); + } + + @Test + public void testDividende02() + { + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende02.txt"), errors); + + assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check security + assertThat(results, hasItem(security( // + hasIsin("NL0000388619"), hasWkn("A0JMQ9"), hasTicker(null), // + hasName("U n i l ev e r N. V . Aa nd e l e n o p n aa m E O -, 16"), // + hasCurrencyCode("EUR")))); + + // check dividends transaction + assertThat(results, hasItem(dividend( // + hasDate("2020-06-04T00:00"), hasShares(13.944), // + hasSource("Dividende02.txt"), // + hasNote("Ref.-Nr.: 1SIFUSL13ZS0014W | Quartalsdividende"), // + hasAmount("EUR", 4.86 + 0.86), hasGrossValue("EUR", 4.86 + 0.86), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); + } + + @Test + public void testDividende03() + { + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende03.txt"), errors); + + assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check security + assertThat(results, hasItem(security( // + hasIsin("US7960502018"), hasWkn("881823"), hasTicker(null), // + hasName("S am su n g El e ct r on i c s Co . Lt d. R. S h s ( N V ) Pf d( GD R 14 4 A) 1 / 2 S W5 0 0 0"), // + hasCurrencyCode("USD")))); + + // check dividends transaction + assertThat(results, hasItem(dividend( // + hasDate("2013-04-24T00:00"), hasShares(4.00), // + hasSource("Dividende03.txt"), // + hasNote("Ref.-Nr.: 0SI6UK467PE001G6 | Zwischendividende"), // + hasAmount("EUR", 10.16), hasGrossValue("EUR", 10.22), // + hasForexGrossValue("USD", 13.36), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.06)))); + } + + @Test + public void testDividende03WithSecurityInEUR() + { + Security security = new Security( + "S am su n g El e ct r on i c s Co . Lt d. R. S h s ( N V ) Pf d( GD R 14 4 A) 1 / 2 S W5 0 0 0", + CurrencyUnit.EUR); + security.setIsin("US7960502018"); + security.setWkn("881823"); + + Client client = new Client(); + client.addSecurity(security); + + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(client); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende03.txt"), errors); + + assertThat(errors, empty()); + assertThat(countSecurities(results), is(0L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(1)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check dividends transaction + assertThat(results, hasItem(dividend( // + hasDate("2013-04-24T00:00"), hasShares(4.00), // + hasSource("Dividende03.txt"), // + hasNote("Ref.-Nr.: 0SI6UK467PE001G6 | Zwischendividende"), // + hasAmount("EUR", 10.16), hasGrossValue("EUR", 10.22), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.06), // + check(tx -> { + CheckCurrenciesAction c = new CheckCurrenciesAction(); + Account account = new Account(); + account.setCurrencyCode(CurrencyUnit.EUR); + Status s = c.process((AccountTransaction) tx, account); + assertThat(s, is(Status.OK_STATUS)); + })))); + } + + @Test + public void testDividende04() + { + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende04.txt"), errors); + + assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check security + assertThat(results, hasItem(security( // + hasIsin("US47215P1066"), hasWkn("A112ST"), hasTicker(null), // + hasName("J D. co m I n c. R .S hs C l. A ( S p .A D R s ) /1 DL - , 0 0 0 02"), // + hasCurrencyCode("USD")))); + + // check dividends transaction + assertThat(results, hasItem(dividend( // + hasDate("2023-05-08T00:00"), hasShares(18.102), // + hasSource("Dividende04.txt"), // + hasNote("Ref.-Nr.: 0KIJMJQ59DS0008I"), // + hasAmount("EUR", 9.79), hasGrossValue("EUR", 10.11), // + hasForexGrossValue("USD", 11.22), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.32)))); + } + + @Test + public void testDividende04WithSecurityInEUR() + { + Security security = new Security("J D. co m I n c. R .S hs C l. A ( S p .A D R s ) /1 DL - , 0 0 0 02", + CurrencyUnit.EUR); + security.setIsin("US47215P1066"); + security.setWkn("A112ST"); + + Client client = new Client(); + client.addSecurity(security); + + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(client); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende04.txt"), errors); + + assertThat(errors, empty()); + assertThat(countSecurities(results), is(0L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(1)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check dividends transaction + assertThat(results, hasItem(dividend( // + hasDate("2023-05-08T00:00"), hasShares(18.102), // + hasSource("Dividende04.txt"), // + hasNote("Ref.-Nr.: 0KIJMJQ59DS0008I"), // + hasAmount("EUR", 9.79), hasGrossValue("EUR", 10.11), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.32), // + check(tx -> { + CheckCurrenciesAction c = new CheckCurrenciesAction(); + Account account = new Account(); + account.setCurrencyCode(CurrencyUnit.EUR); + Status s = c.process((AccountTransaction) tx, account); + assertThat(s, is(Status.OK_STATUS)); + })))); + } + + @Test + public void testDividende05() + { + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende05.txt"), errors); + + assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check security + assertThat(results, hasItem(security( // + hasIsin("GB00B10RZP78"), hasWkn("A0JNE2"), hasTicker(null), // + hasName("U ni l e ve r P LC R e gi s t er e d Sh ar e s LS - , 0 31 1 11"), // + hasCurrencyCode("GBP")))); + + // check dividends transaction + assertThat(results, hasItem(dividend( // + hasDate("2023-03-23T00:00"), hasShares(24.334), // + hasSource("Dividende05.txt"), // + hasNote("Ref.-Nr.: 1EIJJKJZODD001WS | Schlussdividende"), // + hasAmount("EUR", 10.58), hasGrossValue("EUR", 10.58), // + hasForexGrossValue("GBP", 9.28), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); + } + + @Test + public void testDividende05WithSecurityInEUR() + { + Security security = new Security("U ni l e ve r P LC R e gi s t er e d Sh ar e s LS - , 0 31 1 11", + CurrencyUnit.EUR); + security.setIsin("GB00B10RZP78"); + security.setWkn("A0JNE2"); + + Client client = new Client(); + client.addSecurity(security); + + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(client); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende05.txt"), errors); + + assertThat(errors, empty()); + assertThat(countSecurities(results), is(0L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(1)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check dividends transaction + assertThat(results, hasItem(dividend( // + hasDate("2023-03-23T00:00"), hasShares(24.334), // + hasSource("Dividende05.txt"), // + hasNote("Ref.-Nr.: 1EIJJKJZODD001WS | Schlussdividende"), // + hasAmount("EUR", 10.58), hasGrossValue("EUR", 10.58), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00), // + check(tx -> { + CheckCurrenciesAction c = new CheckCurrenciesAction(); + Account account = new Account(); + account.setCurrencyCode(CurrencyUnit.EUR); + Status s = c.process((AccountTransaction) tx, account); + assertThat(s, is(Status.OK_STATUS)); + })))); + } + + @Test + public void testDividende06() + { + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende06.txt"), errors); + + assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check security + assertThat(results, hasItem(security( // + hasIsin("IE00B0M62Q58"), hasWkn("A0HGV0"), hasTicker(null), // + hasName("i S ha r e s P L C - M SC I W o . U C . E T F D IS R eg i s t er e d S ha re s o .N ."), // + hasCurrencyCode("USD")))); - // check buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.SELL)); - assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.SELL)); - - assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2016-06-13T00:00"))); - assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(1300))); - assertThat(entry.getSource(), is("Verkauf10.txt")); - assertNull(entry.getNote()); - - assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), - is(Money.of(CurrencyUnit.USD, Values.Amount.factorize(11958.85)))); - assertThat(entry.getPortfolioTransaction().getGrossValue(), - is(Money.of(CurrencyUnit.USD, Values.Amount.factorize(12012.00)))); - assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.TAX), - is(Money.of(CurrencyUnit.USD, Values.Amount.factorize(0.00)))); - assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.FEE), - is(Money.of(CurrencyUnit.USD, Values.Amount.factorize(38.89 + 14.26)))); + // check dividends transaction + assertThat(results, hasItem(dividend( // + hasDate("2015-03-23T00:00"), hasShares(11.971), // + hasSource("Dividende06.txt"), // + hasNote("Ref.-Nr.: 06I9BZMXFEV000MG"), // + hasAmount("EUR", 1.05), hasGrossValue("EUR", 1.05), // + hasForexGrossValue("USD", 1.13), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); + } - // check tax refund transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); + @Test + public void testDividende06WithSecurityInEUR() + { + Security security = new Security( + "i S ha r e s P L C - M SC I W o . U C . E T F D IS R eg i s t er e d S ha re s o .N .", + CurrencyUnit.EUR); + security.setIsin("IE00B0M62Q58"); + security.setWkn("A0HGV0"); + + Client client = new Client(); + client.addSecurity(security); + + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(client); + + List errors = new ArrayList<>(); - assertThat(transaction.getType(), is(AccountTransaction.Type.TAX_REFUND)); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende06.txt"), errors); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2016-06-13T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(1300))); - assertThat(entry.getSource(), is("Verkauf10.txt")); - assertNull(entry.getNote()); + assertThat(errors, empty()); + assertThat(countSecurities(results), is(0L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(1)); + new AssertImportActions().check(results, CurrencyUnit.EUR); - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.USD, Values.Amount.factorize(3999.37)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.USD, Values.Amount.factorize(3999.37)))); - assertThat(transaction.getUnitSum(Unit.Type.TAX), - is(Money.of(CurrencyUnit.USD, Values.Amount.factorize(0.00)))); - assertThat(transaction.getUnitSum(Unit.Type.FEE), - is(Money.of(CurrencyUnit.USD, Values.Amount.factorize(0.00)))); + // check dividends transaction + assertThat(results, hasItem(dividend( // + hasDate("2015-03-23T00:00"), hasShares(11.971), // + hasSource("Dividende06.txt"), // + hasNote("Ref.-Nr.: 06I9BZMXFEV000MG"), // + hasAmount("EUR", 1.05), hasGrossValue("EUR", 1.05), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00), // + check(tx -> { + CheckCurrenciesAction c = new CheckCurrenciesAction(); + Account account = new Account(); + account.setCurrencyCode(CurrencyUnit.EUR); + Status s = c.process((AccountTransaction) tx, account); + assertThat(s, is(Status.OK_STATUS)); + })))); } @Test - public void testWertpapierUmtausch01() + public void testDividende07() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Umtausch01.txt"), errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende07.txt"), errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(2)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("US00845V3087")); - assertThat(security.getWkn(), is("A0ET5J")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("Agere Systems Inc. Registered Shares DL -,01")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + assertThat(results, hasItem(security( // + hasIsin("LU0099575291"), hasWkn("921801"), hasTicker(null), // + hasName("F i de l it y Fd s- Te l e c o mm u ni c. Fd . Re g .S h ar e s A (G l o b . Ce r t. ) o . N."), // + hasCurrencyCode("EUR")))); - // check buy sell transaction - BuySellEntry entry = (BuySellEntry) results.stream().filter(BuySellEntryItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSubject(); + // check dividends transaction + assertThat(results, hasItem(dividend( // + hasDate("2006-08-15T00:00"), hasShares(151.00), // + hasSource("Dividende07.txt"), // + hasNote(null), // + hasAmount("EUR", 3.02), hasGrossValue("EUR", 3.02), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); + } + + @Test + public void testDividende08() + { + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende08.txt"), errors); - assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.SELL)); - assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.SELL)); + assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); - assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2005-06-06T00:00"))); - assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(0.10))); - assertThat(entry.getSource(), is("Umtausch01.txt")); - assertNull(entry.getNote()); + // check security + assertThat(results, hasItem(security( // + hasIsin("DE000A0F5UH1"), hasWkn("A0F5UH"), hasTicker(null), // + hasName("iS h. S T . G l . S e l . Di v . 1 0 0 U .E T F D E I n h ab e r- A nt e il e"), // + hasCurrencyCode("EUR")))); - assertThat(entry.getPortfolioTransaction().getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.88)))); - assertThat(entry.getPortfolioTransaction().getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.88)))); - 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 dividends transaction + assertThat(results, hasItem(dividend( // + hasDate("2023-01-16T00:00"), hasShares(322.933), // + hasSource("Dividende08.txt"), // + hasNote("Ref.-Nr.: 1SIJF5FGYDZ000KM"), // + hasAmount("EUR", 115.86), hasGrossValue("EUR", 115.86), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); } @Test - public void testDividende01() + public void testSteuerbehandlungVonDividende08() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende01.txt"), errors); + List results = extractor + .extract(PDFInputFile.loadTestCase(getClass(), "SteuerbehandlungVonDividende08.txt"), errors); + + assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check security + assertThat(results, hasItem(security( // + hasIsin("DE000A0F5UH1"), hasWkn("A0F5UH"), hasTicker(null), // + hasName("IS.S.GL.SE.D.100 U.ETF A."), // + hasCurrencyCode("EUR")))); + + // check taxes transaction + assertThat(results, hasItem(taxes( // + hasDate("2023-01-16T00:00"), hasShares(322.933), // + hasSource("SteuerbehandlungVonDividende08.txt"), // + hasNote(null), // + hasAmount("EUR", 20.28 + 1.11), hasGrossValue("EUR", 20.28 + 1.11), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); + } + + @Test + public void testDividende08MitSteuerbehandlungVonDividende08() + { + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract( + PDFInputFile.loadTestCase(getClass(), "Dividende08.txt", "SteuerbehandlungVonDividende08.txt"), + errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(2)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("NL0000009355")); - assertThat(security.getWkn(), is("A0JMZB")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("U n il e ve r N . V . C e r t . v .A a n d e l e n E O -, 1 6")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + assertThat(results, hasItem(security( // + hasIsin("DE000A0F5UH1"), hasWkn("A0F5UH"), hasTicker(null), // + hasName("iS h. S T . G l . S e l . Di v . 1 0 0 U .E T F D E I n h ab e r- A nt e il e"), // + hasCurrencyCode("EUR")))); // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); + assertThat(results, hasItem(dividend( // + hasDate("2023-01-16T00:00"), hasShares(322.933), // + hasSource("Dividende08.txt; SteuerbehandlungVonDividende08.txt"), // + hasNote("Ref.-Nr.: 1SIJF5FGYDZ000KM"), // + hasAmount("EUR", 94.47), hasGrossValue("EUR", 115.86), // + hasTaxes("EUR", 20.28 + 1.11), hasFees("EUR", 0.00)))); + } + + @Test + public void testDividende08MitSteuerbehandlungVonDividende08_SourceFilesReversed() + { + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract( + PDFInputFile.loadTestCase(getClass(), "SteuerbehandlungVonDividende08.txt", "Dividende08.txt"), + errors); - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); + assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2010-12-15T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(1900))); - assertThat(transaction.getNote(), is("Zwischendividende")); - assertThat(transaction.getSource(), is("Dividende01.txt")); + // check security + assertThat(results, hasItem(security( // + hasIsin("DE000A0F5UH1"), hasWkn("A0F5UH"), hasTicker(null), // + hasName("IS.S.GL.SE.D.100 U.ETF A."), // + hasCurrencyCode("EUR")))); - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(335.92)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(395.20)))); - assertThat(transaction.getUnitSum(Unit.Type.TAX), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(59.28)))); - assertThat(transaction.getUnitSum(Unit.Type.FEE), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); + // check dividends transaction + assertThat(results, hasItem(dividend( // + hasDate("2023-01-16T00:00"), hasShares(322.933), // + hasSource("Dividende08.txt; SteuerbehandlungVonDividende08.txt"), // + hasNote("Ref.-Nr.: 1SIJF5FGYDZ000KM"), // + hasAmount("EUR", 94.47), hasGrossValue("EUR", 115.86), // + hasTaxes("EUR", 20.28 + 1.11), hasFees("EUR", 0.00)))); } @Test - public void testDividende02() + public void testDividende09() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende02.txt"), errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende09.txt"), errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(2)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("DE0008232125")); - assertThat(security.getWkn(), is("823212")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("De u t s c he L uf t h a n s a A G v i nk .N a me n s- A kt ie n o . N .")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + assertThat(results, hasItem(security( // + hasIsin("DE000A0F5UH1"), hasWkn("A0F5UH"), hasTicker(null), // + hasName("i S h . S T .G l .S e l. Di v .1 0 0 U. E TF D E In h a b e r- A n t ei l e"), // + hasCurrencyCode("EUR")))); // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); + assertThat(results, hasItem(dividend( // + hasDate("2018-04-16T00:00"), hasShares(165.933), // + hasSource("Dividende09.txt"), // + hasNote("Ref.-Nr.: 2IID7EPALHP000IV"), // + hasAmount("EUR", 15.63), hasGrossValue("EUR", 15.63), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); + } + + @Test + public void testSteuerbehandlungVonDividende09() + { + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); + + List errors = new ArrayList<>(); - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); + List results = extractor + .extract(PDFInputFile.loadTestCase(getClass(), "SteuerbehandlungVonDividende09.txt"), errors); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2009-04-27T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(3000))); - assertThat(transaction.getSource(), is("Dividende02.txt")); - assertNull(transaction.getNote()); + assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(1546.13)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2100.00)))); - assertThat(transaction.getUnitSum(Unit.Type.TAX), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(525.00 + 28.87)))); - assertThat(transaction.getUnitSum(Unit.Type.FEE), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); + // check security + assertThat(results, hasItem(security( // + hasIsin("DE000A0F5UH1"), hasWkn("A0F5UH"), hasTicker(null), // + hasName("IS.S.GL.SE.D.100 U.ETF A."), // + hasCurrencyCode("EUR")))); + + // check cancellation transaction + assertThat(results, hasItem(withFailureMessage( // + Messages.MsgErrorTransactionTypeNotSupported, // + taxes( // + hasDate("2018-04-16T00:00"), hasShares(165.933), // + hasSource("SteuerbehandlungVonDividende09.txt"), // + hasNote(null), // + hasAmount("EUR", 0.00), hasGrossValue("EUR", 0.00), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))))); } @Test - public void testDividende03() + public void testDividende09MitSteuerbehandlungVonDividende09() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende03.txt"), errors); + List results = extractor.extract( + PDFInputFile.loadTestCase(getClass(), "Dividende09.txt", "SteuerbehandlungVonDividende09.txt"), + errors); + + assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check security + assertThat(results, hasItem(security( // + hasIsin("DE000A0F5UH1"), hasWkn("A0F5UH"), hasTicker(null), // + hasName("i S h . S T .G l .S e l. Di v .1 0 0 U. E TF D E In h a b e r- A n t ei l e"), // + hasCurrencyCode("EUR")))); + + // check dividends transaction + assertThat(results, hasItem(dividend( // + hasDate("2018-04-16T00:00"), hasShares(165.933), // + hasSource("Dividende09.txt; SteuerbehandlungVonDividende09.txt"), // + hasNote("Ref.-Nr.: 2IID7EPALHP000IV"), // + hasAmount("EUR", 15.63), hasGrossValue("EUR", 15.63), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); + } + + @Test + public void testDividende09MitSteuerbehandlungVonDividende09_SourceFilesReversed() + { + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract( + PDFInputFile.loadTestCase(getClass(), "SteuerbehandlungVonDividende09.txt", "Dividende09.txt"), + errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(2)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("US1266501006")); - assertThat(security.getWkn(), is("859034")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("C V S He a lt h C or p . R e gi s t er e d S h a r e s DL -, 0 1")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.USD)); + assertThat(results, hasItem(security( // + hasIsin("DE000A0F5UH1"), hasWkn("A0F5UH"), hasTicker(null), // + hasName("IS.S.GL.SE.D.100 U.ETF A."), // + hasCurrencyCode("EUR")))); // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); + assertThat(results, hasItem(dividend( // + hasDate("2018-04-16T00:00"), hasShares(165.933), // + hasSource("Dividende09.txt; SteuerbehandlungVonDividende09.txt"), // + hasNote("Ref.-Nr.: 2IID7EPALHP000IV"), // + hasAmount("EUR", 15.63), hasGrossValue("EUR", 15.63), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); + } - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); + @Test + public void testDividende10() + { + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende10.txt"), errors); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2017-11-07T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(32))); - assertThat(transaction.getNote(), is("Quartalsdividende")); - assertThat(transaction.getSource(), is("Dividende03.txt")); + assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(11.65)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(13.70)))); - assertThat(transaction.getUnitSum(Unit.Type.TAX), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2.05)))); - assertThat(transaction.getUnitSum(Unit.Type.FEE), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); + // check security + assertThat(results, hasItem(security( // + hasIsin("DE000CN2VKP9"), hasWkn("CN2VKP"), hasTicker(null), // + hasName("Co m me r zb a nk A G AA L P R OT E C T 0 6 . 16 P AH 3"), // + hasCurrencyCode("EUR")))); - Unit grossValueUnit = transaction.getUnit(Unit.Type.GROSS_VALUE).orElseThrow(IllegalArgumentException::new); - assertThat(grossValueUnit.getForex(), is(Money.of(CurrencyUnit.USD, Values.Amount.factorize(16.00)))); + // check dividends transaction + assertThat(results, hasItem(dividend( // + hasDate("2016-06-23T00:00"), hasShares(10.00), // + hasSource("Dividende10.txt"), // + hasNote("Ref.-Nr.: 22IAS84ET6700189"), // + hasAmount("EUR", 54.08), hasGrossValue("EUR", 54.08), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); } @Test - public void testDividende03WithSecurityInEUR() + public void testDividende11() { - Security security = new Security("C V S He a lt h C or p . R e gi s t er e d S h a r e s DL -, 0 1", CurrencyUnit.EUR); - security.setIsin("US1266501006"); - security.setWkn("859034"); + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende11.txt"), errors); + + assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check security + assertThat(results, hasItem(security( // + hasIsin("US7427181091"), hasWkn("852062"), hasTicker(null), // + hasName("P r oc t e r & G a m b l e C o ., T he R e gi st er ed S ha r e s o .N ."), // + hasCurrencyCode("USD")))); + + // check dividends transaction + assertThat(results, hasItem(dividend( // + hasDate("2020-05-19T00:00"), hasShares(7.499), // + hasSource("Dividende11.txt"), // + hasNote("Ref.-Nr.: 0IIFTGGFCJV002JX | Quartalsdividende"), // + hasAmount("EUR", 5.47), hasGrossValue("EUR", 5.47), // + hasForexGrossValue("USD", 5.93), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); + } + + @Test + public void testDividende11WithSecurityInEUR() + { + Security security = new Security("P r oc t e r & G a m b l e C o ., T he R e gi st er ed S ha r e s o .N .", + CurrencyUnit.EUR); + security.setIsin("US7427181091"); + security.setWkn("852062"); Client client = new Client(); client.addSecurity(security); @@ -1796,90 +2566,104 @@ public void testDividende03WithSecurityInEUR() List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende03.txt"), errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende11.txt"), errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(0L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(1)); + new AssertImportActions().check(results, CurrencyUnit.EUR); // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); + assertThat(results, hasItem(dividend( // + hasDate("2020-05-19T00:00"), hasShares(7.499), // + hasSource("Dividende11.txt"), // + hasNote("Ref.-Nr.: 0IIFTGGFCJV002JX | Quartalsdividende"), // + hasAmount("EUR", 5.47), hasGrossValue("EUR", 5.47), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00), // + check(tx -> { + CheckCurrenciesAction c = new CheckCurrenciesAction(); + Account account = new Account(); + account.setCurrencyCode(CurrencyUnit.EUR); + Status s = c.process((AccountTransaction) tx, account); + assertThat(s, is(Status.OK_STATUS)); + })))); + } + + @Test + public void testSteuerbehandlungVonDividende11() + { + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); + List errors = new ArrayList<>(); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2017-11-07T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(32))); - assertThat(transaction.getNote(), is("Quartalsdividende")); - assertThat(transaction.getSource(), is("Dividende03.txt")); + List results = extractor + .extract(PDFInputFile.loadTestCase(getClass(), "SteuerbehandlungVonDividende11.txt"), errors); - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(11.65)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(13.70)))); - assertThat(transaction.getUnitSum(Unit.Type.TAX), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2.05)))); - assertThat(transaction.getUnitSum(Unit.Type.FEE), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); + assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); - CheckCurrenciesAction c = new CheckCurrenciesAction(); - Account account = new Account(); - account.setCurrencyCode(CurrencyUnit.EUR); - Status s = c.process(transaction, account); - assertThat(s, is(Status.OK_STATUS)); + // check security + assertThat(results, hasItem(security( // + hasIsin("US7427181091"), hasWkn("852062"), hasTicker(null), // + hasName("PROCTER GAMBLE"), // + hasCurrencyCode("EUR")))); + + // check taxes transaction + assertThat(results, hasItem(taxes( // + hasDate("2020-05-19T00:00"), hasShares(7.499), // + hasSource("SteuerbehandlungVonDividende11.txt"), // + hasNote(null), // + hasAmount("EUR", (5.47 - 4.65) + 0.58), hasGrossValue("EUR", (5.47 - 4.65) + 0.58), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); } @Test - public void testDividende04() + public void testDividende11MitSteuerbehandlungVonDividende11() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende04.txt"), errors); + List results = extractor.extract( + PDFInputFile.loadTestCase(getClass(), "Dividende11.txt", "SteuerbehandlungVonDividende11.txt"), + errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(2)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("US6516391066")); - assertThat(security.getWkn(), is("853823")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("N e w m o n t C o r p . Re g is t e r e d S h a r e s D L 1, 6 0")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.USD)); + assertThat(results, hasItem(security( // + hasIsin("US7427181091"), hasWkn("852062"), hasTicker(null), // + hasName("P r oc t e r & G a m b l e C o ., T he R e gi st er ed S ha r e s o .N ."), // + hasCurrencyCode("USD")))); // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); - - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2020-03-23T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(88))); - assertThat(transaction.getNote(), is("Quartalsdividende")); - assertThat(transaction.getSource(), is("Dividende04.txt")); - - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(9.71)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(11.43)))); - assertThat(transaction.getUnitSum(Unit.Type.TAX), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(1.85 / 1.078000)))); - assertThat(transaction.getUnitSum(Unit.Type.FEE), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); - - Unit grossValueUnit = transaction.getUnit(Unit.Type.GROSS_VALUE).orElseThrow(IllegalArgumentException::new); - assertThat(grossValueUnit.getForex(), is(Money.of(CurrencyUnit.USD, Values.Amount.factorize(12.32)))); + assertThat(results, hasItem(dividend( // + hasDate("2020-05-19T00:00"), hasShares(7.499), // + hasSource("Dividende11.txt; SteuerbehandlungVonDividende11.txt"), // + hasNote("Ref.-Nr.: 0IIFTGGFCJV002JX | Quartalsdividende"), // + hasAmount("EUR", 4.07), hasGrossValue("EUR", 5.47), // + hasForexGrossValue("USD", 5.93), // + hasTaxes("EUR", (5.47 - 4.65) + 0.58), hasFees("EUR", 0.00)))); } @Test - public void testDividende04WithSecurityInEUR() + public void testDividende11MitSteuerbehandlungVonDividende11WithSecurityInEUR() { - Security security = new Security("N e w m o n t C o r p . Re g is t e r e d S h a r e s D L 1, 6 0", CurrencyUnit.EUR); - security.setIsin("US6516391066"); - security.setWkn("853823"); + Security security = new Security("P r oc t e r & G a m b l e C o ., T he R e gi st er ed S ha r e s o .N .", + CurrencyUnit.EUR); + security.setIsin("US7427181091"); + security.setWkn("852062"); Client client = new Client(); client.addSecurity(security); @@ -1888,133 +2672,255 @@ public void testDividende04WithSecurityInEUR() List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende04.txt"), errors); + List results = extractor.extract( + PDFInputFile.loadTestCase(getClass(), "Dividende11.txt", "SteuerbehandlungVonDividende11.txt"), + errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(0L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(1)); + new AssertImportActions().check(results, CurrencyUnit.EUR); // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); + assertThat(results, hasItem(dividend( // + hasDate("2020-05-19T00:00"), hasShares(7.499), // + hasSource("Dividende11.txt; SteuerbehandlungVonDividende11.txt"), // + hasNote("Ref.-Nr.: 0IIFTGGFCJV002JX | Quartalsdividende"), // + hasAmount("EUR", 4.07), hasGrossValue("EUR", 5.47), // + hasTaxes("EUR", (5.47 - 4.65) + 0.58), hasFees("EUR", 0.00), // + check(tx -> { + CheckCurrenciesAction c = new CheckCurrenciesAction(); + Account account = new Account(); + account.setCurrencyCode(CurrencyUnit.EUR); + Status s = c.process((AccountTransaction) tx, account); + assertThat(s, is(Status.OK_STATUS)); + })))); + } + + @Test + public void testDividende11MitSteuerbehandlungVonDividende11_SourceFilesReversed() + { + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); + + List errors = new ArrayList<>(); - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); + List results = extractor.extract( + PDFInputFile.loadTestCase(getClass(), "SteuerbehandlungVonDividende11.txt", "Dividende11.txt"), + errors); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2020-03-23T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(88))); - assertThat(transaction.getNote(), is("Quartalsdividende")); - assertThat(transaction.getSource(), is("Dividende04.txt")); + assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(9.71)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(11.43)))); - assertThat(transaction.getUnitSum(Unit.Type.TAX), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(1.85 / 1.078000)))); - assertThat(transaction.getUnitSum(Unit.Type.FEE), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); + // check security + assertThat(results, hasItem(security( // + hasIsin("US7427181091"), hasWkn("852062"), hasTicker(null), // + hasName("PROCTER GAMBLE"), // + hasCurrencyCode("EUR")))); - CheckCurrenciesAction c = new CheckCurrenciesAction(); - Account account = new Account(); - account.setCurrencyCode(CurrencyUnit.EUR); - Status s = c.process(transaction, account); - assertThat(s, is(Status.OK_STATUS)); + // check dividends transaction + assertThat(results, hasItem(dividend( // + hasDate("2020-05-19T00:00"), hasShares(7.499), // + hasSource("Dividende11.txt; SteuerbehandlungVonDividende11.txt"), // + hasNote("Ref.-Nr.: 0IIFTGGFCJV002JX | Quartalsdividende"), // + hasAmount("EUR", 4.07), hasGrossValue("EUR", 5.47), // + hasTaxes("EUR", (5.47 - 4.65) + 0.58), hasFees("EUR", 0.00)))); } @Test - public void testDividende05() + public void testDividende11MitSteuerbehandlungVonDividende11WithSecurityInEUR_SourceFilesReversed() + { + Security security = new Security("P r oc t e r & G a m b l e C o ., T he R e gi st er ed S ha r e s o .N .", + CurrencyUnit.EUR); + security.setIsin("US7427181091"); + security.setWkn("852062"); + + Client client = new Client(); + client.addSecurity(security); + + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(client); + + List errors = new ArrayList<>(); + + List results = extractor.extract( + PDFInputFile.loadTestCase(getClass(), "SteuerbehandlungVonDividende11.txt", "Dividende11.txt"), + errors); + + assertThat(errors, empty()); + assertThat(countSecurities(results), is(0L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(1)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check dividends transaction + assertThat(results, hasItem(dividend( // + hasDate("2020-05-19T00:00"), hasShares(7.499), // + hasSource("Dividende11.txt; SteuerbehandlungVonDividende11.txt"), // + hasNote("Ref.-Nr.: 0IIFTGGFCJV002JX | Quartalsdividende"), // + hasAmount("EUR", 4.07), hasGrossValue("EUR", 5.47), // + hasTaxes("EUR", (5.47 - 4.65) + 0.58), hasFees("EUR", 0.00), // + check(tx -> { + CheckCurrenciesAction c = new CheckCurrenciesAction(); + Account account = new Account(); + account.setCurrencyCode(CurrencyUnit.EUR); + Status s = c.process((AccountTransaction) tx, account); + assertThat(s, is(Status.OK_STATUS)); + })))); + } + + @Test + public void testDividende12() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende05.txt"), errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende12.txt"), errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(2)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("DE000A9AXXX6")); - assertThat(security.getWkn(), is("A1XXXX")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("i S h a r e s I I I x x x x x x x x x x x x x x x E T F B ea re r S h a r e s ( D t. Z e r t .) o . N .")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + assertThat(results, hasItem(security( // + hasIsin("IE00B3RBWM25"), hasWkn("A1JX52"), hasTicker(null), // + hasName("V a n g u a r d F T S E Al l -W o rl d U . E TF R eg i st er e d S h ar e s U S D D is .o N"), // + hasCurrencyCode("USD")))); + + // check dividends transaction + assertThat(results, hasItem(dividend( // + hasDate("2021-07-02T00:00"), hasShares(84.000), // + hasSource("Dividende12.txt"), // + hasNote("Ref.-Nr.: 0OIH6DFZDB600A12"), // + hasAmount("EUR", 40.96), hasGrossValue("EUR", 40.96), // + hasForexGrossValue("USD", 48.82), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); + } + + @Test + public void testDividende12WithSecurityInEUR() + { + Security security = new Security( + "V a n g u a r d F T S E Al l -W o rl d U . E TF R eg i st er e d S h ar e s U S D D is .o N", + CurrencyUnit.EUR); + security.setIsin("IE00B3RBWM25"); + security.setWkn("A1JX52"); + + Client client = new Client(); + client.addSecurity(security); + + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(client); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende12.txt"), errors); + + assertThat(errors, empty()); + assertThat(countSecurities(results), is(0L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(1)); + new AssertImportActions().check(results, CurrencyUnit.EUR); // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); + assertThat(results, hasItem(dividend( // + hasDate("2021-07-02T00:00"), hasShares(84.000), // + hasSource("Dividende12.txt"), // + hasNote("Ref.-Nr.: 0OIH6DFZDB600A12"), // + hasAmount("EUR", 40.96), hasGrossValue("EUR", 40.96), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00), // + check(tx -> { + CheckCurrenciesAction c = new CheckCurrenciesAction(); + Account account = new Account(); + account.setCurrencyCode(CurrencyUnit.EUR); + Status s = c.process((AccountTransaction) tx, account); + assertThat(s, is(Status.OK_STATUS)); + })))); + } + + @Test + public void testSteuerbehandlungVonDividende12() + { + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); + + List errors = new ArrayList<>(); - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); + List results = extractor + .extract(PDFInputFile.loadTestCase(getClass(), "SteuerbehandlungVonDividende12.txt"), errors); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2011-01-08T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(14))); - assertThat(transaction.getSource(), is("Dividende05.txt")); - assertNull(transaction.getNote()); + assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(21.99)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(21.99)))); - 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)))); + // check security + assertThat(results, hasItem(security( // + hasIsin("IE00B3RBWM25"), hasWkn("A1JX52"), hasTicker(null), // + hasName("VANG.FTSE A.-WO.U.ETF DLD"), // + hasCurrencyCode("EUR")))); + + // check taxes transaction + assertThat(results, hasItem(taxes( // + hasDate("2021-07-02T00:00"), hasShares(84.000), // + hasSource("SteuerbehandlungVonDividende12.txt"), // + hasNote(null), // + hasAmount("EUR", 7.17 + 0.39), hasGrossValue("EUR", 7.17 + 0.39), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); } @Test - public void testDividende06() + public void testDividende12MitSteuerbehandlungVonDividende12() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende06.txt"), errors); + List results = extractor.extract( + PDFInputFile.loadTestCase(getClass(), "Dividende12.txt", "SteuerbehandlungVonDividende12.txt"), + errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(2)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("US0991991039")); - assertThat(security.getWkn(), is("123456")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("F oo B a r I n c . R eg is t er e d S h a r e s 1")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.USD)); + assertThat(results, hasItem(security( // + hasIsin("IE00B3RBWM25"), hasWkn("A1JX52"), hasTicker(null), // + hasName("V a n g u a r d F T S E Al l -W o rl d U . E TF R eg i st er e d S h ar e s U S D D is .o N"), // + hasCurrencyCode("USD")))); // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); - - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2011-01-09T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(40))); - assertThat(transaction.getNote(), is("Quartalsdividende")); - assertThat(transaction.getSource(), is("Dividende06.txt")); - - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(13.78)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize((22.60 / 1.034341))))); - assertThat(transaction.getUnitSum(Unit.Type.TAX), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize((22.60 / 1.034341) - 13.78)))); - assertThat(transaction.getUnitSum(Unit.Type.FEE), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); - - Unit grossValueUnit = transaction.getUnit(Unit.Type.GROSS_VALUE).orElseThrow(IllegalArgumentException::new); - assertThat(grossValueUnit.getForex(), is(Money.of(CurrencyUnit.USD, Values.Amount.factorize(22.60)))); + assertThat(results, hasItem(dividend( // + hasDate("2021-07-02T00:00"), hasShares(84.000), // + hasSource("Dividende12.txt; SteuerbehandlungVonDividende12.txt"), // + hasNote("Ref.-Nr.: 0OIH6DFZDB600A12"), // + hasAmount("EUR", 33.40), hasGrossValue("EUR", 40.96), // + hasForexGrossValue("USD", 48.82), // + hasTaxes("EUR", 7.17 + 0.39), hasFees("EUR", 0.00)))); } @Test - public void testDividende06WithSecurityInEUR() + public void testDividende12MitSteuerbehandlungVonDividende12WithSecurityInEUR() { - Security security = new Security("F oo B a r I n c . R eg is t er e d S h a r e s 1", CurrencyUnit.EUR); - security.setIsin("US0991991039"); - security.setWkn("123456"); + Security security = new Security( + "V a n g u a r d F T S E Al l -W o rl d U . E TF R eg i st er e d S h ar e s U S D D is .o N", + CurrencyUnit.EUR); + security.setIsin("IE00B3RBWM25"); + security.setWkn("A1JX52"); Client client = new Client(); client.addSecurity(security); @@ -2023,90 +2929,74 @@ public void testDividende06WithSecurityInEUR() List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende06.txt"), errors); + List results = extractor.extract( + PDFInputFile.loadTestCase(getClass(), "Dividende12.txt", "SteuerbehandlungVonDividende12.txt"), + errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(0L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(1)); + new AssertImportActions().check(results, CurrencyUnit.EUR); // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); - - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2011-01-09T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(40))); - assertThat(transaction.getNote(), is("Quartalsdividende")); - assertThat(transaction.getSource(), is("Dividende06.txt")); - - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(13.78)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize((22.60 / 1.034341))))); - assertThat(transaction.getUnitSum(Unit.Type.TAX), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize((22.60 / 1.034341) - 13.78)))); - assertThat(transaction.getUnitSum(Unit.Type.FEE), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); - - CheckCurrenciesAction c = new CheckCurrenciesAction(); - Account account = new Account(); - account.setCurrencyCode(CurrencyUnit.EUR); - Status s = c.process(transaction, account); - assertThat(s, is(Status.OK_STATUS)); + assertThat(results, hasItem(dividend( // + hasDate("2021-07-02T00:00"), hasShares(84.000), // + hasSource("Dividende12.txt; SteuerbehandlungVonDividende12.txt"), // + hasNote("Ref.-Nr.: 0OIH6DFZDB600A12"), // + hasAmount("EUR", 33.40), hasGrossValue("EUR", 40.96), // + hasTaxes("EUR", 7.17 + 0.39), hasFees("EUR", 0.00), // + check(tx -> { + CheckCurrenciesAction c = new CheckCurrenciesAction(); + Account account = new Account(); + account.setCurrencyCode(CurrencyUnit.EUR); + Status s = c.process((AccountTransaction) tx, account); + assertThat(s, is(Status.OK_STATUS)); + })))); } @Test - public void testDividende07() + public void testDividende12MitSteuerbehandlungVonDividende12_SourceFilesReversed() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende07.txt"), errors); + List results = extractor.extract( + PDFInputFile.loadTestCase(getClass(), "SteuerbehandlungVonDividende12.txt", "Dividende12.txt"), + errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(2)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("US74348T1025")); - assertThat(security.getWkn(), is("A0B746")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("P r os p e c t C ap i t a l C o r p. Re g i s t e r e d S h a r e s D L - , 00 1")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.USD)); + assertThat(results, hasItem(security( // + hasIsin("IE00B3RBWM25"), hasWkn("A1JX52"), hasTicker(null), // + hasName("VANG.FTSE A.-WO.U.ETF DLD"), // + hasCurrencyCode("EUR")))); // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); - - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2017-10-23T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(175))); - assertThat(transaction.getNote(), is("monatl. Dividende")); - assertThat(transaction.getSource(), is("Dividende07.txt")); - - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(7.52)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize((10.50 / 1.185400))))); - assertThat(transaction.getUnitSum(Unit.Type.TAX), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize((10.50 / 1.185400) - 7.52)))); - assertThat(transaction.getUnitSum(Unit.Type.FEE), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); - - Unit grossValueUnit = transaction.getUnit(Unit.Type.GROSS_VALUE).orElseThrow(IllegalArgumentException::new); - assertThat(grossValueUnit.getForex(), is(Money.of(CurrencyUnit.USD, Values.Amount.factorize(10.50)))); + assertThat(results, hasItem(dividend( // + hasDate("2021-07-02T00:00"), hasShares(84.000), // + hasSource("Dividende12.txt; SteuerbehandlungVonDividende12.txt"), // + hasNote("Ref.-Nr.: 0OIH6DFZDB600A12"), // + hasAmount("EUR", 33.40), hasGrossValue("EUR", 40.96), // + hasTaxes("EUR", 7.17 + 0.39), hasFees("EUR", 0.00)))); } @Test - public void testDividende07WithSecurityInEUR() + public void testDividende12MitSteuerbehandlungVonDividende12WithSecurityInEUR_SourceFilesReversed() { - Security security = new Security("P r os p e c t C ap i t a l C o r p. Re g i s t e r e d S h a r e s D L - , 00 1", CurrencyUnit.EUR); - security.setIsin("US74348T1025"); - security.setWkn("A0B746"); + Security security = new Security( + "V a n g u a r d F T S E Al l -W o rl d U . E TF R eg i st er e d S h ar e s U S D D is .o N", + CurrencyUnit.EUR); + security.setIsin("IE00B3RBWM25"); + security.setWkn("A1JX52"); Client client = new Client(); client.addSecurity(security); @@ -2115,133 +3005,203 @@ public void testDividende07WithSecurityInEUR() List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende07.txt"), errors); + List results = extractor.extract( + PDFInputFile.loadTestCase(getClass(), "SteuerbehandlungVonDividende12.txt", "Dividende12.txt"), + errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(0L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(1)); + new AssertImportActions().check(results, CurrencyUnit.EUR); // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); + assertThat(results, hasItem(dividend( // + hasDate("2021-07-02T00:00"), hasShares(84.000), // + hasSource("Dividende12.txt; SteuerbehandlungVonDividende12.txt"), // + hasNote("Ref.-Nr.: 0OIH6DFZDB600A12"), // + hasAmount("EUR", 33.40), hasGrossValue("EUR", 40.96), // + hasTaxes("EUR", 7.17 + 0.39), hasFees("EUR", 0.00), // + check(tx -> { + CheckCurrenciesAction c = new CheckCurrenciesAction(); + Account account = new Account(); + account.setCurrencyCode(CurrencyUnit.EUR); + Status s = c.process((AccountTransaction) tx, account); + assertThat(s, is(Status.OK_STATUS)); + })))); + } + + @Test + public void testDividende13() + { + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); + + List errors = new ArrayList<>(); - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende13.txt"), errors); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2017-10-23T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(175))); - assertThat(transaction.getNote(), is("monatl. Dividende")); - assertThat(transaction.getSource(), is("Dividende07.txt")); + assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(7.52)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize((10.50 / 1.185400))))); - assertThat(transaction.getUnitSum(Unit.Type.TAX), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize((10.50 / 1.185400) - 7.52)))); - assertThat(transaction.getUnitSum(Unit.Type.FEE), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); + // check security + assertThat(results, hasItem(security( // + hasIsin("DE0008404005"), hasWkn("840400"), hasTicker(null), // + hasName("Al l i an z S E v i n k . N am en s - Ak t ie n o . N ."), // + hasCurrencyCode("EUR")))); - CheckCurrenciesAction c = new CheckCurrenciesAction(); - Account account = new Account(); - account.setCurrencyCode(CurrencyUnit.EUR); - Status s = c.process(transaction, account); - assertThat(s, is(Status.OK_STATUS)); + // check dividends transaction + assertThat(results, hasItem(dividend( // + hasDate("2018-05-14T00:00"), hasShares(16.00), // + hasSource("Dividende13.txt"), // + hasNote("Ref.-Nr.: 1234567890"), // + hasAmount("EUR", 128.00), hasGrossValue("EUR", 128.00), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); } @Test - public void testDividende08() + public void testSteuerbehandlungVonDividende13() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende08.txt"), errors); + List results = extractor + .extract(PDFInputFile.loadTestCase(getClass(), "SteuerbehandlungVonDividende13.txt"), errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(2)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("IE00B9M6RS56")); - assertThat(security.getWkn(), is("A1W0MQ")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("i S hs VI - JP M D L EM B d E OH U . ET F D Re g i s t er ed S ha re s o .N .")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + assertThat(results, hasItem(security( // + hasIsin("DE0008404005"), hasWkn("840400"), hasTicker(null), // + hasName("ALLIANZ SE NA O.N."), // + hasCurrencyCode("EUR")))); + + // check cancellation transaction + assertThat(results, hasItem(withFailureMessage( // + Messages.MsgErrorTransactionTypeNotSupported, // + taxes( // + hasDate("2018-05-14T00:00"), hasShares(16.00), // + hasSource("SteuerbehandlungVonDividende13.txt"), // + hasNote(null), // + hasAmount("EUR", 0.00), hasGrossValue("EUR", 0.00), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))))); + } - // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); + @Test + public void testDividende13MitSteuerbehandlungVonDividende13() + { + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); + + List errors = new ArrayList<>(); - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); + List results = extractor.extract( + PDFInputFile.loadTestCase(getClass(), "Dividende13.txt", "SteuerbehandlungVonDividende13.txt"), + errors); + + assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2017-10-31T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(42))); - assertThat(transaction.getSource(), is("Dividende08.txt")); - assertNull(transaction.getNote()); + // check security + assertThat(results, hasItem(security( // + hasIsin("DE0008404005"), hasWkn("840400"), hasTicker(null), // + hasName("Al l i an z S E v i n k . N am en s - Ak t ie n o . N ."), // + hasCurrencyCode("EUR")))); - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(8.54)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(8.54)))); - 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)))); + // check dividends transaction + assertThat(results, hasItem(dividend( // + hasDate("2018-05-14T00:00"), hasShares(16.00), // + hasSource("Dividende13.txt; SteuerbehandlungVonDividende13.txt"), // + hasNote("Ref.-Nr.: 1234567890"), // + hasAmount("EUR", 128.00), hasGrossValue("EUR", 128.00), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); } @Test - public void testDividende09() + public void testDividende13MitSteuerbehandlungVonDividende13_SourceFilesReversed() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende09.txt"), errors); + List results = extractor.extract( + PDFInputFile.loadTestCase(getClass(), "SteuerbehandlungVonDividende13.txt", "Dividende13.txt"), + errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(2)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("US0378331005")); - assertThat(security.getWkn(), is("865985")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("A p pl e I nc . R e gi st e r ed Sh a re s o . N.")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.USD)); + assertThat(results, hasItem(security( // + hasIsin("DE0008404005"), hasWkn("840400"), hasTicker(null), // + hasName("ALLIANZ SE NA O.N."), // + hasCurrencyCode("EUR")))); // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); + assertThat(results, hasItem(dividend( // + hasDate("2018-05-14T00:00"), hasShares(16.00), // + hasSource("Dividende13.txt; SteuerbehandlungVonDividende13.txt"), // + hasNote("Ref.-Nr.: 1234567890"), // + hasAmount("EUR", 128.00), hasGrossValue("EUR", 128.00), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); + } + + @Test + public void testDividende14() + { + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende14.txt"), errors); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2017-11-20T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(9.914))); - assertThat(transaction.getNote(), is("Quartalsdividende")); - assertThat(transaction.getSource(), is("Dividende09.txt")); + assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(4.50)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(5.30)))); - assertThat(transaction.getUnitSum(Unit.Type.TAX), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.94 / 1.179400)))); - assertThat(transaction.getUnitSum(Unit.Type.FEE), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); + // check security + assertThat(results, hasItem(security( // + hasIsin("US1266501006"), hasWkn("859034"), hasTicker(null), // + hasName("C VS H e a lt h Co r p. R eg is te r ed S h a re s D L -, 0 1"), // + hasCurrencyCode("USD")))); - Unit grossValueUnit = transaction.getUnit(Unit.Type.GROSS_VALUE).orElseThrow(IllegalArgumentException::new); - assertThat(grossValueUnit.getForex(), is(Money.of(CurrencyUnit.USD, Values.Amount.factorize(6.25)))); + // check dividends transaction + assertThat(results, hasItem(dividend( // + hasDate("2020-11-04T00:00"), hasShares(32.000), // + hasSource("Dividende14.txt"), // + hasNote("Ref.-Nr.: XXX1234567899ABC | Quartalsdividende"), // + hasAmount("EUR", 13.69), hasGrossValue("EUR", 13.69), // + hasForexGrossValue("USD", 16.00), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); } @Test - public void testDividende09WithSecurityInEUR() + public void testDividende14WithSecurityInEUR() { - Security security = new Security("A p pl e I nc . R e gi st e r ed Sh a re s o . N.", CurrencyUnit.EUR); - security.setIsin("US0378331005"); - security.setWkn("865985"); + Security security = new Security("C VS H e a lt h Co r p. R eg is te r ed S h a re s D L -, 0 1", + CurrencyUnit.EUR); + security.setIsin("US1266501006"); + security.setWkn("859034"); Client client = new Client(); client.addSecurity(security); @@ -2250,217 +3210,178 @@ public void testDividende09WithSecurityInEUR() List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende09.txt"), errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende14.txt"), errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(0L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(1)); + new AssertImportActions().check(results, CurrencyUnit.EUR); // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); - - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2017-11-20T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(9.914))); - assertThat(transaction.getNote(), is("Quartalsdividende")); - assertThat(transaction.getSource(), is("Dividende09.txt")); - - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(4.50)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(5.30)))); - assertThat(transaction.getUnitSum(Unit.Type.TAX), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.94 / 1.179400)))); - assertThat(transaction.getUnitSum(Unit.Type.FEE), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); - - CheckCurrenciesAction c = new CheckCurrenciesAction(); - Account account = new Account(); - account.setCurrencyCode(CurrencyUnit.EUR); - Status s = c.process(transaction, account); - assertThat(s, is(Status.OK_STATUS)); + assertThat(results, hasItem(dividend( // + hasDate("2020-11-04T00:00"), hasShares(32.000), // + hasSource("Dividende14.txt"), // + hasNote("Ref.-Nr.: XXX1234567899ABC | Quartalsdividende"), // + hasAmount("EUR", 13.69), hasGrossValue("EUR", 13.69), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00), // + check(tx -> { + CheckCurrenciesAction c = new CheckCurrenciesAction(); + Account account = new Account(); + account.setCurrencyCode(CurrencyUnit.EUR); + Status s = c.process((AccountTransaction) tx, account); + assertThat(s, is(Status.OK_STATUS)); + })))); } @Test - public void testDividende10() + public void testSteuerbehandlungVonDividende14() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende10.txt"), errors); + List results = extractor + .extract(PDFInputFile.loadTestCase(getClass(), "SteuerbehandlungVonDividende14.txt"), errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(2)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("DE000A1TNA70")); - assertThat(security.getWkn(), is("A1TNA7")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("SA N H A G m b H & C o. K G Z- A n l e ih e v .2 0 1 3 ( 2 3 / 2 6)")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); - - // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); - - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2020-12-04T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(50))); - assertThat(transaction.getSource(), is("Dividende10.txt")); - assertNull(transaction.getNote()); - - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(100.00)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(100.00)))); - 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(results, hasItem(security( // + hasIsin("US1266501006"), hasWkn("859034"), hasTicker(null), // + hasName("CVS HEALTH CORP. DL-,01"), // + hasCurrencyCode("EUR")))); + + // check taxes transaction + assertThat(results, hasItem(taxes( // + hasDate("2020-11-04T00:00"), hasShares(32.000), // + hasSource("SteuerbehandlungVonDividende14.txt"), // + hasNote(null), // + hasAmount("EUR", (13.70 - 11.64) + 1.38 + 0.07), + hasGrossValue("EUR", (13.70 - 11.64) + 1.38 + 0.07), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); } @Test - public void testDividende11() + public void testDividende14MitSteuerbehandlungVonDividende14() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende11.txt"), errors); + List results = extractor.extract( + PDFInputFile.loadTestCase(getClass(), "Dividende14.txt", "SteuerbehandlungVonDividende14.txt"), + errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(2)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("DE000A1TNA70")); - assertThat(security.getWkn(), is("A1TNA7")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("S A N HA G m b H & C o. K G Z -A n le i h e v .2 0 1 3( 2 0 / 2 3)")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + assertThat(results, hasItem(security( // + hasIsin("US1266501006"), hasWkn("859034"), hasTicker(null), // + hasName("C VS H e a lt h Co r p. R eg is te r ed S h a re s D L -, 0 1"), // + hasCurrencyCode("USD")))); // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); - - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2020-06-04T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(50))); - assertThat(transaction.getSource(), is("Dividende11.txt")); - assertNull(transaction.getNote()); - - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(181.25)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(181.25)))); - 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(results, hasItem(dividend( // + hasDate("2020-11-04T00:00"), hasShares(32.000), // + hasSource("Dividende14.txt; SteuerbehandlungVonDividende14.txt"), // + hasNote("Ref.-Nr.: XXX1234567899ABC | Quartalsdividende"), // + hasAmount("EUR", 10.19), hasGrossValue("EUR", 13.70), // + hasForexGrossValue("USD", 16.00), // + hasTaxes("EUR", (13.70 - 11.64) + 1.38 + 0.07), hasFees("EUR", 0.00)))); } @Test - public void testDividende12() + public void testDividende14MitSteuerbehandlungVonDividende14WithSecurityInEUR() { - ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); + Security security = new Security("C VS H e a lt h Co r p. R eg is te r ed S h a re s D L -, 0 1", + CurrencyUnit.EUR); + security.setIsin("US1266501006"); + security.setWkn("859034"); + + Client client = new Client(); + client.addSecurity(security); + + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(client); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende12.txt"), errors); + List results = extractor.extract( + PDFInputFile.loadTestCase(getClass(), "Dividende14.txt", "SteuerbehandlungVonDividende14.txt"), + errors); assertThat(errors, empty()); - assertThat(results.size(), is(2)); + assertThat(countSecurities(results), is(0L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(1)); new AssertImportActions().check(results, CurrencyUnit.EUR); - // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("DE0008404005")); - assertThat(security.getWkn(), is("840400")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("Al l i an z S E v i n k . N am en s - Ak t ie n o . N .")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); - // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); - - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2018-05-14T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(16))); - assertThat(transaction.getSource(), is("Dividende12.txt")); - assertNull(transaction.getNote()); - - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(128.00)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(128.00)))); - 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(results, hasItem(dividend( // + hasDate("2020-11-04T00:00"), hasShares(32.000), // + hasSource("Dividende14.txt; SteuerbehandlungVonDividende14.txt"), // + hasNote("Ref.-Nr.: XXX1234567899ABC | Quartalsdividende"), // + hasAmount("EUR", 10.19), hasGrossValue("EUR", 13.70), // + hasTaxes("EUR", (13.70 - 11.64) + 1.38 + 0.07), hasFees("EUR", 0.00), // + check(tx -> { + CheckCurrenciesAction c = new CheckCurrenciesAction(); + Account account = new Account(); + account.setCurrencyCode(CurrencyUnit.EUR); + Status s = c.process((AccountTransaction) tx, account); + assertThat(s, is(Status.OK_STATUS)); + })))); } @Test - public void testDividende13() + public void testDividende14MitSteuerbehandlungVonDividende14_SourceFilesReversed() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende13.txt"), errors); + List results = extractor.extract( + PDFInputFile.loadTestCase(getClass(), "SteuerbehandlungVonDividende14.txt", "Dividende14.txt"), + errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(2)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("US1266501006")); - assertThat(security.getWkn(), is("859034")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("C VS H e a lt h Co r p. R eg is te r ed S h a re s D L -, 0 1")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.USD)); + assertThat(results, hasItem(security( // + hasIsin("US1266501006"), hasWkn("859034"), hasTicker(null), // + hasName("CVS HEALTH CORP. DL-,01"), // + hasCurrencyCode("EUR")))); // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); - - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2020-11-04T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(32))); - assertThat(transaction.getNote(), is("Quartalsdividende")); - assertThat(transaction.getSource(), is("Dividende13.txt")); - - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(11.64)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(13.70)))); - assertThat(transaction.getUnitSum(Unit.Type.TAX), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2.06)))); - assertThat(transaction.getUnitSum(Unit.Type.FEE), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); - - Unit grossValueUnit = transaction.getUnit(Unit.Type.GROSS_VALUE).orElseThrow(IllegalArgumentException::new); - assertThat(grossValueUnit.getForex(), is(Money.of(CurrencyUnit.USD, Values.Amount.factorize(16.00)))); + assertThat(results, hasItem(dividend( // + hasDate("2020-11-04T00:00"), hasShares(32.000), // + hasSource("Dividende14.txt; SteuerbehandlungVonDividende14.txt"), // + hasNote("Ref.-Nr.: XXX1234567899ABC | Quartalsdividende"), // + hasAmount("EUR", 10.19), hasGrossValue("EUR", 13.70), // + hasTaxes("EUR", (13.70 - 11.64) + 1.38 + 0.07), hasFees("EUR", 0.00)))); } @Test - public void testDividende13WithSecurityInEUR() + public void testDividende14MitSteuerbehandlungVonDividende14WithSecurityInEUR_SourceFilesReversed() { - Security security = new Security("C VS H e a lt h Co r p. R eg is te r ed S h a re s D L -, 0 1", CurrencyUnit.EUR); + Security security = new Security("C VS H e a lt h Co r p. R eg is te r ed S h a re s D L -, 0 1", + CurrencyUnit.EUR); security.setIsin("US1266501006"); security.setWkn("859034"); @@ -2471,88 +3392,69 @@ public void testDividende13WithSecurityInEUR() List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende13.txt"), errors); + List results = extractor.extract( + PDFInputFile.loadTestCase(getClass(), "SteuerbehandlungVonDividende14.txt", "Dividende14.txt"), + errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(0L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(1)); + new AssertImportActions().check(results, CurrencyUnit.EUR); // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); - - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2020-11-04T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(32))); - assertThat(transaction.getNote(), is("Quartalsdividende")); - assertThat(transaction.getSource(), is("Dividende13.txt")); - - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(11.64)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(13.70)))); - assertThat(transaction.getUnitSum(Unit.Type.TAX), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2.06)))); - assertThat(transaction.getUnitSum(Unit.Type.FEE), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); - - CheckCurrenciesAction c = new CheckCurrenciesAction(); - Account account = new Account(); - account.setCurrencyCode(CurrencyUnit.EUR); - Status s = c.process(transaction, account); - assertThat(s, is(Status.OK_STATUS)); + assertThat(results, hasItem(dividend( // + hasDate("2020-11-04T00:00"), hasShares(32.000), // + hasSource("Dividende14.txt; SteuerbehandlungVonDividende14.txt"), // + hasNote("Ref.-Nr.: XXX1234567899ABC | Quartalsdividende"), // + hasAmount("EUR", 10.19), hasGrossValue("EUR", 13.70), // + hasTaxes("EUR", (13.70 - 11.64) + 1.38 + 0.07), hasFees("EUR", 0.00), // + check(tx -> { + CheckCurrenciesAction c = new CheckCurrenciesAction(); + Account account = new Account(); + account.setCurrencyCode(CurrencyUnit.EUR); + Status s = c.process((AccountTransaction) tx, account); + assertThat(s, is(Status.OK_STATUS)); + })))); } @Test - public void testDividende14() + public void testDividende15() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende14.txt"), errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende15.txt"), errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(2)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("CA8911021050")); - assertThat(security.getWkn(), is("914305")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("To r o m on t I n du st r i e s L t d . R eg is te r ed S h ar e s o .N .")); - assertThat(security.getCurrencyCode(), is("CAD")); + assertThat(results, hasItem(security( // + hasIsin("CA8911021050"), hasWkn("914305"), hasTicker(null), // + hasName("To r o m on t I n du st r i e s L t d . R eg is te r ed S h ar e s o .N ."), // + hasCurrencyCode("CAD")))); // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); - - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2021-01-07T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(34))); - assertThat(transaction.getNote(), is("Quartalsdividende")); - assertThat(transaction.getSource(), is("Dividende14.txt")); - - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(5.03)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(6.71)))); - assertThat(transaction.getUnitSum(Unit.Type.TAX), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2.64 / 1.570200)))); - assertThat(transaction.getUnitSum(Unit.Type.FEE), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); - - Unit grossValueUnit = transaction.getUnit(Unit.Type.GROSS_VALUE).orElseThrow(IllegalArgumentException::new); - assertThat(grossValueUnit.getForex(), is(Money.of("CAD", Values.Amount.factorize(10.54)))); + assertThat(results, hasItem(dividend( // + hasDate("2021-01-07T00:00"), hasShares(34.000), // + hasSource("Dividende15.txt"), // + hasNote("Ref.-Nr.: 1XABCDEF0000V | Quartalsdividende"), // + hasAmount("EUR", 6.71), hasGrossValue("EUR", 6.71), hasForexGrossValue("CAD", 10.54), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); } @Test - public void testDividende14WithSecurityInEUR() + public void testDividende15WithSecurityInEUR() { - Security security = new Security("To r o m on t I n du st r i e s L t d . R eg is te r ed S h ar e s o .N .", CurrencyUnit.EUR); + Security security = new Security("To r o m on t I n du st r i e s L t d . R eg is te r ed S h ar e s o .N .", + CurrencyUnit.EUR); security.setIsin("CA8911021050"); security.setWkn("914305"); @@ -2563,90 +3465,103 @@ public void testDividende14WithSecurityInEUR() List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende14.txt"), errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende15.txt"), errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(0L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(1)); + new AssertImportActions().check(results, CurrencyUnit.EUR); // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); + assertThat(results, hasItem(dividend( // + hasDate("2021-01-07T00:00"), hasShares(34.000), // + hasSource("Dividende15.txt"), // + hasNote("Ref.-Nr.: 1XABCDEF0000V | Quartalsdividende"), // + hasAmount("EUR", 6.71), hasGrossValue("EUR", 6.71), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00), // + check(tx -> { + CheckCurrenciesAction c = new CheckCurrenciesAction(); + Account account = new Account(); + account.setCurrencyCode(CurrencyUnit.EUR); + Status s = c.process((AccountTransaction) tx, account); + assertThat(s, is(Status.OK_STATUS)); + })))); + } + + @Test + public void testSteuerbehandlungVonDividende15() + { + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); + List errors = new ArrayList<>(); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2021-01-07T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(34))); - assertThat(transaction.getNote(), is("Quartalsdividende")); - assertThat(transaction.getSource(), is("Dividende14.txt")); + List results = extractor + .extract(PDFInputFile.loadTestCase(getClass(), "SteuerbehandlungVonDividende15.txt"), errors); - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(5.03)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(6.71)))); - assertThat(transaction.getUnitSum(Unit.Type.TAX), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2.64 / 1.570200)))); - assertThat(transaction.getUnitSum(Unit.Type.FEE), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); + assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); - CheckCurrenciesAction c = new CheckCurrenciesAction(); - Account account = new Account(); - account.setCurrencyCode(CurrencyUnit.EUR); - Status s = c.process(transaction, account); - assertThat(s, is(Status.OK_STATUS)); + // check security + assertThat(results, hasItem(security( // + hasIsin("CA8911021050"), hasWkn("914305"), hasTicker(null), // + hasName("TOROMONT INDS LTD."), // + hasCurrencyCode("EUR")))); + + // check taxes transaction + assertThat(results, hasItem(taxes( // + hasDate("2021-01-07T00:00"), hasShares(34.000), // + hasSource("SteuerbehandlungVonDividende15.txt"), // + hasNote(null), // + hasAmount("EUR", 6.71 - 5.03), hasGrossValue("EUR", 6.71 - 5.03), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); } @Test - public void testDividende15() + public void testDividende15MitSteuerbehandlungVonDividende15() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende15.txt"), errors); + List results = extractor.extract( + PDFInputFile.loadTestCase(getClass(), "Dividende15.txt", "SteuerbehandlungVonDividende15.txt"), + errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(2)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("IE00B0M62Q58")); - assertThat(security.getWkn(), is("A0HGV0")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("i S h s - M S C I W o r ld U C I T S E T F R e g is t er e d S h a r e s U S D (D i st ) o N")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.USD)); + assertThat(results, hasItem(security( // + hasIsin("CA8911021050"), hasWkn("914305"), hasTicker(null), // + hasName("To r o m on t I n du st r i e s L t d . R eg is te r ed S h ar e s o .N ."), // + hasCurrencyCode("CAD")))); // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); - - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2021-03-26T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(54.394))); - assertThat(transaction.getSource(), is("Dividende15.txt")); - assertNull(transaction.getNote()); - - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(5.66)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(5.66)))); - 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)))); - - Unit grossValueUnit = transaction.getUnit(Unit.Type.GROSS_VALUE).orElseThrow(IllegalArgumentException::new); - assertThat(grossValueUnit.getForex(), is(Money.of(CurrencyUnit.USD, Values.Amount.factorize(6.71)))); + assertThat(results, hasItem(dividend( // + hasDate("2021-01-07T00:00"), hasShares(34.000), // + hasSource("Dividende15.txt; SteuerbehandlungVonDividende15.txt"), // + hasNote("Ref.-Nr.: 1XABCDEF0000V | Quartalsdividende"), // + hasAmount("EUR", 5.03), hasGrossValue("EUR", 6.71), hasForexGrossValue("CAD", 10.54), // + hasTaxes("EUR", 6.71 - 5.03), hasFees("EUR", 0.00)))); } @Test - public void testDividende15WithSecurityInEUR() + public void testDividende15MitSteuerbehandlungVonDividende15WithSecurityInEUR() { - Security security = new Security("i S h s - M S C I W o r ld U C I T S E T F R e g is t er e d S h a r e s U S D (D i st ) o N", CurrencyUnit.EUR); - security.setIsin("IE00B0M62Q58"); - security.setWkn("A0HGV0"); + Security security = new Security("To r o m on t I n du st r i e s L t d . R eg is te r ed S h ar e s o .N .", + CurrencyUnit.EUR); + security.setIsin("CA8911021050"); + security.setWkn("914305"); Client client = new Client(); client.addSecurity(security); @@ -2655,90 +3570,73 @@ public void testDividende15WithSecurityInEUR() List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende15.txt"), errors); + List results = extractor.extract( + PDFInputFile.loadTestCase(getClass(), "Dividende15.txt", "SteuerbehandlungVonDividende15.txt"), + errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(0L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(1)); + new AssertImportActions().check(results, CurrencyUnit.EUR); // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); - - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2021-03-26T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(54.394))); - assertThat(transaction.getSource(), is("Dividende15.txt")); - assertNull(transaction.getNote()); - - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(5.66)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(5.66)))); - 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)))); - - CheckCurrenciesAction c = new CheckCurrenciesAction(); - Account account = new Account(); - account.setCurrencyCode(CurrencyUnit.EUR); - Status s = c.process(transaction, account); - assertThat(s, is(Status.OK_STATUS)); + assertThat(results, hasItem(dividend( // + hasDate("2021-01-07T00:00"), hasShares(34.000), // + hasSource("Dividende15.txt; SteuerbehandlungVonDividende15.txt"), // + hasNote("Ref.-Nr.: 1XABCDEF0000V | Quartalsdividende"), // + hasAmount("EUR", 5.03), hasGrossValue("EUR", 6.71), // + hasTaxes("EUR", 6.71 - 5.03), hasFees("EUR", 0.00), // + check(tx -> { + CheckCurrenciesAction c = new CheckCurrenciesAction(); + Account account = new Account(); + account.setCurrencyCode(CurrencyUnit.EUR); + Status s = c.process((AccountTransaction) tx, account); + assertThat(s, is(Status.OK_STATUS)); + })))); } @Test - public void testDividende16() + public void testDividende15MitSteuerbehandlungVonDividende15_SourceFilesReversed() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende16.txt"), errors); + List results = extractor.extract( + PDFInputFile.loadTestCase(getClass(), "SteuerbehandlungVonDividende15.txt", "Dividende15.txt"), + errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(2)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("US5949181045")); - assertThat(security.getWkn(), is("870747")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("M i c ro s of t C o rp . R eg i s t e r ed S h ar e s D L - , 00 0 0 0 62 5")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.USD)); + assertThat(results, hasItem(security( // + hasIsin("CA8911021050"), hasWkn("914305"), hasTicker(null), // + hasName("TOROMONT INDS LTD."), // + hasCurrencyCode("EUR")))); // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); - - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2021-09-13T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(6.30))); - assertThat(transaction.getNote(), is("Quartalsdividende")); - assertThat(transaction.getSource(), is("Dividende16.txt")); - - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2.53)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2.98)))); - assertThat(transaction.getUnitSum(Unit.Type.TAX), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.53 / 1.186200)))); - assertThat(transaction.getUnitSum(Unit.Type.FEE), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); - - Unit grossValueUnit = transaction.getUnit(Unit.Type.GROSS_VALUE).orElseThrow(IllegalArgumentException::new); - assertThat(grossValueUnit.getForex(), is(Money.of(CurrencyUnit.USD, Values.Amount.factorize(3.53)))); + assertThat(results, hasItem(dividend( // + hasDate("2021-01-07T00:00"), hasShares(34.000), // + hasSource("Dividende15.txt; SteuerbehandlungVonDividende15.txt"), // + hasNote("Ref.-Nr.: 1XABCDEF0000V | Quartalsdividende"), // + hasAmount("EUR", 5.03), hasGrossValue("EUR", 6.71), // + hasTaxes("EUR", 6.71 - 5.03), hasFees("EUR", 0.00)))); } @Test - public void testDividende16WithSecurityInEUR() + public void testDividende15MitSteuerbehandlungVonDividende15WithSecurityInEUR_SourceFilesReversed() { - Security security = new Security("M i c ro s of t C o rp . R eg i s t e r ed S h ar e s D L - , 00 0 0 0 62 5", CurrencyUnit.EUR); - security.setIsin("US5949181045"); - security.setWkn("870747"); + Security security = new Security("To r o m on t I n du st r i e s L t d . R eg is te r ed S h ar e s o .N .", + CurrencyUnit.EUR); + security.setIsin("CA8911021050"); + security.setWkn("914305"); Client client = new Client(); client.addSecurity(security); @@ -2747,2397 +3645,1466 @@ public void testDividende16WithSecurityInEUR() List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende16.txt"), errors); + List results = extractor.extract( + PDFInputFile.loadTestCase(getClass(), "SteuerbehandlungVonDividende15.txt", "Dividende15.txt"), + errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(0L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(1)); + new AssertImportActions().check(results, CurrencyUnit.EUR); // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); - - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2021-09-13T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(6.30))); - assertThat(transaction.getNote(), is("Quartalsdividende")); - assertThat(transaction.getSource(), is("Dividende16.txt")); - - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2.53)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2.98)))); - assertThat(transaction.getUnitSum(Unit.Type.TAX), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.53 / 1.186200)))); - assertThat(transaction.getUnitSum(Unit.Type.FEE), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); - - CheckCurrenciesAction c = new CheckCurrenciesAction(); - Account account = new Account(); - account.setCurrencyCode(CurrencyUnit.EUR); - Status s = c.process(transaction, account); - assertThat(s, is(Status.OK_STATUS)); + assertThat(results, hasItem(dividend( // + hasDate("2021-01-07T00:00"), hasShares(34.000), // + hasSource("Dividende15.txt; SteuerbehandlungVonDividende15.txt"), // + hasNote("Ref.-Nr.: 1XABCDEF0000V | Quartalsdividende"), // + hasAmount("EUR", 5.03), hasGrossValue("EUR", 6.71), // + hasTaxes("EUR", 6.71 - 5.03), hasFees("EUR", 0.00), // + check(tx -> { + CheckCurrenciesAction c = new CheckCurrenciesAction(); + Account account = new Account(); + account.setCurrencyCode(CurrencyUnit.EUR); + Status s = c.process((AccountTransaction) tx, account); + assertThat(s, is(Status.OK_STATUS)); + })))); } @Test - public void testDividende17() + public void testDividende16() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende17.txt"), errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende16.txt"), errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(2)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("IE0032523478")); - assertThat(security.getWkn(), is("778928")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("i Sh s - E O C o rp Bd La r . Ca p U . ET F R e g i s te r e d S ha r e s o . N.")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + assertThat(results, hasItem(security( // + hasIsin("IE0032523478"), hasWkn("778928"), hasTicker(null), // + hasName("i Sh s - E O C o rp Bd La r . Ca p U . ET F R e g i s te r e d S ha r e s o . N."), // + hasCurrencyCode("EUR")))); // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); + assertThat(results, hasItem(dividend( // + hasDate("2021-12-31T00:00"), hasShares(81.921), // + hasSource("Dividende16.txt"), // + hasNote("Ref.-Nr.: 1RIHIHNKLPV001JQ"), // + hasAmount("EUR", 18.39), hasGrossValue("EUR", 18.39), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); + } + + @Test + public void testSteuerbehandlungVonDividende16() + { + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); + + List errors = new ArrayList<>(); - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); + List results = extractor + .extract(PDFInputFile.loadTestCase(getClass(), "SteuerbehandlungVonDividende16.txt"), errors); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2021-12-31T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(81.921))); - assertThat(transaction.getSource(), is("Dividende17.txt")); - assertNull(transaction.getNote()); + assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(18.39)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(18.39)))); - 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)))); + // check security + assertThat(results, hasItem(security( // + hasIsin("IE0032523478"), hasWkn("778928"), hasTicker(null), // + hasName("ISHS-EO C.BD L.C.U.ETFEOD"), // + hasCurrencyCode("EUR")))); + + // check taxes transaction + assertThat(results, hasItem(taxes( // + hasDate("2021-12-31T00:00"), hasShares(81.921), // + hasSource("SteuerbehandlungVonDividende16.txt"), // + hasNote(null), // + hasAmount("EUR", 4.49 + 0.24 + 0.41), hasGrossValue("EUR", 4.49 + 0.24 + 0.41), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); } @Test - public void testDividende18() + public void testDividende16MitSteuerbehandlungVonDividende16() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende18.txt"), errors); + List results = extractor.extract( + PDFInputFile.loadTestCase(getClass(), "Dividende16.txt", "SteuerbehandlungVonDividende16.txt"), + errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(2)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("DE0007162000")); - assertThat(security.getWkn(), is("716200")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("K + S A k t ie n ge s e l l sc ha f t In h a b e r -A k t i e n o . N.")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + assertThat(results, hasItem(security( // + hasIsin("IE0032523478"), hasWkn("778928"), hasTicker(null), // + hasName("i Sh s - E O C o rp Bd La r . Ca p U . ET F R e g i s te r e d S ha r e s o . N."), // + hasCurrencyCode("EUR")))); // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); - - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2008-05-15T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(80))); - assertThat(transaction.getSource(), is("Dividende18.txt")); - assertNull(transaction.getNote()); - - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(126.24)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(160.00)))); - assertThat(transaction.getUnitSum(Unit.Type.TAX), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(32.00 + 1.76)))); - assertThat(transaction.getUnitSum(Unit.Type.FEE), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); + assertThat(results, hasItem(dividend( // + hasDate("2021-12-31T00:00"), hasShares(81.921), // + hasSource("Dividende16.txt; SteuerbehandlungVonDividende16.txt"), // + hasNote("Ref.-Nr.: 1RIHIHNKLPV001JQ"), // + hasAmount("EUR", 13.25), hasGrossValue("EUR", 18.39), // + hasTaxes("EUR", 4.49 + 0.24 + 0.41), hasFees("EUR", 0.00)))); } @Test - public void testDividende19() + public void testDividende16MitSteuerbehandlungVonDividende16_SourceFilesReversed() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende19.txt"), errors); + List results = extractor.extract( + PDFInputFile.loadTestCase(getClass(), "SteuerbehandlungVonDividende16.txt", "Dividende16.txt"), + errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(2)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("US4592001014")); - assertThat(security.getWkn(), is("851399")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("I nt l B u s i ne ss M a c hi n e s Co r p . R eg i s te r ed S ha r es DL - ,2 0")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.USD)); + assertThat(results, hasItem(security( // + hasIsin("IE0032523478"), hasWkn("778928"), hasTicker(null), // + hasName("ISHS-EO C.BD L.C.U.ETFEOD"), // + hasCurrencyCode("EUR")))); // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); - - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2008-06-12T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(100))); - assertThat(transaction.getSource(), is("Dividende19.txt")); - assertThat(transaction.getNote(), is("Quartalsdividende")); - - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(27.37)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(32.20)))); - assertThat(transaction.getUnitSum(Unit.Type.TAX), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(7.50 / 1.552700)))); - assertThat(transaction.getUnitSum(Unit.Type.FEE), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); - - Unit grossValueUnit = transaction.getUnit(Unit.Type.GROSS_VALUE).orElseThrow(IllegalArgumentException::new); - assertThat(grossValueUnit.getForex(), is(Money.of(CurrencyUnit.USD, Values.Amount.factorize(32.20 * 1.552700)))); + assertThat(results, hasItem(dividend( // + hasDate("2021-12-31T00:00"), hasShares(81.921), // + hasSource("Dividende16.txt; SteuerbehandlungVonDividende16.txt"), // + hasNote("Ref.-Nr.: 1RIHIHNKLPV001JQ"), // + hasAmount("EUR", 13.25), hasGrossValue("EUR", 18.39), // + hasTaxes("EUR", 4.49 + 0.24 + 0.41), hasFees("EUR", 0.00)))); } @Test - public void testDividende19WithSecurityInEUR() + public void testDividende17() { - Security security = new Security("I nt l B u s i ne ss M a c hi n e s Co r p . R eg i s te r ed S ha r es DL - ,2 0", CurrencyUnit.EUR); - security.setIsin("US4592001014"); - security.setWkn("851399"); - - Client client = new Client(); - client.addSecurity(security); - - ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(client); + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende19.txt"), errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende17.txt"), errors); assertThat(errors, empty()); - assertThat(results.size(), is(1)); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check security + assertThat(results, hasItem(security( // + hasIsin("NL0000009355"), hasWkn("A0JMZB"), hasTicker(null), // + hasName("U n il e ve r N . V . C e r t . v .A a n d e l e n E O -, 1 6"), // + hasCurrencyCode("EUR")))); // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); + assertThat(results, hasItem(dividend( // + hasDate("2010-12-15T00:00"), hasShares(1900.00), // + hasSource("Dividende17.txt"), // + hasNote("Zwischendividende"), // + hasAmount("EUR", 335.92 + 59.28), hasGrossValue("EUR", 335.92 + 59.28), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); + } + + @Test + public void testDividende18MitSteuerbehandlung() + { + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); + + List errors = new ArrayList<>(); - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); + List results = extractor + .extract(PDFInputFile.loadTestCase(getClass(), "Dividende18MitSteuerbehandlung.txt"), errors); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2008-06-12T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(100))); - assertThat(transaction.getSource(), is("Dividende19.txt")); - assertThat(transaction.getNote(), is("Quartalsdividende")); + assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(27.37)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(32.20)))); - assertThat(transaction.getUnitSum(Unit.Type.TAX), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(7.50 / 1.552700)))); - assertThat(transaction.getUnitSum(Unit.Type.FEE), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); + // check security + assertThat(results, hasItem(security( // + hasIsin("DE0008232125"), hasWkn("823212"), hasTicker(null), // + hasName("De u t s c he L uf t h a n s a A G v i nk .N a me n s- A kt ie n o . N ."), // + hasCurrencyCode("EUR")))); - CheckCurrenciesAction c = new CheckCurrenciesAction(); - Account account = new Account(); - account.setCurrencyCode(CurrencyUnit.EUR); - Status s = c.process(transaction, account); - assertThat(s, is(Status.OK_STATUS)); + // check dividends transaction + assertThat(results, hasItem(dividend( // + hasDate("2009-04-27T00:00"), hasShares(3000.00), // + hasSource("Dividende18MitSteuerbehandlung.txt"), // + hasNote(null), // + hasAmount("EUR", 1546.13), hasGrossValue("EUR", 2100.00), // + hasTaxes("EUR", 525.00 + 28.87), hasFees("EUR", 0.00)))); } @Test - public void testSteuermitteilungDividende01() + public void testDividende19MitSteuerbehandlung() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "SteuermitteilungDividende01.txt"), - errors); + List results = extractor + .extract(PDFInputFile.loadTestCase(getClass(), "Dividende19MitSteuerbehandlung.txt"), errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(2)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("US7427181091")); - assertThat(security.getWkn(), is("852062")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("PROCTER GAMBLE")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + assertThat(results, hasItem(security( // + hasIsin("DE0007162000"), hasWkn("716200"), hasTicker(null), // + hasName("K + S A k t ie n ge s e l l sc ha f t In h a b e r -A k t i e n o . N."), // + hasCurrencyCode("EUR")))); // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); - - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2020-02-20T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(518))); - assertThat(transaction.getSource(), is("SteuermitteilungDividende01.txt")); - assertNull(transaction.getNote()); - - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(302.55)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(355.95)))); - assertThat(transaction.getUnitSum(Unit.Type.TAX), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(53.40)))); - assertThat(transaction.getUnitSum(Unit.Type.FEE), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); + assertThat(results, hasItem(dividend( // + hasDate("2008-05-15T00:00"), hasShares(80.000), // + hasSource("Dividende19MitSteuerbehandlung.txt"), // + hasNote(null), // + hasAmount("EUR", 126.24), hasGrossValue("EUR", 160.00), // + hasTaxes("EUR", 32.00 + 1.76), hasFees("EUR", 0.00)))); } @Test - public void testSteuermitteilungDividende02() + public void testDividende20MitSteuerbehandlung() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "SteuermitteilungDividende02.txt"), - errors); + List results = extractor + .extract(PDFInputFile.loadTestCase(getClass(), "Dividende20MitSteuerbehandlung.txt"), errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(2)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("AN8068571086")); - assertThat(security.getWkn(), is("853390")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("SCHLUMBERGER DL-,01")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + assertThat(results, hasItem(security( // + hasIsin("US4592001014"), hasWkn("851399"), hasTicker(null), // + hasName("I nt l B u s i ne ss M a c hi n e s Co r p . R eg i s te r ed S ha r es DL - ,2 0"), // + hasCurrencyCode("USD")))); // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); - - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2020-01-14T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(130))); - assertThat(transaction.getSource(), is("SteuermitteilungDividende02.txt")); - assertNull(transaction.getNote()); - - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(58.44)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(58.44)))); - 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(results, hasItem(dividend( // + hasDate("2008-06-12T00:00"), hasShares(100.000), // + hasSource("Dividende20MitSteuerbehandlung.txt"), // + hasNote("Quartalsdividende"), // + hasAmount("EUR", 27.37), hasGrossValue("EUR", 32.20), // + hasForexGrossValue("USD", 50.00), // + hasTaxes("EUR", (7.50 / 1.552700)), hasFees("EUR", 0.00)))); } @Test - public void testSteuermitteilungDividende03() + public void testDividende20MitSteuerbehandlungWithSecurityInEUR() { - ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); + Security security = new Security( + "I nt l B u s i ne ss M a c hi n e s Co r p . R eg i s te r ed S ha r es DL - ,2 0", + CurrencyUnit.EUR); + security.setIsin("US4592001014"); + security.setWkn("851399"); + + Client client = new Client(); + client.addSecurity(security); + + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(client); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "SteuermitteilungDividende03.txt"), - errors); + List results = extractor + .extract(PDFInputFile.loadTestCase(getClass(), "Dividende20MitSteuerbehandlung.txt"), errors); assertThat(errors, empty()); - assertThat(results.size(), is(2)); + assertThat(countSecurities(results), is(0L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(1)); new AssertImportActions().check(results, CurrencyUnit.EUR); - // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("US1266501006")); - assertThat(security.getWkn(), is("859034")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("CVS HEALTH CORP. DL-,01")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); - // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); - - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2017-11-07T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(32))); - assertThat(transaction.getSource(), is("SteuermitteilungDividende03.txt")); - assertNull(transaction.getNote()); - - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(10.21)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(13.70)))); - assertThat(transaction.getUnitSum(Unit.Type.TAX), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(3.49)))); - assertThat(transaction.getUnitSum(Unit.Type.FEE), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); + assertThat(results, hasItem(dividend( // + hasDate("2008-06-12T00:00"), hasShares(100.000), // + hasSource("Dividende20MitSteuerbehandlung.txt"), // + hasNote("Quartalsdividende"), // + hasAmount("EUR", 27.37), hasGrossValue("EUR", 32.20), // + hasTaxes("EUR", (7.50 / 1.552700)), hasFees("EUR", 0.00), // + check(tx -> { + CheckCurrenciesAction c = new CheckCurrenciesAction(); + Account account = new Account(); + account.setCurrencyCode(CurrencyUnit.EUR); + Status s = c.process((AccountTransaction) tx, account); + assertThat(s, is(Status.OK_STATUS)); + })))); } @Test - public void testSteuermitteilungDividende04() + public void testDividende21() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "SteuermitteilungDividende04.txt"), - errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende21.txt"), errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(2)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("DE0006766504")); - assertThat(security.getWkn(), is("676650")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("AURUBIS AG")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + assertThat(results, hasItem(security( // + hasIsin("US7170811035"), hasWkn("852009"), hasTicker(null), // + hasName("P f iz e r I n c. Re g i s te r ed S ha r e s DL - , 0 5"), // + hasCurrencyCode("USD")))); // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); - - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2020-03-03T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(50))); - assertThat(transaction.getSource(), is("SteuermitteilungDividende04.txt")); - assertNull(transaction.getNote()); - - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(45.12)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(62.50)))); - assertThat(transaction.getUnitSum(Unit.Type.TAX), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(17.38)))); - assertThat(transaction.getUnitSum(Unit.Type.FEE), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); + assertThat(results, hasItem(dividend( // + hasDate("2023-09-07T00:00"), hasShares(300.000), // + hasSource("Dividende21.txt"), // + hasNote("Ref.-Nr.: 22IJUON6JHE000NY | Quartalsdividende"), // + hasAmount("EUR", 114.21), hasGrossValue("EUR", 114.21), // + hasForexGrossValue("USD", 123.00), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); } @Test - public void testSteuermitteilungDividende05() + public void testDividende21WithSecurityInEUR() { - ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); + Security security = new Security("P f iz e r I n c. Re g i s te r ed S ha r e s DL - , 0 5", CurrencyUnit.EUR); + security.setIsin("US7170811035"); + security.setWkn("852009"); + + Client client = new Client(); + client.addSecurity(security); + + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(client); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "SteuermitteilungDividende05.txt"), - errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende21.txt"), errors); assertThat(errors, empty()); - assertThat(results.size(), is(2)); + assertThat(countSecurities(results), is(0L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(1)); new AssertImportActions().check(results, CurrencyUnit.EUR); - // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("FR0000120271")); - assertThat(security.getWkn(), is("850727")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("TOTAL S.E. EO 2,50")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); - // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); - - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2021-01-11T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(220))); - assertThat(transaction.getSource(), is("SteuermitteilungDividende05.txt")); - assertNull(transaction.getNote()); - - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(88.03)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(145.20)))); - assertThat(transaction.getUnitSum(Unit.Type.TAX), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(57.17)))); - assertThat(transaction.getUnitSum(Unit.Type.FEE), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); + assertThat(results, hasItem(dividend( // + hasDate("2023-09-07T00:00"), hasShares(300.000), // + hasSource("Dividende21.txt"), // + hasNote("Ref.-Nr.: 22IJUON6JHE000NY | Quartalsdividende"), // + hasAmount("EUR", 114.21), hasGrossValue("EUR", 114.21), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00), // + check(tx -> { + CheckCurrenciesAction c = new CheckCurrenciesAction(); + Account account = new Account(); + account.setCurrencyCode(CurrencyUnit.EUR); + Status s = c.process((AccountTransaction) tx, account); + assertThat(s, is(Status.OK_STATUS)); + })))); } @Test - public void testSteuermitteilungDividende06() + public void testSteuerbehandlungVonDividende21() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "SteuermitteilungDividende06.txt"), - errors); + List results = extractor + .extract(PDFInputFile.loadTestCase(getClass(), "SteuerbehandlungVonDividende21.txt"), errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(2)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("US88579Y1010")); - assertThat(security.getWkn(), is("851745")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("3M CO. DL-,01")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); - - // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); - - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2020-12-16T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(13))); - assertThat(transaction.getSource(), is("SteuermitteilungDividende06.txt")); - assertNull(transaction.getNote()); - - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(11.68)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(15.68)))); - assertThat(transaction.getUnitSum(Unit.Type.TAX), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(4.00)))); - assertThat(transaction.getUnitSum(Unit.Type.FEE), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); + assertThat(results, hasItem(security( // + hasIsin("US7170811035"), hasWkn("852009"), hasTicker(null), // + hasName("PFIZER INC. DL-,05"), // + hasCurrencyCode("EUR")))); + + // check taxes transaction + assertThat(results, hasItem(taxes( // + hasDate("2023-09-07T00:00"), hasShares(300.000), // + hasSource("SteuerbehandlungVonDividende21.txt"), // + hasNote(null), // + hasAmount("EUR", (114.21 - 97.08) + 11.42 + 0.62), + hasGrossValue("EUR", (114.21 - 97.08) + 11.42 + 0.62), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); } @Test - public void testSteuermitteilungDividende07() + public void testSteuerbehandlungVonDividende26() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "SteuermitteilungDividende07.txt"), - errors); + List results = extractor + .extract(PDFInputFile.loadTestCase(getClass(), "SteuerbehandlungVonDividende26.txt"), errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(2)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("LU0496786574")); - assertThat(security.getWkn(), is("LYX0FS")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("MUL-LYX.S+P500UC.ETF DEO")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); - - // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); - - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2020-12-11T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(78.416))); - assertThat(transaction.getSource(), is("SteuermitteilungDividende07.txt")); - assertNull(transaction.getNote()); - - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(12.15)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(14.90)))); - assertThat(transaction.getUnitSum(Unit.Type.TAX), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2.75)))); - assertThat(transaction.getUnitSum(Unit.Type.FEE), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); + assertThat(results, hasItem(security( // + hasIsin("FR0010405431"), hasWkn("LYX0BF"), hasTicker(null), // + hasName("LYXOR U.E.FT.ATHEX L.CAP"), // + hasCurrencyCode("EUR")))); + + // check cancellation transaction + assertThat(results, hasItem(withFailureMessage( // + Messages.MsgErrorTransactionTypeNotSupported, // + taxes( // + hasDate("2016-07-08T00:00"), hasShares(3100.000), // + hasSource("SteuerbehandlungVonDividende26.txt"), // + hasNote(null), // + hasAmount("EUR", 0.00), hasGrossValue("EUR", 0.00), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))))); } @Test - public void testSteuermitteilungDividende08() + public void testSteuerbehandlungVonEinloesung01() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "SteuermitteilungDividende08.txt"), - errors); + List results = extractor + .extract(PDFInputFile.loadTestCase(getClass(), "SteuerbehandlungVonEinloesung01.txt"), errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(2)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("DE000A1TNA70")); - assertThat(security.getWkn(), is("A1TNA7")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("SANHA ANL 13/26 STZ")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); - - // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); - - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2020-12-04T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(5000))); - assertThat(transaction.getSource(), is("SteuermitteilungDividende08.txt")); - assertNull(transaction.getNote()); - - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(72.01)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(100.00)))); - assertThat(transaction.getUnitSum(Unit.Type.TAX), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(27.99)))); - assertThat(transaction.getUnitSum(Unit.Type.FEE), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); + assertThat(results, hasItem(security( // + hasIsin("DE000CB89VM3"), hasWkn("CB89VM"), hasTicker(null), // + hasName("COBA CAM.PART.-ANL.09/15"), // + hasCurrencyCode("EUR")))); + + // check taxes transaction + assertThat(results, hasItem(taxes( // + hasDate("2015-09-30T00:00"), hasShares(50.00), // + hasSource("SteuerbehandlungVonEinloesung01.txt"), // + hasNote(null), // + hasAmount("EUR", 338.50 + 18.61 + 30.46), hasGrossValue("EUR", 338.50 + 18.61 + 30.46), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); } @Test - public void testSteuermitteilungDividende09() + public void testSteuerbehandlungVonEinbuchung01() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "SteuermitteilungDividende09.txt"), - errors); + List results = extractor + .extract(PDFInputFile.loadTestCase(getClass(), "SteuerbehandlungVonEinbuchung01.txt"), errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(2)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("DE0008404005")); - assertThat(security.getWkn(), is("840400")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("ALLIANZ SE NA O.N.")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); - - // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); - - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2018-05-14T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(16))); - assertThat(transaction.getSource(), is("SteuermitteilungDividende09.txt")); - assertNull(transaction.getNote()); - - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(128.00)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(128.00)))); - 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(results, hasItem(security( // + hasIsin("US38259P7069"), hasWkn("A110NH"), hasTicker(null), // + hasName("GOOGLE INC.C DL-,001"), // + hasCurrencyCode("EUR")))); + + // check taxes transaction + assertThat(results, hasItem(taxes( // + hasDate("2014-04-03T00:00"), hasShares(5.00), // + hasSource("SteuerbehandlungVonEinbuchung01.txt"), // + hasNote(null), // + hasAmount("EUR", 312.56 + 17.19), hasGrossValue("EUR", 312.56 + 17.19), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); } @Test - public void testSteuermitteilungDividende10() + public void testDividende21MitSteuerbehandlungVonDividende21() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "SteuermitteilungDividende10.txt"), + List results = extractor.extract( + PDFInputFile.loadTestCase(getClass(), "Dividende21.txt", "SteuerbehandlungVonDividende21.txt"), errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(2)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("US1266501006")); - assertThat(security.getWkn(), is("859034")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("CVS HEALTH CORP. DL-,01")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + assertThat(results, hasItem(security( // + hasIsin("US7170811035"), hasWkn("852009"), hasTicker(null), // + hasName("P f iz e r I n c. Re g i s te r ed S ha r e s DL - , 0 5"), // + hasCurrencyCode("USD")))); // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); - - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2020-11-04T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(32))); - assertThat(transaction.getSource(), is("SteuermitteilungDividende10.txt")); - assertNull(transaction.getNote()); - - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(10.19)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(13.70)))); - assertThat(transaction.getUnitSum(Unit.Type.TAX), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(3.51)))); - assertThat(transaction.getUnitSum(Unit.Type.FEE), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); + assertThat(results, hasItem(dividend( // + hasDate("2023-09-07T00:00"), hasShares(300.000), // + hasSource("Dividende21.txt; SteuerbehandlungVonDividende21.txt"), // + hasNote("Ref.-Nr.: 22IJUON6JHE000NY | Quartalsdividende"), // + hasAmount("EUR", 85.04), hasGrossValue("EUR", 114.21), // + hasForexGrossValue("USD", 123.00), // + hasTaxes("EUR", (114.21 - 97.08) + 11.42 + 0.62), hasFees("EUR", 0.00)))); } @Test - public void testSteuermitteilungDividende11() + public void testDividende21MitSteuerbehandlungVonDividende21WithSecurityInEUR() { - ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); + Security security = new Security("P f iz e r I n c. Re g i s te r ed S ha r e s DL - , 0 5", CurrencyUnit.EUR); + security.setIsin("US7170811035"); + security.setWkn("852009"); + + Client client = new Client(); + client.addSecurity(security); + + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(client); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "SteuermitteilungDividende11.txt"), + List results = extractor.extract( + PDFInputFile.loadTestCase(getClass(), "Dividende21.txt", "SteuerbehandlungVonDividende21.txt"), errors); assertThat(errors, empty()); - assertThat(results.size(), is(2)); + assertThat(countSecurities(results), is(0L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(1)); new AssertImportActions().check(results, CurrencyUnit.EUR); - // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("CA8911021050")); - assertThat(security.getWkn(), is("914305")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("TOROMONT INDS LTD.")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); - // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); - - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2021-01-07T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(34))); - assertThat(transaction.getSource(), is("SteuermitteilungDividende11.txt")); - assertNull(transaction.getNote()); - - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(5.03)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(6.71)))); - assertThat(transaction.getUnitSum(Unit.Type.TAX), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(2.64 / 1.570200)))); - assertThat(transaction.getUnitSum(Unit.Type.FEE), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); + assertThat(results, hasItem(dividend( // + hasDate("2023-09-07T00:00"), hasShares(300.000), // + hasSource("Dividende21.txt; SteuerbehandlungVonDividende21.txt"), // + hasNote("Ref.-Nr.: 22IJUON6JHE000NY | Quartalsdividende"), // + hasAmount("EUR", 85.04), hasGrossValue("EUR", 114.21), // + hasTaxes("EUR", (114.21 - 97.08) + 11.42 + 0.62), hasFees("EUR", 0.00), // + check(tx -> { + CheckCurrenciesAction c = new CheckCurrenciesAction(); + Account account = new Account(); + account.setCurrencyCode(CurrencyUnit.EUR); + Status s = c.process((AccountTransaction) tx, account); + assertThat(s, is(Status.OK_STATUS)); + })))); } @Test - public void testSteuermitteilungDividende12() + public void testDividende21MitSteuerbehandlungVonDividende21_SourceFilesReversed() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "SteuermitteilungDividende12.txt"), + List results = extractor.extract( + PDFInputFile.loadTestCase(getClass(), "SteuerbehandlungVonDividende21.txt", "Dividende21.txt"), errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(2)); - new AssertImportActions().check(results, CurrencyUnit.USD); + new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("US1912161007")); - assertThat(security.getWkn(), is("850663")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("COCA-COLA CO. DL-,25")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.USD)); + assertThat(results, hasItem(security( // + hasIsin("US7170811035"), hasWkn("852009"), hasTicker(null), // + hasName("PFIZER INC. DL-,05"), // + hasCurrencyCode("EUR")))); // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); - - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2021-07-01T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(404))); - assertThat(transaction.getSource(), is("SteuermitteilungDividende12.txt")); - assertNull(transaction.getNote()); - - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.USD, Values.Amount.factorize(126.32)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.USD, Values.Amount.factorize(169.68)))); - assertThat(transaction.getUnitSum(Unit.Type.TAX), - is(Money.of(CurrencyUnit.USD, Values.Amount.factorize(43.36)))); - assertThat(transaction.getUnitSum(Unit.Type.FEE), - is(Money.of(CurrencyUnit.USD, Values.Amount.factorize(0.00)))); + assertThat(results, hasItem(dividend( // + hasDate("2023-09-07T00:00"), hasShares(300.000), // + hasSource("Dividende21.txt; SteuerbehandlungVonDividende21.txt"), // + hasNote("Ref.-Nr.: 22IJUON6JHE000NY | Quartalsdividende"), // + hasAmount("EUR", 85.04), hasGrossValue("EUR", 114.21), // + hasTaxes("EUR", (114.21 - 97.08) + 11.42 + 0.62), hasFees("EUR", 0.00)))); } @Test - public void testSteuermitteilungDividende13() + public void testDividende21MitSteuerbehandlungVonDividende21WithSecurityInEUR_SourceFilesReversed() { - ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); + Security security = new Security("P f iz e r I n c. Re g i s te r ed S ha r e s DL - , 0 5", CurrencyUnit.EUR); + security.setIsin("US7170811035"); + security.setWkn("852009"); + + Client client = new Client(); + client.addSecurity(security); + + ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(client); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "SteuermitteilungDividende13.txt"), + List results = extractor.extract( + PDFInputFile.loadTestCase(getClass(), "SteuerbehandlungVonDividende21.txt", "Dividende21.txt"), errors); assertThat(errors, empty()); - assertThat(results.size(), is(2)); + assertThat(countSecurities(results), is(0L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(1)); new AssertImportActions().check(results, CurrencyUnit.EUR); - // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("DE0005790430")); - assertThat(security.getWkn(), is("579043")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("FUCHS PETROL.SE VZO O.N.")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); - // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); - - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2018-05-11T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(0.541))); - assertThat(transaction.getSource(), is("SteuermitteilungDividende13.txt")); - assertNull(transaction.getNote()); - - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.49)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.49)))); - 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(results, hasItem(dividend( // + hasDate("2023-09-07T00:00"), hasShares(300.000), // + hasSource("Dividende21.txt; SteuerbehandlungVonDividende21.txt"), // + hasNote("Ref.-Nr.: 22IJUON6JHE000NY | Quartalsdividende"), // + hasAmount("EUR", 85.04), hasGrossValue("EUR", 114.21), // + hasTaxes("EUR", (114.21 - 97.08) + 11.42 + 0.62), hasFees("EUR", 0.00), // + check(tx -> { + CheckCurrenciesAction c = new CheckCurrenciesAction(); + Account account = new Account(); + account.setCurrencyCode(CurrencyUnit.EUR); + Status s = c.process((AccountTransaction) tx, account); + assertThat(s, is(Status.OK_STATUS)); + })))); } @Test - public void testSteuermitteilungDividende14() + public void testDividende22() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "SteuermitteilungDividende14.txt"), - errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende22.txt"), errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(2)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("IE00B0M63284")); - assertThat(security.getWkn(), is("A0HGV5")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("IS EUR.PROP.YI.U.ETF EOD")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + assertThat(results, hasItem(security( // + hasIsin("BRPETRACNPR6"), hasWkn("899019"), hasTicker(null), // + hasName("P et r o le o B r as i l ei ro S . A . R eg . P re fe r r e d Sh ar e s o .N ."), // + hasCurrencyCode("EUR")))); // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); - - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2019-12-27T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(15.558))); - assertThat(transaction.getSource(), is("SteuermitteilungDividende14.txt")); - assertNull(transaction.getNote()); - - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.98)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.99)))); - assertThat(transaction.getUnitSum(Unit.Type.TAX), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.01)))); - assertThat(transaction.getUnitSum(Unit.Type.FEE), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); + assertThat(results, hasItem(dividend( // + hasDate("2008-01-29T00:00"), hasShares(300.000), // + hasSource("Dividende22.txt"), // + hasNote("Zwischendividende"), // + hasAmount("EUR", 56.07), hasGrossValue("EUR", 56.07 + 8.41), // + hasTaxes("EUR", 8.41), hasFees("EUR", 0.00)))); } @Test - public void testSteuermitteilungDividende15() + public void testDividende23() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "SteuermitteilungDividende15.txt"), - errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende23.txt"), errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(2)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("DE000ETF7011")); - assertThat(security.getWkn(), is("ETF701")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("CS VERMOEG.STRATE.U.ETF I")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + assertThat(results, hasItem(security( // + hasIsin("DE0005933956"), hasWkn("593395"), hasTicker(null), // + hasName("iS ha r es D J E U R O S TO X X 5 0 ( D E) I n h a b er -A n t ei l e"), // + hasCurrencyCode("EUR")))); // check dividends transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); - - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); - - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2018-10-31T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(0.088))); - assertThat(transaction.getSource(), is("SteuermitteilungDividende15.txt")); - assertNull(transaction.getNote()); - - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.05)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.06)))); - assertThat(transaction.getUnitSum(Unit.Type.TAX), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.01)))); - assertThat(transaction.getUnitSum(Unit.Type.FEE), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); + assertThat(results, hasItem(dividend( // + hasDate("2008-12-15T00:00"), hasShares(240.000), // + hasSource("Dividende23.txt"), // + hasNote(null), // + hasAmount("EUR", 49.92), hasGrossValue("EUR", 49.92), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); } @Test - public void testDividendeWithTaxTreatmentForDividende01() + public void testDividende24() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende12.txt", "SteuermitteilungDividende09.txt"), errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende24.txt"), errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(2)); new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("DE0008404005")); - assertThat(security.getWkn(), is("840400")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("Al l i an z S E v i n k . N am en s - Ak t ie n o . N .")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); - - List items = results.stream() - .filter(i -> i instanceof TransactionItem && i.getSubject() instanceof AccountTransaction) - .map(i -> (AccountTransaction) i.getSubject()).collect(Collectors.toList()); - - assertThat(items.size(), is(1)); + assertThat(results, hasItem(security( // + hasIsin("DE0005557508"), hasWkn("555750"), hasTicker(null), // + hasName("D eu t sc h e T el e k o m A G N am e n s - A kt i e n o. N ."), // + hasCurrencyCode("EUR")))); // check dividends transaction - Optional oTransaction = items.stream() - .filter(t -> AccountTransaction.Type.DIVIDENDS.equals(t.getType())).findFirst(); - assertThat(oTransaction.isPresent(), is(true)); - AccountTransaction transaction = oTransaction.orElseThrow(IllegalArgumentException::new); - - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); - - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2018-05-14T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(16))); - assertThat(transaction.getSource(), is("SteuermitteilungDividende09.txt; Dividende12.txt")); - assertNull(transaction.getNote()); - - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(128.00)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(128.00)))); - 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(results, hasItem(dividend( // + hasDate("2008-05-16T00:00"), hasShares(166.000), // + hasSource("Dividende24.txt"), // + hasNote(null), // + hasAmount("EUR", 102.16), hasGrossValue("EUR", 129.48), // + hasTaxes("EUR", 25.90 + 1.42), hasFees("EUR", 0.00)))); } @Test - public void testDividendeWithTaxTreatmentReversedForDividende01() + public void testDividende25() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "SteuermitteilungDividende09.txt", "Dividende12.txt"), errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende25.txt"), errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("DE0008404005")); - assertThat(security.getWkn(), is("840400")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("ALLIANZ SE NA O.N.")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); - - List items = results.stream() - .filter(i -> i instanceof TransactionItem && i.getSubject() instanceof AccountTransaction) - .map(i -> (AccountTransaction) i.getSubject()).collect(Collectors.toList()); - - assertThat(items.size(), is(1)); - - // check dividends transaction - Optional oTransaction = items.stream() - .filter(t -> AccountTransaction.Type.DIVIDENDS.equals(t.getType())).findFirst(); - assertThat(oTransaction.isPresent(), is(true)); - AccountTransaction transaction = oTransaction.orElseThrow(IllegalArgumentException::new); - - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); - - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2018-05-14T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(16))); - assertThat(transaction.getSource(), is("Dividende12.txt; SteuermitteilungDividende09.txt")); - assertNull(transaction.getNote()); - - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(128.00)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(128.00)))); - 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(results, hasItem(security( // + hasIsin("FR0010405431"), hasWkn("LYX0BF"), hasTicker(null), // + hasName("Ly x o r F T S E A T HE X L a . C ap U. ET F A ct i o ns au P o rt e u r o . N ."), // + hasCurrencyCode("EUR")))); + + // check cancellation transaction + assertThat(results, hasItem(withFailureMessage( // + Messages.MsgErrorTransactionTypeNotSupported, // + dividend( // + hasDate("2017-08-31T00:00"), hasShares(3100.000), // + hasSource("Dividende25.txt"), // + hasNote(null), // + hasAmount("EUR", 0.00), hasGrossValue("EUR", 0.00), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))))); } @Test - public void testDividendeWithTaxTreatmentForDividende02() + public void testVorabpauschaleSteuerbehandlung01() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende13.txt", "SteuermitteilungDividende10.txt"), errors); + List results = extractor + .extract(PDFInputFile.loadTestCase(getClass(), "VorabpauschaleSteuerbehandlung01.txt"), errors); assertThat(errors, empty()); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("US1266501006")); - assertThat(security.getWkn(), is("859034")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("C VS H e a lt h Co r p. R eg is te r ed S h a re s D L -, 0 1")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.USD)); - - List items = results.stream() - .filter(i -> i instanceof TransactionItem && i.getSubject() instanceof AccountTransaction) - .map(i -> (AccountTransaction) i.getSubject()).collect(Collectors.toList()); - - assertThat(items.size(), is(1)); - - // check dividends transaction - Optional oTransaction = items.stream() - .filter(t -> AccountTransaction.Type.DIVIDENDS.equals(t.getType())).findFirst(); - assertThat(oTransaction.isPresent(), is(true)); - AccountTransaction transaction = oTransaction.orElseThrow(IllegalArgumentException::new); - - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); - - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2020-11-04T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(32))); - assertThat(transaction.getSource(), is("SteuermitteilungDividende10.txt; Dividende13.txt")); - assertThat(transaction.getNote(), is("Quartalsdividende")); - - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(10.19)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(13.70)))); - assertThat(transaction.getUnitSum(Unit.Type.TAX), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(3.51)))); - assertThat(transaction.getUnitSum(Unit.Type.FEE), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); + assertThat(results, hasItem(security( // + hasIsin("IE00BP3QZJ36"), hasWkn("A12ATD"), hasTicker(null), // + hasName("ISIV-MSCI FRAN. U.ETF EOA"), // + hasCurrencyCode("EUR")))); + + // check taxes transaction + assertThat(results, hasItem(taxes( // + hasDate("2020-01-14T00:00"), hasShares(11.486), // + hasSource("VorabpauschaleSteuerbehandlung01.txt"), // + hasNote("Vorabpauschale | Ref.-Nr.: 08IFLCBPY1000J7B"), // + hasAmount("EUR", 0.09), hasGrossValue("EUR", 0.09), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); } @Test - public void testDividendeWithTaxTreatmentReversedForDividende02() + public void testVorabpauschaleSteuerbehandlung02() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "SteuermitteilungDividende10.txt", "Dividende13.txt"), errors); + List results = extractor + .extract(PDFInputFile.loadTestCase(getClass(), "VorabpauschaleSteuerbehandlung02.txt"), errors); assertThat(errors, empty()); - assertThat(results.size(), is(2)); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(2L)); + assertThat(results.size(), is(3)); + new AssertImportActions().check(results, CurrencyUnit.EUR); // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("US1266501006")); - assertThat(security.getWkn(), is("859034")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("CVS HEALTH CORP. DL-,01")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); - - List items = results.stream() - .filter(i -> i instanceof TransactionItem && i.getSubject() instanceof AccountTransaction) - .map(i -> (AccountTransaction) i.getSubject()).collect(Collectors.toList()); - - assertThat(items.size(), is(1)); - - // check dividends transaction - Optional oTransaction = items.stream() - .filter(t -> AccountTransaction.Type.DIVIDENDS.equals(t.getType())).findFirst(); - assertThat(oTransaction.isPresent(), is(true)); - AccountTransaction transaction = oTransaction.orElseThrow(IllegalArgumentException::new); - - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); - - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2020-11-04T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(32))); - assertThat(transaction.getSource(), is("SteuermitteilungDividende10.txt; Dividende13.txt")); - assertThat(transaction.getNote(), is("Quartalsdividende")); - - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(10.19)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(13.70)))); - assertThat(transaction.getUnitSum(Unit.Type.TAX), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(3.51)))); - assertThat(transaction.getUnitSum(Unit.Type.FEE), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); + assertThat(results, hasItem(security( // + hasIsin("LU0779800910"), hasWkn("DBX0M2"), hasTicker(null), // + hasName("XTR.CSI300 SWAP 1C"), // + hasCurrencyCode("EUR")))); + + // check cancellation transaction + assertThat(results, hasItem(withFailureMessage( // + Messages.MsgErrorTransactionTypeNotSupported, // + taxes( // + hasDate("2021-01-04T00:00"), hasShares(2432.087), // + hasSource("VorabpauschaleSteuerbehandlung02.txt"), // + hasNote("Vorabpauschale | Ref.-Nr.: 2EIGW2KNYMC00HC8"), // + hasAmount("EUR", 0.00), hasGrossValue("EUR", 0.00), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))))); + + // check cancellation transaction + assertThat(results, hasItem(withFailureMessage( // + Messages.MsgErrorTransactionTypeNotSupported, // + taxes( // + hasDate("2021-01-04T00:00"), hasShares(2432.087), // + hasSource("VorabpauschaleSteuerbehandlung02.txt"), // + hasNote("Vorabpauschale | Ref.-Nr.: 2EIGW2KNYMC00HC8"), // + hasAmount("EUR", 0.00), hasGrossValue("EUR", 0.00), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))))); } @Test - public void testDividendeWithTaxTreatmentForDividende03() + public void testFinanzreport01() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende14.txt", "SteuermitteilungDividende11.txt"), errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Finanzreport01.txt"), errors); assertThat(errors, empty()); - assertThat(results.size(), is(2)); + assertThat(countSecurities(results), is(0L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(24L)); + assertThat(results.size(), is(24)); + new AssertImportActions().check(results, CurrencyUnit.EUR); - // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("CA8911021050")); - assertThat(security.getWkn(), is("914305")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("To r o m on t I n du st r i e s L t d . R eg is te r ed S h ar e s o .N .")); - assertThat(security.getCurrencyCode(), is("CAD")); + // assert transaction + assertThat(results, hasItem(removal(hasDate("2018-09-04"), hasAmount("EUR", 1500.00), // + hasSource("Finanzreport01.txt"), hasNote("Lastschrift")))); - List items = results.stream() - .filter(i -> i instanceof TransactionItem && i.getSubject() instanceof AccountTransaction) - .map(i -> (AccountTransaction) i.getSubject()).collect(Collectors.toList()); + // assert transaction + assertThat(results, hasItem(removal(hasDate("2018-09-05"), hasAmount("EUR", 300.00), // + hasSource("Finanzreport01.txt"), hasNote("Übertrag")))); - assertThat(items.size(), is(1)); + // assert transaction + assertThat(results, hasItem(removal(hasDate("2017-10-30"), hasAmount("EUR", 50.00), // + hasSource("Finanzreport01.txt"), hasNote("Auszahlung")))); - // check dividends transaction - Optional oTransaction = items.stream() - .filter(t -> AccountTransaction.Type.DIVIDENDS.equals(t.getType())).findFirst(); - assertThat(oTransaction.isPresent(), is(true)); - AccountTransaction transaction = oTransaction.orElseThrow(IllegalArgumentException::new); + // assert transaction + assertThat(results, hasItem(removal(hasDate("2018-03-26"), hasAmount("EUR", 9.00), // + hasSource("Finanzreport01.txt"), hasNote("Kartenverfügung Kartenzahlung")))); - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); + // assert transaction + assertThat(results, hasItem(removal(hasDate("2018-09-17"), hasAmount("EUR", 68.88), // + hasSource("Finanzreport01.txt"), hasNote("Lastschrift")))); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2021-01-07T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(34))); - assertThat(transaction.getSource(), is("SteuermitteilungDividende11.txt; Dividende14.txt")); - assertThat(transaction.getNote(), is("Quartalsdividende")); + // assert transaction + assertThat(results, hasItem(removal(hasDate("2018-09-14"), hasAmount("EUR", 10000.00), // + hasSource("Finanzreport01.txt"), hasNote("Übertrag auf Girokonto")))); - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(5.03)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(6.71)))); - assertThat(transaction.getUnitSum(Unit.Type.TAX), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(1.68)))); - assertThat(transaction.getUnitSum(Unit.Type.FEE), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); - } + // assert transaction + assertThat(results, hasItem(removal(hasDate("2019-03-26"), hasAmount("EUR", 100.00), // + hasSource("Finanzreport01.txt"), hasNote("Übertrag auf Girokonto")))); - @Test - public void testDividendeWithTaxTreatmentReversedForDividende03() - { - ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); + // assert transaction + assertThat(results, hasItem(removal(hasDate("2018-09-17"), hasAmount("EUR", 2.18), // + hasSource("Finanzreport01.txt"), hasNote("Visa-Umsatz")))); - List errors = new ArrayList<>(); + // assert transaction + assertThat(results, hasItem(removal(hasDate("2019-09-28"), hasAmount("EUR", 3.94), // + hasSource("Finanzreport01.txt"), hasNote("Visa-Umsatz")))); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "SteuermitteilungDividende11.txt", "Dividende14.txt"), errors); + // assert transaction + assertThat(results, hasItem(removal(hasDate("2019-10-24"), hasAmount("EUR", 19.21), // + hasSource("Finanzreport01.txt"), hasNote("Barauszahlung")))); - assertThat(errors, empty()); - assertThat(results.size(), is(2)); + // assert transaction + assertThat(results, hasItem(removal(hasDate("2018-09-14"), hasAmount("EUR", 10000.00), // + hasSource("Finanzreport01.txt"), hasNote("Übertrag auf Girokonto")))); - // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("CA8911021050")); - assertThat(security.getWkn(), is("914305")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("TOROMONT INDS LTD.")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + // assert transaction + assertThat(results, hasItem(deposit(hasDate("2018-09-21"), hasAmount("EUR", 20.00), // + hasSource("Finanzreport01.txt"), hasNote("Übertrag")))); - List items = results.stream() - .filter(i -> i instanceof TransactionItem && i.getSubject() instanceof AccountTransaction) - .map(i -> (AccountTransaction) i.getSubject()).collect(Collectors.toList()); + // assert transaction + assertThat(results, hasItem(deposit(hasDate("2018-07-30"), hasAmount("EUR", 2000.00), // + hasSource("Finanzreport01.txt"), hasNote("Übertrag auf Tagesgeld PLUS-Konto")))); - assertThat(items.size(), is(1)); + // assert transaction + assertThat(results, hasItem(deposit(hasDate("2018-09-05"), hasAmount("EUR", 300.00), // + hasSource("Finanzreport01.txt"), hasNote("Übertrag auf Visa-Karte")))); - // check dividends transaction - Optional oTransaction = items.stream() - .filter(t -> AccountTransaction.Type.DIVIDENDS.equals(t.getType())).findFirst(); - assertThat(oTransaction.isPresent(), is(true)); - AccountTransaction transaction = oTransaction.orElseThrow(IllegalArgumentException::new); + // assert transaction + assertThat(results, hasItem(deposit(hasDate("2019-07-22"), hasAmount("EUR", 71.93), // + hasSource("Finanzreport01.txt"), hasNote("Gutschrift")))); + + // assert transaction + assertThat(results, hasItem(deposit(hasDate("2020-01-01"), hasAmount("EUR", 5432.10), // + hasSource("Finanzreport01.txt"), hasNote("Bargeldeinzahlung Karte")))); + + // assert transaction + assertThat(results, hasItem(fee(hasDate("2014-09-29"), hasAmount("EUR", 5.90), // + hasSource("Finanzreport01.txt"), hasNote("Gebühr Barauszahlung")))); + + // assert transaction + assertThat(results, hasItem(fee(hasDate("2018-09-05"), hasAmount("EUR", 5.90), // + hasSource("Finanzreport01.txt"), hasNote("Entgelte")))); + + // assert transaction + assertThat(results, hasItem(fee(hasDate("2015-10-22"), hasAmount("EUR", 5.90), // + hasSource("Finanzreport01.txt"), hasNote("Gebühren/Spesen")))); + + // assert transaction + assertThat(results, hasItem(fee(hasDate("2018-07-27"), hasAmount("EUR", 0.45), // + hasSource("Finanzreport01.txt"), hasNote("Auslandsentgelt")))); - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); + // assert transaction + assertThat(results, hasItem(fee(hasDate("2018-09-28"), hasAmount("EUR", 0.70), // + hasSource("Finanzreport01.txt"), hasNote("Versandpauschale")))); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2021-01-07T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(34))); - assertThat(transaction.getSource(), is("Dividende14.txt; SteuermitteilungDividende11.txt")); - assertThat(transaction.getNote(), is("Quartalsdividende")); + // assert transaction + assertThat(results, hasItem(interestCharge(hasDate("2015-12-31"), hasAmount("EUR", 0.07), // + hasSource("Finanzreport01.txt"), hasNote("Kontoabschluss Abschluss Zinsen")))); - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(5.03)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(6.71)))); - assertThat(transaction.getUnitSum(Unit.Type.TAX), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(1.68)))); - assertThat(transaction.getUnitSum(Unit.Type.FEE), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); + // assert transaction + assertThat(results, hasItem(interest(hasDate("2018-09-28"), hasAmount("EUR", 0.14), // + hasSource("Finanzreport01.txt"), hasNote("Kontoabschluss Abschluss Zinsen")))); + + // assert transaction + assertThat(results, hasItem(taxes(hasDate("2018-09-28"), hasAmount("EUR", 0.05), // + hasSource("Finanzreport01.txt"), hasNote("Kapitalertragsteuer")))); } @Test - public void testDividendeWithTaxTreatmentForDividende04() + public void testFinanzreport02() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Dividende17.txt", "SteuermitteilungDividende16.txt"), errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Finanzreport02.txt"), errors); assertThat(errors, empty()); - assertThat(results.size(), is(2)); + assertThat(countSecurities(results), is(0L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(11L)); + assertThat(results.size(), is(11)); + new AssertImportActions().check(results, CurrencyUnit.EUR); - // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("IE0032523478")); - assertThat(security.getWkn(), is("778928")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("i Sh s - E O C o rp Bd La r . Ca p U . ET F R e g i s te r e d S ha r e s o . N.")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + // assert transaction + assertThat(results, hasItem(removal(hasDate("2013-11-18"), hasAmount("EUR", 20.00), // + hasSource("Finanzreport02.txt"), hasNote("Übertrag")))); - List items = results.stream() - .filter(i -> i instanceof TransactionItem && i.getSubject() instanceof AccountTransaction) - .map(i -> (AccountTransaction) i.getSubject()).collect(Collectors.toList()); + // assert transaction + assertThat(results, hasItem(removal(hasDate("2013-11-28"), hasAmount("EUR", 20.00), // + hasSource("Finanzreport02.txt"), hasNote("Übertrag")))); - assertThat(items.size(), is(1)); + // assert transaction + assertThat(results, hasItem(removal(hasDate("2013-12-02"), hasAmount("EUR", 500.00), // + hasSource("Finanzreport02.txt"), hasNote("Übertrag")))); - // check dividends transaction - Optional oTransaction = items.stream() - .filter(t -> AccountTransaction.Type.DIVIDENDS.equals(t.getType())).findFirst(); - assertThat(oTransaction.isPresent(), is(true)); - AccountTransaction transaction = oTransaction.orElseThrow(IllegalArgumentException::new); + // assert transaction + assertThat(results, hasItem(removal(hasDate("2013-11-30"), hasAmount("EUR", 12.31), // + hasSource("Finanzreport02.txt"), hasNote("Visa-Umsatz")))); - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); + // assert transaction + assertThat(results, hasItem(deposit(hasDate("2013-11-26"), hasAmount("EUR", 810.00), // + hasSource("Finanzreport02.txt"), hasNote("Übertrag")))); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2021-12-31T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(81.921))); - assertThat(transaction.getSource(), is("SteuermitteilungDividende16.txt; Dividende17.txt")); - assertNull(transaction.getNote()); + // assert transaction + assertThat(results, hasItem(deposit(hasDate("2013-11-26"), hasAmount("EUR", 810.00), // + hasSource("Finanzreport02.txt"), hasNote("Übertrag")))); - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(13.25)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(18.39)))); - assertThat(transaction.getUnitSum(Unit.Type.TAX), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(4.49 + 0.24 + 0.41)))); - assertThat(transaction.getUnitSum(Unit.Type.FEE), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); + // assert transaction + assertThat(results, hasItem(deposit(hasDate("2013-11-27"), hasAmount("EUR", 200.00), // + hasSource("Finanzreport02.txt"), hasNote("Übertrag")))); + + // assert transaction + assertThat(results, hasItem(deposit(hasDate("2013-11-18"), hasAmount("EUR", 20.00), // + hasSource("Finanzreport02.txt"), hasNote("Übertrag auf Visa-Karte")))); + + // assert transaction + assertThat(results, hasItem(deposit(hasDate("2013-11-18"), hasAmount("EUR", 20.00), // + hasSource("Finanzreport02.txt"), hasNote("Übertrag auf Visa-Karte")))); + + // assert transaction + assertThat(results, hasItem(deposit(hasDate("2013-12-02"), hasAmount("EUR", 500.00), // + hasSource("Finanzreport02.txt"), hasNote("Übertrag auf Visa-Karte")))); + + // assert transaction + assertThat(results, hasItem(fee(hasDate("2013-12-08"), hasAmount("EUR", 5.90), // + hasSource("Finanzreport02.txt"), hasNote("Gebühren/Spesen")))); } @Test - public void testDividendeWithTaxTreatmentReversedForDividende04() + public void testFinanzreport03() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "SteuermitteilungDividende16.txt", "Dividende17.txt"), errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Finanzreport03.txt"), errors); assertThat(errors, empty()); - assertThat(results.size(), is(2)); + assertThat(countSecurities(results), is(0L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(13L)); + assertThat(results.size(), is(13)); + new AssertImportActions().check(results, CurrencyUnit.EUR); - // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("IE0032523478")); - assertThat(security.getWkn(), is("778928")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("ISHS-EO C.BD L.C.U.ETFEOD")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + // assert transaction + assertThat(results, hasItem(removal(hasDate("2017-06-05"), hasAmount("EUR", 49.66), // + hasSource("Finanzreport03.txt"), hasNote("Übertrag")))); - List items = results.stream() - .filter(i -> i instanceof TransactionItem && i.getSubject() instanceof AccountTransaction) - .map(i -> (AccountTransaction) i.getSubject()).collect(Collectors.toList()); + // assert transaction + assertThat(results, hasItem(removal(hasDate("2017-06-27"), hasAmount("EUR", 22.89), // + hasSource("Finanzreport03.txt"), hasNote("Lastschrift")))); - assertThat(items.size(), is(1)); + // assert transaction + assertThat(results, hasItem(removal(hasDate("2017-06-28"), hasAmount("EUR", 264.99), // + hasSource("Finanzreport03.txt"), hasNote("Lastschrift")))); - // check dividends transaction - Optional oTransaction = items.stream() - .filter(t -> AccountTransaction.Type.DIVIDENDS.equals(t.getType())).findFirst(); - assertThat(oTransaction.isPresent(), is(true)); - AccountTransaction transaction = oTransaction.orElseThrow(IllegalArgumentException::new); + // assert transaction + assertThat(results, hasItem(removal(hasDate("2017-06-29"), hasAmount("EUR", 199.00), // + hasSource("Finanzreport03.txt"), hasNote("Lastschrift")))); + + // assert transaction + assertThat(results, hasItem(removal(hasDate("2017-07-03"), hasAmount("EUR", 29.90), // + hasSource("Finanzreport03.txt"), hasNote("Lastschrift")))); + + // assert transaction + assertThat(results, hasItem(removal(hasDate("2017-07-03"), hasAmount("EUR", 9.14), // + hasSource("Finanzreport03.txt"), hasNote("Lastschrift")))); + + // assert transaction + assertThat(results, hasItem(removal(hasDate("2017-07-03"), hasAmount("EUR", 8.65), // + hasSource("Finanzreport03.txt"), hasNote("Lastschrift")))); + + // assert transaction + assertThat(results, hasItem(removal(hasDate("2017-06-21"), hasAmount("EUR", 8.98), // + hasSource("Finanzreport03.txt"), hasNote("Visa-Umsatz")))); + + // assert transaction + assertThat(results, hasItem(deposit(hasDate("2017-06-28"), hasAmount("EUR", 816.00), // + hasSource("Finanzreport03.txt"), hasNote("Übertrag")))); - assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS)); + // assert transaction + assertThat(results, hasItem(deposit(hasDate("2017-06-28"), hasAmount("EUR", 816.00), // + hasSource("Finanzreport03.txt"), hasNote("Übertrag")))); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2021-12-31T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(81.921))); - assertThat(transaction.getSource(), is("SteuermitteilungDividende16.txt; Dividende17.txt")); - assertNull(transaction.getNote()); + // assert transaction + assertThat(results, hasItem(deposit(hasDate("2017-06-28"), hasAmount("EUR", 250.00), // + hasSource("Finanzreport03.txt"), hasNote("Übertrag")))); - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(13.25)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(18.39)))); - assertThat(transaction.getUnitSum(Unit.Type.TAX), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(4.49 + 0.24 + 0.41)))); - assertThat(transaction.getUnitSum(Unit.Type.FEE), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00)))); + // assert transaction + assertThat(results, hasItem(deposit(hasDate("2017-06-30"), hasAmount("EUR", 9.14), // + hasSource("Finanzreport03.txt"), hasNote("Visa-Kartenabrechnung")))); + + // assert transaction + assertThat(results, hasItem(fee(hasDate("2017-06-22"), hasAmount("EUR", 0.16), // + hasSource("Finanzreport03.txt"), hasNote("Auslandsentgelt")))); } @Test - public void testVorabsteuerpauschale01() + public void testFinanzreport04() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Vorabpauschale01.txt"), errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Finanzreport04.txt"), errors); assertThat(errors, empty()); - assertThat(results.size(), is(2)); - new AssertImportActions().check(results, CurrencyUnit.EUR); + assertThat(countSecurities(results), is(0L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(7L)); + assertThat(results.size(), is(7)); + // new AssertImportActions().check(results, CurrencyUnit.EUR); <-- + // Multiple currencies - // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertThat(security.getIsin(), is("IE00BP3QZJ36")); - assertThat(security.getWkn(), is("A12ATD")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("ISIV-MSCI FRAN. U.ETF EOA")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + // assert transaction + assertThat(results, hasItem(removal(hasDate("2017-06-14"), hasAmount("EUR", 501.00), // + hasSource("Finanzreport04.txt"), hasNote("Kontoübertrag")))); + + // assert transaction + assertThat(results, hasItem(removal(hasDate("2017-06-13"), hasAmount("EUR", 2450.87), // + hasSource("Finanzreport04.txt"), hasNote("Übertrag auf Girokonto")))); - // check tax transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); + // assert transaction + assertThat(results, hasItem(removal(hasDate("2017-06-13"), hasAmount("EUR", 2450.87), // + hasSource("Finanzreport04.txt"), hasNote("Übertrag auf Girokonto")))); - assertThat(transaction.getType(), is(AccountTransaction.Type.TAXES)); + // assert transaction + assertThat(results, hasItem(deposit(hasDate("2017-06-13"), hasAmount("EUR", 9.07), // + hasSource("Finanzreport04.txt"), hasNote("Gutschrift aus Bonus-Sparen")))); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2020-01-14T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(11.486))); - assertThat(transaction.getSource(), is("Vorabpauschale01.txt")); - assertNull(transaction.getNote()); + // assert transaction + assertThat(results, hasItem(deposit(hasDate("2017-06-09"), hasAmount("EUR", 1200.00), // + hasSource("Finanzreport04.txt"), hasNote("Übertrag")))); - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.09)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.09)))); - 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)))); + // assert transaction + assertThat(results, hasItem(deposit(hasDate("2017-06-14"), hasAmount("USD", 554.83), // + hasSource("Finanzreport04.txt"), hasNote("Kontoübertrag")))); + + // assert transaction + assertThat(results, hasItem(interest(hasDate("2017-06-30"), hasAmount("EUR", 0.02), // + hasSource("Finanzreport04.txt"), hasNote("Kontoabschluss Abschluss Zinsen")))); } @Test - public void testVerwahrentgelt01() + public void testFinanzreport05() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Verwahrentgeld01.txt"), errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Finanzreport05.txt"), errors); assertThat(errors, empty()); - assertThat(results.size(), is(2)); + assertThat(countSecurities(results), is(0L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(17L)); + assertThat(results.size(), is(17)); new AssertImportActions().check(results, CurrencyUnit.EUR); - // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertNull(security.getIsin()); - assertThat(security.getWkn(), is("A0S9GB")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("Xetra Gold")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + // assert transaction + assertThat(results, hasItem(removal(hasDate("2016-08-01"), hasAmount("EUR", 894.30), // + hasSource("Finanzreport05.txt"), hasNote("Lastschrift")))); - // check fee transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); + // assert transaction + assertThat(results, hasItem(removal(hasDate("2016-07-04"), hasAmount("EUR", 0.42), // + hasSource("Finanzreport05.txt"), hasNote("Wechselgeld-Sparen")))); - assertThat(transaction.getType(), is(AccountTransaction.Type.FEES)); + // assert transaction + assertThat(results, hasItem(removal(hasDate("2016-07-04"), hasAmount("EUR", 188.58), // + hasSource("Finanzreport05.txt"), hasNote("Barauszahlung")))); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2020-01-06T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(0))); - assertThat(transaction.getSource(), is("Verwahrentgeld01.txt")); - assertNull(transaction.getNote()); + // assert transaction + assertThat(results, hasItem(removal(hasDate("2016-07-08"), hasAmount("EUR", 0.36), // + hasSource("Finanzreport05.txt"), hasNote("Wechselgeld-Sparen")))); - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.01)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.01)))); - 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)))); - } + // assert transaction + assertThat(results, hasItem(removal(hasDate("2016-07-08"), hasAmount("EUR", 124.64), // + hasSource("Finanzreport05.txt"), hasNote("Barauszahlung")))); - @Test - public void testVerwahrentgelt02() - { - ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); + // assert transaction + assertThat(results, hasItem(removal(hasDate("2016-07-13"), hasAmount("EUR", 0.30), // + hasSource("Finanzreport05.txt"), hasNote("Wechselgeld-Sparen")))); - List errors = new ArrayList<>(); + // assert transaction + assertThat(results, hasItem(removal(hasDate("2016-07-12"), hasAmount("EUR", 0.30), // + hasSource("Finanzreport05.txt"), hasNote("Wechselgeld-Sparen")))); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Verwahrentgeld02.txt"), errors); + // assert transaction + assertThat(results, hasItem(removal(hasDate("2016-07-13"), hasAmount("EUR", 191.70), // + hasSource("Finanzreport05.txt"), hasNote("Barauszahlung")))); - assertThat(errors, empty()); - assertThat(results.size(), is(2)); - new AssertImportActions().check(results, CurrencyUnit.EUR); + // assert transaction + assertThat(results, hasItem(removal(hasDate("2016-07-22"), hasAmount("EUR", 0.89), // + hasSource("Finanzreport05.txt"), hasNote("Wechselgeld-Sparen")))); - // check security - Security security = results.stream().filter(SecurityItem.class::isInstance).findFirst() - .orElseThrow(IllegalArgumentException::new).getSecurity(); - assertNull(security.getIsin()); - assertThat(security.getWkn(), is("A0S9GB")); - assertNull(security.getTickerSymbol()); - assertThat(security.getName(), is("Xetra Gold")); - assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR)); + // assert transaction + assertThat(results, hasItem(removal(hasDate("2016-07-22"), hasAmount("EUR", 129.11), // + hasSource("Finanzreport05.txt"), hasNote("Barauszahlung")))); - // check fee transaction - AccountTransaction transaction = (AccountTransaction) results.stream().filter(TransactionItem.class::isInstance) - .findFirst().orElseThrow(IllegalArgumentException::new).getSubject(); + // assert transaction + assertThat(results, hasItem(removal(hasDate("2016-07-28"), hasAmount("EUR", 0.70), // + hasSource("Finanzreport05.txt"), hasNote("Wechselgeld-Sparen")))); + + // assert transaction + assertThat(results, hasItem(removal(hasDate("2016-07-28"), hasAmount("EUR", 257.30), // + hasSource("Finanzreport05.txt"), hasNote("Barauszahlung")))); - assertThat(transaction.getType(), is(AccountTransaction.Type.FEES)); + // assert transaction + assertThat(results, hasItem(deposit(hasDate("2016-07-11"), hasAmount("EUR", 1000.00), // + hasSource("Finanzreport05.txt"), hasNote("Übertrag")))); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2019-05-06T00:00"))); - assertThat(transaction.getShares(), is(Values.Share.factorize(0))); - assertThat(transaction.getSource(), is("Verwahrentgeld02.txt")); - assertNull(transaction.getNote()); + // assert transaction + assertThat(results, hasItem(deposit(hasDate("2016-08-01"), hasAmount("EUR", 2.97), // + hasSource("Finanzreport05.txt"), hasNote("Gutschrift Wechselgeld-Sparen")))); - assertThat(transaction.getMonetaryAmount(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(123.45)))); - assertThat(transaction.getGrossValue(), - is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(123.45)))); - 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)))); + // assert transaction + assertThat(results, hasItem(deposit(hasDate("2016-07-12"), hasAmount("EUR", 191.70), // + hasSource("Finanzreport05.txt"), hasNote("Korrektur Barauszahlung")))); + + // assert transaction + assertThat(results, hasItem(deposit(hasDate("2016-07-29"), hasAmount("EUR", 894.30), // + hasSource("Finanzreport05.txt"), hasNote("Visa-Kartenabrechnung")))); } @Test - public void testFinanzreport01() + public void testFinanzreport06() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Finanzreport01.txt"), errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Finanzreport06.txt"), errors); assertThat(errors, empty()); - assertThat(results.size(), is(24)); - - // check transaction - Iterator iter = results.stream().filter(TransactionItem.class::isInstance).iterator(); - assertThat(results.stream().filter(TransactionItem.class::isInstance).count(), is(24L)); - - Item item = iter.next(); - - // assert transaction1 - AccountTransaction transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.REMOVAL)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2018-09-04T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(1500.00))); - assertThat(transaction.getSource(), is("Finanzreport01.txt")); - assertThat(transaction.getNote(), is("Lastschrift")); - - item = iter.next(); - - // assert transaction2 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.REMOVAL)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2018-09-05T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(300.00))); - assertThat(transaction.getSource(), is("Finanzreport01.txt")); - assertThat(transaction.getNote(), is("Übertrag")); - - item = iter.next(); - - // assert transaction3 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.REMOVAL)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2017-10-30T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(50.00))); - assertThat(transaction.getSource(), is("Finanzreport01.txt")); - assertThat(transaction.getNote(), is("Auszahlung")); - - item = iter.next(); - - // assert transaction4 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.REMOVAL)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2018-03-26T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(9.00))); - assertThat(transaction.getSource(), is("Finanzreport01.txt")); - assertThat(transaction.getNote(), is("Kartenverfügung Kartenzahlung")); - - item = iter.next(); - - // assert transaction5 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.REMOVAL)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2018-09-17T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(68.88))); - assertThat(transaction.getSource(), is("Finanzreport01.txt")); - assertThat(transaction.getNote(), is("Lastschrift")); - - item = iter.next(); - - // assert transaction6 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.REMOVAL)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2018-09-14T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(10000.00))); - assertThat(transaction.getSource(), is("Finanzreport01.txt")); - assertThat(transaction.getNote(), is("Übertrag auf Girokonto")); - - item = iter.next(); - - // assert transaction7 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.REMOVAL)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2019-03-26T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(100.00))); - assertThat(transaction.getSource(), is("Finanzreport01.txt")); - assertThat(transaction.getNote(), is("Übertrag auf Girokonto")); - - item = iter.next(); - - // assert transaction8 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.REMOVAL)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2018-09-17T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(2.18))); - assertThat(transaction.getSource(), is("Finanzreport01.txt")); - assertThat(transaction.getNote(), is("Visa-Umsatz")); - - item = iter.next(); - - // assert transaction9 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.REMOVAL)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2019-09-28T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(3.94))); - assertThat(transaction.getSource(), is("Finanzreport01.txt")); - assertThat(transaction.getNote(), is("Visa-Umsatz")); - - item = iter.next(); - - // assert transaction10 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.REMOVAL)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2019-10-24T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(19.21))); - assertThat(transaction.getSource(), is("Finanzreport01.txt")); - assertThat(transaction.getNote(), is("Barauszahlung")); - - item = iter.next(); - - // assert transaction11 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.DEPOSIT)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2018-09-14T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(10000.00))); - assertThat(transaction.getSource(), is("Finanzreport01.txt")); - assertThat(transaction.getNote(), is("Übertrag auf Girokonto")); - - item = iter.next(); - - // assert transaction12 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.DEPOSIT)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2018-09-21T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(20.00))); - assertThat(transaction.getSource(), is("Finanzreport01.txt")); - assertThat(transaction.getNote(), is("Übertrag")); - - item = iter.next(); - - // assert transaction13 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.DEPOSIT)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2018-07-30T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(2000.00))); - assertThat(transaction.getSource(), is("Finanzreport01.txt")); - assertThat(transaction.getNote(), is("Übertrag auf Tagesgeld PLUS-Konto")); - - item = iter.next(); - - // assert transaction14 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.DEPOSIT)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2018-09-05T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(300.00))); - assertThat(transaction.getSource(), is("Finanzreport01.txt")); - assertThat(transaction.getNote(), is("Übertrag auf Visa-Karte")); - - item = iter.next(); - - // assert transaction15 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.DEPOSIT)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2019-07-22T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(71.93))); - assertThat(transaction.getSource(), is("Finanzreport01.txt")); - assertThat(transaction.getNote(), is("Gutschrift")); - - item = iter.next(); - - // assert transaction16 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.DEPOSIT)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2020-01-01T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(5432.10))); - assertThat(transaction.getSource(), is("Finanzreport01.txt")); - assertThat(transaction.getNote(), is("Bargeldeinzahlung Karte")); - - item = iter.next(); - - // assert transaction17 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.FEES)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2014-09-29T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(5.90))); - assertThat(transaction.getSource(), is("Finanzreport01.txt")); - assertThat(transaction.getNote(), is("Gebühr Barauszahlung")); - - item = iter.next(); - - // assert transaction18 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.FEES)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2018-09-05T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(5.90))); - assertThat(transaction.getSource(), is("Finanzreport01.txt")); - assertThat(transaction.getNote(), is("Entgelte")); - - item = iter.next(); - - // assert transaction19 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.FEES)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2015-10-22T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(5.90))); - assertThat(transaction.getSource(), is("Finanzreport01.txt")); - assertThat(transaction.getNote(), is("Gebühren/Spesen")); - - item = iter.next(); - - // assert transaction20 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.FEES)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2018-07-27T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(0.45))); - assertThat(transaction.getSource(), is("Finanzreport01.txt")); - assertThat(transaction.getNote(), is("Auslandsentgelt")); - - item = iter.next(); - - // assert transaction21 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.FEES)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2018-09-28T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(0.70))); - assertThat(transaction.getSource(), is("Finanzreport01.txt")); - assertThat(transaction.getNote(), is("Versandpauschale")); - - item = iter.next(); - - // assert transaction22 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.INTEREST_CHARGE)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2015-12-31T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(0.07))); - assertThat(transaction.getSource(), is("Finanzreport01.txt")); - assertThat(transaction.getNote(), is("Kontoabschluss Abschluss Zinsen")); - - item = iter.next(); - - // assert transaction23 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.INTEREST)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2018-09-28T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(0.14))); - assertThat(transaction.getSource(), is("Finanzreport01.txt")); - assertThat(transaction.getNote(), is("Kontoabschluss Abschluss Zinsen")); - - item = iter.next(); - - // assert transaction23 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.TAXES)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2018-09-28T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(0.05))); - assertThat(transaction.getSource(), is("Finanzreport01.txt")); - assertThat(transaction.getNote(), is("Kapitalertragsteuer")); - } + assertThat(countSecurities(results), is(0L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(5L)); + assertThat(results.size(), is(5)); + new AssertImportActions().check(results, CurrencyUnit.EUR); - @Test - public void testFinanzreport02() - { - ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); + // assert transaction + assertThat(results, hasItem(removal(hasDate("2018-08-01"), hasAmount("EUR", 30.00), // + hasSource("Finanzreport06.txt"), hasNote("Lastschrift")))); - List errors = new ArrayList<>(); + // assert transaction + assertThat(results, hasItem(removal(hasDate("2018-07-23"), hasAmount("EUR", 0.86), // + hasSource("Finanzreport06.txt"), hasNote("Wechselgeld-Sparen")))); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Finanzreport02.txt"), errors); + // assert transaction + assertThat(results, hasItem(removal(hasDate("2018-07-23"), hasAmount("EUR", 29.14), // + hasSource("Finanzreport06.txt"), hasNote("Visa-Umsatz")))); - assertThat(errors, empty()); - assertThat(results.size(), is(11)); + // assert transaction + assertThat(results, hasItem(deposit(hasDate("2018-08-01"), hasAmount("EUR", 0.86), // + hasSource("Finanzreport06.txt"), hasNote("Gutschrift Wechselgeld-Sparen")))); - // check transaction - // get transactions - Iterator iter = results.stream().filter(TransactionItem.class::isInstance).iterator(); - assertThat(results.stream().filter(TransactionItem.class::isInstance).count(), is(11L)); - - Item item = iter.next(); - - // assert transaction1 - AccountTransaction transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.REMOVAL)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2013-11-18T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(20.00))); - assertThat(transaction.getSource(), is("Finanzreport02.txt")); - assertThat(transaction.getNote(), is("Übertrag")); - - item = iter.next(); - - // assert transaction2 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.REMOVAL)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2013-11-28T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(20))); - assertThat(transaction.getSource(), is("Finanzreport02.txt")); - assertThat(transaction.getNote(), is("Übertrag")); - - item = iter.next(); - - // assert transaction3 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.REMOVAL)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2013-12-02T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(500))); - assertThat(transaction.getSource(), is("Finanzreport02.txt")); - assertThat(transaction.getNote(), is("Übertrag")); - - item = iter.next(); - - // assert transaction4 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.REMOVAL)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2013-11-30T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(12.31))); - assertThat(transaction.getSource(), is("Finanzreport02.txt")); - assertThat(transaction.getNote(), is("Visa-Umsatz")); - - item = iter.next(); - - // assert transaction5 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.DEPOSIT)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2013-11-05T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(30))); - assertThat(transaction.getSource(), is("Finanzreport02.txt")); - assertThat(transaction.getNote(), is("Übertrag")); - - item = iter.next(); - - // assert transaction6 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.DEPOSIT)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2013-11-26T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(810))); - assertThat(transaction.getSource(), is("Finanzreport02.txt")); - assertThat(transaction.getNote(), is("Übertrag")); - - item = iter.next(); - - // assert transaction7 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.DEPOSIT)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2013-11-27T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(200))); - assertThat(transaction.getSource(), is("Finanzreport02.txt")); - assertThat(transaction.getNote(), is("Übertrag")); - - item = iter.next(); - - // assert transaction8 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.DEPOSIT)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2013-11-18T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(20.00))); - assertThat(transaction.getSource(), is("Finanzreport02.txt")); - assertThat(transaction.getNote(), is("Übertrag auf Visa-Karte")); - - item = iter.next(); - - // assert transaction9 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.DEPOSIT)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2013-11-28T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(20))); - assertThat(transaction.getSource(), is("Finanzreport02.txt")); - assertThat(transaction.getNote(), is("Übertrag auf Visa-Karte")); - - item = iter.next(); - - // assert transaction10 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.DEPOSIT)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2013-12-02T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(500))); - assertThat(transaction.getSource(), is("Finanzreport02.txt")); - assertThat(transaction.getNote(), is("Übertrag auf Visa-Karte")); - - item = iter.next(); - - // assert transaction11 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.FEES)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2013-12-08T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(5.9))); - assertThat(transaction.getSource(), is("Finanzreport02.txt")); - assertThat(transaction.getNote(), is("Gebühren/Spesen")); + // assert transaction + assertThat(results, hasItem(deposit(hasDate("2018-07-31"), hasAmount("EUR", 30.00), // + hasSource("Finanzreport06.txt"), hasNote("Visa-Kartenabrechnung")))); } @Test - public void testFinanzreport03() + public void testFinanzreport07() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Finanzreport03.txt"), errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Finanzreport07.txt"), errors); assertThat(errors, empty()); - assertThat(results.size(), is(13)); + assertThat(countSecurities(results), is(0L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(2L)); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // assert transaction + assertThat(results, hasItem(fee(hasDate("2023-01-31"), hasAmount("EUR", 1.90), // + hasSource("Finanzreport07.txt"), hasNote("Kontoführungsentgelt")))); - // check transaction - // get transactions - Iterator iter = results.stream().filter(TransactionItem.class::isInstance).iterator(); - assertThat(results.stream().filter(TransactionItem.class::isInstance).count(), is(13L)); - - Item item = iter.next(); - - // assert transaction1 - AccountTransaction transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.REMOVAL)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2017-06-05T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(49.66))); - assertThat(transaction.getSource(), is("Finanzreport03.txt")); - assertThat(transaction.getNote(), is("Übertrag")); - - item = iter.next(); - - // assert transaction2 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.REMOVAL)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2017-06-27T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(22.89))); - assertThat(transaction.getSource(), is("Finanzreport03.txt")); - assertThat(transaction.getNote(), is("Lastschrift")); - - item = iter.next(); - - // assert transaction3 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.REMOVAL)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2017-06-28T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(264.99))); - assertThat(transaction.getSource(), is("Finanzreport03.txt")); - assertThat(transaction.getNote(), is("Lastschrift")); - - item = iter.next(); - - // assert transaction4 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.REMOVAL)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2017-06-29T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(199.00))); - assertThat(transaction.getSource(), is("Finanzreport03.txt")); - assertThat(transaction.getNote(), is("Lastschrift")); - - item = iter.next(); - - // assert transaction5 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.REMOVAL)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2017-07-03T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(29.90))); - assertThat(transaction.getSource(), is("Finanzreport03.txt")); - assertThat(transaction.getNote(), is("Lastschrift")); - - item = iter.next(); - - // assert transaction6 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.REMOVAL)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2017-07-03T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(9.14))); - assertThat(transaction.getSource(), is("Finanzreport03.txt")); - assertThat(transaction.getNote(), is("Lastschrift")); - - item = iter.next(); - - // assert transaction7 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.REMOVAL)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2017-07-03T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(8.65))); - assertThat(transaction.getSource(), is("Finanzreport03.txt")); - assertThat(transaction.getNote(), is("Lastschrift")); - - item = iter.next(); - - // assert transaction8 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.REMOVAL)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2017-06-21T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(8.98))); - assertThat(transaction.getSource(), is("Finanzreport03.txt")); - assertThat(transaction.getNote(), is("Visa-Umsatz")); - - item = iter.next(); - - // assert transaction9 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.DEPOSIT)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2017-06-28T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(816.00))); - assertThat(transaction.getSource(), is("Finanzreport03.txt")); - assertThat(transaction.getNote(), is("Übertrag")); - - item = iter.next(); - - // assert transaction10 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.DEPOSIT)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2017-06-28T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(816.00))); - assertThat(transaction.getSource(), is("Finanzreport03.txt")); - assertThat(transaction.getNote(), is("Übertrag")); - - item = iter.next(); - - // assert transaction11 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.DEPOSIT)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2017-06-28T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(250.00))); - assertThat(transaction.getSource(), is("Finanzreport03.txt")); - assertThat(transaction.getNote(), is("Übertrag")); - - item = iter.next(); - - // assert transaction12 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.DEPOSIT)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2017-06-30T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(9.14))); - assertThat(transaction.getSource(), is("Finanzreport03.txt")); - assertThat(transaction.getNote(), is("Visa-Kartenabrechnung")); - - item = iter.next(); - - // assert transaction13 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.FEES)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2017-06-22T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(0.16))); - assertThat(transaction.getSource(), is("Finanzreport03.txt")); - assertThat(transaction.getNote(), is("Auslandsentgelt")); + // assert transaction + assertThat(results, hasItem(fee(hasDate("2023-01-31"), hasAmount("EUR", 4.90), // + hasSource("Finanzreport07.txt"), hasNote("Entgelte")))); } @Test - public void testFinanzreport04() + public void testWertpapierVerwahrentgelt01() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Finanzreport04.txt"), errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Verwahrentgelt01.txt"), errors); assertThat(errors, empty()); - assertThat(results.size(), is(7)); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check security + assertThat(results, hasItem(security( // + hasIsin(null), hasWkn("A0S9GB"), hasTicker(null), // + hasName("Xetra Gold"), // + hasCurrencyCode("EUR")))); - // check transaction - // get transactions - Iterator iter = results.stream().filter(TransactionItem.class::isInstance).iterator(); - assertThat(results.stream().filter(TransactionItem.class::isInstance).count(), is(7L)); - - Item item = iter.next(); - - // assert transaction1 - AccountTransaction transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.REMOVAL)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2017-06-14T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(501.00))); - assertThat(transaction.getSource(), is("Finanzreport04.txt")); - assertThat(transaction.getNote(), is("Kontoübertrag")); - - item = iter.next(); - - // assert transaction2 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.REMOVAL)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2017-06-13T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(2450.87))); - assertThat(transaction.getSource(), is("Finanzreport04.txt")); - assertThat(transaction.getNote(), is("Übertrag auf Girokonto")); - - item = iter.next(); - - // assert transaction3 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.DEPOSIT)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2017-06-13T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(2450.87))); - assertThat(transaction.getSource(), is("Finanzreport04.txt")); - assertThat(transaction.getNote(), is("Übertrag auf Girokonto")); - - item = iter.next(); - - // assert transaction4 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.DEPOSIT)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2017-06-13T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(9.07))); - assertThat(transaction.getSource(), is("Finanzreport04.txt")); - assertThat(transaction.getNote(), is("Gutschrift aus Bonus-Sparen")); - - item = iter.next(); - - // assert transaction5 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.DEPOSIT)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2017-06-09T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(1200))); - assertThat(transaction.getSource(), is("Finanzreport04.txt")); - assertThat(transaction.getNote(), is("Übertrag")); - - item = iter.next(); - - // assert transaction7 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.DEPOSIT)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.USD)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2017-06-14T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(554.83))); - assertThat(transaction.getSource(), is("Finanzreport04.txt")); - assertThat(transaction.getNote(), is("Kontoübertrag")); - - item = iter.next(); - - // assert transaction6 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.INTEREST)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2017-06-30T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(0.02))); - assertThat(transaction.getSource(), is("Finanzreport04.txt")); - assertThat(transaction.getNote(), is("Kontoabschluss Abschluss Zinsen")); + // check fee transaction + assertThat(results, hasItem(fee( // + hasDate("2020-01-06T00:00"), hasShares(0), // + hasSource("Verwahrentgelt01.txt"), // + hasNote("Verwahrentgelt Xetra Gold (0,0298 %)"), // + hasAmount("EUR", 0.01), hasGrossValue("EUR", 0.01), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); } @Test - public void testFinanzreport05() + public void testWertpapierVerwahrentgelt02() { ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Finanzreport05.txt"), errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Verwahrentgelt02.txt"), errors); assertThat(errors, empty()); - assertThat(results.size(), is(17)); + assertThat(countSecurities(results), is(1L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(2)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // check security + assertThat(results, hasItem(security( // + hasIsin(null), hasWkn("A0S9GB"), hasTicker(null), // + hasName("Xetra Gold"), // + hasCurrencyCode("EUR")))); - // check transaction - // get transactions - Iterator iter = results.stream().filter(TransactionItem.class::isInstance).iterator(); - assertThat(results.stream().filter(TransactionItem.class::isInstance).count(), is(17L)); - - Item item = iter.next(); - - // assert transaction1 - AccountTransaction transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.REMOVAL)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2016-08-01T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(894.30))); - assertThat(transaction.getSource(), is("Finanzreport05.txt")); - assertThat(transaction.getNote(), is("Lastschrift")); - - item = iter.next(); - - // assert transaction2 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.REMOVAL)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2016-07-04T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(0.42))); - assertThat(transaction.getSource(), is("Finanzreport05.txt")); - assertThat(transaction.getNote(), is("Wechselgeld-Sparen")); - - item = iter.next(); - - // assert transaction3 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.REMOVAL)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2016-07-04T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(188.58))); - assertThat(transaction.getSource(), is("Finanzreport05.txt")); - assertThat(transaction.getNote(), is("Barauszahlung")); - - item = iter.next(); - - // assert transaction4 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.REMOVAL)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2016-07-08T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(0.36))); - assertThat(transaction.getSource(), is("Finanzreport05.txt")); - assertThat(transaction.getNote(), is("Wechselgeld-Sparen")); - - item = iter.next(); - - // assert transaction5 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.REMOVAL)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2016-07-08T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(124.64))); - assertThat(transaction.getSource(), is("Finanzreport05.txt")); - assertThat(transaction.getNote(), is("Barauszahlung")); - - item = iter.next(); - - // assert transaction5 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.REMOVAL)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2016-07-13T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(0.30))); - assertThat(transaction.getSource(), is("Finanzreport05.txt")); - assertThat(transaction.getNote(), is("Wechselgeld-Sparen")); - - item = iter.next(); - - // assert transaction5 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.REMOVAL)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2016-07-12T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(0.30))); - assertThat(transaction.getSource(), is("Finanzreport05.txt")); - assertThat(transaction.getNote(), is("Wechselgeld-Sparen")); - - item = iter.next(); - - // assert transaction5 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.REMOVAL)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2016-07-13T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(191.70))); - assertThat(transaction.getSource(), is("Finanzreport05.txt")); - assertThat(transaction.getNote(), is("Barauszahlung")); - - item = iter.next(); - - // assert transaction5 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.REMOVAL)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2016-07-12T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(191.70))); - assertThat(transaction.getSource(), is("Finanzreport05.txt")); - assertThat(transaction.getNote(), is("Barauszahlung")); - - item = iter.next(); - - // assert transaction5 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.REMOVAL)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2016-07-22T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(0.89))); - assertThat(transaction.getSource(), is("Finanzreport05.txt")); - assertThat(transaction.getNote(), is("Wechselgeld-Sparen")); - - item = iter.next(); - - // assert transaction5 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.REMOVAL)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2016-07-22T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(129.11))); - assertThat(transaction.getSource(), is("Finanzreport05.txt")); - assertThat(transaction.getNote(), is("Barauszahlung")); - - item = iter.next(); - - // assert transaction5 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.REMOVAL)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2016-07-28T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(0.70))); - assertThat(transaction.getSource(), is("Finanzreport05.txt")); - assertThat(transaction.getNote(), is("Wechselgeld-Sparen")); - - item = iter.next(); - - // assert transaction5 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.REMOVAL)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2016-07-28T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(257.30))); - assertThat(transaction.getSource(), is("Finanzreport05.txt")); - assertThat(transaction.getNote(), is("Barauszahlung")); - - item = iter.next(); - - // assert transaction5 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.DEPOSIT)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2016-07-11T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(1000))); - assertThat(transaction.getSource(), is("Finanzreport05.txt")); - assertThat(transaction.getNote(), is("Übertrag")); - - item = iter.next(); - - // assert transaction5 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.DEPOSIT)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2016-08-01T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(2.97))); - assertThat(transaction.getSource(), is("Finanzreport05.txt")); - assertThat(transaction.getNote(), is("Gutschrift Wechselgeld-Sparen")); - - item = iter.next(); - - // assert transaction5 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.DEPOSIT)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2016-07-12T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(191.70))); - assertThat(transaction.getSource(), is("Finanzreport05.txt")); - assertThat(transaction.getNote(), is("Korrektur Barauszahlung")); - - item = iter.next(); - - // assert transaction5 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.DEPOSIT)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2016-07-29T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(894.30))); - assertThat(transaction.getSource(), is("Finanzreport05.txt")); - assertThat(transaction.getNote(), is("Visa-Kartenabrechnung")); + // check fee transaction + assertThat(results, hasItem(fee( // + hasDate("2019-05-06T00:00"), hasShares(0), // + hasSource("Verwahrentgelt02.txt"), // + hasNote("Verwahrentgelt Xetra Gold (0,0298 %)"), // + hasAmount("EUR", 123.45), hasGrossValue("EUR", 123.45), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00)))); } @Test - public void testFinanzreport06() + public void testCheckIfSellWithTwoBuyTaxesTransactionsOnTheSameDate() { + // @formatter:off + // { + // "2013-05-15T00":00={ + // "Google Inc. Reg. Shares Class A DL -", + // 001=[ + // 15.05.2013 Verkauf EUR 1.366, 60 Google Inc. Reg. Shares Class A DL -, 001 Test03.txt, + // 15.05.2013 Steuern EUR 0,00 Google Inc. Reg. Shares Class A DL -, 001 Test03.txt + // ] + // }, + // "2022-10-04T00":00={ + // "BASF SE Namens-Aktien o.N.="[ + // 04.10.2022 Steuern EUR 0,00 BASF SE Namens-Aktien o.N. Test01.txt, + // 04.10.2022 Steuern EUR 0,00 BASF SE Namens-Aktien o.N. Test02.txt + // ] + // } + // @formatter:off ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); List errors = new ArrayList<>(); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Finanzreport06.txt"), errors); + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "KaufMitSteuerbehandlung13.txt", + "KaufMitSteuerbehandlung14.txt", "VerkaufMitSteuerbehandlung13.txt"), errors); assertThat(errors, empty()); - assertThat(results.size(), is(5)); - - // check transaction - // get transactions - Iterator iter = results.stream().filter(TransactionItem.class::isInstance).iterator(); - assertThat(results.stream().filter(TransactionItem.class::isInstance).count(), is(5L)); - - Item item = iter.next(); - - // assert transaction1 - AccountTransaction transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.REMOVAL)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2018-08-01T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(30.00))); - assertThat(transaction.getSource(), is("Finanzreport06.txt")); - assertThat(transaction.getNote(), is("Lastschrift")); - - item = iter.next(); - - // assert transaction2 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.REMOVAL)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2018-07-23T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(0.86))); - assertThat(transaction.getSource(), is("Finanzreport06.txt")); - assertThat(transaction.getNote(), is("Wechselgeld-Sparen")); - - item = iter.next(); - - // assert transaction3 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.REMOVAL)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2018-07-23T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(29.14))); - assertThat(transaction.getSource(), is("Finanzreport06.txt")); - assertThat(transaction.getNote(), is("Visa-Umsatz")); - - item = iter.next(); - - // assert transaction4 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.DEPOSIT)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2018-08-01T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(0.86))); - assertThat(transaction.getSource(), is("Finanzreport06.txt")); - assertThat(transaction.getNote(), is("Gutschrift Wechselgeld-Sparen")); - - item = iter.next(); - - // assert transaction5 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.DEPOSIT)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2018-07-31T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(30.00))); - assertThat(transaction.getSource(), is("Finanzreport06.txt")); - assertThat(transaction.getNote(), is("Visa-Kartenabrechnung")); - } + assertThat(countSecurities(results), is(2L)); + assertThat(countBuySell(results), is(3L)); + assertThat(countAccountTransactions(results), is(2L)); + assertThat(results.size(), is(7)); + new AssertImportActions().check(results, CurrencyUnit.EUR); - @Test - public void testFinanzreport07() - { - ComdirectPDFExtractor extractor = new ComdirectPDFExtractor(new Client()); + // check security + assertThat(results, hasItem(security( // + hasIsin("DE000BASF111"), hasWkn("BASF11"), hasTicker(null), // + hasName("BASF SE Namens-Aktien o.N."), // + hasCurrencyCode("EUR")))); - List errors = new ArrayList<>(); + // check security + assertThat(results, hasItem(security( // + hasIsin("US38259P5089"), hasWkn("A0B7FY"), hasTicker(null), // + hasName("Google Inc. Reg. Shares Class A DL -,001"), // + hasCurrencyCode("EUR")))); - List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Finanzreport07.txt"), errors); + // check buy sell transaction + assertThat(results, hasItem(sale( // + hasDate("2013-05-15T12:34"), hasShares(2.00), // + hasSource("VerkaufMitSteuerbehandlung13.txt"), // + hasNote("Ord.-Nr.: 071132136214-001 | R.-Nr.: 295713531330DE85"), // + hasAmount("EUR", 1366.60), hasGrossValue("EUR", 1378.00), // + hasTaxes("EUR", 0.0), hasFees("EUR", 9.90 + 1.50)))); - assertThat(errors, empty()); - assertThat(results.size(), is(2)); + // check buy sell transaction + assertThat(results, hasItem(purchase( // + hasDate("2022-10-04T00:00"), hasShares(0.565), // + hasSource("KaufMitSteuerbehandlung13.txt"), // + hasNote("Ord.-Nr.: 272803480270 | R.-Nr.: 591997149596D095"), // + hasAmount("EUR", 24.99), hasGrossValue("EUR", 23.68), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.36 + 0.95)))); + + // check cancellation transaction + assertThat(results, hasItem(withFailureMessage( // + Messages.MsgErrorTransactionTypeNotSupported, // + taxes( // + hasDate("2022-10-04T00:00"), hasShares(0.565), // + hasSource("KaufMitSteuerbehandlung13.txt"), // + hasNote(null), // + hasAmount("EUR", 0.00), hasGrossValue("EUR", 0.00), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))))); - // check transaction - // get transactions - Iterator iter = results.stream().filter(TransactionItem.class::isInstance).iterator(); - assertThat(results.stream().filter(TransactionItem.class::isInstance).count(), is(2L)); - - Item item = iter.next(); - - // assert transaction1 - AccountTransaction transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.FEES)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2023-01-31T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(1.90))); - assertThat(transaction.getSource(), is("Finanzreport07.txt")); - assertThat(transaction.getNote(), is("Kontoführungse")); - - item = iter.next(); - - // assert transaction2 - transaction = (AccountTransaction) item.getSubject(); - assertThat(transaction.getType(), is(AccountTransaction.Type.FEES)); - assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR)); - assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2023-01-31T00:00"))); - assertThat(transaction.getAmount(), is(Values.Amount.factorize(4.90))); - assertThat(transaction.getSource(), is("Finanzreport07.txt")); - assertThat(transaction.getNote(), is("Entgelte")); + // check buy sell transaction + assertThat(results, hasItem(purchase( // + hasDate("2022-10-04T09:02"), hasShares(5.00), // + hasSource("KaufMitSteuerbehandlung14.txt"), // + hasNote("Ord.-Nr.: 000312226831-001 | R.-Nr.: 591958998217D175"), // + hasAmount("EUR", 220.85), hasGrossValue("EUR", 207.50), // + hasTaxes("EUR", 0.00), hasFees("EUR", 9.90 + 0.95 + 2.50)))); + + // check cancellation transaction + assertThat(results, hasItem(withFailureMessage( // + Messages.MsgErrorTransactionTypeNotSupported, // + taxes( // + hasDate("2022-10-04T00:00"), hasShares(5.00), // + hasSource("KaufMitSteuerbehandlung14.txt"), // + hasNote(null), // + hasAmount("EUR", 0.00), hasGrossValue("EUR", 0.00), // + hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))))); } } diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende01.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende01.txt index acd857e167..1b637f0adb 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende01.txt +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende01.txt @@ -1,18 +1,52 @@ -comdirect bank - - - -15.12.2010 -G u t s c h ri f t fä ll ig e r W e r t p a p i e r -E r tr ä g e -Dividendengutschrift +``` +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.65.2.qualifier +----------------------------------------- +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +25449 Quickborn + + + + + + + + + +Depotnr.: 176059929 +69663 010 BLZ: 200 533 30 +Herrn + +cdoKkcUGxn VfxdQxZXIT + + + +Musterstr. 072 + +85871 fjfaDvG +15.02.2018 +G u t s c h ri f t fä ll ig e r W e r t p a p i e r -E r tr ä g e +Dividendengutschrift Depotbestand Wertpapier-Bezeichnung WKN/ISIN -p e r 0 9 . 11 . 2 0 1 0 U n il e ve r N . V . A0 J M Z B -S T K 1 . 9 0 0 , 0 0 0 C e r t . v .A a n d e l e n E O -, 1 6 NL 0 00 0 00 9 3 5 5 - Emissionsland: NIEDERLANDE -EUR 0,208 Dividende pro Stück für Geschäftsjahr 01.01.10 bis 31.12.10 -zahlbar ab 15.12.2010 Zwischendividende - Abrechnung Dividendengutschrift -Bruttobetrag: EUR 395,20 -15,000 % Quellensteuer EUR 59,28 - -Verrechnung über Konto BLZ Valuta Zu Ihren Gunsten vor Steuern -000000000 EUR 00000000 15.12.2010 EUR 335,92 +p e r 1 7. 01 . 20 1 8 P r oc t e r & G a m b l e C o ., T he 85 2 0 6 2 + ST K 0 , 3 1 6 R e gi st er ed S ha r e s o .N . U S 7 4 27 18 10 9 1 + Emissionsland: VEREINIGTE STAATEN +USD 0,6896 Dividende pro Stück für Geschäftsjahr 01.07.17 bis 30.06.18 +zahlbar ab 15.02.2018 Quartalsdividende + Abrechnung Dividendengutschrift +Bruttobetrag: USD 0,22 +15,000 % Quellensteuer USD 0,03 - +Ausmachender Betrag USD 0,19 + zum Devisenkurs: EUR/USD 1,250200 EUR 0,15 +Verrechnung über Konto (IBAN) Valuta Zu Ihren Gunsten vor Steuern +DE36 3095 7353 0890 1239 79 EUR 19.02.2018 EUR 0,15 +Information zur steuerlichen Behandlung dieses Geschäftsvorganges und den auf +Ihrem Konto gebuchten Endbetrag finden Sie auf der separaten Steuermitteilung +(Referenz-Nr. 0SID3MHIVFT000ZN). +comdirect bank +Aktiengesellschaft + +*Diese Abrechnung wird von der Bank nicht unterschrieben +DD762/11/09 + +``` \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende02.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende02.txt index d7031a0d24..116130ec65 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende02.txt +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende02.txt @@ -1,19 +1,52 @@ -comdirect bank - - - -27.04.2009 -G u t s c h ri f t fä ll ig e r W e r t p a p i e r -E r tr ä g e -Dividendengutschrift +``` +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.65.2.qualifier +----------------------------------------- +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +25449 Quickborn + + + + + + + + + +Depotnr.: 601394865 +BLZ: 200 411 55 + + 36661 606 +Herrn + +OgrJoJyiQH AmYEmxBHVi + + + +Musterstr. 821 + +12503 fjfaDvG +05.06.2020 +G u t s c h ri f t fä ll ig e r W e r t p a p i e r -E r tr ä g e +Dividendengutschrift Depotbestand Wertpapier-Bezeichnung WKN/ISIN -p e r 2 4 . 0 4 . 20 0 9 De u t s c he L uf t h a n s a A G 8 2 3 2 1 2 -S T K 3 . 0 0 0 , 0 0 0 v i nk .N a me n s- A kt ie n o . N . D E 0 00 8 2 3 2 12 5 - Emissionsland: DEUTSCHLAND -EUR 0,70 Dividende pro Stück für Geschäftsjahr 01.01.08 bis 31.12.08 -zahlbar ab 27.04.2009 - Abrechnung Dividendengutschrift -Bruttobetrag: EUR 2.100,00 -25,000 % Kapitalertragsteuer auf EUR 2.100,00 EUR 525,00 - - 5,500 % Solidaritätszuschl. auf EUR 525,00 EUR 28,87 - -Verrechnung über Konto Valuta Zu Ihren Gunsten vor Steuern -0000000 00 EUR 27.04.2009 EUR 1.546,13 + p e r 1 3 . 0 5. 20 2 0 U n i l ev e r N. V . A 0 JM Q 9 +S T K 1 3 , 94 4 Aa nd e l e n o p n aa m E O -, 16 N L0 00 0 3 88 6 1 9 + Emissionsland: NIEDERLANDE +EUR 0,4104 Dividende pro Stück für Geschäftsjahr 01.01.20 bis 31.12.20 +zahlbar ab 04.06.2020 Quartalsdividende + Abrechnung Dividendengutschrift +Bruttobetrag: EUR 5,72 +15,000 % Quellensteuer EUR 0,86 - +Verrechnung über Konto (IBAN) Valuta Zu Ihren Gunsten vor Steuern +DE36 8963 7611 7269 9736 00 EUR 04.06.2020 EUR 4,86 +Information zur steuerlichen Behandlung dieses Geschäftsvorganges und den auf +Ihrem Konto gebuchten Endbetrag finden Sie auf der separaten Steuermitteilung +(Referenz-Nr. 1SIFUSL13ZS0014W). +comdirect bank +Aktiengesellschaft + +*Diese Abrechnung wird von der Bank nicht unterschrieben +DD762/11/09 + +``` \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende03.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende03.txt index 7207120086..a41b2df207 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende03.txt +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende03.txt @@ -1,7 +1,8 @@ -PDF author: 'HAVI Solutions GmbH & Co. KG, phg' -PDFBox Version: 1.8.13 +``` +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.65.2.qualifier ----------------------------------------- -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + 25449 Quickborn @@ -12,39 +13,43 @@ PDFBox Version: 1.8.13 -Depotnr.: 111111111 -33333 333 BLZ: 222 222 22 +Depotnr.: 682580015 + 39687 010 BLZ: 200 411 11 Herrn -Max Mustermann +jtnMPK tSFj -Musterstr. 123 +Musterstr. 93 -66666 Musterstadt -03.11.2017 +53628 lhSOFhnQqd +26.04.2013 G u t s c h ri f t fä ll ig e r W e r t p a p i e r -E r tr ä g e Dividendengutschrift Depotbestand Wertpapier-Bezeichnung WKN/ISIN -p e r 2 0. 10 . 20 1 7 C V S He a lt h C or p . 8 5 90 3 4 -S T K 32 , 00 0 R e gi s t er e d S h a r e s DL -, 0 1 U S1 2 6 6 50 1 0 0 6 - Emissionsland: VEREINIGTE STAATEN -USD 0,50 Dividende pro Stück für Geschäftsjahr 01.01.17 bis 31.12.17 -zahlbar ab 03.11.2017 Quartalsdividende + pe r 2 4 .1 2. 20 12 S am su n g El e ct r on i c s Co . Lt d. 88 18 2 3 + ST K 4 , 0 0 0 R. S h s ( N V ) Pf d( GD R 14 4 A) 1 / 2 S W5 0 0 0 U S7 9 6 0 5 02 0 1 8 + Emissionsland: REPUBLIK KOREA +USD 3,33923 Dividende pro Stück für Geschäftsjahr 01.01.12 bis 31.12.12 +zahlbar ab 22.04.2013 Zwischendividende Abrechnung Dividendengutschrift -Bruttobetrag: USD 16,00 -15,000 % Quellensteuer USD 2,40 - -Ausmachender Betrag USD 13,60 - zum Devisenkurs: EUR/USD 1,167800 EUR 11,65 -Verrechnung über Konto (IBAN) Valuta Zu Ihren Gunsten vor Steuern -DE33 3333 3333 3333 3333 33 EUR 07.11.2017 EUR 11,65 +Bruttobetrag: USD 13,36 +22,000 % Quellensteuer USD 2,94 - +fremde Spesen USD 0,08 - +Ausmachender Betrag USD 10,34 + zum Devisenkurs: EUR/USD 1,306600 EUR 7,91 +Verrechnung über Konto BLZ Valuta Zu Ihren Gunsten vor Steuern +221141047 EUR 11242936 24.04.2013 EUR 7,91 +Auf Antrag kann Quellensteuer in Höhe von maximal USD 0,94 +erstattet werden. Information zur steuerlichen Behandlung dieses Geschäftsvorganges und den auf Ihrem Konto gebuchten Endbetrag finden Sie auf der separaten Steuermitteilung -(Referenz-Nr. 1BICAY8QGZE0000U). +(Referenz-Nr. 0SI6UK467PE001G6). comdirect bank Aktiengesellschaft *Diese Abrechnung wird von der Bank nicht unterschrieben DD762/11/09 +``` \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende04.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende04.txt index 1008ae64d7..45665d52da 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende04.txt +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende04.txt @@ -1,5 +1,6 @@ -PDF Autor: 'HAVI Solutions GmbH & Co. KG, phg' -PDFBox Version: 1.8.16 +``` +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.65.2.qualifier ----------------------------------------- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 25449 Quickborn @@ -12,33 +13,39 @@ PDFBox Version: 1.8.16 -Depotnr.: - - +Depotnr.: 534221255 + 02901 010 BLZ: 200 411 55 +Herrn +vnhLXjeaWR gwsMzjqhqu - - -19.03.2020 -G u t s c h ri f t fä ll ig e r W e r t p a p i e r -E r tr ä g e + + +Musterstr. 567 + +67202 FuXsnkC +05.05.2023 + G u t s c h ri f t fä ll ig e r W e r t p a p i e r -E r tr ä g e Dividendengutschrift Depotbestand Wertpapier-Bezeichnung WKN/ISIN -p e r 0 3. 03 . 20 2 0 N e w m o n t C o r p . 8 5 3 82 3 -S T K 88 , 0 0 0 Re g is t e r e d S h a r e s D L 1, 6 0 U S 6 5 1 6 3 9 1 06 6 - Emissionsland: VEREINIGTE STAATEN -USD 0,14 Dividende pro Stück für Geschäftsjahr 01.01.20 bis 31.12.20 -zahlbar ab 19.03.2020 Quartalsdividende + p e r 0 4 .0 4. 2 02 3 J D. co m I n c. A 1 12 S T + ST K 1 8, 1 0 2 R .S hs C l. A ( S p .A D R s ) /1 DL - , 0 0 0 02 U S4 7 2 15 P 1 06 6 + Emissionsland: KAIMANINSELN +USD 0,62 Dividende pro Stück für Geschäftsjahr . . bis . . +zahlbar ab 04.05.2023 Abrechnung Dividendengutschrift -Bruttobetrag: USD 12,32 -15,000 % Quellensteuer USD 1,85 - -Ausmachender Betrag USD 10,47 - zum Devisenkurs: EUR/USD 1,078000 EUR 9,71 +Bruttobetrag: USD 11,22 +fremde Spesen USD 0,36 - +Ausmachender Betrag USD 10,86 + zum Devisenkurs: EUR/USD 1,109100 EUR 9,79 Verrechnung über Konto (IBAN) Valuta Zu Ihren Gunsten vor Steuern - EUR 23.03.2020 EUR 9,71 +DE36 4585 3237 7417 3852 27 EUR 08.05.2023 EUR 9,79 Information zur steuerlichen Behandlung dieses Geschäftsvorganges und den auf Ihrem Konto gebuchten Endbetrag finden Sie auf der separaten Steuermitteilung -(Referenz-Nr. ). -comdirect bank -Aktiengesellschaft +(Referenz-Nr. 0KIJMJQ59DS0008I). +Ihre comdirect *Diese Abrechnung wird von der Bank nicht unterschrieben +DD762/11/09 + +``` \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende05.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende05.txt index 56e84b97ca..5c83a93eea 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende05.txt +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende05.txt @@ -1,4 +1,8 @@ - +``` +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.65.2.qualifier +----------------------------------------- +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 25449 Quickborn @@ -9,37 +13,37 @@ -Depotnr.: 99999999 -BLZ: 200 999 99 - - 99999 010 +Depotnr.: 136341340 + 78734 010 BLZ: 200 411 55 Herrn -Max Mustermann +SwvzLIldHV UvoikMqKYI -Bahnweg 4 +Musterstr. 870 -99999 Dorf -01.01.2011 -G u t s c h ri f t fä ll ig e r W e r t p a p i e r -E r tr ä g e -Ertragsgutschrift +97857 gZwNwrh +21.03.2023 + G u t s c h ri f t fä ll ig e r W e r t p a p i e r -E r tr ä g e +Dividendengutschrift Depotbestand Wertpapier-Bezeichnung WKN/ISIN -p e r 1 7 . 01 . 2 0 1 1 i S h a r e s I I I x x x x x x x x x x x x x x x E T F A1 X X X X -S T K 1 4 , 0 0 0 B ea re r S h a r e s ( D t. Z e r t .) o . N . DE 0 00 A 9A X X X 6 - Emissionsland: IRLAND -EUR 1,1999 Ausschüttung pro Stück für Geschäftsjahr 01.07.11 bis 30.06.11 -zahlbar ab 08.01.2011 - Abrechnung Ertragsgutschrift -Bruttobetrag: EUR 21,99 +p e r 2 2 .0 2 . 2 02 3 U ni l e ve r P LC A 0 J N E 2 +S T K 2 4 ,3 3 4 R e gi s t er e d Sh ar e s LS - , 0 31 1 11 G B0 0 B 10 RZ P7 8 + Emissionsland: VEREINIG. KOENIGREICH +GBP 0,3812 Dividende pro Stück für Geschäftsjahr 01.01.22 bis 31.12.22 +zahlbar ab 21.03.2023 Schlussdividende + Abrechnung Dividendengutschrift +Bruttobetrag: GBP 9,28 + zum Devisenkurs: EUR/GBP 0,877300 EUR 10,58 Verrechnung über Konto (IBAN) Valuta Zu Ihren Gunsten vor Steuern -DE09 9999 9999 9999 9999 00 EUR 08.01.2011 EUR 21,99 +DE36 3933 5977 3683 9023 59 EUR 23.03.2023 EUR 10,58 Information zur steuerlichen Behandlung dieses Geschäftsvorganges und den auf Ihrem Konto gebuchten Endbetrag finden Sie auf der separaten Steuermitteilung -(Referenz-Nr. 9999999999999999). -comdirect bank -Aktiengesellschaft +(Referenz-Nr. 1EIJJKJZODD001WS). +Ihre comdirect *Diese Abrechnung wird von der Bank nicht unterschrieben -DD000/00/00 +DD762/11/09 + +``` \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende06.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende06.txt index 22b44483be..2cbc359d4c 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende06.txt +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende06.txt @@ -1,3 +1,7 @@ +``` +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.65.2.qualifier +----------------------------------------- 25449 Quickborn @@ -9,40 +13,38 @@ -Depotnr.: 99999999 -BLZ: 200 999 99 - - 99999 010 +Depotnr.: 687282759 +43757 010 BLZ: 200 411 55 Herrn -Max Mustermann +crBsYXixLs OKTZlkiaKk -Bahnweg 4 +Musterstr. 880 -99999 Dorf -01.01.2011 -G u t s c h ri f t fä ll ig e r W e r t p a p i e r -E r tr ä g e -Dividendengutschrift +18088 zIjuYIu +20.03.2015 + G u t s c h ri f t fä ll ig e r W e r t p a p i e r -E r tr ä g e +Ertragsgutschrift Depotbestand Wertpapier-Bezeichnung WKN/ISIN -p e r 0 1 . 01 . 2 0 1 1 F oo B a r I n c . 12 3 4 5 6 -S T K 4 0 , 0 0 0 R eg is t er e d S h a r e s 1 US 0 99 1 99 1 0 3 9 - Emissionsland: VEREINIGTE STAATEN -USD 0,43 Dividende pro Stück für Geschäftsjahr 01.04.11 bis 31.03.12 -zahlbar ab 07.01.2011 Quartalsdividende - Abrechnung Dividendengutschrift -Bruttobetrag: USD 22,60 -15,000 % Quellensteuer USD 10,00 - -Ausmachender Betrag USD 12,60 - zum Devisenkurs: EUR/USD 1,034341 EUR 13,78 +p e r 2 5. 02 .2 0 1 5 i S ha r e s P L C - M SC I W o . U C . E T F D IS A 0H GV 0 +S T K 11 ,9 71 R eg i s t er e d S ha re s o .N . IE 0 0B 0 M 6 2 Q5 8 + Emissionsland: IRLAND +USD 0,0947 Ausschüttung pro Stück für Geschäftsjahr 01.03.14 bis 28.02.15 +zahlbar ab 19.03.2015 + Abrechnung Ertragsgutschrift +Bruttobetrag: USD 1,13 + zum Devisenkurs: EUR/USD 1,073100 EUR 1,05 Verrechnung über Konto (IBAN) Valuta Zu Ihren Gunsten vor Steuern -DE09 0000 0000 0000 0000 40 EUR 09.01.2011 EUR 13,78 +DE36 9572 6394 9648 9878 30 EUR 23.03.2015 EUR 1,05 Information zur steuerlichen Behandlung dieses Geschäftsvorganges und den auf Ihrem Konto gebuchten Endbetrag finden Sie auf der separaten Steuermitteilung -(Referenz-Nr. 1234AAAAAAA). +(Referenz-Nr. 06I9BZMXFEV000MG). comdirect bank Aktiengesellschaft *Diese Abrechnung wird von der Bank nicht unterschrieben -DD992/11/9 +DD762/11/09 + +``` \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende07.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende07.txt index 79c798ba4e..eb4866fba1 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende07.txt +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende07.txt @@ -1,9 +1,9 @@ -PDF Author 'HAVI Solutions GmbH & Co. KG, phg' +``` +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.65.2.qualifier ----------------------------------------- -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - + 25449 Quickborn - @@ -12,40 +12,49 @@ - -Depotnr. XXXXXXXXXXX -XXXXX XXX BLZ 200 411 11 -Herrn - -Steffen XXXXXXXX - - +11857 010 Depo tnummer: 1111111 11 +Herrn +kWnfwq xzQZ -XXXXXX 3 -88XXX XXXXXX -19.10.2017 +Musterstr. 26 + +93219 whGYMuICMp +17.08.2006 G u t s c h ri f t fä ll ig e r W e r t p a p i e r -E r tr ä g e -Dividendengutschrift -Depotbestand Wertpapier-Bezeichnung WKNISIN -p e r 2 7. 09 . 20 1 7 P r os p e c t C ap i t a l C o r p. A 0 B7 4 6 - ST K 1 7 5 ,0 00 Re g i s t e r e d S h a r e s D L - , 00 1 U S 74 3 48 T 1 02 5 - Emissionsland VEREINIGTE STAATEN -USD 0,06 Dividende pro Stück für Geschäftsjahr 01.01.17 bis 31.12.17 -zahlbar ab 19.10.2017 monatl. Dividende - Abrechnung Dividendengutschrift -Bruttobetrag USD 10,50 -15,000 % Quellensteuer USD 1,58 - -Ausmachender Betrag USD 8,92 - zum Devisenkurs EURUSD 1,185400 EUR 7,52 -Verrechnung über Konto (IBAN) Valuta Zu Ihren Gunsten vor Steuern -DE09 2004 1111 XXXX XXXX XX EUR 23.10.2017 EUR 7,52 -Information zur steuerlichen Behandlung dieses Geschäftsvorganges und den auf -Ihrem Konto gebuchten Endbetrag finden Sie auf der separaten Steuermitteilung -(Referenz-Nr. 1HIC9YINXXXXXXXX). +Ertragsgutschrift bei Freistellungsauftrag +Depotbestand Wertpapier-Bezeichnung WKN/ISIN + pe r 3 1. 0 7. 20 0 6 F i de l it y Fd s- Te l e c o mm u ni c. Fd . 92 1 8 01 + S T K 1 51 , 0 0 0 Re g .S h ar e s A (G l o b . Ce r t. ) o . N. L U 0 0 9 9 5 7 5 2 9 1 + Emissionsland: LUXEMBURG +EUR 0,02 Ausschüttung pro Stück für Geschäftsjahr 01.05.05 bis 30.04.06 +zahlbar ab 15.08.2006 + EUR 0,0003694 Zinsabschlagpflichtiger Anteil + Ermittlung der Steuerbasisbeträge +Bruttobetrag: EUR 3,02 +zinsabschlagpflichtiger Anteil / Gesamtbetrag EUR 0,06 +Zwischensumme zur Disposition des Freistellungsbetrags EUR 0,06 +- berücksichtigter Freibetrag EUR 0,06 - +zinsabschlagpflichtig EUR 0,00 + gesamt vergütet bescheinigt +Zinsabschlag 30,000 % EUR 0,02 0,02 0,00 +Solidaritätszuschlag EUR 0,00 0,00 0,00 + Abrechnung Ertragsgutschrift +Bruttobetrag: EUR 3,02 +Gutschrift auf Konto Valuta Zu Ihren Gunsten +6577381 16 EUR 15.08.2006 EUR 3,02 +anrechenbare Quellensteuer Privatvermögen/Betriebsvermögen EUR 1,94 +Wegen der Besteuerung im Einzelfall verweisen wir auf den Rechenschaftsbericht +der Gesellschaft bzw. auf eine evtl. Veröffentlichung des Bundesfinanzministeriums. +Aufgrund des Freistellungsauftrages werden Kapitalerträge - bis zur Höhe des +beantragten Freibetrages - vom KEST-Abzug freigestellt. comdirect bank Aktiengesellschaft -Diese Abrechnung wird von der Bank nicht unterschrieben -DD7621109 +*Diese Abrechnung wird von der Bank nicht unterschrieben + + Keine Steuerbescheinigung +Kapitalerträge sind einkommensteuerpflichtig +D762S0/11/2001 +``` \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende08.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende08.txt index 90e4c36452..58fb2b31f3 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende08.txt +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende08.txt @@ -1,4 +1,6 @@ -PDF author: 'HAVI Solutions GmbH & Co. KG, phg' +``` +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.65.2.qualifier ----------------------------------------- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 25449 Quickborn @@ -11,35 +13,36 @@ -Depotnr.: xxxxxxxxx - 10xxx xxx BLZ: xxx xxx xx +Depotnr.: 466311117 + 65390 010 BLZ: 200 411 44 Herrn -xxx xxxx +xpvfihX ThCr -Musterstr. 1 +Muster-Muster-Cse 21 -xxxxx Musterstadt -31.10.2017 -G u t s c h ri f t fä ll ig e r W e r t p a p i e r -E r tr ä g e +18263 DGUILxuaZPHl +16.01.2023 + G u t s c h ri f t fä ll ig e r W e r t p a p i e r -E r tr ä g e Ertragsgutschrift Depotbestand Wertpapier-Bezeichnung WKN/ISIN -p e r 1 7 . 01 . 2 0 1 1 i S hs VI - JP M D L EM B d E OH U . ET F D A1 W0 MQ - S TK 4 2 , 00 0 Re g i s t er ed S ha re s o .N . I E 0 0 B9 M6 RS 5 6 - -EUR 0,2034 Ausschüttung pro Stück für Geschäftsjahr 01.04.17 bis 31.12.17 -zahlbar ab 01.11.2017 +p e r 13 . 0 1 . 2 0 2 3 iS h. S T . G l . S e l . Di v . 1 0 0 U .E T F D E A 0 F 5 UH + S T K 32 2 , 9 3 3 I n h ab e r- A nt e il e DE 0 0 0 A 0 F 5 U H1 + Emissionsland: DEUTSCHLAND +EUR 0,358785 Ausschüttung pro Stück für Geschäftsjahr 01.03.22 bis 28.02.23 +zahlbar ab 16.01.2023 Abrechnung Ertragsgutschrift -Bruttobetrag: EUR 8,54 +Bruttobetrag: EUR 115,86 Verrechnung über Konto (IBAN) Valuta Zu Ihren Gunsten vor Steuern -DExx xxxx xxxx xxxx xxxx xx EUR 31.10.2017 EUR 8,54 +DE89 4365 2831 2859 8162 94 EUR 16.01.2023 EUR 115,86 Information zur steuerlichen Behandlung dieses Geschäftsvorganges und den auf Ihrem Konto gebuchten Endbetrag finden Sie auf der separaten Steuermitteilung -(Referenz-Nr. 0SICAP53xxxxxxxx). -comdirect bank -Aktiengesellschaft +(Referenz-Nr. 1SIJF5FGYDZ000KM). +Ihre comdirect *Diese Abrechnung wird von der Bank nicht unterschrieben -DD762/11/09 +DD111/11/11 + +``` \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende09.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende09.txt index 2e33dcfe9e..204306ea8c 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende09.txt +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende09.txt @@ -1,5 +1,6 @@ -PDF Author: 'HAVI Solutions GmbH & Co. KG, phg' -PDFBox Version: 1.8.13 +``` +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.65.2.qualifier ----------------------------------------- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 25449 Quickborn @@ -12,40 +13,37 @@ PDFBox Version: 1.8.13 -Depotnr.: XXXXXXXXX -XXXXX XXX BLZ: XXX XXX XX +Depotnr.: 512179093 + 93419 010 BLZ: 200 843 44 Herrn -XXXXXX XXXXXXXXX +vyZqOUv LNMk -XXXXXXXX XX X +Muster-Weg 50 -XXXXX XXXXXXXX -16.11.2017 -USt-ID-Nr.: XXXXXXXXXXX -Rechnungsnummer: XXXXXXXXXXXXXXXX - G u t s c h ri f t fä ll ig e r W e r t p a p i e r -E r tr ä g e -Dividendengutschrift +58704 KcUirbIftsWx +16.04.2018 +G u t s c h ri f t fä ll ig e r W e r t p a p i e r -E r tr ä g e +Ertragsgutschrift Depotbestand Wertpapier-Bezeichnung WKN/ISIN -p e r 0 9 . 1 1 . 2 0 1 7 A p pl e I nc . 86 5 9 8 5 - S TK 9 , 9 14 R e gi st e r ed Sh a re s o . N. U S 0 3 7 8 3 3 1 0 0 5 - Emissionsland: VEREINIGTE STAATEN -USD 0,63 Dividende pro Stück für Geschäftsjahr 01.10.17 bis 30.09.18 -zahlbar ab 16.11.2017 Quartalsdividende - Abrechnung Dividendengutschrift -Bruttobetrag: USD 6,25 -15,000 % Quellensteuer USD 0,94 - -Ausmachender Betrag USD 5,31 - zum Devisenkurs: EUR/USD 1,179400 EUR 4,50 + p e r 1 3. 04 . 2 01 8 i S h . S T .G l .S e l. Di v .1 0 0 U. E TF D E A 0F 5 U H +S T K 16 5 , 93 3 In h a b e r- A n t ei l e D E 00 0 A 0F 5 U H1 + Emissionsland: DEUTSCHLAND +EUR 0,094204 Ausschüttung pro Stück für Geschäftsjahr 01.03.17 bis 28.02.18 +zahlbar ab 16.04.2018 + Abrechnung Ertragsgutschrift +Bruttobetrag: EUR 15,63 Verrechnung über Konto (IBAN) Valuta Zu Ihren Gunsten vor Steuern -XXXX XXXX XXXX XXXX XXXX XX EUR 20.11.2017 EUR 4,50 +DE89 8767 9127 9950 9231 80 EUR 16.04.2018 EUR 15,63 Information zur steuerlichen Behandlung dieses Geschäftsvorganges und den auf Ihrem Konto gebuchten Endbetrag finden Sie auf der separaten Steuermitteilung -(Referenz-Nr. 1NICBT79Z5I001UL). +(Referenz-Nr. 2IID7EPALHP000IV). comdirect bank Aktiengesellschaft *Diese Abrechnung wird von der Bank nicht unterschrieben -DD762/11/09 +DD111/11/11 + +``` \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende10.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende10.txt index a958651e76..fb547000c0 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende10.txt +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende10.txt @@ -1,5 +1,6 @@ -PDF Autor: 'HAVI Solutions GmbH & Co. KG, phg' -PDFBox Version: 1.8.16 +``` +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.65.2.qualifier ----------------------------------------- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 25449 Quickborn @@ -12,34 +13,37 @@ PDFBox Version: 1.8.16 -Depotnr.: 1234567890 - 10288 010 BLZ: 200 411 33 +Depotnr.: 507687489 + 91268 010 BLZ: 200 867 24 Herrn -Vorname Nachname +hDGQCSr ObzK -Teststr. 123 +Musterstr. 20 -12345 Musterdorf -04.12.2020 +75800 zOrbNCoOZJJN +23.06.2016 G u t s c h ri f t fä ll ig e r W e r t p a p i e r -E r tr ä g e Zinsgutschrift Depotbestand Zinssatz Wertpapier-Bezeichnung WKN/ISIN -p e r 0 3. 1 2 .2 0 20 v a r ia b el SA N H A G m b H & C o. K G A 1 T NA 7 -E U R 5. 0 0 0 ,0 0 0 ST Z- A n l e ih e v .2 0 1 3 ( 2 3 / 2 6) D E0 00 A1 T N A 7 0 - Zinstermin: 04JD +p e r 2 2 .0 6 . 20 16 6 ,0 0 Co m me r zb a nk A G CN 2 V KP +E U R 1 . 0 0 0, 0 0 0 AA L P R OT E C T 0 6 . 16 P AH 3 D E 0 0 0C N 2 V K P 9 + Zinstermin: 23JUNI Emissionsland: DEUTSCHLAND -2,00 % Zinsen zahlbar: 04.12.2020 +5,40821917 % Zinsen zahlbar: 23.06.2016 Abrechnung Zinsgutschrift -Bruttobetrag: EUR 100,00 +Bruttobetrag: EUR 54,08 Verrechnung über Konto (IBAN) Valuta Zu Ihren Gunsten vor Steuern -DE04 2004 1133 1234 5678 90 EUR 04.12.2020 EUR 100,00 +DE89 4059 6912 7546 5020 85 EUR 23.06.2016 EUR 54,08 Information zur steuerlichen Behandlung dieses Geschäftsvorganges und den auf Ihrem Konto gebuchten Endbetrag finden Sie auf der separaten Steuermitteilung -(Referenz-Nr. 25IG6U55RA000010). -Ihre comdirect +(Referenz-Nr. 22IAS84ET6700189). +comdirect bank +Aktiengesellschaft *Diese Abrechnung wird von der Bank nicht unterschrieben -DD762/11/09 \ No newline at end of file +DD111/11/11 + +``` \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende11.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende11.txt index 9b22c4f9cb..aac48c99b5 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende11.txt +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende11.txt @@ -1,5 +1,6 @@ -PDF Autor: 'HAVI Solutions GmbH & Co. KG, phg' -PDFBox Version: 1.8.16 +``` +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.65.2.qualifier ----------------------------------------- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 25449 Quickborn @@ -12,35 +13,40 @@ PDFBox Version: 1.8.16 -Depotnr.: 1234567890 - 10288 010 BLZ: 200 411 33 +Depotnr.: 369794043 +60442 165 BLZ: 200 781 55 Herrn -Vorname Nachname +HjFngWnSHg lOPfYVlDHK -Teststr. 8 +Musterstr. 395 -40476 Testdorf -04.06.2020 - G u t s c h ri f t fä ll ig e r W e r t p a p i e r -E r tr ä g e -Zinsgutschrift -Depotbestand Zinssatz Wertpapier-Bezeichnung WKN/ISIN - pe r 0 3. 0 6. 20 2 0 v a r i ab e l S A N HA G m b H & C o. K G A1 T N A7 -E U R 5 . 0 0 0, 0 0 0 ST Z -A n le i h e v .2 0 1 3( 2 0 / 2 3) DE 0 00 A 1 T N A7 0 - Zinstermin: 04JD - Emissionsland: DEUTSCHLAND -3,625 % Zinsen zahlbar: 04.06.2020 - Abrechnung Zinsgutschrift -Bruttobetrag: EUR 181,25 +44998 ijHAfDc +15.05.2020 +G u t s c h ri f t fä ll ig e r W e r t p a p i e r -E r tr ä g e +Dividendengutschrift +Depotbestand Wertpapier-Bezeichnung WKN/ISIN +p e r 2 2. 04 . 20 2 0 P r oc t e r & G a m b l e C o ., T he 85 2 0 6 2 + ST K 7 , 4 9 9 R e gi st er ed S ha r e s o .N . U S 7 4 27 18 10 9 1 + Emissionsland: VEREINIGTE STAATEN +USD 0,7907 Dividende pro Stück für Geschäftsjahr 01.07.19 bis 30.06.20 +zahlbar ab 15.05.2020 Quartalsdividende + Abrechnung Dividendengutschrift +Bruttobetrag: USD 5,93 +15,000 % Quellensteuer USD 0,89 - +Ausmachender Betrag USD 5,04 + zum Devisenkurs: EUR/USD 1,084100 EUR 4,65 Verrechnung über Konto (IBAN) Valuta Zu Ihren Gunsten vor Steuern -DE12 3456 7890 1234 3456 78 EUR 04.06.2020 EUR 181,25 +DE36 0481 8957 2881 8205 96 EUR 19.05.2020 EUR 4,65 Information zur steuerlichen Behandlung dieses Geschäftsvorganges und den auf Ihrem Konto gebuchten Endbetrag finden Sie auf der separaten Steuermitteilung -(Referenz-Nr. 03IFUQ84RG3000IG). +(Referenz-Nr. 0IIFTGGFCJV002JX). comdirect bank Aktiengesellschaft *Diese Abrechnung wird von der Bank nicht unterschrieben -DD762/11/09 \ No newline at end of file +DD111/11/11 + +``` \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende12.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende12.txt index bae647d882..aee1f63935 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende12.txt +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende12.txt @@ -1,8 +1,9 @@ -PDF Autor: 'HAVI Solutions GmbH & Co. KG, phg' -PDFBox Version: 1.8.16 +``` +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.65.2.qualifier ----------------------------------------- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -25449 Quickborn +59647 Quickborn @@ -12,35 +13,37 @@ PDFBox Version: 1.8.16 -Depotnr.: 12345600 - 123456 789 BLZ: 123 456 78 +Depotnr.: 786204619 + 97073 668 BLZ: 284 637 94 Herrn -Max Mustermann +jdnpgoD yaPG -Musterstr. 123 +Muster-Weg 51 -12345 Musterstadt -14.05.2018 - G u t s c h ri f t fä ll ig e r W e r t p a p i e r -E r tr ä g e -Dividendengutschrift +26323 QGLMeMgKaZya +30.06.2021 +G u t s c h ri f t fä ll ig e r W e r t p a p i e r -E r tr ä g e +Ertragsgutschrift Depotbestand Wertpapier-Bezeichnung WKN/ISIN -p e r 0 9 . 0 5. 2 0 1 8 Al l i an z S E 8 4 0 4 00 -S T K 1 6 , 00 0 v i n k . N am en s - Ak t ie n o . N . D E0 0 0 84 04 00 5 - Emissionsland: DEUTSCHLAND -EUR 8,00 Dividende pro Stück für Geschäftsjahr 01.01.17 bis 31.12.17 -zahlbar ab 14.05.2018 - Abrechnung Dividendengutschrift -Bruttobetrag: EUR 128,00 + p er 16 . 06 .2 0 2 1 V a n g u a r d F T S E Al l -W o rl d U . E TF A 1J X5 2 +S T K 84 , 0 00 R eg i st er e d S h ar e s U S D D is .o N IE 00 B3 RB W M 2 5 + Emissionsland: IRLAND +USD 0,58122 Ausschüttung pro Stück für Geschäftsjahr 01.07.20 bis 30.06.21 +zahlbar ab 30.06.2021 + Abrechnung Ertragsgutschrift +Bruttobetrag: USD 48,82 + zum Devisenkurs: EUR/USD 1,192000 EUR 40,96 Verrechnung über Konto (IBAN) Valuta Zu Ihren Gunsten vor Steuern -DE12 3456 7890 1234 5678 00 EUR 14.05.2018 EUR 128,00 +DE89 0189 9064 0302 2821 41 EUR 02.07.2021 EUR 40,96 Information zur steuerlichen Behandlung dieses Geschäftsvorganges und den auf Ihrem Konto gebuchten Endbetrag finden Sie auf der separaten Steuermitteilung -(Referenz-Nr. 1234567890). -comdirect bank -Aktiengesellschaft +(Referenz-Nr. 0OIH6DFZDB600A12). +Ihre comdirect *Diese Abrechnung wird von der Bank nicht unterschrieben -DD762/11/09 +DD111/11/11 + +``` \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende13.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende13.txt index 733f559ac8..bae647d882 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende13.txt +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende13.txt @@ -12,8 +12,8 @@ PDFBox Version: 1.8.16 -Depotnr.: 123456789 -12345 678 BLZ: 123 456 78 +Depotnr.: 12345600 + 123456 789 BLZ: 123 456 78 Herrn Max Mustermann @@ -23,26 +23,24 @@ Max Mustermann Musterstr. 123 12345 Musterstadt -02.11.2020 -G u t s c h ri f t fä ll ig e r W e r t p a p i e r -E r tr ä g e +14.05.2018 + G u t s c h ri f t fä ll ig e r W e r t p a p i e r -E r tr ä g e Dividendengutschrift Depotbestand Wertpapier-Bezeichnung WKN/ISIN - pe r 20 . 10 . 20 2 0 C VS H e a lt h Co r p. 8 59 03 4 - S T K 3 2, 00 0 R eg is te r ed S h a re s D L -, 0 1 U S 12 6 6 5 0 1 0 0 6 - Emissionsland: VEREINIGTE STAATEN -USD 0,50 Dividende pro Stück für Geschäftsjahr 01.01.20 bis 31.12.20 -zahlbar ab 02.11.2020 Quartalsdividende +p e r 0 9 . 0 5. 2 0 1 8 Al l i an z S E 8 4 0 4 00 +S T K 1 6 , 00 0 v i n k . N am en s - Ak t ie n o . N . D E0 0 0 84 04 00 5 + Emissionsland: DEUTSCHLAND +EUR 8,00 Dividende pro Stück für Geschäftsjahr 01.01.17 bis 31.12.17 +zahlbar ab 14.05.2018 Abrechnung Dividendengutschrift -Bruttobetrag: USD 16,00 -15,000 % Quellensteuer USD 2,40 - -Ausmachender Betrag USD 13,60 - zum Devisenkurs: EUR/USD 1,168200 EUR 11,64 +Bruttobetrag: EUR 128,00 Verrechnung über Konto (IBAN) Valuta Zu Ihren Gunsten vor Steuern -DE12 3456 7890 1234 5678 00 EUR 04.11.2020 EUR 11,64 +DE12 3456 7890 1234 5678 00 EUR 14.05.2018 EUR 128,00 Information zur steuerlichen Behandlung dieses Geschäftsvorganges und den auf Ihrem Konto gebuchten Endbetrag finden Sie auf der separaten Steuermitteilung -(Referenz-Nr. XXX1234567899ABC). -Ihre comdirect +(Referenz-Nr. 1234567890). +comdirect bank +Aktiengesellschaft *Diese Abrechnung wird von der Bank nicht unterschrieben DD762/11/09 diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende14.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende14.txt index 44693e345a..733f559ac8 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende14.txt +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende14.txt @@ -12,10 +12,8 @@ PDFBox Version: 1.8.16 -Depotnr.: 1234567890 -BLZ: 123 456 78 - - 12345 678 +Depotnr.: 123456789 +12345 678 BLZ: 123 456 78 Herrn Max Mustermann @@ -25,28 +23,25 @@ Max Mustermann Musterstr. 123 12345 Musterstadt -05.01.2021 +02.11.2020 G u t s c h ri f t fä ll ig e r W e r t p a p i e r -E r tr ä g e Dividendengutschrift Depotbestand Wertpapier-Bezeichnung WKN/ISIN -p e r 0 7. 12 . 2 02 0 To r o m on t I n du st r i e s L t d . 91 43 0 5 - ST K 3 4 , 0 0 0 R eg is te r ed S h ar e s o .N . CA 89 1 10 2 10 50 - Emissionsland: KANADA -CAD 0,31 Dividende pro Stück für Geschäftsjahr 01.01.20 bis 31.12.20 -zahlbar ab 05.01.2021 Quartalsdividende + pe r 20 . 10 . 20 2 0 C VS H e a lt h Co r p. 8 59 03 4 + S T K 3 2, 00 0 R eg is te r ed S h a re s D L -, 0 1 U S 12 6 6 5 0 1 0 0 6 + Emissionsland: VEREINIGTE STAATEN +USD 0,50 Dividende pro Stück für Geschäftsjahr 01.01.20 bis 31.12.20 +zahlbar ab 02.11.2020 Quartalsdividende Abrechnung Dividendengutschrift -Bruttobetrag: CAD 10,54 -25,000 % Quellensteuer CAD 2,64 - -Ausmachender Betrag CAD 7,90 - zum Devisenkurs: EUR/CAD 1,570200 EUR 5,03 +Bruttobetrag: USD 16,00 +15,000 % Quellensteuer USD 2,40 - +Ausmachender Betrag USD 13,60 + zum Devisenkurs: EUR/USD 1,168200 EUR 11,64 Verrechnung über Konto (IBAN) Valuta Zu Ihren Gunsten vor Steuern -DE12 3456 7890 1234 4567 89 EUR 07.01.2021 EUR 5,03 -Die Höhe des erstattungsfähigen Quellensteuerbetrages im Verhältnis zu den not- -wendigerweise anfallenden Gebühren macht eine Rückforderung im Ausland nicht -sinnvoll. +DE12 3456 7890 1234 5678 00 EUR 04.11.2020 EUR 11,64 Information zur steuerlichen Behandlung dieses Geschäftsvorganges und den auf Ihrem Konto gebuchten Endbetrag finden Sie auf der separaten Steuermitteilung -(Referenz-Nr. 1XABCDEF0000V). +(Referenz-Nr. XXX1234567899ABC). Ihre comdirect *Diese Abrechnung wird von der Bank nicht unterschrieben diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende15.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende15.txt index a8a8e2999e..44693e345a 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende15.txt +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende15.txt @@ -12,35 +12,42 @@ PDFBox Version: 1.8.16 -Depotnr.: 123456789 - 97813 010 BLZ: 200 411 55 +Depotnr.: 1234567890 +BLZ: 123 456 78 + + 12345 678 Herrn -Max Mustermann +Max Mustermann -Musterstr. 31 +Musterstr. 123 -12345 Musterstadt -24.03.2021 +12345 Musterstadt +05.01.2021 G u t s c h ri f t fä ll ig e r W e r t p a p i e r -E r tr ä g e -Ertragsgutschrift +Dividendengutschrift Depotbestand Wertpapier-Bezeichnung WKN/ISIN -p e r 1 0 . 03 . 20 2 1 i S h s - M S C I W o r ld U C I T S E T F A 0 H G V0 -S T K 54 ,3 9 4 R e g is t er e d S h a r e s U S D (D i st ) o N I E 00 B 0 M 62 Q5 8 - Emissionsland: IRLAND -USD 0,1234 Ausschüttung pro Stück für Geschäftsjahr 01.03.21 bis 28.02.22 -zahlbar ab 24.03.2021 - Abrechnung Ertragsgutschrift -Bruttobetrag: USD 6,71 - zum Devisenkurs: EUR/USD 1,186400 EUR 5,66 +p e r 0 7. 12 . 2 02 0 To r o m on t I n du st r i e s L t d . 91 43 0 5 + ST K 3 4 , 0 0 0 R eg is te r ed S h ar e s o .N . CA 89 1 10 2 10 50 + Emissionsland: KANADA +CAD 0,31 Dividende pro Stück für Geschäftsjahr 01.01.20 bis 31.12.20 +zahlbar ab 05.01.2021 Quartalsdividende + Abrechnung Dividendengutschrift +Bruttobetrag: CAD 10,54 +25,000 % Quellensteuer CAD 2,64 - +Ausmachender Betrag CAD 7,90 + zum Devisenkurs: EUR/CAD 1,570200 EUR 5,03 Verrechnung über Konto (IBAN) Valuta Zu Ihren Gunsten vor Steuern -DE52 2004 1155 0138 6085 00 EUR 26.03.2021 EUR 5,66 +DE12 3456 7890 1234 4567 89 EUR 07.01.2021 EUR 5,03 +Die Höhe des erstattungsfähigen Quellensteuerbetrages im Verhältnis zu den not- +wendigerweise anfallenden Gebühren macht eine Rückforderung im Ausland nicht +sinnvoll. Information zur steuerlichen Behandlung dieses Geschäftsvorganges und den auf Ihrem Konto gebuchten Endbetrag finden Sie auf der separaten Steuermitteilung -(Referenz-Nr. 2CIGZW227V4000WN). +(Referenz-Nr. 1XABCDEF0000V). Ihre comdirect *Diese Abrechnung wird von der Bank nicht unterschrieben -DD762/11/09 \ No newline at end of file +DD762/11/09 diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende16.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende16.txt index 6d68192543..83cc3d69a0 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende16.txt +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende16.txt @@ -1,4 +1,3 @@ -PDF Autor: 'HAVI Solutions GmbH & Co. KG, phg' PDFBox Version: 1.8.16 ----------------------------------------- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@ -12,39 +11,36 @@ PDFBox Version: 1.8.16 -Depotnr.: 111111111 -11111 111 BLZ: 111 111 11 +Depotnr.: 1234123412 + 10288 010 BLZ: 200 411 33 Herrn -Robin xxxxxxxx xxxxx +Felix Möller -Musterstraße 2 +Dorfstraße -11111 Köln -09.09.2021 -USt-ID-Nr.: DE1111111111 -Rechnungsnummer: 1111111111ABCDE1 +12345 Entenhausen +31.12.2021 +USt-ID-Nr.: DE812279461 +Rechnungsnummer: 567996058551DCD2 G u t s c h ri f t fä ll ig e r W e r t p a p i e r -E r tr ä g e -Dividendengutschrift +Ertragsgutschrift Depotbestand Wertpapier-Bezeichnung WKN/ISIN -p e r 1 7 . 08 . 20 21 M i c ro s of t C o rp . 8 7 0 7 47 - ST K 6 ,3 0 0 R eg i s t e r ed S h ar e s D L - , 00 0 0 0 62 5 U S 59 4 9 1 8 1 04 5 - Emissionsland: VEREINIGTE STAATEN -USD 0,56 Dividende pro Stück für Geschäftsjahr 01.07.20 bis 30.06.21 -zahlbar ab 09.09.2021 Quartalsdividende - Abrechnung Dividendengutschrift -Bruttobetrag: USD 3,53 -15,000 % Quellensteuer USD 0,53 - -Ausmachender Betrag USD 3,00 - zum Devisenkurs: EUR/USD 1,186200 EUR 2,53 +p e r 1 5. 1 2 .2 0 2 1 i Sh s - E O C o rp Bd La r . Ca p U . ET F 77 8 92 8 + S TK 81 , 9 2 1 R e g i s te r e d S ha r e s o . N. I E 0 0 3 2 52 3 47 8 + Emissionsland: IRLAND +EUR 0,2245 Ausschüttung pro Stück für Geschäftsjahr 01.03.21 bis 28.02.22 +zahlbar ab 31.12.2021 + Abrechnung Ertragsgutschrift +Bruttobetrag: EUR 18,39 Verrechnung über Konto (IBAN) Valuta Zu Ihren Gunsten vor Steuern -DE11 1111 1111 1111 1111 11 EUR 13.09.2021 EUR 2,53 +DE04 1234 4567 1234 1234 40 EUR 31.12.2021 EUR 18,39 Information zur steuerlichen Behandlung dieses Geschäftsvorganges und den auf Ihrem Konto gebuchten Endbetrag finden Sie auf der separaten Steuermitteilung -(Referenz-Nr. 111111111111111111). +(Referenz-Nr. 1RIHIHNKLPV001JQ). Ihre comdirect *Diese Abrechnung wird von der Bank nicht unterschrieben -DD762/11/09 +DD762/11/09 \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende17.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende17.txt index 83cc3d69a0..acd857e167 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende17.txt +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende17.txt @@ -1,46 +1,18 @@ -PDFBox Version: 1.8.16 ------------------------------------------ -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -25449 Quickborn - - - - - - - - - -Depotnr.: 1234123412 - 10288 010 BLZ: 200 411 33 -Herrn - -Felix Möller - - - -Dorfstraße - -12345 Entenhausen -31.12.2021 -USt-ID-Nr.: DE812279461 -Rechnungsnummer: 567996058551DCD2 - G u t s c h ri f t fä ll ig e r W e r t p a p i e r -E r tr ä g e -Ertragsgutschrift +comdirect bank + + + +15.12.2010 +G u t s c h ri f t fä ll ig e r W e r t p a p i e r -E r tr ä g e +Dividendengutschrift Depotbestand Wertpapier-Bezeichnung WKN/ISIN -p e r 1 5. 1 2 .2 0 2 1 i Sh s - E O C o rp Bd La r . Ca p U . ET F 77 8 92 8 - S TK 81 , 9 2 1 R e g i s te r e d S ha r e s o . N. I E 0 0 3 2 52 3 47 8 - Emissionsland: IRLAND -EUR 0,2245 Ausschüttung pro Stück für Geschäftsjahr 01.03.21 bis 28.02.22 -zahlbar ab 31.12.2021 - Abrechnung Ertragsgutschrift -Bruttobetrag: EUR 18,39 -Verrechnung über Konto (IBAN) Valuta Zu Ihren Gunsten vor Steuern -DE04 1234 4567 1234 1234 40 EUR 31.12.2021 EUR 18,39 -Information zur steuerlichen Behandlung dieses Geschäftsvorganges und den auf -Ihrem Konto gebuchten Endbetrag finden Sie auf der separaten Steuermitteilung -(Referenz-Nr. 1RIHIHNKLPV001JQ). -Ihre comdirect - -*Diese Abrechnung wird von der Bank nicht unterschrieben -DD762/11/09 \ No newline at end of file +p e r 0 9 . 11 . 2 0 1 0 U n il e ve r N . V . A0 J M Z B +S T K 1 . 9 0 0 , 0 0 0 C e r t . v .A a n d e l e n E O -, 1 6 NL 0 00 0 00 9 3 5 5 + Emissionsland: NIEDERLANDE +EUR 0,208 Dividende pro Stück für Geschäftsjahr 01.01.10 bis 31.12.10 +zahlbar ab 15.12.2010 Zwischendividende + Abrechnung Dividendengutschrift +Bruttobetrag: EUR 395,20 +15,000 % Quellensteuer EUR 59,28 - +Verrechnung über Konto BLZ Valuta Zu Ihren Gunsten vor Steuern +000000000 EUR 00000000 15.12.2010 EUR 335,92 diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende18MitSteuerbehandlung.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende18MitSteuerbehandlung.txt new file mode 100644 index 0000000000..d7031a0d24 --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende18MitSteuerbehandlung.txt @@ -0,0 +1,19 @@ +comdirect bank + + + +27.04.2009 +G u t s c h ri f t fä ll ig e r W e r t p a p i e r -E r tr ä g e +Dividendengutschrift +Depotbestand Wertpapier-Bezeichnung WKN/ISIN +p e r 2 4 . 0 4 . 20 0 9 De u t s c he L uf t h a n s a A G 8 2 3 2 1 2 +S T K 3 . 0 0 0 , 0 0 0 v i nk .N a me n s- A kt ie n o . N . D E 0 00 8 2 3 2 12 5 + Emissionsland: DEUTSCHLAND +EUR 0,70 Dividende pro Stück für Geschäftsjahr 01.01.08 bis 31.12.08 +zahlbar ab 27.04.2009 + Abrechnung Dividendengutschrift +Bruttobetrag: EUR 2.100,00 +25,000 % Kapitalertragsteuer auf EUR 2.100,00 EUR 525,00 - + 5,500 % Solidaritätszuschl. auf EUR 525,00 EUR 28,87 - +Verrechnung über Konto Valuta Zu Ihren Gunsten vor Steuern +0000000 00 EUR 27.04.2009 EUR 1.546,13 diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende18.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende19MitSteuerbehandlung.txt similarity index 100% rename from name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende18.txt rename to name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende19MitSteuerbehandlung.txt diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende19.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende20MitSteuerbehandlung.txt similarity index 100% rename from name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende19.txt rename to name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende20MitSteuerbehandlung.txt diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende21.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende21.txt new file mode 100644 index 0000000000..6019abfc4d --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende21.txt @@ -0,0 +1,50 @@ +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.65.3 +----------------------------------------- +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +25449 Quickborn + + + + + + + + + +Depotnr.: 686280962 +17056 141 BLZ: 722 504 11 +Herrn + +oLSX eskXKY + + + +ILOIyrFcITw 4 + +38913 +05.09.2023 +USt-ID-Nr.: DE812279461 +Rechnungsnummer: 968564919066Hn63 + G u t s c h ri f t fä ll ig e r W e r t p a p i e r -E r tr ä g e +Dividendengutschrift +Depotbestand Wertpapier-Bezeichnung WKN/ISIN + pe r 2 6 . 0 7. 2 0 2 3 P f iz e r I n c. 8 5 2 0 0 9 + S TK 3 0 0 ,0 0 0 Re g i s te r ed S ha r e s DL - , 0 5 U S7 1 7 0 8 1 1 0 3 5 + Emissionsland: VEREINIGTE STAATEN +USD 0,41 Dividende pro Stück für Geschäftsjahr 01.01.23 bis 31.12.23 +zahlbar ab 05.09.2023 Quartalsdividende + Abrechnung Dividendengutschrift +Bruttobetrag: USD 123,00 +15,000 % Quellensteuer USD 18,45 - +Ausmachender Betrag USD 104,55 + zum Devisenkurs: EUR/USD 1,077000 EUR 97,08 +Verrechnung über Konto (IBAN) Valuta Zu Ihren Gunsten vor Steuern +XJ50 9311 1111 5451 6465 00 EUR 07.09.2023 EUR 97,08 +Information zur steuerlichen Behandlung dieses Geschäftsvorganges und den auf +Ihrem Konto gebuchten Endbetrag finden Sie auf der separaten Steuermitteilung +(Referenz-Nr. 22IJUON6JHE000NY). +Ihre comdirect + +*Diese Abrechnung wird von der Bank nicht unterschrieben +DD762/11/09 \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende22.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende22.txt new file mode 100644 index 0000000000..e2114f6705 --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende22.txt @@ -0,0 +1,47 @@ +PDFBox Version: 1.8.16 +----------------------------------------- + +25449 Quickborn + + + + + + + + +11111 111 Depo tnummer: 1111111 11 +Frau +Vorname Nachname +und Frau Vorname Nachname +Straße 11 + +11111 Stadt +04.02.2008 +Gutschrift fälliger Wertpapier-Erträge - Halbeinkünfteverfahren + +Dividendengutschrift +Depotbestand Wertpapier-Bezeichnung WKN/ISIN +p e r 1 7 .0 8. 2 0 0 7 P et r o le o B r as i l ei ro S . A . 8 9 9 0 1 9 +S T K 30 0, 00 0 R eg . P re fe r r e d Sh ar e s o .N . BR P E TR A C N P R 6 + Emissionsland: BRASILIEN +EUR 0,18691529 Dividende pro Stück für Geschäftsjahr 01.01.07 bis 31.12.07 +zahlbar ab 29.01.2008 Zwischendividende + Abrechnung Dividendengutschrift +Bruttobetrag: EUR 56,07 +15,000 % Quellensteuer EUR 8,41 - +Gutschrift auf Konto Valuta Zu Ihren Gunsten +1111111 11 EUR 29.01.2008 EUR 47,66 +Die Erträge unterliegen der üblichen Besteuerung. +Die nicht erstattungsfähige Quellensteuer in Höhe von EUR 8,41 +ist ggf. auf die Einkommen- bzw. Körperschaftsteuer anrechenbar. +Erträge aus ausländischen Aktien unterliegen nicht der Kapitalertragsteuer. +comdirect bank +Aktiengesellschaft + +*Diese Abrechnung wird von der Bank nicht unterschrieben + + Keine Steuerbescheinigung + Ausländische Quellensteuern dürfen nicht bescheinigt werden +Kapitalerträge sind einkommensteuerpflichtig +D762S0/11/2001 \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende23.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende23.txt new file mode 100644 index 0000000000..0240981def --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende23.txt @@ -0,0 +1,44 @@ +PDFBox Version: 1.8.16 +----------------------------------------- + +25449 Quickborn + + + + + + + + +11111 1110 Depo tnummer: 1111111 11 +Frau +Vorname Nachname +und Frau Vorname Nachname +Straße 111 + +11111 Stadt +15.12.2008 + G u t s c h ri f t fä ll ig e r W e r t p a p i e r -E r tr ä g e +Ertragsgutschrift +Depotbestand Wertpapier-Bezeichnung WKN/ISIN + p er 1 2 . 1 2 . 2 00 8 iS ha r es D J E U R O S TO X X 5 0 ( D E) 5 93 39 5 + S T K 24 0 , 0 0 0 I n h a b er -A n t ei l e D E 00 0 59 33 9 5 6 + Emissionsland: DEUTSCHLAND +EUR 0,208 Ausschüttung pro Stück für Geschäftsjahr 01.05.08 bis 30.04.09 +EUR 0,00 Anteil Körperschaftsteuerminderungsbetrag pro Stück +zahlbar ab 15.12.2008 + Abrechnung Ertragsgutschrift +Bruttobetrag: EUR 49,92 +Gutschrift auf Konto Valuta Zu Ihren Gunsten +1111111 11 EUR 15.12.2008 EUR 49,92 +anrechenbare Quellensteuer Privatvermögen/Betriebsvermögen EUR 2,04 +Wegen der Besteuerung im Einzelfall weisen wir auf den Rechenschaftsbericht +der Gesellschaft hin. +comdirect bank +Aktiengesellschaft + +*Diese Abrechnung wird von der Bank nicht unterschrieben + + Keine Steuerbescheinigung +Kapitalerträge sind einkommensteuerpflichtig +D762S0/11/2001 \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende24.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende24.txt new file mode 100644 index 0000000000..ff313a3719 --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende24.txt @@ -0,0 +1,54 @@ +PDFBox Version: 1.8.16 +----------------------------------------- + +25449 Quickborn + + + + + + + + +11111 111 Depo tnummer: 1111111 11 +Frau +Vorname Nachname +und Frau Vorname Nachname +Straße 11 + +11111 Stadt +16.05.2008 +Gutschrift fälliger Wertpapier-Erträge - Halbeinkünfteverfahren + +Dividendengutschrift +Depotbestand Wertpapier-Bezeichnung WKN/ISIN + p e r 1 5 . 0 5 . 2 0 0 8 D eu t sc h e T el e k o m A G 5 5 5 7 50 +S T K 1 6 6 , 00 0 N am e n s - A kt i e n o. N . D E0 0 05 5 5 7 50 8 + Emissionsland: DEUTSCHLAND +EUR 0,78 Dividende pro Stück für Geschäftsjahr 01.01.07 bis 31.12.07 +zahlbar ab 16.05.2008 + Ermittlung der Steuerbasisbeträge +Bruttobetrag: EUR 129,48 +Einnahmen aus Kapitalvermögen i. S. d. Par. 20 EStG EUR 129,48 + gesamt vergütet bescheinigt +Kapitalertragsteuer 20,000 % EUR 25,90 0,00 25,90 +Solidaritätszuschlag EUR 1,42 0,00 1,42 + Abrechnung Dividendengutschrift +Bruttobetrag: EUR 129,48 +20,000 % Kapitalertragsteuer auf EUR 129,48 EUR 25,90 - + 5,500 % Solidaritätszuschl. auf EUR 25,90 EUR 1,42 - +Gutschrift auf Konto Valuta Zu Ihren Gunsten +1111111 11 EUR 16.05.2008 EUR 102,16 +Die Erträge unterliegen der Besteuerung nach dem Halbeinkünfteverfahren. Die +einbehaltene KEST und der einbehaltene Solidaritätszuschlag werden auf die Steuern +vom Einkommen angerechnet. Bei beschränkt Steuerpflichtigen ist mit dem Steuerabzug +die Steuer im Inland grundsätzlich abgegolten. Dies gilt nicht, wenn die Einkünfte +Betriebseinnahmen eines inländischen Betriebes sind (Par.50 Abs. 5 EStG). +comdirect bank +Aktiengesellschaft + +*Diese Abrechnung wird von der Bank nicht unterschrieben + + Jahressteuerbescheinigung folgt +Kapitalerträge sind einkommensteuerpflichtig +D762S0/11/2001 \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende25.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende25.txt new file mode 100644 index 0000000000..8f2fbbf1ee --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Dividende25.txt @@ -0,0 +1,44 @@ +``` +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.65.2.qualifier +----------------------------------------- +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +25449 Quickborn + + + + + + + + + +Depotnr.: 175459029 +42837 164 BLZ: 349 844 11 +Herrn + +YxugSK GqWE + + + +ELyMfvNJHsf 28 + +73480 WjsFpnQYGYKW +22.12.2017 +G u t s c h ri f t fä ll ig e r W e r t p a p i e r -E r tr ä g e +Ertragsthesaurierung +Depotbestand Wertpapier-Bezeichnung WKN/ISIN +p e r 3 1. 0 8 . 2 01 7 Ly x o r F T S E A T HE X L a . C ap U. ET F L Y X 0 BF +S T K 3 . 1 0 0, 0 0 0 A ct i o ns au P o rt e u r o . N . F R 0 0 1 0 4 0 5 4 3 1 + Emissionsland: FRANKREICH +EUR 0,00 Thesaurierung pro Stück für Geschäftsjahr 01.09.16 bis 31.08.17 +Zufluß: 31.08.2017 + K E I N E B A R A U S S C H Ü T T U N G +KAPITALERTRÄGE SIND EINKOMMENSTEUERPFLICHTIG +comdirect bank +Aktiengesellschaft + +*Diese Abrechnung wird von der Bank nicht unterschrieben +DD762/11/09 + +``` \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf01.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf01.txt index 1ed8f92b22..01bad0731e 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf01.txt +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf01.txt @@ -1,241 +1,66 @@ - * +PDFBox Version: 1.8.16 +----------------------------------------- +Ihren Auftrag haben wir gemäß unseren Sonderbe- +dingungen für Wertpapiergeschäfte wie nachstehend +ausgeführt. +Die Wertpapiere haben wir der Abrechnung entspre- +25449 Quickborn chend gebucht.Wir bitten Sie, diese Abrechnung auf ihre Richtigkeit und +Telefon 01803-33 63 66 Vollständigkeit zu überprüfen und etwaige Einwendungen: unverzüglich zu erheben. -Telefon : 04106-708 25 00 + 11111 111 + + +Vorname Nachname Depotnummer: 1111111 11 +und Frau Vorname Nachname +Straße 11 +1111 Stadt - - - - -Max Mustermann - -Im Weg 5 -12345 Stadt -01097835 -Depotnr.: 0000000 00 -BLZ: 200 411 55 -GESCHÄFTSABRECHNUNG VOM 01.01.2000 - +ABRECHNUNG VOM 19.05.2007 Wertpapierkauf -Geschäftsnummer : 00 000000 - 000000000000 Rechnungsnummer : 123456789000AAA0 -Geschäftstag : 01.01.2000 Ausführungsplatz : XETRA - (Kommissionsgeschäft) +Geschäftsnummer : 11 111111 bis 11 111112 + 111111111111 Rechnungsnummer : 11111111111DB11 +Geschäftstag : 19.05.2007 Börsenplatz : XETRA -Wertpapier-Bezeichnung WPKNR/ISIN -BASF BASF11 -Inhaber-Anteile DE000BASF111 +Wertpapier-Bezeichnung WPKNR/ISIN +LVMH Moët Henn. L. Vuitton SA 853292 +Actions Port. (C.R.) EO 0,3 FR0000121014 -Nennwert Zum Kurs von -St. 1,000 EUR 1,000 - Kurswert : EUR 1,00 +Ihre Order wurde wie folgt ausgeführt: +Geschäftsnr. Nennwert Zum Kurs von Kurswert + 11 111111 St. 5 EUR 86,00 EUR 430,00 + 11 111112 St. 95 EUR 86,00 EUR 8.170,00 +-------------------------------------------------------------------------------- +Zusammenfassung (ggf. gerundet) + St. 100 EUR 86,00 -IBAN Valuta Zu Ihren Lasten vor Steuern -DE00 0000 0000 0000 0000 00 EUR 01.01.2000 EUR 1,00 + Gesamtkurswert : EUR 8.600,00 + Gesamtprovision : EUR 26,40 + Börsenplatzabhäng. Entgelt : EUR 1,50 -Von der zuständigen Stelle wurde der Aktiengewinn für Anteile im Betriebsver- -mögen natürlicher Personen/Personengesellschaften pro Anteil am 01.01.2000 mit -00,00 % gemeldet, für Anteile im Betriebsvermögen von Körperschaften -mit 00,00 %. -Von der zuständigen Stelle wurde der Immobiliengewinn pro Anteil am 01.01.2000 -mit 0,00 % vom Rücknahmepreis gemeldet. -Verwahrungs-Art: GIROSAMMELDEPOT +Verrechnung über Konto Valuta Zu Ihren Lasten + 1111111 11 EUR 23.05.2007 EUR 8.627,90 +Verwahrungs-Art: GIROSAMMELDEPOT +Teilausführung Ihrer Order -Informationen zur steuerlichen Behandlung dieses Geschäftsvorgangs und den auf -Ihrem Konto gebuchten Endbetrag finden Sie auf der separaten Steuermitteilung. comdirect bank AG + Diese Abrechnung wird von der Bank nicht unterschrieben -Die Leistung ist gemäß §4 Nr.8 UStG umsatzsteuerfrei. USt-Id-Nr.: DE 812 279 461 -25449 Quickborn -Ihren Auftrag haben wir gemäß unseren produktbezogenen -Geschäftsbedingungen "Trading" wie nachstehend ausgeführt. -Die Wertpapiere haben wir der Abrechnung entsprechend gebucht. -Wir bitten Sie, diese Abrechnung auf ihre Richtigkeit und -Vollständigkeit zu überprüfen und etwaige Einwendungen -unverzüglich zu erheben. -A -1 -1 -3 -D -O -1 -5 -D -D -/ -1 -6 -/ -0 -4 -/ -2 -0 -1 -0 -Kundennr. /BLZ Bezeichnung -abweichend wirtschaftlich Berechtigter - -Max Mustermann - -Im Weg 5 -12345 Stadt - ---- - 3596418 -200 411 55 -KEINE STEUERBESCHEINIGUNG ... -comdirect bank AG -25451 Quickborn - -Telefon: 04106 - 708 25 00 -Datum: 01.01.2000 - -Referenz-Nummer: 00I0DY00000000HW - - - - - - -Depotnummer: 0000000 00 - - -Herrn -Max Mustermann -Im Weg 5 -12345 Stadt -010 97835 - - - - - - - - - -Steuerliche Behandlung: Wertpapierkauf Nr. 00000000 vom 01.01.2000 -Stk. 1,000 Name der Security , WKN / ISIN: BASF11 / DE000BASF11 -Zu Ihren Lasten vor Steuern: EUR -1,0 - - - - - - - - -Steuerbemessungsgrundlage EUR 0,00 - - -Kapitalertragsteuer EUR 0,00 -Solidaritätszuschlag EUR 0,00 -Kirchensteuer EUR 0,00 _____________________ -abgeführte Steuern EUR 0,00 _____________________ - -Zu Ihren Lasten nach Steuern: EUR -1,00 - - - - - -Die Belastung erfolgt mit Valuta 01.01.2001 auf Konto EUR mit der IBAN DE00 0000 0000 0000 0000 00 - - - - - - - - - -Bisher einbehaltene bzw. angerechnete Steuer in EUR (4) -Verrechnungssalden in EUR (4) -in -vor Ermittlung -nach Ermittlung -einbehaltene -Kapitalertragsteuer Solidaritätszuschlag -einbehaltene -Kirchensteuer -angerechnete -ausländische Quellensteuer -vor Ermittlung -nach Ermittlung -aus Aktien -sonstige -Gewinne / Verluste -anrechenbare -ausländische Quellensteuer -verfügbarer -Freistellungsauftrag -einbehaltener -Gewinne / Verluste -2000 - 0,00 - 0,00 - 0,00 - 0,00 - 0,00 - 0,00 - 0,00 - 0,00 -KEINE STEUERBESCHEINIGUNG -2000in - 0,00 - 0,00 - 0,00 - 0,00 - 0,00 - 0,00 - 0,00 - 0,00 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -comdirect bank AG -Diese Abrechnung ist maschinell erstellt und wird nicht unterschrieben. +Die Leistung ist gemäß §4 Nr.8 UStG umsatzsteuerfrei. USt-Id-Nr.: DE 111 111 111 +DoComd/01/2001 \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf02.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf02.txt index dc999e28d4..072535ae18 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf02.txt +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf02.txt @@ -1,188 +1,32 @@ -Ihren Auftrag haben wir gemäß unseren produktbezogenen -Geschäftsbedingungen "Trading" wie nachstehend ausgeführt. -Die Wertpapiere haben wir der Abrechnung entsprechend gebucht. -Wir bitten Sie, diese Abrechnung auf ihre Richtigkeit und -Vollständigkeit zu überprüfen und etwaige Einwendungen -25449 Quickborn unverzüglich zu erheben. - -Telefon : 04106-708 25 99 - - - - - 12345 010 -Depotnr.: 123456 00 - BLZ: 200 111 99 -Max Mustermann - - -Hauptstraße. 42 -12345 Musterdorf - - - - - -GESCHÄFTSABRECHNUNG VOM 01.01.2011 - +comdirect bank + +GESCHÄFTSABRECHNUNG VOM 18.07.2016 + * -Wertpapierkauf -Geschäftsnummer : 92 123456 -Ordernummer : 123456666666-001 Rechnungsnummer : 334123467dfdd5 -Geschäftstag : 01.01.2011 Ausführungsplatz : XETRA -Handelszeit : 09:04 Uhr (MEZ/MESZ) (Kommissionsgeschäft) - -Wertpapier-Bezeichnung WPKNR/ISIN -ComSta foobar .ETF ETF999 -Inhaber-Anteile I o.N. LU1234444444 - - -Nennwert Zum Kurs von -St. 42 EUR 33,33 - Kurswert : EUR 1.399,86 - --------------------------------------------------------------------------------- -Eigene Entgelte - Provision : EUR 12,10 - Börsenplatzabhäng. Entgelt : EUR 1,50 - Summe Entgelte : EUR 13,60 --------------------------------------------------------------------------------- - - -IBAN Valuta Zu Ihren Lasten vor Steuern -DE09 1111 2222 3333 4444 40 EUR 03.01.2011 EUR 1.413,46 - -Von der zuständigen Stelle wurde der Aktiengewinn für Anteile im Betriebsver- -mögen natürlicher Personen/Personengesellschaften pro Anteil am 01.01.2011 nicht -gemeldet, für Anteile im Betriebsvermögen von Körperschaften nicht gemeldet. -Von der zuständigen Stelle wurde der Immobiliengewinn pro Anteil am 01.01.2011 -mit 0,00 % vom Rücknahmepreis gemeldet. -Verwahrungs-Art: GIROSAMMELDEPOT - - - -Informationen zur steuerlichen Behandlung dieses Geschäftsvorgangs und den auf -Ihrem Konto gebuchten Endbetrag finden Sie auf der separaten Steuermitteilung. - - -Bei Fragen geben Sie bitte die Ordernummer an. - -comdirect bank AG - -Diese Abrechnung wird von der Bank nicht unterschrieben -Die Leistung ist gemäß §4 Nr.8 UStG umsatzsteuerfrei. USt-Id-Nr.: DE 812 279 461 -A113 -DO15DD/16/33/2010 - -Kundennr. /BLZ Bezeichnung -Max Mustermann - 123455 - - -333 222 33 Musterstra0e. 4 12345 Musterdorf -abweichend wirtschaftlich Berechtigter - - ---- -c o m d i r e c t b a n k A G - -2 5 4 5 1 Q u i c k b o r n - 0 1 0 1 0272 - -T e le f o n : 0 4 1 0 6 - 7 0 8 25 00 - -H e r r n D a t u m : 0 2 . 0 1 .2011 - M a x M u s t e r m a n n D e p o t n u m m er: 1 3 4 5 6 7 8 - M u s t e r s t r a s s e 6 -12345 Musterdorf R e f e r e n z - N u mmer: 0 7 I 9 2 W 9 9 Odd000xx - - - - -Steuerliche Behandlung: Wertpapierkauf Nr. 1234555 vom 01.01.2011 -Stk. 99 C.Sfoo bar etf I , WKN / ISIN: ETF999 / LU999999999 -Z u Ih r e n L a s te n v o r S te u e r n: E U R -9.999,9 - - - - - - - - -S te u e rb e m e ss u n g s g r u n d la g e E U R 0 , 0 0 - - -K ap i ta le r tr a gs t e ue r E U R 0 , 0 0 -S ol id a ri tä t sz u s c hl a g E U R 0 , 0 0 -K irc h e n s te u e r _E _U _R _ _ _ _ _ _ _ _ _ _ _ _ _ _ _0 _, _0 _0 -a b g e f ü h rt e S t e u er n E_ U_ R_ _ _ _ _ _ _ _ _ _ __ _ _ __0,_0_ 0_ - -Z u Ih r e n L a s te n n a ch S te u e r n : E U R -9.999,9 8 - - - - - -Die Belastung erfolgt mit Valuta 03.01.2011 auf Konto EUR mit der IBAN DE09 9999 9999 9999 9999 40 - - - - - - - - -KEINE STEUERBESCHEINIGUNG ... -Bisher einbehaltene bzw. angerechnete Steuer in EUR (4) -in 2014 einbehaltene einbehaltener einbehaltene angerechneteKapitalertragsteuer Solidaritätszuschlag Kirchensteuer ausländische Quellensteuer -vor Ermittlung - 0,00 0,00 - 0,00 0,00 -nach Ermittlung - 0,00 0,00 0,00 0,00 -Verrechnungssalden in EUR (4) -in 2001 Gewinne / Verluste sonstige anrechenbare verfügbareraus Aktien Gewinne / Verluste ausländische Quellensteuer Freistellungsauftrag -vor Ermittlung - 0,00 0,00 0,00 0,00 -nach Ermittlung - 0,00 0,00 - 0,00 0,00 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -comdirect bank AG -Diese Abrechnung ist maschinell erstellt und wird nicht unterschrieben. - - - - - -(4) Die ausgewiesenen EUR-Beträge spiegeln den Stand zum Abrechnungszeitpunkt wider. -KEINE STEUERBESCHEINIGUNG +Wertpapierkauf +Geschäftsnummer : 91 029501 +Ordernummer : 072324316214-001 Rechnungsnummer : 395955075438D1F5 +Geschäftstag : 18.07.2016 Ausführungsplatz : GETTEX +Handelszeit : 17:02 Uhr (MEZ/MESZ) (Kommissionsgeschäft) + +Wertpapier-Bezeichnung WPKNR/ISIN +Boeing Co. 850471 +Registered Shares DL 5 US0970231058 + + +Nennwert Zum Kurs von +St. 160 EUR 120,647 + Kurswert : EUR 19.303,52 + +-------------------------------------------------------------------------------- +Eigene Entgelte + Provision : EUR 53,16 + Börsenplatzabhäng. Entgelt : EUR 2,50 + Summe Entgelte : EUR 55,66 +-------------------------------------------------------------------------------- + + +IBAN Valuta Zu Ihren Lasten vor Steuern +DE00 0000 0000 0000 0000 00 EUR 20.07.2016 EUR 19.359,18 + +Verwahrungs-Art: GIROSAMMELDEPOT \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf03.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf03.txt index fd8701c976..a495813555 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf03.txt +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf03.txt @@ -1,181 +1,33 @@ -Ihren Auftrag haben wir gemäß unseren produktbezogenen -Geschäftsbedingungen "Trading" wie nachstehend ausgeführt. -Die Wertpapiere haben wir der Abrechnung entsprechend gebucht. -Wir bitten Sie, diese Abrechnung auf ihre Richtigkeit und -Vollständigkeit zu überprüfen und etwaige Einwendungen -25449 Quickborn unverzüglich zu erheben. - -Telefon : 04106-708 25 00 - - - - - 12345 010 -Depotnr.: 0000000 00 - BLZ: 200 411 55 -Vorname Nachname - - -Weg 7 -12345 Stadt - - - - - -GESCHÄFTSABRECHNUNG VOM 27.06.2016 - -* -Wertpapierkauf -Geschäftsnummer : 92 018390 -Ordernummer : 123456789123-001 Rechnungsnummer : 123456789987DE35 -Geschäftstag : 27.06.2016 Abwicklung : Live Trading -Handelszeit : 17:00 Uhr (MEZ/MESZ) - -Wertpapier-Bezeichnung WPKNR/ISIN -NXP Semiconductors NV A1C5WJ -Aandelen aan toonder EO -,20 NL0009538784 - - -Nennwert Zum Preis von -St. 12 EUR 67,73 franco Courtage - Kurswert : EUR 812,76 - --------------------------------------------------------------------------------- -Eigene Entgelte - Provision : EUR 9,90 --------------------------------------------------------------------------------- - - -IBAN Valuta Zu Ihren Lasten vor Steuern -DE12 3456 7891 2345 6789 01 EUR 29.06.2016 EUR 822,66 - -Verwahrungs-Art: GIROSAMMELDEPOT - - - -Informationen zur steuerlichen Behandlung dieses Geschäftsvorgangs und den auf -Ihrem Konto gebuchten Endbetrag finden Sie auf der separaten Steuermitteilung. - - -Bei Fragen geben Sie bitte die Ordernummer an. - -comdirect bank AG - -Diese Abrechnung wird von der Bank nicht unterschrieben -Die Leistung ist gemäß §4 Nr.8 UStG umsatzsteuerfrei. USt-Id-Nr.: DE 812 279 461 -A113 -DO15DD/16/04/2010 -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -Kundennr. /BLZ Bezeichnung -Vorname Nachname - 1234567 - - -200 411 55 Weg 7 12345 Stadt -abweichend wirtschaftlich Berechtigter - - ---- -c o m d i r e c t b a n k A G - - 2 5 4 5 1 Q u i c k b o r n - 0 1 0 9 7872 - -T e le f o n : 0 4 1 0 6 - 7 0 8 25 00 - -Herrn D a t u m : 2 7 . 0 6 .2016 - M a x M u s t e r m a n n D e p o t n u m m er: 1 2 3 4 5 6 7 89 -M u s t e r s t r a s s e 6 -12345 Stadt R e f e r e n z - N u mmer: 1 2 A B C D E F A1B000CD - - - - -Steuerliche Behandlung: Wertpapierkauf Nr. 92018390 vom 27.06.2016 -Stk. 12 NXP SEMICONDUCTORS EO-,20 , WKN / ISIN: A1C5WJ / NL0009538784 -Z u Ih r e n L a s te n v o r S te u e r n: E U R -822,6 6 - - - - - - - - -S te u e rb e m e ss u n g s g r u n d la g e E U R 0 , 0 0 - - -K ap i ta le r tr a gs t e ue r E U R 0 , 0 0 -S ol id a ri tä t sz u s c hl a g E U R 0 , 0 0 -K irc h e n s te u e r _E U_ _R _ _ _ _ _ _ _ _ _ _ _ _ _ _ _0 _, _0 _0 -a b g e f ü h rt e S t e u er n _E U_ _R _ _ _ _ _ _ _ __ _ _ _ _ __0,_0_ 0_ - -Z u Ih r e n L a s te n n a ch S te u e r n : E U R -822,6 6 - - - - - -Die Belastung erfolgt mit Valuta 29.06.2016 auf Konto EUR mit der IBAN DE12 3456 7891 2345 6789 01 - - - - - - - - -KEINE STEUERBESCHEINIGUNG ... -Bisher einbehaltene bzw. angerechnete Steuer in EUR (4) -in 2016 einbehaltene einbehaltener einbehaltene angerechneteKapitalertragsteuer Solidaritätszuschlag Kirchensteuer ausländische Quellensteuer -vor Ermittlung - 0,00 0,00 - 0,00 0,00 -nach Ermittlung - 0,00 0,00 0,00 0,00 -Verrechnungssalden in EUR (4) -in 2016 Gewinne / Verluste sonstige anrechenbare verfügbareraus Aktien Gewinne / Verluste ausländische Quellensteuer Freistellungsauftrag -vor Ermittlung - 0,00 000,00 0,00 000,00 -nach Ermittlung - 0,00 000,00 - 0,00 000,00 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -comdirect bank AG -Diese Abrechnung ist maschinell erstellt und wird nicht unterschrieben. - - - - - -(4) Die ausgewiesenen EUR-Beträge spiegeln den Stand zum Abrechnungszeitpunkt wider. -KEINE STEUERBESCHEINIGUNG +comdirect bank + +GESCHÄFTSABRECHNUNG VOM 14.03.2013 +* Wertpapierkauf +Geschäftsnummer : 91 006132 + 071077639314-001 Rechnungsnummer : 290356708923DCA5 +Geschäftstag : 14.03.2013 Ausführungsplatz : XETRA +Handelszeit : 12:09 Uhr (MEZ/MESZ) (Kommissionsgeschäft) + +Wertpapier-Bezeichnung WPKNR/ISIN +BayWa AG 519406 +vink. Namens-Aktien o.N. DE0005194062 + + +Nennwert Zum Kurs von +St. 1.437 EUR 37,22 + Kurswert : EUR 16.265,14 + +-------------------------------------------------------------------------------- +Eigene Entgelte + Provision : EUR 45,56 + Börsenplatzabhäng. Entgelt : EUR 1,50 + Summe Entgelte : EUR 47,06 +-------------------------------------------------------------------------------- +Fremde Kosten + Umschreibeentgelt : EUR 0,60 +-------------------------------------------------------------------------------- + + +Verrechnung über Konto BLZ Valuta Zu Ihren Lasten vor Steuern + 0000000 00 EUR 000 000 00 18.03.2013 EUR 16.312,80 + +Verwahrungs-Art: GIROSAMMELDEPOT diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf04.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf04.txt index 69c61fbd72..aba4736576 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf04.txt +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf04.txt @@ -1,65 +1,57 @@ +PDF Autor: 'HAVI Solutions GmbH & Co. KG, phg' +PDFBox Version: 1.8.16 +----------------------------------------- Ihren Auftrag haben wir gemäß unseren produktbezogenen Geschäftsbedingungen "Trading" wie nachstehend ausgeführt. Die Wertpapiere haben wir der Abrechnung entsprechend gebucht. Wir bitten Sie, diese Abrechnung auf ihre Richtigkeit und Vollständigkeit zu überprüfen und etwaige Einwendungen 25449 Quickborn unverzüglich zu erheben. - -Telefon : 04106-708 25 00 +fon : 04106-708 25 00 Tele - xxxxx xxx -Depotnr.: xxxxxxx 00 - BLZ: xxx xxx xx - xxxx xxxxxxxx - - -xxxxxxxxxxx. -xx xx xxxx xxxxxxxx/xxxxxxx - + +Depotnr.: -GESCHÄFTSABRECHNUNG VOM 22.11.2016 +GESCHÄFTSABRECHNUNG VOM 17.04.2020 * Wertpapierkauf -Geschäftsnummer : 91 006626 bis 91 006806 -Ordernummer : 072450450919 Rechnungsnummer : 406909971273D0D5 -Geschäftstag : 22.11.2016 Ausführungsplatz : XETRA - (Kommissionsgeschäft) +Geschäftsnummer : +Ordernummer : -001 Rechnungsnummer : +Geschäftstag : 16.04.2020 Ausführungsplatz : NEW YORK NASDAQ (GSM) +Handelszeit : 18:33 Uhr (Ortszeit) (Kommissionsgeschäft) Wertpapier-Bezeichnung WPKNR/ISIN -Medtronic PLC A14M2J -Registered Shares DL -,0001 IE00BTN1Y115 +Amazon.com Inc. 906866 +Registered Shares DL -,01 US0231351067 -Ihre Order wurde wie folgt ausgeführt: +Nennwert Zum Kurs von +St. 2 USD 2.384,00 + Kurswert : USD 4.768,00 -Handelszeit Nennwert Zum Kurs von Kurswert - 14:23 St. 15 EUR 71,00 EUR 1.065,00 - 14:23 St. 3 EUR 71,00 EUR 213,00 - 14:23 St. 1 EUR 71,00 EUR 71,00 - 14:23 St. 1 EUR 71,00 EUR 71,00 --------------------------------------------------------------------------------- - Summe St. 20 EUR 71,00 EUR 1.420,00 -(ggf. gerundet) + Ausmachender Betrag : USD 4.781,90 + Umrechn. zum Dev. kurs 1,080600 vom 17.04.2020 : EUR 4.425,22 -------------------------------------------------------------------------------- Eigene Entgelte - Gesamtprovision : EUR 9,90 - Börsenplatzabhäng. Entgelt : EUR 1,50 - Summe Entgelte : EUR 11,40 + Provision : EUR 18,93 +-------------------------------------------------------------------------------- +Fremde Kosten + Fremde Spesen : USD 13,90 -------------------------------------------------------------------------------- IBAN Valuta Zu Ihren Lasten vor Steuern -DExx xxxx xxxx xxxx xxxx xx EUR 24.11.2016 EUR 1.431,40 + 20.04.2020 EUR 4.444,15 -Verwahrungs-Art: GIROSAMMELDEPOT -Teilausführung Ihrer Order +Verwahrungs-Art: WERTPAPIERRECHNUNG USA/KANADA +Ihre Wertpapier-Order wurde über das Online Banking erteilt. @@ -72,70 +64,26 @@ Bei Fragen geben Sie bitte die Ordernummer an. comdirect bank AG Diese Abrechnung wird von der Bank nicht unterschrieben -Die Leistung ist gemäß §4 Nr.8 UStG umsatzsteuerfrei. USt-Id-Nr.: DE 812 279 461 -A113 -DO15DD/16/04/2010 +Die Leistung ist gemäß §4 Nr.8 UStG umsatzsteuerfrei. USt-Id-Nr.: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -Kundennr. /BLZ Bezeichnung -xxx xxxx xxxxxxxxx - xxxxxxx - - -xxx xxx xx xxxxxxxxxxxx. x xx xx xxxx xxxxxxxxxx SCHWEIZ -abweichend wirtschaftlich Berechtigter - - ---- -c o m d i r e c t b a n k A G - - 2 5 4 5 1 Q u i c k b o r n - 0 1 0 9 7755 - -T e le f o n : 0 4 1 0 6 - 7 0 8 25 00 - -Herrn D a t u m : 2 2 . 1 1 .2016 -x xx. x x x x x x x x x xx x x - D e p o t n u m m er: x x x x x x x xx - x x x x x x x x x x x x . x -xx xx xxxx xxxxxxxxx/xxxxxxx R e f e r e n z - N u mmer: 0 C I B 2 B G S B0B004YO - - - - -Steuerliche Behandlung: Wertpapierkauf Nr. 91006626 vom 22.11.2016 -Stk. 20 MEDTRONIC PLC DL-,0001 , WKN / ISIN: A14M2J / IE00BTN1Y115 -Z u Ih r e n L a s te n v o r S te u e r n: E U R -1.431,4 0 - - - - - - - - -S te u e rb e m e ss u n g s g r u n d la g e E U R 0 , 0 0 - - -K ap i ta le r tr a gs t e ue r E U R 0 , 0 0 -S ol id a ri tä t sz u s c hl a g E U R 0 , 0 0 -K irc h e n s te u e r _E U_ _R _ _ _ _ _ _ _ _ _ _ _ _ _ _ _0 _, _0 _0 -a b g e f ü h rt e S t e u er n _E U_ _R _ _ _ _ _ _ _ __ _ _ _ _ __0,_0_ 0_ - -Z u Ih r e n L a s te n n a ch S te u e r n : E U R -1.431,4 0 - - - - - -Die Belastung erfolgt mit Valuta 24.11.2016 auf Konto EUR mit der IBAN DExx xxxx xxxx xxxx xxxx 40 - - - - - - - - - + + + + + + + + + + + + + + + + + + @@ -153,4 +101,3 @@ Diese Abrechnung ist maschinell erstellt und wird nicht unterschrieben. (4) Die ausgewiesenen EUR-Beträge spiegeln den Stand zum Abrechnungszeitpunkt wider. KEINE STEUERBESCHEINIGUNG - diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf05.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf05.txt index 072535ae18..9ac174bed3 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf05.txt +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf05.txt @@ -1,32 +1,57 @@ -comdirect bank - -GESCHÄFTSABRECHNUNG VOM 18.07.2016 - -* -Wertpapierkauf -Geschäftsnummer : 91 029501 -Ordernummer : 072324316214-001 Rechnungsnummer : 395955075438D1F5 -Geschäftstag : 18.07.2016 Ausführungsplatz : GETTEX -Handelszeit : 17:02 Uhr (MEZ/MESZ) (Kommissionsgeschäft) - -Wertpapier-Bezeichnung WPKNR/ISIN -Boeing Co. 850471 -Registered Shares DL 5 US0970231058 - - -Nennwert Zum Kurs von -St. 160 EUR 120,647 - Kurswert : EUR 19.303,52 - --------------------------------------------------------------------------------- -Eigene Entgelte - Provision : EUR 53,16 - Börsenplatzabhäng. Entgelt : EUR 2,50 - Summe Entgelte : EUR 55,66 --------------------------------------------------------------------------------- - - -IBAN Valuta Zu Ihren Lasten vor Steuern -DE00 0000 0000 0000 0000 00 EUR 20.07.2016 EUR 19.359,18 - -Verwahrungs-Art: GIROSAMMELDEPOT \ No newline at end of file +PDFBox Version: 1.8.16 +----------------------------------------- +Ihren Auftrag haben wir gemäß unseren Sonderbe- +dingungen für Wertpapiergeschäfte wie nachstehend +ausgeführt. +Die Wertpapiere haben wir der Abrechnung entspre- +25449 Quickborn chend gebucht.Wir bitten Sie, diese Abrechnung auf ihre Richtigkeit und +Telefon 01803-33 63 66 Vollständigkeit zu überprüfen und etwaige Einwendungen: unverzüglich zu erheben. + + + + + 11111 111 + + + +Vorname Nachname Depotnummer: 1111111 11 +und Frau Vorname Nachname +Straße 111 + +11111 Stadt + + + + + +ABRECHNUNG VOM 07.06.2005 +Wertpapierumtausch +Geschäftsnummer : 11 111111 + 111111111111 Rechnungsnummer : 111111111111D111 +Geschäftstag : 06.06.2005 Börsenplatz : AUSSERB. AUSLAND + + +Wertpapier-Bezeichnung WPKNR/ISIN +Agere Systems Inc. A0ET5J +Registered Shares DL -,01 US00845V3087 + + +Nennwert Zum Kurs von +St. 0,10 EUR 8,79845 + + Kurswert : EUR 0,88 + + +Verrechnung über Konto Valuta Zu Ihren Gunsten + 1111111 11 EUR 08.06.2005 EUR 0,88 + +Verwahrungs-Art: GIROSAMMELDEPOT + + + +comdirect bank AG + + +Diese Abrechnung wird von der Bank nicht unterschrieben +Die Leistung ist gemäß §4 Nr.8 UStG umsatzsteuerfrei. USt-Id-Nr.: DE 112 279 461 +DoComd/01/2001 \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf06.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf06.txt deleted file mode 100644 index a495813555..0000000000 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf06.txt +++ /dev/null @@ -1,33 +0,0 @@ -comdirect bank - -GESCHÄFTSABRECHNUNG VOM 14.03.2013 -* Wertpapierkauf -Geschäftsnummer : 91 006132 - 071077639314-001 Rechnungsnummer : 290356708923DCA5 -Geschäftstag : 14.03.2013 Ausführungsplatz : XETRA -Handelszeit : 12:09 Uhr (MEZ/MESZ) (Kommissionsgeschäft) - -Wertpapier-Bezeichnung WPKNR/ISIN -BayWa AG 519406 -vink. Namens-Aktien o.N. DE0005194062 - - -Nennwert Zum Kurs von -St. 1.437 EUR 37,22 - Kurswert : EUR 16.265,14 - --------------------------------------------------------------------------------- -Eigene Entgelte - Provision : EUR 45,56 - Börsenplatzabhäng. Entgelt : EUR 1,50 - Summe Entgelte : EUR 47,06 --------------------------------------------------------------------------------- -Fremde Kosten - Umschreibeentgelt : EUR 0,60 --------------------------------------------------------------------------------- - - -Verrechnung über Konto BLZ Valuta Zu Ihren Lasten vor Steuern - 0000000 00 EUR 000 000 00 18.03.2013 EUR 16.312,80 - -Verwahrungs-Art: GIROSAMMELDEPOT diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf07.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf07.txt deleted file mode 100644 index 1361f8d575..0000000000 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf07.txt +++ /dev/null @@ -1,34 +0,0 @@ -comdirect bank - - - -Wertpapierkauf -Geschäftsnummer : 91 005002 - 008608173100-004 Rechnungsnummer : 151254420605DAB5 -Geschäftstag : 16.10.2008 Ausführungsplatz : XETRA -Handelszeit : 09:54 Uhr (MEZ/MESZ) - -Wertpapier-Bezeichnung WPKNR/ISIN -Allianz SE 840400 -vink.Namens-Aktien o.N. DE0008404005 - - -Nennwert Zum Kurs von -St. 100 EUR 75,609 - - Kurswert : EUR 7.560,90 --------------------------------------------------------------------------------- -Eigene Entgelte - Provision : EUR 23,80 - Börsenplatzabhäng. Entgelt : EUR 1,50 - Summe Entgelte : EUR 25,30 --------------------------------------------------------------------------------- -Fremde Kosten - Umschreibeentgelt : EUR 0,60 --------------------------------------------------------------------------------- - - -Verrechnung über Konto Valuta Zu Ihren Lasten - 0000000 00 EUR 20.10.2008 EUR 7.586,80 - -Verwahrungs-Art: GIROSAMMELDEPOT diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf08.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf08.txt deleted file mode 100644 index 8c87d09df9..0000000000 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf08.txt +++ /dev/null @@ -1,30 +0,0 @@ -comdirect bank - - -Wertpapierkauf -Geschäftsnummer : 91 005135 -Ordernummer : 072431554214-001 Rechnungsnummer : 405700382215DA95 -Geschäftstag : 08.11.2016 Abwicklung : Live Trading -Handelszeit : 11:51 Uhr (MEZ/MESZ) - -Wertpapier-Bezeichnung WPKNR/ISIN -T. Rowe Price Group Inc. 870967 -Registered Shares DL -,20 US74144T1088 - - -Nennwert Zum Preis von -St. 25 EUR 58,27 franco Courtage - Kurswert : EUR 1.456,75 - --------------------------------------------------------------------------------- -Eigene Entgelte - Abwickl.entgelt Clearstream : EUR 2,90 - Provision : EUR 9,90 - Summe Entgelte : EUR 12,80 --------------------------------------------------------------------------------- - - -IBAN Valuta Zu Ihren Lasten vor Steuern -DE00 0000 0000 0000 0000 00 EUR 10.11.2016 EUR 1.469,55 - -Verwahrungs-Art: WERTPAPIERRECHNUNG USA/KANADA (AKV) diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf11.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf11.txt deleted file mode 100644 index aba4736576..0000000000 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf11.txt +++ /dev/null @@ -1,103 +0,0 @@ -PDF Autor: 'HAVI Solutions GmbH & Co. KG, phg' -PDFBox Version: 1.8.16 ------------------------------------------ -Ihren Auftrag haben wir gemäß unseren produktbezogenen -Geschäftsbedingungen "Trading" wie nachstehend ausgeführt. -Die Wertpapiere haben wir der Abrechnung entsprechend gebucht. -Wir bitten Sie, diese Abrechnung auf ihre Richtigkeit und -Vollständigkeit zu überprüfen und etwaige Einwendungen -25449 Quickborn unverzüglich zu erheben. -fon : 04106-708 25 00 Tele - - - - - -Depotnr.: - - - - -GESCHÄFTSABRECHNUNG VOM 17.04.2020 - -* -Wertpapierkauf -Geschäftsnummer : -Ordernummer : -001 Rechnungsnummer : -Geschäftstag : 16.04.2020 Ausführungsplatz : NEW YORK NASDAQ (GSM) -Handelszeit : 18:33 Uhr (Ortszeit) (Kommissionsgeschäft) - -Wertpapier-Bezeichnung WPKNR/ISIN -Amazon.com Inc. 906866 -Registered Shares DL -,01 US0231351067 - - -Nennwert Zum Kurs von -St. 2 USD 2.384,00 - Kurswert : USD 4.768,00 - - Ausmachender Betrag : USD 4.781,90 - Umrechn. zum Dev. kurs 1,080600 vom 17.04.2020 : EUR 4.425,22 --------------------------------------------------------------------------------- -Eigene Entgelte - Provision : EUR 18,93 --------------------------------------------------------------------------------- -Fremde Kosten - Fremde Spesen : USD 13,90 --------------------------------------------------------------------------------- - - -IBAN Valuta Zu Ihren Lasten vor Steuern - 20.04.2020 EUR 4.444,15 - -Verwahrungs-Art: WERTPAPIERRECHNUNG USA/KANADA -Ihre Wertpapier-Order wurde über das Online Banking erteilt. - - - -Informationen zur steuerlichen Behandlung dieses Geschäftsvorgangs und den auf -Ihrem Konto gebuchten Endbetrag finden Sie auf der separaten Steuermitteilung. - - -Bei Fragen geben Sie bitte die Ordernummer an. - -comdirect bank AG - -Diese Abrechnung wird von der Bank nicht unterschrieben -Die Leistung ist gemäß §4 Nr.8 UStG umsatzsteuerfrei. USt-Id-Nr.: -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - - - - - - - - - - - - - - - - - - - - - - - - - - -comdirect bank AG -Diese Abrechnung ist maschinell erstellt und wird nicht unterschrieben. - - - - - -(4) Die ausgewiesenen EUR-Beträge spiegeln den Stand zum Abrechnungszeitpunkt wider. -KEINE STEUERBESCHEINIGUNG diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf17.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf17.txt deleted file mode 100644 index d91a1d7be4..0000000000 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf17.txt +++ /dev/null @@ -1,66 +0,0 @@ -PDFBox Version: 1.8.16 ------------------------------------------ -Ihren Auftrag haben wir gemäß unseren Sonderbe- -dingungen für Wertpapiergeschäfte wie nachstehend -ausgeführt. -Die Wertpapiere haben wir der Abrechnung entspre- -25449 Quickborn chend gebucht.Wir bitten Sie, diese Abrechnung auf ihre Richtigkeit und -Telefon 01803-33 63 66 Vollständigkeit zu überprüfen und etwaige Einwendungen: unverzüglich zu erheben. - - - - - 11111 111 - - - -Vorname Nachname Depotnummer: 1111111 11 -und Frau Vorname Nachname -Straße 11 - -1111 Stadt - - - - - -ABRECHNUNG VOM 19.05.2007 -Wertpapierkauf -Geschäftsnummer : 11 111111 bis 11 111112 - 111111111111 Rechnungsnummer : 11111111111DB11 -Geschäftstag : 19.05.2007 Börsenplatz : XETRA - - -Wertpapier-Bezeichnung WPKNR/ISIN -LVMH Moët Henn. L. Vuitton SA 853292 -Actions Port. (C.R.) EO 0,3 FR0000121014 - - -Ihre Order wurde wie folgt ausgeführt: - -Geschäftsnr. Nennwert Zum Kurs von Kurswert - 11 111111 St. 5 EUR 86,00 EUR 430,00 - 11 111112 St. 95 EUR 86,00 EUR 8.170,00 --------------------------------------------------------------------------------- -Zusammenfassung (ggf. gerundet) - St. 100 EUR 86,00 - - Gesamtkurswert : EUR 8.600,00 - Gesamtprovision : EUR 26,40 - Börsenplatzabhäng. Entgelt : EUR 1,50 - - -Verrechnung über Konto Valuta Zu Ihren Lasten - 1111111 11 EUR 23.05.2007 EUR 8.627,90 - -Verwahrungs-Art: GIROSAMMELDEPOT -Teilausführung Ihrer Order - - - -comdirect bank AG - - -Diese Abrechnung wird von der Bank nicht unterschrieben -Die Leistung ist gemäß §4 Nr.8 UStG umsatzsteuerfrei. USt-Id-Nr.: DE 112 279 461 -DoComd/01/2001 \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/KaufMitSteuerbehandlung01.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/KaufMitSteuerbehandlung01.txt new file mode 100644 index 0000000000..b66109d2d2 --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/KaufMitSteuerbehandlung01.txt @@ -0,0 +1,180 @@ +``` +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.65.2.qualifier +----------------------------------------- +Ihren Auftrag haben wir gemäß unseren produktbezogenen +Geschäftsbedingungen "Trading" wie nachstehend ausgeführt. +Die Wertpapiere haben wir der Abrechnung entsprechend gebucht. +Wir bitten Sie, diese Abrechnung auf ihre Richtigkeit und +Vollständigkeit zu überprüfen und etwaige Einwendungen +25449 Quickborn unverzüglich zu erheben. +fon : 04106-708 25 00 Tele + + + + + 11857 010 +Depotnr.: 2927827 11 + BLZ: 172 642 56 +Dr. jEvdgu LHby + + +njDZvNpgCPl 93 +92997 oNxcajFLceIx + + + + + +GESCHÄFTSABRECHNUNG VOM 03.01.2023 + +* +Wertpapierkauf +Geschäftsnummer : 19 041342 + 592581219254 Rechnungsnummer : 878649826981vsP4 +Geschäftstag : 02.01.2023 Ausführung comdirect + (Festpreisgeschäft) + +Wertpapier-Bezeichnung WPKNR/ISIN +ARERO Der Weltfonds - ESG DWS26Y +Inhaber-Anteile LC o.N. LU2114851830 + + +Nennwert Zum comdirect Preis von +St. 8,544 EUR 117,03 + Kurswert : EUR 999,90 + + + +IBAN Valuta Zu Ihren Lasten vor Steuern +DE02 0588 9054 7570 3258 87 EUR 04.01.2023 EUR 999,90 + +Verwahrungs-Art: GIROSAMMELDEPOT + + + +Informationen zur steuerlichen Behandlung dieses Geschäftsvorgangs und den auf +Ihrem Konto gebuchten Endbetrag finden Sie auf der separaten Steuermitteilung. + + +Ihre comdirect + +Diese Abrechnung wird von der Bank nicht unterschrieben +Die Leistung ist gemäß §4 Nr.8 UStG umsatzsteuerfrei. USt-Id-Nr.: DE 111 111 111 +A113 +DO15DD/16/04/2010 +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +Kundennr. /BLZ Bezeichnung +1111111 Dr. tjaGQO KmgI + + +200 505 92 Musterstr. 60 10708 YJZXSnqAnZ +abweichend wirtschaftlich Berechtigter + + ---- + c o m d i r e c t + + 2 5 4 5 1 Q u i c k b o r n +0 1 0 1 1857 + + T e le f o n : 0 4 1 0 6 - 7 0 8 25 00 + +Herrn D a t u m : 0 3 . 0 1 .2023 +D r . M u s t e r J o o e + D e p o t n u m m er: 1 1 1 1 1 1 1 11 +M u s t e r g a s s e 4 8 +11111 City R e f e r e n z - N u mmer: 0 8 I J E G X 5 7 KH002LC + + + + +Steuerliche Behandlung: Wertpapierkauf Nr. 71112853 vom 02.01.2023 +Stk. 8,544 ARERO-WELTFDS-ESG LC , WKN / ISIN: DWS26Y / LU2114851830 + Zu Ih r e n L a s te n v o r S te u e r n: E U R -999,9 0 + + + + + + + + +S te u e rb e m e ss u n g s g r u n d la g e E U R 0 , 0 0 + + +K ap i ta le r tr a gs t e ue r E U R 0 , 0 0 +S ol id a ri tä t sz u s c hl a g E U R 0 , 0 0 +K irc h e n s te u e r _E _U R_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 0_ _, 0_ 0_ +a b g e f ü h rt e S t e u er n _E U_ _R _ _ _ _ _ _ _ _ _ _ _ __ _0__,_0 0_ + + Zu Ih r e n L a s te n n a ch S te u e r n : E U R -999,9 0 + + + + + +Die Belastung erfolgt mit Valuta 04.01.2023 auf Konto EUR mit der IBAN DE02 6275 3601 7576 2359 10 + + + + + + + + +KEINE STEUERBESCHEINIGUNG ... +Bisher einbehaltene bzw. angerechnete Steuer in EUR (4) +in 2023 einbehaltene einbehaltener einbehaltene angerechneteKapitalertragsteuer Solidaritätszuschlag Kirchensteuer ausländische Quellensteuer +vor Ermittlung + 0,00 0,00 + 0,00 0,00 +nach Ermittlung + 0,00 0,00 0,00 0,00 +Verrechnungssalden in EUR (4) +in 2023 Gewinne / Verluste sonstige anrechenbare verfügbareraus Aktien Gewinne / Verluste ausländische Quellensteuer Freistellungsauftrag +vor Ermittlung + 0,00 0,00 0,00 0,00 +nach Ermittlung + 0,00 0,00 + 0,00 0,00 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Ihre comdirect +Diese Abrechnung ist maschinell erstellt und wird nicht unterschrieben. + + + + + +(4) Die ausgewiesenen EUR-Beträge spiegeln den Stand zum Abrechnungszeitpunkt wider. +KEINE STEUERBESCHEINIGUNG + +``` \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf09.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/KaufMitSteuerbehandlung02.txt similarity index 85% rename from name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf09.txt rename to name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/KaufMitSteuerbehandlung02.txt index 962a81558d..8fb6693500 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf09.txt +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/KaufMitSteuerbehandlung02.txt @@ -1,5 +1,6 @@ -PDF Author: 'HAVI Solutions GmbH & Co. KG, phg' -PDFBox Version: 1.8.16 +``` +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.65.2.qualifier ----------------------------------------- Ihren Auftrag haben wir gemäß unseren produktbezogenen Geschäftsbedingungen "Trading" wie nachstehend ausgeführt. @@ -12,48 +13,47 @@ fon : 04106-708 25 00 Tele - 1234 010 -Depotnr.: 12345678 00 + 64041 109 +Depotnr.: 5076043 05 BLZ: 200 411 55 -Max Mustermann +xKHmwFurfr kwdJRDWPZL -Musterstraße. 1 -12345 Musterhausen +Musterstr. 010 +77697 atqVWQw -GESCHÄFTSABRECHNUNG VOM 03.04.2018 +GESCHÄFTSABRECHNUNG VOM 01.06.2018 * Wertpapierkauf -Geschäftsnummer : 12 4324324324 - 432432432432423 Rechnungsnummer : 432432432432423A4324 -Geschäftstag : 03.04.2018 Ausführungsplatz : XETRA +Geschäftsnummer : 26 002463 + 150799808720 Rechnungsnummer : 454960516206DB75 +Geschäftstag : 01.06.2018 Ausführungsplatz : XETRA (Kommissionsgeschäft) Wertpapier-Bezeichnung WPKNR/ISIN -Fresenius SE & Co. KGaA 578560 -Inhaber-Aktien o.N. DE0005785604 +ComSt.-DJ Industr.Averag.U.ETF ETF010 +Inhaber-Anteile I o.N. LU0378437502 Nennwert Zum Kurs von -St. 0,805 EUR 61,14 - Kurswert : EUR 49,22 +St. 0,10 EUR 246,15 + Kurswert : EUR 24,62 -------------------------------------------------------------------------------- Eigene Entgelte - Provision : EUR 0,74 + Provision : EUR 0,37 -------------------------------------------------------------------------------- IBAN Valuta Zu Ihren Lasten vor Steuern -DE12 1234 1155 1234 5678 00 EUR 05.04.2018 EUR 49,96 +DE36 3906 6843 9943 2443 78 EUR 05.06.2018 EUR 24,99 Verwahrungs-Art: GIROSAMMELDEPOT -GLOBALURKUNDE, KEIN STUECKEAUSDRUCK @@ -64,36 +64,36 @@ Ihrem Konto gebuchten Endbetrag finden Sie auf der separaten Steuermitteilung. comdirect bank AG Diese Abrechnung wird von der Bank nicht unterschrieben -Die Leistung ist gemäß §4 Nr.8 UStG umsatzsteuerfrei. USt-Id-Nr.: DE 812 279 461 +Die Leistung ist gemäß §4 Nr.8 UStG umsatzsteuerfrei. USt-Id-Nr.: DE 111 111 111 A113 DO15DD/16/04/2010 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Kundennr. /BLZ Bezeichnung -1801794 Max Mustermann +4920304 HkXwGEAGZZ DggpOpEUlQ -200 411 55 Musterstraße. 1 12345 Musterhausen +200 411 55 Musterstr. 426 11993 onHhmnm abweichend wirtschaftlich Berechtigter ---- c o m d i r e c t b a n k A G 2 5 4 5 1 Q u i c k b o r n -0 1 0 9 7818 +0 1 0 9 7859 -T e le f o n : 0 4 1 0 6 - 7 0 8 25 00 +T e le f o n : 0 4 1 0 6 - 7 0 8 25 00 -Herrn D a t u m : 0 3 . 0 4 .2018 -Max Mustermann D e p o t n u m m er: 12345678 -Musterstraße 1 - R e f e r e n z - N u mmer: 0 Z I D 6 Q 6 X Y 0M001O3 61525 Musterhausen +Herrn D a t u m : 0 1 . 0 6 .2018 + M u s t e r r rr r M u s t e r uber D e p o t n u m m er: 1 1 1 1 1 1 1 11 +M u s t er r r r s t r . 1 1 1 +11993 onHhmnm R e f e r e n z - N u mmer: 0 6 I D A M O 8 JPJ003EU -Steuerliche Behandlung: Wertpapierkauf Nr. 92061377 vom 03.04.2018 -Stk. 0,805 FRESENIUS SE+CO.KGAA O.N. , WKN / ISIN: 578560 / DE0005785604 - Zu Ih r e n L a s te n v o r S te u e r n: E U R -49,9 6 +Steuerliche Behandlung: Wertpapierkauf Nr. 91034612 vom 01.06.2018 +Stk. 0,100 C.S.-DJ INDUST.AV.U.ETF I , WKN / ISIN: ETF010 / LU0378437502 + Zu Ih r e n L a s te n v o r S te u e r n: E U R -24,9 9 @@ -106,17 +106,17 @@ S te u e rb e m e ss u n g s g r u n d la g e K ap i ta le r tr a gs t e ue r E U R 0 , 0 0 - S ol id a ri tä t sz u s c hl a g E U R 0 , 0 0 -K irc h e n s te u e r _E _U _R _ _ _ _ _ _ _ _ _ _ _ _ _ _ 0_ ,_ 0_ 0_ - ab g e f ü h rt e S t e u er n _E _U R_ _ _ _ _ _ _ _ _ _ _ _ _ _ __0_,_0 0_ +S ol id a ri tä t sz u s c hl a g E U R 0 , 0 0 +K irc h e n s te u e r _E _U R_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 0_ _, 0_ 0_ +a b g e f ü h rt e S t e u er n _E U_ _R _ _ _ _ _ _ _ _ _ _ _ __ _0__,_0 0_ - Zu Ih r e n L a s te n n a ch S te u e r n : E U R -49,9 6 + Zu Ih r e n L a s te n n a ch S te u e r n : E U R -24,9 9 -Die Belastung erfolgt mit Valuta 05.04.2018 auf Konto EUR mit der IBAN DE12 5638 1155 1234 7893 00 +Die Belastung erfolgt mit Valuta 05.06.2018 auf Konto EUR mit der IBAN DE36 1227 8936 1986 9169 65 @@ -136,10 +136,10 @@ nach Ermittlung Verrechnungssalden in EUR (4) in 2018 Gewinne / Verluste sonstige anrechenbare verfügbareraus Aktien Gewinne / Verluste ausländische Quellensteuer Freistellungsauftrag vor Ermittlung - -3,42 -15,14 -0,36 0,00 + -26,77 20,60 -1,55 0,00 nach Ermittlung - -3,42 -15,14 - -0,36 0,00 + -26,77 20,60 + -1,55 0,00 @@ -179,3 +179,5 @@ Diese Abrechnung ist maschinell erstellt und wird nicht unterschrieben. (4) Die ausgewiesenen EUR-Beträge spiegeln den Stand zum Abrechnungszeitpunkt wider. KEINE STEUERBESCHEINIGUNG + +``` \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/KaufMitSteuerbehandlung03.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/KaufMitSteuerbehandlung03.txt new file mode 100644 index 0000000000..2ac5eb87a0 --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/KaufMitSteuerbehandlung03.txt @@ -0,0 +1,180 @@ +``` +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.65.2.qualifier +----------------------------------------- +Ihren Auftrag haben wir gemäß unseren produktbezogenen +Geschäftsbedingungen "Trading" wie nachstehend ausgeführt. +Die Wertpapiere haben wir der Abrechnung entsprechend gebucht. +Wir bitten Sie, diese Abrechnung auf ihre Richtigkeit und +Vollständigkeit zu überprüfen und etwaige Einwendungen +25449 Quickborn unverzüglich zu erheben. +fon : 04106-708 25 00 Tele + + + + + 62474 604 +Depotnr.: 0593714 31 + BLZ: 200 411 55 +hPcnhBdfsB LwtIiryJIe + + +Musterstr. 983 +28358 VPTOtQW + + + + + +GESCHÄFTSABRECHNUNG VOM 09.01.2018 + +* +Wertpapierkauf +Geschäftsnummer : 46 424883 + 004786949040 Rechnungsnummer : 442604441030D195 +Geschäftstag : 08.01.2018 Ausführung comdirect + (Festpreisgeschäft) + +Wertpapier-Bezeichnung WPKNR/ISIN +BSF - BlackRock MIPG A14X2L +Actions Nom.A4 EUR o.N. LU1273675402 + + +Nennwert Zum comdirect Preis von +St. 0,205 EUR 124,7715 + Kurswert : EUR 25,58 + + 2,38095% Reduktion Kaufaufschlag : EUR 0,61- + + +IBAN Valuta Zu Ihren Lasten vor Steuern +DE36 0318 9325 5835 8724 47 EUR 11.01.2018 EUR 24,97 + +Verwahrungs-Art: WERTPAPIERRECHNUNG LUXEMBURG (AKV) + + + +Informationen zur steuerlichen Behandlung dieses Geschäftsvorgangs und den auf +Ihrem Konto gebuchten Endbetrag finden Sie auf der separaten Steuermitteilung. + + +comdirect bank AG + +Diese Abrechnung wird von der Bank nicht unterschrieben +Die Leistung ist gemäß §4 Nr.8 UStG umsatzsteuerfrei. USt-Id-Nr.: DE 111 111 111 +A113 +DO15DD/16/04/2010 +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +Kundennr. /BLZ Bezeichnung +0852170 oSngHPsDuh VKyzMgqeIg + + +200 411 55 Musterstr. 184 07596 PgYSMxq +abweichend wirtschaftlich Berechtigter + + ---- +c o m d i r e c t b a n k A G + + 2 5 4 5 1 Q u i c k b o r n +0 1 0 9 7859 + +T e le f o n : 0 4 1 0 6 - 7 0 8 25 00 + +Herrn D a t u m : 0 9 . 0 1 .2018 + M u s t e r r rr r M u s t e r uber D e p o t n u m m er: 1 1 1 1 1 1 1 11 +M u s t er r r r s t r . 1 1 1 +07596 PgYSMxq R e f e r e n z - N u mmer: 0 A I D 1 6 3 H R 25001VR + + + + +Steuerliche Behandlung: Wertpapierkauf Nr. 91020582 vom 08.01.2018 +Stk. 0,205 BSF - BLACKROCK MIPG A4EO , WKN / ISIN: A14X2L / LU1273675402 + Zu Ih r e n L a s te n v o r S te u e r n: E U R -24,9 7 + + + + + + + + +S te u e rb e m e ss u n g s g r u n d la g e E U R 0 , 0 0 + + +K ap i ta le r tr a gs t e ue r E U R 0 , 0 0 +S ol id a ri tä t sz u s c hl a g E U R 0 , 0 0 +K irc h e n s te u e r _E _U R_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 0_ _, 0_ 0_ +a b g e f ü h rt e S t e u er n _E U_ _R _ _ _ _ _ _ _ _ _ _ _ __ _0__,_0 0_ + + Zu Ih r e n L a s te n n a ch S te u e r n : E U R -24,9 7 + + + + + +Die Belastung erfolgt mit Valuta 11.01.2018 auf Konto EUR mit der IBAN DE36 6037 6754 4311 9944 24 + + + + + + + + +KEINE STEUERBESCHEINIGUNG ... +Bisher einbehaltene bzw. angerechnete Steuer in EUR (4) +in 2018 einbehaltene einbehaltener einbehaltene angerechneteKapitalertragsteuer Solidaritätszuschlag Kirchensteuer ausländische Quellensteuer +vor Ermittlung + 0,00 0,00 + 0,00 0,00 +nach Ermittlung + 0,00 0,00 0,00 0,00 +Verrechnungssalden in EUR (4) +in 2018 Gewinne / Verluste sonstige anrechenbare verfügbareraus Aktien Gewinne / Verluste ausländische Quellensteuer Freistellungsauftrag +vor Ermittlung + -26,77 0,00 0,00 0,00 +nach Ermittlung + -26,77 0,00 + 0,00 0,00 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +comdirect bank AG +Diese Abrechnung ist maschinell erstellt und wird nicht unterschrieben. + + + + + +(4) Die ausgewiesenen EUR-Beträge spiegeln den Stand zum Abrechnungszeitpunkt wider. +KEINE STEUERBESCHEINIGUNG + +``` \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/KaufMitSteuerbehandlung04.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/KaufMitSteuerbehandlung04.txt new file mode 100644 index 0000000000..6bbb083d4b --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/KaufMitSteuerbehandlung04.txt @@ -0,0 +1,185 @@ +``` +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.65.2.qualifier +----------------------------------------- +Ihren Auftrag haben wir gemäß unseren produktbezogenen +Geschäftsbedingungen "Trading" wie nachstehend ausgeführt. +Die Wertpapiere haben wir der Abrechnung entsprechend gebucht. +Wir bitten Sie, diese Abrechnung auf ihre Richtigkeit und +Vollständigkeit zu überprüfen und etwaige Einwendungen +25449 Quickborn unverzüglich zu erheben. +fon : 04106-708 25 00 Tele + + + + + 50016 458 +Depotnr.: 6962637 00 + BLZ: 704 411 55 +fINVWnCHCK HHMGtuhsOD + + +Musterstr. 833 +05499 yfSzoSj + + + + + +GESCHÄFTSABRECHNUNG VOM 01.11.2018 + +* +Wertpapierkauf +Geschäftsnummer : 77 117413 + 303796885690 Rechnungsnummer : 468179348267DC35 +Geschäftstag : 01.11.2018 Ausführungsplatz : XETRA + (Kommissionsgeschäft) + +Wertpapier-Bezeichnung WPKNR/ISIN +BASF SE BASF11 +Namens-Aktien o.N. DE000BASF111 + + +Nennwert Zum Mischkurs von +St. 2,17 EUR 67,65036 + Kurswert : EUR 146,80 + +-------------------------------------------------------------------------------- +Eigene Entgelte + Provision : EUR 2,20 + Umschreibeentgelt : EUR 0,95 + Summe Entgelte : EUR 3,15 +-------------------------------------------------------------------------------- + + +IBAN Valuta Zu Ihren Lasten vor Steuern +DE36 1750 5676 1859 4015 54 EUR 05.11.2018 EUR 149,95 + +Verwahrungs-Art: GIROSAMMELDEPOT + + + +Informationen zur steuerlichen Behandlung dieses Geschäftsvorgangs und den auf +Ihrem Konto gebuchten Endbetrag finden Sie auf der separaten Steuermitteilung. + + +comdirect bank AG + +Diese Abrechnung wird von der Bank nicht unterschrieben +Die Leistung ist gemäß §4 Nr.8 UStG umsatzsteuerfrei. USt-Id-Nr.: DE 111 111 111 +A113 +DO15DD/16/04/2010 +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +Kundennr. /BLZ Bezeichnung +0697044 mxdfNzPyJj AdgpiOrAUu + + +200 411 55 Musterstr. 314 87463 YOMXebG +abweichend wirtschaftlich Berechtigter + + ---- +c o m d i r e c t b a n k A G + + 2 5 4 5 1 Q u i c k b o r n +0 1 0 9 7859 + +T e le f o n : 0 4 1 0 6 - 7 0 8 25 00 + +Herrn D a t u m : 0 1 . 1 1 .2018 + M u s t e r r rr r M u s t e r uber D e p o t n u m m er: 1 1 1 1 1 1 1 11 +M u s t er r r r s t r . 1 1 1 +62362 CibZkiW R e f e r e n z - N u mmer: 1 K I D K R 1 B 9J00005G + + + + +Steuerliche Behandlung: Wertpapierkauf Nr. 91031178 vom 01.11.2018 +Stk. 2,170 BASF SE NA O.N. , WKN / ISIN: BASF11 / DE000BASF111 + Zu Ih r e n L a s te n v o r S te u e r n: E U R -149,9 5 + + + + + + + + +S te u e rb e m e ss u n g s g r u n d la g e E U R 0 , 0 0 + + +K ap i ta le r tr a gs t e ue r E U R 0 , 0 0 +S ol id a ri tä t sz u s c hl a g E U R 0 , 0 0 +K irc h e n s te u e r _E _U R_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 0_ _, 0_ 0_ +a b g e f ü h rt e S t e u er n _E U_ _R _ _ _ _ _ _ _ _ _ _ _ __ _0__,_0 0_ + + Zu Ih r e n L a s te n n a ch S te u e r n : E U R -149,9 5 + + + + + +Die Belastung erfolgt mit Valuta 05.11.2018 auf Konto EUR mit der IBAN DE36 4924 0353 0413 5434 98 + + + + + + + + +KEINE STEUERBESCHEINIGUNG ... +Bisher einbehaltene bzw. angerechnete Steuer in EUR (4) +in 2018 einbehaltene einbehaltener einbehaltene angerechneteKapitalertragsteuer Solidaritätszuschlag Kirchensteuer ausländische Quellensteuer +vor Ermittlung + 0,00 0,00 + 0,00 0,00 +nach Ermittlung + 0,00 0,00 0,00 0,00 +Verrechnungssalden in EUR (4) +in 2018 Gewinne / Verluste sonstige anrechenbare verfügbareraus Aktien Gewinne / Verluste ausländische Quellensteuer Freistellungsauftrag +vor Ermittlung + -26,77 183,88 -15,07 0,00 +nach Ermittlung + -26,77 183,88 + -15,07 0,00 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +comdirect bank AG +Diese Abrechnung ist maschinell erstellt und wird nicht unterschrieben. + + + + + +(4) Die ausgewiesenen EUR-Beträge spiegeln den Stand zum Abrechnungszeitpunkt wider. +KEINE STEUERBESCHEINIGUNG + +``` \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/KaufMitSteuerbehandlung05.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/KaufMitSteuerbehandlung05.txt new file mode 100644 index 0000000000..1ade9de424 --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/KaufMitSteuerbehandlung05.txt @@ -0,0 +1,182 @@ +``` +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.65.2.qualifier +----------------------------------------- +Ihren Auftrag haben wir gemäß unseren produktbezogenen +Geschäftsbedingungen "Trading" wie nachstehend ausgeführt. +Die Wertpapiere haben wir der Abrechnung entsprechend gebucht. +Wir bitten Sie, diese Abrechnung auf ihre Richtigkeit und +Vollständigkeit zu überprüfen und etwaige Einwendungen +25449 Quickborn unverzüglich zu erheben. +fon : 04106-708 25 00 Tele + + + + + 90861 781 +Depotnr.: 7932851 05 + BLZ: 200 411 55 +ewJnlXUHfC ykfApCawWu + + +Musterstr. 207 +90294 lZSTnfp + + + + + +GESCHÄFTSABRECHNUNG VOM 08.06.2017 + +* +Wertpapierkauf +Geschäftsnummer : 23 551988 + 153797450590 Rechnungsnummer : 424029016868D1B5 +Geschäftstag : 07.06.2017 Ausführung comdirect + (Festpreisgeschäft) + +Wertpapier-Bezeichnung WPKNR/ISIN +BGF - World Gold Fund 974119 +Act. Nom. A2RF USD o.N. LU0055631609 + + +Nennwert Zum comdirect Preis von +St. 0,843 USD 34,0935 + Kurswert : USD 28,74 + + Ausmachender Betrag : USD 28,06 + Umrechnung zum Devisenkurs 1,123400 : EUR 24,97 + 2,38095% Reduktion Kaufaufschlag : USD 0,68- + + +IBAN Valuta Zu Ihren Lasten vor Steuern +DE36 3955 9498 8929 0532 63 EUR 12.06.2017 EUR 24,97 + +Verwahrungs-Art: WERTPAPIERRECHNUNG LUXEMBURG (AKV) + + + +Informationen zur steuerlichen Behandlung dieses Geschäftsvorgangs und den auf +Ihrem Konto gebuchten Endbetrag finden Sie auf der separaten Steuermitteilung. + + +comdirect bank AG + +Diese Abrechnung wird von der Bank nicht unterschrieben +Die Leistung ist gemäß §4 Nr.8 UStG umsatzsteuerfrei. USt-Id-Nr.: DE 111 111 111 +A113 +DO15DD/16/04/2010 +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +Kundennr. /BLZ Bezeichnung +3349235 kUziwHlzOr LynvwcrDCo + + +200 411 55 Musterstr. 149 31839 fLhxnuu +abweichend wirtschaftlich Berechtigter + + ---- +c o m d i r e c t b a n k A G + + 2 5 4 5 1 Q u i c k b o r n +0 1 0 9 7859 + +T e le f o n : 0 4 1 0 6 - 7 0 8 25 00 + +Herrn D a t u m : 0 8 . 0 6 .2017 + M u s t e r r rr r M u s t e r uber D e p o t n u m m er: 1 1 1 1 1 1 1 11 +M u s t er r r r s t r . 1 4 9 +31839 fLhxnuu R e f e r e n z - N u mmer: 1 C I C 1 5 I R S RR000PS + + + + +Steuerliche Behandlung: Wertpapierkauf Nr. 91032160 vom 07.06.2017 +Stk. 0,843 BGF-WORLD GOLD A2RF DL , WKN / ISIN: 974119 / LU0055631609 + Zu Ih r e n L a s te n v o r S te u e r n: E U R -24,9 7 + + + + + + + + +S te u e rb e m e ss u n g s g r u n d la g e E U R 0 , 0 0 + + +K ap i ta le r tr a gs t e ue r E U R 0 , 0 0 +S ol id a ri tä t sz u s c hl a g E U R 0 , 0 0 +K irc h e n s te u e r _E _U R_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 0_ _, 0_ 0_ +a b g e f ü h rt e S t e u er n _E U_ _R _ _ _ _ _ _ _ _ _ _ _ __ _0__,_0 0_ + + Zu Ih r e n L a s te n n a ch S te u e r n : E U R -24,9 7 + + + + + +Die Belastung erfolgt mit Valuta 12.06.2017 auf Konto EUR mit der IBAN DE36 1183 6233 6547 6474 67 + + + + + + + + +KEINE STEUERBESCHEINIGUNG ... +Bisher einbehaltene bzw. angerechnete Steuer in EUR (4) +in 2017 einbehaltene einbehaltener einbehaltene angerechneteKapitalertragsteuer Solidaritätszuschlag Kirchensteuer ausländische Quellensteuer +vor Ermittlung + 0,00 0,00 + 0,00 0,00 +nach Ermittlung + 0,00 0,00 0,00 0,00 +Verrechnungssalden in EUR (4) +in 2017 Gewinne / Verluste sonstige anrechenbare verfügbareraus Aktien Gewinne / Verluste ausländische Quellensteuer Freistellungsauftrag +vor Ermittlung + -26,77 0,34 0,00 0,00 +nach Ermittlung + -26,77 0,34 + 0,00 0,00 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +comdirect bank AG +Diese Abrechnung ist maschinell erstellt und wird nicht unterschrieben. + + + + + +(4) Die ausgewiesenen EUR-Beträge spiegeln den Stand zum Abrechnungszeitpunkt wider. +KEINE STEUERBESCHEINIGUNG + +``` \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuermitteilungDividende04.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/KaufMitSteuerbehandlung06.txt similarity index 58% rename from name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuermitteilungDividende04.txt rename to name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/KaufMitSteuerbehandlung06.txt index e61c9d29a8..69c61fbd72 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuermitteilungDividende04.txt +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/KaufMitSteuerbehandlung06.txt @@ -1,33 +1,109 @@ -PDF author: 'HAVI Solutions GmbH & Co. KG, phg' -PDFBox Version: 1.8.16 ------------------------------------------ +Ihren Auftrag haben wir gemäß unseren produktbezogenen +Geschäftsbedingungen "Trading" wie nachstehend ausgeführt. +Die Wertpapiere haben wir der Abrechnung entsprechend gebucht. +Wir bitten Sie, diese Abrechnung auf ihre Richtigkeit und +Vollständigkeit zu überprüfen und etwaige Einwendungen +25449 Quickborn unverzüglich zu erheben. + +Telefon : 04106-708 25 00 + + + + + xxxxx xxx +Depotnr.: xxxxxxx 00 + BLZ: xxx xxx xx + xxxx xxxxxxxx + + +xxxxxxxxxxx. +xx xx xxxx xxxxxxxx/xxxxxxx + + + + + +GESCHÄFTSABRECHNUNG VOM 22.11.2016 + +* +Wertpapierkauf +Geschäftsnummer : 91 006626 bis 91 006806 +Ordernummer : 072450450919 Rechnungsnummer : 406909971273D0D5 +Geschäftstag : 22.11.2016 Ausführungsplatz : XETRA + (Kommissionsgeschäft) + +Wertpapier-Bezeichnung WPKNR/ISIN +Medtronic PLC A14M2J +Registered Shares DL -,0001 IE00BTN1Y115 + + +Ihre Order wurde wie folgt ausgeführt: + +Handelszeit Nennwert Zum Kurs von Kurswert + 14:23 St. 15 EUR 71,00 EUR 1.065,00 + 14:23 St. 3 EUR 71,00 EUR 213,00 + 14:23 St. 1 EUR 71,00 EUR 71,00 + 14:23 St. 1 EUR 71,00 EUR 71,00 +-------------------------------------------------------------------------------- + Summe St. 20 EUR 71,00 EUR 1.420,00 +(ggf. gerundet) +-------------------------------------------------------------------------------- +Eigene Entgelte + Gesamtprovision : EUR 9,90 + Börsenplatzabhäng. Entgelt : EUR 1,50 + Summe Entgelte : EUR 11,40 +-------------------------------------------------------------------------------- + + +IBAN Valuta Zu Ihren Lasten vor Steuern +DExx xxxx xxxx xxxx xxxx xx EUR 24.11.2016 EUR 1.431,40 + +Verwahrungs-Art: GIROSAMMELDEPOT +Teilausführung Ihrer Order + + + +Informationen zur steuerlichen Behandlung dieses Geschäftsvorgangs und den auf +Ihrem Konto gebuchten Endbetrag finden Sie auf der separaten Steuermitteilung. + + +Bei Fragen geben Sie bitte die Ordernummer an. + +comdirect bank AG + +Diese Abrechnung wird von der Bank nicht unterschrieben +Die Leistung ist gemäß §4 Nr.8 UStG umsatzsteuerfrei. USt-Id-Nr.: DE 812 279 461 +A113 +DO15DD/16/04/2010 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Kundennr. /BLZ Bezeichnung -1234567 Max Mustermann +xxx xxxx xxxxxxxxx + xxxxxxx -111 111 11 Muster Str. 11 12345 Stadt +xxx xxx xx xxxxxxxxxxxx. x xx xx xxxx xxxxxxxxxx SCHWEIZ abweichend wirtschaftlich Berechtigter - + ---- c o m d i r e c t b a n k A G 2 5 4 5 1 Q u i c k b o r n -0 1 0 1 1872 + 0 1 0 9 7755 T e le f o n : 0 4 1 0 6 - 7 0 8 25 00 -Herrn D a t u m : 0 2 . 0 3 .2020 - M a x M u s t e r m a n n D e p o t n u m m er: 1 1 1 1 1 1 1 11 -M u s t e r-Str. 1 -1 R e f e r e n z - N u mmer: 0Y I F O L 1 P M KP000DL 1 1 1 1 Stadt +Herrn D a t u m : 2 2 . 1 1 .2016 +x xx. x x x x x x x x x xx x x + D e p o t n u m m er: x x x x x x x xx + x x x x x x x x x x x x . x +xx xx xxxx xxxxxxxxx/xxxxxxx R e f e r e n z - N u mmer: 0 C I B 2 B G S B0B004YO -Steuerliche Behandlung: Inländische Dividende vom 03.03.2020 -Stk. 50 AURUBIS AG , WKN / ISIN: 676650 / DE0006766504 -Z u Ih r e n G u n s t e n v o r S te u e r n : E U R 62,5 0 +Steuerliche Behandlung: Wertpapierkauf Nr. 91006626 vom 22.11.2016 +Stk. 20 MEDTRONIC PLC DL-,0001 , WKN / ISIN: A14M2J / IE00BTN1Y115 +Z u Ih r e n L a s te n v o r S te u e r n: E U R -1.431,4 0 @@ -36,21 +112,22 @@ Z u Ih r e n G u n s t e n v o r S te u e r n : -S te u e rb e m e ss u n g s g r u n d la g e E U R 6 2 , 5 0 +S te u e rb e m e ss u n g s g r u n d la g e E U R 0 , 0 0 - K ap i ta le r tr a gs t e ue r ( 2 ) E U R - 1 5 , 3 2 - S ol id a ri tä t sz u s c hl a g E U R - 0 , 8 4 -K irc h e n s te u e r _E U_ _R _ _ _ _ _ _ _ _ _ _ _ _ _ -_ 1_ ,_ 2_ 2_ -a b g e f ü h rt e S t e u er n _E U_ R_ _ _ _ _ _ _ _ _ __ __ -__1_7_,3_ _8 +K ap i ta le r tr a gs t e ue r E U R 0 , 0 0 +S ol id a ri tä t sz u s c hl a g E U R 0 , 0 0 +K irc h e n s te u e r _E U_ _R _ _ _ _ _ _ _ _ _ _ _ _ _ _ _0 _, _0 _0 +a b g e f ü h rt e S t e u er n _E U_ _R _ _ _ _ _ _ _ __ _ _ _ _ __0,_0_ 0_ - Zu Ih r e n G u n s t e n n a c h S t e u er n : E U R 45,1 2 +Z u Ih r e n L a s te n n a ch S te u e r n : E U R -1.431,4 0 -Die Gutschrift erfolgt mit Valuta 03.03.2020 auf Konto EUR mit der IBAN DE12 3456 7890 1234 5678 00 +Die Belastung erfolgt mit Valuta 24.11.2016 auf Konto EUR mit der IBAN DExx xxxx xxxx xxxx xxxx 40 + @@ -58,43 +135,7 @@ Die Gutschrift erfolgt mit Valuta 03.03.2020 auf Konto EUR mit der IBAN DE12 345 -(2) Durch die Berücksichtigung der Kirchensteuer (8% bzw. 9%) als Sonderausgabe reduziert sich der Kapitalertragsteuersatz auf 24,51% bzw. 24,45%. -KEINE STEUERBESCHEINIGUNG ... -Bisher einbehaltene bzw. angerechnete Steuer in EUR (4) -in 2020 einbehaltene einbehaltener einbehaltene angerechneteKapitalertragsteuer Solidaritätszuschlag Kirchensteuer ausländische Quellensteuer -vor Ermittlung - 0,00 0,00 - 0,00 0,00 -nach Ermittlung - 0,00 0,00 0,00 0,0 -Verrechnungssalden in EUR (4) -in 2020 Gewinne / Verluste sonstige anrechenbare verfügbareraus Aktien Gewinne / Verluste ausländische Quellensteuer Freistellungsauftrag -vor Ermittlung - 0,0 0,0 0,0 0,0 -nach Ermittlung - 0,0 0,0 - 0,0 0,0 - - - - - - - - - - - - - - - - - - - - - + @@ -112,3 +153,4 @@ Diese Abrechnung ist maschinell erstellt und wird nicht unterschrieben. (4) Die ausgewiesenen EUR-Beträge spiegeln den Stand zum Abrechnungszeitpunkt wider. KEINE STEUERBESCHEINIGUNG + diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf15.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/KaufMitSteuerbehandlung07.txt similarity index 99% rename from name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf15.txt rename to name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/KaufMitSteuerbehandlung07.txt index 7b2e2c4d4c..b46df3fc89 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf15.txt +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/KaufMitSteuerbehandlung07.txt @@ -90,7 +90,7 @@ BLZ: 111 111 11 Straße 11 Blatt: 02 1111 Stadt GESCHÄFTSABRECHNUNG VOM 12.03.2020 Geschäftsnummer : 11 111111 bis 11 111112 -Ordernummer : 000111112681 Rechnungsnummer : 511111111411DA65 +Ordernummer : 000121111681 Rechnungsnummer : 511111111411DA65 Bei Fragen geben Sie bitte die Ordernummer an. diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf16.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/KaufMitSteuerbehandlung08.txt similarity index 100% rename from name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf16.txt rename to name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/KaufMitSteuerbehandlung08.txt diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf10.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/KaufMitSteuerbehandlung09.txt similarity index 100% rename from name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf10.txt rename to name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/KaufMitSteuerbehandlung09.txt diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf12.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/KaufMitSteuerbehandlung10.txt similarity index 100% rename from name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf12.txt rename to name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/KaufMitSteuerbehandlung10.txt diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf13.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/KaufMitSteuerbehandlung11.txt similarity index 76% rename from name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf13.txt rename to name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/KaufMitSteuerbehandlung11.txt index d64eb9b883..2ec4ddc639 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf13.txt +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/KaufMitSteuerbehandlung11.txt @@ -1,5 +1,5 @@ -PDF Autor: 'HAVI Solutions GmbH & Co. KG, phg' PDFBox Version: 1.8.16 +Portfolio Performance Version: 0.60.2 ----------------------------------------- Ihren Auftrag haben wir gemäß unseren produktbezogenen Geschäftsbedingungen "Trading" wie nachstehend ausgeführt. @@ -7,56 +7,48 @@ Die Wertpapiere haben wir der Abrechnung entsprechend gebucht. Wir bitten Sie, diese Abrechnung auf ihre Richtigkeit und Vollständigkeit zu überprüfen und etwaige Einwendungen 25449 Quickborn unverzüglich zu erheben. -Telefon : 04106-708 25 00 - +fon : 04106-708 25 00 Tele + - 10274 010 -Depotnr.: ******** 00 - BLZ: 200 411 33 -*** *** -*** *** -****** -***** ****** + 11857 010 +Depotnr.: 5000008 00 + BLZ: 200 411 11 +Name + + +Str 1 +90000 Stadt -GESCHÄFTSABRECHNUNG VOM 05.10.2021 +GESCHÄFTSABRECHNUNG VOM 17.01.2023 * -Wertpapierbezug -Geschäftsnummer : 92 038964 - 271369164100 Rechnungsnummer : 560558281021D105 -Geschäftstag : 05.10.2021 Abwicklung : FRANKFURT - Außerbörslich +Wertpapierkauf +Geschäftsnummer : 91 100008 + 000000000000 Rechnungsnummer : 600000000000DBD5 +Geschäftstag : 16.01.2023 Ausführung comdirect + (Festpreisgeschäft) Wertpapier-Bezeichnung WPKNR/ISIN -Deutsche Lufthansa AG 823212 -vink.Namens-Aktien o.N. DE0008232125 +ARERO Der Weltfonds - ESG DWS26Y +Inhaber-Anteile LC o.N. LU2114851830 -Nennwert Zum Preis von -St. 1.303 EUR 3,58 - Kurswert : EUR 4.664,74 +Nennwert Zum comdirect Preis von +St. 8,261 EUR 121,04 + Kurswert : EUR 999,91 --------------------------------------------------------------------------------- -Eigene Entgelte - Provision : EUR 16,56 - Umschreibeentgelt : EUR 0,95 - Summe Entgelte : EUR 17,51 --------------------------------------------------------------------------------- IBAN Valuta Zu Ihren Lasten vor Steuern -DE65 2004 1133 **** **** 40 EUR 05.10.2021 EUR 4.682,25 +DE02 2004 1111 0000 0000 00 EUR 18.01.2023 EUR 999,91 -Art der Stücke : - GESPERRTE STUECKE / NICHT VERKAEUFLICH / NICHT LIEFERBAR Verwahrungs-Art: GIROSAMMELDEPOT -Der Bezug erfolgt gegen Ausbuchung der Bezugsrechte. @@ -72,32 +64,32 @@ A113 DO15DD/16/04/2010 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Kundennr. /BLZ Bezeichnung -******** *** *** *** *** +5000008 Name -200 411 33 ***** ***** ***** +200 411 11 Str. 1 80000 Stadt abweichend wirtschaftlich Berechtigter ---- c o m d i r e c t 2 5 4 5 1 Q u i c k b o r n -0 1 0 1 0274 +0 1 0 1 1857 -T e le f o n : 0 4 1 0 6 - 7 0 8 25 00 + T e le f o n : 0 4 1 0 6 - 7 0 8 25 00 -*** *** D a t u m : 0 5 . 1 0 .2021 -*** *** - D e p o t n u m m er: ****** 00 - ****** -**** ***** R e f e r e n z - N u mmer: 0 V I H C S N S T70002DS +Herrn D a t u m : 1 7 . 0 1 .2023 +N a m e + D e p o t n u m m er: 5 0 0 0 0 0 0 00 +S t r . 1 +90000 Stadt R e f e r e n z - N u mmer: 1 0 0 0 0 0 0 0 0 00000HA -Steuerliche Behandlung: Einbuchung Nr. 0VIHCSNST70002DS vom 05.10.2021 -Stk. 1.303 LUFTHANSA AG VNA O.N. , WKN / ISIN: 823212 / DE0008232125 -Z u Ih r e n L a s te n v o r S te u e r n: E U R -4.682,2 5 +Steuerliche Behandlung: Wertpapierkauf Nr. 90000008 vom 16.01.2023 +Stk. 8,261 ARERO-WELTFDS-ESG LC , WKN / ISIN: DWS26Y / LU2114851830 + Zu Ih r e n L a s te n v o r S te u e r n: E U R -999,9 1 @@ -109,18 +101,18 @@ Z u Ih r e n L a s te n v o r S te u e r n: S te u e rb e m e ss u n g s g r u n d la g e E U R 0 , 0 0 - K ap i ta le r tr a gs t e ue r E U R 0 , 0 0 +K ap i ta le r tr a gs t e ue r E U R 0 , 0 0 S ol id a ri tä t sz u s c hl a g E U R 0 , 0 0 - K irc h e n s te u e r _E U_ _R _ _ _ _ _ _ _ _ _ _ _ _ _ _ _0 _, 0_ _0 -a b g e f ü h rt e S t e u er n E_ _U _R _ _ _ _ _ _ _ _ __ __ _ __0,__0 _0 +K irc h e n s te u e r _E _U R_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 0_ _, 0_ 0_ +a b g e f ü h rt e S t e u er n _E U_ _R _ _ _ _ _ _ _ _ _ _ _ __ _0__,_0 0_ - Zu Ih r e n L a s te n n a ch S te u e r n : E U R -4.682,2 5 + Zu Ih r e n L a s te n n a ch S te u e r n : E U R -999,9 1 -Die Belastung erfolgt mit Valuta 05.10.2021 auf Konto EUR mit der IBAN DE65 2004 1133 **** **** 40 +Die Belastung erfolgt mit Valuta 18.01.2023 auf Konto EUR mit der IBAN DE02 2004 1111 0000 0000 00 @@ -130,6 +122,20 @@ Die Belastung erfolgt mit Valuta 05.10.2021 auf Konto EUR mit der IBAN DE65 2004 KEINE STEUERBESCHEINIGUNG ... +Bisher einbehaltene bzw. angerechnete Steuer in EUR (4) +in 2023 einbehaltene einbehaltener einbehaltene angerechneteKapitalertragsteuer Solidaritätszuschlag Kirchensteuer ausländische Quellensteuer +vor Ermittlung + 0,00 0,00 + 0,00 0,00 +nach Ermittlung + 0,00 0,00 0,00 0,00 +Verrechnungssalden in EUR (4) +in 2023 Gewinne / Verluste sonstige anrechenbare verfügbareraus Aktien Gewinne / Verluste ausländische Quellensteuer Freistellungsauftrag +vor Ermittlung + 0,00 0,00 0,00 0,00 +nach Ermittlung + 0,00 0,00 + 0,00 0,00 @@ -161,4 +167,11 @@ KEINE STEUERBESCHEINIGUNG ... Ihre comdirect -Diese Abrechnung ist maschinell erstellt und wird nicht unterschrieben. \ No newline at end of file +Diese Abrechnung ist maschinell erstellt und wird nicht unterschrieben. + + + + + +(4) Die ausgewiesenen EUR-Beträge spiegeln den Stand zum Abrechnungszeitpunkt wider. +KEINE STEUERBESCHEINIGUNG \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/KaufMitSteuerbehandlung12.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/KaufMitSteuerbehandlung12.txt new file mode 100644 index 0000000000..f007ecd7e0 --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/KaufMitSteuerbehandlung12.txt @@ -0,0 +1,179 @@ +``` +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.64.5 +----------------------------------------- +Ihren Auftrag haben wir gemäß unseren produktbezogenen +Geschäftsbedingungen "Trading" wie nachstehend ausgeführt. +Die Wertpapiere haben wir der Abrechnung entsprechend gebucht. +Wir bitten Sie, diese Abrechnung auf ihre Richtigkeit und +Vollständigkeit zu überprüfen und etwaige Einwendungen +25449 Quickborn unverzüglich zu erheben. +fon : 04106-708 25 00 Tele + + + + + 51413 624 +Depotnr.: 1412371 09 + BLZ: 227 614 36 +xFeErXB jzvC + + +Friedrich-Löffler-dvS 25 +16869 PFlRDPhTCgBx + + + + + +GESCHÄFTSABRECHNUNG VOM 03.05.2023 + +* +Wertpapierkauf +Geschäftsnummer : 16 985727 + 302789004599 Rechnungsnummer : 019579984081kw86 +Geschäftstag : 02.05.2023 Ausführung comdirect + (Festpreisgeschäft) + +Wertpapier-Bezeichnung WPKNR/ISIN +ARERO Der Weltfonds - ESG DWS26Y +Inhaber-Anteile LC o.N. LU2114851830 + + +Nennwert Zum comdirect Preis von +St. 2,734 EUR 118,32 + Kurswert : EUR 323,49 + + + +IBAN Valuta Zu Ihren Lasten vor Steuern +oZ53 3703 9729 1815 1628 87 EUR 04.05.2023 EUR 323,49 + +Verwahrungs-Art: GIROSAMMELDEPOT + + + +Informationen zur steuerlichen Behandlung dieses Geschäftsvorgangs und den auf +Ihrem Konto gebuchten Endbetrag finden Sie auf der separaten Steuermitteilung. + + +Ihre comdirect + +Diese Abrechnung wird von der Bank nicht unterschrieben +Die Leistung ist gemäß §4 Nr.8 UStG umsatzsteuerfrei. USt-Id-Nr.: DE 114 103 514 +A113 +DO15DD/16/04/2010 +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +Kundennr. /BLZ Bezeichnung +4596193 Stephan Stoy + + +133 822 52 Friedrich-Löffler-ETq 26 66045 YmaTgIbAhZtU +abweichend wirtschaftlich Berechtigter + + ---- + c o m d i r e c t + + 2 5 4 5 1 Q u i c k b o r n +0 1 0 9 7745 + +T e le f o n : 0 4 1 0 6 - 7 0 8 25 00 + +Herrn D a t u m : 0 3 . 0 5 .2023 + m t W p T X Q p L x o D e p o t n u m m er: 2 9 3 2 4 5 1 05 +a r a e d m z u g - i Q f J tu r - e Uj 86 +29807 QqpbxPIoqQKL R e f e r e n z - N u mmer: 9U I F K N v D kUu455P5 + + + + +Steuerliche Behandlung: Wertpapierkauf Nr. 91064179 vom 02.05.2023 +Stk. 2,734 ARERO-WELTFDS-ESG LC , WKN / ISIN: DWS26Y / LU2114851830 + Zu Ih r e n L a s te n v o r S te u e r n: E U R -323,4 9 + + + + + + + + +S te u e rb e m e ss u n g s g r u n d la g e E U R 0 , 0 0 + + + K ap i ta le r tr a gs t e ue r E U R 0 , 0 0 +S ol id a ri tä t sz u s c hl a g E U R 0 , 0 0 +K irc h e n s te u e r E_ _U R_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _0 ,_ 0_ 0_ +a b g e f ü h rt e S t e u er n _E U_ _R _ _ _ _ _ _ _ __ _ _ _ _ __0,__0 0_ + +Z u Ih r e n L a s te n n a ch S te u e r n : E U R -323,4 9 + + + + + +Die Belastung erfolgt mit Valuta 04.05.2023 auf Konto EUR mit der IBAN dH06 0015 1664 5211 1706 37 + + + + + + + + +KEINE STEUERBESCHEINIGUNG ... +Bisher einbehaltene bzw. angerechnete Steuer in EUR (4) +in 2023 einbehaltene einbehaltener einbehaltene angerechneteKapitalertragsteuer Solidaritätszuschlag Kirchensteuer ausländische Quellensteuer +vor Ermittlung + 51,96 2,83 + 0,00 0,00 +nach Ermittlung + 51,96 2,83 0,00 0,00 +Verrechnungssalden in EUR (4) +in 2023 Gewinne / Verluste sonstige anrechenbare verfügbareraus Aktien Gewinne / Verluste ausländische Quellensteuer Freistellungsauftrag +vor Ermittlung + -179,41 207,79 0,00 0,00 +nach Ermittlung + -179,41 207,79 + 0,00 0,00 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Ihre comdirect +Diese Abrechnung ist maschinell erstellt und wird nicht unterschrieben. + + + + + +(4) Die ausgewiesenen EUR-Beträge spiegeln den Stand zum Abrechnungszeitpunkt wider. +KEINE STEUERBESCHEINIGUNG + +``` \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/KaufMitSteuerbehandlung13.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/KaufMitSteuerbehandlung13.txt new file mode 100644 index 0000000000..1395953d33 --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/KaufMitSteuerbehandlung13.txt @@ -0,0 +1,185 @@ +``` +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.65.2.qualifier +----------------------------------------- +Ihren Auftrag haben wir gemäß unseren produktbezogenen +Geschäftsbedingungen "Trading" wie nachstehend ausgeführt. +Die Wertpapiere haben wir der Abrechnung entsprechend gebucht. +Wir bitten Sie, diese Abrechnung auf ihre Richtigkeit und +Vollständigkeit zu überprüfen und etwaige Einwendungen +25449 Quickborn unverzüglich zu erheben. +fon : 04106-708 25 00 Tele + + + + + 12934 511 +Depotnr.: 3351987 34 + BLZ: 200 030 55 +UcbHxLliuH cNZCMjRsKH + + +Musterstr. 711 +16311 VyNjDXG + + + + + +GESCHÄFTSABRECHNUNG VOM 04.10.2022 + +* +Wertpapierkauf +Geschäftsnummer : 61 519385 + 272803480270 Rechnungsnummer : 591997149596D095 +Geschäftstag : 04.10.2022 Ausführungsplatz : TRADEGATE + (Kommissionsgeschäft) + +Wertpapier-Bezeichnung WPKNR/ISIN +BASF SE BASF11 +Namens-Aktien o.N. DE000BASF111 + + +Nennwert Zum Mischkurs von +St. 0,565 EUR 41,90349 + Kurswert : EUR 23,68 + +-------------------------------------------------------------------------------- +Eigene Entgelte + Provision : EUR 0,36 + Umschreibeentgelt : EUR 0,95 + Summe Entgelte : EUR 1,31 +-------------------------------------------------------------------------------- + + +IBAN Valuta Zu Ihren Lasten vor Steuern +DE36 1505 2436 5049 5172 87 EUR 06.10.2022 EUR 24,99 + +Verwahrungs-Art: GIROSAMMELDEPOT + + + +Informationen zur steuerlichen Behandlung dieses Geschäftsvorgangs und den auf +Ihrem Konto gebuchten Endbetrag finden Sie auf der separaten Steuermitteilung. + + +Ihre comdirect + +Diese Abrechnung wird von der Bank nicht unterschrieben +Die Leistung ist gemäß §4 Nr.8 UStG umsatzsteuerfrei. USt-Id-Nr.: DE 282 828 759 +A113 +DO15DD/16/04/2010 +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +Kundennr. /BLZ Bezeichnung +6221074 foUtpuPgnf tonensNqkn + + +200 419 77 Musterstr. 155 22747 qBOCDln +abweichend wirtschaftlich Berechtigter + + ---- + c o m d i r e c t + + 2 5 4 5 1 Q u i c k b o r n +0 1 0 9 7859 + + T e le f o n : 0 4 1 0 6 - 7 0 8 25 00 + +Herrn D a t u m : 0 4 . 1 0 .2022 + M u s t e r r rr r M u s t e r uber D e p o t n u m m er: 1 1 1 1 1 1 1 11 +M u s t er r r r s t r . 1 5 5 +32866 vYJeEPJ R e f e r e n z - N u mmer: 2 2 I I M N S W ASS001DS + + + + +Steuerliche Behandlung: Wertpapierkauf Nr. 91147992 vom 04.10.2022 +Stk. 0,565 BASF SE NA O.N. , WKN / ISIN: BASF11 / DE000BASF111 + Zu Ih r e n L a s te n v o r S te u e r n: E U R -24,9 9 + + + + + + + + +S te u e rb e m e ss u n g s g r u n d la g e E U R 0 , 0 0 + + +K ap i ta le r tr a gs t e ue r E U R 0 , 0 0 +S ol id a ri tä t sz u s c hl a g E U R 0 , 0 0 +K irc h e n s te u e r _E _U R_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 0_ _, 0_ 0_ +a b g e f ü h rt e S t e u er n _E U_ _R _ _ _ _ _ _ _ _ _ _ _ __ _0__,_0 0_ + + Zu Ih r e n L a s te n n a ch S te u e r n : E U R -24,9 9 + + + + + +Die Belastung erfolgt mit Valuta 06.10.2022 auf Konto EUR mit der IBAN DE36 2380 2893 8844 0384 10 + + + + + + + + +KEINE STEUERBESCHEINIGUNG ... +Bisher einbehaltene bzw. angerechnete Steuer in EUR (4) +in 2022 einbehaltene einbehaltener einbehaltene angerechneteKapitalertragsteuer Solidaritätszuschlag Kirchensteuer ausländische Quellensteuer +vor Ermittlung + 376,18 20,15 + 0,00 96,82 +nach Ermittlung + 376,18 20,15 0,00 96,82 +Verrechnungssalden in EUR (4) +in 2022 Gewinne / Verluste sonstige anrechenbare verfügbareraus Aktien Gewinne / Verluste ausländische Quellensteuer Freistellungsauftrag +vor Ermittlung + 2.171,31 1.330,80 0,00 0,00 +nach Ermittlung + 2.171,31 1.330,80 + 0,00 0,00 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Ihre comdirect +Diese Abrechnung ist maschinell erstellt und wird nicht unterschrieben. + + + + + +(4) Die ausgewiesenen EUR-Beträge spiegeln den Stand zum Abrechnungszeitpunkt wider. +KEINE STEUERBESCHEINIGUNG + +``` \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/KaufMitSteuerbehandlung14.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/KaufMitSteuerbehandlung14.txt new file mode 100644 index 0000000000..ce1d24f710 --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/KaufMitSteuerbehandlung14.txt @@ -0,0 +1,189 @@ +``` +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.65.2.qualifier +----------------------------------------- +Ihren Auftrag haben wir gemäß unseren produktbezogenen +Geschäftsbedingungen "Trading" wie nachstehend ausgeführt. +Die Wertpapiere haben wir der Abrechnung entsprechend gebucht. +Wir bitten Sie, diese Abrechnung auf ihre Richtigkeit und +Vollständigkeit zu überprüfen und etwaige Einwendungen +25449 Quickborn unverzüglich zu erheben. +fon : 04106-708 23 00 Tele + + + + + 08090 274 +Depotnr.: 0631047 00 + BLZ: 200 007 82 +RjuvNaQmAw KdKVkQYIlW + + +Musterstr. 987 +41169 yWomwiV + + + + + +GESCHÄFTSABRECHNUNG VOM 04.10.2022 + +* +Wertpapierkauf +Geschäftsnummer : 76 487970 +Ordernummer : 000312226831-001 Rechnungsnummer : 591958998217D175 +Geschäftstag : 04.10.2022 Ausführungsplatz : XETRA +Handelszeit : 09:02 Uhr (MEZ/MESZ) (Kommissionsgeschäft) + +Wertpapier-Bezeichnung WPKNR/ISIN +BASF SE BASF11 +Namens-Aktien o.N. DE000BASF111 + + +Nennwert Zum Kurs von +St. 5 EUR 41,50 + Kurswert : EUR 207,50 + +-------------------------------------------------------------------------------- +Eigene Entgelte + Provision : EUR 9,90 + Umschreibeentgelt : EUR 0,95 + Börsenplatzabhäng. Entgelt : EUR 2,50 + Summe Entgelte : EUR 13,35 +-------------------------------------------------------------------------------- + + +IBAN Valuta Zu Ihren Lasten vor Steuern +DE36 6973 8075 5906 1384 07 EUR 06.10.2022 EUR 220,85 + +Verwahrungs-Art: GIROSAMMELDEPOT +Ihre Wertpapier-Order wurde über das Online Banking erteilt. + + + +Informationen zur steuerlichen Behandlung dieses Geschäftsvorgangs und den auf +Ihrem Konto gebuchten Endbetrag finden Sie auf der separaten Steuermitteilung. + + +Bei Fragen geben Sie bitte die Ordernummer an. + +Ihre comdirect + +Diese Abrechnung wird von der Bank nicht unterschrieben +Die Leistung ist gemäß §4 Nr.8 UStG umsatzsteuerfrei. USt-Id-Nr.: DE 770 618 063 +A113 +DO15DD/16/04/2010 +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +Kundennr. /BLZ Bezeichnung +2176564 EEKRGVElyx evTjHVOnlG + + +070 521 55 Musterstr. 978 35404 dzIFTSd +abweichend wirtschaftlich Berechtigter + + ---- + c o m d i r e c t + + 2 5 4 5 1 Q u i c k b o r n +0 1 0 9 7859 + + T e le f o n : 0 4 1 0 6 - 7 0 8 25 00 + +Herrn D a t u m : 0 4 . 1 0 .2022 + M u s t e r r rr r M u s t e r uber D e p o t n u m m er: 1 1 1 1 1 1 1 11 +M u s t ee r r r s t r . 9 7 8 +26677 SAGFzuz R e f e r e n z - N u mmer: 1 0 I I M M R 2 E AD0001S + + + + +Steuerliche Behandlung: Wertpapierkauf Nr. 91002173 vom 04.10.2022 +Stk. 5 BASF SE NA O.N. , WKN / ISIN: BASF11 / DE000BASF111 + Zu Ih r e n L a s te n v o r S te u e r n: E U R -220,8 5 + + + + + + + + +S te u e rb e m e ss u n g s g r u n d la g e E U R 0 , 0 0 + + +K ap i ta le r tr a gs t e ue r E U R 0 , 0 0 +S ol id a ri tä t sz u s c hl a g E U R 0 , 0 0 +K irc h e n s te u e r _E _U R_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 0_ _, 0_ 0_ +a b g e f ü h rt e S t e u er n _E U_ _R _ _ _ _ _ _ _ _ _ _ _ __ _0__,_0 0_ + + Zu Ih r e n L a s te n n a ch S te u e r n : E U R -220,8 5 + + + + + +Die Belastung erfolgt mit Valuta 06.10.2022 auf Konto EUR mit der IBAN DE36 8374 4481 1468 6290 63 + + + + + + + + +KEINE STEUERBESCHEINIGUNG ... +Bisher einbehaltene bzw. angerechnete Steuer in EUR (4) +in 2022 einbehaltene einbehaltener einbehaltene angerechneteKapitalertragsteuer Solidaritätszuschlag Kirchensteuer ausländische Quellensteuer +vor Ermittlung + 376,18 20,15 + 0,00 96,82 +nach Ermittlung + 376,18 20,15 0,00 96,82 +Verrechnungssalden in EUR (4) +in 2022 Gewinne / Verluste sonstige anrechenbare verfügbareraus Aktien Gewinne / Verluste ausländische Quellensteuer Freistellungsauftrag +vor Ermittlung + 2.171,31 1.330,80 0,00 0,00 +nach Ermittlung + 2.171,31 1.330,80 + 0,00 0,00 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Ihre comdirect +Diese Abrechnung ist maschinell erstellt und wird nicht unterschrieben. + + + + + +(4) Die ausgewiesenen EUR-Beträge spiegeln den Stand zum Abrechnungszeitpunkt wider. +KEINE STEUERBESCHEINIGUNG + +``` \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf14.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/KaufMitSteuerbehandlung15.txt similarity index 100% rename from name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Kauf14.txt rename to name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/KaufMitSteuerbehandlung15.txt diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuermitteilungDividende08.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/KaufSteuerbehandlung01.txt similarity index 78% rename from name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuermitteilungDividende08.txt rename to name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/KaufSteuerbehandlung01.txt index a309cbc773..d9480819e6 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuermitteilungDividende08.txt +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/KaufSteuerbehandlung01.txt @@ -1,33 +1,34 @@ -PDF Autor: 'HAVI Solutions GmbH & Co. KG, phg' -PDFBox Version: 1.8.16 +``` +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.65.2.qualifier ----------------------------------------- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Kundennr. /BLZ Bezeichnung -12345678 Vorname Nachname +2695336 DhWDkLwBgN WbNtopYkAi -200 411 33 Teststr. 123 12345 Testdorf +200 432 16 Musterstr. 364 02085 FCfATWg abweichend wirtschaftlich Berechtigter ---- c o m d i r e c t 2 5 4 5 1 Q u i c k b o r n -0 1 0 1 0288 +0 1 0 9 7859 T e le f o n : 0 4 1 0 6 - 7 0 8 25 00 -Herrn D a t u m : 0 4 . 1 2 .2020 -V o r n a m e N a c h n a m e D e p o t n u m m er: 1 2 3 4 5 6 7 90 - T e s t s t r . 123 -12 R e f e r e n z - N u mmer: 25 I G 6 U 5 5 R A000010 4 5 6 T e s t d o r f +Herrn D a t u m : 0 5 . 0 1 .2021 + M u s t e r r rr r M u s t e r uber D e p o t n u m m er: 1 1 1 1 1 1 1 11 +M u s t er r r r s t r . 3 6 4 +82665 lKMToYs R e f e r e n z - N u mmer: 0 S I G U N U Y 4Z60004H -Steuerliche Behandlung: Zinsen vom 04.12.2020 -EUR 5.000 SANHA ANL 13/26 STZ , WKN / ISIN: A1TNA7 / DE000A1TNA70 - Zu Ih r e n G u n s t e n v o r S te u e r n : E U R 100,0 0 +Steuerliche Behandlung: Wertpapierkauf Nr. 91223973 vom 04.01.2021 +Stk. 0,216 PROCTER GAMBLE , WKN / ISIN: 852062 / US7427181091 + Zu Ih r e n L a s te n v o r S te u e r n: E U R -24,9 3 @@ -36,21 +37,22 @@ EUR 5.000 SANHA ANL 13/26 STZ , WKN / ISIN: A1TNA7 / DE000A1TNA70 -S te u e rb e m e ss u n g s g r u n d la g e E U R 1 0 0 , 0 0 +S te u e rb e m e ss u n g s g r u n d la g e E U R 0 , 0 0 - K ap i ta le r tr a gs t e ue r ( 2 ) E U R - 2 4 , 4 5 - S ol id a ri tä t sz u s c hl a g E U R - 1 , 3 4 -K irc h e n s te u e r _E U_ _R _ _ _ _ _ _ _ _ _ _ _ _ _ -_ 2_ ,_ 2_ 0_ -a b g e f ü h rt e S t e u er n _E U_ R_ _ _ _ _ _ _ _ _ __ __ -__2_7_,9_ _9 +K ap i ta le r tr a gs t e ue r E U R 0 , 0 0 +S ol id a ri tä t sz u s c hl a g E U R 0 , 0 0 +K irc h e n s te u e r _E _U R_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 0_ _, 0_ 0_ +a b g e f ü h rt e S t e u er n _E U_ _R _ _ _ _ _ _ _ _ _ _ _ __ _0__,_0 0_ - Zu Ih r e n G u n s t e n n a c h S t e u er n : E U R 72,0 1 + Zu Ih r e n L a s te n n a ch S te u e r n : E U R -24,9 3 -Die Gutschrift erfolgt mit Valuta 04.12.2020 auf Konto EUR mit der IBAN DE12 3456 7890 1234 1234 56 +Die Belastung erfolgt mit Valuta 06.01.2021 auf Konto EUR mit der IBAN DE36 4385 0568 3303 0516 71 + @@ -58,22 +60,7 @@ Die Gutschrift erfolgt mit Valuta 04.12.2020 auf Konto EUR mit der IBAN DE12 345 -(2) Durch die Berücksichtigung der Kirchensteuer (8% bzw. 9%) als Sonderausgabe reduziert sich der Kapitalertragsteuersatz auf 24,51% bzw. 24,45%. KEINE STEUERBESCHEINIGUNG ... -Bisher einbehaltene bzw. angerechnete Steuer in EUR (4) -in 2020 einbehaltene einbehaltener einbehaltene angerechneteKapitalertragsteuer Solidaritätszuschlag Kirchensteuer ausländische Quellensteuer -vor Ermittlung - 1.234,56 12,34 - 123,45 12,23 -nach Ermittlung - 1.234,56 12,34 123,45 12,34 -Verrechnungssalden in EUR (4) -in 2020 Gewinne / Verluste sonstige anrechenbare verfügbareraus Aktien Gewinne / Verluste ausländische Quellensteuer Freistellungsauftrag -vor Ermittlung - 1.234,56 1.234,56 0,00 0,00 -nach Ermittlung - 1.234,56 1.123,34 - 0,00 0,00 @@ -111,5 +98,6 @@ Diese Abrechnung ist maschinell erstellt und wird nicht unterschrieben. -(4) Die ausgewiesenen EUR-Beträge spiegeln den Stand zum Abrechnungszeitpunkt wider. -KEINE STEUERBESCHEINIGUNG \ No newline at end of file + + +``` \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuermitteilungDividende15.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuerbehandlungVonDividende08.txt similarity index 79% rename from name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuermitteilungDividende15.txt rename to name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuerbehandlungVonDividende08.txt index 2e6838d1e0..944c9e9332 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuermitteilungDividende15.txt +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuerbehandlungVonDividende08.txt @@ -1,33 +1,35 @@ -PDF author: 'HAVI Solutions GmbH & Co. KG, phg' -PDFBox Version: 1.8.16 +``` +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.65.2.qualifier ----------------------------------------- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Kundennr. /BLZ Bezeichnung -1234567 Max Mustermann +1000407 zCbGPeM bYjq -111 111 11 Muster Str. 11 12345 Stadt +200 411 44 Muster-Muster-kCx 10 52074 OmTGkllPuHon abweichend wirtschaftlich Berechtigter - + ---- - c o m d i r e c t b a n k A G +c o m d i r e c t - 2 5 4 5 1 Q u i c k b o r n - 0 1 0 9 7871 +2 5 4 5 1 Q u i c k b o r n + 0 1 0 9 7745 T e le f o n : 0 4 1 0 6 - 7 0 8 25 00 -H e r r n D a t u m : 3 0 . 1 0 .2018 - M a x M u s t e r m a n n D e p o t n u m m er: 1 1 1 1 1 1 1 11 -M u s t e r-Str. 1 -12345 Stadt R e f e r e n z - N u mmer: 0 Y I D K M X M D1I000X5 + H e r r n D a t u m : 1 6 . 0 1 .2023 + M u s t e r r M u s t + D e p o t n u m m er: 1 1 1 1 1 1 1 11 + M u s t e r r r r - M u s t er r - M us 26 +52074 OmTGkllPuHon R e f e r e n z - N u mmer: 1 S I J F 5 F G Y DZ000KM -Steuerliche Behandlung: Inländische Investment-Ausschüttung vom 31.10.2018 -Stk. 0,088 CS VERMOEG.STRATE.U.ETF I , WKN / ISIN: ETF701 / DE000ETF7011 - Zu Ih r e n G u n s t e n v o r S te u e r n : E U R 0,0 6 +Steuerliche Behandlung: Inländische Investment-Ausschüttung vom 16.01.2023 +Stk. 322,933 IS.S.GL.SE.D.100 U.ETF A. , WKN / ISIN: A0F5UH / DE000A0F5UH1 + Zu Ih r e n G u n s t e n v o r S te u e r n : E U R 115,8 6 @@ -36,21 +38,21 @@ Stk. 0,088 CS VERMOEG.STRATE.U.ETF I , WKN / ISIN: ETF701 / DE000 - S te u e rb e m e ss u n g s g r u n d la g e ( 1 ) E U R 0 , 0 4 + S te u e rb e m e ss u n g s g r u n d la g e ( 1 ) E U R 8 1 , 1 0 -K ap i ta le r tr a gs t e ue r E U R - 0 , 0 1 -S ol id a ri tä t sz u s c hl a g E U R 0 , 0 0 -K irc h e n s te u e r E_ U_ R_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 0_ _, 0_ _0 -a b g e f ü h rt e S t e u er n E_ _U R_ _ _ _ _ _ _ _ _ __ __ _ -__0_,_0 1_ + K ap i ta le r tr a gs t e ue r E U R - 2 0 , 2 8 +S ol id a ri tä t sz u s c hl a g E U R - 1 , 1 1 + K irc h e n s te u e r E_ U_ _R _ _ _ _ _ _ _ _ _ _ _ _ _ _ 0_ _, _0 0_ +a b g e f ü h rt e S t e u er n E_ U_ _R _ _ _ _ _ _ _ __ _ _ _ -__2_1,__3 9_ -Z u Ih r e n G u n s t e n n a c h S t e u er n : E U R 0,0 5 +Z u Ih r e n G u n s t e n n a c h S t e u er n : E U R 94,4 7 -Die Gutschrift erfolgt mit Valuta 31.10.2018 auf Konto EUR mit der IBAN DE12 3456 7890 1234 5678 00 +Die Gutschrift erfolgt mit Valuta 16.01.2023 auf Konto EUR mit der IBAN DE89 6567 3017 0409 4608 70 @@ -58,27 +60,27 @@ Die Gutschrift erfolgt mit Valuta 31.10.2018 auf Konto EUR mit der IBAN DE12 345 -(1) siehe "Hinweise zur Ermittlung der Steuerbemessungsgrundlage" auf der Folgeseite +(1) siehe "Hinweise zur Ermittlung der Steuerbemessungsgrundlage" auf der Folgeseite KEINE STEUERBESCHEINIGUNG ... Bisher einbehaltene bzw. angerechnete Steuer in EUR (4) -in 2020 einbehaltene einbehaltener einbehaltene angerechneteKapitalertragsteuer Solidaritätszuschlag Kirchensteuer ausländische Quellensteuer +in 2023 einbehaltene einbehaltener einbehaltene angerechneteKapitalertragsteuer Solidaritätszuschlag Kirchensteuer ausländische Quellensteuer vor Ermittlung 0,00 0,00 0,00 0,00 nach Ermittlung - 0,00 0,00 0,00 0,0 + 20,28 1,11 0,00 0,00 Verrechnungssalden in EUR (4) -in 2020 Gewinne / Verluste sonstige anrechenbare verfügbareraus Aktien Gewinne / Verluste ausländische Quellensteuer Freistellungsauftrag +2023 Gewinne / Verluste sonstige anrechenbare verfügbarerin aus Aktien Gewinne / Verluste ausländische Quellensteuer Freistellungsauftrag vor Ermittlung - 0,0 0,0 0,0 0,0 + -179,41 0,00 0,00 0,00 nach Ermittlung - 0,0 0,0 - 0,0 0,0 + -179,41 81,10 + 0,00 0,00 Hinweise zur Ermittlung der Steuerbemessungsgrundlage: -I n v e st m e n t -A u s s c h ü tt un g E U R 0 , 0 6 -T ei lf re is t e llu n g (3 0 % ) _E U_ _R _ _ _ _ _ _ _ _ _ _ _ _ _ _ -_ 0_ _, 0_ 2_ -S te u e r b e m e s s u n g s g r u n d la g e v o r V er l u s tv e r re c h n u n g E U R 0 , 0 4 + In v e st m e n t -A u s s c h ü tt un g E U R 1 1 5 , 8 6 + T ei lf re is t e llu n g (3 0 % ) _E _U R_ _ _ _ _ _ _ _ _ _ _ _ _ _ -_ _3 4_ ,_ 7_ 6_ +S te u e r b e m e s s u n g s g r u n d la g e v o r V er l u s tv e r re c h n u n g E U R 8 1 , 1 0 @@ -104,7 +106,7 @@ S te u e r b e m e s s u n g s g r u n d la g e v o r V er l u s tv e r re c -comdirect bank AG +Ihre comdirect Diese Abrechnung ist maschinell erstellt und wird nicht unterschrieben. @@ -113,3 +115,5 @@ Diese Abrechnung ist maschinell erstellt und wird nicht unterschrieben. (4) Die ausgewiesenen EUR-Beträge spiegeln den Stand zum Abrechnungszeitpunkt wider. KEINE STEUERBESCHEINIGUNG + +``` \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuermitteilungDividende13.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuerbehandlungVonDividende09.txt similarity index 78% rename from name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuermitteilungDividende13.txt rename to name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuerbehandlungVonDividende09.txt index 8ad636692a..2c283b0b4f 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuermitteilungDividende13.txt +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuerbehandlungVonDividende09.txt @@ -1,57 +1,57 @@ -PDFBox Version: 1.8.13 +``` +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.65.2.qualifier ----------------------------------------- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Kundennr. /BLZ Bezeichnung -1234567 Xxxxx Xxxxxxxxx Xxxxxx +0920113 rsjnrhz bycy -123 123 12 Xxxxxxxstr. 99 12345 Xxxxxxxx +200 120 24 Muster-Weg 05 26529 TgeGtVOMPZaZ abweichend wirtschaftlich Berechtigter ---- -c o m d i r e c t b a n k A G + c o m d i r e c t b a n k A G 2 5 4 5 1 Q u i c k b o r n -0 1 0 1 0246 + 0 1 0 9 7745 - T e le f o n : 0 4 1 0 6 - 7 0 8 25 00 + T e le f o n : 0 4 1 0 6 - 7 0 8 25 00 -Herrn D a t u m : 1 1 . 0 5 .2018 -X x x x x X x x x x x - D e p o t n u m m er: 1 2 3 4 5 6 7 89 - X x x x x x x s t r . 9 9 -1234 R e f e r e n z - N u mmer: 1 3 I D 9 6 Y 4 Q Z90010F 4 x x x x x x x x +Herrn D a t u m : 1 6 . 0 4 .2018 +M u s t e r r M u s t D e p o t n u m m er: 1 1 1 1 1 1 1 11 +M u s t e r - W eg 05 +38 R e f e r e n z - N u mmer: 2 I ID 7 E P A L HP000IV 1 1 6 M u s t e r r r r r rr -Steuerliche Behandlung: Inländische Dividende vom 11.05.2018 -Stk. 0,541 FUCHS PETROL.SE VZO O.N. , WKN / ISIN: 579043 / DE0005790430 - Zu Ih r e n G u n s t e n v o r S te u e r n : E U R 0,4 9 +Steuerliche Behandlung: Inländische Investment-Ausschüttung vom 16.04.2018 +Stk. 165,933 IS.S.GL.SE.D.100 U.ETF A. , WKN / ISIN: A0F5UH / DE000A0F5UH1 + Zu Ih r e n G u n s t e n v o r S te u e r n : E U R 15,6 3 + + +S te u e rb e m e ss u n g s g r u n d la g e v o r V e r lu s tv e r re c h n u n g ( 1 ) E U R 1 0 , 9 4 -S te u e rb e m e ss u n g s g r u n d la g e v o r V e r lu s tv e r re c h n u n g E U R 0 , 4 9 +v e r re c h n e te s o n s tig e V e rlu s t e E U R 1 0 , 9 4 -v e r re c h n e te s o n s tig e V e rlu s t e E U R 0 , 4 9 + S te u e rb e m e ss u n g s g r u n d la g e n a c h V e r lu s t ve r r ec h n u n g E U R 0 , 0 0 -S te u e rb e m e ss u n g s g r u n d la g e n a c h V e r lu s t ve r r ec h n u n g E U R 0 , 0 0 - - - K ap i ta le r tr a gs t e ue r E U R 0 , 0 0 +K ap i ta le r tr a gs t e ue r E U R 0 , 0 0 S ol id a ri tä t sz u s c hl a g E U R 0 , 0 0 - K irc h e n s te u e r _E U_ _R _ _ _ _ _ _ _ _ _ _ _ _ _ _ 0_ ,_ _0 0_ -a b g e f ü h rt e S t e u er n E_ _U _R _ _ _ _ _ _ _ _ _ _ _ _ __ 0__,0_ _0 + K irc h e n s te u e r E_ U_ R_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _0 ,_ _0 0_ + ab g e f ü h rt e S t e u er n E_ U_ R_ _ _ _ _ _ _ _ _ __ _ _ _ __0_,_0 0_ -Z u Ih r e n G u n s t e n n a c h S t e u er n : E U R 0,4 9 +Z u Ih r e n G u n s t e n n a c h S t e u er n : E U R 15,6 3 -Die Gutschrift erfolgt mit Valuta 11.05.2018 auf Konto EUR mit der IBAN DE12 1234 1234 1234 1234 12 - +Die Gutschrift erfolgt mit Valuta 16.04.2018 auf Konto EUR mit der IBAN DE89 6130 8288 5532 1341 92 @@ -59,6 +59,7 @@ Die Gutschrift erfolgt mit Valuta 11.05.2018 auf Konto EUR mit der IBAN DE12 123 +(1) siehe "Hinweise zur Ermittlung der Steuerbemessungsgrundlage" auf der Folgeseite KEINE STEUERBESCHEINIGUNG ... Bisher einbehaltene bzw. angerechnete Steuer in EUR (4) in 2018 einbehaltene einbehaltener einbehaltene angerechneteKapitalertragsteuer Solidaritätszuschlag Kirchensteuer ausländische Quellensteuer @@ -68,17 +69,17 @@ vor Ermittlung nach Ermittlung 0,00 0,00 0,00 0,00 Verrechnungssalden in EUR (4) -in 2018 Gewinne / Verluste sonstige anrechenbare verfügbareraus Aktien Gewinne / Verluste ausländische Quellensteuer Freistellungsauftrag +2018 Gewinne / Verluste sonstige anrechenbare verfügbarerin aus Aktien Gewinne / Verluste ausländische Quellensteuer Freistellungsauftrag vor Ermittlung - 0,00 -0,50 0,00 250,00 + 0,00 -54,46 0,00 0,00 nach Ermittlung - 0,00 -0,01 - 0,00 250,00 - - - - + 0,00 -43,52 + 0,00 0,00 +Hinweise zur Ermittlung der Steuerbemessungsgrundlage: + In v e st m e n t -A u s s c h ü tt un g E U R 1 5 , 6 3 +T ei lf re is t e llu n g (3 0 % ) E_ U_ _R _ _ _ _ _ _ _ _ _ _ _ _ _ _ _- _4 _, 6_ 9_ + S te u e r b e m e s s u n g s g r u n d la g e v o r V er l u s tv e r re c h n u n g E U R 1 0 , 9 4 @@ -112,4 +113,6 @@ Diese Abrechnung ist maschinell erstellt und wird nicht unterschrieben. (4) Die ausgewiesenen EUR-Beträge spiegeln den Stand zum Abrechnungszeitpunkt wider. -KEINE STEUERBESCHEINIGUNG \ No newline at end of file +KEINE STEUERBESCHEINIGUNG + +``` \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuermitteilungDividende06.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuerbehandlungVonDividende11.txt similarity index 84% rename from name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuermitteilungDividende06.txt rename to name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuerbehandlungVonDividende11.txt index ffc99a88b7..a76460ff4a 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuermitteilungDividende06.txt +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuerbehandlungVonDividende11.txt @@ -1,34 +1,34 @@ -PDF Autor: 'HAVI Solutions GmbH & Co. KG, phg' -PDFBox Version: 1.8.16 +``` +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.65.2.qualifier ----------------------------------------- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Kundennr. /BLZ Bezeichnung -12345678 Max Mustermann +2776447 sNfahAzbon dcptFNHtNc -123 456 78 Musterstr. 123 12345 Musterstadt +200 123 55 Musterstr. 965 08513 IbtjtxQ abweichend wirtschaftlich Berechtigter ---- - c o m d i r e c t +c o m d i r e c t b a n k A G 2 5 4 5 1 Q u i c k b o r n -0 1 0 9 7828 +0 1 0 9 7859 - T e le f o n : 0 4 1 0 6 - 7 0 8 25 00 +T e le f o n : 0 4 1 0 6 - 7 0 8 25 00 -Herrn D a t u m : 1 4 . 1 2 .2020 - M a x M u s t e r m a n n - D e p o t n u m m er: 1 2 3 4 5 6 -M u s t e r s t r . 1 2 3 -12 R e f e r e n z - N u mmer: 11 I G 7 J P S L V6000GF 3 4 5 M u s t e r s t a d t +Herrn D a t u m : 1 5 . 0 5 .2020 + M u s t e r r rr r M u s t e r uber D e p o t n u m m er: 1 1 1 1 1 1 1 11 +M u s t er r r r s t r . 9 6 5 +08513 IbtjtxQ R e f e r e n z - N u mmer: 0I I F T G G F C JV002JX -Steuerliche Behandlung: Ausländische Dividende vom 12.12.2020 -Stk. 13 3M CO. DL-,01 , WKN / ISIN: 851745 / US88579Y1010 - Zu Ih r e n G u n s t e n v o r S te u e r n : E U R 13,3 3 +Steuerliche Behandlung: Ausländische Dividende vom 15.05.2020 +Stk. 7,499 PROCTER GAMBLE , WKN / ISIN: 852062 / US7427181091 + Zu Ih r e n G u n s t e n v o r S te u e r n : E U R 4,6 5 @@ -37,21 +37,21 @@ Stk. 13 3M CO. DL-,01 , WKN / ISIN: 851745 / US88579Y1 - S te u e rb e m e ss u n g s g r u n d la g e E U R 1 5 , 6 8 +S te u e rb e m e ss u n g s g r u n d la g e E U R 5 , 4 7 - K ap i ta le r tr a gs t e ue r E U R - 1 , 5 7 -(angerechnete ausländische Quellensteuer: EUR 2,35 ) -S ol id a ri tä t sz u s c hl a g E U R - 0 , 0 8 - K irc h e n s te u e r _E _U _R _ _ _ _ _ _ _ _ _ _ _ _ _ _ 0_ ,_ _0 0_ -a b g e f ü h rt e S t e u er n _E _U R_ _ _ _ _ _ _ _ _ _ _ _ __ -__1,_6_ _5 +K ap i ta le r tr a gs t e ue r E U R - 0 , 5 5 +(angerechnete ausländische Quellensteuer: EUR 0,82 ) + S ol id a ri tä t sz u s c hl a g E U R - 0 , 0 3 +K irc h e n s te u e r E_ U_ R_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 0_ ,_ _0 0_ +a b g e f ü h rt e S t e u er n _E U_ _R _ _ _ _ _ _ _ __ _ _ _ __-_0_,5_ _8 -Z u Ih r e n G u n s t e n n a c h S t e u er n : E U R 11,6 8 +Z u Ih r e n G u n s t e n n a c h S t e u er n : E U R 4,0 7 -Die Gutschrift erfolgt mit Valuta 16.12.2020 auf Konto EUR mit der IBAN DE12 3456 7890 1234 5678 90 +Die Gutschrift erfolgt mit Valuta 19.05.2020 auf Konto EUR mit der IBAN DE36 9237 7397 8412 9920 16 @@ -64,16 +64,16 @@ KEINE STEUERBESCHEINIGUNG ... Bisher einbehaltene bzw. angerechnete Steuer in EUR (4) in 2020 einbehaltene einbehaltener einbehaltene angerechneteKapitalertragsteuer Solidaritätszuschlag Kirchensteuer ausländische Quellensteuer vor Ermittlung - 1.234,56 123 - 0,00 234 + 49,47 2,68 + 0,00 37,71 nach Ermittlung - 12345,67 123 0,00 234 + 50,02 2,71 0,00 38,53 Verrechnungssalden in EUR (4) in 2020 Gewinne / Verluste sonstige anrechenbare verfügbareraus Aktien Gewinne / Verluste ausländische Quellensteuer Freistellungsauftrag vor Ermittlung - 23456 12345 0,00 0,00 + 853,52 296,14 0,00 0,00 nach Ermittlung - 23456 12345 + 853,52 301,61 0,00 0,00 @@ -105,7 +105,7 @@ nach Ermittlung -Ihre comdirect +comdirect bank AG Diese Abrechnung ist maschinell erstellt und wird nicht unterschrieben. @@ -114,3 +114,5 @@ Diese Abrechnung ist maschinell erstellt und wird nicht unterschrieben. (4) Die ausgewiesenen EUR-Beträge spiegeln den Stand zum Abrechnungszeitpunkt wider. KEINE STEUERBESCHEINIGUNG + +``` \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuermitteilungDividende07.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuerbehandlungVonDividende12.txt similarity index 81% rename from name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuermitteilungDividende07.txt rename to name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuerbehandlungVonDividende12.txt index 894f2aac0a..838784ee47 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuermitteilungDividende07.txt +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuerbehandlungVonDividende12.txt @@ -1,33 +1,34 @@ -PDF Autor: 'HAVI Solutions GmbH & Co. KG, phg' -PDFBox Version: 1.8.16 +``` +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.65.2.qualifier ----------------------------------------- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Kundennr. /BLZ Bezeichnung -12345678 Max Mustermann +3604921 MPYcMwr oUNp -123 456 78 Musterstr. 123 12345 Musterstadt +034 159 94 Muster-Weg 34 87703 rchJpRxzmfuF abweichend wirtschaftlich Berechtigter ---- c o m d i r e c t - 2 5 4 5 1 Q u i c k b o r n - 0 1 0 9 7828 +2 5 4 5 1 Q u i c k b o r n + 0 1 0 9 7745 -T e le f o n : 0 4 1 0 6 - 7 0 8 25 00 + T e le f o n : 0 4 1 0 6 - 7 0 8 25 00 -H e r r n D a t u m : 1 1 . 1 2 .2020 - M a x M u s t e r m a n n D e p o t n u m m er: 1 2 3 4 5 6 7 8 - G a r t e n s t r . 1 0 2 -12345 Musterstadt R e f e r e n z - N u mmer: 0 H I G 7 A O J NO4004XH +H e r r n D a t u m : 3 0 . 0 6 .2021 + M u s t e r r M u s t D e p o t n u m m er: 1 1 1 1 1 1 1 11 +F r i e d r i c h - L ö f f le r - W eg 67 +44177 xCegxEfaxOXC R e f e r e n z - N u mmer: 0 O I H 6 D F Z DB600A12 -Steuerliche Behandlung: Ausländische Investment-Ausschüttung vom 11.12.2020 -Stk. 78,416 MUL-LYX.S+P500UC.ETF DEO , WKN / ISIN: LYX0FS / LU0496786574 - Zu Ih r e n G u n s t e n v o r S te u e r n : E U R 14,9 0 +Steuerliche Behandlung: Ausländische Investment-Ausschüttung vom 30.06.2021 +Stk. 84 VANG.FTSE A.-WO.U.ETF DLD , WKN / ISIN: A1JX52 / IE00B3RBWM25 +Z u Ih r e n G u n s t e n v o r S te u e r n : E U R 40,9 6 @@ -36,21 +37,21 @@ Stk. 78,416 MUL-LYX.S+P500UC.ETF DEO , WKN / ISIN: LYX0FS / LU0496 - S te u e rb e m e ss u n g s g r u n d la g e ( 1 ) E U R 1 0 , 4 3 +S te u e rb e m e ss u n g s g r u n d la g e ( 1 ) E U R 2 8 , 6 7 - K ap i ta le r tr a gs t e ue r E U R - 2 , 6 1 -S ol id a ri tä t sz u s c hl a g E U R - 0 , 1 4 - K irc h e n s te u e r E_ _U _R _ _ _ _ _ _ _ _ _ _ _ _ _ _ _0 _, 0_ _0 -a b g e f ü h rt e S t e u er n E_ U_ _R _ _ _ _ _ _ _ __ __ _ _-_2__,7_ 5_ +K ap i ta le r tr a gs t e ue r E U R - 7 , 1 7 + S ol id a ri tä t sz u s c hl a g E U R - 0 , 3 9 + K irc h e n s te u e r E_ U_ _R _ _ _ _ _ _ _ _ _ _ _ _ _ _ 0_ _, _0 0_ +a b g e f ü h rt e S t e u er n E_ U_ _R _ _ _ _ _ _ _ __ _ _ _ __-_7,__5 6_ -Z u Ih r e n G u n s t e n n a c h S t e u er n : E U R 12,1 5 +Z u Ih r e n G u n s t e n n a c h S t e u er n : E U R 33,4 0 -Die Gutschrift erfolgt mit Valuta 11.12.2020 auf Konto EUR mit der IBAN DE12 3456 7890 1234 5678 90 +Die Gutschrift erfolgt mit Valuta 02.07.2021 auf Konto EUR mit der IBAN DE89 4343 6169 6215 8664 25 @@ -61,24 +62,24 @@ Die Gutschrift erfolgt mit Valuta 11.12.2020 auf Konto EUR mit der IBAN DE12 345 (1) siehe "Hinweise zur Ermittlung der Steuerbemessungsgrundlage" auf der Folgeseite KEINE STEUERBESCHEINIGUNG ... Bisher einbehaltene bzw. angerechnete Steuer in EUR (4) -in 2020 einbehaltene einbehaltener einbehaltene angerechneteKapitalertragsteuer Solidaritätszuschlag Kirchensteuer ausländische Quellensteuer +in 2021 einbehaltene einbehaltener einbehaltene angerechneteKapitalertragsteuer Solidaritätszuschlag Kirchensteuer ausländische Quellensteuer vor Ermittlung - 1234 123 - 0,00 234 + 106,09 5,83 + 0,00 0,00 nach Ermittlung - 1234 123 0,00 234 + 113,26 6,22 0,00 0,00 Verrechnungssalden in EUR (4) -2020 Gewinne / Verluste sonstige anrechenbare verfügbarerin aus Aktien Gewinne / Verluste ausländische Quellensteuer Freistellungsauftrag +2021 Gewinne / Verluste sonstige anrechenbare verfügbarerin aus Aktien Gewinne / Verluste ausländische Quellensteuer Freistellungsauftrag vor Ermittlung - 12345 1234 0,00 0,00 + -179,41 424,36 0,00 0,00 nach Ermittlung - 12345 1234 + -179,41 453,03 0,00 0,00 Hinweise zur Ermittlung der Steuerbemessungsgrundlage: - In v e st m e n t -A u s s c h ü tt un g E U R 1 4 , 9 0 -T ei lf re is t e llu n g (3 0 % ) E_ U_ _R _ _ _ _ _ _ _ _ _ _ _ _ _ _ _- _4 _, 4_ 7_ - S te u e r b e m e s s u n g s g r u n d la g e v o r V er l u s tv e r re c h n u n g E U R 1 0 , 4 3 + In v e st m e n t -A u s s c h ü tt un g E U R 4 0 , 9 6 +T ei lf re is t e llu n g (3 0 % ) E_ U_ _R _ _ _ _ _ _ _ _ _ _ _ _ _ _- 1_ 2_ _, _2 _9 + S te u e r b e m e s s u n g s g r u n d la g e v o r V er l u s tv e r re c h n u n g E U R 2 8 , 6 7 @@ -113,3 +114,5 @@ Diese Abrechnung ist maschinell erstellt und wird nicht unterschrieben. (4) Die ausgewiesenen EUR-Beträge spiegeln den Stand zum Abrechnungszeitpunkt wider. KEINE STEUERBESCHEINIGUNG + +``` \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuermitteilungDividende09.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuerbehandlungVonDividende13.txt similarity index 100% rename from name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuermitteilungDividende09.txt rename to name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuerbehandlungVonDividende13.txt diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuermitteilungDividende10.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuerbehandlungVonDividende14.txt similarity index 100% rename from name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuermitteilungDividende10.txt rename to name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuerbehandlungVonDividende14.txt diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuermitteilungDividende11.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuerbehandlungVonDividende15.txt similarity index 100% rename from name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuermitteilungDividende11.txt rename to name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuerbehandlungVonDividende15.txt diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuermitteilungDividende16.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuerbehandlungVonDividende16.txt similarity index 100% rename from name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuermitteilungDividende16.txt rename to name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuerbehandlungVonDividende16.txt diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuermitteilungDividende03.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuerbehandlungVonDividende21.txt similarity index 63% rename from name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuermitteilungDividende03.txt rename to name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuerbehandlungVonDividende21.txt index 479507b0d6..fff9afff24 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuermitteilungDividende03.txt +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuerbehandlungVonDividende21.txt @@ -1,34 +1,35 @@ -PDF author: 'HAVI Solutions GmbH & Co. KG, phg' -PDFBox Version: 1.8.13 +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.65.3 ----------------------------------------- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Kundennr. /BLZ Bezeichnung -1111111 Max Mustermann +12312312 Felix Möller -222 222 22 Musterstr. 123 66666 Musterstadt +200 411 33 Dorfstraße 12345 Entenhausen abweichend wirtschaftlich Berechtigter ---- -c o m d i r e c t b a n k A G +c o m d i r e c t 2 5 4 5 1 Q u i c k b o r n -5 5 5 4 4444 + 0 1 0 1 0288 -T e le f o n : 0 4 1 0 6 - 7 0 8 25 00 + T e le f o n : 0 4 1 0 6 - 7 0 8 25 00 -Herrn D a t u m : 0 3 . 1 1 .2017 - M a x M u s t e r m a n n - D e p o t n u m m er: 1 1 1 1 1 1 1 00 -M u s t e r s t r . 1 2 3 -66 R e f e r e n z - N u mmer: 1 B I C A Y 8 Q GZE0000U 6 6 6 M u s t e r s t a d t + H e r r n D a t u m : 3 1 . 1 2 .2021 + F e li x M ö l l e r D e p o t n u m m er: 4 4 4 4 4 4 4 44 +Dorfstraße +12345 Musterdorf R e f e r e n z - N u mmer: 1 R I H I H N K L PV001JQ -Steuerliche Behandlung: Ausländische Dividende vom 03.11.2017 -Stk. 32 CVS HEALTH CORP. DL-,01 , WKN / ISIN: 859034 / US1266501006 - Zu Ih r e n G u n s t e n v o r S te u e r n : E U R 11,6 5 + + +Steuerliche Behandlung: Ausländische Dividende vom 05.09.2023 +Stk. 300 PFIZER INC. DL-,05 , WKN / ISIN: 852009 / US7170811035 +Z u Ih r e n G u n s t e n v o r S te u e r n : E U R 97,0 8 @@ -37,49 +38,21 @@ Stk. 32 CVS HEALTH CORP. DL-,01 , WKN / ISIN: 859034 / US1266501 - S te u e rb e m e ss u n g s g r u n d la g e E U R 1 3 , 7 0 + S te u e rb e m e ss u n g s g r u n d la g e E U R 1 1 4 , 2 1 - K ap i ta le r tr a gs t e ue r E U R - 1 , 3 7 -(angerechnete ausländische Quellensteuer: EUR 2,06 ) -S ol id a ri tä t sz u s c hl a g E U R - 0 , 0 7 - K irc h e n s te u e r _E _U _R _ _ _ _ _ _ _ _ _ _ _ _ _ _ 0_ ,_ _0 0_ -a b g e f ü h rt e S t e u er n _E _U R_ _ _ _ _ _ _ _ _ _ _ _ __ -__1,_4_ _4 + K ap i ta le r tr a gs t e ue r E U R - 1 1 , 4 2 +(angerechnete ausländische Quellensteuer: EUR 17,13 ) +S ol id a ri tä t sz u s c hl a g E U R - 0 , 6 2 +K irc h e n s te u e r _E U_ _R _ _ _ _ _ _ _ _ _ _ _ _ _ _ _0 _, 0_ 0_ + ab g e f ü h rt e S t e u er n E_ _U R_ _ _ _ _ _ _ _ _ _ __ _ _-_1_2_,_0 _4 -Z u Ih r e n G u n s t e n n a c h S t e u er n : E U R 10,2 1 + Zu Ih r e n G u n s t e n n a c h S t e u er n : E U R 85,0 4 -Die Gutschrift erfolgt mit Valuta 07.11.2017 auf Konto EUR mit der IBAN DE33 3333 3333 3333 3333 33 - - - - - - - - -KEINE STEUERBESCHEINIGUNG ... -Bisher einbehaltene bzw. angerechnete Steuer in EUR (4) -in 2017 einbehaltene einbehaltener einbehaltene angerechneteKapitalertragsteuer Solidaritätszuschlag Kirchensteuer ausländische Quellensteuer -vor Ermittlung - XXX,XX XXX,XX - XXX,XX XXX,XX -nach Ermittlung - XXX,XX X,XX X,XX XXX,XX -Verrechnungssalden in EUR (4) -in 2017 Gewinne / Verluste sonstige anrechenbare verfügbareraus Aktien Gewinne / Verluste ausländische Quellensteuer Freistellungsauftrag -vor Ermittlung - XXX,XX X.XXX,XX X,XX X,XX -nach Ermittlung - XXX,XX X.XXX,XX - X,XX X,XX - - - - - +Die Gutschrift erfolgt mit Valuta 07.09.2023 auf Konto EUR mit der IBAN xJ13 0471 0151 3605 5714 04 @@ -105,7 +78,7 @@ nach Ermittlung -comdirect bank AG +Ihre comdirect Diese Abrechnung ist maschinell erstellt und wird nicht unterschrieben. @@ -113,5 +86,4 @@ Diese Abrechnung ist maschinell erstellt und wird nicht unterschrieben. (4) Die ausgewiesenen EUR-Beträge spiegeln den Stand zum Abrechnungszeitpunkt wider. -KEINE STEUERBESCHEINIGUNG - +KEINE STEUERBESCHEINIGUNG \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuermitteilungDividende02.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuerbehandlungVonDividende26.txt similarity index 73% rename from name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuermitteilungDividende02.txt rename to name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuerbehandlungVonDividende26.txt index 02e75f5528..0168c53d16 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuermitteilungDividende02.txt +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuerbehandlungVonDividende26.txt @@ -1,87 +1,89 @@ -PDF author: 'HAVI Solutions GmbH & Co. KG, phg' -PDFBox Version: 1.8.16 +``` +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.65.2.qualifier ----------------------------------------- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Kundennr. /BLZ Bezeichnung -1234567 Max Mustermann +4465067 jORQZg erOn -111 111 11 Muster Str. 11 12345 Stadt +200 074 19 Musterstr. 11 07441 ZmhxPgPCRU abweichend wirtschaftlich Berechtigter - + ---- c o m d i r e c t b a n k A G 2 5 4 5 1 Q u i c k b o r n - 0 1 0 9 7871 +0 1 0 1 1857 -T e le f o n : 0 4 1 0 6 - 7 0 8 25 00 + T e le f o n : 0 4 1 0 6 - 7 0 8 25 00 -Herrn D a t u m : 1 0 . 0 1 .2020 - M a x M u s t e r m a n n D e p o t n u m m er: 1 1 1 1 1 1 1 11 -M u s t e r-Str. 1 -12345 D R e f e r e n z - N u mmer: 1 S I F L 4 E 0 6 NF000DT S t a d t +Herrn D a t u m : 0 8 . 0 7 .2016 + M u s t e r M u s t D e p o t n u m m er: 1 1 1 1 1 1 1 11 + M u s t - e r r r r r - S t r . 1 1 +03782 tFiFBe R e f e r e n z - N u mmer: 0M I A T 7 T D 81I001TO e n -Steuerliche Behandlung: Ausländische Dividende vom 10.01.2020 -Stk. 130 SCHLUMBERGER DL-,01 , WKN / ISIN: 853390 / AN8068571086 -Z u Ih r e n G u n s t e n v o r S te u e r n : E U R 58,4 4 +Steuerliche Behandlung: Ausländische Investment-Ausschüttung vom 08.07.2016 +Stk. 3.100 LYXOR U.E.FT.ATHEX L.CAP , WKN / ISIN: LYX0BF / FR0010405431 +Z u Ih r e n G u n s t e n v o r S te u e r n : E U R 31,0 0 - S te u e rb e m e ss u n g s g r u n d la g e v o r V e r lu s tv e r re c h n u n g E U R 5 8 , 4 4 +S te u e rb e m e ss u n g s g r u n d la g e v o r V e r lu s tv e r re c h n u n g ( 1 ) (2 2 ) E U R 0 , 3 1 -i n A n s p ru c h g e n o m m e n e r F r ei s te ll un g s a u ft ra g E U R 5 8 , 4 4 + in A n s p ru c h g e n o m m e n e r F r ei s te ll un g s a u ft ra g E U R 0 , 3 1 -S te u e rb e m e ss u n g s g r u n d la g e n a c h V e r lu s t ve r r ec h n u n g E U R 0 , 0 0 + S te u e rb e m e ss u n g s g r u n d la g e n a c h V e r lu s t ve r r ec h n u n g E U R 0 , 0 0 -K ap i ta le r tr a gs t e ue r E U R 0 , 0 0 -S ol id a ri tä t sz u s c hl a g E U R 0 , 0 0 - K irc h e n s te u e r E_ U_ _R _ _ _ _ _ _ _ _ _ _ _ _ _ _ 0_ _, _0 _0 - ab g e f ü h rt e S t e u er n _E U_ R_ _ _ _ _ _ _ _ __ _ _ __ _ 0_,_0_ 0_ + K ap i ta le r tr a gs t e ue r E U R 0 , 0 0 + S ol id a ri tä t sz u s c hl a g E U R 0 , 0 0 +K irc h e n s te u e r _E _U R_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 0_ _, 0_ 0_ + ab g e f ü h rt e S t e u er n _E _U R_ _ _ _ _ _ _ _ _ _ _ _ __ __0_,_0 _0 -Z u Ih r e n G u n s t e n n a c h S t e u er n : E U R 58,4 4 +Z u Ih r e n G u n s t e n n a c h S t e u er n : E U R 31,0 0 -Die Gutschrift erfolgt mit Valuta 14.01.2020 auf Konto EUR mit der IBAN DE12 3456 7890 1234 5678 00 - - - +Die Gutschrift erfolgt mit Valuta 08.07.2016 auf Konto EUR mit der IBAN DE15 2310 3580 7463 2660 26 +(1) siehe "Hinweise zur Ermittlung der Steuerbemessungsgrundlage" auf der Folgeseite +(22) Zwischen Ausschüttungsbetrag und Bemessungsgrundlage kann es zu Abweichungen kommen. Für nähere Informationen wenden Sie sich bitte an die +Fondsgesellschaft. KEINE STEUERBESCHEINIGUNG ... Bisher einbehaltene bzw. angerechnete Steuer in EUR (4) -in 2020 einbehaltene einbehaltener einbehaltene angerechneteKapitalertragsteuer Solidaritätszuschlag Kirchensteuer ausländische Quellensteuer +in 2016 einbehaltene einbehaltener einbehaltene angerechneteKapitalertragsteuer Solidaritätszuschlag Kirchensteuer ausländische Quellensteuer vor Ermittlung 0,00 0,00 0,00 0,00 nach Ermittlung - 0,00 0,00 0,00 11,11 + 0,00 0,00 0,00 + 0,00 Verrechnungssalden in EUR (4) -in 2020 Gewinne / Verluste sonstige anrechenbare verfügbareraus Aktien Gewinne / Verluste ausländische Quellensteuer Freistellungsauftrag +2016 Gewinne / Verluste sonstige anrechenbare verfügbarerin aus Aktien Gewinne / Verluste ausländische Quellensteuer Freistellungsauftrag vor Ermittlung - -11,11 111,11 -11,11 111,11 + 0,00 113,12 0,00 687,88 nach Ermittlung - -11,11 111,11 - -11,11 1,11 - - - - - - - + 0,00 113,43 + 0,00 687,57 +Hinweise zur Ermittlung der Steuerbemessungsgrundlage: +kapitalertragsteuerpflichtige Erträge aus +- in lä n d is c h e n D i v id e n d e n E U R 0,00 +- Z in s e n / s o n st ig e n E rt rä g e n E U R 0,00 +- au s l ä nd i s ch e n D iv id e n d e n / V e r ä u ß e ru n g s g e w in n e n / T e r m i n g es c h ä ft e n / S t i ll h a l t e r p r ä m i e n E U R 0,31 +- in lä n d is c h e M ie te r tr ä g e E_ _U R__ __ _ __ _ _ _ _ _ __ _ _ _ 0_,__0_0 +S te u e r b e m e s s u n g s g r u n d la g e v o r V er l u s tv e r re c h n u n g E U R 0,31 @@ -113,3 +115,5 @@ Diese Abrechnung ist maschinell erstellt und wird nicht unterschrieben. (4) Die ausgewiesenen EUR-Beträge spiegeln den Stand zum Abrechnungszeitpunkt wider. KEINE STEUERBESCHEINIGUNG + +``` \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuerbehandlungVonEinbuchung01.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuerbehandlungVonEinbuchung01.txt new file mode 100644 index 0000000000..a6a3046021 --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuerbehandlungVonEinbuchung01.txt @@ -0,0 +1,97 @@ +``` +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.65.2.qualifier +----------------------------------------- + +Kundennr. /BLZ Bezeichnung +6219371 CLDHRL KUZR + + +200 600 11 Musterstr. 94 29792 MMneTJxJlv +abweichend wirtschaftlich Berechtigter + + ---- + c o m d i r e c t b a n k A G + + 2 5 4 5 1 Q u i c k b o r n +0 1 0 1 1857 + + T e le f o n : 0 4 1 0 6 - 7 0 8 25 00 + +Herrn D a t u m : 0 7 . 0 4 .2014 + M u s t e r M u s t + D e p o t n u m m er: 1 1 1 1 1 1 1 11 +M u s t e r r s t r . 9 4 +75618 buIWAxoIva R e f e r e n z - N u mmer: 2O I 8 3 1 V W 2AM000F6 + + + + +Steuerliche Behandlung: Einbuchung Sachausschüttung vom 03.04.2014 +Stk. 5 GOOGLE INC.C DL-,001 , WKN / ISIN: A110NH / US38259P7069 +Z u Ih r e n G u n s t e n v o r S te u e r n : E U R 0,0 0 + + +S te u e rb e m e ss u n g s g r u n d la g e v o r V e r lu s tv e r re c h n u n g ( 1 ) E U R 2 . 0 4 8 , 7 5 + + + + in A n s p ru c h g e n o m m e n e r F r ei s te ll un g s a u ft ra g E U R 7 9 8 , 5 3 + +S te u e rb e m e ss u n g s g r u n d la g e n a c h V e r lu s t ve r r ec h n u n g E U R 1 . 2 5 0 , 2 2 + + +K ap i ta le r tr a gs t e ue r E U R - 3 1 2 , 5 6 +S ol id a ri tä t sz u s c hl a g E U R - 1 7 , 1 9 + K irc h e n s te u e r E_ _U _R _ _ _ _ _ _ _ _ _ _ _ _ _ _ _0 _, _0 _0 +a b g e f ü h rt e S t e u er n _E U_ _R _ _ _ _ _ _ _ _ _ __ -__32__9_,_7 _5 + +Z u Ih r e n L a s te n n a ch S te u e r n : E U R -329,7 5 + + + + + +Die Belastung erfolgt mit Valuta 03.04.2014 auf Konto EUR mit der IBAN DE15 0614 0039 5748 4295 63 + + + + + + + +(1) siehe "Hinweise zur Ermittlung der Steuerbemessungsgrundlage" auf der Folgeseite +KEINE STEUERBESCHEINIGUNG ... +Bisher einbehaltene bzw. angerechnete Steuer in EUR (4) +in 2014 einbehaltene einbehaltener einbehaltene angerechneteKapitalertragsteuer Solidaritätszuschlag Kirchensteuer ausländische Quellensteuer +vor Ermittlung + 0,00 0,00 + 0,00 0,00 +nach Ermittlung + 312,56 17,19 0,00 0,00 +Verrechnungssalden in EUR (4) +2014 Gewinne / Verluste sonstige anrechenbare verfügbarerin aus Aktien Gewinne / Verluste ausländische Quellensteuer Freistellungsauftrag +vor Ermittlung + 0,00 2,47 0,00 798,53 +nach Ermittlung + 0,00 2.051,22 + 0,00 0,00 + + + + + + + + +comdirect bank AG +Diese Abrechnung ist maschinell erstellt und wird nicht unterschrieben. + + + + + +(4) Die ausgewiesenen EUR-Beträge spiegeln den Stand zum Abrechnungszeitpunkt wider. +KEINE STEUERBESCHEINIGUNG + +``` \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuermitteilungDividende01.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuerbehandlungVonEinloesung01.txt similarity index 76% rename from name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuermitteilungDividende01.txt rename to name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuerbehandlungVonEinloesung01.txt index 18617835eb..38dd519db7 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuermitteilungDividende01.txt +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuerbehandlungVonEinloesung01.txt @@ -1,86 +1,87 @@ -PDF author: 'HAVI Solutions GmbH & Co. KG, phg' -PDFBox Version: 1.8.16 +``` +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.65.2.qualifier ----------------------------------------- -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + Kundennr. /BLZ Bezeichnung -1234567 Max Mustermann +0789764 PSOhTxE SJpO -111 111 11 Muster Str. 11 12345 Stadt +200 789 44 Musterstr. 87 03234 pQRagjHoOTHx abweichend wirtschaftlich Berechtigter ---- c o m d i r e c t b a n k A G - 2 5 4 5 1 Q u i c k b o r n - 0 1 0 9 7871 +2 5 4 5 1 Q u i c k b o r n +0 1 0 9 7745 T e le f o n : 0 4 1 0 6 - 7 0 8 25 00 -Herrn D a t u m : 1 8 . 0 2 .2020 - M a x M u s t e r m a n n D e p o t n u m m er: 1 1 1 1 1 1 1 11 -M u s t e r-Str. 1 -12345 D R e f e r e n z - N u mmer: 0 W I F N P 9 R RTJ001C2 S t a d t +Herrn D a t u m : 3 0 . 0 9 .2015 + M u s t e r r M u s t D e p o t n u m m er: 1 1 1 1 1 1 1 11 +M u s t s t r . 8 7 +03234 Mus R e f e r e n z - N u mmer: 1 0 I 9 O R Q 2 BPZ00002 t e r r r r r rr -Steuerliche Behandlung: Ausländische Dividende vom 18.02.2020 -Stk. 518 PROCTER GAMBLE , WKN / ISIN: 852062 / US7427181091 - Zu Ih r e n G u n s t e n v o r S te u e r n : E U R 302,5 5 +Steuerliche Behandlung: Einlösung vom 30.09.2015 +EUR 5.000 COBA CAM.PART.-ANL.09/15 , WKN / ISIN: CB89VM / DE000CB89VM3 + Zu Ih r e n G u n s t e n v o r S te u e r n : E U R 6.584,4 5 - S te u e rb e m e ss u n g s g r u n d la g e v o r V e r lu s tv e r re c h n u n g E U R 3 5 5 , 9 5 -i n A n s p ru c h g e n o m m e n e r F r ei s te ll un g s a u ft ra g E U R 1 1 , 1 1 - S te u e rb e m e ss u n g s g r u n d la g e n a c h V e r lu s t ve r r ec h n u n g E U R 1 6 8 , 7 2 - K ap i ta le r tr a gs t e ue r E U R 0 , 0 0 -(angerechnete ausländische Quellensteuer: EUR 42,18 ) -S ol id a ri tä t sz u s c hl a g E U R 0 , 0 0 - K irc h e n s te u e r E_ _U R_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _0 ,_ 0_ _0 -a b g e f ü h rt e S t e u er n _E _U _R _ _ _ _ _ _ _ _ __ _ _ _ _0__,_0 _0 +S te u e rb e m e ss u n g s g r u n d la g e ( 1 ) E U R 1 . 3 8 4 , 4 5 -Z u Ih r e n G u n s t e n n a c h S t e u er n : E U R 302,5 5 + K ap i ta le r tr a gs t e ue r ( 2 ) E U R - 3 3 8 , 5 0 +S ol id a ri tä t sz u s c hl a g E U R - 1 8 , 6 1 + K irc h e n s te u e r E_ _U R_ _ _ _ _ _ _ _ _ _ _ _ _ -_ 3_ 0_ _, _4 _6 +a b g e f ü h rt e S t e u er n E_ U_ _R _ _ _ _ _ _ _ _ __ _ -__3_87__,_5 7_ +Z u Ih r e n G u n s t e n n a c h S t e u er n : E U R 6.196,8 8 -Die Gutschrift erfolgt mit Valuta 20.02.2020 auf Konto EUR mit der IBAN DE12 3456 7890 1234 5678 00 - - + + + +Die Gutschrift erfolgt mit Valuta 30.09.2015 auf Konto EUR mit der IBAN DE89 8820 2914 6983 1720 00 +(1) siehe "Hinweise zur Ermittlung der Steuerbemessungsgrundlage" auf der Folgeseite +(2) Durch die Berücksichtigung der Kirchensteuer (8% bzw. 9%) als Sonderausgabe reduziert sich der Kapitalertragsteuersatz auf 24,51% bzw. 24,45%. KEINE STEUERBESCHEINIGUNG ... Bisher einbehaltene bzw. angerechnete Steuer in EUR (4) -in 2020 einbehaltene einbehaltener einbehaltene angerechneteKapitalertragsteuer Solidaritätszuschlag Kirchensteuer ausländische Quellensteuer +in 2015 einbehaltene einbehaltener einbehaltene angerechneteKapitalertragsteuer Solidaritätszuschlag Kirchensteuer ausländische Quellensteuer vor Ermittlung - 0,00 0,00 - 0,00 0,00 + 56,57 3,08 + 5,06 5,00 nach Ermittlung - 0,00 0,00 0,00 11,11 + 395,07 21,69 35,52 5,00 Verrechnungssalden in EUR (4) -in 2020 Gewinne / Verluste sonstige anrechenbare verfügbareraus Aktien Gewinne / Verluste ausländische Quellensteuer Freistellungsauftrag +2015 Gewinne / Verluste sonstige anrechenbare verfügbarerin aus Aktien Gewinne / Verluste ausländische Quellensteuer Freistellungsauftrag vor Ermittlung - -11,11 111,11 -11,11 111,11 + 156,31 95,01 0,00 0,00 nach Ermittlung - -11,11 111,11 - -11,11 1,11 - - - - - - + 156,31 1.479,46 + 0,00 0,00 +Hinweise zur Ermittlung der Steuerbemessungsgrundlage: + zu Ih r e n G u n s te n v o r S te u e rn E U R 6.584,45 + An s ch af f un g v o m 1 9. 08 . 2 0 09 5 . 00 0, 0 0 S t üc k _E _U R_ _ _ _ _ _ _ _ _ _ _ _- _5 ._ _2 0_0__,0_0_ +Summe der Anschaffungskosten aus Anschaffungsvorgängen nach + ab g e l tu n g s te u e rr e le v a n te m S t ic h ta g E_ U_ _R __ _ _ _ __ __ _ _-__5_.2__0_0_,_0_0 +S te u e r b e m e s s u n g s g r u n d la g e v o r V er l u s tv e r re c h n u n g E U R 1.384,45 @@ -113,3 +114,5 @@ Diese Abrechnung ist maschinell erstellt und wird nicht unterschrieben. (4) Die ausgewiesenen EUR-Beträge spiegeln den Stand zum Abrechnungszeitpunkt wider. KEINE STEUERBESCHEINIGUNG + +``` \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuermitteilungDividende12.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuermitteilungDividende12.txt deleted file mode 100644 index 8a3956f7d1..0000000000 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuermitteilungDividende12.txt +++ /dev/null @@ -1,38 +0,0 @@ -PDF Autor: 'HAVI Solutions GmbH & Co. KG, phg' -PDFBox Version: 1.8.16 ------------------------------------------ -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - - ---- - c o m d i r e c t - - -Steuerliche Behandlung: Ausländische Dividende vom 01.07.2021 -Stk. 404 COCA-COLA CO. DL-,25 , WKN / ISIN: 850663 / US1912161007 - Zu Ih r e n G u n s t e n v o r S te u e r n : E U R 1 2 1 , 2 3 U S D 1 4 4 ,2 3 - - - - - - - - -S te u e rb e m e ss u n g s g r u n d la g e E U R 1 4 2 , 6 2 - - -K ap i ta le r tr a gs t e ue r E U R - 1 4 , 2 7 -(angerechnete ausländische Quellensteuer: EUR 21,39 ) -S ol id a ri tä t sz u s c hl a g E U R - 0 , 7 8 -K irc h e n s te u e r E_ U_ _R _ _ _ _ _ _ _ _ _ _ _ _ _ _ _0 ,_ _0 _0 -a b g e f ü h rt e S t e u er n E U R - 1 5 , 0 5 U_ _S _D _ _ _ _ _ _ _ _ _ _ _ __ - _1_ 7_ ,9 _ 1_ - -Z u Ih r e n G u n s t e n n a c h S t e u er n : U S D 126,3 2 -Umrechnungen zum Devisenkurs 1,189700 - - - -Die Gutschrift erfolgt mit Valuta 01.07.2021 auf Konto USD xxxxx Bankleitzahl : xxxxx - -Ihre comdirect -Diese Abrechnung ist maschinell erstellt und wird nicht unterschrieben. \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Umtausch01.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Umtausch01.txt deleted file mode 100644 index 9ac174bed3..0000000000 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Umtausch01.txt +++ /dev/null @@ -1,57 +0,0 @@ -PDFBox Version: 1.8.16 ------------------------------------------ -Ihren Auftrag haben wir gemäß unseren Sonderbe- -dingungen für Wertpapiergeschäfte wie nachstehend -ausgeführt. -Die Wertpapiere haben wir der Abrechnung entspre- -25449 Quickborn chend gebucht.Wir bitten Sie, diese Abrechnung auf ihre Richtigkeit und -Telefon 01803-33 63 66 Vollständigkeit zu überprüfen und etwaige Einwendungen: unverzüglich zu erheben. - - - - - 11111 111 - - - -Vorname Nachname Depotnummer: 1111111 11 -und Frau Vorname Nachname -Straße 111 - -11111 Stadt - - - - - -ABRECHNUNG VOM 07.06.2005 -Wertpapierumtausch -Geschäftsnummer : 11 111111 - 111111111111 Rechnungsnummer : 111111111111D111 -Geschäftstag : 06.06.2005 Börsenplatz : AUSSERB. AUSLAND - - -Wertpapier-Bezeichnung WPKNR/ISIN -Agere Systems Inc. A0ET5J -Registered Shares DL -,01 US00845V3087 - - -Nennwert Zum Kurs von -St. 0,10 EUR 8,79845 - - Kurswert : EUR 0,88 - - -Verrechnung über Konto Valuta Zu Ihren Gunsten - 1111111 11 EUR 08.06.2005 EUR 0,88 - -Verwahrungs-Art: GIROSAMMELDEPOT - - - -comdirect bank AG - - -Diese Abrechnung wird von der Bank nicht unterschrieben -Die Leistung ist gemäß §4 Nr.8 UStG umsatzsteuerfrei. USt-Id-Nr.: DE 112 279 461 -DoComd/01/2001 \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Verkauf01.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Verkauf01.txt index d15305559f..02ff985c19 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Verkauf01.txt +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Verkauf01.txt @@ -1,183 +1,75 @@ -Ihren Auftrag haben wir gemäß unseren produktbezogenen -Geschäftsbedingungen "Trading" wie nachstehend ausgeführt. -Die Wertpapiere haben wir der Abrechnung entsprechend gebucht. -Wir bitten Sie, diese Abrechnung auf ihre Richtigkeit und -Vollständigkeit zu überprüfen und etwaige Einwendungen -25449 Quickborn unverzüglich zu erheben. +``` +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.65.2.qualifier +----------------------------------------- +Ihren Auftrag haben wir gemäß unseren Sonderbe- +dingungen für Wertpapiergeschäfte wie nachstehend +ausgeführt. +Die Wertpapiere haben wir der Abrechnung entspre- +25449 Quickborn chend gebucht.Wir bitten Sie, diese Abrechnung auf ihre Richtigkeit und +Telefon 01803-33 63 66 Vollständigkeit zu überprüfen und etwaige Einwendungen: unverzüglich zu erheben. + -Telefon : 0000-000 00 00 - - - 99999 999 -Depotnr.: 9999999 00 - BLZ: 200 999 99 -Max Mustermann + 11857 010 + + +xHiOHx mtQg Depotnummer: 6190796 26 + +Musterstr. 76 -Musterstraße. 1 -12345 Stadt +07170 rsqbXkjSeG -GESCHÄFTSABRECHNUNG VOM 01.01.2010 +ABRECHNUNG VOM 20.02.2007 +Wertpapierverkauf bei Freistellungsauftrag +Geschäftsnummer : 18 665821 + 007301624026-004 Rechnungsnummer : 099094791965DAF2 +Geschäftstag : 20.02.2007 Ausführungsplatz : INVESTRO -* -Wertpapierverkauf -Geschäftsnummer : 92 9999999 -Ordernummer : 999999999999-001 Rechnungsnummer : 99999999999999AA -Geschäftstag : 01.01.2010 Ausführungsplatz : TRADEGATE -Handelszeit : 10:57 Uhr (MEZ/MESZ) (Kommissionsgeschäft) Wertpapier-Bezeichnung WPKNR/ISIN -FooBar. ETF ABC123 -Inhaber-Anteile I o.N. DE1234567890 +DWS Internet-Aktien Typ O 984800 +Inhaber-Anteile DE0009848002 -Nennwert Zum Kurs von -St. 100 EUR 99,999 - Kurswert : EUR 9.999,99 +Nennwert Zum Rücknahmepreis von +St. 67 EUR 14,99 --------------------------------------------------------------------------------- -Eigene Entgelte - Provision : EUR 10,01- - Börsenplatzabhäng. Entgelt : EUR 1,50- - Summe Entgelte : EUR 11,51- --------------------------------------------------------------------------------- + Kurswert : EUR 1.004,33 -IBAN Valuta Zu Ihren Gunsten vor Steuern -DE09 9999 9999 9999 9999 00 EUR 01.01.2010 EUR 10.111,11 +Verrechnung über Konto Valuta Zu Ihren Gunsten + 7070105 77 EUR 22.02.2007 EUR 1.004,33 +Zwischengewinn je Anteil am 20.02.2007 von 0,010000 EUR +Von der zuständigen Stelle wurde der Aktiengewinn pro Anteil am 20.02.2007 mit +-260,97 % vom Rücknahmepreis gemeldet.(Gilt nur für Anteile im Betriebs- +vermögen.) +Von der zuständigen Stelle wurde der Immobiliengewinn pro Anteil am 20.02.2007 +mit "Null %" gemeldet. +(Gilt nur für Anteile im Betriebsvermögen). Verwahrungs-Art: GIROSAMMELDEPOT +Ermittlung der Steuerbasisbeträge: +vereinnahmter Zwischengewinn + ggf.Ersatzwert : EUR 0,67 +- berücksichtigter Freibetrag : EUR 0,67- +kapitalertragsteuerpflichtig : EUR 0,00 -Informationen zur steuerlichen Behandlung dieses Geschäftsvorgangs und den auf -Ihrem Konto gebuchten Endbetrag finden Sie auf der separaten Steuermitteilung. - - -Bei Fragen geben Sie bitte die Ordernummer an. comdirect bank AG + Diese Abrechnung wird von der Bank nicht unterschrieben -Die Leistung ist gemäß §4 Nr.8 UStG umsatzsteuerfrei. USt-Id-Nr.: DE 999 999 999 -999 -D999DD/16/04/9999 - -Kundennr. /BLZ Bezeichnung -Max Mustermann - 1234566 - - -200 999 99 Sraße.1 12345 Stadt -abweichend wirtschaftlich Berechtigter - - ---- -c o m d i r e c t b a n k A G - -2 5 4 5 1 Q u i c k b o r n - 0 1 0 1 0272 - -T e le f o n : 0 4 1 0 6 - 7 0 8 25 00 - -H e r r n D a t u m : 0 1 . 0 2 .2010 - M a x M u s t e r m a n n D e p o t n u m m er: 1 2 3 4 5 6 7 89 - s t r a s s e . 1 -12345 Stadt R e f e r e n z - N u mmer: 0 D 0 9 9 9 9 L VL99999 - - - - -Steuerliche Behandlung: Wertpapierverkauf Nr. 99999999 vom 01.01.2010 -Stk. 99 FooBar Etf , WKN / ISIN: ABC123 / DE1234567890 -Z u Ih r e n G u n s t e n v o r S te u e r n : E U R 99.999,5 4 - - -S te u e rb e m e ss u n g s g r u n d la g e v o r V e r lu s tv e r re c h n u n g ( 1 ) E U R 0 . 0 0 0 , 0 0 - - -v e r re c h n e te s o n s tig e V e rlu s t e E U R 8 7 , 1 1 -i n A n s p ru c h g e n o m m e n e r F r ei s te ll un g s a u ft ra g E U R 1 1 1 , 0 0 - -S te u e rb e m e ss u n g s g r u n d la g e n a c h V e r lu s t ve r r ec h n u n g E U R 1 1 1 , 1 1 - - -K ap i ta le r tr a gs t e ue r ( 2 ) E U R - 1 1 , 1 1 -(angerechnete ausländische Quellensteuer: EUR 11,11 ) -S ol id a ri tä t sz u s c hl a g E U R - 1 , 1 1 -K irc h e n s te u e r _E _U _R _ _ _ _ _ _ _ _ _ _ _ _ _ _- _1 _, _1 1_ -a b g e f ü h rt e S t e u er n E_ U_ R_ _ _ _ _ _ _ _ _ _ __ _ _-1__1,_1_ 1_ - -Z u Ih r e n G u n s t e n n a c h S t e u er n : E U R 11,1 1 - - - - -Die Gutschrift erfolgt mit Valuta 01.01.2010 auf Konto EUR mit der IBAN DE09 9999 9999 9999 9999 99 - - - - - - -(1) siehe "Hinweise zur Ermittlung der Steuerbemessungsgrundlage" auf der Folgeseite -(2) Durch die Berücksichtigung der Kirchensteuer (8% bzw. 9%) als Sonderausgabe reduziert sich der Kapitalertragsteuersatz auf 24,51% bzw. 24,45%. -KEINE STEUERBESCHEINIGUNG ... -Bisher einbehaltene bzw. angerechnete Steuer in EUR (4) -in 2015 einbehaltene einbehaltener einbehaltene angerechneteKapitalertragsteuer Solidaritätszuschlag Kirchensteuer ausländische Quellensteuer -vor Ermittlung - 0,00 0,00 - 0,00 0,00 -nach Ermittlung - 00,00 0,00 0,00 00,00 -Verrechnungssalden in EUR (4) -in 2015 Gewinne / Verluste sonstige anrechenbare verfügbareraus Aktien Gewinne / Verluste ausländische Quellensteuer Freistellungsauftrag -vor Ermittlung - 0,00 0,00 -00,00 000,00 -nach Ermittlung - 0,00 0,00 - 0,00 0,00 -Hinweise zur Ermittlung der Steuerbemessungsgrundl a g e : - - er h a lt e n e Z w i sc h e n g e w in n e (g g f. E rs a tz w e r t) E U R 0,00 -noch nicht dem Steuerabzug unterworfene akkumulierte thesaurierte -E rt rä g e E U R 0,00 - be s i tz z e ita n t e ili g e r a kk u m u lie r te r M eh r b e tr a g E U R 0,00 - S ch ä t z w e rt E U R 0,00 -Veräußerungserlös aus Anschaffungsvorgängen - na c h a bg e l tu n g s te u e r re le v a n te m S t ic h ta g E U R 0 , 0 4 - abzüglich Anschaffungskosten gemindert um gezahlte - Z w is c h e ng e w in n e ( a u s A n s c ha f fu n g s v o rg ä n g e n ) E U R - 0 . 0 0 0 , 0 1 - a b z ü g li c h e rh a l te n e Z w is c h en g e w i n n e ( g gf . E r sa t z w e rt ) E U R 0 , 0 0 - a b z ü g li c h b e s itz z e it a n te il ig e r I m m o b i lie n g e w i n n E U R 0 , 0 0 - a b z ü g li c h b e s itz z e it a n te il ig e ak k u m u l ie r te t h e s a ur ie r te E rt rä g e E U R 0 , 0 0 - z u z ü g li ch b e s itz z e it a n te il ig e a k k u m u l ie r te A l tv e r ä uß e r u n g s g ew in n e E U R 0 , 0 0 - z u z ü g li ch b e s itz z e it a n te il ig e a k k u m u l ie r te S u b s ta n z a u ss c h ü tt u n g e n E_ _U _R _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 0_ _, 0_ 0_ -V e rä u ß e ru n g s e r ge b n i s _E U_ _R_ _ _ __ _ _ __ __ _ _0.__0_0_0_0,000 - S te u e r b e m e s s u n g s g r u n d la g e v o r V er l u s tv e r re c h n u n g (1 0 ) E U R 0.000,00 - - - - - - - - - - - - -comdirect bank AG -Diese Abrechnung ist maschinell erstellt und wird nicht unterschrieben. - - - - -(4) Die ausgewiesenen EUR-Beträge spiegeln den Stand zum Abrechnungszeitpunkt wider. -(10) Die Summe besteht aus mehr als einem Anschaffungsvorgang. -KEINE STEUERBESCHEINIGUNG +Die Leistung ist gemäß §4 Nr.8 UStG umsatzsteuerfrei. USt-Id-Nr.: DE 111 111 111 + +Kapitalerträge sind einkommensteuerpflichtig. +DoComd/01/2001 + +``` \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Verkauf02.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Verkauf02.txt index 210f3e416b..a6c52261b3 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Verkauf02.txt +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Verkauf02.txt @@ -1,30 +1,59 @@ -comdirect bank - -GESCHÄFTSABRECHNUNG VOM 08.12.2016 - -* -Wertpapierverkauf -Geschäftsnummer : 91 040013 -Ordernummer : 072468891314-001 Rechnungsnummer : 408310300825DD15 -Geschäftstag : 08.12.2016 Abwicklung : Live Trading -Handelszeit : 17:03 Uhr (MEZ/MESZ) - -Wertpapier-Bezeichnung WPKNR/ISIN -Boeing Co. 850471 -Registered Shares DL 5 US0970231058 - - -Nennwert Zum Preis von -St. 1.140 EUR 146,21 franco Courtage - Kurswert : EUR 20.469,40 - --------------------------------------------------------------------------------- -Eigene Entgelte - Provision : EUR 56,07- --------------------------------------------------------------------------------- - - -IBAN Valuta Zu Ihren Gunsten vor Steuern -DE00 0000 0000 0000 0000 00 EUR 12.12.2016 EUR 20.413,33 - -Verwahrungs-Art: GIROSAMMELDEPOT \ No newline at end of file +PDF Autor: '' +PDFBox Version: 1.8.16 +----------------------------------------- +Ihren Auftrag haben wir gemäß unseren Sonderbe- +dingungen für Wertpapiergeschäfte wie nachstehend +ausgeführt. +Die Wertpapiere haben wir der Abrechnung entspre- +25449 Q i kb chend gebucht.u c orn Wir bitten Sie, diese Abrechnung auf ihre Richtigkeit und +Telefon : 01803-33 63 66 Vollständigkeit zu überprüfen und etwaige Einwendungenunverzüglich zu erheben. + + + + + 11869 010 + + + +Max Mustermann Depotnummer: 1234567 00 + +Musterstrasse 3 + +12345 Musterstadt + + + + + +ABRECHNUNG VOM 08.12.2003 +Wertpapierverkauf +Geschäftsnummer : 00 123456 + 1234567890123-123 +Geschäftstag : 08.12.2003 Börsenplatz : FRANKFURT + + +Wertpapier-Bezeichnung WPKNR/ISIN +Citigroup Global Markets Dt. 950354 +KOS03/21.12.04 Allianz 80 DE0009503540 + + +Nennwert Zum Kurs von +St. 550 EUR 2,00 + + Kurswert : EUR 1.100,00 + 0,08000% Maklercourtage : EUR 0,88- + Provision : EUR 9,90- + Börsenplatzabhäng. Entgelt : EUR 2,50- + + +Verrechnung über Konto Valuta Zu Ihren Gunsten + 1234567 00 EUR 10.12.2003 EUR 1.086,72 + +Verwahrungs-Art: GIROSAMMELDEPOT + + + +comdirect bank AG + + +Diese Abrechnung wird von der Bank nicht unterschrieben DoComd/01/2001 \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Verkauf03.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Verkauf03.txt index 24d812d2b3..4de3dfd1f3 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Verkauf03.txt +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Verkauf03.txt @@ -1,66 +1,55 @@ -Ihren Auftrag haben wir gemäß unseren produktbezogenen -Geschäftsbedingungen "Trading" wie nachstehend ausgeführt. -Die Wertpapiere haben wir der Abrechnung entsprechend gebucht. -Wir bitten Sie, diese Abrechnung auf ihre Richtigkeit und -Vollständigkeit zu überprüfen und etwaige Einwendungen -25449 Quickborn unverzüglich zu erheben. - -Telefon : 04106-708 25 00 - - - - - 11873 010 -Depotnr.: 0000000 00 - BLZ: 000 000 00 -Vorname Nachname - - -Straßenname Hausnummer -00000 Ort - - - - - -GESCHÄFTSABRECHNUNG VOM 25.02.2016 - -* -Wertpapierverkauf -Geschäftsnummer : 91 027455 bis 91 027456 -Ordernummer : 072170653514 Rechnungsnummer : 000000000000DDE5 -Geschäftstag : 25.02.2016 Ausführungsplatz : TRADEGATE - (Kommissionsgeschäft) - -Wertpapier-Bezeichnung WPKNR/ISIN -ITC Holdings Corp. A0F401 -Registered Shares o. N. US4656851056 - - -Ihre Order wurde wie folgt ausgeführt: - -Handelszeit Nennwert Zum Kurs von Kurswert - 21:05 St. 540 EUR 37,38 EUR 20.185,20 - 21:05 St. 30 EUR 37,37 EUR 1.121,10 --------------------------------------------------------------------------------- - Summe St. 570 EUR 37,379473 EUR 21.306,30 -(ggf. gerundet) --------------------------------------------------------------------------------- -Eigene Entgelte - Abwickl.entgelt Clearstream : EUR 5,80- - Gesamtprovision : EUR 58,17- - Börsenplatzabhäng. Entgelt : EUR 2,50- - Summe Entgelte : EUR 66,47- --------------------------------------------------------------------------------- - - -IBAN Valuta Zu Ihren Gunsten vor Steuern -DE00 0000 1111 0000 0000 00 EUR 29.02.2016 EUR 21.239,83 - -Verwahrungs-Art: WERTPAPIERRECHNUNG USA/KANADA (AKV) -Teilausführung Ihrer Order - -e r s ta t te t e S t e ue r n E_ _U R_ _ _ _ _ _ _ _ _ _ _ __ _ 7_1__,7_ 3_ - - -comdirect bank \ No newline at end of file +``` +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.65.2.qualifier +----------------------------------------- +Wir bitten Sie, diese Mitteilung/Bestätigung + +Qu unverzüglich auf ihre Richtigkeit zu überprüfen; 2 5 4 4 9 i c k b o r n etwaige Einwendungen sind unverzüglich zu + +erheben und an uns zu richten. + + g Anderenfalls ilt diese Mitteilung/Bestätigung + l s g e n e h m i g t . a + + + 35089 93 0 D e p o t n r . : 1 1 1 1 1 1 1 1 1 + BLZ: 993 232 08 + + gYgckiCQye xnpgaGZsPg + Musterstr. 035 + + 92702 QqygaRu + + + + + + Quickborn, den 08.Juni 2015 + +Entsprechend Ihrem Auftrag haben wir für Sie folgendes Geschäft ausgeführt: + +Geschäftstag : 08.06.2015 Order-Nr. : 71871368321 / 001 +Verkauf Börsenplatz : XETRA +zum Kurs von : EUR 33,47 + + Wertpapierbezeichnung WPK-Nr. +St. 16 iShares PLC-MSCI Wo.UC.ETF DIS A0HGV0 + Registered Shares o.N. IE00B0M62Q58 + +Die Abrechnung lassen wir mit Valuta 10.06.2015 folgen, der Gegenwert +wird über IBAN DE36 6026 6370 0968 8056 79 ( EUR ) gebucht. + + +Mit freundlichen Grüßen + +comdirect bank AG + +*Diese Benachrichtigung wird von der Gesellschaft nicht unterschrieben +comdirect bank AG +Pascalkehre 15 +25451 Quickborn +(Amtsgericht Pinneberg HRB 4889) Vorstand: Arno Walter (Vorsitzender), Holger Hohrein, Martina Palte +USt-ID-Nr.: DE 812 279 461 Vorsitzender des Aufsichtsrates: Martin Zielke +D9334/10/1111 + +``` \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Verkauf07.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Verkauf07.txt deleted file mode 100644 index a6c52261b3..0000000000 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Verkauf07.txt +++ /dev/null @@ -1,59 +0,0 @@ -PDF Autor: '' -PDFBox Version: 1.8.16 ------------------------------------------ -Ihren Auftrag haben wir gemäß unseren Sonderbe- -dingungen für Wertpapiergeschäfte wie nachstehend -ausgeführt. -Die Wertpapiere haben wir der Abrechnung entspre- -25449 Q i kb chend gebucht.u c orn Wir bitten Sie, diese Abrechnung auf ihre Richtigkeit und -Telefon : 01803-33 63 66 Vollständigkeit zu überprüfen und etwaige Einwendungenunverzüglich zu erheben. - - - - - 11869 010 - - - -Max Mustermann Depotnummer: 1234567 00 - -Musterstrasse 3 - -12345 Musterstadt - - - - - -ABRECHNUNG VOM 08.12.2003 -Wertpapierverkauf -Geschäftsnummer : 00 123456 - 1234567890123-123 -Geschäftstag : 08.12.2003 Börsenplatz : FRANKFURT - - -Wertpapier-Bezeichnung WPKNR/ISIN -Citigroup Global Markets Dt. 950354 -KOS03/21.12.04 Allianz 80 DE0009503540 - - -Nennwert Zum Kurs von -St. 550 EUR 2,00 - - Kurswert : EUR 1.100,00 - 0,08000% Maklercourtage : EUR 0,88- - Provision : EUR 9,90- - Börsenplatzabhäng. Entgelt : EUR 2,50- - - -Verrechnung über Konto Valuta Zu Ihren Gunsten - 1234567 00 EUR 10.12.2003 EUR 1.086,72 - -Verwahrungs-Art: GIROSAMMELDEPOT - - - -comdirect bank AG - - -Diese Abrechnung wird von der Bank nicht unterschrieben DoComd/01/2001 \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Verkauf08.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Verkauf08.txt deleted file mode 100644 index 83463f6004..0000000000 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Verkauf08.txt +++ /dev/null @@ -1,59 +0,0 @@ -PDF Autor: '' -PDFBox Version: 1.8.16 ------------------------------------------ -Ihren Auftrag haben wir gemäß unseren Sonderbe- -dingungen für Wertpapiergeschäfte wie nachstehend -ausgeführt. -Die Wertpapiere haben wir der Abrechnung entspre- -25449 Q i kb chend gebucht.u c orn Wir bitten Sie, diese Abrechnung auf ihre Richtigkeit und -Telefon : 01803-33 63 66 Vollständigkeit zu überprüfen und etwaige Einwendungenunverzüglich zu erheben. - - - - - 11869 010 - - - -Max Muster Depotnummer: 1234567 00 - -Musterstr. 1 - -12345 Musterstadt - - - - - -ABRECHNUNG VOM 10.03.2004 -Wertpapierverkauf -Geschäftsnummer : 12 1234567 - 1234567890123-123 -Geschäftstag : 10.03.2004 Börsenplatz : STUTTGART - - -Wertpapier-Bezeichnung WPKNR/ISIN -Deutsche Bank AG 560121 -KOS03/13.12.04 SAP 150 DE0005601215 - - -Nennwert Zum Kurs von -St. 300 EUR 0,50 - - Kurswert : EUR 150,00 - Maklercourtage : EUR 0,75- - Provision : EUR 9,90- - Börsenplatzabhäng. Entgelt : EUR 2,50- - - -Verrechnung über Konto Valuta Zu Ihren Gunsten - 1234567 00 EUR 12.03.2004 EUR 136,85 - -Verwahrungs-Art: GIROSAMMELDEPOT - - - -comdirect bank AG - - -Diese Abrechnung wird von der Bank nicht unterschrieben DoComd/01/2001 \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/VerkaufMitSteuerbehandlung01.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/VerkaufMitSteuerbehandlung01.txt new file mode 100644 index 0000000000..1ec0d751e3 --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/VerkaufMitSteuerbehandlung01.txt @@ -0,0 +1,187 @@ +``` +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.65.2.qualifier +----------------------------------------- +Ihren Auftrag haben wir gemäß unseren produktbezogenen +Geschäftsbedingungen "Trading" wie nachstehend ausgeführt. +Die Wertpapiere haben wir der Abrechnung entsprechend gebucht. +Wir bitten Sie, diese Abrechnung auf ihre Richtigkeit und +Vollständigkeit zu überprüfen und etwaige Einwendungen +25449 Quickborn unverzüglich zu erheben. +fon : 04106-708 25 00 Tele + + + + + 97859 010 +Depotnr.: 8840916 28 + BLZ: 200 411 55 +bNyuPtYOZz YLflFvbdQj + + +Musterstr. 626 +01267 fPSiDAl + + + + + +GESCHÄFTSABRECHNUNG VOM 06.02.2020 + +* +Wertpapierverkauf +Geschäftsnummer : 68 434132 +Ordernummer : 000117637940-001 Rechnungsnummer : 508104401078D295 +Geschäftstag : 06.02.2020 Abwicklung : Live Trading +Handelszeit : 20:06 Uhr (MEZ/MESZ) + +Wertpapier-Bezeichnung WPKNR/ISIN +Bayer AG BAY001 +Namens-Aktien o.N. DE000BAY0017 + + +Nennwert Zum Kurs von +St. 8 EUR 78,26 + Kurswert : EUR 626,08 + +-------------------------------------------------------------------------------- +Eigene Entgelte + Provision : EUR 9,90- +-------------------------------------------------------------------------------- + + +IBAN Valuta Zu Ihren Gunsten vor Steuern +DE36 4148 7227 3022 3056 95 EUR 10.02.2020 EUR 616,18 + +Verwahrungs-Art: GIROSAMMELDEPOT +Ihre Wertpapier-Order wurde über das Online Banking erteilt. + + + +Informationen zur steuerlichen Behandlung dieses Geschäftsvorgangs und den auf +Ihrem Konto gebuchten Endbetrag finden Sie auf der separaten Steuermitteilung. + + +Bei Fragen geben Sie bitte die Ordernummer an. + +comdirect bank AG + +Diese Abrechnung wird von der Bank nicht unterschrieben +Die Leistung ist gemäß §4 Nr.8 UStG umsatzsteuerfrei. USt-Id-Nr.: DE 111 111 111 +A113 +DO15DD/16/04/2010 +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +Kundennr. /BLZ Bezeichnung +6697733 rYMkPyCRZI nGNrQjVCZP + + +200 411 55 Musterstr. 679 30859 jtiLQGD +abweichend wirtschaftlich Berechtigter + + ---- + c o m d i r e c t b a n k A G + +2 5 4 5 1 Q u i c k b o r n + 0 1 0 9 7859 + +T e le f o n : 0 4 1 0 6 - 7 0 8 25 00 + +H e r r n D a t u m : 0 6 . 0 2 .2020 +M u s t e e e ee r M u s t e r uber + D e p o t n u m m er: 1 1 1 1 1 1 1 11 +M u s t er r r r s t r . 1 4 9 +74783 Mus R e f e r e n z - N u mmer: 0G I F M W N I POL0000U c h e n + + + + +Steuerliche Behandlung: Wertpapierverkauf Nr. 91023920 vom 06.02.2020 +Stk. 8 BAYER AG NA O.N. , WKN / ISIN: BAY001 / DE000BAY0017 + Zu Ih r e n G u n s t e n v o r S te u e r n : E U R 616,1 8 + + + S te u e rb e m e ss u n g s g r u n d la g e v o r V e r lu s tv e r re c h n u n g ( 1 ) E U R - 2 4 , 8 7 + + + + in A n s p ru c h g e n o m m e n e r F r ei s te ll un g s a u ft ra g E U R - 2 4 , 8 7 + + S te u e rb e m e ss u n g s g r u n d la g e n a c h V e r lu s t ve r r ec h n u n g E U R 0 , 0 0 + + + K ap i ta le r tr a gs t e ue r E U R 0 , 0 0 +S ol id a ri tä t sz u s c hl a g E U R 0 , 0 0 +K irc h e n s te u e r _E _U R_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 0_ _, _0 0_ +a b g e f ü h rt e S t e u er n E_ _U R_ _ _ _ _ _ _ _ _ __ _ __ __0_,_0 0_ + +Z u Ih r e n G u n s t e n n a c h S t e u er n : E U R 616,1 8 + + + + + +Die Gutschrift erfolgt mit Valuta 10.02.2020 auf Konto EUR mit der IBAN DE36 9902 2167 9152 6272 27 + + + + + + + +(1) siehe "Hinweise zur Ermittlung der Steuerbemessungsgrundlage" auf der Folgeseite +KEINE STEUERBESCHEINIGUNG ... +Bisher einbehaltene bzw. angerechnete Steuer in EUR (4) +in 2020 einbehaltene einbehaltener einbehaltene angerechneteKapitalertragsteuer Solidaritätszuschlag Kirchensteuer ausländische Quellensteuer +vor Ermittlung + 0,00 0,00 + 0,00 0,00 +nach Ermittlung + 0,00 0,00 0,00 0,00 +Verrechnungssalden in EUR (4) +in 2020 Gewinne / Verluste sonstige anrechenbare verfügbareraus Aktien Gewinne / Verluste ausländische Quellensteuer Freistellungsauftrag +vor Ermittlung + 617,20 94,90 -14,21 88,90 +nach Ermittlung + 592,33 94,90 + -14,21 113,77 +Hinweise zur Ermittlung der Steuerbemessungsgrundlage: + +z u Ih r e n G u n s te n v o r S te u e rn E U R 616,18 +Summe der Anschaffungskosten aus Anschaffungsvorgängen nach + ab g e l tu n g s te u e rr e le v a n te m S t ic h ta g (6 ) E_ _U _R_ _ _ _ __ _ _ __ _ __ -__64__1,__05_ + S te u e r b e m e s s u n g s g r u n d la g e v o r V er l u s tv e r re c h n u n g E U R -24,87 + + + + + + + + + + + + + + + + + + + + + + + + +comdirect bank AG +Diese Abrechnung ist maschinell erstellt und wird nicht unterschrieben. + + + + +(4) Die ausgewiesenen EUR-Beträge spiegeln den Stand zum Abrechnungszeitpunkt wider. +(6) Die Summe besteht aus mehr als fünf Anschaffungsvorgängen. +KEINE STEUERBESCHEINIGUNG + +``` \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/VerkaufMitSteuerbehandlung02.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/VerkaufMitSteuerbehandlung02.txt new file mode 100644 index 0000000000..a8c237ec54 --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/VerkaufMitSteuerbehandlung02.txt @@ -0,0 +1,188 @@ +``` +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.65.2.qualifier +----------------------------------------- +Ihren Auftrag haben wir gemäß unseren produktbezogenen +Geschäftsbedingungen "Trading" wie nachstehend ausgeführt. +Die Wertpapiere haben wir der Abrechnung entsprechend gebucht. +Wir bitten Sie, diese Abrechnung auf ihre Richtigkeit und +Vollständigkeit zu überprüfen und etwaige Einwendungen +25449 Quickborn unverzüglich zu erheben. +Telefon : 04106-708 25 00 + + + + + 97859 010 +Depotnr.: 9213061 76 + BLZ: 200 411 55 +lTyUWUXHrL fjXKKagTnX + + +Musterstr. 963 +95386 wlAxwqH + + + + + +GESCHÄFTSABRECHNUNG VOM 06.06.2018 + +* +Wertpapierverkauf +Geschäftsnummer : 14 602983 +Ordernummer : 000062293103-001 Rechnungsnummer : 455380245510DC35 +Geschäftstag : 05.06.2018 Abwicklung : Live Trading +Handelszeit : 20:19 Uhr (MEZ/MESZ) + +Wertpapier-Bezeichnung WPKNR/ISIN +BGF - World Gold Fund 974119 +Act. Nom. A2 USD o.N. LU0055631609 + + +Nennwert Zum Preis von +St. 1 EUR 22,98 + Kurswert : EUR 22,98 + +-------------------------------------------------------------------------------- +Eigene Entgelte + Abwickl.entgelt Clearstream : EUR 2,90- + Provision : EUR 9,90- + Summe Entgelte : EUR 12,80- +-------------------------------------------------------------------------------- + + +IBAN Valuta Zu Ihren Gunsten vor Steuern +DE36 5831 3661 4027 2764 89 EUR 07.06.2018 EUR 10,18 + +Verwahrungs-Art: WERTPAPIERRECHNUNG LUXEMBURG (AKV) +Ihre Wertpapier-Order wurde über das Online Banking erteilt. + + + +Informationen zur steuerlichen Behandlung dieses Geschäftsvorgangs und den auf +Ihrem Konto gebuchten Endbetrag finden Sie auf der separaten Steuermitteilung. + + +Bei Fragen geben Sie bitte die Ordernummer an. + +comdirect bank AG + +Diese Abrechnung wird von der Bank nicht unterschrieben +Die Leistung ist gemäß §4 Nr.8 UStG umsatzsteuerfrei. USt-Id-Nr.: DE 111 111 111 +A113 +DO15DD/16/04/2010 +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +Kundennr. /BLZ Bezeichnung +9313754 bWnlRMvCXb gUURGQsPiX + + +200 411 55 Musterstr. 989 49896 GTIegIM +abweichend wirtschaftlich Berechtigter + + ---- + c o m d i r e c t b a n k A G + +2 5 4 5 1 Q u i c k b o r n + 0 1 0 9 7859 + + T e le f o n : 0 4 1 0 6 - 7 0 8 25 00 + +Herrn D a t u m : 0 6 . 0 6 .2018 +M u s t e r r rr r M u s t e r uber D e p o t n u m m er: 1 1 1 1 1 1 1 22 +S c h e ll i n g s t r . 1 4 9 +80 R e f e r e n z - N u mmer: 1 Q I D A Y 8 V DBE00021 7 9 7 M ü n c h e n + + + + +Steuerliche Behandlung: Verkauf Investmentfonds Nr. 91000684 vom 05.06.2018 +Stk. 1 BGF-WORLD GOLD A2DL , WKN / ISIN: 974119 / LU0055631609 + Zu Ih r e n G u n s t e n v o r S te u e r n : E U R 10,1 8 + + + S te u e rb e m e ss u n g s g r u n d la g e v o r V e r lu s tv e r re c h n u n g ( 1 ) E U R - 1 4 , 2 8 + + + +i n A n s p ru c h g e n o m m e n e r F r ei s te ll un g s a u ft ra g E U R - 1 4 , 2 7 + +S te u e rb e m e ss u n g s g r u n d la g e n a c h V e r lu s t ve r r ec h n u n g E U R 0 , 0 0 + + + K ap i ta le r tr a gs t e ue r E U R 0 , 0 0 + S ol id a ri tä t sz u s c hl a g E U R 0 , 0 0 +K irc h e n s te u e r E_ _U _R _ _ _ _ _ _ _ _ _ _ _ _ _ _ 0_ _, _0 0_ +a b g e f ü h rt e S t e u er n E_ U_ _R _ _ _ _ _ _ _ __ _ _ __ _ _0,_0_ _0 + +Z u Ih r e n G u n s t e n n a c h S t e u er n : E U R 10,1 8 + + + + + +Die Gutschrift erfolgt mit Valuta 07.06.2018 auf Konto EUR mit der IBAN DE36 8764 7774 0554 8598 39 + + + + + + + +(1) siehe "Hinweise zur Ermittlung der Steuerbemessungsgrundlage" auf der Folgeseite +KEINE STEUERBESCHEINIGUNG ... +Bisher einbehaltene bzw. angerechnete Steuer in EUR (4) +in 2018 einbehaltene einbehaltener einbehaltene angerechneteKapitalertragsteuer Solidaritätszuschlag Kirchensteuer ausländische Quellensteuer +vor Ermittlung + 0,00 0,00 + 0,00 0,00 +nach Ermittlung + 0,00 0,00 0,00 0,00 +Verrechnungssalden in EUR (4) +2018 Gewinne / Verluste sonstige anrechenbare verfügbarerin aus Aktien Gewinne / Verluste ausländische Quellensteuer Freistellungsauftrag +vor Ermittlung + -26,77 111,53 -1,55 388,46 +nach Ermittlung + -26,77 97,25 + -1,55 402,73 +Hinweise zur Ermittlung der Steuerbemessungsgrundlage: + +V e rä u ß e ru n g s e r lö s E U R 1 0 , 1 8 +a b z ü g li c h A n s c h a ffu n g s k o s te n E U R - 2 5 , 4 9 +a b z ü g li c h b e s it zz e it a n te i lig e a kk u m ul ie r te V o ra b p a u s ch a l e E_ _U R_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 0_ _, _0 0_ + V e rä u ß e ru n g s e r ge b n i s E U R -15,31 + + + T ei lf re is t e llu n g (3 0 % ) E U R 4,59 + +f ik t iv e s V e r ä u ß er u n g s e rg e b n is a u s M e rk p o s te n (n a c h T e i lf re is t e llu n g ) E U R 0,00 + + +e r h a lt e n e Z w i sc h e n g e w in n e (g g f. E rs a tz w e r t) E U R 0 , 0 0 +noch nicht dem Steuerabzug unterworfene akkumulierte thesaurierte +E rt rä g e /M e h rb e t ra g /S ch ä t z w e rt E U R 0 , 0 0 +f ik t iv e s V e r ä u ß er u n g s e rg e b n is a u s Ü b e rg a n g s re g e lu n g _E _U R_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ -_ 3_ ,_ _5 _6 + S u m m e M e r kp o s t en 3 1 .1 2 . 20 1 7 _E _U R_ __ _ _ _ _ __ _ _ __ _ _ __-_3_,5__6 +S te u e r b e m e s s u n g s g r u n d la g e v o r V er l u s tv e r re c h n u n g (1 0 ) E U R -14,28 + + + + + + + + + + + +comdirect bank AG +Diese Abrechnung ist maschinell erstellt und wird nicht unterschrieben. + + + + +(4) Die ausgewiesenen EUR-Beträge spiegeln den Stand zum Abrechnungszeitpunkt wider. +(10) Die Summe besteht aus mehr als einem Anschaffungsvorgang. +KEINE STEUERBESCHEINIGUNG + +``` \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/VerkaufMitSteuerbehandlung03.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/VerkaufMitSteuerbehandlung03.txt new file mode 100644 index 0000000000..a3776832ee --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/VerkaufMitSteuerbehandlung03.txt @@ -0,0 +1,195 @@ +``` +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.65.2.qualifier +----------------------------------------- +Ihren Auftrag haben wir gemäß unseren produktbezogenen +Geschäftsbedingungen "Trading" wie nachstehend ausgeführt. +Die Wertpapiere haben wir der Abrechnung entsprechend gebucht. +Wir bitten Sie, diese Abrechnung auf ihre Richtigkeit und +Vollständigkeit zu überprüfen und etwaige Einwendungen +25449 Quickborn unverzüglich zu erheben. +Telefon : 04106-708 25 00 + + + + + 81480 286 +Depotnr.: 8820368 00 + BLZ: 200 411 55 +bMPBiQDbej HBcBFeGSSV + + +Musterstr. 591 +89170 vqDtfSU + + + + + +GESCHÄFTSABRECHNUNG VOM 20.07.2015 + +* +Wertpapierverkauf +Geschäftsnummer : 51 313891 +Ordernummer : 071915155121-001 Rechnungsnummer : 364505682358DE85 +Geschäftstag : 17.07.2015 Ausführungsplatz : XETRA +Handelszeit : 11:28 Uhr (MEZ/MESZ) (Kommissionsgeschäft) + +Wertpapier-Bezeichnung WPKNR/ISIN +iShares PLC-MSCI Wo.UC.ETF DIS A0HGV0 +Registered Shares o.N. IE00B0M62Q58 + + +Nennwert Zum Kurs von +St. 1 EUR 34,74 + Kurswert : EUR 34,74 + +-------------------------------------------------------------------------------- +Eigene Entgelte + Provision : EUR 9,90- + Börsenplatzabhäng. Entgelt : EUR 1,50- + Summe Entgelte : EUR 11,40- +-------------------------------------------------------------------------------- + + +IBAN Valuta Zu Ihren Gunsten vor Steuern +DE36 2864 7912 4768 8703 42 EUR 21.07.2015 EUR 23,34 + +Von der zuständigen Stelle wurde der Aktiengewinn für Anteile im Betriebsver- +mögen natürlicher Personen/Personengesellschaften pro Anteil am 17.07.2015 mit +33,2022 % gemeldet, für Anteile im Betriebsvermögen von Körperschaften +mit 32,88 %. +Von der zuständigen Stelle wurde der Immobiliengewinn pro Anteil am 17.07.2015 +mit 0,00 % vom Rücknahmepreis gemeldet. +Verwahrungs-Art: GIROSAMMELDEPOT + + + +Informationen zur steuerlichen Behandlung dieses Geschäftsvorgangs und den auf +Ihrem Konto gebuchten Endbetrag finden Sie auf der separaten Steuermitteilung. + + +Bei Fragen geben Sie bitte die Ordernummer an. + +comdirect bank AG + +Diese Abrechnung wird von der Bank nicht unterschrieben +Die Leistung ist gemäß §4 Nr.8 UStG umsatzsteuerfrei. USt-Id-Nr.: DE 111 111 111 +A113 +DO15DD/16/04/2010 + +Kundennr. /BLZ Bezeichnung +5537698 lbvTiMVQRU LcvezZJeEG + + +200 411 55 Musterstr. 589 27450 lbvTiMVQRU +abweichend wirtschaftlich Berechtigter + + ---- +c o m d i r e c t b a n k A G + +2 5 4 5 1 Q u i c k b o r n +0 1 0 9 7859 + +T e le f o n : 0 4 1 0 6 - 7 0 8 25 00 + +Herrn D a t u m : 2 0 . 0 7 .2015 + M u s t e r r rr r M u s t e r uber + D e p o t n u m m er: 1 1 1 1 1 1 1 11 +M u s t er r r r s t r . 2 2 2 +11111 lbvTiMVQRU R e f e r e n z - N u mmer: 1 4 I 9 K 2 2 V Z TF000GA + + + + +Steuerliche Behandlung: Wertpapierverkauf Nr. 91013151 vom 17.07.2015 +Stk. 1 ISHS-MSCI WORLD UC.ETFDIS , WKN / ISIN: A0HGV0 / IE00B0M62Q58 + Zu Ih r e n G u n s t e n v o r S te u e r n : E U R 23,3 4 + + +S te u e rb e m e ss u n g s g r u n d la g e v o r V e r lu s tv e r re c h n u n g ( 1 ) E U R - 1 0 , 6 7 + + + + in A n s p ru c h g e n o m m e n e r F r ei s te ll un g s a u ft ra g E U R - 1 0 , 6 7 + +S te u e rb e m e ss u n g s g r u n d la g e n a c h V e r lu s t ve r r ec h n u n g E U R 0 , 0 0 + + +K ap i ta le r tr a gs t e ue r E U R 0 , 0 0 + S ol id a ri tä t sz u s c hl a g E U R 0 , 0 0 + K irc h e n s te u e r E_ _U _R _ _ _ _ _ _ _ _ _ _ _ _ _ _ _0 _, _0 _0 +a b g e f ü h rt e S t e u er n _E U_ _R _ _ _ _ _ _ _ _ _ __ __ __0_,_0 _0 + +Z u Ih r e n G u n s t e n n a c h S t e u er n : E U R 23,3 4 + + + + + +Die Gutschrift erfolgt mit Valuta 21.07.2015 auf Konto EUR mit der IBAN DE36 0986 3338 9677 3923 02 + + + + + + + +(1) siehe "Hinweise zur Ermittlung der Steuerbemessungsgrundlage" auf der Folgeseite +KEINE STEUERBESCHEINIGUNG ... +Bisher einbehaltene bzw. angerechnete Steuer in EUR (4) +in 2015 einbehaltene einbehaltener einbehaltene angerechneteKapitalertragsteuer Solidaritätszuschlag Kirchensteuer ausländische Quellensteuer +vor Ermittlung + 0,00 0,00 + 0,00 0,00 +nach Ermittlung + 0,00 0,00 0,00 + 0,00 +Verrechnungssalden in EUR (4) +2015 Gewinne / Verluste sonstige anrechenbare verfügbarerin aus Aktien Gewinne / Verluste ausländische Quellensteuer Freistellungsauftrag +vor Ermittlung + -26,77 42,65 -0,49 107,35 +nach Ermittlung + -26,77 31,98 + -0,49 118,02 +Hinweise zur Ermittlung der Steuerbemessungsgrundl a g e : + +e r h a lt e n e Z w i sc h e n g e w in n e (g g f. E rs a tz w e r t) E U R 0,00 +noch nicht dem Steuerabzug unterworfene akkumulierte thesaurierte + E rt rä g e E U R 0,00 +b e s i tz z e ita n t e ili g e r a kk u m u lie r te r M eh r b e tr a g E U R 0,00 + S ch ä t z w e rt E U R 0,00 +Veräußerungserlös aus Anschaffungsvorgängen + na c h a bg e l tu n g s te u e r re le v a n te m S t ic h ta g E U R 2 3 , 3 4 + abzüglich Anschaffungskosten gemindert um gezahlte + Z w is c h e ng e w in n e ( a u s A n s c ha f fu n g s v o rg ä n g e n ) E U R - 3 4 , 0 1 + a b z ü g li c h e rh a l te n e Z w is c h en g e w i n n e ( g gf . E r sa t z w e rt ) E U R 0 , 0 0 + a b z ü g li c h b e s itz z e it a n te il ig e r I m m o b i lie n g e w i n n E U R 0 , 0 0 + a b z ü g li c h b e s itz z e it a n te il ig e ak k u m u l ie r te t h e s a ur ie r te E rt rä g e E U R 0 , 0 0 + z u z ü g li ch b e s itz z e it a n te il ig e a k k u m u l ie r te A l tv e r ä uß e r u n g s g ew in n e E U R 0 , 0 0 + z u z ü g li ch b e s itz z e it a n te il ig e a k k u m u l ie r te S u b s ta n z a u ss c h ü tt u n g e n _E _U R_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _0 _, _0 _0 + V e rä u ß e ru n g s e r ge b n i s _E _U _R_ _ _ _ __ _ __ _ __ _ __-1__0_,_6_7 + S te u e r b e m e s s u n g s g r u n d la g e v o r V er l u s tv e r re c h n u n g E U R -10,67 + + + + + + + + + + + + +comdirect bank AG +Diese Abrechnung ist maschinell erstellt und wird nicht unterschrieben. + + + + + +(4) Die ausgewiesenen EUR-Beträge spiegeln den Stand zum Abrechnungszeitpunkt wider. +KEINE STEUERBESCHEINIGUNG + +``` \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/VerkaufMitSteuerbehandlung04.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/VerkaufMitSteuerbehandlung04.txt new file mode 100644 index 0000000000..d6167d7df4 --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/VerkaufMitSteuerbehandlung04.txt @@ -0,0 +1,188 @@ +``` +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.65.2.qualifier +----------------------------------------- +Ihren Auftrag haben wir gemäß unseren produktbezogenen +Geschäftsbedingungen "Trading" wie nachstehend ausgeführt. +Die Wertpapiere haben wir der Abrechnung entsprechend gebucht. +Wir bitten Sie, diese Abrechnung auf ihre Richtigkeit und +Vollständigkeit zu überprüfen und etwaige Einwendungen +25449 Quickborn unverzüglich zu erheben. +Telefon : 04106-708 25 00 + + + + + 79123 918 +Depotnr.: 9194448 42 + BLZ: 200 587 90 +SlycKxx QvSj + + +Musterstr. 36 +95858 YqruomSQMCAt + + + + + +GESCHÄFTSABRECHNUNG VOM 12.09.2016 + +* +Wertpapierverkauf +Geschäftsnummer : 66 867949 +Ordernummer : 072368222219-001 Rechnungsnummer : 400775538910DB25 +Geschäftstag : 12.09.2016 Ausführungsplatz : XETRA +Handelszeit : 10:28 Uhr (MEZ/MESZ) (Kommissionsgeschäft) + +Wertpapier-Bezeichnung WPKNR/ISIN +Drillisch AG 554550 +Inhaber-Aktien o.N. DE0005545503 + + +Nennwert Zum Kurs von +St. 21 EUR 40,46 + Kurswert : EUR 849,66 + +-------------------------------------------------------------------------------- +Eigene Entgelte + Provision : EUR 9,90- + Börsenplatzabhäng. Entgelt : EUR 1,50- + Summe Entgelte : EUR 11,40- +-------------------------------------------------------------------------------- + + +IBAN Valuta Zu Ihren Gunsten vor Steuern +DE89 8077 7494 0808 7288 37 EUR 14.09.2016 EUR 838,26 + +Verwahrungs-Art: GIROSAMMELDEPOT +GLOBALURKUNDE, KEIN STUECKEAUSDRUCK + + + +Informationen zur steuerlichen Behandlung dieses Geschäftsvorgangs und den auf +Ihrem Konto gebuchten Endbetrag finden Sie auf der separaten Steuermitteilung. + + +Bei Fragen geben Sie bitte die Ordernummer an. + +comdirect bank AG + +Diese Abrechnung wird von der Bank nicht unterschrieben +Die Leistung ist gemäß §4 Nr.8 UStG umsatzsteuerfrei. USt-Id-Nr.: DE 111 111 111 +A113 +DO15DD/11/11/1111 +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +Kundennr. /BLZ Bezeichnung +6493321 PtjyLBI pYbY + + +200 782 98 Musterstr. 50 68941 yFAZmaPXImdQ +abweichend wirtschaftlich Berechtigter + + ---- +c o m d i r e c t b a n k A G + + 2 5 4 5 1 Q u i c k b o r n +0 1 0 9 7745 + + T e le f o n : 0 4 1 0 6 - 7 0 8 25 00 + +Herrn D a t u m : 1 2 . 0 9 .2016 + M u s t e r r M u s t D e p o t n u m m er: 1 1 1 1 1 1 1 11 +M u s t e r r . 1 1 +68941 yFAZmaPXImdQ R e f e r e n z - N u mmer: 1I I A X M D Q FSV002FE + + + + +Steuerliche Behandlung: Wertpapierverkauf Nr. 91003903 vom 12.09.2016 +Stk. 21 DRILLISCH AG AKTIEN O.N. , WKN / ISIN: 554550 / DE0005545503 +Z u Ih r e n G u n s t e n v o r S te u e r n : E U R 838,2 6 + + + + + + + + +S te u e rb e m e ss u n g s g r u n d la g e ( 1 ) E U R 1 9 , 9 7 + + +K ap i ta le r tr a gs t e ue r ( 2 ) E U R - 4 , 8 8 + S ol id a ri tä t sz u s c hl a g E U R - 0 , 2 6 +K irc h e n s te u e r _E U_ R_ _ _ _ _ _ _ _ _ _ _ _ _ _ -_ _0 ,_ 4_ 3_ +a b g e f ü h rt e S t e u er n _E _U R_ _ _ _ _ _ _ _ __ _ _ __ _-_5_,5_ 7_ + +Z u Ih r e n G u n s t e n n a c h S t e u er n : E U R 832,6 9 + + + + + +Die Gutschrift erfolgt mit Valuta 14.09.2016 auf Konto EUR mit der IBAN DE89 8318 6814 7585 1172 32 + + + + + + +(1) siehe "Hinweise zur Ermittlung der Steuerbemessungsgrundlage" auf der Folgeseite +(2) Durch die Berücksichtigung der Kirchensteuer (8% bzw. 9%) als Sonderausgabe reduziert sich der Kapitalertragsteuersatz auf 24,51% bzw. 24,45%. +KEINE STEUERBESCHEINIGUNG ... +Bisher einbehaltene bzw. angerechnete Steuer in EUR (4) +in 2016 einbehaltene einbehaltener einbehaltene angerechneteKapitalertragsteuer Solidaritätszuschlag Kirchensteuer ausländische Quellensteuer +vor Ermittlung + 43,98 2,37 + 3,91 21,78 +nach Ermittlung + 48,86 2,63 4,34 21,78 +Verrechnungssalden in EUR (4) +2016 Gewinne / Verluste sonstige anrechenbare verfügbarerin aus Aktien Gewinne / Verluste ausländische Quellensteuer Freistellungsauftrag +vor Ermittlung + 0,00 267,00 0,00 0,00 +nach Ermittlung + 19,97 267,00 + 0,00 0,00 +Hinweise zur Ermittlung der Steuerbemessungsgrundlage: + +z u Ih r e n G u n s te n v o r S te u e rn E U R 838,26 +A ns c ha f f un g vo m 1 3 .0 7 .2 0 1 5 2 1 ,0 0 St üc k _E _U R_ _ _ _ _ _ _ _ _ _ _ _ _ -_ 8_ 1_8_,_2__9 +Summe der Anschaffungskosten aus Anschaffungsvorgängen nach +a b g e l tu n g s te u e rr e le v a n te m S t ic h ta g E_ U_ R_ _ __ __ __ _ __ _ _ _-_8_1_8_,_2_9_ + S te u e r b e m e s s u n g s g r u n d la g e v o r V er l u s tv e r re c h n u n g E U R 19,97 + + + + + + + + + + + + + + + + + + + + + + + +comdirect bank AG +Diese Abrechnung ist maschinell erstellt und wird nicht unterschrieben. + + + + + +(4) Die ausgewiesenen EUR-Beträge spiegeln den Stand zum Abrechnungszeitpunkt wider. +KEINE STEUERBESCHEINIGUNG + +``` \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Verkauf04.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/VerkaufMitSteuerbehandlung05.txt similarity index 99% rename from name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Verkauf04.txt rename to name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/VerkaufMitSteuerbehandlung05.txt index 5cd690b891..4ddacbc35f 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Verkauf04.txt +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/VerkaufMitSteuerbehandlung05.txt @@ -29,7 +29,7 @@ GESCHÄFTSABRECHNUNG VOM 25.08.2020 * Wertpapierverkauf Geschäftsnummer : XX XXXXXX -Ordernummer : XXXXXXXXXXXX-XXX Rechnungsnummer : XXXXXXXXXXXXXXXX +Ordernummer : 123-123 Rechnungsnummer : XXXXXXXXXXXXXXXX Geschäftstag : 25.08.2020 Ausführungsplatz : XETRA Handelszeit : 14:34 Uhr (MEZ/MESZ) (Kommissionsgeschäft) diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Verkauf09.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/VerkaufMitSteuerbehandlung06.txt similarity index 99% rename from name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Verkauf09.txt rename to name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/VerkaufMitSteuerbehandlung06.txt index 1206935cd5..290a7bbda4 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Verkauf09.txt +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/VerkaufMitSteuerbehandlung06.txt @@ -29,7 +29,7 @@ GESCHÄFTSABRECHNUNG VOM 25.08.2020 * Wertpapierverkauf Geschäftsnummer : XX XXXXXX -Ordernummer : XXXXXXXXXXXX-XXX Rechnungsnummer : XXXXXXXXXXXXXXXX +Ordernummer : 123-123 Rechnungsnummer : XXXXXXXXXXXXXXXX Geschäftstag : 25.08.2020 Ausführungsplatz : XETRA Handelszeit : 14:34 Uhr (MEZ/MESZ) (Kommissionsgeschäft) diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Verkauf05.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/VerkaufMitSteuerbehandlung07.txt similarity index 100% rename from name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Verkauf05.txt rename to name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/VerkaufMitSteuerbehandlung07.txt diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Verkauf06.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/VerkaufMitSteuerbehandlung08.txt similarity index 53% rename from name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Verkauf06.txt rename to name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/VerkaufMitSteuerbehandlung08.txt index 1bd7943e73..ecfc34ce03 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Verkauf06.txt +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/VerkaufMitSteuerbehandlung08.txt @@ -1,68 +1,75 @@ -PDF Autor: 'HAVI Solutions GmbH & Co. KG, phg' PDFBox Version: 1.8.16 ----------------------------------------- -Ihren Auftrag haben wir gemäß unseren Sonderbe- -dingungen für Wertpapiergeschäfte wie nachstehend -ausgeführt. -Die Wertpapiere haben wir der Abrechnung entspre- -25449 Quickborn chend gebucht.Wir bitten Sie, diese Abrechnung auf ihre Richtigkeit und -Telefon 01803-33 63 66 Vollständigkeit zu überprüfen und etwaige Einwendungen: unverzüglich zu erheben. - - - +Ihren Auftrag haben wir gemäß unseren produktbezogenen +Geschäftsbedingungen "Trading" wie nachstehend ausgeführt. +Die Wertpapiere haben wir der Abrechnung entsprechend gebucht. +Wir bitten Sie, diese Abrechnung auf ihre Richtigkeit und +Vollständigkeit zu überprüfen und etwaige Einwendungen +25449 Quickborn unverzüglich zu erheben. +Telefon : 04106-708 25 00 + - 11869 010 - -Max Muster Depotnummer: 1234567 00 - -Musterstr. 1 + XXXXX XXX +Depotnr.: XXXXXXX XX + BLZ: XXX XXX XX +Max Mustermann -99999 Musterstadt + +Musterstraße 1 +XXXXX Musterstadt -ABRECHNUNG VOM 11.06.2008 +GESCHÄFTSABRECHNUNG VOM 25.08.2020 + +* Wertpapierverkauf -Geschäftsnummer : 12 123456 - 1234567890-123 Rechnungsnummer : 1234567891234567 -Geschäftstag : 11.06.2008 Ausführungsplatz : STUTTGART -Handelszeit : 18:54 Uhr (MEZ/MESZ) +Geschäftsnummer : XX XXXXXX +Ordernummer : 123-123 Rechnungsnummer : XXXXXXXXXXXXXXXX +Geschäftstag : 25.08.2020 Ausführungsplatz : XETRA +Handelszeit : 14:34 Uhr (MEZ/MESZ) (Kommissionsgeschäft) -Wertpapier-Bezeichnung WPKNR/ISIN -HSBC Trinkaus & Burkhardt AG TB1AF6 -Call 14.01.11 Juniper 30 DE000TB1AF62 +Wertpapier-Bezeichnung WPKNR/ISIN +Wirecard AG 747206 +Inhaber-Aktien o.N. DE0007472060 Nennwert Zum Kurs von -St. 2.000 EUR 0,46 - - Kurswert : EUR 920,00 +St. 3 USD 0,97 + Kurswert : USD 2,90 + + Ausmachender Betrag : USD 7,00- + Umrechn. zum Dev. kurs 1,222500 vom 16.12.2020 : EUR 5,73- -------------------------------------------------------------------------------- Eigene Entgelte - Provision : EUR 9,90- + Provision : USD 9,90- Börsenplatzabhäng. Entgelt : EUR 2,50- - Summe Entgelte : EUR 12,40- --------------------------------------------------------------------------------- -Fremde Kosten - Variable Börsenspesen : EUR 0,75- - Summe Kosten : EUR 0,75- + Summe Entgelte : EUR 10,60- -------------------------------------------------------------------------------- -Verrechnung über Konto Valuta Zu Ihren Gunsten - 123456 00 EUR 13.06.2008 EUR 906,85 +IBAN Valuta Zu Ihren Lasten vor Steuern +XXXX XXXX XXXX XXXX XXXX XX EUR 27.08.2020 EUR 8,23- Verwahrungs-Art: GIROSAMMELDEPOT +GLOBALURKUNDE, KEIN STUECKEAUSDRUCK +Ihre Wertpapier-Order wurde über das Online Banking erteilt. -comdirect bank AG +Informationen zur steuerlichen Behandlung dieses Geschäftsvorgangs und den auf +Ihrem Konto gebuchten Endbetrag finden Sie auf der separaten Steuermitteilung. + +Bei Fragen geben Sie bitte die Ordernummer an. + +comdirect bank AG Diese Abrechnung wird von der Bank nicht unterschrieben -Die Leistung ist gemäß §4 Nr.8 UStG umsatzsteuerfrei. USt-Id-Nr.: DE 812 279 461 -DoComd/01/2001 \ No newline at end of file +Die Leistung ist gemäß §4 Nr.8 UStG umsatzsteuerfrei. USt-Id-Nr.: XX XXX XXX XXX +XXXX +XXXXXX/XX/XX/XXXX \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Verkauf10.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/VerkaufMitSteuerbehandlung09.txt similarity index 100% rename from name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Verkauf10.txt rename to name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/VerkaufMitSteuerbehandlung09.txt diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/VerkaufMitSteuerbehandlung10.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/VerkaufMitSteuerbehandlung10.txt new file mode 100644 index 0000000000..f8c615ed4e --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/VerkaufMitSteuerbehandlung10.txt @@ -0,0 +1,178 @@ +PDFBox Version: 1.8.16 +Portfolio Performance Version: 0.59.0 +----------------------------------------- +Ihren Auftrag haben wir gemäß unseren produktbezogenen +Geschäftsbedingungen "Trading" wie nachstehend ausgeführt. +Die Wertpapiere haben wir der Abrechnung entsprechend gebucht. +Wir bitten Sie, diese Abrechnung auf ihre Richtigkeit und +Vollständigkeit zu überprüfen und etwaige Einwendungen +25449 Quickborn unverzüglich zu erheben. +Telefon : 04106-708 25 00 + + + + + 97861 010 +Depotnr.: 00 + BLZ: 5 + + + + + + + +GESCHÄFTSABRECHNUNG VOM 11.08.2022 + +* +Wertpapierverkauf +Geschäftsnummer : 91 +Ordernummer : 123-001 Rechnungsnummer : 123 +Geschäftstag : 11.08.2022 Ausführungsplatz : TRADEGATE +Handelszeit : 17:27 Uhr (MEZ/MESZ) (Kommissionsgeschäft) + +Wertpapier-Bezeichnung WPKNR/ISIN +LVMH Moët Henn. L. Vuitton SE 853292 +Actions Port. (C.R.) EO 0,3 FR0000121014 + + +Nennwert Zum Kurs von +St. 20 EUR 694,30 + Kurswert : EUR 13.886,00 + +-------------------------------------------------------------------------------- +Eigene Entgelte + Provision : EUR 7,90- + Börsenplatzabhäng. Entgelt : EUR 2,50- + Summe Entgelte : EUR 10,40- +-------------------------------------------------------------------------------- + + +IBAN Valuta Zu Ihren Gunsten vor Steuern +DE95 2004 1155 0610 1000000 EUR 15.08.2022 EUR 13.875,60 + +Verwahrungs-Art: GIROSAMMELDEPOT +Ihre Wertpapier-Order wurde über das Online Banking erteilt. + + + +Informationen zur steuerlichen Behandlung dieses Geschäftsvorgangs und den auf +Ihrem Konto gebuchten Endbetrag finden Sie auf der separaten Steuermitteilung. + + +Bei Fragen geben Sie bitte die Ordernummer an. + +Ihre comdirect + +Diese Abrechnung wird von der Bank nicht unterschrieben +Die Leistung ist gemäß §4 Nr.8 UStG umsatzsteuerfrei. USt-Id-Nr.: DE 114 103 514 +A113 +DO15DD/16/04/2010 +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +Kundennr. /BLZ Bezeichnung + 97616 Bad Neustadt +abweichend wirtschaftlich Berechtigter + + ---- + c o m d i r e c t + + 2 5 4 5 1 Q u i c k b o r n +0 1 0 9 7861 + +T e le f o n : 0 4 1 0 6 - 7 0 8 25 00 + +Herrn D a t u m : 1 1 . 0 8 .2022 + +97 R e f e r e n z - N u mmer: 0O I I J 2 Z G E R600011 6 1 6 B a d N e u s t a dt + + + + +Steuerliche Behandlung: Wertpapierverkauf Nr. vom 11.08.2022 +Stk. 20 LVMH EO 0,3 , WKN / ISIN: 853292 / FR0000121014 +Z u Ih r e n G u n s t e n v o r S te u e r n : E U R 13.875,6 0 + + + + + + + + +S te u e rb e m e ss u n g s g r u n d la g e ( 1 ) E U R 2 . 2 5 0 , 8 2 + + +K ap i ta le r tr a gs t e ue r ( 2 ) E U R - 5 5 1 , 6 7 +S ol id a ri tä t sz u s c hl a g E U R - 3 0 , 3 4 +K irc h e n s te u e r E_ U_ _R _ _ _ _ _ _ _ _ _ _ _ _ _- 4_ _4 ,_ 1_ 3_ + ab g e f ü h rt e S t e u er n _E _U R_ _ _ _ _ _ _ _ __ __ _-_6_2_6_,_1 _4 + + Zu Ih r e n G u n s t e n n a c h S t e u er n : E U R 13.249,4 6 + + + + + +Die Gutschrift erfolgt mit Valuta 15.08.2022 auf Konto EUR mit der IBAN DE9500000000 1335 40 + + + + + + +(1) siehe "Hinweise zur Ermittlung der Steuerbemessungsgrundlage" auf der Folgeseite +(2) Durch die Berücksichtigung der Kirchensteuer (8% bzw. 9%) als Sonderausgabe reduziert sich der Kapitalertragsteuersatz auf 24,51% bzw. 24,45%. +KEINE STEUERBESCHEINIGUNG ... +Bisher einbehaltene bzw. angerechnete Steuer in EUR (4) +in 2022 einbehaltene einbehaltener einbehaltene angerechneteKapitalertragsteuer Solidaritätszuschlag Kirchensteuer ausländische Quellensteuer +vor Ermittlung + 14.375,24 790,22 + 1.149,63 886,67 +nach Ermittlung + 14.926,91 820,56 1.193,76 886,67 +Verrechnungssalden in EUR (4) +2022 Gewinne / Verluste sonstige anrechenbare verfügbarerin aus Aktien Gewinne / Verluste ausländische Quellensteuer Freistellungsauftrag +vor Ermittlung + 43.134,99 19.062,66 0,00 0,00 +nach Ermittlung + 45.385,81 19.062,66 + 0,00 0,00 +Hinweise zur Ermittlung der Steuerbemessungsgrundlage: + +z u Ih r e n G u n s te n v o r S te u e rn E U R 13.875,60 +Anschaffung vom 09.05.2022 7,00 Stück E U R - 3 . 8 51,59 +Anschaffung vom 16.05.2022 8,00 Stück E U R - 4 . 6 51,48 +A n s ch a f f u n g v om 0 6 . 0 6. 2 0 2 2 5 ,0 0 S t üc k _E _U R_ _ _ _ _ _ _ _ _ _ _ -_ 3_ _. _1 _21__,_71_ +Summe der Anschaffungskosten aus Anschaffungsvorgängen nach + ab g e l tu n g s te u e rr e le v a n te m S t ic h ta g _E _U R__ _ __ _ __ _ _ _-_1_1__._6_2_4,__7_8 +S te u e r b e m e s s u n g s g r u n d la g e v o r V er l u s tv e r re c h n u n g E U R 2.250,82 + + + + + + + + + + + + + + + + + + + + + +Ihre comdirect +Diese Abrechnung ist maschinell erstellt und wird nicht unterschrieben. + + + + + +(4) Die ausgewiesenen EUR-Beträge spiegeln den Stand zum Abrechnungszeitpunkt wider. +KEINE STEUERBESCHEINIGUNG \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/VerkaufMitSteuerbehandlung11.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/VerkaufMitSteuerbehandlung11.txt new file mode 100644 index 0000000000..66fe58bfe3 --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/VerkaufMitSteuerbehandlung11.txt @@ -0,0 +1,176 @@ +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.64.1 +----------------------------------------- +Ihren Auftrag haben wir gemäß unseren produktbezogenen +Geschäftsbedingungen "Trading" wie nachstehend ausgeführt. +Die Wertpapiere haben wir der Abrechnung entsprechend gebucht. +Wir bitten Sie, diese Abrechnung auf ihre Richtigkeit und +Vollständigkeit zu überprüfen und etwaige Einwendungen +25449 Quickborn unverzüglich zu erheben. +fon : 04106-708 25 00 Tele + + + + + xxxxx xxx +Depotnr.: xxxxxxx xx + BLZ: xxx xxx xx +xxx xxx + + +xxxxxxxstr. xxx +xxxxx xxxxxxx + + + + + +GESCHÄFTSABRECHNUNG VOM 05.06.2023 + +* +Wertpapierverkauf +Geschäftsnummer : 91 022202 + 156003283640 Rechnungsnummer : 613071635311DDB5 +Geschäftstag : 05.06.2023 Ausführungsplatz : TRADEGATE + (Kommissionsgeschäft) + +Wertpapier-Bezeichnung WPKNR/ISIN +Amazon.com Inc. 906866 +Registered Shares DL -,01 US0231351067 + + +Nennwert Zum Kurs von +St. 0,788 EUR 116,54 + Kurswert : EUR 91,83 + + + +IBAN Valuta Zu Ihren Gunsten vor Steuern +DE36 xxxx xxxx xxxx xxxx 00 EUR 07.06.2023 EUR 91,83 + +Verwahrungs-Art: GIROSAMMELDEPOT + + + +Informationen zur steuerlichen Behandlung dieses Geschäftsvorgangs und den auf +Ihrem Konto gebuchten Endbetrag finden Sie auf der separaten Steuermitteilung. + + +Ihre comdirect + +Diese Abrechnung wird von der Bank nicht unterschrieben +Die Leistung ist gemäß §4 Nr.8 UStG umsatzsteuerfrei. USt-Id-Nr.: DE 114 103 514 +A113 +DO15DD/16/04/2010 +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +Kundennr. /BLZ Bezeichnung +xxxxxxx xxxxxxxxx xxxxxxxxx + + +xxx xxx xx xxxxxxxstr. xx xxxxx xxxxxxxx +abweichend wirtschaftlich Berechtigter + + ---- + c o m d i r e c t + + 2 5 4 5 1 Q u i c k b o r n +0 1 0 9 7859 + + T e le f o n : 0 4 1 0 6 - 7 0 8 25 00 + +Herrn D a t u m : 0 5 . 0 6 .2023 + x x x x x x x x x x x x x x x D e p o t n u m m er: x x x x x x x x x x +x x x x x x x x x s t r . x x +xxxxx xxxxxxx R e f e r e n z - N u mmer: 2 M I J O L 9 G ZJF001IB + + + + +Steuerliche Behandlung: Wertpapierverkauf Nr. 91022202 vom 05.06.2023 +Stk. -0,788 AMAZON.COM INC. DL-,01 , WKN / ISIN: 906866 / US0231351067 + Zu Ih r e n G u n s t e n v o r S te u e r n : E U R 91,8 3 + + + + + + + + +S te u e rb e m e ss u n g s g r u n d la g e ( 1 ) E U R 3 1 , 9 1 + + +K ap i ta le r tr a gs t e ue r E U R - 7 , 9 8 + S ol id a ri tä t sz u s c hl a g E U R - 0 , 4 3 +K irc h e n s te u e r _E _U R_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 0_ _, 0_ 0_ +a b g e f ü h rt e S t e u er n _E _U _R _ _ _ _ _ _ _ _ __ _ __ -_8_,__4 _1 + + Zu Ih r e n G u n s t e n n a c h S t e u er n : E U R 83,4 2 + + + + + +Die Gutschrift erfolgt mit Valuta 07.06.2023 auf Konto EUR mit der IBAN DExx xxxx xxxx xxxx xxxx 00 + + + + + + + +(1) siehe "Hinweise zur Ermittlung der Steuerbemessungsgrundlage" auf der Folgeseite +KEINE STEUERBESCHEINIGUNG ... +Bisher einbehaltene bzw. angerechnete Steuer in EUR (4) +in 2023 einbehaltene einbehaltener einbehaltene angerechneteKapitalertragsteuer Solidaritätszuschlag Kirchensteuer ausländische Quellensteuer +vor Ermittlung + 135,33 7,44 + 0,00 40,26 +nach Ermittlung + 143,31 7,87 0,00 40,26 +Verrechnungssalden in EUR (4) +2023 Gewinne / Verluste sonstige anrechenbare verfügbarerin aus Aktien Gewinne / Verluste ausländische Quellensteuer Freistellungsauftrag +vor Ermittlung + 1.621,22 1.058,16 0,00 0,00 +nach Ermittlung + 1.653,13 1.058,16 + 0,00 0,00 +Hinweise zur Ermittlung der Steuerbemessungsgrundlage: + +z u Ih r e n G u n s te n v o r S te u e rn E U R 91,83 +Anschaffung vom 02.07.2018 0,32 Stück E U R - 23,67 + A n s c ha f fu n g v o m 0 1. 0 8. 2 0 1 8 0 ,4 6 S tü c k E_ _U R_ _ _ _ _ _ _ _ _ _ _ _ _ _ -_ 3__6,__2_5 +Summe der Anschaffungskosten aus Anschaffungsvorgängen nach + ab g e l tu n g s te u e rr e le v a n te m S t ic h ta g E_ U_ R_ __ _ __ _ _ _ _ _ _ __ _ -_5_9_,_9__2 +S te u e r b e m e s s u n g s g r u n d la g e v o r V er l u s tv e r re c h n u n g E U R 31,91 + + + + + + + + + + + + + + + + + + + + + + +Ihre comdirect +Diese Abrechnung ist maschinell erstellt und wird nicht unterschrieben. + + + + + +(4) Die ausgewiesenen EUR-Beträge spiegeln den Stand zum Abrechnungszeitpunkt wider. +KEINE STEUERBESCHEINIGUNG \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/VerkaufMitSteuerbehandlung12.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/VerkaufMitSteuerbehandlung12.txt new file mode 100644 index 0000000000..b08a3c67d5 --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/VerkaufMitSteuerbehandlung12.txt @@ -0,0 +1,179 @@ +``` +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.65.2.qualifier +----------------------------------------- +Ihren Auftrag haben wir gemäß unseren produktbezogenen +Geschäftsbedingungen "Trading" wie nachstehend ausgeführt. +Die Wertpapiere haben wir der Abrechnung entsprechend gebucht. +Wir bitten Sie, diese Abrechnung auf ihre Richtigkeit und +Vollständigkeit zu überprüfen und etwaige Einwendungen +25449 Quickborn unverzüglich zu erheben. +fon : 04106-708 52 00 Tele + + + + + 73490 161 +Depotnr.: 1083026 16 + BLZ: 200 279 55 +mbIwCToUrb OXaBnfddwP + + +Musterstr. 108 +34279 aIIcFBI + + + + + +GESCHÄFTSABRECHNUNG VOM 12.07.2021 + +* +Wertpapierverkauf +Geschäftsnummer : 77 450495 + 117113463595 Rechnungsnummer : 900515157905fwH2 +Geschäftstag : 12.07.2021 Ausführungsplatz : TRADEGATE + (Kommissionsgeschäft) + +Wertpapier-Bezeichnung WPKNR/ISIN +Bayer AG BAY001 +Namens-Aktien o.N. DE000BAY0017 + + +Nennwert Zum Kurs von +St. 0,329 EUR 50,28 + Kurswert : EUR 16,54 + + + +IBAN Valuta Zu Ihren Gunsten vor Steuern +DE36 3696 7817 6285 9982 52 EUR 14.07.2021 EUR 16,54 + +Verwahrungs-Art: GIROSAMMELDEPOT + + + +Informationen zur steuerlichen Behandlung dieses Geschäftsvorgangs und den auf +Ihrem Konto gebuchten Endbetrag finden Sie auf der separaten Steuermitteilung. + + +Ihre comdirect + +Diese Abrechnung wird von der Bank nicht unterschrieben +Die Leistung ist gemäß §4 Nr.8 UStG umsatzsteuerfrei. USt-Id-Nr.: DE 770 033 007 +r846 +DO15DD/16/04/2010 +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +Kundennr. /BLZ Bezeichnung +8332361 ckFrerxPUJ nAoQIWlCTN + + +200 066 55 Musterstr. 698 37134 BooeWHH +abweichend wirtschaftlich Berechtigter + + ---- + c o m d i r e c t + + 2 5 4 5 1 Q u i c k b o r n +0 1 0 9 7859 + + T e le f o n : 0 4 1 0 6 - 7 0 8 25 00 + +Herrn D a t u m : 1 2 . 0 7 .2021 + M u s t e r r rr r M u s t e r uber D e p o t n u m m er: 1 1 1 1 1 1 1 11 +M u s t er r r r s t r . 6 9 8 +75622 xQYjYlh R e f e r e n z - N u mmer: 0 Q I H 7 5 Q 7 7DT000PI + + + + +Steuerliche Behandlung: Wertpapierverkauf Nr. 91024345 vom 12.07.2021 +Stk. -0,329 BAYER AG NA O.N. , WKN / ISIN: BAY001 / DE000BAY0017 + Zu Ih r e n G u n s t e n v o r S te u e r n : E U R 16,5 4 + + + + + + + + +S te u e rb e m e ss u n g s g r u n d la g e E U R - 8 , 1 3 + + +K ap i ta le r tr a gs t e ue r ( 8 ) E U R 2 , 0 3 +S ol id a ri tä t sz u s c hl a g E U R 0 , 1 1 +K irc h e n s te u e r _E U_ R_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 0_ ,_ 0_ 0_ + er s ta t te t e S t e ue r n _E U_ _R _ _ _ _ _ _ _ _ _ _ __ _ __2,__1 _4 + + Zu Ih r e n G u n s t e n n a c h S t e u er n : E U R 18,6 8 + + + + + +Die Gutschrift erfolgt mit Valuta 14.07.2021 auf Konto EUR mit der IBAN DE36 9657 4869 6881 7611 87 + + + + + + + +(8) Aufgrund des mit diesem Geschäft realisierten Verlustes erstatten wir Ihnen bereits abgeführte Steuern. +KEINE STEUERBESCHEINIGUNG ... +Bisher einbehaltene bzw. angerechnete Steuer in EUR (4) +in 2021 einbehaltene einbehaltener einbehaltene angerechneteKapitalertragsteuer Solidaritätszuschlag Kirchensteuer ausländische Quellensteuer +vor Ermittlung + 340,71 18,73 + 0,00 64,76 +nach Ermittlung + 338,68 18,62 0,00 64,76 +Verrechnungssalden in EUR (4) +2021 Gewinne / Verluste sonstige anrechenbare verfügbarerin aus Aktien Gewinne / Verluste ausländische Quellensteuer Freistellungsauftrag +vor Ermittlung + 1.692,09 730,78 0,00 0,00 +nach Ermittlung + 1.683,96 730,78 + 0,00 0,00 +Hinweise zur Ermittlung der Steuerbemessungsgrundlage: + +z u Ih r e n G u n s te n v o r S te u e rn E U R 16,54 + An sc ha f f un g v o m 0 7 . 09 . 20 18 0 , 32 S t ü c k E_ U_ _R _ _ _ _ _ _ _ _ _ _ _ _ _ -_ 2__4,__6_7 +Summe der Anschaffungskosten aus Anschaffungsvorgängen nach +a b g e l tu n g s te u e rr e le v a n te m S t ic h ta g E_ _U R__ _ _ _ __ _ __ _ __ __ -_2__4_,_6_7 + S te u e r b e m e s s u n g s g r u n d la g e v o r V er l u s tv e r re c h n u n g E U R -8,13 + + + + + + + + + + + + + + + + + + + + + + + +Ihre comdirect +Diese Abrechnung ist maschinell erstellt und wird nicht unterschrieben. + + + + + +(4) Die ausgewiesenen EUR-Beträge spiegeln den Stand zum Abrechnungszeitpunkt wider. +KEINE STEUERBESCHEINIGUNG + +``` \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/VerkaufMitSteuerbehandlung13.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/VerkaufMitSteuerbehandlung13.txt new file mode 100644 index 0000000000..4546fcd5c0 --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/VerkaufMitSteuerbehandlung13.txt @@ -0,0 +1,184 @@ +``` +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.65.2.qualifier +----------------------------------------- +Ihren Auftrag haben wir gemäß unseren produktbezogenen +Geschäftsbedingungen "Trading" wie nachstehend ausgeführt. +Die Wertpapiere haben wir der Abrechnung entsprechend gebucht. +Wir bitten Sie, diese Abrechnung auf ihre Richtigkeit und +Vollständigkeit zu überprüfen und etwaige Einwendungen +25449 Quickborn unverzüglich zu erheben. +fon : 04106-087 25 00 Tele + + + + + 08820 010 +Depotnr.: 8565315 52 + BLZ: 200 535 11 +vmYZAP hPBo + + +Musterstr. 99 +24492 jRWWDeqOQZ + + + + + +GESCHÄFTSABRECHNUNG VOM 15.05.2013 +* Wertpapierverkauf +Geschäftsnummer : 55 549680 + 071132136214-001 Rechnungsnummer : 295713531330DE85 +Geschäftstag : 15.05.2013 Ausführungsplatz : XETRA +Handelszeit : 12:34 Uhr (MEZ/MESZ) (Kommissionsgeschäft) + +Wertpapier-Bezeichnung WPKNR/ISIN +Google Inc. A0B7FY +Reg. Shares Class A DL -,001 US38259P5089 + + +Nennwert Zum Kurs von +St. 2 EUR 689,00 + Kurswert : EUR 1.378,00 + +-------------------------------------------------------------------------------- +Eigene Entgelte + Provision : EUR 9,90- + Börsenplatzabhäng. Entgelt : EUR 1,50- + Summe Entgelte : EUR 11,40- +-------------------------------------------------------------------------------- + + +Verrechnung über Konto BLZ Valuta Zu Ihren Gunsten vor Steuern + 0729715 02 EUR 200 411 11 17.05.2013 EUR 1.366,60 + +Verwahrungs-Art: GIROSAMMELDEPOT + + + +Informationen zur steuerlichen Behandlung dieses Geschäftsvorgangs und den auf +Ihrem Konto gebuchten Endbetrag finden Sie auf der separaten Steuermitteilung. + + +comdirect bank AG + +Diese Abrechnung wird von der Bank nicht unterschrieben +Die Leistung ist gemäß §4 Nr.8 UStG umsatzsteuerfrei. USt-Id-Nr.: DE 317 605 927 +A113 +DO15DD/16/04/2010 + +Kundennr. /BLZ Bezeichnung +1085362 jfGGkZ cLaw + + +200 557 11 Musterstr. 71 36588 EFwkzyrvUZ +abweichend wirtschaftlich Berechtigter + + ---- + c o m d i r e c t b a n k A G + + 2 5 4 5 1 Q u i c k b o r n + 0 1 0 1 1857 + +T e le f o n : 0 4 1 0 6 - 7 0 8 25 00 + +Herrn D a t u m : 1 5 . 0 5 .2013 +M u s t e r M u s t + D e p o t n u m m er: 1 1 1 1 1 1 1 11 + M u s t e r r s t r . 7 1 +95641 gWstYmMlrx R e f e r e n z - N u mmer: 0 I I 6 V S S 4 2 T00003Y + + + + +Steuerliche Behandlung: Wertpapierverkauf Nr. 91006642 vom 15.05.2013 +Stk. 2 GOOGLE INC. A DL-,001 , WKN / ISIN: A0B7FY / US38259P5089 + Zu Ih r e n G u n s t e n v o r S te u e r n : E U R 1.366,6 0 + + + S te u e rb e m e ss u n g s g r u n d la g e v o r V e r lu s tv e r re c h n u n g ( 1 ) E U R 3 0 4 , 4 0 + + + + in A n s p ru c h g e n o m m e n e r F r ei s te ll un g s a u ft ra g E U R 3 0 4 , 4 0 + +S te u e rb e m e ss u n g s g r u n d la g e n a c h V e r lu s t ve r r ec h n u n g E U R 0 , 0 0 + + + K ap i ta le r tr a gs t e ue r E U R 0 , 0 0 + S ol id a ri tä t sz u s c hl a g E U R 0 , 0 0 + K irc h e n s te u e r _E U_ _R _ _ _ _ _ _ _ _ _ _ _ _ _ _ 0_ _, 0_ 0_ + ab g e f ü h rt e S t e u er n _E _U R_ _ _ _ _ _ _ _ _ _ _ __ _ _0__,0_ _0 + +Z u Ih r e n G u n s t e n n a c h S t e u er n : E U R 1.366,6 0 + + + + + +Die Gutschrift erfolgt mit Valuta 17.05.2013 auf Konto EUR 94 19482 65 Bankleitzahl : 694 478 11 + + + + + + + +(1) siehe "Hinweise zur Ermittlung der Steuerbemessungsgrundlage" auf der Folgeseite +KEINE STEUERBESCHEINIGUNG ... +Bisher einbehaltene bzw. angerechnete Steuer in EUR (4) +in 2013 einbehaltene einbehaltener einbehaltene angerechneteKapitalertragsteuer Solidaritätszuschlag Kirchensteuer ausländische Quellensteuer +vor Ermittlung + 0,00 0,00 + 0,00 0,00 +nach Ermittlung + 0,00 0,00 0,00 0,00 +Verrechnungssalden in EUR (4) +2013 Gewinne / Verluste sonstige anrechenbare verfügbarerin aus Aktien Gewinne / Verluste ausländische Quellensteuer Freistellungsauftrag +vor Ermittlung + 198,46 34,84 -1,53 567,70 +nach Ermittlung + 502,86 34,84 + -1,53 263,30 +Hinweise zur Ermittlung der Steuerbemessungsgrundlage: + +z u Ih r e n G u n s te n v o r S te u e rn E U R 1.366,60 + An s ch af f un g v om 2 2 . 1 0 . 2 0 1 2 2 , 0 0 S t üc k E_ _U R_ _ _ _ _ _ _ _ _ _ _ -_ 1_ ._ 0_ _6_2_,2_0_ +Summe der Anschaffungskosten aus Anschaffungsvorgängen nach + ab g e l tu n g s te u e rr e le v a n te m S t ic h ta g _E _U R__ _ __ _ _ _ _ __ _ _-_1.__0_62__,_20_ +S te u e r b e m e s s u n g s g r u n d la g e v o r V er l u s tv e r re c h n u n g E U R 304,40 + + + + + + + + + + + + + + + + + + + + + + + +comdirect bank AG +Diese Abrechnung ist maschinell erstellt und wird nicht unterschrieben. + + + + + +(4) Die ausgewiesenen EUR-Beträge spiegeln den Stand zum Abrechnungszeitpunkt wider. +KEINE STEUERBESCHEINIGUNG + +``` \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuermitteilungDividende14.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/VerkaufSteuerbehandlung01.txt similarity index 77% rename from name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuermitteilungDividende14.txt rename to name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/VerkaufSteuerbehandlung01.txt index e43b1251e8..236a777855 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuermitteilungDividende14.txt +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/VerkaufSteuerbehandlung01.txt @@ -1,56 +1,58 @@ -PDF Author: 'HAVI Solutions GmbH & Co. KG, phg' -PDFBox Version: 1.8.16 +``` +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.65.2.qualifier ----------------------------------------- -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + Kundennr. /BLZ Bezeichnung -7430598 Sumit Kumar +9767871 HsaAdP krqx -200 411 44 Maisnatstr. 30 20269 Hamburg +200 181 11 Musterstr. 71 64388 nbxCUpXJPT abweichend wirtschaftlich Berechtigter ---- -c o m d i r e c t b a n k A G + c o m d i r e c t b a n k A G 2 5 4 5 1 Q u i c k b o r n - 0 1 0 9 7774 + 0 1 0 1 1857 - T e le f o n : 0 4 1 0 6 - 7 0 8 25 00 +T e le f o n : 0 4 1 0 6 - 7 0 8 25 00 -Herrn D a t u m : 2 7 . 1 2 .2019 -S u m i t K u m a r D e p o t n u m m er: 1 1 1 1 1 1 1 00 - M a i s n a t s t r . 3 0 -2 0 2 69 Ham R e f e r e n z - N u mmer: 0 1 I E Y 7 R G NJ1111ED b u r g +Herrn D a t u m : 1 5 . 0 7 .2015 +M u s t e r M u s t + D e p o t n u m m er: 1 1 1 1 1 1 1 11 + M u s t e r r s t r . 7 1 +47820 hnkcehzmIK R e f e r e n z - N u mmer: 2 I I 9 J Q M 4 A EI0004E -Steuerliche Behandlung: Ausländische Investment-Ausschüttung vom 27.12.2019 -Stk. 15,558 IS EUR.PROP.YI.U.ETF EOD , WKN / ISIN: A0HGV5 / IE00B0M63284 -Z u Ih r e n G u n s t e n v o r S te u e r n : E U R 0,9 9 - - - S te u e rb e m e ss u n g s g r u n d la g e v o r V e r lu s tv e r re c h n u n g ( 1 ) E U R 0 , 9 9 +Steuerliche Behandlung: Wertpapierverkauf Nr. 2II9JQM4AEI0004E vom 05.05.2015 +Stk. -0,049 GOOGLE INC.C DL-,001 , WKN / ISIN: A110NH / US38259P7069 + Zu Ih r e n G u n s t e n v o r S te u e r n : E U R 23,6 2 +S te u e rb e m e ss u n g s g r u n d la g e v o r V e r lu s tv e r re c h n u n g ( 1 ) E U R 2 , 9 5 - in A n s p ru c h g e n o m m e n e r F r ei s te ll un g s a u ft ra g E U R 0 , 9 9 + + + in A n s p ru c h g e n o m m e n e r F r ei s te ll un g s a u ft ra g E U R 2 , 9 5 S te u e rb e m e ss u n g s g r u n d la g e n a c h V e r lu s t ve r r ec h n u n g E U R 0 , 0 0 - K ap i ta le r tr a gs t e ue r E U R 0 , 0 0 +K ap i ta le r tr a gs t e ue r E U R 0 , 0 0 S ol id a ri tä t sz u s c hl a g E U R 0 , 0 0 -K irc h e n s te u e r E_ _U _R _ _ _ _ _ _ _ _ _ _ _ _ _ _ 0_ _, 0_ _0 -a b g e f ü h rt e S t e u er n E_ U_ R_ _ _ _ _ _ _ _ _ _ _ _ _ __ 0_,_0_ _1 + K irc h e n s te u e r _E U_ R_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _0 ,_ _0 0_ + ab g e f ü h rt e S t e u er n E_ _U R_ _ _ _ _ _ _ _ _ _ _ _ _ _ _0__,_0 0_ - Zu Ih r e n G u n s t e n n a c h S t e u er n : E U R 0,9 8 +Z u Ih r e n G u n s t e n n a c h S t e u er n : E U R 23,6 2 -Die Gutschrift erfolgt mit Valuta 27.12.2019 auf Konto EUR mit der IBAN DE55 2004 2244 0753 0598 40 +Die Gutschrift erfolgt mit Valuta 01.06.2015 auf Konto EUR mit der IBAN DE15 4559 1023 3180 3241 27 @@ -61,26 +63,26 @@ Die Gutschrift erfolgt mit Valuta 27.12.2019 auf Konto EUR mit der IBAN DE55 200 (1) siehe "Hinweise zur Ermittlung der Steuerbemessungsgrundlage" auf der Folgeseite KEINE STEUERBESCHEINIGUNG ... Bisher einbehaltene bzw. angerechnete Steuer in EUR (4) -in 2019 einbehaltene einbehaltener einbehaltene angerechneteKapitalertragsteuer Solidaritätszuschlag Kirchensteuer ausländische Quellensteuer +in 2015 einbehaltene einbehaltener einbehaltene angerechneteKapitalertragsteuer Solidaritätszuschlag Kirchensteuer ausländische Quellensteuer vor Ermittlung - 138,99 7,61 - 0,00 24,32 + 0,00 0,00 + 0,00 0,00 nach Ermittlung - 138,99 7,61 0,00 24,32 + 0,00 0,00 0,00 0,00 Verrechnungssalden in EUR (4) -2019 Gewinne / Verluste sonstige anrechenbare verfügbarerin aus Aktien Gewinne / Verluste ausländische Quellensteuer Freistellungsauftrag +2015 Gewinne / Verluste sonstige anrechenbare verfügbarerin aus Aktien Gewinne / Verluste ausländische Quellensteuer Freistellungsauftrag vor Ermittlung - 0,00 1.454,17 0,00 801,00 + 0,00 14,16 0,00 786,84 nach Ermittlung - 0,00 1.455,16 - 0,00 800,01 + 2,95 14,16 + 0,00 783,89 Hinweise zur Ermittlung der Steuerbemessungsgrundlage: - In v e st m e n t -A u s s c h ü tt un g E U R 0 , 9 9 -T ei lf re is t e llu n g (0 % ) _E U_ _R _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _0 ,_ 0_ _0 - S te u e r b e m e s s u n g s g r u n d la g e v o r V er l u s tv e r re c h n u n g E U R 0 , 9 9 - - +z u Ih r e n G u n s te n v o r S te u e rn E U R 23,62 + An sc ha f f un g v o m 0 3 . 02 . 20 14 0 , 04 S t ü c k E_ U_ _R _ _ _ _ _ _ _ _ _ _ _ _ _ -_ 2__0,__6_7 +Summe der Anschaffungskosten aus Anschaffungsvorgängen nach +a b g e l tu n g s te u e rr e le v a n te m S t ic h ta g E_ _U R__ _ _ _ __ _ __ _ __ __ -_2__0_,_6_7 + S te u e r b e m e s s u n g s g r u n d la g e v o r V er l u s tv e r re c h n u n g E U R 2,95 @@ -112,4 +114,6 @@ Diese Abrechnung ist maschinell erstellt und wird nicht unterschrieben. (4) Die ausgewiesenen EUR-Beträge spiegeln den Stand zum Abrechnungszeitpunkt wider. -KEINE STEUERBESCHEINIGUNG \ No newline at end of file +KEINE STEUERBESCHEINIGUNG + +``` \ No newline at end of file diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Verwahrentgeld01.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Verwahrentgelt01.txt similarity index 100% rename from name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Verwahrentgeld01.txt rename to name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Verwahrentgelt01.txt diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Verwahrentgeld02.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Verwahrentgelt02.txt similarity index 100% rename from name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Verwahrentgeld02.txt rename to name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Verwahrentgelt02.txt diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Vorabpauschale01.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/VorabpauschaleSteuerbehandlung01.txt similarity index 100% rename from name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/Vorabpauschale01.txt rename to name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/VorabpauschaleSteuerbehandlung01.txt diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuermitteilungDividende05.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/VorabpauschaleSteuerbehandlung02.txt similarity index 71% rename from name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuermitteilungDividende05.txt rename to name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/VorabpauschaleSteuerbehandlung02.txt index 6611299f4f..3c46d850de 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/SteuermitteilungDividende05.txt +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/comdirect/VorabpauschaleSteuerbehandlung02.txt @@ -1,50 +1,57 @@ -PDF Autor: 'HAVI Solutions GmbH & Co. KG, phg' -PDFBox Version: 1.8.16 +``` +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.65.2.qualifier ----------------------------------------- -Kundennr. /BLZ - - - - - c o m d i r e c t - 2 5 4 5 1 Q u i c k b o r n +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +Kundennr. /BLZ Bezeichnung +7932673 Dr. VtjnAk eIZo -T e le f o n : 0 4 1 0 6 - 7 0 8 25 00 + +200 547 11 Musterstr. 31 60916 pclYHjDaEY +abweichend wirtschaftlich Berechtigter - D a t u m : 0 8 . 0 1 .2021 - D e p o t n u m m er: - - R e f e r e n z - N u mmer: + ---- + c o m d i r e c t + +2 5 4 5 1 Q u i c k b o r n + 0 1 0 1 1857 + + T e le f o n : 0 4 1 0 6 - 7 0 8 25 00 + +Herrn D a t u m : 2 5 . 0 1 .2021 +D r . M u s t e r M u s t + D e p o t n u m m er: 1 1 1 1 1 1 1 11 + M u s t e r r r r r r 3 1 +8955 R e f e r e n z - N u mmer: 2E I G W 2 K N YMC00HC8 0 M u s te r r r r r r r -Steuerliche Behandlung: Ausländische Dividende vom 11.01.2021 -Stk. 220 TOTAL S.E. EO 2,50 , WKN / ISIN: 850727 / FR0000120271 - Zu Ih r e n G u n s t e n v o r S te u e r n : E U R 106,7 2 - - - +Steuerliche Behandlung: Vorabpauschale Ausland vom 04.01.2021 +Stk. 2.432,087 XTR.CSI300 SWAP 1C , WKN / ISIN: DBX0M2 / LU0779800910 + Zu Ih r e n G u n s t e n v o r S te u e r n : E U R 9,0 9 + + +S te u e rb e m e ss u n g s g r u n d la g e v o r V e r lu s tv e r re c h n u n g ( 1 ) E U R 9 , 0 9 +i n A n s p ru c h g e n o m m e n e r F r ei s te ll un g s a u ft ra g E U R 9 , 0 9 +S te u e rb e m e ss u n g s g r u n d la g e n a c h V e r lu s t ve r r ec h n u n g E U R 0 , 0 0 -S te u e rb e m e ss u n g s g r u n d la g e E U R 1 4 5 , 2 0 +K ap i ta le r tr a gs t e ue r E U R 0 , 0 0 + S ol id a ri tä t sz u s c hl a g E U R 0 , 0 0 + K irc h e n s te u e r E_ U_ R_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _0 ,_ _0 0_ + ab g e f ü h rt e S t e u er n E_ U_ R_ _ _ _ _ _ _ _ _ __ _ _ _ __0_,_0 0_ - K ap i ta le r tr a gs t e ue r E U R - 1 7 , 7 1 -(angerechnete ausländische Quellensteuer: EUR 18,59 ) -S ol id a ri tä t sz u s c hl a g E U R - 0 , 9 8 -K irc h e n s te u e r _E _U _R _ _ _ _ _ _ _ _ _ _ _ _ _ _ _0 _, 0_ 0_ - ab g e f ü h rt e S t e u er n _E U_ R_ _ _ _ _ _ _ _ _ _ _ _ __-1_8_,__6 9_ +Z u Ih r e n G u n s t e n n a c h S t e u er n : E U R 9,0 9 -Z u Ih r e n G u n s t e n n a c h S t e u er n : E U R 88,0 3 -Die Gutschrift erfolgt mit Valuta 11.01.2021 auf Konto EUR mit der @@ -53,20 +60,27 @@ Die Gutschrift erfolgt mit Valuta 11.01.2021 auf Konto EUR mit der +(1) siehe "Hinweise zur Ermittlung der Steuerbemessungsgrundlage" auf der Folgeseite KEINE STEUERBESCHEINIGUNG ... Bisher einbehaltene bzw. angerechnete Steuer in EUR (4) in 2021 einbehaltene einbehaltener einbehaltene angerechneteKapitalertragsteuer Solidaritätszuschlag Kirchensteuer ausländische Quellensteuer -vor Ermittlung 20,89 1,14 0,00 31,32 -nach Ermittlung 38,60 2,12 0,00 49,91 +vor Ermittlung + 0,00 0,00 + 0,00 0,00 +nach Ermittlung + 0,00 0,00 0,00 0,00 Verrechnungssalden in EUR (4) -in 2021 Gewinne / Verluste sonstige anrechenbare verfügbareraus Aktien Gewinne / Verluste ausländische Quellensteuer Freistellungsauftrag -vor Ermittlung 0,00 208,83 0,00 0,00 -nach Ermittlung 0,00 354,03 0,00 0,00 - - - - +2021 Gewinne / Verluste sonstige anrechenbare verfügbarerin aus Aktien Gewinne / Verluste ausländische Quellensteuer Freistellungsauftrag +vor Ermittlung + -2.394,00 48,34 0,00 1.175,82 +nach Ermittlung + -2.394,00 57,43 + 0,00 1.166,73 +Hinweise zur Ermittlung der Steuerbemessungsgrundlage: + V o ra b p a u s ch a l e E U R 1 3 , 0 0 +T ei lf re is t e llu n g (3 0 % ) E_ U_ _R _ _ _ _ _ _ _ _ _ _ _ _ _ _ -_ _3 _, 9_ _1 +S te u e r b e m e s s u n g s g r u n d la g e v o r V er l u s tv e r re c h n u n g E U R 9 , 0 9 @@ -101,42 +115,52 @@ Diese Abrechnung ist maschinell erstellt und wird nicht unterschrieben. (4) Die ausgewiesenen EUR-Beträge spiegeln den Stand zum Abrechnungszeitpunkt wider. KEINE STEUERBESCHEINIGUNG -Kundennr. /BLZ Bezeichnun +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +Kundennr. /BLZ Bezeichnung +0497382 Dr. AEFark aAMF + + +200 813 11 Musterstr. 02 04928 RkfJCwuNbB +abweichend wirtschaftlich Berechtigter - c o m d i r e c t + ---- + c o m d i r e c t + 2 5 4 5 1 Q u i c k b o r n + 0 1 0 1 1857 -T e le f o n : + T e le f o n : 0 4 1 0 6 - 7 0 8 25 00 - D a t u m : - D e p o t n u m m er: - - +Herrn D a t u m : 2 5 . 0 1 .2021 +D r . M u s t e r M u s t + D e p o t n u m m er: 1 1 1 1 1 1 1 11 + M u s t e r r r r r r 0 2 +8716 R e f e r e n z - N u mmer: 2E I G W 2 K N YMC00HC8 0 M u s te r r r r r r r -Steuerliche Behandlung: Ausländische Dividende vom 11.01.2021 -Stk. 220 TOTAL S.E. EO 2,50 , WKN / ISIN: 850727 / FR0000120271 - Zu Ih r e n G u n s t e n v o r S te u e r n : E U R 145,2 0 -i nk lu s iv e er ha lt en e r Z w is c he n ge w in ne E U R 1 4 5 , 2 0 +Steuerliche Behandlung: Vorabpauschale Ausland vom 04.01.2021 +Stk. 2.432,087 XTR.CSI300 SWAP 1C , WKN / ISIN: DBX0M2 / LU0779800910 + Zu Ih r e n G u n s t e n v o r S te u e r n : E U R 0,0 0 + +S te u e rb e m e ss u n g s g r u n d la g e v o r V e r lu s tv e r re c h n u n g ( 1 ) E U R 9 , 0 9 +i n A n s p ru c h g e n o m m e n e r F r ei s te ll un g s a u ft ra g E U R 9 , 0 9 +S te u e rb e m e ss u n g s g r u n d la g e n a c h V e r lu s t ve r r ec h n u n g E U R 0 , 0 0 -S te u e rb e m e ss u n g s g r u n d la g e E U R 1 4 5 , 2 0 - +K ap i ta le r tr a gs t e ue r E U R 0 , 0 0 + S ol id a ri tä t sz u s c hl a g E U R 0 , 0 0 + K irc h e n s te u e r E_ U_ R_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _0 ,_ _0 0_ + ab g e f ü h rt e S t e u er n E_ U_ R_ _ _ _ _ _ _ _ _ __ _ _ _ __0_,_0 0_ - K ap i ta le r tr a gs t e ue r E U R - 1 7 , 7 1 -(angerechnete ausländische Quellensteuer: EUR 18,59 ) -S ol id a ri tä t sz u s c hl a g E U R - 0 , 9 8 -K irc h e n s te u e r E_ _U R_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 0_ _, 0_ _0 -a b g e f ü h rt e S t e u er n _E U_ R_ _ _ _ _ _ _ _ _ _ _ __ _-_18__,_6 _9 +Z u Ih r e n G u n s t e n n a c h S t e u er n : E U R 0,0 0 - Zu Ih r e n G u n s t e n n a c h S t e u er n : E U R 126,5 1 @@ -149,21 +173,27 @@ a b g e f ü h rt e S t e u er n - +(1) siehe "Hinweise zur Ermittlung der Steuerbemessungsgrundlage" auf der Folgeseite KEINE STEUERBESCHEINIGUNG ... Bisher einbehaltene bzw. angerechnete Steuer in EUR (4) in 2021 einbehaltene einbehaltener einbehaltene angerechneteKapitalertragsteuer Solidaritätszuschlag Kirchensteuer ausländische Quellensteuer -vor Ermittlung 20,89 1,14 0,00 31,32 -nach Ermittlung 38,60 2,12 0,00 49,91 +vor Ermittlung + 0,00 0,00 + 0,00 0,00 +nach Ermittlung + 0,00 0,00 0,00 0,00 Verrechnungssalden in EUR (4) -in 2021 Gewinne / Verluste sonstige anrechenbare verfügbareraus Aktien Gewinne / Verluste ausländische Quellensteuer Freistellungsauftrag -vor Ermittlung 0,00 208,83 0,00 0,00 -nach Ermittlung 0,00 354,03 0,00 0,00 - - - - +2021 Gewinne / Verluste sonstige anrechenbare verfügbarerin aus Aktien Gewinne / Verluste ausländische Quellensteuer Freistellungsauftrag +vor Ermittlung + -2.394,00 48,34 0,00 1.175,82 +nach Ermittlung + -2.394,00 57,43 + 0,00 1.166,73 +Hinweise zur Ermittlung der Steuerbemessungsgrundlage: + V o ra b p a u s ch a l e E U R 1 3 , 0 0 +T ei lf re is t e llu n g (3 0 % ) E_ U_ _R _ _ _ _ _ _ _ _ _ _ _ _ _ _ -_ _3 _, 9_ _1 +S te u e r b e m e s s u n g s g r u n d la g e v o r V er l u s tv e r re c h n u n g E U R 9 , 0 9 @@ -198,3 +228,5 @@ Diese Abrechnung ist maschinell erstellt und wird nicht unterschrieben. (4) Die ausgewiesenen EUR-Beträge spiegeln den Stand zum Abrechnungszeitpunkt wider. KEINE STEUERBESCHEINIGUNG + +``` \ No newline at end of file diff --git a/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/ComdirectPDFExtractor.java b/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/ComdirectPDFExtractor.java index b47d311880..775bf53ba0 100644 --- a/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/ComdirectPDFExtractor.java +++ b/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/ComdirectPDFExtractor.java @@ -1,49 +1,77 @@ package name.abuchen.portfolio.datatransfer.pdf; -import static name.abuchen.portfolio.datatransfer.ExtractorUtils.checkAndSetGrossUnit; -import static name.abuchen.portfolio.datatransfer.ExtractorUtils.checkAndSetTax; +import static name.abuchen.portfolio.util.TextUtil.replaceMultipleBlanks; import static name.abuchen.portfolio.util.TextUtil.stripBlanks; import static name.abuchen.portfolio.util.TextUtil.stripBlanksAndUnderscores; import static name.abuchen.portfolio.util.TextUtil.trim; +import static name.abuchen.portfolio.datatransfer.ExtractorUtils.checkAndSetGrossUnit; + import java.math.BigDecimal; +import java.math.RoundingMode; import java.time.LocalDateTime; +import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.Optional; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; +import java.util.stream.Stream; +import name.abuchen.portfolio.Messages; import name.abuchen.portfolio.datatransfer.ExtrExchangeRate; import name.abuchen.portfolio.datatransfer.ExtractorUtils; import name.abuchen.portfolio.datatransfer.pdf.PDFParser.Block; import name.abuchen.portfolio.datatransfer.pdf.PDFParser.DocumentType; import name.abuchen.portfolio.datatransfer.pdf.PDFParser.Transaction; import name.abuchen.portfolio.model.AccountTransaction; -import name.abuchen.portfolio.model.Annotated; +import name.abuchen.portfolio.model.AttributeType; import name.abuchen.portfolio.model.BuySellEntry; import name.abuchen.portfolio.model.Client; import name.abuchen.portfolio.model.PortfolioTransaction; import name.abuchen.portfolio.model.Security; import name.abuchen.portfolio.model.Transaction.Unit; -import name.abuchen.portfolio.model.Transaction.Unit.Type; import name.abuchen.portfolio.money.Money; import name.abuchen.portfolio.money.Values; +/** + * @formatter:off + * @implNote ComDirect provides two documents for the transaction. + * The security transaction and the taxes treatment. + * Both documents are provided as one PDF or as two PDFs. + * + * The security transaction includes the fees, but not the correct taxes + * and the taxes treatment includes all taxes (including withholding tax), + * but not all fees. + * + * Therefore, we use the documents based on their function and merge both documents, + * if possible, as one transaction. + * + * Always import the securities transaction and the taxes treatment for a correct transaction. + * Due to rounding differences, the correct gross amount is not always shown in the securities transaction. + * + * In postProcessing, we always finally delete the taxes treatment. + * + * @implSpec In the taxes treatment, the transaction date is specified without the time. + * To correctly group the transactions, we store the time between and replace this in postProcessing. + * + * If the gross amount (taxes treatment --> taxes base) + * is greater than the calculated gross amount, we set it and we record the correct final amount (net). + * + * If the gross amount (taxes treatment --> taxes base before loss offset) + * is greater than the calculated gross amount and not negative, we set it and we record the correct final amount (net). + * Likewise, we need this regular expression because there is no taxes base. + * @formatter:on + */ + @SuppressWarnings("nls") public class ComdirectPDFExtractor extends AbstractPDFExtractor { - /** - * Attention: - * For dividend transactions, - * post-processing will be performed once the dividend transaction - * and tax treatment are in two separate documents. - * - * @Override - * public List postProcessing(List items) - */ + private static final String ATTRIBUTE_TO_BE_DELETED = "to_be_deleted"; + private static final String ATTRIBUTE_DATE_TIME = "date_time"; + private static final String ATTRIBUTE_EXCHANGE_RATE = "exchange_rate"; + private static final String ATTRIBUTE_GROSS_TAXES_TREATMENT = "gross_taxes_treatment"; public ComdirectPDFExtractor(Client client) { @@ -54,10 +82,9 @@ public ComdirectPDFExtractor(Client client) addBuySellTransaction(); addSellWithNegativeAmountTransaction(); addDividendeTransaction(); - addTaxTreatmentForDividendeTransaction(); - addAdvanceTaxTransaction(); - addFinancialReport(); addDepositoryFeeTransaction(); + addTaxesTreatmentTransaction(); + addFinancialReport(); } @Override @@ -68,825 +95,1356 @@ public String getLabel() private void addBuySellTransaction() { - DocumentType type = new DocumentType("(Wertpapierkauf|Wertpapierverkauf|Wertpapierbezug|Wertpapierumtausch)"); + DocumentType type = new DocumentType("(Wertpapierkauf" // + + "|Wertpapierverkauf" // + + "|Verkauf .* B.rsenplatz" // + + "|Wertpapierumtausch)"); this.addDocumentTyp(type); Transaction pdfTransaction = new Transaction<>(); - pdfTransaction.subject(() -> { - BuySellEntry entry = new BuySellEntry(); - entry.setType(PortfolioTransaction.Type.BUY); - return entry; - }); - Block firstRelevantLine = new Block("^(\\*[\\s]+)?(Wertpapierkauf|Wertpapierverkauf|Wertpapierbezug|Wertpapierumtausch).*$"); + Block firstRelevantLine = new Block("^(?!Steuerliche Behandlung:).*" // + + "(Wertpapierkauf" // + + "|Wertpapierverkauf" + + "|Wertpapierumtausch" // + + "|Sie folgendes Gesch.ft ausgef.hrt).*$"); type.addBlock(firstRelevantLine); firstRelevantLine.set(pdfTransaction); - pdfTransaction - // Is type --> "Verkauf" change from BUY to SELL - .section("type").optional() - .match("^(\\*[\\s]+)?(?(Wertpapierkauf|Wertpapierverkauf|Wertpapierbezug|Wertpapierumtausch)).*$") - .assign((t, v) -> { - if ("Wertpapierverkauf".equals(v.get("type")) || "Wertpapierumtausch".equals(v.get("type"))) - t.setType(PortfolioTransaction.Type.SELL); - }) - - // Wertpapier-Bezeichnung WPKNR/ISIN - // BASF BASF11 - // Inhaber-Anteile DE000BASF111 - // St. 1,000 EUR 1,000 - // Summe St. 20 EUR 71,00 EUR 1.420,00 - .section("name", "wkn", "nameContinued", "isin", "currency") - .match("^Wertpapier-Bezeichnung .*$") - .match("^(?([\\S]{1,}[\\s]{1})+) [\\s]{3,}(?[\\w]{1,}).*$") - .match("^(?.*) ([\\s]+)?(?[\\w]{12}).*$") - .match("^(([\\s]+)?Summe ([\\s]+)?)?([\\s]+)?St\\. ([\\s]+)?[\\.,\\d]+ ([\\s]+)?(?[\\w]{3}).*$") - .assign((t, v) -> t.setSecurity(getOrCreateSecurity(v))) - - // St. 1,000 EUR 1,000 - .section("shares") - .match("^(([\\s]+)?Summe ([\\s]+)?)?([\\s]+)?St\\. ([\\s]+)?(?[\\.,\\d]+) ([\\s]+)?[\\w]{3}.*$") - .assign((t, v) -> t.setShares(asShares(v.get("shares")))) - - // Handelszeit : 09:04 Uhr (MEZ/MESZ) (Kommissionsgeschäft) - .section("time").optional() - .match("^Handelszeit ([\\s]+)?: ([\\s]+)?(?