This may be a completely crazy idea, but I think it'd make the world better.
This commit is contained in:
parent
69dd7a01f6
commit
716e1b6f54
2 changed files with 63 additions and 0 deletions
|
@ -27,3 +27,4 @@ You should add your use case as a subpage of the [[UseCases]] page, to create a
|
||||||
### Technical-User-Center Use Cases
|
### Technical-User-Center Use Cases
|
||||||
|
|
||||||
- [[Reading and Reporting API|UseCases/ReadAPI]]
|
- [[Reading and Reporting API|UseCases/ReadAPI]]
|
||||||
|
- [[Storage API|UseCases/StorageAPI]]
|
||||||
|
|
62
UseCases/StoargeAPI.mdwn
Normal file
62
UseCases/StoargeAPI.mdwn
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
# Storage API
|
||||||
|
|
||||||
|
Most accounting systems continually reimplement double-entry accounting. As
|
||||||
|
a developer, I find this frustrating because very commonly, user-interface
|
||||||
|
code for accounting systems is co-mingled with details of the double entry
|
||||||
|
accounting implementation.
|
||||||
|
|
||||||
|
What I propose is a clear API that simply does the basic functions of
|
||||||
|
double-entry accounting, treating double-entry accounting more like
|
||||||
|
mathematical operations and less like business logic. Business logic varies,
|
||||||
|
but the rules of double entry accounting remain roughly the same.
|
||||||
|
|
||||||
|
Users of the API would be those who write accounting applications and want to
|
||||||
|
treat the double-entry portion purely as a black box.
|
||||||
|
|
||||||
|
The ideal scenario would be an known double-entry accounting API that
|
||||||
|
different accounting projects could support, separating the problem of
|
||||||
|
storage of double-entry accounting data from specific accounting systems.
|
||||||
|
|
||||||
|
A very rough idea of the API's core data structures follows. This is not
|
||||||
|
fully baked.
|
||||||
|
|
||||||
|
# Postings
|
||||||
|
|
||||||
|
The primary record of a double-entry accounting is a posting, which has the
|
||||||
|
following fields:
|
||||||
|
|
||||||
|
- Date
|
||||||
|
- Payee
|
||||||
|
- Two or more entries, and the sum of the amounts on all entries must
|
||||||
|
balance, otherwise the posting is not valid.
|
||||||
|
- State
|
||||||
|
|
||||||
|
## State
|
||||||
|
|
||||||
|
State has the following fields:
|
||||||
|
|
||||||
|
- User
|
||||||
|
- Value
|
||||||
|
|
||||||
|
|
||||||
|
The idea behind posting state is that it is somewhat user-configurable.
|
||||||
|
Typical posting states would be things like CLEARED for items that have
|
||||||
|
cleared a bank account. However, one idea behind the state is use it to
|
||||||
|
allow for "user-specific" versions of the books. The goal is to allow users
|
||||||
|
to "stage" postings that may or may not be accepted. For example, a user
|
||||||
|
might submit an expense report, and the state might be "REQUESTED".
|
||||||
|
Generally, the rest of the system would ignore REQUESTED postings, as they
|
||||||
|
aren't officially approved for the books yet.
|
||||||
|
|
||||||
|
# Entry
|
||||||
|
|
||||||
|
Entries have the following fields:
|
||||||
|
|
||||||
|
- Account
|
||||||
|
- Amount
|
||||||
|
- Currency
|
||||||
|
- (optional) fixated price per unit price to another Currency
|
||||||
|
- (optional) entry-specific price to another Currency
|
||||||
|
- (optional) zero or more key value pairs for tagging
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue