Долги как журнал

Цифра долга, которую можно отредактировать, может оказаться неверной так, что никто не поймёт почему. Поэтому долги и кассы в наших продуктах — журналы, и за этим следит сама база.

Задача

Кто сколько должен — вопрос, который дистрибьютор задаёт каждый день, и ответ должен выдержать спор: клиент говорит, что заплатил, менеджер — что нет. Одно поле «баланс» тут не поможет. Оно говорит сколько, но никогда не говорит почему.

Только добавление

Поэтому поля «баланс» нет. Есть журнал: каждая продажа, оплата и возврат — запись со знаком, а баланс — сумма записей. Ничего в нём не обновляется и не удаляется. Такой запрос отвергает триггер в базе, поэтому даже наш собственный код не сделает этого по ошибке.

Исправление — тоже запись

Ошибки случаются. Неверную запись не правят, а отменяют новой записью с обратным знаком, связанной со старой, с указанием, кто и когда её сделал. История остаётся целой, а акт сверки для клиента может показать каждый шаг.

Что это даёт

  • Ответ на вопрос «почему такой баланс?» на любую дату.
  • Акт сверки, который клиент может проверить построчно.
  • Оплаты, разнесённые по конкретным документам.
  • Никаких тихих правок: журнал показывает, кто что сделал.

Чего это стоит

Прочитать баланс — значит посчитать сумму, а не взять поле, и исправление занимает в интерфейсе на шаг больше. Мы считаем это честной ценой за цифры, которые могут постоять за себя. То же правило действует для движений по кассам.

Из продукта: Scoperly

Расскажите о задаче

Хватит нескольких строк. Мы прочитаем их и ответим вопросами.

Обсудить проект