1

我正在为如何设计一个系统来跟踪账单和付款而苦苦挣扎。我目前有两个功能对象 (BillPayment),但无法确定跟踪它们之间会计的方法。

从根本上说,我只需要知道哪些具体的账单已经付清,以及所有会计之后的总余额。我认为我可以通过两种方式做到这一点:

1)建立一个单独的会计表,我在其中跟踪每笔交易,将特定的账单映射到特定的付款。这将使我可以轻松地在数据库中查找特定账单上的剩余金额。缺点是它似乎增加了很多复杂性,因为每当创建新对象时,我都需要在此表中创建新记录。

2) 尝试编写逻辑,通过查看整个交易历史并进行会计处理,即时计算特定账单上剩余的金额。从好的方面来说,这保证始终是正确的,但是继续一遍又一遍地进行相同的计算以得到应该是静态值的值似乎是错误的。

过去有没有人遇到过这样的挑战,如果有,您是如何解决的?是否有一些我只是缺少的最佳实践?

4

3 回答 3

1

一张表:交易。票据具有正值,付款具有负值。如果你愿意,你可以给它一个 transaction_type 列(发票、付款、信用、退款),如果你真的喜欢,你甚至可以在那个列上使用 Rails STI。其他有用的列 - 数字、payment_type(信用/现金/支票/eft)、日期。

剩余余额只是所有值的总和。如果余额为负,则欠信用。

如果您确实需要将付款应用于特定账单(我不完全确定这种做法是否正确会计),您可以有一个辅助表(paid_bills)将付款映射到账单,金额;大概所有paid_bills.payment_id 的总和不能超过付款本身。

为用户显示内容时,您始终可以翻转标志 - 将付款显示为正数,当付款表单提交正数时,将其翻转回负数。

这是我多年来在保持最佳会计实践的同时找到的最佳方法。

于 2013-05-17T23:47:56.367 回答
0

如果您可以使用数据库,则只为账单创建一个表并添加一个布尔类型“已支付”的字段。当您想知道是否已支付账单时,请检查此字段,当您想了解全球余额时,请添加已支付账单的金额并减去未支付的金额。

如果没有,您可以在这些类中的任何一个中使用静态变量来保持全局平衡。还有一个用于支付或不支付账单的字段或指向已支付对象的指针(将被初始化为 null 并在创建后指向已支付对象)

于 2013-05-17T17:26:18.520 回答
0
  • Bill has_many Payments,因此 Payment has_one Bill(并且您的付款表将有一个 bill_id 字段)。我认为这是唯一合理的建模方式。
  • 不要担心“继续一遍又一遍地做同样的计算”。让您的对象模型正确,然后再考虑优化。CPU时间便宜;人的脑力和管理复杂性的能力不是!如果您真的到了需要担心重复计算的地步(坦率地说,这不太可能),那么有很多选择可以在不违反这些模型的基本关系的情况下加快计算速度。
于 2013-05-17T19:33:02.477 回答