protected final void process(final AccountTransaction transaction, final InflowOutflow inflowOutflow) {
boolean income = transaction.getSubcategory().isIncome();
Map<Category, Map<Subcategory, BigDecimal>> data = income ? inflowOutflow.getInflow(transaction.getOperationDate()) : inflowOutflow.getOutflow(transaction.getOperationDate());
Map<Subcategory, BigDecimal> categoryData = getOrCreateCategoryData(transaction, data);
BigDecimal amount = getOrCreateSubcategoryAmount(transaction, categoryData);
amount = amount.abs().add(transaction.getAmount().abs());
categoryData.put(transaction.getSubcategory(), amount);
}
protected final Map<Subcategory, BigDecimal> getOrCreateCategoryData(final AccountTransaction transaction, final Map<Category, Map<Subcategory, BigDecimal>> data) {
Subcategory subcategory = transaction.getSubcategory();