hledger-lib-1.41: A library providing the core functionality of hledger
Safe HaskellSafe-Inferred
LanguageHaskell2010

Hledger.Reports.ReportTypes

Description

New common report types, used by the BudgetReport for now, perhaps all reports later.

Synopsis

Documentation

data PeriodicReport a b Source #

A periodic report is a generic tabular report, where each row corresponds to some label (usually an account name) and each column to a date period. The column periods are usually consecutive subperiods formed by splitting the overall report period by some report interval (daily, weekly, etc.). It has:

  1. a list of each column's period (date span)
  2. a list of rows, each containing:
  • an account label
  • the account's depth
  • A list of amounts, one for each column. Depending on the value type, these can represent balance changes, ending balances, budget performance, etc. (for example, see BalanceAccumulation and Hledger.Cli.Commands.Balance).
  • the total of the row's amounts for a periodic report, or zero for cumulative/historical reports (since summing end balances generally doesn't make sense).
  • the average of the row's amounts
  1. the column totals, and the overall grand total (or zero for cumulative/historical reports) and grand average.

Instances

Instances details
Bifunctor PeriodicReport Source # 
Instance details

Defined in Hledger.Reports.ReportTypes

Methods

bimap :: (a -> b) -> (c -> d) -> PeriodicReport a c -> PeriodicReport b d #

first :: (a -> b) -> PeriodicReport a c -> PeriodicReport b c #

second :: (b -> c) -> PeriodicReport a b -> PeriodicReport a c #

Functor (PeriodicReport a) Source # 
Instance details

Defined in Hledger.Reports.ReportTypes

Methods

fmap :: (a0 -> b) -> PeriodicReport a a0 -> PeriodicReport a b #

(<$) :: a0 -> PeriodicReport a b -> PeriodicReport a a0 #

(ToJSON a, ToJSON b) => ToJSON (PeriodicReport a b) Source # 
Instance details

Defined in Hledger.Reports.ReportTypes

Generic (PeriodicReport a b) Source # 
Instance details

Defined in Hledger.Reports.ReportTypes

Associated Types

type Rep (PeriodicReport a b) :: Type -> Type #

Methods

from :: PeriodicReport a b -> Rep (PeriodicReport a b) x #

to :: Rep (PeriodicReport a b) x -> PeriodicReport a b #

(Show a, Show b) => Show (PeriodicReport a b) Source # 
Instance details

Defined in Hledger.Reports.ReportTypes

HasAmounts b => HasAmounts (PeriodicReport a b) Source # 
Instance details

Defined in Hledger.Reports.ReportTypes

HasAmounts b => HasAmounts (Text, PeriodicReport a b, Bool) Source # 
Instance details

Defined in Hledger.Reports.ReportTypes

type Rep (PeriodicReport a b) Source # 
Instance details

Defined in Hledger.Reports.ReportTypes

