triple entry

Published on December 2016 | Categories: Documents | Downloads: 73 | Comments: 0 | Views: 441
of 42
Download PDF   Embed   Report

Comments

Content

%!ps %%title: triple entry accounting %%creator: html2ps version 1.0 beta4 %%endcomments save 2000 dict begin /d {bind def} bind def /d {def} d /t true d /f false d /fl [/times-roman /times-italic /times-bold /times-bolditalic /courier /courier-oblique /courier-bold /courier-boldoblique /helvetica /helvetica-oblique /helvetica-bold /helvetica-boldoblique] d /wf t d /wi 0 d /f 1 d /iw 454 f div d /il 672 f div d /ps 842 d /ef [0 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 2 2] d /ez [11 9 19 17 15 13 12 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 8 8] d /ey [0 0 2 2 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] d /eg [-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1] d /tm [1 1 0.8 0.8 0.8 0.8 0.8 0.8 0 0 0 0 0 0 0.5 1 1 1 1 0 0 1.3 0 0] d /bm [1 1 0.5 0.5 0.5 0.5 0.5 0.5 0 0 0 0 0 0 0.5 1 1 1 1 0 0 1 0 0] d /lm [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 0 0 3 0 0 0] d /rm [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0] d /eu [-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0] d /no t d /yy [[{()}1][{()}0][{()}2]] d /zz [[{()}1][{()}0][{()}2]] d /ts ez 0 get d /tu f d /xp t d /au f d /sn 0 d /cf f d /tp f d /fe f d /ti 1 ts mul d /fm 14 d /xl 71 d /xr 71 d /yl 757 d /yr 757 d /wl 454 f div d /wr 454 f div d /hl 672 f div d /hr 672 f div d

/fe {newpath fm neg fm m cp bb iw fm add fm l iw fm add il fm add neg l cp bb fm neg il fm add neg l closepath} d /la {pm 0 eq{/iw wl d /il hl d}{/iw wr d /il hr d}ie /w iw d /ll w d /ls w d tu pm 0 eq and{iw 56 f div add sa{sf div}if 0 translate} {pm 0 eq{xl yl}{xr yr}ie translate f sa{sf mul}if dup scale cs cf fs cf{ca cl get vc}if /bb f d}ie 0 0 m tf not tc or {cf{gsave sa{1 sf div dup scale}if cb vc fe fill grestore}if}if}d /pi 0 ts mul d /sg [0.8 1 1] d /ab 15 d /j 0 d /tc f d /nh 6 d /nf f d /pa f d /lh 1.2 d /xr f d /xr {/pn e d ( [p ) wb pn wb (] )wb} d /db [16#ff 16#ff 16#ff] d /dt [16#00 16#00 16#00] d /ea f d /fi f d /bt f d /lc t d /dl [16#00 16#00 16#00] d /lx f d /br 0.25 d /ia ([image]) d /ds {/pf f d()wb nl np()pop rc zf} d /gb f d /mb t d /hc [16#00 16#00 16#00] d /bl 3 d /mi -15.2 d /dx (draft) d /di 0 d /tt 113.385826771654 d /th {()2 al()br ( ) 0 1 -1 h()4 fz ti es()eh ( ) 0 2 -1 h() me 0 get join eh()ea()br()} d /th {()0 1 -1 h (table of contents) eh()} d /fd 2 d /dy 2 d /cd [16#f0 16#f0 16#f0] d /fw 0.6 d /fu [16#00 16#00 16#00] d /et {/rm f d /a0 0 d /pn sn d /ou t d /ou t d /w iw d /ll w d d1 ms not tp and{ip}if /tf f d} d %-- end of variable part -/mysymbol 10 dict dup begin /fonttype 3 d /fontmatrix [.001 0 0 .001 0 0 ] d /fontbbox [25 -10 600 600] d /encoding 256 array d 0 1 255{encoding exch /.notdef put}for encoding (e) 0 get /euro put /metrics 2 dict d metrics begin /.notdef 0 d /euro 651 d end

/bbox 2 dict d bbox begin /.notdef [0 0 0 0] d /euro [25 -10 600 600] d end /characterdefs 2 dict d characterdefs begin /.notdef {} d /euro{newpath 114 600 moveto 631 600 lineto 464 200 lineto 573 200 lineto 573 0 lineto -94 0 lineto 31 300 lineto -10 300 lineto closepath clip 50 setlinewidth newpath 656 300 moveto 381 300 275 0 360 arc stroke -19 350 moveto 600 0 rlineto -19 250 moveto 600 0 rlineto stroke}d end /buildchar{0 begin /char e d /fontdict e d /charname fontdict /encoding get char get d fontdict begin metrics charname get 0 bbox charname get aload pop setcachedevice characterdefs charname get exec end end}d /buildchar load 0 3 dict put /uniqueid 1 d end definefont pop /cd {aload length 2 idiv dup dict begin {d} repeat currentdict end} d /ex {ec cvx exec} d /du {} d /bb {pop pop}d /ie {ifelse} d /e {exch} d /m {moveto} d /r {rmoveto} d /l {lineto} d /rl {rlineto} d /cp {currentpoint} d /sw {stringwidth} d /gi {getinterval} d /pi {putinterval} d /sg {setgray} d /lw {setlinewidth} d /s {dup () ne ou and{0 co r at 3 eq lb and hf not and a1 0 ne a2 0 ne or and {a2 0 32 a1 0 6 -1 roll awidthshow}{show}ie 0 co neg r}{pop}ie ou ph 3 eq or{/ms t d}if} d /u {ou{gsave cp currentfont /fontinfo get /underlineposition get 0 e currentfont /fontmatrix get dtransform e pop add newpath m dup sw pop cj 0 rl stroke grestore}if} d /b {ou br 0 gt and{cp ts neg ts .33 mul r gsave 0 sg cp newpath ts br mul 0 360 arc closepath ui 2 mod 0 eq{stroke}{fill}ie grestore m cp e ts br 1 add mul sub e bb /ms t d}if}d /np {ms tp not or pa and ou and{tp{or}if f1{mf k2 /mf e d /yc 0 d}if tp tu not pm 0 eq or and{showpage}if du ip te not{la}if 0.6 lw /ci 0 d /tp t d /hs f d /hl 6 d /hv 6 d /hi hi d /ms f d}if bs xo bo m} d /np {le sub cp e pop gt pl 0 eq and{np}if}d /ip {/pn pn 1 add d /pn rm{1}{4}ie pn ns d /pm pn sn sub 2 mod d} d /gp {e dup 3 -1 roll get pn 1 add 2 mod get dup type /integertype eq {get 0 get}{e pop}ie}d /fc {dup 2 gp exec sw pop /s1 e d dup 1 gp exec sw pop /s2 e d 0 gp exec sw pop /s3 e d s1 0 gt{s2 2 mul s1 add s3 2 mul s1 add 2 copy lt{e}if pop}{0}ie s2 s3 add 2 copy lt{e}if pop iw .9 mul div dup 1 gt{1 e div}{pop 1}ie}d /or {df{sd}if tp not{gsave sa{1 sf div dup scale}if fe{cf{fu vc}if fw lw

1 setlinejoin fe stroke}if /yo {60 f div dup 40 gt{pop 40}if}d /cs cs d /cf cf d /cf 0 d /pf pf d /pf f d /fn fn d /at at d /at 0 d /fn ef hf 1 add get d fz fs fs zz fc fz mul fs fs eu hf 1 add get dup type /arraytype eq cf and{vc}{pop 0 sg}ie iw il neg yo sub m zz 1 gp exec dup sw pop neg 0 r sh 0 il neg yo sub m zz 0 gp exec sh zz 2 gp exec dup sw pop iw e sub 2 div il neg yo sub m sh fz fs fs no{/aw iw pn sw pop sub d aw 2 div il neg yo sub s1 0 gt s2 aw .45 mul gt or s3 aw .45 mul gt or{fz 2 mul sub}if m pn sh}if eu hf get dup type /arraytype eq cf and{vc}{pop 0 sg}ie yy fc /fn ef hf get d hz mul hs fs iw yo m yy 1 gp exec dup sw pop neg 0 r sh 0 yo m yy 0 gp exec sh yy 2 gp exec dup sw pop iw e sub 2 div yo m sh /fn fn d /at at d t pb xo sz sl get neg r /pf pf d grestore /cf 0 d cs cf fs}if}d /sh {dup () ne{cp hz 4 div sub bb show cp cs add bb}{pop}ie}d /pb {/ou e d /ou ou d /pb t d 0 0 m ba{/sa save d /bp t d /fl t d rc /pl 0 d /ph 0 d /w iw d /le il .7 mul d /eo 0 d si zf /ya 0 d /bo 0 d /c1 () d ba 0 ts neg r bb{xl yl xh yh}if bb cp sa restore m {/yh e d /xh e d /yl e d /xl e d}if /fl t d}if bl /ou t d /hm f d /ou t d /pb f d} d /bs {/bp ba not d}d /reencodeiso { dup dup findfont dup length dict begin{1 index /fid ne{d}{pop pop}ie}forall /encoding isolatin1encoding d currentdict end definefont} d /isolatin1encoding [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon /less/equal/greater/question/at/a/b/c/d/e/f/g/h/i/j/k/l/m/n /o/p/q/r/s/t/u/v/w/x/y/z/bracketleft/backslash/bracketright /asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m /n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/space/exclamdown/cent/sterling/currency/yen/brokenbar /section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot /hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior /acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine /guillemotright/onequarter/onehalf/threequarters/questiondown /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex /idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis /multiply/oslash/ugrave/uacute/ucircumflex/udieresis/yacute /thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis /aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave /iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex /otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis /yacute/thorn/ydieresis ] d [128/backslash 129/parenleft 130/parenright 141/circumflex 142/tilde 143/perthousand 144/dagger 145/daggerdbl 146/ydieresis 147/scaron 148/scaron 149/oe 150/oe 151/guilsinglleft 152/guilsinglright 153/quotesinglbase 154/quotedblbase 155/quotedblleft 156/quotedblright 157/endash 158/emdash 159/trademark] aload length 2 idiv 1 1 3 -1 roll{pop isolatin1encoding 3 1 roll put}for

/colorimage where{pop}{ /colorimage { pop pop /pr e d {/cv pr d /gr cv length 3 idiv string d 0 1 gr length 1 sub {gr e dup /i e 3 mul d cv i get 0.299 mul cv i 1 add get 0.587 mul add cv i 2 add get 0.114 mul add cvi put}for gr} image} d }ie /pdfmark where{pop}{userdict /pdfmark /cleartomark load put}ie wf{fl{reencodeiso d}forall}{4 1 fl length 1 sub{fl e get reencodeiso d}for}ie /symbol dup dup findfont dup length dict begin {1 index /fid ne{d}{pop pop}ie}forall /encoding [encoding aload pop] dup 128 /therefore put d currentdict end definefont d /sf {/cs e d sz sl cs put fo sl fn put /yi cs lh neg mul d dup st cvs ( ) join cs st cvs join c1 e join ( nf ) join /c1 e d cs nf /wf wf fn 0 gt or d /bw wf{( ) sw pop}{0}ie d}d /nf {/cs e d /cf e d cf 0 ge{fl cf get}{cf -1 eq{/symbol}{/mysymbol}ie}ie findfont cs scalefont setfont} d /fs {cf or /cf e d fr sl cf put cf cf 0 ge{fn 4 mul add}if e sf} d /pc {sh /bp f d fin not gl not and{nl}if /hm t d /ll ls d} d /bs {/tx e d wf{/fin f d /cw 0 d /lk 0 d /sc 0 d /rt tx d {rt ( ) search{/nw e d pop /rt e d /wh nw sw pop d cw wh add ll gt {tx sc lk sc sub 1 sub nn gi gl{sh cf cs oc 2 copy cs ne e cf ne or{nf}{pop pop}ie}{pc /cw wh bw add d}ie /sc lk d} {gl{jc}if /cw cw wh add bw add d /hm t d}ie /gl f d /ph f d /lk lk nw length 1 add add d}{pop exit}ie}loop /fin t d tx sc lk sc sub gi sh rt () ne{gl not{cc}if}if /lc tx length d /wh rt sw pop d cw wh add hy{hc sw pop add}if ll gt {rt gl{sh cf cs oc 2 copy cs ne e cf ne or{nf}{pop pop}ie hy{/ph t d}if /ll ls d}{nl /ll ls d sh}ie} {rt pc hy{cc}if /ph ph hy or d}ie rt () ne{/gl t d /hm t d}if} {tx sw pop ll le{tx sh}{/nw () d 0 2 tx length 1 sub {/cw e d tx 0 cw gi dup sw pop ll gt{pop nw sh /hm t d nl/ll w xo sub mr sub d /cw cw 2 sub nn d /tx tx cw tx length cw sub gi d tx bs exit} {/nw e d}ie}for}ie}ie /hm t d}d /cc {c0 length 0 gt{jc}if /c0 [c1 l1 ya yb mf ns nb tb af bw] d /c1 () d /l0 l1 d /ya 0 d /yb 0 d /mf 0 d /ns 0 d /nb 0 d}d /jc {c0 aload length 0 gt{pop pop pop nb add /nb e d ns add /ns e d dup mf gt{/mf e d}{pop}ie dup yb gt{/yb e d}{pop}ie dup ya gt{/ya e d}{pop}ie pop c1 join /c1 e d /c0 [] d}if}d /oc {c0 length 0 gt{c1 l1 l0 sub ya yb mf ns nb tb af bw gl c0 aload pop /bw e d /af e d /tb e d /nb e d /ns e d /mf e d /yb e d /ya e d /c0 [] d /l1 e d /c1 e d ph{hc sh}if nl /gl e d /bw e d /af e d /tb e d /nb e d /ns e d /mf e d /yb e d /ya e d /l1 e d /ll w l1 sub xo sub mr sub wh sub d /cw 0 d c1 e join /c1 e d}if}d /bt {/lb t d dup length string copy rs dup dup () ne e ( ) ne and {/ci 0 d /ls ll d /ll w l1 sub xo sub mr sub d bs} {dup ( ) eq{/gl f d}if dup () eq l1 0 eq or{pop}{sh /bp f d /ph f d}ie}ie /lb f d} d /bl {cp e pop xo e m} d /nl {jc /gl f d /sk w xo sub mr sub l1 sub tb{bw add}if d /ya lf{mf hm fl not and pf or{lh mul}if}{0 /lf t d}ie ya 2 copy lt{e}if pop d c1 () ne{/fb yb mf sa{sf mul}if 4 div 2 copy lt{e}if pop d}if fl{/ya ya d}if cp e pop ya sub yb sub le neg lt fl not and pb not and{np}if nt tl bl ou pf not and pb or{/re l1 tb{bw sub}if w xo sub mr sub div ya yb add le bo add div 2 copy lt{e}if pop d re 1 gt{bl 1 re div dup scale}if}if

at 2 le{sk at mul 2 div ya neg r}if at 3 eq{0 ya neg r tb{/nb nb 1 sub d /ns ns 1 sub d}if /nb nb 1 sub nn d /a3 ns 6 mul nb add d ns nb add 0 eq {/a1 0 d /a2 0 d} {ns 0 eq{/a1 sk nb div dup j gt{pop 0}if d /a2 0 d}{j a3 mul sk lt {/a1 j d /a2 sk j nb mul sub ns div dup ab gt{/a1 0 d pop 0}if d} {/a1 sk a3 div d /a2 a1 6 mul d}ie}ie}ie /a1 a1 nn d /a2 a2 nn d}if at 4 eq{0 ya neg r ph 2 le{pd 0 lt{/pd l1 d}if pd m1 gt{/m1 pd d}if l1 pd sub m2 gt{/m2 l1 pd sub d}if}{dv id 1 sub get 0 ge{lo 0 r}if}ie}if f0 cf ne cs cs ne or{f0 cs nf}if /ms ms d /ms f d cp fb sub c1 cvx exec xo eo sub l1 add tb{bw sub}if dup lm gt{/lm e d}{pop}ie ph 0 eq ph 4 eq or ms and{hf not{/po t d /ah t d}if bb cp ya add e at 3 eq lb and{a1 sub}if tb{bw sub}if e bb} {pop pop}ie ms hm ph 3 eq and or{/bp f d /fl f d}if /lo 0 d /l1 0 d /f0 cf d /cs cs d bp not{0 yb nn neg r}if ou f1 and mf not and{k2 /f1 f d}if ou pf not and pb or{re 1 gt{re dup scale}if}if /ms ms ms or d /c1 af{(cp )}{()}ie d /ya 0 d /yb 0 d bl at 4 eq lb not and ph 3 ge and {id dv length lt{dv id get dup 0 ge{do e sub /lo e d /l1 lo d}{pop}ie /id id 1 add d}if}if /t t d cd{/ln ln 1 add d pd}if /pd -1 d /ns 0 d /nb 0 d /tb f d /ph f d /mf 0 d /hm f d} d /rs {/tm e d /cn 0 d tm{10 eq{tm cn ( ) pi}if /cn cn 1 add d}forall /cn 0 d /bk hm en and{0}{1}ie d tm {dup 32 ne{tm cn 3 2 roll put /cn cn 1 add d /bk 0 d} {pop bk 0 eq{tm cn 32 put /cn cn 1 add d}if /bk 1 d}ie}forall tm 0 cn gi dup dup () ne e ( ) ne and {dup cn 1 sub get 32 eq{/en f d}{/en t d}ie}if} d /join {2 copy length e length add string dup 4 2 roll 2 index 0 3 index pi e length e pi}d /wr {(\n) search{dup () ne bp not or {li 4 le cp e pop yi li mul add le add 0 lt and pl 0 eq and{np}if sh nl pop /li li 1 sub d wr}{pop pop wr}ie}{sh}ie /ci 0 d /bp f d} d /sh {dup dup () ne e ( ) ne and pf or cs mf gt and{/mf cs d}if t not wf and{( ) e join /t t d}if dup bp{/mf cs d}if at 3 eq{2 copy length dup 0 gt{/nb e nb add d {( ) search{/ns ns 1 add d pop pop}{pop exit}ie}loop}{pop pop}ie}if cd pd 0 lt and{dup dc search{sw pop /pd e l1 add d pop pop}{pop}ie}if 0 np dup sw pop l1 add /l1 e d dup () ne {c1 (\() join e join (\)) join au af and uf or wf and{( u ) join}if sf{( s ) join}if ( s ) join /c1 e d dup length 1 sub get 32 eq /tb e d /bw bw d}{pop pop}ie} d /bg {ai lg bc add add 0 eq} d /on {ou{ty ar ai nn get dup 1 add ln ns ty 2 mod 0 eq{(. )}{(\) )}ie join dup sw pop neg 0 r cp e 0 lt{0 e m}{pop}ie cp bb show /ms t d}if} d /ln {ar ai 3 -1 roll put}d /sp {dup ci lt bp not and{dup ci sub 0 e r /ci e d}{pop}ie} d /bn {pf{wr /hm f d}{bt nl}ie} d /nn {dup 0 lt{pop 0}if} d /h {(h) hi st cvs join cvx exec dup 1 get e nf{0 get e join}{pop}ie} d /h {/fn fn d /hi e 1 add d 1 sub /hl e d /h2 hl 2 add d /gs ez h2 get d e tm h2 get gs mul be dup 0 gt{1 sub}{pop eg h2 get dup 0 lt{pop at}if}ie na ww np /sl sl 1 add d /fn ef h2 get d gs ey h2 get fs eu h2 get sc hs not hl hl lt and hs hl hl lt and or hi 0 eq or {/hi hi d /hs t d /hl hl d /hv hl d}if hl hl lt{/hi hi d}if nf hi 0 gt and{(h) hi st cvs join cvx exec 0 get wb}if /hf t d /ah f d /po f d} d

