Я делал так: есть абстрактная сущность счет, и абстрактная сущность - проводка. Проводка имеет две ссылки - счет откуда и счет куда. Так же проводка имеет поле сумма.
Потом делаем систему счетов: внешние источники денег - один счет, внешние потребители денег - другой счет. Все внутренние хранилища денег - сотрудники, материалы, склады - тоже счета.
А потом получается так: если нам капнули деньги от клиента - проводка снаружи внутрь на счет "сейф" с пометкой "от клиента". Надо начислить ЗП - делаем Н проводок со счета сейф на счета "Иванов"/"Петров" и так далее.
Что бы понять баланс счета "сейф" - нужно сосчитать суммы проводок входящих минус сумма проводок исходящих.
Внутренних счетов может быть сколько угодня. По внешним счетам баланс считать можно, но они односторонние - или источник, или потребитель - лучше не смешивать.
Как-то так.