type Rep (PeriodicReport a b) = D1 ('MetaData "PeriodicReport" "Hledger.Reports.ReportTypes" "hledger-lib-1.41-KmCZ9CfrRKB8FRJeJbvQfv" 'False) (C1 ('MetaCons "PeriodicReport" 'PrefixI 'True) (S1 ('MetaSel ('Just "prDates") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [DateSpan]) :*: (S1 ('MetaSel ('Just "prRows") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [PeriodicReportRow a b]) :*: S1 ('MetaSel ('Just "prTotals") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (PeriodicReportRow () b)))))

data PeriodicReportRow a b Source #

Constructors

PeriodicReportRow 

Fields

Instances

Instances details
Bifunctor PeriodicReportRow Source # 
Instance details

Defined in Hledger.Reports.ReportTypes

Methods

bimap :: (a -> b) -> (c -> d) -> PeriodicReportRow a c -> PeriodicReportRow b d #

first :: (a -> b) -> PeriodicReportRow a c -> PeriodicReportRow b c #

second :: (b -> c) -> PeriodicReportRow a b -> PeriodicReportRow a c #

Functor (PeriodicReportRow a) Source # 
Instance details

Defined in Hledger.Reports.ReportTypes

Methods

fmap :: (a0 -> b) -> PeriodicReportRow a a0 -> PeriodicReportRow a b #

(<$) :: a0 -> PeriodicReportRow a b -> PeriodicReportRow a a0 #

(ToJSON b, ToJSON a) => ToJSON (PeriodicReportRow a b) Source # 
Instance details

Defined in Hledger.Reports.ReportTypes

Semigroup b => Semigroup (PeriodicReportRow a b) Source # 
Instance details

Defined in Hledger.Reports.ReportTypes

Generic (PeriodicReportRow a b) Source # 
Instance details

Defined in Hledger.Reports.ReportTypes

Associated Types

type Rep (PeriodicReportRow a b) :: Type -> Type #

(Show a, Show b) => Show (PeriodicReportRow a b) Source # 
Instance details

Defined in Hledger.Reports.ReportTypes

HasAmounts b => HasAmounts (PeriodicReportRow a b) Source # 
Instance details

Defined in Hledger.Reports.ReportTypes

type Rep (PeriodicReportRow a b) Source # 
Instance details

Defined in Hledger.Reports.ReportTypes

type Rep (PeriodicReportRow a b) = D1 ('MetaData "PeriodicReportRow" "Hledger.Reports.ReportTypes" "hledger-lib-1.41-KmCZ9CfrRKB8FRJeJbvQfv" 'False) (C1 ('MetaCons "PeriodicReportRow" 'PrefixI 'True) ((S1 ('MetaSel ('Just "prrName") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Just "prrAmounts") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [b])) :*: (S1 ('MetaSel ('Just "prrTotal") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 b) :*: S1 ('MetaSel ('Just "prrAverage") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 b))))

type Change Source #

Arguments

 = MixedAmount

A change in balance during a certain period.

type Balance Source #

Arguments

 = MixedAmount

An ending balance as of some date.

type Total Source #

Arguments

 = MixedAmount

The sum of Changes in a report or a report row. Does not make sense for Balances.

type Average Source #

Arguments

 = MixedAmount

The average of Changes or Balances in a report or report row.

periodicReportSpan :: PeriodicReport a b -> DateSpan Source #

Figure out the overall date span of a PeriodicReport

prMapName :: (a -> b) -> PeriodicReport a c -> PeriodicReport b c Source #

Map a function over the row names.

prMapMaybeName :: (a -> Maybe b) -> PeriodicReport a c -> PeriodicReport b c Source #

Map a function over the row names, possibly discarding some.

data CompoundPeriodicReport a b Source #

A compound balance report has:

  • an overall title
  • the period (date span) of each column
  • one or more named, normal-positive multi balance reports, with columns corresponding to the above, and a flag indicating whether they increased or decreased the overall totals
  • a list of overall totals for each column, and their grand total and average

It is used in compound balance report commands like balancesheet, cashflow and incomestatement.

Instances

Instances details
Functor (CompoundPeriodicReport a) Source # 
Instance details

Defined in Hledger.Reports.ReportTypes

(ToJSON b, ToJSON a) => ToJSON (CompoundPeriodicReport a b) Source # 
Instance details

Defined in Hledger.Reports.ReportTypes

Generic (CompoundPeriodicReport a b) Source # 
Instance details

Defined in Hledger.Reports.ReportTypes

Associated Types

type Rep (CompoundPeriodicReport a b) :: Type -> Type #

(Show a, Show b) => Show (CompoundPeriodicReport a b) Source # 
Instance details

Defined in Hledger.Reports.ReportTypes

HasAmounts b => HasAmounts (CompoundPeriodicReport a b) Source # 
Instance details

Defined in Hledger.Reports.ReportTypes

type Rep (CompoundPeriodicReport a b) Source # 
Instance details

Defined in Hledger.Reports.ReportTypes

type Rep (CompoundPeriodicReport a b) = D1 ('MetaData "CompoundPeriodicReport" "Hledger.Reports.ReportTypes" "hledger-lib-1.41-KmCZ9CfrRKB8FRJeJbvQfv" 'False) (C1 ('MetaCons "CompoundPeriodicReport" 'PrefixI 'True) ((S1 ('MetaSel ('Just "cbrTitle") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text) :*: S1 ('MetaSel ('Just "cbrDates") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [DateSpan])) :*: (S1 ('MetaSel ('Just "cbrSubreports") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [(Text, PeriodicReport a b, Bool)]) :*: S1 ('MetaSel ('Just "cbrTotals") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (PeriodicReportRow () b)))))

data CBCSubreportSpec a Source #

Description of one subreport within a compound balance report. Part of a CompoundBalanceCommandSpec, but also used in hledger-lib.

Constructors

CBCSubreportSpec 

Fields

flatDisplayName :: AccountName -> DisplayName Source #

Construct a display name for a list report, where full names are shown unindented.

treeDisplayName :: AccountName -> DisplayName Source #

Construct a display name for a tree report, where leaf names (possibly prefixed by boring parents) are shown indented).

prrFullName :: PeriodicReportRow DisplayName a -> AccountName Source #

Get the full canonical account name from a PeriodicReportRow containing a DisplayName.

prrDisplayName :: PeriodicReportRow DisplayName a -> AccountName Source #

Get the account display name from a PeriodicReportRow containing a DisplayName.

prrIndent :: PeriodicReportRow DisplayName a -> Int Source #

Get the indent level from a PeriodicReportRow containing a DisplayName.

prrAdd :: Semigroup b => PeriodicReportRow a b -> PeriodicReportRow a b -> PeriodicReportRow a b Source #

Add two PeriodicReportRows, preserving the name of the first.