/eh {bm h2 get gs mul be oa /sl sl 1 sub nn d /cf 0 d /fn fn d sz sl get fr sl get fs /hf f d /gs ts d ()ec} d /p {e pf{wr}{po{ep}{bn}ie ts 4 mul np ae not{tm 0 get ts mul neg sp}if dup 0 ge ah and{pi pd}if}ie 1 sub dup 0 lt{pop av al get}if /at e d /po t d} d /ep {pf{wr}{bn ts 4 mul np}ie ae not{bm 0 get ts mul neg sp}if /at av al get d /po f d} d /be {e po{ep}{bn}ie ts 4 mul np neg sp} d /hr {/aw w eo sub d /rw e dup 0 gt{aw mul}{neg}ie dup aw gt{pop aw}if d /rz e d e bn ts neg sp 1 sub 2 div aw rw sub mul eo add cp e pop m pf{0 ps neg r}if 0 np ou{gsave rz lw cf{hc vc}{0 sg}ie cp bb rw 0 rl cp bb stroke grestore}if /ci 0 d /bp f d pf not{ts neg sp}if /ms t d} d /ad {i nl eg 14 get dup 0 lt{pop at}if na /ae t d tm 14 get ts mul neg sp cf{eu 14 get dup -1 eq{pop ca cl get}if sc}if} d /da {bn ()es oa /ae f d ()ec bm 14 get ts mul neg sp} d /pr {/mw e d /li e d tm 1 get ps mul be 0 na /fn fp d /pf t d si /sl sl 1 add d /cf 0 d ps cs mul ts div mw wc mul cs mul ts div dup ll gt pl 0 eq and {ll div div}{pop}ie ey 1 get fs cp e pop le add yi neg div cvi dup li lt ah and{4 lt yi li mul 5 mul le add 0 gt or pl 0 eq and{np}if}{pop}ie eu 1 get sc /gs ps d}d /rp {wr nl () /pf f d si /fn 0 d es bm 1 get ps mul neg sp oa /gs ts d} d /si {/xo lm 15 get bc nn mul lm 16 get ai ui sub nn mul add lm 17 get ui nn mul add lm 20 get lg nn mul add ts mul pf{lm 1 get ps mul add}if eo add d /mr rm 15 get bc nn mul rm 16 get ai ui sub nn mul add rm 17 get ui nn mul add rm 20 get lg nn mul add ts mul pf{rm 1 get ps mul add}if d /ll w xo sub mr sub d} d /dt {/cc e d bn /lg lg 1 sub d si /lg lg 1 add d ww 2 div np bl} d /dd {wb cc 0 eq cc 0 eq and l1 0 eq or lm 20 get ts mul l1 sub tb{bw add}if ts 2 div lt or nl /lf e d si bl /cc 0 d} d /dl {dc lg cc put /cc e d bg{tm 18 get ts mul be}{bn}ie /lg lg 1 add d bl} d /ld {bn lg 0 gt{/lg lg 1 sub d}if /cc dc lg get d si bg{()bm 18 get ts mul be}if bl} d /ul {bg{tm 17 get ts mul be}{bn}ie nr ai nn 0 put /ui ui 1 add d /ai ai 1 add d si bl} d /lu {bn /ui ui 1 sub d /ai ai 1 sub d si bg{()bm 17 get ts mul be}if bl} d /ol {e bg{tm 16 get ts mul be}{bn}ie tr ai nn ty put /ty e d nr ai nn 1 put /ai ai 1 add d si bl 1 ln} d /lo {bn /ai ai 1 sub d /ty tr ai get d si bg{()bm 16 get ts mul be}if bl} d /li {e bn -1 sp /bp f d /ci 0 d 0 np nr ai 1 sub nn get 1 eq {dup dup 0 gt e 4 le and{/ty e d}{pop}ie /l1 l1 ty ar ai nn get ns sw pop xo sub dup 0 lt{pop 0}if add d ( on )} {pop ( b )}ie c1 e join /c1 e d cs mf gt{/mf cs d}if bl} d /bq {tm 15 get ts mul be /bc bc 1 add d si bl} d /qb {bm 15 get ts mul be /bc bc 1 sub d si bl} d /al {e ep 1 sub dup 0 lt{pop av al get}if na} d /ea {ep oa} d /wb {pf{wr}{bt}ie} d /f1 {wb /fn 0 d cs 0 fs} d /f2 {wb /fn wi d cs 0 fs} d /hy {/hy t d wb /hy f d} d /yh {wb} d /a {/lt e d lt 1 eq{/rn e d}if /lh e d wb /c1 c1 ( cp ) join d lc af not and{cl sc}if /af t d} d /ea {lc af and{ec}{wb}ie tl pa af and lh 0 ne and {( \() lh join (\)) join /af f d wb}if /af f d} d /tl {c1 ( tl ) apa /c1 e d} d /apa {af ou and lh 0 ne lt 1 eq or and{lt 1 eq{rn ( /) e st cvs join} {(\() lh join (\)) join}ie e join join}{pop}ie} d

