Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Ideas

  • Features for duplicates
    • Print list of possible duplicates
    • Label an entry explicitly as a duplicate to store it in several places
  • CSV import
  • Dashboard
  • Budgets (including progress visualization)
  • Cache-files to speed up processing of large data sets
  • Generate EPC QR Codes for transfers
  • LSP server for journal files
  • Export to Graphviz (for account / entity relations)
  • Export to JS-Sequence-Diagrams (sequence of transactions)
  • Meta data for all entities (transactions, accounts, entities, …)
  • Nanosecond precision for timestamps
  • Additional features for crypto currencies
  • Commodities
    • Treat as scientific units (e.g 1 k€ == 1000 €)
    • First class support for any type of commodity (e.g. time and messages)
    • Support for time limited commodities (e.g. subscription for a month)
    • Define which are allowed / prohibited for each account
    • Hard vs Soft vs Fungible vs …
  • Differentiation between transfers, transactions & exchanges
    • Special syntax for exchanges
  • Support for all states of transaction life cycle
    1. Request - Request to exchange a commodity
    2. Offer - Specification of commodity & expected trade item
    3. Acceptance - Affirmation of interest in offered exchange
    4. Fulfillments
    5. Certification - Acknowledgment that exchange was performed

Entry / Value Date

There are no separate fields for entry or value dates necessary. Simply use ISO 8601 time intervals to specify the duration of a transfer.

transactions:
  - id: '123456789'
    note: Deposit of savings
    transfers:
      - utc: 2018-01-04T12:00--05T22:10
        from: john
        to: bank
        amount: 100 €

Syntax

This is a first concept of an alternative syntax for the journal file:

# Comments after a hash

2016-04-16 18:50:28
| 1 year registration of domain "example.org"
+tagOne  # Tags are written after a plus
+tagTwo
id: 20135604  # Arbitrary metadata
# Transactions are indentend by 2 spaces
  john -> paypal : 9.95 €
  paypal -> namecheap : {10 + 0.69} $
  paypal -> icann : 0.18 $ +fee
  namecheap -> john : 1 Domain

Database Backend

Alternatively the data could be stored in a database so that the YAML file is only produced temporarily for viewing.

Relational Data Structure

Commodities

A commodity can be anything with can be assigned a quantity or amount. E.g. money, time, pigs, cows, coordinates, messages.

There are 4 special commodities to simplify the tracking of sales:

  1. Request
  2. Offer
  3. Acceptance
  4. Certification

A table of commodities looks like this:

IdNameDescriptionAlias Of
1RequestRequest to exchange a commodity
2OfferName commodity & expected trade item
3AcceptanceAffirmation of interest in offered exchange
3CertificationAcknowledgement that exchange was performed
4Currency used in the European Union
5EUR4
6CowMost common type of domesticated ungulates
Transfers

Movement of a commodity from one account to another at a specific point in time. End datetime is optional and matches the start datetime if missing.

A table of transfers looks like this:

IdTransaction IdStart DatetimeEnd Datetime
112017-02-26 09:162017-02-26 09:17
212017-02-26 16:252017-02-26 16:28

Continuation:

GiverReceiverAmountCommodity
123004
2116
Transactions

Several related transfers which balance each other. A transaction has following stages:

  1. Request (“Hi, I’d like to buy something”)
  2. Offer (“Hi, I can sell you a cow for 300 €”)
  3. Acceptance (“Ok, sounds good”)
  4. Fulfillment (Buyer gives seller the money)
  5. Fulfillment (Seller gives buyer the cow)
  6. Certification (Buyer gets receipt for successful transaction)

A table of transactions looks like this:

IdTitelRequest
1Buy cow at farmers market2017-02-25 09:16

continuation …

OfferAcceptance
2017-02-27 18:352017-02-27 18:37
Accounts

An account is an entity which can store / contain / use commodities.

A table of accounts looks like this:

IdDatetimeNameDescriptions
12017-02-29 16:25Evil CorpThe Evil Corporation
22017-02-29 16:25John DoeCEO of Evil Corporation
Tags

A tag is a category / value which can be associated with an account or a transfer. The name can be namespaced with :.

IdName
1Food:Apple
2Animal
2Car