2

我有一个我正在设计的网络服务,它向用户支付完成某些任务的费用。例如,如果用户点击一个链接,他们将获得 0.10 美元到他们的帐户。用户每天最多可以执行 20 次这些任务中的任何一项。为了让用户请求向他们支付资金,他们的账户余额必须为 5 美元。

我正在尝试确定跟踪交易和账户的最佳方式。我的设计目前看起来如下:

Accounts
---------
| account_id | member_id | balance  |
-------------------------------------
| 1          | 1         | 497.8500 | -- System Account
| 2          | 5         | 2.1500   |

Transactions
------------
| transaction_id | account_id | type_id | task_id | date | amount |
-------------------------------------------------------------------
| 1              | 1          | Debit   | 1       | date | -1.10  |
| 2              | 2          | Credit  | 1       | date | 1.10   |
| 3              | 1          | Debit   | 1       | date | -1.05  |
| 4              | 2          | Credit  | 1       | date | 1.05   |

这种设计基于复式记账的会计原则。现在我的困境是:从技术上讲,用户在请求“支付”之前不会收到这笔钱。“支付”包括用户提交请求、请求被批准、从他们的账户余额中扣除的钱并通过 PayPal 发送给他们。所以我的问题是,如果用户尚未请求付款,从系统余额中实际扣除金额是否是个好主意?他们账户中的钱可用于为网站上的其他东西提供资金,它也会在 30 天不活动后过期。

我的想法是保持交易表不变,并设计另一个名为 payouts 的表,其结构如下

Payouts
-------
| payout_id | account_id | date | amount |
------------------------------------------
| 1         | 2          | date | $2.00  |

但是,我如何在交易表中反映支出?似乎不完整。

我是否应该将任务与交易表分开并仅在用户请求付款时才输入交易记录?我不确定这样做是否会失去审计能力。

有没有人有一些见识?

4

3 回答 3

1

只需使用另一个帐户/分类帐/资产负债表代码

So on getting the 10c 
Your account is - 10c
Their payout account is + 10c
When the balance on their payout account > $5, then can request one.
When they do debit the amount from payout account, credit it to Payoutpending account
When it confirmed debit payout pending and credit payed out.
If it's rejected debit payout pending and credit payout account

.

哦,你真的需要考虑存储余额,而不是计算和报告它,你会陷入正确的混乱。

于 2012-08-07T17:44:36.847 回答
0

关于跟踪付款的业务要求是什么?

您的企业是否需要以日期、金额等作为单独事件(双重输入)来跟踪付款,还是他们只需要知道已请求付款。

如果以上任何一种情况属实,或者很有可能,考虑到其他公司的做法(想想合并),最好附上一个支付表,就像你跟踪支付一样。

您能否详细说明复式输入的要求。我会尝试在您的设计中尽可能明确地保留业务规则。

希望这可以帮助。我们可以在评论中继续对话,

于 2012-08-07T17:21:30.470 回答
0

我的记账能力有限,所以虽然希望能帮上忙,但我觉得我不完全有资格给你一个答案。。

因此,虽然我认为您相当接近纯会计模型,但我认为在这种情况下,支出也应该是交易。

如果用户需要了解何时将现金添加到他们的帐户,则此列表还应包含支出。如果用户收到 5 倍的 1 美元,一次支付 5 美元,他的账户余额应该最终为 0。

因此,由于您正确地进行了两项交易,这意味着实际付款会从他们的帐户中扣除 5 美元,但这也需要去某个地方。所以我觉得一旦支付,应该有一个单独的账户“支付”。

但是.. 我的程序员想知道.. 在这种情况下,您真的想要在您的数据库中进行双重簿记吗?实际付款时,无需使用系统账户即可推算所有数字。

因此,您实际上并没有错过任何真实信息。如果现金确实总是来自系统帐户,并且用户无法将余额转移到其他帐户。

于 2012-08-07T17:28:27.340 回答