複式簿記で取引が常に均衡していることを保証する最善の方法は何ですか?
Django で複式簿記アプリを作成しています。私はこれらのモデルを持っています:
class Account(models.Model):
TYPE_CHOICES = (
('asset', 'Asset'),
('liability', 'Liability'),
('equity', 'Equity'),
('revenue', 'Revenue'),
('expense', 'Expense'),
)
num = models.IntegerField()
type = models.CharField(max_length=20, choices=TYPE_CHOICES, blank=False)
description = models.CharField(max_length=1000)
class Transaction(models.Model):
date = models.DateField()
description = models.CharField(max_length=1000)
notes = models.CharField(max_length=1000, blank=True)
class Entry(models.Model):
TYPE_CHOICES = (
('debit', 'Debit'),
('credit', 'Credit'),
)
transaction = models.ForeignKey(Transaction, related_name='entries')
type = models.CharField(max_length=10, choices=TYPE_CHOICES, blank=False)
account = models.ForeignKey(Account, related_name='entries')
amount = models.DecimalField(max_digits=11, decimal_places=2)
モデル レベルでバランスの取れたトランザクションを適用したいのですが、適切な場所にフックがないようです。たとえば、トランザクションが最初に保存され、次に Entry.transaction ForeignKey によってエントリが追加されるため、Transaction.clean は機能しません。
admin 内でも残高チェックが機能するようにしたいと思います。現在、私は EntryInlineFormSet を管理者の残高をチェックする clean メソッドで使用していますが、これはスクリプトからトランザクションを追加する場合には役に立ちません。これを簡単にするために、モデルを変更することにオープンです。