Reckonings (called reckonings before version 360), are etm's way of showing exactly how you spent your time. As you will see, a myriad of possibilities exist for detail and breakdowns.
Reckonings are invoked by beginning the e.py command line with '-r' followed an optional argument string including one or more of the following:
| switch | variable | value |
|---|---|---|
| -C | c_position | non-negative integer |
| -D | d_position | non-negative integer |
| -K | k_level | non-negative integer |
| -I | itemize | True if -I is included, False otherwise |
E.g., 'e.py -r -C2 -D1 -K3' would set c_position=2, d_position=1, k_level=3 and, since '-I' was not included, itemize=False.
Alternatively, entering 'e.py -R' would display usage information followed by a prompt for options.
Pressing 'R' in the gui version brings up a prompt in which the same argument string can be entered. Alternatively, pressing 'r' in the gui version would produce a reckoning using the default arguments.
Reckonings are based on the contexts, dates, starting time, ending time, keywords and titles of items in your etm '.txt' files. Of these, only keywords can be hierarchical. With the keyword 'a:b:c....', for example, 'a' would be regarded as the top level, 'a:b' as the second level, 'a:b:c' as the third level and so forth. A lawyer, for example, might want to use the first level for the name of the client, the second level for the project and so forth.
How are times aggregated? Suppose we have the following event:
* T @d D @s S @e E @c C @k a:b:c:d
The number of minutes that this event would contribute to report totals and subtotals, M, would be computed by first taking the number of minutes, m, between the starting time, S, and the ending time, E. Alternatively, for the time journal entry
~ T @d D @j m @c C @k a:b:c:d
the number of minutes, m, would be obtained directly from the value of the @j field.
Now suppose that i is the value of 'increment' in your '~/.etmrc'. For example, a lawyer using 0.1 hour or 6 minute billing, would have increment = 6. Then M is equal to ceil(m/)i where you will recall that ceiling is the smallest integer at least as great as m/i. E.g., if m = 27 and i = 6, then M = ceil(27/6)*6 = ceil(4.5)*6 = 5*6 = 30. In short, M is obtained by rounding m up to the next increment.
To prepare a report, etm first constructs a list for each event and journal entry with components that depend upon the values of c_position, d_position, k_level and itemize. Here are some examples of the list that would be constructed from our illustrative event:
| c_position | d_position | k_level | itemize | list | |
|---|---|---|---|---|---|
| a) | 0 | 0 | 0 | False | () |
| b) | 0 | 0 | 0 | True | (T) |
| c) | 1 | 0 | 0 | False | (C) |
| d) | 0 | 1 | 0 | False | (D) |
| e) | 0 | 1 | 0 | True | (D, T) |
| f) | 0 | 0 | 1 | False | (a) |
| g) | 0 | 0 | 2 | False | (a, b) |
| h) | 0 | 0 | 2 | True | (a, b, T) |
| i) | 0 | 1 | 2 | False | (D, a, b) |
| j) | 0 | 3 | 2 | True | (a, b, D, T) |
| k) | 0 | 2 | 2 | True | (a, D, b, T) |
The reports that would be generated by each of these settings are illustrated below.
Next, etm forms totals and subtotals corresponding to the list so that the computed M for all lists with the same first component would be added to form the first level totals. Next the M's for all lists with the same first two components would be added to form second level totals and so forth.
This is best illustrated by example. Suppose that we have a single etm data file with the contents:
legal eg
~ Activity 1 @d 2009-05-05 @p 15 @c context 2 @k client 1:project 2
~ Activity 2 @d 2009-05-05 @p 27 @c context 1 @k client 1: project 1
~ Activity 2 @d 2009-05-05 @p 18 @c context 1 @k client 1: project 1
* Event 1 @d 2009-05-05 @s 10:30AM @e 12:00PM @c context 1 @k client 1:project 1
~ Activity 3 @d 2009-05-05 @p 150 @c context 1 @k client 2:project 1
+ Task 1 @d 2009-05-05 @f 2009-05-05 @c context 2 @k client 1:project 1
* Event 2 @d 2009-05-06 @s 1:30PM @e 3:00PM @c context 2 @k client 2:project 2
~ Activity 4 @d 2009-05-06 @p 60 @c context 3 @k client 1 :project 2
- Task 2 @d 2009-05-06 @f 2009-05-06 @c context 2 @k client 2:project 1
~ Activity 5 @d 2009-05-06 @p 30 @c context 3 @k client 2:project 2
* Event 3 @d 2009-05-07 @s 10:00AM @e 11:00AM @c context 1 @k client 1:project 1
~ Activity 6 @d 2009-05-07 @p 120 @c context 1 @k client 2:project 1
* Event 4 @d 2009-05-07 @s 4:00PM @e 5:00PM @c context 3 @k client 1:project 2
* Event 5 @d 2009-05-08 @s 10:00AM @e 2:00PM @c context 3 @k client 1:project 2
+ Task 3 @d 2009-05-08 @f 2009-05-08 @c context 1 @k client 2: project 2
First, note that in list view tasks appear along with journal entries and events. Since tasks (reminders of things that need to be done), take no time themselves, they will not appear in any of the reckonings.
_________________________ list: 2009-05-04 ~ 2009-05-08 ________________________
Tue May 05 09
15m Activity 1
27m Activity 2
18m Activity 2
150m Activity 3
10:30a 12:00p Event 1
X Task 1
Wed May 06 09
60m Activity 4
30m Activity 5
1:30p 3:00p Event 2
X Task 2
Thu May 07 09
120m Activity 6
10:00a 11:00a Event 3
4:00p 5:00p Event 4
Fri May 08 09
10:00a 2:00p Event 5
X Task 3
___ etm ________________________________________________________________________
In the following, increment=6, c_position=0, d_position=0 and k_level=0 are the default values set in '~/.etmrc'.
Here c_position=0, d_position=0, and k_level=0 entails no breakdown whatever and etm simply reports the total time.
_________________ reckoning: 2009-05-04 ~ 2009-05-08 (16:06) _________________
total time: 16:06
___ etm ______________________________________________________________________
The time is displayed in HH::MM format because 'hours_minutes = True' is set in '~/.etmrc'. Otherwise time periods would be displayed as hours and tenths.
_________________ reckoning: 2009-05-04 ~ 2009-05-08 (16:06) _________________
0:18) Activity 1
0:48) Activity 2
2:30) Activity 3
1:00) Activity 4
0:30) Activity 5
2:00) Activity 6
1:30) Event 1
1:30) Event 2
1:00) Event 3
1:00) Event 4
4:00) Event 5
___ etm ______________________________________________________________________
_________________ reckoning: 2009-05-04 ~ 2009-05-08 (16:06) _________________
7:48) context 1
1:48) context 2
6:30) context 3
___ etm ______________________________________________________________________
_________________ reckoning: 2009-05-04 ~ 2009-05-08 (16:06) _________________
5:06) 2009-05-05
3:00) 2009-05-06
4:00) 2009-05-07
4:00) 2009-05-08
___ etm ______________________________________________________________________
_________________ reckoning: 2009-05-04 ~ 2009-05-08 (16:06) _________________
5:06) 2009-05-05
0:18) Activity 1
0:48) Activity 2
2:30) Activity 3
1:30) Event 1
3:00) 2009-05-06
1:00) Activity 4
0:30) Activity 5
1:30) Event 2
4:00) 2009-05-07
2:00) Activity 6
1:00) Event 3
1:00) Event 4
4:00) 2009-05-08
4:00) Event 5
___ etm ______________________________________________________________________
_________________ reckoning: 2009-05-04 ~ 2009-05-08 (16:06) _________________
9:36) client 1
6:30) client 2
___ etm ______________________________________________________________________
_________________ reckoning: 2009-05-04 ~ 2009-05-08 (16:06) _________________
9:36) client 1
3:18) project 1
6:18) project 2
6:30) client 2
4:30) project 1
2:00) project 2
___ etm ______________________________________________________________________
_________________ reckoning: 2009-05-04 ~ 2009-05-08 (16:06) _________________
9:36) client 1
3:18) project 1
0:48) Activity 2
1:30) Event 1
1:00) Event 3
6:18) project 2
0:18) Activity 1
1:00) Activity 4
1:00) Event 4
4:00) Event 5
6:30) client 2
4:30) project 1
2:30) Activity 3
2:00) Activity 6
2:00) project 2
0:30) Activity 5
1:30) Event 2
___ etm ______________________________________________________________________
_________________ reckoning: 2009-05-04 ~ 2009-05-08 (16:06) _________________
5:06) 2009-05-05
2:36) client 1
2:18) project 1
0:18) project 2
2:30) client 2
2:30) project 1
3:00) 2009-05-06
1:00) client 1
1:00) project 2
2:00) client 2
2:00) project 2
4:00) 2009-05-07
2:00) client 1
1:00) project 1
1:00) project 2
2:00) client 2
2:00) project 1
4:00) 2009-05-08
4:00) client 1
4:00) project 2
___ etm ______________________________________________________________________
This one provides the detail that might be useful for billing clients.
_________________ reckoning: 2009-05-04 ~ 2009-05-08 (16:06) _________________
9:36) client 1
3:18) project 1
2:18) 2009-05-05
0:48) Activity 2
1:30) Event 1
1:00) 2009-05-07
1:00) Event 3
6:18) project 2
0:18) 2009-05-05
0:18) Activity 1
1:00) 2009-05-06
1:00) Activity 4
1:00) 2009-05-07
1:00) Event 4
4:00) 2009-05-08
4:00) Event 5
6:30) client 2
4:30) project 1
2:30) 2009-05-05
2:30) Activity 3
2:00) 2009-05-07
2:00) Activity 6
2:00) project 2
2:00) 2009-05-06
0:30) Activity 5
1:30) Event 2
___ etm ______________________________________________________________________
or by date before the second level keyword and just for client 1:
__________ reckoning: (k~'client 1'): 2009-05-04 ~ 2009-05-08 (9:36) _________
9:36) client 1
2:36) 2009-05-05
2:18) project 1
0:48) Activity 2
1:30) Event 1
0:18) project 2
0:18) Activity 1
1:00) 2009-05-06
1:00) project 2
1:00) Activity 4
2:00) 2009-05-07
1:00) project 1
1:00) Event 3
1:00) project 2
1:00) Event 4
4:00) 2009-05-08
4:00) project 2
4:00) Event 5
___ etm ______________________________________________________________________