/cp {/xc cp /yc e d d} d /ss {cf{dup 0 ge{eu e get dup -1 eq{pop ca cl get}if}{pop ca cl get}ie sc} {pop}ie sz sl get /sl sl 1 add d} d /i {wb 8 ss 1 fs} d /em {wb 8 ss /cf cf 1 xor d 0 fs} d /bd {wb 9 ss 2 fs} d /tt {wb 10 ss /fn fp d 0 fs} d /kb {wb 11 ss /fn fp d 2 fs} d /ct {wb 12 ss 1 fs} d /sm {wb 13 ss /fn fp d 0 fs} d /q {/ql ql 1 add d qo ql 2 mod get la get join wb} d /eq {qc ql 2 mod get la get join wb /ql ql 1 sub d} d /ro {wb -1 ss /cf 0 d 0 fs} d /sy {wb -1 ss -1 fs} d /my {wb -1 ss -2 fs} d /es {wb /sl sl 1 sub nn d /cf 0 d /fn fo sl get d sz sl get fr sl get fs ()ec}d /fz {3 sub 1.2 e exp gs mul e wb tl /c1 c1 ( cp ) join d /sl sl 1 add d 0 fs} d /ef {wb tl ()es /c1 c1 ( cp ) join d} d /bz {dup /bf e d fz}d /sc {dup -1 ne cf and{/cl cl 1 add d dup 0 eq{pop [0 0 0]}if dup ca e cl e put vs ( vc ) join c1 e join /c1 e d}{pop}ie} d /ec {wb cf{/cl cl 1 sub nn d ca cl get vs ( vc ) join c1 e join /c1 e d}if} d /vs {dup type /arraytype eq{([) e {st cvs join ( ) join}forall (]) join}if} d /vc {{255 div}forall setrgbcolor} d /sl {dup type /integertype ne{ds}if /la e d wb}d /un {wb /uf t d} d /nu {wb /uf f d} d /se {wb /sf t d} d /xe {wb /sf f d} d /sm {/c1 c1 ( k1 ) join d}d /em {/c1 c1 ( k2 ) join d}d /k1 {/yc cp e pop ts add d /mf t d /f1 t d}d /k2 {gsave 3 lw -9 cp e pop ts 0.2 mul sub m -9 yc l stroke grestore /mf f d}d /ac {/ac e d wb}d /ca {ea{( \()join ac join(\) )join}if wb}d /s {ou{gsave 0 cs .25 mul r dup sw pop cj 0 rl stroke grestore}if}d /cj {at 3 eq lb and{e dup dup length 1 sub a1 mul e {( ) search{pop pop e a2 add e}{pop exit}ie}loop 3 -1 roll add w cp pop sub 2 copy gt{e}if pop}if}d /so {/co e d} d /so {c1 yo st cvs join ( so ) join /c1 e d (j) sw pop 2 div pd} d /se {e wb cs e div pd}d /pd {dup type /stringtype eq{sw pop}if dup /l1 e l1 add d st cvs ( 0 r ) join c1 e join /c1 e d} d /sp {0.35 co} d /sb {-0.2 co} d /co {ov io yo put /yo e cs mul yo add d /io io 1 add d -1.5 io mul 3 add fz so cs yo add dup ya gt{/ya e d}{pop}ie yo neg dup yb gt{/yb e d}{pop}ie} d /es {es /io io 1 sub nn d /yo ov io get d so} d /sb {/n2 0 d 0 1 ni{/n e d{ix n2 get 0 lt{/n2 n2 1 add d}{exit}ie}loop /k ws n get fc n get mul d /ny ay n2 get d /bv ny array d 0 1 ny 1 sub{/tm k string d currentfile tm readhexstring pop pop bv e tm put} for bm n bv put /n2 n2 1 add d}for} d /ic [{/ma e d /mb 0 d}{2 div /ma e d /mb ma d}{/mb e cs sub d /ma cs d} {pop /ma ys ab mul d /mb 1 ab sub ys mul d}{pop /ma 0 d /mb 0 d}] d /ip {bv n get /n n 1 add d} d /ii {/k e d ix k get 0 lt{/ec e d}if /ty e d

ty 4 eq{/y e d /x e d}if ty 3 eq{/ab e d}if /xw ax k get d /yw ay k get d /is sg it k get get d /xs xw is mul d /ys yw is mul d ys ic ty get exec /ma ma fl not{3 add}if d} d /im {ii /ty ty d /xs xs d /ys ys d /ya ya d /yb yb d /ma ma d /mb mb d /k k d /ec ec d /bp f d /ci 0 d wb tl l1 xs add dup xo add mr add w gt {pop /ma ma fl{3 add}if d nl /ya ma d /yb mb d /ys ys d /l1 xs d} {/l1 e d ma ya gt{/ya ma d}if mb yb gt{/yb mb d}if}ie /tb f d ou{cp e pop ys sub le neg lt fl not and pb not and{np /ya ma d /yb mb d}if /bp f d ty st cvs ( ) join ix k get 0 lt{(\() join ec join (\) ) join}if k st cvs join ty 3 eq{ab st cvs ( ) join e join}if ty 4 eq{x st cvs ( ) join y st cvs join ( ) join e join}if c1 e join ( di ) join fp 2 eq fp 1 eq af and or{( fm ) join}if ( il cp ) apa /c1 e d /en f d}if /hm t d /t f d} d /di {ii /xc cp /yc e d d /yn yw neg d /hm t d /ci 0 d /k2 ix k get d gsave ty 4 eq{ox x is mul add oy fy add ys sub y is mul sub} {/fy ys d cp mb sub 2 copy /oy e d /ox e d}ie translate k2 0 ge{/dp az k2 get d /bv bm k2 get d xs ys scale /n 0 d xw yw dp [xw 0 0 yn 0 yw] {ip} fc k2 get 1 eq{image}{f 3 colorimage}ie} {ex}ie grestore xs 0 r /ms t d} d /fm {gsave 0 sg cp mb sub translate xs neg 0 m 0 ys rl xs 0 rl 0 ys neg rl xs neg 0 rl stroke grestore} d /na {/at e d /al al 1 add d av al at put} d /oa {al 0 gt{/al al 1 sub d /at av al get d}if} d /d1 {/br {cp e pop e bn mb{cp e pop eq{0 yi r}if}{pop}ie} d /sn {ou{c1 e st cvs join ( ld ) join /c1 e d}{pop}ie} d} d /d1 {/br {bn} d /sn {ou {c1 e st cvs join ( ld ) join /c1 e d} {pop} ie} d} d /tc {/tf t d /ml 0 d hn{sw pop dup ml gt{/ml e d}{pop}ie}forall np /rm rm not d rc /ou tc d ep /pn 0 d ms not tp and{ip}if /w iw ml sub ts sub d /a0 0 d th{/br {( ) join bt} d /sn {pop} d /au () d}if} d /tn {0 eq{e ea pf hf or not xr and{hn e get xr}{pop}ie} {ou{tn 0 ge{() bn}if /tn e d}{pop}ie wb}ie} d /nt {ou lb not and tn 0 ge and{pl 0 eq{ms not{cs cf fs}if cp dup /y e ya sub d w 9 sub cs -1.8 mul xo l1 add 2 add{y m (.) show}for hn tn get dup sw pop iw e sub y m show cp bb m}if /tn -1 d}if} d /ld {/dn e d hn dn pn put [/view [/xyz -4 fl{ps}{cp ya add us e pop}ie null] /dest dn st cvs cvn /dest pdfmark} d /c {nd 1 eq{1 sub}if ti mul /xo e d nl nf not{pop()}if 0 3 -1 roll 1 a} d /op {bp not{np}if pn 2 mod 0 eq{/ms t d np}if}d /ep {xp pn 2 mod 0 eq and ou and{/pn (-) d showpage /pm 1 d la}if}d /dg [73 86 88 76 67 68 77] d /rd [0 [1 1 0][2 1 0][3 1 0][2 1 1][1 1 1][2 2 1][3 3 1][4 4 1][2 1 2]] d /ns {/m e d /c e 32 mul d /j m 1000 idiv d /p j 12 add string d c 96 le m 0 gt and{c 32 le {/i 0 d /d 77 d /l 100 d /m m j 1000 mul sub d j -1 1 {pop p i d c add put /i i 1 add d}for 4 -2 0 {/j e d /n m l idiv d /m m n l mul sub d /d dg j get d n 0 gt {/x rd n get d x 0 get -1 1 {pop p i d c add put /i i 1 add d}for p i x 1 get sub dg x 2 get j add get c add put}if /l l 10 idiv d }for p 0 i gi} {/i st length 1 sub d m {1 sub dup 0 ge{dup 26 mod c add 1 add st i 3 -1 roll put 26 idiv dup 0 eq{pop exit}if}if /i i 1 sub d}loop st i st length i sub gi}ie} {m p cvs}ie} d /us {matrix currentmatrix matrix defaultmatrix matrix invertmatrix matrix concatmatrix transform} d /gb {gb{us}if}d /tl {/rn e d xc cp pop ne{ [/rect [xc 1 sub yc cs 0.25 mul sub gb cp e 1 add e cs 0.85 mul add gb] /subtype /link /border [0 0 cf lc and lx and au or{0}{1}ie] rn type

/nametype eq {/dest rn}{/action [/subtype /uri /uri rn] cd}ie /ann pdfmark}if} d /il {/rn e d [/rect [xc yc gb xc xs add yc ys add gb] /subtype /link /border [0 0 0] rn type /nametype eq{/dest rn} {/action [/subtype /uri /uri rn] cd}ie /ann pdfmark} d /xp {[{/z bz 2 div d z 0 r z z rl z neg z rl z neg z neg rl z z neg rl fi ch 1 eq and{fill}if} {bz 0 rl 0 bz rl bz neg 0 rl 0 bz neg rl fi ch 1 eq and{fill}if} {0 -5 r bz 0 rl 0 21 rl bz neg 0 rl 0 -21 rl}]} d /ms {/sm e d wb}d /o {bn()sm bx} d /o {bn()0 sm bx} d /bx {/bt e d bt 2 lt{/ch e d cs 0.8 mul}{11 mul}ie w xo sub mr sub 2 copy gt{e}if pop /hz e d bt 2 eq{fi not{pop()}if ( )e join /ft e d tt /pf t d /mw 1 d /li 1 d /fw ft sw pop d fw hz gt{/hz fw 8 add d}if hz st cvs( )join}{wb ch st cvs( )join}ie l1 hz add xo add mr add w gt{nl}if bt 2 eq{ft es fw neg hm{cs sub}if pd}if bt st cvs join( bx )join bt 2 eq hm and{cs pd}if c1 e join /c1 e d /l1 l1 hz add d /t f d ( ) pd /pf f d bt 2 lt{ya cs .8 mul lt{/ya cs .8 mul d}if} {yb 5 lt{/yb 5 d}if ya 21 lt{/ya 21 d}if}ie /ci 0 d} d /bx {dup 2 eq{e /bz e d}{e /ch e d /bz cs .8 mul d}ie ou {gsave 0 sg xp e get exec stroke grestore}{pop}ie bz 0 r /ms t d}d /sd {fd 4 mul dy add dz nf newpath 0 0 m dx t charpath pathbbox 3 -1 roll sub /dy e d e dup /x1 e d sub wm mul wx dy mul add wm dg mul e div /df e d /dr wx df mul dy mul wm div 2 div d} d /sd {gsave 0 il di mul neg translate il iw atan di 0 eq{neg}if rotate fd 4 mul dy add dz nf dr x1 sub dy 2 div neg m cd vc dx show grestore} d /pt {/tp t d tp{np /pn (tp) d 0 tt neg r th bn np ep et rc zf}if /tp f d} d /rc {/ai 0 d /lg 0 d /bc 0 d /ui 0 d /pf f d /cc 0 d /cc 0 d /dc 10 array d /nr [0 1 9{pop 0}for] d /la ds d /ar 10 array d /tr 10 array d /av 30 array d si /al -1 d /at a0 d at na /ov 9 array d /yo 0 d /co 0 d /io 0 d /hy f d /ph f d /cl -1 d ct sc}d /zf {/fr [0 1 30{pop 0}for] d /sz [0 1 30{pop 0}for] d /fo [0 1 30{pop 0}for] d /sl 0 d /cf 0 d /fn 0 d 0 ts sf}d /qo [[(\234)(\233)(\253\240)(\232)(\273)(\253)][(')(`)(\253\240)(\231)(\273)(\253)]] d /qc [[(\234)(\234)(\240\273)(\233)(\253)(\273)][(')(')(\240\273)(`)(\253)(\273)]] d /hf ef length 2 sub d /hz ez hf get d /hs ey hf get d /fz ez hf 1 add get d /fs ey hf 1 add get d /le il d /ps ez 1 get d /fp ef 1 get d /xo 0 d /yi 0 d /ci 0 d /fp 0 d /ww ts 7 mul d /mf 0 d /ya 0 d /yb 0 d /cs ts d /gs ts d /f0 0 d /ns 0 d /nb 0 d

/n 0 d /c0 [] d /c1 () d /lo 0 d /l1 0 d /lm 0 d /ph 0 d /ec 0 d /lh 0 d /lt 0 d /ch 1 string d /st 16 string d /ca 9 array d /hc (\255) d /hm f d /pf f d /en f d /tb f d /uf f d /sf f d /ae f d /af f d /bp t d /cd f d /pa t d /gl f d /t t d /hf f d /ah f d /sa f d /pb f d /f1 f d /mf f d /ox 0 d /oy 0 d /fy 0 d /eo 0 d /fb 0 d /pl 0 d /bw 0 d /pd -1 d /tp f d /tp f d /th t d /ty 4 d /tn -1 d /fl t d /lb t d /pm 1 d /ms f d /ba f d /bb f d /hl 3 d /hl 6 d /hv 6 d /hs f d /hi 0 d /hi 0 d

/po t d /te f d /lf t d /bo 0 d /sm 1 d /bf 3 d /a1 0 d /a2 0 d /ds 1 d /ql -1 d /cb db d /ct dt d /cl dl d [/creator (html2ps version 1.0 beta4) /author () /keywords () /subject () /title (triple entry accounting) /docinfo pdfmark /nd 1 d /hn [1 1 77{pop (??)}for] d /h0 [()(table of contents)] d /h1 [(0.1\240\240)(introduction)] d /h2 [(0.1.1\240\240)(credits)] d /h3 [(0.2\240\240)(a very brief history of accounting)] d /h4 [(0.2.1\240\240)(single entry)] d /h5 [(0.2.2\240\240)(double entry)] d /h6 [(0.2.3\240\240)(which came first - double entry or the enterprise?)] d /h7 [(0.2.4\240\240)(computing double entry in quick time)] d /h8 [(0.3\240\240)(a slightly less brief history of the signed receipt)] d /h9 [(0.3.1\240\240)(the digital signature and digital cash)] d /h10 [(0.3.2\240\240)(the initial role of a receipt)] d /h11 [(0.3.3\240\240)(the receipt is the transaction)] d /h12 [(0.4\240\240)(the signed receipt as a bookkeeping system)] d /h13 [(0.4.1\240\240)(as single entry)] d /h14 [(0.4.2\240\240)(recovering double entry)] d /h15 [(0.4.3\240\240)(triple entry accounting)] d /h16 [(0.4.4\240\240)(software considerations)] d /h17 [(0.4.5\240\240)(roles of the agents)] d /h18 [(0.5\240\240)( patterns of commerce )] d /h19 [(0.5.1\240\240)( extending the humble invoice )] d /h20 [(0.5.2\240\240)( patterns of transactions )] d /h21 [(0.6\240\240)( the requirements of triple entry accounting )] d /h22 [(0.7\240\240)(conclusion)] d /h23 [(0.7.1\240\240)(drawing in the agents)] d /h24 [(0.7.2\240\240)(solving frauds)] d /h25 [(0.8\240\240)( references )] d /hr [-52 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76]d /hv [1 2 3 2 3 3 3 3 2 3 3 3 2 3 3 3 3 3 2 3 3 2 2 3 3 2]d /cn [8 1 0 4 0 0 0 0 3 0 0 0 5 0 0 0 0 0 2 0 0 0 2 0 0 0]d hr length 0 gt{[/pagemode /useoutlines /docview pdfmark}if /hn 1 d 0 1 hr length 1 sub{ /bn e d [cn bn get dup 0 gt{/count e hv bn get bl ge{neg}if}{pop}ie /dest hr bn get dup abs st cvs cvn e 0 ge{(h)hn st cvs join cvx exec dup 1 get e nf{0 get e join}{pop}ie /hn hn 1 add d}{()}ie /title e dup length 255 gt{0 255 getinterval}if /out pdfmark}for zf /fn fp d ps 0 fs /wc wf{( )}{<a1a1>}ie sw pop d et rc zf /df f d /r1 (http://en.wikipedia.org/wiki/double-entry_book-keeping) d

/r2 (http://www-groups.dcs.st-andrews.ac.uk/~history/mathematicians/pacioli.html) d /r3 (http://www.acsac.org/2001/papers/110.pdf) d /r4 (http://www.financialcryptography.com/mt/archives/000442.html) d /r5 (http://www.shipwright.com/rants/rant_02.html) d /r6 (http://www.systemics.com/docs/sox/overview.html) d /r7 (http://iang.org/papers/ricardian_contract.html) d /r8 (http://ledgerism.net/glt-glr.htm) d /r9 (http://www.ledgerism.net/str.htm) d /r10 (http://iang.org/rants/systemics_psd.html) d /r11 (http://iang.org/papers/mutual_funds.html) d /ts { tables e get /table e d table aload pop /rdesc e d /cdesc e d /tdesc e d tdesc aload pop /capalg e d /caption e d /rules e d /frame e d /nfoot e d /nhead e d /ncol e d /nrow e d /border e d /twid e d /units e d /talign e d /flow e d /clear e d /tclass e d pop pop /w w d /eps 0.1 d /ou f d /pl 1 d /fn ef 21 get d ez 21 get ey 21 get fs 0 1 1{ /pass e d 0 1 nrow{ /irow e d /cells rdesc irow get 6 get d 0 1 ncol{ /icol e d /cell cells icol get d cell 0 ne{ cell aload pop /ang e d /cb e d pop pop pop /dv e d /bot e d /top e d /right e d /left e d /nowrap e d /valign e d /dp e d /align e d /rspan e d /cspan e d /cclass e d /ctype e d /cmax e d /cmin e d /proc e d rspan 0 eq{/rspan nrow irow sub 1 add d}if cspan 0 eq{/cspan ncol icol sub 1 add d}if pass 0 eq cspan 1 eq and pass 1 eq cspan 1 gt and or{ /w 1e5 d /ll w d /ph 1 d ctype 1 eq{() bd}if rc align na at 4 eq{/cd t d /dc dp d /ln 0 d /m1 0 d /m2 0 d}{/cd f d}ie 0 0 m /lm 0 d proc exec bn at 4 eq{ ln array astore cell 15 3 -1 roll put cdesc icol get dup dup 5 get m1 lt{5 m1 put}{5 get /m1 e d}ie dup 6 get m2 lt{6 m2 put}{6 get /m2 e d}ie /lm m1 m2 add d }if /cd f d ang 0 ne{/lm cp e pop neg d}if /thiswid lm left add right add eps add d /oldmin 0 d /oldmax 0 d 0 1 cspan 1 sub{ icol add cdesc e get dup 2 get /oldmax e oldmax add d 1 get /oldmin e oldmin add d }for thiswid oldmax ge{ 0 1 cspan 1 sub{ icol add cdesc e get dup 2 e 2 get oldmax 0 eq {pop thiswid cspan div}{thiswid mul oldmax div}ie

put }for }if nowrap 1 eq{ thiswid oldmin ge{ 0 1 cspan 1 sub{ icol add cdesc e get dup 1 e 1 get oldmin 0 eq {pop thiswid cspan div}{thiswid mul oldmin div}ie put }for }if }{ /w 0 d /ll w d /ph 2 d ctype 1 eq{() es () bd}if 0 0 m /lm 0 d rc proc exec bn /thiswid lm left add right add eps add d thiswid oldmin ge{ 0 1 cspan 1 sub{ icol add cdesc e get dup 1 e 1 get oldmin 0 eq {pop thiswid cspan div}{thiswid mul oldmin div}ie put }for }if }ie ctype 1 eq{() es}if }if }if }for }for }for /tmin 0 d /tmax 0 d 0 1 ncol{ cdesc e get dup 1 get e 2 get 2 copy gt{pop dup}if tmax add /tmax e d tmin add /tmin e d }for twid 0 lt{twid neg iw gt{iw neg}{twid}ie /twid e d}if tdesc 0 twid neg tmin 2 copy lt{e}if pop put tdesc 1 twid neg tmax 2 copy lt{e}if pop put /w w d /ll w d /ou t d /ph 0 d /pl 0 d } d /pt { /pl pl 1 add d tables e get /table e d tm 21 get ts mul be pl 2 ge{save}if /sl sl 1 add d /fn ef 21 get d ez 21 get ey 21 get fs table aload pop /rdesc e d /cdesc e d /tdesc e d tdesc aload pop /capalg e d /caption e d /rules e d /frame e d /nfoot e d /nhead e d /ncol e d /nrow e d /border e d /twid e d /units e d /talign e d /flow e d /clear e d /tclass e d /tmax e d /tmin e d /w w d /xo xo d /mr mr d /ll ll d /lg lg d /ai ai d /bc bc d /nr nr d /ar ar d /tr tr d /ui ui d /ph ph d /a0 a0 d /pf pf d /at at d /av av d /al al d /le le d /la la d talign 0 lt{/talign al 0 gt{av al get}{a0 2 le{a0}{0}ie}ie d}if ph 1 eq ph 2 eq or{ nl ph 1 eq{tmax}{tmin}ie dup xo add lm gt{/lm e xo add d}{pop}ie lm e }{ /ph 3 d /le 1e5 d rc %zf border 0 gt{/border 1 d}if

/twidth 0 d /avail w xo sub d twid 0 eq{0 1 ncol{cdesc e get dup 2 get e 3 get dup 0 gt{div neg dup twid lt {/twid e d}{pop}ie}{pop pop}ie}for}if /twid twid dup 0 lt{neg avail 2 copy gt{e}if pop}{avail mul}ie d /ok t d 0 1 ncol{cdesc e get dup 1 get e 3 get twid mul gt{/ok f d}if}for 0 1 ncol{ cdesc e get dup 1 get /colmin e d dup 3 get /cwid e twid mul d dup tmax avail le{2 get}if tmin avail le tmax avail gt and{ dup 2 get e 1 get dup 3 1 roll sub avail tmin sub mul tmax tmin sub div add }if tmin avail gt{1 get}if 0 e colmin cwid lt ok and{pop cwid}if dup /twidth e twidth add d put }for /ou f d cp tmin twid le{ 0 1 ncol{cdesc e get dup 0 get twidth div twid mul 0 e put}for /twidth twid d }if cp printcap cp e pop sub /caphig e d pop 0 1 1{ /pass e d 0 1 nrow{ /irow e d /cells rdesc irow get 6 get d 0 1 ncol{ /icol e d /cell cells icol get d cell 0 ne{ cell aload pop /ang e d /cb e d pop pop pop /dv e d /bot e d /top e d /right e d /left e d /nowrap e d /valign e d /dp e d /align e d /rspan e d /cspan e d /cclass e d /ctype e d /cmax e d /cmin e d /proc e d rspan 0 eq{/rspan nrow irow sub 1 add d}if cspan 0 eq{/cspan ncol icol sub 1 add d}if /w 0 d 0 1 cspan 1 sub{icol add cdesc e get 0 get /w e w add d}for pass 0 eq rspan 1 eq and pass 1 eq rspan 1 gt and or{ ctype 1 eq{() bd}if /w w left sub right sub d /xo 0 d /eo 0 d si /a0 align d rc align na at 4 eq{ /dc dp d /do 0 d /id 1 d 0 1 dv length 1 sub{dv e get dup do gt{/do e d}{pop}ie}for /lo do dv 0 get sub d /l1 lo d }if 0 0 m /bp t d /fl t d /mf 0 d /fb 0 d proc exec t not{/ci 0 d}if bn 0 fb neg r mf 0 eq{/mf cs d}if cp /thishig e neg bot add top add ci add d pop ang 0 ne{/thishig lm bot add top add d}if cell 16 mf put cell 17 ya put cell 18 thishig put valign 4 eq{ /below thishig ya sub d rdesc irow get dup dup 4 get ya lt {4 ya put}{4 get /ya e d}ie dup 5 get below lt{5 below put}{5 get /below e d}ie /thishig ya below add d }if

ctype 1 eq{()es}if /oldhig 0 d 0 1 rspan 1 sub{ irow add rdesc e get 0 get /oldhig e oldhig add d }for thishig oldhig ge{ 0 1 rspan 1 sub{ irow add rdesc e get dup 0 e 0 get oldhig 0 eq {pop thishig rspan div}{thishig mul oldhig div}ie put }for }if }if }if }for }for }for m rc %zf /thight 0 d /racc 0 d /maxh 0 d /brk 0 d /rbeg nhead nfoot add d 0 1 nrow{ rdesc e get dup 0 get dup /thight e thight add d brk 0 eq{/racc e d}{/racc e racc add d}ie racc maxh gt{/maxh racc d}if 2 get /brk e d }for ph 3 ge{thight caphig add e}if ph 0 eq ph 4 eq or{ /ph 4 d /le le d /ou ou d /yoff 0 d /headsz 0 d 0 1 nhead 1 sub{rdesc e get 0 get headsz add /headsz e d}for /footsz 0 d 0 1 nfoot 1 sub{rdesc e nhead add get 0 get footsz add /footsz e d}for /ahig le bo add mi add d /maxh maxh headsz add footsz add d /thight thight headsz add footsz add d tmin avail gt maxh ahig gt or {/sf avail tmin div dup ahig maxh div gt{pop ahig maxh div}if d /sa t d} {/sf 1 d}ie tclass 1 eq thight le 15 sub gt and {/sa t d le 15 sub thight div dup sf lt{/sf e d}{pop}ie}if sa{sf sf scale /ll ll sf div d /xo xo sf div d /le le sf div d /mr mr sf div d /bo bo sf div d /ahig ahig sf div d}if nhead nfoot add getwid le cp e pop add capalg 0 eq{caphig sub}if bt{f}{dup thight lt thight ahig lt and}ie e headsz sub footsz sub rwid lt or{np}if capalg 0 eq{printcap -8 sp}if cp /ycur e d pop printhead rbeg 1 nrow{/row e d row getwid ycur yoff add rwid sub footsz sub le add 0 lt {nfoot 0 gt{printfoot}if tf np /rbeg irow1 d ba{mi /mi mi sa{sf div}if d mi sp /mi e d}if cp /ycur e d pop /yoff 0 d printhead}if irow1 printrow }for printfoot /row row 1 add d tf 0 ycur yoff add m capalg 1 eq{/eo 0 d si -3 sp printcap}if sf 1 lt{1 sf div dup scale /ll ll sf mul d /xo xo sf mul d /le le sf mul d /mr mr sf mul d /bo bo sf mul d /sa f d}if

/eo 0 d }if }ie /w w d /xo xo d /mr mr d /ll ll d /lg lg d /ai ai d /bc bc d /nr nr d /ar ar d /tr tr d /ui ui d /ph ph d /a0 a0 d /pf pf d /at at d /av av d /al al d /la la d /sl sl 1 sub nn d /cf 0 d /fn 0 d sz sl get fr sl get fs wf not{()f2}if pl 2 ge{ms e restore ms or /ms e d ph 1 eq ph 2 eq or {/lm e d}if ph 3 ge{/ci 0 d nl 0 e neg r}if }if /pl pl 1 sub d /ci 0 d /bp f d /po f d () bm 21 get ts mul be bl %cf cs sf } d /printcap{ capalg 0 ge{ sa{/w w sf div d} {talign 1 eq{/xo xo ll twidth sub 2 div add d}if talign 2 eq{/xo xo ll twidth sub add d}if /w xo twidth add d }ie /xo xo d /ll w xo sub mr sub d /pa f d /fl capalg 0 eq d 1 na bl caption exec bn oa /pa t d }if } d /getwid{ /irow1 e d /irow2 irow1 d /rwid 0 d {rdesc irow2 get dup 0 get rwid add /rwid e d 2 get 0 eq {exit}{/irow2 irow2 1 add d}ie }loop } d /printrow{ /xoff ll twidth pl 2 ge{sf div}if sub talign mul 2 div d /xleft xoff xo add d /irow e d /cells rdesc irow get 6 get d 0 1 ncol{ /icol e d /cell cells icol get d cell 0 ne{ cell aload pop /ang e d /cb e d /cvsize e d /above e d /fontsz e d /dv e d /bot e d /top e d /right e d /left e d /nowrap e d /valign e d /dp e d /align e d /rspan e d /cspan e d /cclass e d /ctype e d /cmax e d /cmin e d /proc e d rspan 0 eq{/rspan nrow irow sub 1 add d}if cspan 0 eq{/cspan ncol icol sub 1 add d}if /width 0 d 0 1 cspan 1 sub{icol add cdesc e get 0 get /width e width add d}for /rhight rdesc irow get 0 get d /hight rhight d 1 1 rspan 1 sub{irow add rdesc e get 0 get /hight e hight add d}for /w xo xoff add width add right sub d ang 0 ne{/w xo xoff add hight add right sub d}if /eo xo xoff add left add d si cf{ gsave cb vc xo xoff add ycur yoff add m 0 hight neg rl width 0 rl 0 hight rl width neg 0 rl fill grestore

}if ctype 1 eq{() bd}if /a0 align d rc at 4 eq{ /dc dp d /id 1 d /do cdesc icol get 5 get d /lo do dv 0 get sub d /l1 lo d }if ang 0 ne{ gsave ang 90 eq {xoff ycur add hight cvsize sub 2 div sub ycur hight sub xoff sub} {xoff ycur sub width add hight cvsize sub 2 div add ycur xoff add}ie translate ang rotate }if valign 3 le{0 ycur yoff add top sub hight cvsize sub valign 1 sub mul 2 div sub m} {0 ycur yoff add top sub above add rdesc irow get 4 get sub m}ie /pa f d /bp t d /fl t d bl proc exec bn ang 0 ne{grestore}if /pa t d ctype 1 eq{() es}if }if /xoff xoff cdesc icol get 0 get add d }for /yoff yoff rhight sub d } d /printhead {0 1 nhead 1 sub{printrow}for} d /printfoot {nhead 1 nhead nfoot add 1 sub{printrow}for} d /tf { ou{rules 2 ge{/yoff 0 d gsave 0 sg [0 1 nhead 1 sub{}for rbeg 1 row 1 sub{}for nhead 1 nhead nfoot add 1 sub{}for]{ /irow e d /xoff ll twidth pl 2 ge{sf div}if sub talign mul 2 div d /cells rdesc irow get 6 get d 0 1 ncol{ /icol e d /cell cells icol get d cell 0 ne{ /rspan cell 6 get d /cspan cell 5 get d rspan 0 eq{/rspan nrow irow sub 1 add d}if cspan 0 eq{/cspan ncol icol sub 1 add d}if /width 0 d 0 1 cspan 1 sub{icol add cdesc e get 0 get /width e width add d}for /rhight rdesc irow get 0 get d /hight rhight d 1 1 rspan 1 sub{irow add rdesc e get 0 get /hight e hight add d}for xo xoff add width add ycur yoff add m 0 hight neg icol cspan add 1 sub ncol lt {cdesc icol 1 add get 4 get dup rules 3 le{1 eq}{pop t}ie {1 eq{0.8}{0.3}ie lw rl cp stroke m}{pop r}ie}{r}ie irow nhead nfoot add 1 sub ne nfoot 0 eq or {irow rspan add 1 sub nrow lt {rdesc irow rspan add get 3 get}{nfoot 0 eq{0}{1}ie}ie dup rules 2 mod 0 eq{1 eq}{pop t}ie {1 eq irow rspan add nhead eq or irow rspan add row eq nfoot 0 gt and or

{0.8}{0.3}ie lw width neg 0 rl cp stroke m}{pop}ie}if }if /xoff xoff cdesc icol get 0 get add d }for /yoff yoff rhight sub d }forall grestore /ms t d }if frame 1 gt{ gsave 1 lw 0 sg xleft ycur m cp bb 0 yoff frame 5 eq frame 7 ge or{rl}{r}ie twidth 0 frame 3 eq frame 4 eq or frame 8 ge or{rl}{r}ie cp bb 0 yoff neg frame 6 ge{rl}{r}ie twidth neg 0 frame 2 eq frame 4 eq or frame 8 ge or{rl}{r}ie closepath stroke grestore /ms t d }if }if } d /tables [[[0 0 0 0 0 -1 0 0 0 4 1 0 0 1 1 {()} -1] [[0 0 0 0 0 0 0][0 0 0 0 0 0 0]] [[0 0 0 0 0 0 [[{()1 sl()wb(from)} 0 0 0 0 1 1 0 (.) 2 0 2.5 2.5 2.5 2.5 0 db 0 ] [{()1 sl()wb(alice )} 0 0 0 0 1 1 0 (.) 2 0 2.5 2.5 2.5 2.5 0 0 0 0 db 0 ] ]] [0 0 0 0 0 0 [[{()1 sl()wb(to)} 0 0 0 0 1 1 0 (.) 2 0 2.5 2.5 2.5 2.5 0 0 0 ] [{()1 sl()wb(bob )} 0 0 0 0 1 1 0 (.) 2 0 2.5 2.5 2.5 2.5 0 0 0 0 db 0 ] ]] [0 0 0 0 0 0 [[{()1 sl()wb(unit)} 0 0 0 0 1 1 0 (.) 2 0 2.5 2.5 2.5 2.5 0 0 0 ] [{()1 sl()wb(euro )} 0 0 0 0 1 1 0 (.) 2 0 2.5 2.5 2.5 2.5 0 0 0 0 db 0 ] ]] [0 0 0 0 0 0 [[{()1 sl()wb(quantity)} 0 0 0 0 1 1 0 (.) 2 0 2.5 2.5 2.5 2.5 0 db 0 ] [{()1 sl()wb(100 )} 0 0 0 0 1 1 0 (.) 2 0 2.5 2.5 2.5 2.5 0 0 0 0 db 0 ] ]] [0 0 0 0 0 0 [[{()1 sl()wb(date)} 0 0 0 0 1 1 0 (.) 2 0 2.5 2.5 2.5 2.5 0 0 0 ] [{()1 sl()wb(2005.12.25 )} 0 0 0 0 1 1 0 (.) 2 0 2.5 2.5 2.5 2.5 0 0 0 0 db 0 ] ]] ]] [[0 0 0 0 0 -1 0 0 0 0 0 0 0 1 1 {()} -1] [[0 0 0 0 0 0 0]] [[0 0 0 0 0 0 [[{()1 sl()wb()i(digital signature)es( )} 0 0 0 0 1 1 0 (.) 2 0 2.5 2.5 2.5 2.5 0 0 0 0 db 0 ] ]] ]] [[0 0 0 0 0 -1 0 0 1 1 0 0 0 9 5 {()} -1]

0 0 0

0 db 0

0 0 db

0 0 0

0 0 db

[[0 0 0 0 0 0 0]] [[0 0 0 0 0 0 [[{()1 sl()wb( )0 pt( )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 [16#99 16#ff 16#ff] 0 ] ]] [0 0 0 0 0 0 [[{()1 sl()wb( )1 pt( )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 [16#99 16#ff 16#ff] 0 ] ]] ]] [[0 0 0 0 0 -1 0 0 1 0 0 0 0 9 5 {()} -1] [[0 0 0 0 0 0 0]] [[0 0 0 0 0 0 [[{()1 sl()wb( )2 p()i(1: an interim receipt)es()ep( )2 al( )2 pt()ea( )} 0 0 0 0 1 1 0 (.) 2 0 10 10 10 10 0 0 0 0 [16#f0 16#f0 16#f0] 0 ] ]] ]] [[0 0 0 0 0 2 0 0.5 0 0 0 0 0 1 1 {()} -1] [[0 0 0 0 0 0 0]] [[0 0 0 0 0 0 [[{()1 sl()wb( )3 pt()} 0 0 0 0 1 1 0 (.) 2 0 15 15 15 15 0 0 0 0 db 0 ] ]] ]] [[0 0 0 0 0 -1 0 0 0 5 1 0 0 1 1 {()} -1] [[0 0 0 0 0 0 0][0 0 0 0 0 0 0]] [[0 0 0 0 0 0 [[{()1 sl()wb( )} 0 0 0 0 1 1 0 (.) 2 0 8 8 2 6 0 0 0 0 db 0 ] [{()}0 0 0 0 1 1 0(.)0 0 8 8 2 6 0 0 0 0 db 0] ]] [0 0 0 0 0 0 [[{()1 sl()wb(from)} 0 0 0 0 1 1 0 (.) 2 0 8 8 2 6 0 0 0 0 db 0 ] [{()1 sl()wb(alice )} 0 0 0 0 1 1 0 (.) 2 0 8 8 2 6 0 0 0 0 db 0 ] ]] [0 0 0 0 0 0 [[{()1 sl()wb(to)} 0 0 0 0 1 1 0 (.) 2 0 8 8 2 6 0 0 0 0 db 0 ] [{()1 sl()wb(bob )} 0 0 0 0 1 1 0 (.) 2 0 8 8 2 6 0 0 0 0 db 0 ] ]] [0 0 0 0 0 0 [[{()1 sl()wb(unit)} 0 0 0 0 1 1 0 (.) 2 0 8 8 2 6 0 0 0 0 db 0 ] [{()1 sl()wb(euro )} 0 0 0 0 1 1 0 (.) 2 0 8 8 2 6 0 0 0 0 db 0 ] ]] [0 0 0 0 0 0 [[{()1 sl()wb(qty)} 0 0 0 0 1 1 0 (.) 2 0 8 8 2 6 0 0 0 0 db 0 ] [{()1 sl()wb(100 )} 0 0 0 0 1 1 0 (.) 2 0 8 8 2 6 0 0 0 0 db 0 ] ]] [0 0 0 0 0 0 [[{()1 sl()wb(com)} 0 0 0 0 1 1 0 (.) 2 0 8 8 2 6 0 0 0 0 db 0 ] [{()1 sl()wb(pens )} 0 0 0 0 1 1 0 (.) 2 0 8 8 2 6 0 0 0 0 db 0 ] ]] ]] [[0 0 0 0 0 -1 0 0 0 0 0 0 0 1 1 {()} -1] [[0 0 0 0 0 0 0]] [[0 0 0 0 0 0 [[{()1 sl()wb()i(alice's sig)es( )} 0 0 0 0 1 1 0 (.) 2 0 2.5 2.5 2.5 2.5 0 0 0 0 db 0 ] ]] ]] [[0 0 0 0 0 -1 0 0 1 1 0 0 0 9 5 {()} -1] [[0 0 0 0 0 0 0]]

[[0 0 0 0 0 0 [[{()1 sl()wb( )5 pt( )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 [16#ff 16#bb 16#ff] 0 ] ]] [0 0 0 0 0 0 [[{()1 sl()wb( )6 pt( )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 [16#ff 16#bb 16#ff] 0 ] ]] ]] [[0 0 0 0 0 -1 0 0 0 5 1 0 0 1 1 {()} -1] [[0 0 0 0 0 0 0][0 0 0 0 0 0 0]] [[0 0 0 0 0 0 [[{()1 sl()wb(user's cheque)} 0 0 0 0 1 1 0 (.) 2 0 2.5 2.5 2.5 2.5 0 0 0 0 db 0 ] [{()1 sl()wb( )7 pt( )} 0 0 0 0 1 1 0 (.) 2 0 2.5 2.5 2.5 2.5 0 0 0 0 db 0 ] ]] [0 0 0 0 0 0 [[{()1 sl()wb(from)} 0 0 0 0 1 1 0 (.) 2 0 2.5 2.5 2.5 2.5 0 ] [{()1 sl()wb(alice )} 0 0 0 0 1 1 0 (.) 2 0 2.5 2.5 2.5 2.5 0 0 0 0 db 0 ] ]] [0 0 0 0 0 0 [[{()1 sl()wb(to)} 0 0 0 0 1 1 0 (.) 2 0 2.5 2.5 2.5 2.5 0 ] [{()1 sl()wb(bob )} 0 0 0 0 1 1 0 (.) 2 0 2.5 2.5 2.5 2.5 0 0 0 0 db 0 ] ]] [0 0 0 0 0 0 [[{()1 sl()wb(unit)} 0 0 0 0 1 1 0 (.) 2 0 2.5 2.5 2.5 2.5 0 ] [{()1 sl()wb(euro )} 0 0 0 0 1 1 0 (.) 2 0 2.5 2.5 2.5 2.5 0 0 0 0 db 0 ] ]] [0 0 0 0 0 0 [[{()1 sl()wb(quantity)} 0 0 0 0 1 1 0 (.) 2 0 2.5 2.5 2.5 0 db 0 ] [{()1 sl()wb(100 )} 0 0 0 0 1 1 0 (.) 2 0 2.5 2.5 2.5 2.5 0 0 0 0 db 0 ] ]] [0 0 0 0 0 0 [[{()1 sl()wb(date)} 0 0 0 0 1 1 0 (.) 2 0 2.5 2.5 2.5 2.5 0 ] [{()1 sl()wb(2005.04.10 )} 0 0 0 0 1 1 0 (.) 2 0 2.5 2.5 2.5 2.5 0 0 0 0 db 0 ] ]] ]] [[0 0 0 0 0 -1 0 0 0 0 0 0 0 1 1 {()} -1] [[0 0 0 0 0 0 0]] [[0 0 0 0 0 0 [[{()1 sl()wb()i(ivan's signature)es( )} 0 0 0 0 1 1 0 (.) 2 0 2.5 2.5 2.5 2.5 0 0 0 0 db 0 ] ]] ]] [[0 0 0 0 0 -1 0 0 1 1 0 0 0 9 5 {()} -1] [[0 0 0 0 0 0 0]] [[0 0 0 0 0 0 [[{()1 sl()wb( )8 pt( )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 [16#99 16#ff 16#ff] 0 ] ]] [0 0 0 0 0 0 [[{()1 sl()wb( )9 pt( )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 [16#99 16#ff 16#ff] 0 ] ]] ]] [[0 0 0 0 0 -1 0 0 1 0 0 0 0 9 5 {()} -1] [[0 0 0 0 0 0 0]]

0 0 0 0 db

0 0 0 db 0

0 0 0 0 db

2.5 0 0 0

0 0 0 0 db

[[0 0 0 0 0 0 [[{()1 sl()wb( )2 p()i(2: a signed receipt)es()ep( )2 al()10 pt()ea( )} 0 0 0 0 1 1 0 (.) 2 0 10 10 10 10 0 0 0 0 [16#f0 16#f0 16#f0] 0 ] ]] ]] [[0 0 0 0 0 2 0 0.5 0 0 0 0 0 1 1 {()} -1] [[0 0 0 0 0 0 0]] [[0 0 0 0 0 0 [[{()1 sl()wb( )11 pt()} 0 0 0 0 1 1 0 (.) 2 0 15 15 15 15 0 0 0 0 db 0 ] ]] ]] ] d 0 1 12{ts}for rc zf /ba f d /bo 0 d bs /ur (/tmp/page2ps2) d /ti (triple entry accounting) d /au () d /df f d /me [()] d /cb db d /ct [16#00 16#00 16#00] d /cl [16#00 16#00 16#00] d /cl -1 d ct sc pt /ba /ur /ti /au /df /me f d /bo 0 d bs (/tmp/page2ps2) d (triple entry accounting) d () d f d [()] d

np rc zf ()1 sl()wb 0 sn( )br()2 al( )un()i(work - in - progress)es()nu( )br( )+2 bf add fz()bd( triple entry accounting )es()ef( )br( )+1 bf add fz( )br( 2005 )br()ea( ian grigg)br( )i(systemics, inc.)es()br( )ef(

)2 al( )bd()4 fz($revision: 1.7 $)es()es()br()2 fz($date: 2005/12/25 23:04:21 $)es( )ea( )br()br()bq( )0 p( )bd(abstract: )es( the digitally signed receipt, an innovation from financial cryptography, presents a challenge to classical double entry bookkeeping. rather than compete, the two melded together form a stronger system. expanding the usage of accounting into the wider domain of digital cash gives 3 local entries for each of 3 roles, the result of which i call )i(triple entry accounting)es(. )ep(

)0 p( this system creates bullet proof accounting systems for aggressive uses and users. it not only lowers costs by delivering reliable and supported accounting, it makes much stronger governance possible in a way that positively impacts on the future needs of corporate and public accounting. )ep( )qb()br()br(

)0 2 0 h()wb 52 sn()0 51 1 a(introduction)wb 1 sn()51 0 tn tl()ec /af f d()eh( )0 p(this paper brings together financial cryptography innovations such as the signed receipt with the standard accountancy techniques of double entry bookkeeping.)ep( )0 p(the first section presents a brief backgrounder to explain the importance of double entry bookkeeping. it is aimed at the technologist, and accountancy professionals may skip this. the second section presents how the signed receipt arises and why it challenges double entry bookkeeping.)ep( )0 p(the third section integrates the two together and the conclusion attempts to predict wider ramifications into governance issues.)ep( )0 3 1 h()wb 53 sn()0 51 1 a(credits)wb 2 sn()51 0 tn tl()ec /af f d()eh( )0 p(this paper benefitted from comments by graeme burnett and todd boyle )2 fz([)0 36 1 a(tb)wb 3 sn()36 0 tn tl()ec /af f d(])es(.)ep( )0 2 2 h()wb 54 sn()0 51 1 a(a)wb 4 sn( very brief history of accounting)51 0 tn tl()ec /af f d()eh( )0 p(accounting or accountancy is these days thought to go back to the genesis of writing; the earliest discovered texts have been deciphered as simple lists of the counts of animal and food stock. the sumerians of mesopotamia, around 5000 years ago, used )i(cuneiform)es( or wedge shaped markings as a base-60 number form, which we still remember as seconds and minutes, and squared, as the degrees in a circle. mathematics and writing themselves may well have been derived from the need to add, subtract and indeed account for the basic assets and stocks of early society.)ep(

)0 3 3 h()wb 55 sn()0 51 1 a(single)wb 5 sn( entry)51 0 tn tl()ec /af f d()eh( )0 p(single entry bookkeeping is how 'everyone' would do accounting: start a list, and add in entries that describe each asset. a more advanced arrangement would be to create many lists. each list or 'book' would represent a category, and each entry would record a date, an amount, and perhaps a comment. to move an asset around, one would cross it off from one list and enter it onto to another list.)ep( )0 p(very simple, but it was a method that was fraught with the potential for errors. worse, the errors could be either accidental, and difficult to track down and repair, or they could be fraudulent. as each entry or each list stood alone, there was nothing to stop a bad employee from simply adding more to the list; even when discovered there was nothing to say whether it was an honest mistake, or a fraud.)ep( )0 p(accounting based on single entry bookkeeping places an important limitation on the trust of the books. likely, only the owner's family or in times long past, his slaves could be trusted with the enterprise's books, leading to a supportive influence on extended families or slavery as economic enterprises.)ep( )0 3 4 h()wb 56 sn()0 51 1 a(double)wb 6 sn( entry)51 0 tn tl()ec /af f d()eh( )0 p()r1 2 a(double entry bookkeeping)ea( adds an additional important property to the accounting system; that of a clear strategy to identify errors and to remove them. even better, it has a side effect of clearly firewalling errors as )i(either)es( accident )i(or)es( fraud.)ep( )0 p(this property is enabled by means of three features, being the separation of all books into two groups or sides, called )i(assets)es( and )i(liabilities)es(, the redundancy of the duplicative )i(double entries)es( with each entry having a match on the other side, and the )i(balance sheet equation)es(, which says that the sum of all entries on the asset side must equal the sum of all entries on the liabilities side.)ep( )0 p(a correct entry must refer to its counterparty, and

its counterpart entry must exist on the other side. an entry in error might have been created for perhaps fraudulent reasons, but to be correct at the local level, it must refer to its counterparty book. if not, it can simply be eliminated as an incomplete entry. if it does refer, the existance of the other entry can be easily confirmed, or indeed recreated depending on the sense of it, and the loop is thus closed.)ep( )0 p(previously, in single entry books, the fraudster simply added his amount to a column of choice. in double entry books, that amount has to come from somewhere. if it comes from nowhere, it is eliminated above as an accidental error, and if it comes from somewhere in particular, that place is identified. in this way, fraud leaves a trail; and its purpose is revealed in the other book because the value taken from that book must also have come from somewhere.)ep( )0 p(this then leads to an audit strategy. first, ensure that all entries are complete, in that they refer to their counterpart. second, ensure that all movements of value make sense. this simple strategy created a record of transactions that permitted an accountancy of a business, without easily hiding frauds in the books themselves.)ep( )0 3 5 h()wb 57 sn()0 51 1 a(which)wb 6 sn( came first - double entry or the enterprise?)51 0 tn tl()ec /af f d()eh( )0 p(double entry bookkeeping is one of the greatest discoveries of commerce, and its significance is difficult to overstate. historians think it to have been invented around the 1300s ad, although there are suggestions that it existed in some form or other as far back as the greek empire. the earliest strong evidence is a 1494 treatise on mathematics by the venetian friar )r2 2 a(luca pacioli)ea( )2 fz([)0 37 1 a(lp)wb 7 sn()37 0 tn tl()ec /af f d(])es(. in his treatise, pacioli documented many standard techniques, including a chapter on accounting. it was to become the basic text in double entry bookkeeping for many a year.)ep( )0 p(double entry bookkeeping arose in concert with the arisal of modern forms of enterprise as pioneered by the venetian merchants. historians have debated whether double entry was invented to support the dramatically expanded demands of the newer ventures then taking place surrounding the expansion of city states such as venice or whether double entry was an enabler of this expansion.)ep( )0 p(our experiences weigh in on the side of enablement.

i refer to the experiences of digital money issuers. our own first deployment of a system was with a single entry bookkeeping system. its failure rate even though coding was tight was such that it could not sustain more than 20 accounts before errors in accounting crept in and the system lost cohesion. this occurred within weeks of initial testing and was never capable of being fielded. the replacement double entry system was fielded in early 1996 and has never lost a transaction \201although there have been some close shaves )2 fz([)0 38 1 a(ig1)wb 8 sn()38 0 tn tl()ec /af f d(])es(\202.)ep( )0 p(likewise, the company digicash bv of the netherlands fielded an early digital cash system into a bank in the usa. during its testing period, the original single entry accounting system had to be field replaced with a double entry system for the same reason - errors crept in and rendered the accounting underneath the digital cash system unreliable.)ep( )0 p(another major digital money system lasted for many years on a single entry accounting system. yet, the company knew it was running on luck. when a cracker managed to find a flaw in the system, an overnight attack allowed the creation of many millions of dollars worth of value. as this was more than the contractual issue of value to date, it caused dramatic contortions to the balance sheet, including putting it in breach of its user contract and at dire risk of a 'bank run'. luckily, the cracker deposited the created value into the account of an online game that failed shortly afterwards, so the value was able to be neutralised and monetarily cleansed, without disclosure, and without scandal.)ep( )0 p(in the opinion of this author at least, single entry bookkeeping is incapable of supporting any enterprise more sophisticated than a household. given this, i suggest that evolution of complex enterprises required double entry as an enabler.)ep( )0 3 6 h()wb 58 sn()0 51 1 a(computing)wb 6 sn( double entry in quick time)51 0 tn tl()ec /af f d()eh( )0 p(double entry has always been the foundation of accounting systems for computers. the capability to detect, classify and correct errors is even more important to computers than it is to humans, as there is no luxury of human intervention; the distance between the user and the bits and bytes is far greater than the distance between the bookkeeper and the ink marks on his ledgers.)ep( )0 p(how double entry is implemented is a subject in and of itself. computer science introduces concepts such

as )i(transactions)es(, which are defined as units of work that are )i(atomic)es(, )i(consistent)es(, )i(isolated)es(, and )i(durable)es( \201or acid for short\202. the core question for computer scientists is how to add an entry to the assets side, then add an entry to the liabilities side, and not crash half way through this sequence. or even worse, have another transaction start half way through. this makes more sense when considered in the context of the millions of entries that a computer might manage, and a very small chance that something goes wrong; eventually something does, and computers cannot handle errors of that nature very well.)ep( )0 to as we p(for the most part, these concepts simply reduce "how do we implement double entry bookkeeping" ? this question is well answered in the literature, do no more than mention it here.)ep(

)0 2 7 h()wb 59 sn()0 51 1 a(a)wb 9 sn( slightly less brief history of the signed receipt)51 0 tn tl()ec /af f d()eh( )0 p(recent advances in financial cryptography have provided a challenge to the concept of double entry bookkeeping. the digital signature is capable of creating a record with some strong degree of reliabilty, at least in the senses expressed by acid, above. a digital signature can be relied upon to keep a record safe, as it will fail to verify if any details in the record are changed. )0 p( )0 p(if we can assume that the the record was originally created correctly, then later errors are revealed, both of an accidental nature and of fraudulent intent. \201computers very rarely make accidental errors, and when they do, they are most normally done in a clumsy fashion more akin to the inkpot being spilt than a few numbers.\202 in this way, any change to a record that makes some sort of accounting or semantic sense is almost certainly an attempt at fraud, and a digital signature makes this obvious.)ep( )0 3 8 h()wb 60 sn()0 51 1 a(the)wb 10 sn( digital signature and digital cash)51 0 tn tl()ec /af f d()eh( )0 p(a digital signature gives us a particular property, to whit:)ep( )bq()i("at a given point in time, this information was seen and marked by the signing computer.")es()qb( )0 p(there are several variants, with softer and harder claims to that property. for example, )i(message digests)es( with

)i(entanglement)es( form one simple and effective form of signature, and )i(public key cryptosystems)es( provide another form where signers hold a private key and verifiers hold a public key )2 fz([)0 39 1 a(mb)wb 11 sn()39 0 tn tl()ec /af f d(])es(. there are also many ways to attack the basic property. in this essay i avoid comparisons, and assume the basic property as a reliable mark of having been seen by a computer at some point in time.)ep( )0 p(digital signatures then represent a new way to create reliable and trustworthy entries, which can be constructed into accounting systems. at first it was suggested that a variant known as the )i(blinded signature)es( would enable digital cash )2 fz([)0 40 1 a(dc)wb 12 sn()40 0 tn tl()ec /af f d(])es(. then, )i(certificates)es( would circulate as rights or contracts, in much the same way as the share certificates of old and thus replace centralised accounting systems )2 fz([)0 41 1 a(rah)wb 13 sn()41 0 tn tl()ec /af f d(])es(. these ideas took financial cryptography part of the way there. although they showed how to strongly verify each transaction, they stopped short of placing the the digital signature in an overall framework of accountancy and governance. a needed step was to add in the redundancy implied in double entry bookkeeping in order to protect both the transacting agents and the system operators from fraud.)ep( )0 3 9 h()wb 61 sn()0 51 1 a(the)wb 9 sn( initial role of a receipt)51 0 tn tl()ec /af f d()eh( )4 pt( )0 p(designs that derived from the characteristics of the internet, the capabilities of cryptography and the needs of governance led to the development of the )i(signed receipt)es( )2 fz([)0 42 1 a(gh)wb 14 sn()42 0 tn tl()ec /af f d(])es(. in order to develop this concept, let us assume a simple three party payment system, wherein each party holds an authorising key which can be used to sign their instructions. we call these players )i(alice)es(, )i(bob)es( \201two users\202 and )i(ivan)es( \201the issuer\202 for convenience.)ep(

)0 p(when alice wishes to transfer value to bob in some unit or contract managed by ivan, she writes out the payment instruction and signs it digitally, much like a cheque is dealt with in the physical world. she sends this to the server, ivan, and he presumably agrees and does the transfer in his internal set of books. he then issues a receipt and signs it with his signing key. as an important part of the protocol, ivan then reliably delivers the signed receipt to both alice and bob, and they can update their internal books accordingly.)ep( )0 3 10 h()wb 62 sn()0 51 1 a(the)wb 15 sn( receipt )i(is)es( the transaction)51 0 tn tl()ec /af f d()eh( )0 p(our concept of digital value sought to eliminate as many risks as possible. this was derived simply from one of the high level requirements, that of being extremely efficient at issuance of value. efficiency in digital issuance is primarily a function of support costs, and a major determinant of support costs is the costs of fraud and theft.)ep( )0 p(one risk that consistently blew away any design for efficient digital value at reasonable cost was the risk of )i(insider fraud)es(. in our model of many users and a single centralised server, the issuers of the unit of digital value \201as signatory to the contract\202 and any governance partners such as the server operators are powerful candidates for insider fraud. events over the last few years such as the mutual funds and stockgate scandals are canonical cases of risks that we decided to address.)ep( )12 pt( )0 p(in order to address the risk of insider fraud, the written receipt was historically introduced as being a primary source of evidence. mostly forgotten to the buying public these days, the purpose of a written receipt in normal retail trade is not to permit returns and complaints by the customer, but rather to engage her in a protocol of documentation that binds the shop attendant into safekeeping of the monies. a good customer will notice fraud by the shop attendant and warn the owner to look out for the monies identified by the receipt; the same story applies to the invention of the cash till or register, which was originally

just a box separating the owner's takings from the monies in the shop attendant's pockets. we extend this primary motive into the digital world by using a signed receipt to bind the issuer into a governance protocol with the users.)ep( )0 p(we also go several steps further forward. firstly, to achieve a complete binding, alice's original authorisation is also included within the record. the receipt then includes all the evidence of both the user's intention and the server's action in response, and it now becomes a )i(dominating record)es( of the event. this then means that the most efficient record keeping strategy is to drop all prior records and keep safe the signed receipt.)ep( )0 p(this domination effects both the issuer and the user, and allows us to state the following principle:)ep( )bq()i(the user and the issuer hold the same information.)es()qb( )0 p(as the signed receipt is delivered from issuer to both users, all three parties hold the same dominating record for each event. this reduces support costs by dramatically reducing problems caused by differences in information.)ep( )0 p(secondly, we bind a signed contract of issuance known as a )i(ricardian contract)es( into the receipt )2 fz([)0 43 1 a(ig2)wb 16 sn()43 0 tn tl()ec /af f d(])es(. this invention relates a digitally signed document securely to the signed receipt by means of a unique identifier called a )i(message digest)es(, again provided by cryptography. it provides strong binding for the unit of account, the nature of the issue, the terms, conditions and promises being made by the issuer, and of course the identity of the issuer.)ep( )0 p(finally, with these enabling steps in place, we can now introduce the principle:)ep( )bq()i(the receipt )es(is)i( the transaction.)es()qb( )0 p(within the full record of the signed receipt, the user's intention is expressed, and is fully confirmed by the server's response. both of these are covered by digital

signatures, locking these data down. a reviewer such as an auditor can confirm the two sets of data, and can verify the signatures.)ep(

)0 2 11 h()wb 63 sn()0 51 1 a(the)wb 15 sn( signed receipt as a bookkeeping system)51 0 tn tl()ec /af f d()eh( )0 p(the principle of the receipt as the transaction has become sacrosact over time. in our client software, the principle has been hammered into the design consistently, resulting in a simplified accounting regime, and delivering a high reliability. issues still remain, such as the loss of receipts and the counting of balances by the client side software, but these become reasonably tractable once the goal of receipts as transactions is placed paramount in the designer's mind.)ep( )0 3 12 h()wb 64 sn()0 51 1 a(as)wb 17 sn( single entry)51 0 tn tl()ec /af f d()eh( )0 p(in order to calculate balances on a related set of receipts, or to present a transaction history, a book would be constructed on the fly from the set. this amounts to using the signed receipt as a basis for single entry bookkeeping. in effect, the bookkeeping is derived from the raw receipts, and this raises the question as to whether to keep the books in place.)ep( )0 p(the principles of relational databases provide guidance here. the )i(fourth normal form)es( directs that we store the primary records, in this case the set of receipts, and we construct derivative records, the accounting books, on the fly )2 fz([)0 44 1 a(4nf)wb 18 sn()44 0 tn tl()ec /af f d(])es(.)ep( )0 3 13 h()wb 65 sn()0 51 1 a(recovering)wb 19 sn( double entry)51 0 tn tl()ec /af f d()eh( )0 p(similar issues arise for ivan the issuer. the server has to accept each new transaction on the basis of the available balance in the effected books; for this reason ivan needs those books to be available efficiently. due to the greater number of receipts and books \201one for each user account\202, both receipts and books will tend to exist, in direct contrast to fourth normal form. a meld between relationally sound sets of receipts

and double entry books comes to assist here.)ep( )0 p(alice and bob both are granted a book each within the server's architecture. as is customary, we place those books on the liabilities side. receipts then can be placed in a separate single book and this could be logically placed on the assets side. each transaction from alice to bob now has a logical contra entry, and is then represented in 3 places within the accounts of the server. yet, the assets side remains in fourth normal form terms as the liabilities entries are derived, each pair from one entry on the assets side.)ep( )0 p(by extension, a more sophisticated client-side software agent, working for alice or bob, could employ the same techniques. at this extreme, entries are now in place in three separate locations, and each holding potentially three records.)ep( )0 3 14 h()wb 66 sn()0 51 1 a(triple)wb 20 sn( entry accounting)51 0 tn tl()ec /af f d()eh( )0 p(the digitally signed receipt, with the entire authorisation for a transaction, represents a dramatic challenge to double entry bookkeeping at least at the conceptual level. the cryptographic invention of the digital signature gives powerful evidentiary force to the receipt, and in practice reduces the accounting problem to one of the receipt's presence or its absence. this problem is solved by sharing the records - each of the agents has a good copy.)ep( )0 p(in some strict sense of relational database theory, double entry book keeping is now redundant; it is normalised away by the fourth normal form. yet this is more a statement of theory than practice, and in the software systems that we have built, the two remain together, working mostly hand in hand.)ep( )0 p(which leads to the pairs of double entries connected by the central list of receipts; three entries for each transaction. not only is each accounting agent led to keep three entries, the natural roles of a transaction are of three parties, leading to three by three entries.)ep( )0 p(we term this )i(triple entry bookkeeping)es(. although the digitally signed receipt dominates

in information terms, in processing terms it falls short. double entry book keeping fills in the processing gap, and thus the two will work better together than apart. in this sense, our term of triple entry bookkeeping recommends an advance in accounting, rather than a revolution.)ep( )0 3 15 h()wb 67 sn()0 51 1 a(software)wb 21 sn( considerations)51 0 tn tl()ec /af f d()eh( )0 p(the precise layout of the entries in software and data terms is not settled, and may ultimately become one of those ephemeral )i(implementation issues)es(. the signed receipts may form a natural asset-side contra account, or they may be a separate non-book list underlying the bookkeeping system and its two sides.)ep( )0 p(auditing issues arise where construction of the books derives from the receipts, and normalisation issues arise when a receipt is lost. these are issues for future research.)ep( )0 p(likewise, it is worth stating that the technique of signing receipts works both with private key signatures and also with entanglement message digest signatures; whether the security aspects of these techniques is adequate to task is dependent on the business environment.)ep( )0 3 16 h()wb 68 sn()0 51 1 a(roles)wb 22 sn( of the agents)51 0 tn tl()ec /af f d()eh( )0 p(it will be noted that the above design of triple entry bookkeeping assumed that alice and bob were agents of some independence. this was made possible, and reflected the usage of the system as a digital cash system, and not as a classical accounting system.)ep( )0 p(far from reducing the relevance of this work to the accounting profession, it introduces digital cash as an alternate to corporate bookkeeping. if an accounting system for a corporation or other administrative entity is recast as a system of digital cash, or )i(internal money)es(, then experience shows that benefits accrue to the organisation.)ep( )0 p(although the core of the system looks exactly like an accounting system, each department's books are pushed out as digital cash accounts. departments no longer work so much with budgets

as have control over their own corporate money. fundamental governance control is still held within the accounting department by dint of their operation of the system, and by the limited scope of the money as only being usable within the organisation; the accounting department might step in as a )i(market maker)es(, exchanging payments in internal money for payments in external money to outside suppliers.)ep( )0 p(we have operated this system on a small scale. rather than be inefficient on such a small scale, the system has generated dramatic savings in coordination. no longer are bills and salaries paid using conventional monies; many transactions are dealt with by internal money transfers and at the edges of the corporation, formal and informal agents work to )i(exchange)es( between internal money and external money. paperwork reduces dramatically, as the records of the money system are reliable enough to quickly resolve questions even years after the event.)ep( )0 p(the innovations present in internal money go beyond the present paper, but suffice to say that they answer the obvious question of why this design of triple entry accounting sprung from the world of digital cash, and has relevence back to the corporate world.)ep( )0 2 17 h()wb 69 sn()0 51 1 a()wb 23 sn( patterns of commerce )51 0 tn tl()ec /af f d( )eh( )0 p(todd boyle looked at a similar problem from the point of view of small business needs in an internet age, and reached the same conclusion - triple entry accounting )2 fz([)0 45 1 a(1)wb 24 sn()45 0 tn tl()ec /af f d(])es(. his starting premises were that:)ep( )4 ol()0 p()-1 li( the major need is not accounting or payments, per se, but patterns of exchange - complex patterns of trade; )ep()0 p()-1 li( small businesses could not afford large complex systems that understood these patterns; )ep()0 p()-1 li( they would not lock themselves into proprietary frameworks;)ep()lo( )0 p(from those foundations, boyle concluded that therefore what is needed is a shared access repository that provides arms-length access. fundamentally, this repository is akin to the classic double-entry accounting ledger of transaction rows \201"glt" for general ledger - transactions\202, yet its entries are dynamic and shared.)ep( )0 p(simple examples will help. when alice forms a transaction, she enters it into her software.

every glt transaction requires naming her external counterparty, bob. when she posts the transaction, her software stores it in her local glt and also submits it to the shared repository service's glt.)ep( )0 p(the shared transaction repository \201"str"\202 then forwards the transaction on to bob. both bob and alice are now expected to store the handle to the transaction as an index or stub, and the str then stores the entire transaction.)ep( )0 p(boyle's ideas are logically comparable to grigg and howland's, although they arive from different directions \201the str is grigg's ivan, above\202 and are not totally equivalent. where the latter limited themselves to payments, the accuracy of amounts, and protection with hard cryptographic shells, boyle looked at wider patterns of transactions, and showed that the str could mediate these transactions, if the core shared data could be extracted and made into a single shared record. boyle's focus was on the economic substance of the transaction.)ep( )0 3 18 h()wb 70 sn( )0 51 1 a()wb 25 sn( extending the humble invoice )51 0 tn tl()ec /af f d( )eh( )0 p(imagine a simple invoicing procedure. alice creates an invoice and posts it to her software \201glt\202. as she has named bob, the glt automatically posts it to ivan, the str, and he forwards it to bob. at this point bob has a decision to make, accept or reject. assuming acceptance, his software can then respond by sending an acceptance message to ivan. the str now assembles an accepted invoice record to replace the earlier speculative invoice record and posts that threeways. at some related time \201to do with payment policy\202 bob also posts a separate transaction to pay for the invoice. this could operate in much the same way as a separate transaction, linking directly to the original invoice.)ep( )0 p(now, as the payment links back, and the invoice is a live transaction within the three entries in the three accounting systems, it is possible for a new updated invoice record to refer back to the payment activity. when the payment clears, the new record can again replace the older unpaid copy and promulgate to all three parties.)ep( )0 3 19 h()wb 71 sn( )0 51 1 a()wb 26 sn( patterns of transactions )51 0 tn tl()ec /af f d( )eh(

)0 p(software could be written to facilitate and monitor this flow and similar flows. if the payments system is sufficiently flexible, and integrated with the needs of the users, if might be possible to merge the above invoice with the payment itself, at the receipts level. seen in this light, the signed receipt of ricardo is simply the smallest and simplest pattern within the more general set of patterns. we could then suggest that the narrow principle of )i(the receipt )un(is)nu( the transaction)es( could be extended into )i(the invoice )un(is)nu( the transaction)es(.)ep( )0 p(a particular transaction in business almost never stands alone. they come in patterns. for example offers and acceptances form a wider transaction but seldom encapsulate the entire fulfillment and payment cycle. even if there has been a payment accompanying a po message, the customer then waits for fulfillment.)ep( )0 p(there is a large body of science and literature built around these )i(patterns of transactions)es(. these have been adopted by the business process workgroup of ebxml and other standards bodies, where they are called "commercial transactions." where however the present work distinguishes itself is in breaking down these transactions into the atomic elements. it is to that we now turn.)ep( )0 2 20 h()wb 72 sn( )0 51 1 a()wb 27 sn( the requirements of triple entry accounting )51 0 tn tl()ec /af f d( )eh( )0 p(the implementation of triple entry accounting will in time evolve to support patterns of transactions. what has become clear is that double entry does not sufficiently support these patterns, as it is a framework that breaks down as soon as the number of parties exceeds one. yet, even as double entry is "broken" on the net and unable to support commercial demands, triple entry is not widely understood, nor are the infrastructure requirements that it imposes well recognised.)ep( )0 p(below are the list of requirements that we believed to be important )2 fz([)0 46 1 a(2)wb 28 sn()46 0 tn tl()ec /af f d(])es( )2 fz([)0 47 1 a(3)wb 29 sn()47 0 tn tl()ec /af f d(])es(.)ep( )0 p()bd(1. strong psuedonymity, at least)es(. as there are many cycles in the patterns, the system must support a clear relationship of participants. at the minimum this requires a nymous architecture of the nature of ricardo

or aads. \201this requirement is very clear, but space prevents any discussion of it.\202)ep( )0 p()bd(2. entry signing)es(. in order to neutralise the threats to and by the parties, a mechanism that freezes and confirms the basic data is needed. this is signing, and we require that all entries are capable of carrying digital signatures \201see 1, above, which suggests public key signatures\202.)ep(

)0 p()bd(3. message passing)es(. the system is fundamentally one of message passing, in contrast to much of the net's connection based architecture. boyle recognised early on that a critical component was the generic message passing nature, and systemics proposed and built this into ricardo over the period 2001-2004 )2 fz([)0 48 1 a(4)wb 30 sn()48 0 tn tl()ec /af f d(])es(.)ep( )0 p()bd(4. entry enlargement and migration)es(. each new version of a message coming in represents an entry that is either to be updated or added. as each message adds to a prior conversation, the stored entry needs to enlarge and absorb the new information, while preserving the other properties.)ep( )0 p()bd(5. local entry storage and reports)es(. the persistent saving and responsive availability of entries. in practice, this is the classical accounting general ledger, at least in storage terms. it needs to bend somewhat to handle much more flexible entries, and its report capabilities become more key as they conduct instrinsic reconciliation on a demand or live basis.)ep( )0 p()bd(6. integrated hard payments)es(. trade can only be as efficient as the payment. that means that the payment must be at least as efficient as every other part; which in practice means that a payment system should be built-in at the infrastructure level. c.f., ricardo.)ep( )0 p()bd(7 integrated application-level messaging)es(. as distinct to the messaging at the lower protocol levels \2011 above\202, there is a requirement for alice and bob to be able to communicate. that is because the vast majority of the patterns turns around the basic communications of the agents. there is no point in establishing a better payment and invoice mechanism than the means of communication and negotiation. this concept is perhaps best seen

in the swift system which is a messaging system, first and foremost, to deliver instructions for payments.)ep( )0 2 21 h()wb 73 sn()0 51 1 a(conclusion)wb 21 sn()51 0 tn tl()ec /af f d()eh( )0 p(double entry bookkeeping provides evidence of intent and origin, leading to strategies for dealing with errors of accident and fraud. the financial cryptography invention of the signed receipt provides the same benefits, and thus challenges the 800 year reign of double entry. indeed, in evidentiary terms, the signed receipt is more powerful than double entry records due to the technical qualities of its signature.)ep( )0 p(there remain some weaknesses in strict comparison with double entry bookkeeping. firstly, in the ricardo instantiation of triple entry accounting, the receipts themselves may be lost or removed, and for this reason we stress as a principle that )i(the entry )un(is)nu( the transaction)es(. this results in three active agents who are charged with securing the signed entry as their most important record of transaction.)ep( )0 p(secondly, the software ramifications of the triple entry system that are less convenient than that offered by double entry bookkeeping. for this reason, we expand the information held in the receipt into a set of double entry books; in this way we have the best of both worlds on each node: the evidentiary power of the signed entries and the convenience and local crosschecking power of the double entry concept.)ep( )0 p(both of these imperitives meld signed receipts in with double entry bookkeeping. as we end up with a logical arrangement of three by three entries, we feel the term )i(triple entry bookkeeping)es( is useful to describe the advance on the older form.)ep( )0 3 22 h()wb 74 sn()0 51 1 a(drawing)wb 31 sn( in the agents)51 0 tn tl()ec /af f d()eh( )0 p(to fully benefit from triple entry bookkeeping, we have to expand accounting systems out to agents and offer them direct capabilities to do transactions. that is, we make the agents stakeholders by giving them internal money )2 fz([)0 49 1 a(5)wb 32 sn()49 0 tn tl()ec /af f d(])es(. use of digital cash to do company accounts empowers the use of this concept as a general

replacement for accounting using books and departmental budgets, and is an enabler for verifying and auditing the centralised accounts system by way of signed receipts.)ep( )0 3 23 h()wb 75 sn()0 51 1 a(solving)wb 33 sn( frauds)51 0 tn tl()ec /af f d()eh( )0 p(once there, governance receives substantial benefits. accounts are now much more difficult to change, and much more transparent. it is our opinion that various scandals and failures of governance would have been impossible given these techniques: the mutual funds scandal would have shown a clear audit trail of transactions and thus late timing and otherwise perverted or dropped transactions would have been clearly identified or eliminated completely )2 fz([)0 50 1 a(ng)wb 34 sn()50 0 tn tl()ec /af f d(])es(. the emerging scandal in the usa known as )i(stockgate)es( would have been impossible as forgery of shares and value for manipulative trading purposes is revealed by signed receipts. likewise, barings would still be a force in investment banking if accounts had been organised around easily transparent digital cash with open and irreducible signed receipts that evidence invisible accounts \201)i(88888)es(\202. enron style scandals would have permitted more direct "follow the money" governance lifting the veil on various innovative but economically meaningless swaps.)ep( )0 2 24 h()wb 76 sn()0 51 1 a()wb 35 sn( references )51 0 tn tl()ec /af f d()eh( )-1 bf add fz()ef( )-1 bf add fz( )0 p()bd([tb])wb 36 sn()ea()es( a draft form of this paper credited todd boyle as an author, but this was later withdrawn at his request due to wider differences between the views. )ep( )0 p()bd([lp])wb 37 sn()ea()es( friar luca pacioli, )ct()r3 2 a(summa de arithmetica, geometria, proportioni et proportionalita)es()ea( 1494, venice. )ep( )0 p()bd([ig1])wb 38 sn()ea()es( ian grigg ")r4 2 a(the twilight zone)ea(," )ct(financial cryptography blog)es( 16th april 2005

)ep( )0 p()bd([mb])wb 39 sn()ea()es( entanglement is discussed in: petros maniatis and mary baker, "secure history preservation through timeline entanglement," proc. )ct(11th usenix security symposium)es(, august 2002. )ep( )0 p()bd([dc])wb 40 sn()ea()es( david chaum, "achieving electronic privacy," )ct(scientific american)es(, v. 267, n. 2 aug 1992. )ep( )0 p()bd([rah])wb 41 sn()ea()es( robert a. hettinga ")r5 2 a(the book-entry/certificate distinction)ea(" 1995, cypherpunks )ep( )0 p()bd([gh])wb 42 sn()ea()es( gary howland ")r6 2 a(development of an open and flexible payment system)ea( 1996, amsterdam, nl. )ep( )0 p()bd([ig2])wb 43 sn()ea()es( ian grigg ")r7 2 a( the ricardian contract )ea(," )ct(first ieee international workshop on electronic contracting)es( \201wec\202 6th july 2004 )ep( )0 p()bd([4nf])wb 44 sn()ea()es( e.f. codd, ")0 2 a(a relational model of data for large shared data banks)ea(," )ct(comm. acm)es( 13 \2016\202, june 1970, pp. 377-387. )ep( )0 p()bd([1])wb 45 sn()ea()es( todd boyle, ")r8 2 a( glt and glr: conceptual architecture for general ledgers)ea(," ledgerism.net, 1997-2005. )ep( )0 p()bd([2])wb 46 sn()ea()es(

todd boyle, ")r9 2 a( str software specification)ea(," goals, 1-5. this section adopts that numbering convention. )ep( )0 p()bd([3])wb 47 sn()ea()es( ian grigg, various design and requirements documents, systemics, unpublished. )ep( )0 p()bd([4])wb 48 sn()ea()es( a substantial part of the programming and design was conducted by edwin woudt \201first demo, sox layers, ui\202 and jeroen van gelderen \201message passing client architecture\202. )ep( )0 p()bd([5])wb 49 sn()ea()es( using internal money instead of an accounting system is not a new idea but has only been recently experienced: ian grigg, )r10 2 a( how we raised capital at 0%, saved our creditors from an accounting nightmare, gave our suppliers a discount and got to bed before midnight.)ea( informal essay \201rant\202, 7 jul 2003. )ep( )0 p()bd([ng])wb 50 sn()ea()es( james nesfield and ian grigg ")r11 2 a(mutual funds and financial flaws)ea(," )ct(u.s. senate finance subcommittee)es( 27th january, 2004 )ep()ef( )wb nl /bo 0 d tc /ba f d bs /au f d /ur () d rc zf th wb nd 1 gt{ts 3 mul np 0()0 c()bd(triple entry accounting)es()0 1 tn()ea()bn}if 2 nh le{52(0.1\240\240)2 c()0 51 1 a(introduction)wb 1 sn()51 0 tn tl()ec /af f d()52 1 tn()ea()bn}if 3 nh le{53(0.1.1\240\240)3 c()0 51 1 a(credits)wb 2 sn()51 0 tn tl()ec /af f d()53 1 tn()ea()bn}if 2 nh le{54(0.2\240\240)2 c()0 51 1 a(a)wb 4 sn( very brief history of accounting)51 0 tn tl()ec /af f d()54 1 tn()ea()bn}if 3 nh le{55(0.2.1\240\240)3 c()0 51 1 a(single)wb 5 sn( entry)51 0 tn tl()ec /af f d()55 1 tn()ea()bn}if 3 nh le{56(0.2.2\240\240)3 c()0 51 1 a(double)wb 6 sn( entry)51 0 tn tl()ec /af f d()56 1 tn()ea()bn}if 3 nh le{57(0.2.3\240\240)3 c()0 51 1 a(which)wb 6 sn( came first - double entry or the enterprise?)51 0 tn tl()ec /af f d()57 1 tn()ea()bn}if 3 nh le{58(0.2.4\240\240)3 c()0 51 1 a(computing)wb 6 sn( double entry in quick time)51 0 tn tl()ec /af f d()58 1 tn()ea()bn}if

2 nh le{59(0.3\240\240)2 c()0 51 1 a(a)wb 9 sn( slightly less brief history of the signed receipt)51 0 tn tl()ec /af f d()59 1 tn()ea()bn}if 3 nh le{60(0.3.1\240\240)3 c()0 51 1 a(the)wb 10 sn( digital signature and digital cash)51 0 tn tl()ec /af f d()60 1 tn()ea()bn}if 3 nh le{61(0.3.2\240\240)3 c()0 51 1 a(the)wb 9 sn( initial role of a receipt)51 0 tn tl()ec /af f d()61 1 tn()ea()bn}if 3 nh le{62(0.3.3\240\240)3 c()0 51 1 a(the)wb 15 sn( receipt )i(is)es( the transaction)51 0 tn tl()ec /af f d()62 1 tn()ea()bn}if 2 nh le{63(0.4\240\240)2 c()0 51 1 a(the)wb 15 sn( signed receipt as a bookkeeping system)51 0 tn tl()ec /af f d()63 1 tn()ea()bn}if 3 nh le{64(0.4.1\240\240)3 c()0 51 1 a(as)wb 17 sn( single entry)51 0 tn tl()ec /af f d()64 1 tn()ea()bn}if 3 nh le{65(0.4.2\240\240)3 c()0 51 1 a(recovering)wb 19 sn( double entry)51 0 tn tl()ec /af f d()65 1 tn()ea()bn}if 3 nh le{66(0.4.3\240\240)3 c()0 51 1 a(triple)wb 20 sn( entry accounting)51 0 tn tl()ec /af f d()66 1 tn()ea()bn}if 3 nh le{67(0.4.4\240\240)3 c()0 51 1 a(software)wb 21 sn( considerations)51 0 tn tl()ec /af f d()67 1 tn()ea()bn}if 3 nh le{68(0.4.5\240\240)3 c()0 51 1 a(roles)wb 22 sn( of the agents)51 0 tn tl()ec /af f d()68 1 tn()ea()bn}if 2 nh le{69(0.5\240\240)2 c()0 51 1 a()wb 23 sn( patterns of commerce )51 0 tn tl()ec /af f d( )69 1 tn()ea()bn}if 3 nh le{70(0.5.1\240\240)3 c( )0 51 1 a()wb 25 sn( extending the humble invoice ) 51 0 tn tl()ec /af f d( )70 1 tn()ea()bn}if 3 nh le{71(0.5.2\240\240)3 c( )0 51 1 a()wb 26 sn( patterns of transactions )51 0 tn tl()ec /af f d( )71 1 tn()ea()bn}if 2 nh le{72(0.6\240\240)2 c( )0 51 1 a()wb 27 sn( the requirements of triple entry accounting )51 0 tn tl()ec /af f d( )72 1 tn()ea()bn}if 2 nh le{73(0.7\240\240)2 c()0 51 1 a(conclusion)wb 21 sn()51 0 tn tl()ec /af f d()73 1 tn()ea()bn}if 3 nh le{74(0.7.1\240\240)3 c()0 51 1 a(drawing)wb 31 sn( in the agents)51 0 tn tl()ec /af f d()74 1 tn()ea()bn}if 3 nh le{75(0.7.2\240\240)3 c()0 51 1 a(solving)wb 33 sn( frauds)51 0 tn tl()ec /af f d()75 1 tn()ea()bn}if 2 nh le{76(0.8\240\240)2 c()0 51 1 a()wb 35 sn( references )51 0 tn tl()ec /af f d()76 1 tn()ea()bn}if /te t d np tu pm 0 eq and{/pn () d showpage}if end restore

Sponsor Documents

Or use your account on DocShare.tips

Hide

Forgot your password?

Or register your new account on DocShare.tips

Hide

Lost your password? Please enter your email address. You will receive a link to create a new password.

Back to log-in

Close