我本来打算在货币堆栈交换中问这个问题,但我认为,因为这更多的是一个编程问题,所以在这里会更好。我已经试过从多个非程序员会计师那里得到帮助,但那是一场灾难。
我有三种型号:
Account
,
JournalEntry
LineItem
帐户
-
category
%i[asset liability equity income expense]
-
normal_balance
与
%i[debit credit]
-
ID为的通知帐户
3
是一个反向账户
credit
资产账户通常是
debit
)
日记
行项目
-
side
%i[借方贷方]
-
amount
总是积极的
所以我对“反向”账户有些困难。
我认为我的数据模型有一个潜在的问题。我注意到其他会计图书馆的许多人
数量
作为+/,不储存
. 我选择存储
边
数量
作为一个总是正数的模型,真实世界的会计在纸上(记住我也存储
正常_平衡
所以这就是我所比较的)。
我知道这对数学来说有点慢,但我想先让它发挥作用,而不要让它对我自己造成太大的困扰。
我这样存储的另一个原因是,这样在添加新事务时更直观。帮助我的会计同意了
+200
或
-150
令人困惑而不是说
debit the sales account
Transaction.create!(:debit, sales, 200)
而不是
Transaction.create!(accumulated_depreciation, -140.30)
现在的问题是,我试图编写一些公式来执行两个操作:
-
0.00
:
asset balance
liability balance
+
equity balance
+
income balance
-
expense balance
))
-
结余一个特定的帐户(如损益表行
Sales
这是我的功能。注意如何
balance_account
但不包括服用
contra
def balance_category(category)
# ...
LineItem
.joins(:account)
.where('accounts.category = ?', category_index)
.sum('CASE WHEN line_items.side = accounts.normal_balance THEN (CASE WHEN accounts.contra = false THEN line_items.amount ELSE -line_items.amount END) ELSE (CASE WHEN accounts.contra = false THEN -line_items.amount ELSE line_items.amount END) END')
end
def self.balance_account(account)
# ...
LineItem
.joins(:account)
.where('accounts.id = ?', account.id)
.sum('CASE WHEN line_items.side = accounts.normal_balance THEN line_items.amount ELSE -line_items.amount END')
end
我试着找一个非程序员的会计师来核实这一点,但没有希望。我试着自己玩它,但反向帐户是相当混乱,我怀疑这是正确的,即使我的试算平衡工作。
我写这篇文章是因为在编程的时候
一份损益表我意识到。。。如果我做了
balance_category
在
:asset
,我总共得到一个。但如果我这样做了
余额帐户
在该类别的所有帐户上,然后将这些总数相加,我
如果我有来自对销账户的行项目,则得到相同的号码。所以有些地方出了问题。
我的直觉告诉我
不考虑反作用,但我不确定。。。