dklrt/dklrt.texi
2013-11-10 13:41:31 +00:00

442 lines
12 KiB
Text
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

\input texinfo @c -*-texinfo-*-
@c %**start of header
@setfilename dklrt.info
@settitle Ledger Recurring Transactions 1.00
@c %**end of header
@syncodeindex fn cp
@syncodeindex ky cp
@syncodeindex pg cp
@syncodeindex vr cp
@c Before release, run C-u C-c C-u C-a
@c (texinfo-all-menus-update with a prefix arg). This
@c updates the node pointers, which texinfmt.el needs.
@copying
This manual is for emacs package dklrt version 1.00.
Copyright @copyright{} 20102013 David Keegan.
May be redistributed under the terms of the Free Software
Foundation GNU Free Documentation Licence.
@end copying
@dircategory Emacs misc features
@direntry
* Ledger Recurring Transactions: (dklrt).
@end direntry
@documentencoding UTF-8
@iftex
@finalout
@end iftex
@macro dkcmditem{key, key2, command}
@item @kbd{\key\}@tie{} (@kbd{\key2\}) (@code{\command\})
@end macro
@macro dkcmd{key, key2, command}
@kbd{\key\}@tie{} (@kbd{\key2\}) (@code{\command\})
@end macro
@macro dkcmdidx{key, key2, command}
@kindex \key\
@kindex \key2\
@findex \command\
@kbd{\key\}@tie{} (@kbd{\key2\}) (@code{\command\})
@end macro
@macro dktag{text}
@samp{\text\}
@end macro
@titlepage
@title Ledger Recurring Transactions 1.00
@author David Keegan
@page
@vskip 0pt plus 1filll
@insertcopying
@end titlepage
@contents
@ifnottex
@node Top
@top Ledger Recurring Transactions
@end ifnottex
@menu
* Introduction::
* Configuration File::
* Operations::
* Index::
@end menu
@node Introduction
@chapter Introduction
An add-on to emacs ledger-mode which appends recurring
transactions to the current ledger file, usually on entry to
ledger-mode. Recurring transactions are configured in a
separate file which conforms to ledger file format and
resides in the same directory as the ledger file.
@menu
* Overview::
* Getting Started::
* Known Issues::
* Changes::
@end menu
@node Overview
@section Overview
@cindex recurring transactions
@cindex transactions, recurring
@pindex ledger
Recurring transactions are accounting transactions that
repeat at regular intervals such as paychecks, standing
orders, and pension contributions. This emacs package
facilitates entry of recurring transactions to a ledger
file, the input file for John Wiegley's ledger program.
@xref{Top,, Overview, ledger3, Ledger: Command-Line
Accounting}.
@findex @code{ledger-mode}
Operating as an add-on to emacs ledger-mode, the package
appends recurring transactions to the current ledger file,
usually on entry to @code{ledger-mode}. @xref{Top,,Overview,
ledger-mode, Ledger Mode}.
@cindex configuration file
Recurring transactions are configured in a separate file
which conforms to ledger file format, and resides in the
same directory as the ledger file. @xref{Configuration File}.
@node Getting Started
@section Getting Started
To append recurring transactions automatically on entry to
@code{ledger-mode}, add this line to your emacs profile:
@lisp
(add-hook 'ledger-mode-hook 'dklrt-AppendRecurringMaybe)
@end lisp
To bind @kbd{\C-cr} to @code{dklrt-AppendRecurringMaybe} while in
@code{ledger-mode} only, add this line to your emacs profile
(optional):
@findex @code{dklrt-SetCcKeys}
@lisp
(add-hook 'ledger-mode-hook 'dklrt-SetCcKeys)
@end lisp
@vindex @code{dklrt-SortAfterAppend}
If you want to have recurring transactions positioned by date in
the ledger file, add this line to your emacs profile (optional):
@lisp
(setq dklrt-SortAfterAppend t)
@end lisp
Note that as this causes the whole ledger buffer to be
sorted after transactions are appended, it potentially
affects the positions of all transactions.
Finally as the recurring transactions configuration file is
a valid ledger file you may wish to edit it in
@code{ledger-mode}. If so add this to your emacs profile
(optional):
@lisp
(add-to-list 'auto-mode-alist '("\\.rec$" . ledger-mode))
@end lisp
@node Known Issues
@section Known Issues
@cindex issues
@cindex limitations
@enumerate
@item
In the recurring transactions configuration file, a
transaction date must be expressed in ISO format, eg
``YYYY-MM-DD'' or ``YYYY/MM/DD''. This format is preserved
when the transaction is appended to the ledger file. It is
compatible with ledger's default date format, and should
work with @code{ledger-mode}.
Problems can be expected if --input-date-format has been
configured with a non-ISO format in the ledger init file
(.ledgerrc) or on the ledger command line.
@item
The handling if repetition intervals specified in the
configuration file with unit @code{m} (month) or @code{y}
(year) is not ideal when their application results in an
invalid calendar day or a potentially invalid day. In these
situations, the configured day is adjusted back to @code{28}
to ensure validity, and remains at @code{28} for all future
recurrences.
For example, a monthly recurring transaction initially
configured as @emph{Jan 31} in the configuration file
produces recurrences in the ledger file of @emph{Jan 31},
@emph{Feb 28}, @emph{Mar 28}, @emph{Apr 28}, and so on.
Ideally day 31 should be preserved in the configuration file
(perhaps in a comment), and the days emitted to the ledger
file should be as close as possible to 31 as the calendar
permits.
Note that the current implementation does ensure that only
valid calendar dates occur in both the configuration and
ledger files.
@vindex @code{dklrt-PythonProgram}
@item
The emacs code depends on some python code which is included
in the package (and requires that python is installed on the
system). The python executable is customisable via variable
@code{dklrt-PythonProgram}.
@end enumerate
@node Changes
@section Changes
Package dklrt was developed mostly between 2011-06-08 and
2011-08-17.
@table @asis
@item Version 1.00 20131104:
Initial release as package.
@end table
@node Configuration File
@chapter Configuration File
@cindex configuration file
@cindex file, configuration
@vindex @code{dklrt-RecurringConfigFileSuffix}
Recurring transactions for a particular ledger file are
configured in a separate file. The configuration file is in
the same directory as the ledger file, and its filename is
the same as that of the ledger file except that the ledger
file suffix is replaced by @file{.rec}. The suffix is
customisable via variable
@code{dklrt-RecurringConfigFileSuffix}.
@menu
* Format::
* Date and Period::
* Restrictions::
@end menu
@node Format
@section Format
The configuration file contains one or more transactions in
ledger file format. For example:
@smallformat
@verbatim
2013-11-10 (1m) Payee Details
; Transaction Note.
Asset:Bank:Current €-10.00 ; [=2013-11-08]
Expense:Phone €10.00 ; Payee: Eircom.
(Asset:OwedBy:Partner) €10.00
; Posting Note2.
2013-12-01 (1w) Payee8
Asset:Bank:Savings €200.00
Expense:SavingPlan
@end verbatim
@end smallformat
Each transaction date is followed by a repetition period
in the position normally occupied by a ledger transaction
code.
A transaction is considered to begin with a transaction date
at the beginning of a line, and includes the remainder of
the line and all subsequent lines up to but excluding the
next transaction date. The transaction date in the
configuration file controls when the transaction becomes due
for appending to the ledger file, and becomes the actual
date of the appended transaction.
@node Date and Period
@section Date and Period
@cindex transaction date
@cindex date, transaction
The transaction date must be in ISO format: ``YYYY-MM-DD''
or ``YYYY/MM/DD''.
@cindex repetition period
@cindex repetition interval
@cindex period, repetition
@cindex interval, repetition
A parenthesised transaction repetition period must follow
the date in the position where a ledger transaction ``code''
would normally occur. It is surrounded by whitespace and is
in the following format:
@verbatim
(<Count><Unit>)
Where:
@end verbatim
@table @code
@item Count
An unsigned decimal integer.
@item Unit
A single character specifying a unit and following
immediately after @code{Count} without intervening space.
The following values are accepted for @code{Unit}:
@table @code
@item d
A fixed interval of @code{Count} days.
@item w
A fixed interval @code{Count} weeks.
@item m
The interval to the same day @code{Count} months later, but
if this results in an invalid calendar day (eg Feb 31), the
day is shifted back until valid (eg to Feb 28).
@item y
The interval to the same day and month @code{Count} years
later, but if this results in an invalid calendar day (eg
Feb29), the day is shifted back until valid (eg to Feb 28).
@end table
@end table
@node Restrictions
@section Restrictions
@cindex restrictions, configuration file
The recurring transactions configuration file must not
contain any of the following ledger constructs:
@enumerate
@item
Stand-alone comment (ie not part of a transaction).
@item
Historical commodity price (starts with ``P'').
@item
Automated transaction (starts with ``='').
@item
Period transaction (starts with ``~'').
@item
Command directive.
@end enumerate
@cindex restrictions, transaction date/payee line
In addition the following restrictions apply to the the
initial (date/payee) line of each transaction:
@enumerate
@item
The transaction date must @emph{not} have an effective/auxiliary
date suffix (of the form ``=YYYY-MM-DD'').
@item
A transaction state/clear flag (immediately after the date)
is @emph{not} permitted.
@end enumerate
@node Operations
@chapter Operations
@findex @code{dklrt-AppendRecurringMaybe}
The main entry point is function
@code{dklrt-AppendRecurringMaybe}. This is normally
configured to run automatically on entry to
@code{ledger-mode}. It can also be bound to a key
(@kbd{\C-cr} is suggested).
@cindex append pre-conditions
@cindex pre-conditions, append
Function @code{dklrt-AppendRecurringMaybe} does nothing
unless all the following conditions are met:
@enumerate
@item
The current buffer is in @code{ledger-mode}.
@item
The current buffer is unmodified.
@item
The ledger file associated with the current buffer exists.
@item
The current file is @emph{not} a recurring transaction
configuration file (ie does not have suffix @file{.rec}).
@item
A recurring transaction configuration file exists for the
current ledger file (same directory and basename, but with
suffix @file{.rec}).
@end enumerate
If all the conditions are met, recurring transactions are
read from the configuration file and their dates are
compared with the current date to determine if they are
``due''.
@cindex append due time
@cindex due time, append
@vindex @code{dklrt-AppendBefore}
By default, a recurring transaction becomes due up to one
day before its transaction date. This is customisable via
variable @code{dklrt-AppendBefore}.
@cindex appended transaction
@cindex transaction, appended
If a transaction is considered ``due'', it is appended to
the ledger file. The append includes the full transaction
text as it appears in the configuration file, except that
the repetition period (including enclosing parentheses) is
removed. The configuration file transaction date is then
shifted forward by the repetition period and again compared
with the current date. If the recurring transaction is still
``due'', it is appended again to the ledger file. The
process repeats until the recurring transaction is no longer
``due''.
Finally the recurring transaction is written back to the
configuration file with its new transaction date.
@cindex sort transactions
@vindex @code{dklrt-SortAfterAppend}
After recurring transactions have been appended, the ledger
file can optionally be sorted to keep transactions ordered
by date. This behaviour is customisable via variable
@code{dklrt-SortAfterAppend}.
@node Index
@chapter Index
@printindex cp
@bye