Как правильно спроективароть базу для бухгалтерии (двойная запись)?
В небольшом проекте у каждого пользователя должен быть свой баланс при работе с приложением. С точки зрения бухгалтерии, конечно, правильно сделать все через двойную запись, дебеты и кредеты, но перенести бухглатерскую мысль на структуру базы не получается.
Для упрощения структура выглядит примерно так:
Таблица Счета
В данном случае счета - это не бухгалтерские счета, а какая-то запись в которой хранится id клиента, его агрегатный баланс, валюта и т.д.
Таблица транзакции
В данном случае мы только записываем транзакции - зачисление денег, покупка, вывод
Таблица Журнал (или операции)
Здесь мы записываем с какого счета на какой счет переводятся деньги и какая это операция - дебет или кредит, вот тут будет двойная запись.
Так вот не совсем понимаю, верно ли проектируется база, ведь с точки зрения бухгалтера, у счета клиента есть много субсчетов и между ними происходит перевод денег (дебет\кредит). ? А во многих системах счет - это 1 запись. Например у системы есть внутренние счета :
1 - Ввод денег через банк
2 - Ввод денег по карточке и т.д
Тогда зачисление денег через банк клиенту №5 будет как запись "со счета №1 на счет №5 100, Со счета №5 на счет №1 -100 (долг)
Стоит ли в таблице записывать дебет и кредит или достаточно в поле amount записать - поступление 100 а списание -100 (с минусом) ?
Может быть есть где-то интересные open source проекты где такая база сделана праивльно?
Денис Акимкин: subconcourse - это счета одного клиента я так понимаю? Я не совсем понимаю как реализуются именно счета. В моем представлении (не бухгалтерском) счет - это как счет в банке, условно говоря 1 запись в таблице.
Если я зачисляю деньги на свой счет - значит эти деньги минисуются со счета системы, плюсуются на счет клиента.
Если клиент платит за что-то, деньги минусуются со счета клиента, плюсуются на счет системы.
Но это не счета вроде "Средства будующих расходов" и так далее.
А еще не понятно как отображаются средства "извне" т.е зачисление денег через платежную систему на счет сайта, а потом уже со счета сайта на счет клиента.