34 lines
881 B
Factor
34 lines
881 B
Factor
|
USING: accessors calendar kernel money new-slots sequences ;
|
||
|
IN: bank
|
||
|
|
||
|
MIXIN: policy
|
||
|
TUPLE: simple-policy interest-rate ;
|
||
|
INSTANCE: simple-policy policy
|
||
|
C: <simple-policy> simple-policy
|
||
|
|
||
|
GENERIC: interest-rate ( date account policy -- rate )
|
||
|
M: simple-policy interest-rate 2nip interest-rate>> ;
|
||
|
|
||
|
: daily-interest-rate ( date account policy -- rate )
|
||
|
pick days-in-year >r interest-rate r> / ;
|
||
|
|
||
|
TUPLE: account name balance transactions ;
|
||
|
|
||
|
: <account> ( name -- account )
|
||
|
0 V{ } clone account construct-boa ;
|
||
|
|
||
|
TUPLE: transaction date amount description ;
|
||
|
|
||
|
C: <transaction> transaction
|
||
|
|
||
|
: >>transaction ( account transaction -- account )
|
||
|
over transactions>> push ;
|
||
|
|
||
|
: open-account ( date opening-balance name -- account )
|
||
|
<account> >r "Account Opened" <transaction> >>transaction ;
|
||
|
|
||
|
: open-account-now ( opening-balance name -- account )
|
||
|
now -rot open-account ;
|
||
|
|
||
|
|