Introduce generic Transaction data model
Ideas for models (similar to https://ledger-cli.org/): Specific use-cases like Invoices and Payments could be built on this data model. Having a common base enables complex reporting and a wide range of use-cases.
Payee (maybe there is a better name?):
person: Person (null=True)
organization: Organization (null=True, unique=True)
constraints: at least one of Person or Organization has to be set; person has to be unique if organization is None
Account:
owner: Payee
name: String (unique=True)
description: String (blank=true)
parent: Account (null=true)
Tag:
name: String (unique: True)
description: String (blank: True)
Transaction:
Status:
status: CLEARED | PENDING | …?
Posting:
account: Account
amount: (a bit more complex due to commodities, cost etc.)
date: Date
status: Status
code: String (blank=True)
transaction: Transaction
Metadata:
tag: Tag
value: String (blank: True)
posting: Posting (related_name: metadata)