Skip to main content
Полный перечень полей — в глоссарии. Ремонтная задача не хранит деньги «руками»: четыре денежных поля — стоимость расходников, стоимость услуг, итоговая стоимость и оплачено — пересчитываются автоматически из привязанных к задаче расходников, услуг и оплат. Эта страница описывает саму формулу пересчёта, момент его запуска, защиту от лишних записей и то, как отфильтровать список задач по степени оплаченности. За моделью самой оплаты и её проверками (в частности, ограничение «сумма оплаты не может превышать остаток по задаче») обращайтесь к отдельной странице. Здесь оплата рассматривается только как источник числа «оплачено». Подробнее об оплате: «Оплата: модель, знак и проверки». Как операции по задаче попадают в финансовый журнал и сводки: «Транзакции».

Денежные поля задачи

Все четыре поля рассчитаны на чтение: значения приходят из пересчёта, а не задаются оператором. Даже если какое-то значение прислать снаружи, оно будет затёрто при ближайшем пересчёте.

Как считается стоимость и оплаченность

Пересчёт собирает четыре числа заново, полностью замещая прежние значения (а не прибавляя к ним):
  • Стоимость расходников — сумма цен всех расходников задачи. Если расходников нет, берётся ноль.
  • Стоимость услуг — сумма цен всех услуг задачи. Если услуг нет, берётся ноль.
  • Оплачено — сумма оплат задачи с учётом знака проводки. Приход увеличивает значение, расход (возврат денег клиенту) уменьшает его.
  • Стоимость — простое сложение стоимости расходников и стоимости услуг. Оплаты в итоговую стоимость не входят.
«Оплачено» — это «сколько клиент фактически заплатил за вычетом возвратов». Оплата на 1000 и возврат на 500 дают «оплачено» = 500. Если возвраты превышают приход, значение может стать отрицательным — это корректно отражает, что деньги ушли назад клиенту.
Итоговая стоимость задачи складывается только из расходников и услуг. Ни направление операции, ни статус оплаты, ни фактически оплаченная сумма на стоимость не влияют — стоимость это «сколько работа стоит», а «оплачено» это отдельное число «сколько денег прошло».

Когда запускается пересчёт

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

Короткое замыкание: пропуск лишней записи

Прежде чем что-либо записывать, пересчёт сравнивает четыре только что вычисленных числа с теми, что уже хранятся в задаче. Если все четыре совпадают — стоимость расходников, стоимость услуг, оплачено и итоговая стоимость, — пересчёт завершается, ничего не записывая в базу и не запуская пересчёт прибыли. Только если хотя бы одно из четырёх чисел изменилось, происходит одна групповая запись сразу всех четырёх полей, а затем в фоновую очередь ставится пересчёт прибыли по этой задаче.
Пересчёт стоимости записывает поля напрямую, минуя обычное сохранение объекта, поэтому сам себя повторно не запускает — зацикливания не возникает. Пересчёт прибыли выполняется отдельной фоновой задачей и не блокирует сохранение задачи.
Практическое следствие короткого замыкания: если задачу пересохранили, но денежный состав не поменялся (например, изменили только название или исполнителя), пересчёт прибыли не запускается — фоновая работа выполняется лишь тогда, когда деньги действительно изменились.

Фильтр списка задач по статусу оплаты

В списке ремонтных задач доступен вычисляемый фильтр по степени оплаченности. Это не хранимое поле: фильтр сравнивает «оплачено» с итоговой «стоимостью» прямо в запросе. Доступны четыре значения:
Значения фильтра пересекаются, это не взаимоисключающие корзины. Переплаченная задача (оплачено больше стоимости) попадёт одновременно и в «Оплачено» (оплачено не меньше стоимости), и в «Оплачено частично» (оплачено не равно стоимости). Задача без единой оплаты и без стоимости попадёт и в «Не оплачено», и в «Без стоимости». Фильтр отвечает на конкретный вопрос, а не раскладывает задачи на непересекающиеся группы.

Сводка по отфильтрованному списку

Вместе с постраничным списком задач возвращается сводка, посчитанная по всему отфильтрованному набору, а не только по видимой странице:
В сводке фигурирует итоговая стоимость задач, а не оплаченность — «общая сумма» и «сумма завершённых» показывают, на какую сумму выполнено работ, а не сколько по ним фактически оплачено. Архивные задачи исключаются из «общей суммы» и из «последней задачи», но «сумма завершённых» считается строго по статусу «Завершена».

Связанные страницы

Глоссарий: Стоимость и оплаты

Полный перечень денежных полей задачи и правил их пересчёта.

Мастерская (ремонтные задачи)

Обзор модуля мастерской и переход к остальным его страницам.

Воронка и задачи

Kanban-воронки, этапы и ремонтные задачи с их статусами, порядком и агрегатами по списку.

Ресурсы и склад

Складской справочник расходников и их списание/возврат при привязке к задачам с контролем остатков.

Услуги

Привязка услуг из каталога к ремонтным задачам с тарифом, ценой и длительностью.

Метрика прибыли

Проецирование прибыли по ресурсам и услугам завершённой задачи в общую таблицу метрик.

Автосмена состояния инвентаря

Автоматический перевод инвентаря в целевое состояние при движении задачи по воронке.