Standardizing transaction metadata for an inter-wallet format

A key UX feature that seems to be missing from wallets at the moment is the ability to record metadata associated with a transaction, such as what the transaction was for, when it took place, who the recipient/sender is, how much it was worth in your accounting currency, and so forth. This information is not only useful to a user for understanding their own transaction history, but it would also form the basis for important functions like calculating capital gains tax or leaving paper trails, which are directly relevant to business adoption.

Metadata that is only of interest to one or a few parties should not be recorded on the chain of course, but it should certainly be supported as local/centralized data stored by the user's wallet. This data should be able to be backed up or imported to other wallets, making it useful to them even if they use a different software or if they lose their device. To that end, I think we as a community should go ahead and create a standard format for this data, which can then be implemented by wallet developers.

Here is an initial concept in json form:

  "version": "Version number of the format",
  "accounts": [
      "address": "Public address of the nano account",
      "private_name":"String for the user to identify the account",
      "public_name":"String that can be automatically provided to other wallets' transactee field",
      "modified": "Unix timestamp of when this account metadata was last updated",
      "accounting_unit": "String representing what currencny accounting is done in, if any. For instance, USD. This is relevant to the value field for transactions.",
      "transactions": [
          "index": "Index of the block in the account chain that this record applies to",
          "hash": "Hash of the block that this record applies to",
          "identifier": "Arbitrary id string for associating transactions with other databases, e.g. a business's records",
          "published": "Unix time stamp of when the wallet first broadcast the block to the network",
          "confirmed": "Unix time stamp of when the wallet received confirmation of the block from the network",
          "value": "Amount that this transaction was taken to be worth in whatever the accounting currency is. For instance, a business that accounts in USD would record the USD value of the transaction. This can automatically be populated using current market price, but it's possible to exchange nano at non-market prices as well. This is relevant to calculating capital gains taxes.",
          "memo": "Human-readable string describing the purpose of the transaction. Can be entered by the user manually, or populated by the wallet software automatically.",
          "transactee": "Human-readable string describing the person or entity the block is interacting with; can be automatically populated using the address book, if applicable",
        }, ... ]
    }, ... ]

Feel free to comment with any thoughts on what information should be included in this standard, how it should be formatted, etc.

Creating this standard would also be a good starting point for building block handoff or other inter-party transaction standards where transaction metadata is provided by the other party. For instance, if you buy something from a store, their PoS machine could automatically provide data for the transactee field (name of the store) and the memo field (itemized receipt and/or order number).