hledger-lib-1.15: Hledger/Reports/ReportTypes.hs
{- |
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.
)