summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES.md9
-rw-r--r--Hledger/Data/Posting.hs23
-rw-r--r--Hledger/Data/Valuation.hs58
-rw-r--r--Hledger/Reports/BalanceReport.hs19
-rw-r--r--Hledger/Reports/EntriesReport.hs29
-rw-r--r--Hledger/Reports/MultiBalanceReport.hs42
-rw-r--r--Hledger/Reports/PostingsReport.hs83
-rw-r--r--hledger-lib.cabal4
-rw-r--r--hledger_csv.52
-rw-r--r--hledger_csv.info64
-rw-r--r--hledger_csv.txt2
-rw-r--r--hledger_journal.52
-rw-r--r--hledger_journal.info220
-rw-r--r--hledger_journal.txt2
-rw-r--r--hledger_timeclock.52
-rw-r--r--hledger_timeclock.info4
-rw-r--r--hledger_timeclock.txt2
-rw-r--r--hledger_timedot.52
-rw-r--r--hledger_timedot.info8
-rw-r--r--hledger_timedot.txt2
20 files changed, 289 insertions, 290 deletions
diff --git a/CHANGES.md b/CHANGES.md
index 23f7154..744fc90 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,7 +1,14 @@
Internal/api/developer-ish changes in the hledger-lib (and hledger) packages.
For user-visible changes, see the hledger package changelog.
-# 16a3c96d
+# 1.15.2 2019-09-05
+
+Changes:
+
+- postingApplyValuation, mixedAmountApplyValuation, amountApplyValuation
+ take an argument, the report end date if one was specified.
+
+# 1.15.1 2019-09-02
- fix failing doctests
diff --git a/Hledger/Data/Posting.hs b/Hledger/Data/Posting.hs
index 91fd7d9..6a2fda3 100644
--- a/Hledger/Data/Posting.hs
+++ b/Hledger/Data/Posting.hs
@@ -331,19 +331,20 @@ aliasReplace (BasicAlias old new) a
| otherwise = a
aliasReplace (RegexAlias re repl) a = T.pack $ regexReplaceCIMemo re repl $ T.unpack a -- XXX
--- Apply a specified valuation to this posting's amount, using the provided
--- price oracle, commodity styles, period-end/current dates, and whether
--- this is for a multiperiod report or not.
-postingApplyValuation :: PriceOracle -> M.Map CommoditySymbol AmountStyle -> Day -> Day -> Bool -> Posting -> ValuationType -> Posting
-postingApplyValuation priceoracle styles periodend today ismultiperiod p v =
+-- | Apply a specified valuation to this posting's amount, using the
+-- provided price oracle, commodity styles, reference dates, and
+-- whether this is for a multiperiod report or not. See
+-- amountApplyValuation.
+postingApplyValuation :: PriceOracle -> M.Map CommoditySymbol AmountStyle -> Day -> Maybe Day -> Day -> Bool -> Posting -> ValuationType -> Posting
+postingApplyValuation priceoracle styles periodlast mreportlast today ismultiperiod p v =
case v of
AtCost Nothing -> postingToCost styles p
- AtCost mc -> postingValueAtDate priceoracle styles mc periodend $ postingToCost styles p
- AtEnd mc -> postingValueAtDate priceoracle styles mc periodend p
- AtNow mc -> postingValueAtDate priceoracle styles mc today p
- AtDefault mc | ismultiperiod -> postingValueAtDate priceoracle styles mc periodend p
- AtDefault mc -> postingValueAtDate priceoracle styles mc today p
- AtDate d mc -> postingValueAtDate priceoracle styles mc d p
+ AtCost mc -> postingValueAtDate priceoracle styles mc periodlast $ postingToCost styles p
+ AtEnd mc -> postingValueAtDate priceoracle styles mc periodlast p
+ AtNow mc -> postingValueAtDate priceoracle styles mc today p
+ AtDefault mc | ismultiperiod -> postingValueAtDate priceoracle styles mc periodlast p
+ AtDefault mc -> postingValueAtDate priceoracle styles mc (fromMaybe today mreportlast) p
+ AtDate d mc -> postingValueAtDate priceoracle styles mc d p
-- | Convert this posting's amount to cost, and apply the appropriate amount styles.
postingToCost :: M.Map CommoditySymbol AmountStyle -> Posting -> Posting
diff --git a/Hledger/Data/Valuation.hs b/Hledger/Data/Valuation.hs
index eaad614..6598d81 100644
--- a/Hledger/Data/Valuation.hs
+++ b/Hledger/Data/Valuation.hs
@@ -97,26 +97,52 @@ data ValuationType =
------------------------------------------------------------------------------
-- Valuation
--- | Apply a specified valuation to this mixed amount, using the provided
--- price oracle, commodity styles, period-end/current dates,
--- and whether this is for a multiperiod report or not.
-mixedAmountApplyValuation :: PriceOracle -> M.Map CommoditySymbol AmountStyle -> Day -> Day -> Bool -> ValuationType -> MixedAmount -> MixedAmount
-mixedAmountApplyValuation priceoracle styles periodend today ismultiperiod v (Mixed as) =
- Mixed $ map (amountApplyValuation priceoracle styles periodend today ismultiperiod v) as
+-- | Apply a specified valuation to this mixed amount, using the
+-- provided price oracle, commodity styles, reference dates, and
+-- whether this is for a multiperiod report or not.
+-- See amountApplyValuation.
+mixedAmountApplyValuation :: PriceOracle -> M.Map CommoditySymbol AmountStyle -> Day -> Maybe Day -> Day -> Bool -> ValuationType -> MixedAmount -> MixedAmount
+mixedAmountApplyValuation priceoracle styles periodlast mreportlast today ismultiperiod v (Mixed as) =
+ Mixed $ map (amountApplyValuation priceoracle styles periodlast mreportlast today ismultiperiod v) as
-- | Apply a specified valuation to this amount, using the provided
--- price oracle, commodity styles, period-end/current dates,
--- and whether this is for a multiperiod report or not.
-amountApplyValuation :: PriceOracle -> M.Map CommoditySymbol AmountStyle -> Day -> Day -> Bool -> ValuationType -> Amount -> Amount
-amountApplyValuation priceoracle styles periodend today ismultiperiod v a =
+-- price oracle, reference dates, and whether this is for a
+-- multiperiod report or not. Also fix up its display style using the
+-- provided commodity styles.
+--
+-- When the valuation requires converting to another commodity, a
+-- valuation (conversion) date is chosen based on the valuation type,
+-- the provided reference dates, and whether this is for a
+-- single-period or multi-period report. It will be one of:
+--
+-- - a fixed date specified by the ValuationType itself
+-- (--value=DATE).
+--
+-- - the provided "period end" date - this is typically the last day
+-- of a subperiod (--value=end with a multi-period report), or of
+-- the specified report period or the journal (--value=end with a
+-- single-period report).
+--
+-- - the provided "report end" date - the last day of the specified
+-- report period, if any (-V/-X with a report end date).
+--
+-- - the provided "today" date - (--value=now, or -V/X with no report
+-- end date).
+--
+-- This is all a bit complicated. See the reference doc at
+-- https://hledger.org/hledger.html#effect-of-value-on-reports
+-- (hledger_options.m4.md "Effect of --value on reports"), and #1083.
+--
+amountApplyValuation :: PriceOracle -> M.Map CommoditySymbol AmountStyle -> Day -> Maybe Day -> Day -> Bool -> ValuationType -> Amount -> Amount
+amountApplyValuation priceoracle styles periodlast mreportlast today ismultiperiod v a =
case v of
AtCost Nothing -> amountToCost styles a
- AtCost mc -> amountValueAtDate priceoracle styles mc periodend $ amountToCost styles a
- AtEnd mc -> amountValueAtDate priceoracle styles mc periodend a
- AtNow mc -> amountValueAtDate priceoracle styles mc today a
- AtDefault mc | ismultiperiod -> amountValueAtDate priceoracle styles mc periodend a
- AtDefault mc -> amountValueAtDate priceoracle styles mc today a
- AtDate d mc -> amountValueAtDate priceoracle styles mc d a
+ AtCost mc -> amountValueAtDate priceoracle styles mc periodlast $ amountToCost styles a
+ AtEnd mc -> amountValueAtDate priceoracle styles mc periodlast a
+ AtNow mc -> amountValueAtDate priceoracle styles mc today a
+ AtDefault mc | ismultiperiod -> amountValueAtDate priceoracle styles mc periodlast a
+ AtDefault mc -> amountValueAtDate priceoracle styles mc (fromMaybe today mreportlast) a
+ AtDate d mc -> amountValueAtDate priceoracle styles mc d a
-- | Find the market value of each component amount in the given
-- commodity, or its default valuation commodity, at the given
diff --git a/Hledger/Reports/BalanceReport.hs b/Hledger/Reports/BalanceReport.hs
index b8f38e6..2b31c42 100644
--- a/Hledger/Reports/BalanceReport.hs
+++ b/Hledger/Reports/BalanceReport.hs
@@ -71,25 +71,24 @@ balanceReport ropts@ReportOpts{..} q j@Journal{..} =
-- dbg1 = const id -- exclude from debug output
dbg1 s = let p = "balanceReport" in Hledger.Utils.dbg1 (p++" "++s) -- add prefix in debug output
- today = fromMaybe (error' "balanceReport: ReportOpts today_ is unset so could not satisfy --value=now") today_
- multiperiod = interval_ /= NoInterval
- styles = journalCommodityStyles j
-
-- Get all the summed accounts & balances, according to the query, as an account tree.
-- If doing cost valuation, amounts will be converted to cost first.
accttree = ledgerRootAccount $ ledgerFromJournal q $ journalSelectingAmountFromOpts ropts j
- -- For other kinds of valuation, convert the summed amounts to value.
- priceoracle = journalPriceOracle j
- valuedaccttree = mapAccounts valueaccount accttree
+ -- For other kinds of valuation, convert the summed amounts to value,
+ -- per hledger_options.m4.md "Effect of --value on reports".
+ valuedaccttree = mapAccounts avalue accttree
where
- valueaccount a@Account{..} = a{aebalance=val aebalance, aibalance=val aibalance}
+ avalue a@Account{..} = a{aebalance=bvalue aebalance, aibalance=bvalue aibalance}
where
- val = maybe id (mixedAmountApplyValuation priceoracle styles periodlastday today multiperiod) value_
+ bvalue = maybe id (mixedAmountApplyValuation (journalPriceOracle j) (journalCommodityStyles j) periodlast mreportlast today multiperiod) value_
where
- periodlastday =
+ periodlast =
fromMaybe (error' "balanceReport: expected a non-empty journal") $ -- XXX shouldn't happen
reportPeriodOrJournalLastDay ropts j
+ mreportlast = reportPeriodLastDay ropts
+ today = fromMaybe (error' "balanceReport: could not pick a valuation date, ReportOpts today_ is unset") today_
+ multiperiod = interval_ /= NoInterval
-- Modify this tree for display - depth limit, boring parents, zeroes - and convert to a list.
displayaccts :: [Account]
diff --git a/Hledger/Reports/EntriesReport.hs b/Hledger/Reports/EntriesReport.hs
index 757e28d..eba7a94 100644
--- a/Hledger/Reports/EntriesReport.hs
+++ b/Hledger/Reports/EntriesReport.hs
@@ -14,11 +14,9 @@ module Hledger.Reports.EntriesReport (
)
where
-import Control.Applicative ((<|>))
import Data.List
import Data.Maybe
import Data.Ord
-import Data.Time.Calendar (Day, addDays)
import Hledger.Data
import Hledger.Query
@@ -35,28 +33,19 @@ type EntriesReportItem = Transaction
-- | Select transactions for an entries report.
entriesReport :: ReportOpts -> Query -> Journal -> EntriesReport
entriesReport ropts@ReportOpts{..} q j@Journal{..} =
- sortBy (comparing datefn) $ filter (q `matchesTransaction`) $ map tvalue jtxns
+ sortBy (comparing getdate) $ filter (q `matchesTransaction`) $ map tvalue jtxns
where
- datefn = transactionDateFn ropts
- styles = journalCommodityStyles j
+ getdate = transactionDateFn ropts
+ -- We may be converting posting amounts to value, per hledger_options.m4.md "Effect of --value on reports".
tvalue t@Transaction{..} = t{tpostings=map pvalue tpostings}
- priceoracle = journalPriceOracle j
- pvalue p = maybe p (postingApplyValuation priceoracle styles end today False p) value_
where
- today = fromMaybe (error' "erValue: ReportOpts today_ is unset so could not satisfy --value=now") today_
- end = fromMaybe (postingDate p) mperiodorjournallastday
+ pvalue p = maybe p
+ (postingApplyValuation (journalPriceOracle j) (journalCommodityStyles j) periodlast mreportlast today False p)
+ value_
where
- mperiodorjournallastday = mperiodlastday <|> journalEndDate False j
- where
- -- The last day of the report period.
- -- Will be Nothing if no report period is specified, or also
- -- if ReportOpts does not have today_ set, since we need that
- -- to get the report period robustly.
- mperiodlastday :: Maybe Day = do
- t <- today_
- let q = queryFromOpts t ropts
- qend <- queryEndDate False q
- return $ addDays (-1) qend
+ periodlast = fromMaybe today $ reportPeriodOrJournalLastDay ropts j
+ mreportlast = reportPeriodLastDay ropts
+ today = fromMaybe (error' "erValue: could not pick a valuation date, ReportOpts today_ is unset") today_ -- should not happen
tests_EntriesReport = tests "EntriesReport" [
tests "entriesReport" [
diff --git a/Hledger/Reports/MultiBalanceReport.hs b/Hledger/Reports/MultiBalanceReport.hs
index 02c79fe..315e75a 100644
--- a/Hledger/Reports/MultiBalanceReport.hs
+++ b/Hledger/Reports/MultiBalanceReport.hs
@@ -245,9 +245,6 @@ multiBalanceReportWith ropts@ReportOpts{..} q j@Journal{..} priceoracle =
-- 6. Build the report rows.
-- One row per account, with account name info, row amounts, row total and row average.
- -- Row amounts are converted to value if that has been requested.
- -- Row total/average are always simply the sum/average of the row amounts.
- multiperiod = interval_ /= NoInterval
rows :: [MultiBalanceReportRow] =
dbg1 "rows" $
[(a, accountLeafName a, accountNameLevel a, valuedrowbals, rowtot, rowavg)
@@ -259,38 +256,25 @@ multiBalanceReportWith ropts@ReportOpts{..} q j@Journal{..} priceoracle =
PeriodChange -> changes
CumulativeChange -> drop 1 $ scanl (+) 0 changes
HistoricalBalance -> drop 1 $ scanl (+) (startingBalanceFor a) changes
- -- The row amounts valued according to --value if needed.
- , let val end = maybe id (mixedAmountApplyValuation priceoracle styles end today multiperiod) value_
- , let valuedrowbals = dbg1 "valuedrowbals" $ [val periodlastday amt | (amt,periodlastday) <- zip rowbals lastdays]
- -- The total and average for the row, and their values.
+ -- We may be converting amounts to value, per hledger_options.m4.md "Effect of --value on reports".
+ , let valuedrowbals = dbg1 "valuedrowbals" $ [avalue periodlastday amt | (amt,periodlastday) <- zip rowbals lastdays]
+ -- The total and average for the row.
+ -- These are always simply the sum/average of the displayed row amounts.
-- Total for a cumulative/historical report is always zero.
, let rowtot = if balancetype_==PeriodChange then sum valuedrowbals else 0
, let rowavg = averageMixedAmounts valuedrowbals
, empty_ || depth == 0 || any (not . isZeroMixedAmount) valuedrowbals
]
where
- -- Some things needed if doing valuation.
- -- Here's the current intended effect of --value on each part of the report:
- -- -H/--historical starting balances:
- -- cost: summed cost of previous postings
- -- end: historical starting balances valued at day before report start
- -- date: historical starting balances valued at date
- -- table cells:
- -- cost: summed costs of postings
- -- end: summed postings, valued at subperiod end
- -- date: summed postings, valued at date
- -- column totals:
- -- cost: summed column amounts
- -- end: summed column amounts
- -- date: summed column amounts
- -- row totals & averages, grand total & average:
- -- cost: summed/averaged row amounts
- -- end: summed/averaged row amounts
- -- date: summed/averaged row amounts
- today = fromMaybe (error' "multiBalanceReport: ReportOpts today_ is unset so could not satisfy --value=now") today_ -- XXX shouldn't error if not needed, eg valuation type is AtDate
- -- Market prices, commodity display styles.
- styles = journalCommodityStyles j
- -- The last day of each column subperiod.
+ avalue periodlast =
+ maybe id (mixedAmountApplyValuation priceoracle styles periodlast mreportlast today multiperiod) value_
+ where
+ -- Some things needed if doing valuation.
+ styles = journalCommodityStyles j
+ mreportlast = reportPeriodLastDay ropts
+ today = fromMaybe (error' "multiBalanceReport: could not pick a valuation date, ReportOpts today_ is unset") today_ -- XXX shouldn't happen
+ multiperiod = interval_ /= NoInterval
+ -- The last day of each column's subperiod.
lastdays =
map ((maybe
(error' "multiBalanceReport: expected all spans to have an end date") -- XXX should not happen
diff --git a/Hledger/Reports/PostingsReport.hs b/Hledger/Reports/PostingsReport.hs
index 7669e1b..4207a29 100644
--- a/Hledger/Reports/PostingsReport.hs
+++ b/Hledger/Reports/PostingsReport.hs
@@ -70,67 +70,60 @@ postingsReport :: ReportOpts -> Query -> Journal -> PostingsReport
postingsReport ropts@ReportOpts{..} q j@Journal{..} =
(totallabel, items)
where
- reportspan = adjustReportDates ropts q j
- whichdate = whichDateFromOpts ropts
- depth = queryDepth q
- styles = journalCommodityStyles j
+ reportspan = adjustReportDates ropts q j
+ whichdate = whichDateFromOpts ropts
+ depth = queryDepth q
+ styles = journalCommodityStyles j
+ priceoracle = journalPriceOracle j
+ multiperiod = interval_ /= NoInterval
+ today = fromMaybe (error' "postingsReport: could not pick a valuation date, ReportOpts today_ is unset") today_
-- postings to be included in the report, and similarly-matched postings before the report start date
(precedingps, reportps) = matchedPostingsBeforeAndDuring ropts q j reportspan
- -- We may be converting amounts to value.
- -- Currently this is done as follows (keep synced with hledger_options.m4.md):
- -- register -M --value
- -- cost: value each posting at cost, then summarise ; value -H starting balance at cost
- -- end: value each summary posting at period end ; value -H starting balance at day before report start
- -- date: value each summary posting at date ; value -H starting balance at date
- -- register --value
- -- cost: value each posting at cost ; value -H starting balance at cost
- -- end: value each posting at report end ; value -H starting balance at day before report start
- -- date: value each posting at date ; value -H starting balance at date
- --
- -- In all cases, the running total/average is calculated from the above numbers.
- -- "Day before report start" is a bit arbitrary.
- today =
- fromMaybe (error' "postingsReport: ReportOpts today_ is unset so could not satisfy --value=now")
- today_
- reportperiodlastday =
- fromMaybe (error' "postingsReport: expected a non-empty journal") $ -- XXX shouldn't happen
- reportPeriodOrJournalLastDay ropts j
- multiperiod = interval_ /= NoInterval
- showempty = empty_ || average_
- priceoracle = journalPriceOracle j
- pvalue p end = maybe p (postingApplyValuation priceoracle styles end today multiperiod p) value_
-
-- Postings, or summary postings with their subperiod's end date, to be displayed.
displayps :: [(Posting, Maybe Day)]
| multiperiod =
let summaryps = summarisePostingsByInterval interval_ whichdate depth showempty reportspan reportps
in [(pvalue p lastday, Just periodend) | (p, periodend) <- summaryps, let lastday = addDays (-1) periodend]
| otherwise =
- [(pvalue p reportperiodlastday, Nothing) | p <- reportps]
-
- -- posting report items ready for display
- items = dbg1 "postingsReport items" $ postingsReportItems displayps (nullposting,Nothing) whichdate depth startbalvalued runningcalc startnum
+ [(pvalue p reportorjournallast, Nothing) | p <- reportps]
+ where
+ showempty = empty_ || average_
+ -- We may be converting posting amounts to value, per hledger_options.m4.md "Effect of --value on reports".
+ pvalue p periodlast = maybe p (postingApplyValuation priceoracle styles periodlast mreportlast today multiperiod p) value_
+ where
+ mreportlast = reportPeriodLastDay ropts
+ reportorjournallast =
+ fromMaybe (error' "postingsReport: expected a non-empty journal") $ -- XXX shouldn't happen
+ reportPeriodOrJournalLastDay ropts j
+
+ -- Posting report items ready for display.
+ items =
+ dbg1 "postingsReport items" $
+ postingsReportItems displayps (nullposting,Nothing) whichdate depth startbal runningcalc startnum
where
+ -- In historical mode we'll need a starting balance, which we
+ -- may be converting to value per hledger_options.m4.md "Effect
+ -- of --value on reports".
+ -- XXX balance report doesn't value starting balance.. should this ?
historical = balancetype_ == HistoricalBalance
- precedingsum = sumPostings precedingps
- precedingavg | null precedingps = 0
- | otherwise = divideMixedAmount (fromIntegral $ length precedingps) precedingsum
- startbal | average_ = if historical then precedingavg else 0
- | otherwise = if historical then precedingsum else 0
- -- For --value=end/now/DATE, convert the initial running total/average to value.
- startbalvalued = val startbal
+ startbal | average_ = if historical then bvalue precedingavg else 0
+ | otherwise = if historical then bvalue precedingsum else 0
where
- val = maybe id (mixedAmountApplyValuation priceoracle styles daybeforereportstart today multiperiod) value_
+ precedingsum = sumPostings precedingps
+ precedingavg | null precedingps = 0
+ | otherwise = divideMixedAmount (fromIntegral $ length precedingps) precedingsum
+ bvalue = maybe id (mixedAmountApplyValuation priceoracle styles daybeforereportstart Nothing today multiperiod) value_
+ -- XXX constrain valuation type to AtDate daybeforereportstart here ?
where
- daybeforereportstart = maybe
- (error' "postingsReport: expected a non-empty journal") -- XXX shouldn't happen
- (addDays (-1))
- $ reportPeriodOrJournalStart ropts j
+ daybeforereportstart =
+ maybe (error' "postingsReport: expected a non-empty journal") -- XXX shouldn't happen
+ (addDays (-1))
+ $ reportPeriodOrJournalStart ropts j
- startnum = if historical then length precedingps + 1 else 1
runningcalc = registerRunningCalculationFn ropts
+ startnum = if historical then length precedingps + 1 else 1
-- | Based on the given report options, return a function that does the appropriate
-- running calculation for the register report, ie a running average or running total.
diff --git a/hledger-lib.cabal b/hledger-lib.cabal
index a1cd08e..40efdda 100644
--- a/hledger-lib.cabal
+++ b/hledger-lib.cabal
@@ -4,10 +4,10 @@ cabal-version: 1.12
--
-- see: https://github.com/sol/hpack
--
--- hash: f27fe6795990dd3740ec4ca8e421ad8faaf22945809a16448fcf4d5ac0174165
+-- hash: 567ed725b211714a0f6db5e17a68d670789c7e603020b42d6b8f18e7af5ceb63
name: hledger-lib
-version: 1.15.1
+version: 1.15.2
synopsis: Core data types, parsers and functionality for the hledger accounting tools
description: This is a reusable library containing hledger's core functionality.
.
diff --git a/hledger_csv.5 b/hledger_csv.5
index 50aa769..1e15ce1 100644
--- a/hledger_csv.5
+++ b/hledger_csv.5
@@ -1,5 +1,5 @@
-.TH "hledger_csv" "5" "August 2019" "hledger 1.15" "hledger User Manuals"
+.TH "hledger_csv" "5" "September 2019" "hledger 1.15.2" "hledger User Manuals"
diff --git a/hledger_csv.info b/hledger_csv.info
index e2f3cb2..1691013 100644
--- a/hledger_csv.info
+++ b/hledger_csv.info
@@ -3,8 +3,8 @@ This is hledger_csv.info, produced by makeinfo version 6.5 from stdin.

File: hledger_csv.info, Node: Top, Next: CSV RULES, Up: (dir)
-hledger_csv(5) hledger 1.15
-***************************
+hledger_csv(5) hledger 1.15.2
+*****************************
hledger can read CSV (comma-separated value) files as if they were
journal files, automatically converting each CSV record into a
@@ -350,35 +350,35 @@ character.

Tag Table:
Node: Top72
-Node: CSV RULES2161
-Ref: #csv-rules2269
-Node: skip2532
-Ref: #skip2626
-Node: date-format2798
-Ref: #date-format2925
-Node: field list3475
-Ref: #field-list3612
-Node: field assignment4342
-Ref: #field-assignment4497
-Node: conditional block5121
-Ref: #conditional-block5275
-Node: include6171
-Ref: #include6301
-Node: newest-first6532
-Ref: #newest-first6646
-Node: CSV TIPS7057
-Ref: #csv-tips7151
-Node: CSV ordering7295
-Ref: #csv-ordering7413
-Node: CSV accounts7594
-Ref: #csv-accounts7732
-Node: CSV amounts7986
-Ref: #csv-amounts8144
-Node: CSV balance assertions/assignments9224
-Ref: #csv-balance-assertionsassignments9442
-Node: Reading multiple CSV files9763
-Ref: #reading-multiple-csv-files9963
-Node: Valid CSV10237
-Ref: #valid-csv10360
+Node: CSV RULES2165
+Ref: #csv-rules2273
+Node: skip2536
+Ref: #skip2630
+Node: date-format2802
+Ref: #date-format2929
+Node: field list3479
+Ref: #field-list3616
+Node: field assignment4346
+Ref: #field-assignment4501
+Node: conditional block5125
+Ref: #conditional-block5279
+Node: include6175
+Ref: #include6305
+Node: newest-first6536
+Ref: #newest-first6650
+Node: CSV TIPS7061
+Ref: #csv-tips7155
+Node: CSV ordering7299
+Ref: #csv-ordering7417
+Node: CSV accounts7598
+Ref: #csv-accounts7736
+Node: CSV amounts7990
+Ref: #csv-amounts8148
+Node: CSV balance assertions/assignments9228
+Ref: #csv-balance-assertionsassignments9446
+Node: Reading multiple CSV files9767
+Ref: #reading-multiple-csv-files9967
+Node: Valid CSV10241
+Ref: #valid-csv10364

End Tag Table
diff --git a/hledger_csv.txt b/hledger_csv.txt
index b82e9d3..60f4cf8 100644
--- a/hledger_csv.txt
+++ b/hledger_csv.txt
@@ -276,4 +276,4 @@ SEE ALSO
-hledger 1.15 August 2019 hledger_csv(5)
+hledger 1.15.2 September 2019 hledger_csv(5)
diff --git a/hledger_journal.5 b/hledger_journal.5
index 7116d16..a4feb2b 100644
--- a/hledger_journal.5
+++ b/hledger_journal.5
@@ -1,6 +1,6 @@
.\"t
-.TH "hledger_journal" "5" "August 2019" "hledger 1.15" "hledger User Manuals"
+.TH "hledger_journal" "5" "September 2019" "hledger 1.15.2" "hledger User Manuals"
diff --git a/hledger_journal.info b/hledger_journal.info
index c4a785c..27388b5 100644
--- a/hledger_journal.info
+++ b/hledger_journal.info
@@ -4,8 +4,8 @@ stdin.

File: hledger_journal.info, Node: Top, Next: FILE FORMAT, Up: (dir)
-hledger_journal(5) hledger 1.15
-*******************************
+hledger_journal(5) hledger 1.15.2
+*********************************
hledger's usual data source is a plain text file containing journal
entries in hledger journal format. This file represents a standard
@@ -1668,113 +1668,113 @@ See the [[Cookbook]] at hledger.org for the latest information.

Tag Table:
Node: Top76
-Node: FILE FORMAT2352
-Ref: #file-format2476
-Node: Transactions2779
-Ref: #transactions2900
-Node: Postings3584
-Ref: #postings3711
-Node: Dates4706
-Ref: #dates4821
-Node: Simple dates4886
-Ref: #simple-dates5012
-Node: Secondary dates5378
-Ref: #secondary-dates5532
-Node: Posting dates7095
-Ref: #posting-dates7224
-Node: Status8596
-Ref: #status8716
-Node: Description10424
-Ref: #description10562
-Node: Payee and note10882
-Ref: #payee-and-note10996
-Node: Account names11331
-Ref: #account-names11474
-Node: Amounts11961
-Ref: #amounts12097
-Node: Virtual Postings15114
-Ref: #virtual-postings15273
-Node: Balance Assertions16493
-Ref: #balance-assertions16668
-Node: Assertions and ordering17627
-Ref: #assertions-and-ordering17813
-Node: Assertions and included files18513
-Ref: #assertions-and-included-files18754
-Node: Assertions and multiple -f options19087
-Ref: #assertions-and-multiple--f-options19341
-Node: Assertions and commodities19473
-Ref: #assertions-and-commodities19703
-Node: Assertions and prices20859
-Ref: #assertions-and-prices21071
-Node: Assertions and subaccounts21511
-Ref: #assertions-and-subaccounts21738
-Node: Assertions and virtual postings22062
-Ref: #assertions-and-virtual-postings22302
-Node: Assertions and precision22444
-Ref: #assertions-and-precision22635
-Node: Balance Assignments22902
-Ref: #balance-assignments23083
-Node: Balance assignments and prices24248
-Ref: #balance-assignments-and-prices24420
-Node: Transaction prices24644
-Ref: #transaction-prices24813
-Node: Comments27079
-Ref: #comments27213
-Node: Tags28383
-Ref: #tags28501
-Node: Directives29894
-Ref: #directives30037
-Node: Comment blocks35645
-Ref: #comment-blocks35790
-Node: Including other files35966
-Ref: #including-other-files36146
-Node: Default year36554
-Ref: #default-year36723
-Node: Declaring commodities37130
-Ref: #declaring-commodities37313
-Node: Default commodity38742
-Ref: #default-commodity38918
-Node: Market prices39552
-Ref: #market-prices39717
-Node: Declaring accounts40558
-Ref: #declaring-accounts40734
-Node: Account comments41659
-Ref: #account-comments41822
-Node: Account subdirectives42217
-Ref: #account-subdirectives42412
-Node: Account types42725
-Ref: #account-types42909
-Node: Account display order44551
-Ref: #account-display-order44721
-Node: Rewriting accounts45850
-Ref: #rewriting-accounts46035
-Node: Basic aliases46771
-Ref: #basic-aliases46917
-Node: Regex aliases47621
-Ref: #regex-aliases47793
-Node: Combining aliases48511
-Ref: #combining-aliases48689
-Node: end aliases49965
-Ref: #end-aliases50113
-Node: Default parent account50214
-Ref: #default-parent-account50380
-Node: Periodic transactions51264
-Ref: #periodic-transactions51462
-Node: Two spaces after the period expression52588
-Ref: #two-spaces-after-the-period-expression52833
-Node: Forecasting with periodic transactions53318
-Ref: #forecasting-with-periodic-transactions53608
-Node: Budgeting with periodic transactions55634
-Ref: #budgeting-with-periodic-transactions55873
-Node: Auto postings / transaction modifiers56332
-Ref: #auto-postings-transaction-modifiers56543
-Node: Auto postings and dates58772
-Ref: #auto-postings-and-dates59029
-Node: Auto postings and transaction balancing / inferred amounts / balance assertions59204
-Ref: #auto-postings-and-transaction-balancing-inferred-amounts-balance-assertions59579
-Node: Auto posting tags59957
-Ref: #auto-posting-tags60196
-Node: EDITOR SUPPORT60861
-Ref: #editor-support60979
+Node: FILE FORMAT2356
+Ref: #file-format2480
+Node: Transactions2783
+Ref: #transactions2904
+Node: Postings3588
+Ref: #postings3715
+Node: Dates4710
+Ref: #dates4825
+Node: Simple dates4890
+Ref: #simple-dates5016
+Node: Secondary dates5382
+Ref: #secondary-dates5536
+Node: Posting dates7099
+Ref: #posting-dates7228
+Node: Status8600
+Ref: #status8720
+Node: Description10428
+Ref: #description10566
+Node: Payee and note10886
+Ref: #payee-and-note11000
+Node: Account names11335
+Ref: #account-names11478
+Node: Amounts11965
+Ref: #amounts12101
+Node: Virtual Postings15118
+Ref: #virtual-postings15277
+Node: Balance Assertions16497
+Ref: #balance-assertions16672
+Node: Assertions and ordering17631
+Ref: #assertions-and-ordering17817
+Node: Assertions and included files18517
+Ref: #assertions-and-included-files18758
+Node: Assertions and multiple -f options19091
+Ref: #assertions-and-multiple--f-options19345
+Node: Assertions and commodities19477
+Ref: #assertions-and-commodities19707
+Node: Assertions and prices20863
+Ref: #assertions-and-prices21075
+Node: Assertions and subaccounts21515
+Ref: #assertions-and-subaccounts21742
+Node: Assertions and virtual postings22066
+Ref: #assertions-and-virtual-postings22306
+Node: Assertions and precision22448
+Ref: #assertions-and-precision22639
+Node: Balance Assignments22906
+Ref: #balance-assignments23087
+Node: Balance assignments and prices24252
+Ref: #balance-assignments-and-prices24424
+Node: Transaction prices24648
+Ref: #transaction-prices24817
+Node: Comments27083
+Ref: #comments27217
+Node: Tags28387
+Ref: #tags28505
+Node: Directives29898
+Ref: #directives30041
+Node: Comment blocks35649
+Ref: #comment-blocks35794
+Node: Including other files35970
+Ref: #including-other-files36150
+Node: Default year36558
+Ref: #default-year36727
+Node: Declaring commodities37134
+Ref: #declaring-commodities37317
+Node: Default commodity38746
+Ref: #default-commodity38922
+Node: Market prices39556
+Ref: #market-prices39721
+Node: Declaring accounts40562
+Ref: #declaring-accounts40738
+Node: Account comments41663
+Ref: #account-comments41826
+Node: Account subdirectives42221
+Ref: #account-subdirectives42416
+Node: Account types42729
+Ref: #account-types42913
+Node: Account display order44555
+Ref: #account-display-order44725
+Node: Rewriting accounts45854
+Ref: #rewriting-accounts46039
+Node: Basic aliases46775
+Ref: #basic-aliases46921
+Node: Regex aliases47625
+Ref: #regex-aliases47797
+Node: Combining aliases48515
+Ref: #combining-aliases48693
+Node: end aliases49969
+Ref: #end-aliases50117
+Node: Default parent account50218
+Ref: #default-parent-account50384
+Node: Periodic transactions51268
+Ref: #periodic-transactions51466
+Node: Two spaces after the period expression52592
+Ref: #two-spaces-after-the-period-expression52837
+Node: Forecasting with periodic transactions53322
+Ref: #forecasting-with-periodic-transactions53612
+Node: Budgeting with periodic transactions55638
+Ref: #budgeting-with-periodic-transactions55877
+Node: Auto postings / transaction modifiers56336
+Ref: #auto-postings-transaction-modifiers56547
+Node: Auto postings and dates58776
+Ref: #auto-postings-and-dates59033
+Node: Auto postings and transaction balancing / inferred amounts / balance assertions59208
+Ref: #auto-postings-and-transaction-balancing-inferred-amounts-balance-assertions59583
+Node: Auto posting tags59961
+Ref: #auto-posting-tags60200
+Node: EDITOR SUPPORT60865
+Ref: #editor-support60983

End Tag Table
diff --git a/hledger_journal.txt b/hledger_journal.txt
index 323cf9b..9bc2118 100644
--- a/hledger_journal.txt
+++ b/hledger_journal.txt
@@ -1362,4 +1362,4 @@ SEE ALSO
-hledger 1.15 August 2019 hledger_journal(5)
+hledger 1.15.2 September 2019 hledger_journal(5)
diff --git a/hledger_timeclock.5 b/hledger_timeclock.5
index 196a757..5dcc2e3 100644
--- a/hledger_timeclock.5
+++ b/hledger_timeclock.5
@@ -1,5 +1,5 @@
-.TH "hledger_timeclock" "5" "August 2019" "hledger 1.15" "hledger User Manuals"
+.TH "hledger_timeclock" "5" "September 2019" "hledger 1.15.2" "hledger User Manuals"
diff --git a/hledger_timeclock.info b/hledger_timeclock.info
index 3e2f4f5..512bc56 100644
--- a/hledger_timeclock.info
+++ b/hledger_timeclock.info
@@ -4,8 +4,8 @@ stdin.

File: hledger_timeclock.info, Node: Top, Up: (dir)
-hledger_timeclock(5) hledger 1.15
-*********************************
+hledger_timeclock(5) hledger 1.15.2
+***********************************
hledger can read timeclock files. As with Ledger, these are (a subset
of) timeclock.el's format, containing clock-in and clock-out entries as
diff --git a/hledger_timeclock.txt b/hledger_timeclock.txt
index 573517b..55d2391 100644
--- a/hledger_timeclock.txt
+++ b/hledger_timeclock.txt
@@ -78,4 +78,4 @@ SEE ALSO
-hledger 1.15 August 2019 hledger_timeclock(5)
+hledger 1.15.2 September 2019 hledger_timeclock(5)
diff --git a/hledger_timedot.5 b/hledger_timedot.5
index 9bf5bc3..d3d2255 100644
--- a/hledger_timedot.5
+++ b/hledger_timedot.5
@@ -1,5 +1,5 @@
-.TH "hledger_timedot" "5" "August 2019" "hledger 1.15" "hledger User Manuals"
+.TH "hledger_timedot" "5" "September 2019" "hledger 1.15.2" "hledger User Manuals"
diff --git a/hledger_timedot.info b/hledger_timedot.info
index a441da2..b9c6361 100644
--- a/hledger_timedot.info
+++ b/hledger_timedot.info
@@ -4,8 +4,8 @@ stdin.

File: hledger_timedot.info, Node: Top, Next: FILE FORMAT, Up: (dir)
-hledger_timedot(5) hledger 1.15
-*******************************
+hledger_timedot(5) hledger 1.15.2
+*********************************
Timedot is a plain text format for logging dated, categorised quantities
(of time, usually), supported by hledger. It is convenient for
@@ -111,7 +111,7 @@ $ hledger -f t.timedot --alias /\\./=: bal date:2016/2/4

Tag Table:
Node: Top76
-Node: FILE FORMAT808
-Ref: #file-format909
+Node: FILE FORMAT812
+Ref: #file-format913

End Tag Table
diff --git a/hledger_timedot.txt b/hledger_timedot.txt
index 2960def..6fd2a5b 100644
--- a/hledger_timedot.txt
+++ b/hledger_timedot.txt
@@ -124,4 +124,4 @@ SEE ALSO
-hledger 1.15 August 2019 hledger_timedot(5)
+hledger 1.15.2 September 2019 hledger_timedot(5)