Как спроектировать аналитику?

Хочу спроектировать небольшой учет. Есть проекты, работники, банковские счета. Прочитал что хорошей практикой является двойная бухгалтерская запись для такого. Но у меня возникла проблема в понимании. Сделал вот такую упрощенную схему b22896cfcc0149a6815765390139e981.jpg

invoices - счета выставленные по проекту
projects - проекты
accounts - счета в банке
employes - работники, и их ЗП
transactions - транзакции
ledger - Регистры (синтетические счета если правильно названо)

Хочется видеть постоянно, что сейчас есть на счетах в банке, и баланс по проектам.

Схематическое описание транзакций

Начисление ЗП
Снимаем деньги с регистра счета в банке (accounts.ledger_id)
Начисляем в регистр сотрудника (employes.ledger_id)

Начисление оплаты по проекту (Выписывание счета)
Снимаем деньги с регистра проекта (Баланс проекта уходит в минус) (projects.ledger_id)
?? Но куда их переводим

Начисление оплаты
Начисляем сумму на регистр банковского счета (accounts.ledger_id)
??? Но непонятно откуда снять.
Начисляем сумму на регистр проекта (projects.ledger_id)
?? Не понятно откуда снять

Хотел делать полу-проводками, без так званой двойной записи. Но при начислении оплаты все-равно получается косяк, т.к. мы одни и те же деньги начисляем на 2 регистра. Как сделать правильно что б всегда можно было видеть баланс на счетах и задолженности по проектах? Хочется сделать правильно, что бы потом можно было наращивать функционал.
  • Вопрос задан
  • 394 просмотра
Пригласить эксперта
Ответы на вопрос 3
@thepry
Ruby on rails, 1С разработчик
Двойная запись придумана как раз с целью правильного ведения учета. При двойной записи никакая сумма не может взяться «из ниоткуда», или быть переведена «в никуда». А такие вещи как проект, сотрудник, банковский счет и т.д. - являются аналитикой внутри транзакции. Соответственно, есть аналитика дебетовая, а есть кредитовая.

При таком подходе описанных проблем не будет.

Начисление оплаты по проекту (Выписывание счета)
Снимаем деньги с регистра проекта (Баланс проекта уходит в минус) (projects.ledger_id)
?? Но куда их переводим

Если вам сделали работ по проекту на 100 рублей, значит проект подорожал на эти 100 рублей. Значит вам нужно два счета - на одном учитывать стоимость проекта, а на другом - расходы.
Ответ написан
suguby
@suguby
программист, python, django, mysql, git, hg, linux
Я делал так: есть абстрактная сущность счет, и абстрактная сущность - проводка. Проводка имеет две ссылки - счет откуда и счет куда. Так же проводка имеет поле сумма.
Потом делаем систему счетов: внешние источники денег - один счет, внешние потребители денег - другой счет. Все внутренние хранилища денег - сотрудники, материалы, склады - тоже счета.
А потом получается так: если нам капнули деньги от клиента - проводка снаружи внутрь на счет "сейф" с пометкой "от клиента". Надо начислить ЗП - делаем Н проводок со счета сейф на счета "Иванов"/"Петров" и так далее.
Что бы понять баланс счета "сейф" - нужно сосчитать суммы проводок входящих минус сумма проводок исходящих.
Внутренних счетов может быть сколько угодня. По внешним счетам баланс считать можно, но они односторонние - или источник, или потребитель - лучше не смешивать.
Как-то так.
Ответ написан
@kor-vin
Если Вам хочется вести учет в системе двойной записи, то Вам изначально нужно понять ее суть. Баланс состоит из Активов (средств в любой форме - деньги, материалы, товар, топливо, дебиторская задолженность и т.д.) и Пассивов (обязательств перед другими лицами - кредиторами, сотрудниками, налоговой, банками и т.д.). Активы ВСЕГДА равны Пассивам. Все операции показывают движение денег между активами и пассивами. Например, активи - денежные средства в кассе, пасивы -
задолженность перед сотрудниками. Операция - выплата зарплаы. Результат - уменьшение денежных средств в кассе (активов) и уменьшение задолжености перед работниками (пассивов). Это очень простой пример. Все намного глубже и сложнее.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы