ETOOBUSY 🚀 minimal blogging for the impatient
Resuming an old module
TL;DR
Resuming an old module to do some accounting.
I have a system with my wife where we split most expenses that we do together. It was born to split things fairly - i.e. to avoid that any of us could have the feeling of not contributing enough. I know, I know.
Anyway, I modeled the whole thing as a ledger where the total sum of things is… zero. There are a few accounts that can contain, give or receive resources (well, money!) and all operations are about moving a quantity X from account A to account B, possibly with a reason.
I keep four accounts:
- one for my wife (
Foo
) and one for me (Bar
); - one modeling us as a single entity (
Common
); - one modeling the external world (
External
).
Something happening in the real world has its counterpart in this accounting system. A few examples:
- getting 100 € in our shared account in the bank, e.g. a gift from
someone, means transferring 100 € from
External
toCommon
. Hence,External
becomes poorer by 100 €, and it’s right: this money is now in ourCommon
assets; - splitting those 100 € in half means two operations:
- moving 50 € from
Common
toFoo
- moving 50 € from
Common
toBar
- moving 50 € from
Net result is that Common
is back to 0 €, External
is poorer by 100
€ and both of us are richer by 50 €.
- paying a bill of 200 € is a transfer from
Common
toExternal
, creating a void of 200 € inCommon
(i.e. it is now at -200 €); - splitting the bill among us means doing two transfers, which depend on
how we split. E.g. if I pay 60% of that bill, it means the following
two transactions:
- moving 80 € from
Foo
toCommon
- moving 120 € from
Bar
toCommon
.
- moving 80 € from
Again, the Common
part goes back to 0 €, which means that each euro
has been attributed to either of us.
The interesting thing with this is that our common bank account (but it
might just as well be a pocket containing shared money) is always
represented by the External
account with the changed sign: a negative
value for External
means that there is actual money in the pocket,
while a positive value means that we owe the external world money.
I started implementing a Perl module to capture this, and later forgot about it. As I resumed the idea, I see that the implementation was (is?) quite complete, also including a lot of tests.
So I hope I’ll resume this project in a proper way, and release to CPAN as soon as possible.
Stay safe folks!