Skip to content

Commit

Permalink
Updated Deutsche Bank PDF Importer to set taxes into dividend transac…
Browse files Browse the repository at this point in the history
…tions

Issue: #219
  • Loading branch information
buchen committed May 29, 2016
1 parent b90aad7 commit d2e0313
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,9 @@ String strip(File file) throws IOException
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
assertThat(transaction.getSecurity(), is(security));
assertThat(transaction.getDate(), is(LocalDate.parse("2014-12-15")));
assertThat(transaction.getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, 1495L)));
assertThat(transaction.getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, 14_95L)));
assertThat(transaction.getUnitSum(Unit.Type.TAX), is(Money.of(CurrencyUnit.EUR, 4_52)));
assertThat(transaction.getGrossValue(), is(Money.of(CurrencyUnit.EUR, 19_47)));
assertThat(transaction.getShares(), is(Values.Share.factorize(123)));
}

Expand Down Expand Up @@ -163,7 +165,9 @@ String strip(File file) throws IOException
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
assertThat(transaction.getSecurity(), is(security));
assertThat(transaction.getDate(), is(LocalDate.parse("2014-12-15")));
assertThat(transaction.getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, 6488L)));
assertThat(transaction.getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, 64_88L)));
assertThat(transaction.getUnitSum(Unit.Type.TAX), is(Money.of(CurrencyUnit.EUR, 8_71 + 47 + 13_07)));
assertThat(transaction.getGrossValue(), is(Money.of(CurrencyUnit.EUR, 87_13)));
assertThat(transaction.getShares(), is(Values.Share.factorize(380)));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import name.abuchen.portfolio.model.PortfolioTransaction;
import name.abuchen.portfolio.model.Transaction.Unit;
import name.abuchen.portfolio.money.Money;
import name.abuchen.portfolio.money.MutableMoney;

public class DeutscheBankPDFExctractor extends AbstractPDFExtractor
{
Expand Down Expand Up @@ -186,6 +187,20 @@ private void addDividendTransaction(String nameOfTransaction)
t.setCurrencyCode(asCurrencyCode(v.get("currency")));
})

.section("grossValue", "currency") //
.optional() //
.match("Bruttoertrag (?<grossValue>[\\d.]+,\\d+) (?<currency>\\w{3}+)").assign((t, v) -> {
Money grossValue = Money.of(asCurrencyCode(v.get("currency")),
asAmount(v.get("grossValue")));

// calculating taxes as the difference between gross
// value and transaction amount
Money taxes = MutableMoney.of(t.getCurrencyCode()).add(grossValue)
.subtract(t.getMonetaryAmount()).toMoney();
if (!taxes.isZero())
t.addUnit(new Unit(Unit.Type.TAX, taxes));
})

// will match gross value only if forex data exists
.section("forexSum", "forexCurrency", "grossValue", "currency", "exchangeRate") //
.optional() //
Expand All @@ -203,6 +218,13 @@ private void addDividendTransaction(String nameOfTransaction)
// security actually matches
if (unit.getForex().getCurrencyCode().equals(t.getSecurity().getCurrencyCode()))
t.addUnit(unit);

// calculating taxes as the difference between gross
// value and transaction amount
Money taxes = MutableMoney.of(t.getCurrencyCode()).add(grossValue)
.subtract(t.getMonetaryAmount()).toMoney();
if (!taxes.isZero())
t.addUnit(new Unit(Unit.Type.TAX, taxes));
})

.wrap(t -> new TransactionItem(t)));
Expand Down

0 comments on commit d2e0313

Please sign in to comment.