{- | New common report types, used by the BudgetReport for now, perhaps all reports later. -} module Hledger.Reports.ReportTypes where import Data.Decimal import Hledger.Data type Percentage = Decimal type Change = MixedAmount -- ^ A change in balance during a certain period. type Balance = MixedAmount -- ^ An ending balance as of some date. type Total = MixedAmount -- ^ The sum of 'Change's in a report or a report row. Does not make sense for 'Balance's. type Average = MixedAmount -- ^ The average of 'Change's or 'Balance's in a report or report row. -- | A generic tabular report of some value, where each row corresponds to an account -- and each column is a date period. The column periods are usually consecutive subperiods -- formed by splitting the overall report period by some report interval (daily, weekly, etc.) -- Depending on the value type, this can be a report of balance changes, ending balances, -- budget performance, etc. Successor to MultiBalanceReport. data PeriodicReport a = PeriodicReport ( [DateSpan] -- The subperiods formed by splitting the overall report period by the report interval. -- For ending-balance reports, only the end date is significant. -- Usually displayed as report columns. , [PeriodicReportRow a] -- One row per account in the report. , PeriodicReportRow a -- The grand totals row. The account name in this row is always empty. ) deriving (Show) type PeriodicReportRow a = ( AccountName -- A full account name. , AccountName -- Shortened form of the account name to display in tree mode. Usually the leaf name, possibly with parent accounts prefixed. , Int -- Indent level for displaying this account name in tree mode. 0, 1, 2... , [a] -- The data value for each subperiod. , a -- The total of this row's values. , a -- The average of this row's values. )