Что это за раздел
Аренда (заявка) — центральная сущность всего модуля. Это одна заявка клиента с плановыми сроками, суммами, скидками, оплатой, штрафами, депозитами и доставкой. Ключевая особенность в том, что Статус аренды и Статус оплаты нельзя задать напрямую — при каждом сохранении заявки система пересчитывает их заново, исходя из совершённых действий (выдача, приёмка), состояния отдельных позиций инвентаря и того, сколько уже оплачено. Эта страница описывает саму сущность аренды, автоматический пересчёт её статусов при сохранении, побочные эффекты после сохранения (вознаграждение, бонусы, статус клиента, уведомления и воронка), а также сценарии создания, редактирования, закрытия, архивации и адреса списка, карточки и счётчиков.Модель данных
Основные поля
Сроки и длительность
Рабочая длительность аренды при сохранении считается от планового начала до «конца», где «конец» — это Фактический конец, если он проставлен, иначе Плановый конец.
Суммы, налоги, скидки, штрафы
Стоимость раскладывается на составляющие: Стоимость инвентаря и Стоимость услуг (каждая — до и после скидки), Стоимость доставки, Сумма налога. Итоговая стоимость (со скидкой) — это то, с чем сравнивается Оплаченная сумма при расчёте статуса оплаты. Сумма штрафа складывается из Автоматического и Ручного штрафа.Сами суммы и раскладка скидок по позициям пересчитываются отдельным механизмом пересчёта позиций и сумм (см. соседние страницы про позиции, скидки и штрафы). На этой странице важно лишь то, что пересчёт статуса опирается на уже посчитанную Итоговую стоимость и Оплаченную сумму.
Как вычисляется статус при сохранении
При каждом сохранении заявки (кроме служебного сохранения отдельных полей, см. «Подводные камни») выполняется единый пересчёт. Он опирается на несколько подсчётов по связанным данным:- есть ли у заявки услуги;
- момент первой выдачи и момент последней приёмки среди действий по аренде;
- количество арендных и продажных позиций (исключая позиции, участвующие в обмене);
- количество не выданных позиций (нет ни фактической выдачи, ни приёмки);
- количество несданных арендных позиций (выданы, но ещё не приняты).
Весь пересчёт статусов и флага «активна» выполняется только для уже сохранённой аренды. На самом первом сохранении при создании этот блок пропускается, поэтому только что созданная аренда получает статусы и флаг «активна» из значений по умолчанию, а полный пересчёт происходит при следующем сохранении.
Флаг «Активна»
Сначала заявка помечается неактивной, затем становится активной снова, если выполнено хотя бы одно из условий: есть услуги, есть арендные или продажные позиции, указан клиент, есть оплата, есть депозиты или есть доставки. Неактивные заявки скрываются из рабочих списков.Статус оплаты
Переходы статуса аренды
Пересчёт статуса устроен как последовательность правил. Первым срабатывает правило выдачи, затем — блок для арендных позиций, затем — отдельные правила для продаж и для аренды без позиций и услуг. 1. Отметка выдачи. Если есть хотя бы одна выдача и заявка ещё не в терминальном состоянии (не Завершена, не Должник, не Отменена), проставляется Фактическое начало (по первой выдаче). Если при этом есть арендные позиции и заявка не в Просрочке — статус переходит в «В аренде». 2. Блок арендных позиций. Срабатывает, когда есть арендные позиции и текущий статус — один из: Бронь, В аренде, Просрочка, Завершена, Должник. Внутри блока по порядку проверяется:Решение «Завершена или Должник» принимается единым правилом, одним и тем же для всех путей: и при обычном сохранении аренды, и при обработке действия приёмки, и при откате действия. Правило состоит из двух частей:
- Состояние позиций. Если у аренды есть хотя бы одна нетронутая позиция (не выдавалась и не принималась — любого типа, включая продажу) или хотя бы одна выданная, но не принятую арендную позицию, аренда закрыться не может. Позиции, заменённые при обмене, в этой проверке не учитываются.
- Порог оплаты. Если по состоянию позиций аренда закрывается, статус выбирается сравнением: Оплаченная сумма ≥ Итоговой стоимости → Завершена, иначе → Должник.
Порог оплаты — один и тот же во всех путях, и штрафы отдельным слагаемым в него не входят: они уже включены в Итоговую стоимость на этапе пересчёта сумм. Отдельно к сумме штрафы прибавляются только при приёме платежа — там проверяется, что платёж не превышает остаток.
Побочные эффекты после сохранения
Сразу после записи заявки система выполняет несколько действий.- Пересчёт доступности инвентаря — обновляется расписание занятости позиций этой аренды. Выполняется сразу, в том же запросе: от доступности зависит бронирование, и устаревшая доступность грозила бы двойной бронью.
- Уведомление о смене статуса и триггеры воронки продаж — обе реакции уходят в одну фоновую задачу, которая ставится в очередь только после того, как изменения аренды успешно зафиксированы в базе. Уведомление уходит клиенту, если статус изменился и у заявки есть клиент (с контекстом: менеджер, суммы, сроки, перечень позиций, накопленные бонусы); воронка создаёт или переводит сделки (лиды) по правилам, привязанным к источнику клиента, а при неизменном статусе только обновляет сумму и клиента существующих сделок.
Раньше уведомления и воронка выполнялись прямо внутри сохранения аренды, и их сбой гасился без следа. Теперь они вынесены в фоновую задачу: на скорость самого запроса они больше не влияют, а сбой виден как упавшая задача, и его можно найти и переиграть. Обратная сторона — уведомление и лид появляются с небольшой задержкой после ответа сервера.
Синхронными в запросе намеренно остались только два пересчёта: пересчёт состава и сумм аренды (его результат сразу уходит в ответ, поэтому его нельзя откладывать — иначе клиент увидел бы устаревшие суммы и долг) и пересчёт доступности инвентаря.
- Создание вознаграждения по аренде — только при создании новой аренды. Заводится связанная запись с процентами вознаграждения сотрудников (за создание, бронь, инкассацию, выдачу, приёмку), взятыми из настроек компании на момент создания.
- Обновление статуса клиента — только для завершённых аренд. Подсчитываются число и сумма завершённых аренд клиента, и клиенту добавляются подходящие статусные метки, пороги которых достигнуты. Метки только добавляются, никогда не снимаются.
- Начисление бонусов — только когда аренда завершена и полностью оплачена. Сумма бонуса = Итоговая стоимость × процент лояльности клиента (или процент по умолчанию из настроек) ÷ 100. Если по этой аренде бонусы уже списывались, начисление не создаётся; иначе создаётся или корректируется бонусная операция начисления.
- Очистка платежей Kaspi — при физическом удалении аренды удаляются связанные незавершённые транзакции Kaspi.
Создание, редактирование, закрытие, архивация
Создание
Клиентский код не задаёт ни статус, ни суммы — они выставляются автоматически. При создании:- Плановое начало по умолчанию — текущий момент (округлённый), плановый конец — начало плюс длительность по умолчанию из настроек. При включённом автопродлении конец переносится на ближайшую полночь следующего дня.
- Начальный статус зависит от настроек компании: если включены черновики — «Заявка»; иначе если включено бронирование — «Бронь»; иначе сразу «В аренде».
- Из настроек компании проставляются шаг авто-штрафа, признак отключения штрафа, ставка налога и признак включённого в цену налога, автопродление.
- Записывается создатель, регистрируется действие создания.
- Если плановое начало позже конца — запрос отклоняется с ошибкой.
Редактирование
При изменении заявки:- Поле «отключить штраф» у обычного сотрудника игнорируется, если в компании не разрешён доступ менеджеров к штрафам.
- После применения изменений запускается пересчёт позиций и сумм и генерация задач авто-штрафа.
Закрытие/удаление (карточка аренды)
Удаление аренды ведёт себя по-разному:Архивация (отдельный адрес)
Отдельный адрес архивации переключает флаг «в архиве»: повторный вызов возвращает аренду из архива.Адреса списка, карточки и счётчиков
Список аренд
Список поддерживает поиск (по номеру, клиенту, названию/коду позиции, а при включённом автопарке — по номеру и техпаспорту авто), сортировку и фильтры. Возвращаются только активные аренды. Дополнительно вычисляется долг (Итоговая стоимость минус Оплаченная сумма) — по нему можно сортировать. Тот же адрес используется для создания новой аренды.Видимость аренд ограничена точками проката: суперпользователь видит все (или выбранную точку), обычный сотрудник — только аренды своих точек. Часть связанных данных (услуги, реф. агенты, депозиты, доставки, сделки) подгружается только при включённых соответствующих настройках/интеграциях.
Карточка аренды
Детальная карточка дополнительно считает: уже использованные бонусы, максимально допустимую сумму списания бонусов, а также количество позиций в трёх состояниях — ещё не выданные, выданные (в аренде) и полностью завершённые.Счётчики по статусам
Адрес счётчиков возвращает количество аренд по статусам для дашборда и фильтров: всего, заявки, брони, в аренде, завершённые, отменённые, должники, просроченные, в архиве. Считаются только активные аренды в рамках доступных точек.Счётчик «в аренде» может объединять статусы «В аренде» и «Просрочка» — это зависит от настройки компании. Счётчик «должники» считает только тех, кто в статусе «Должник» и при этом оплачен не полностью (частично или ожидает оплаты).
Ссылка на оплату
Отдельный адрес выдаёт клиенту публичную ссылку на оплату аренды. Запрос на получение автоматически создаёт (или обновляет) такую ссылку и возвращает её адрес и телефон. Запрос на отправку рассылает ссылку клиенту по выбранному каналу — SMS или Wazzup — и требует, чтобы соответствующая интеграция была подключена; иначе возвращается ошибка. Телефон получателя проходит проверку формата. Сама сущность ссылки на оплату подробно описана в разделе финансов.Особенности поведения
- Весь пересчёт статусов, статуса оплаты и флага «активна» выполняется только для уже сохранённой аренды; на самом первом сохранении при создании он пропускается, поэтому только что созданная аренда получает эти значения из значений по умолчанию.
- Статус «Просрочка» самим пересчётом при сохранении не назначается — он только сохраняется и учитывается в переходах; в просрочку аренду переводит отдельный механизм контроля сроков.
- Уведомление о смене статуса и триггеры воронки продаж выполняются одной фоновой задачей, которая ставится в очередь после успешной записи аренды; их сбой не откатывает сохранение аренды, но и не теряется — он виден как упавшая фоновая задача.
- Решение «Завершена или Должник» принимается единым правилом на всех путях (сохранение аренды, обработка приёмки, откат действия): сначала проверяется, что не осталось нетронутых и несданных позиций, затем сравнивается оплата с Итоговой стоимостью. Штрафы отдельным слагаемым в этот порог не входят.
- Фактический конец аренды не проставляется, если хоть одна позиция вообще не выдавалась: пока такая позиция есть, единое правило не считает аренду закрываемой.
- При пересчёте аренда с нулевой итоговой стоимостью получает статус оплаты «Оплачено», потому что оплаченная сумма 0 не меньше итоговой стоимости 0 (сравнение «больше или равно»); это проявляется при пересохранении уже существующей пустой аренды, а не при её первом создании.
- Отдельный адрес архивации переключает флаг архива, поэтому повторный вызов возвращает аренду из архива, а не оставляет её удалённой.
- Счётчик «должники» не учитывает аренды в статусе «Должник» с полной оплатой (например, должник только из-за несданного инвентаря): они попадают в общий счётчик, но не в счётчик должников.
- Начальный статус новой аренды (заявка / бронь / в аренде) целиком определяется настройками компании (черновики и бронирование), а не передаётся клиентом.
- Проценты вознаграждения по аренде фиксируются из настроек компании один раз при создании аренды и не обновляются при последующем изменении настроек.
- Обновление статуса клиента только добавляет статусные метки при достижении порогов и никогда их не снимает.
- Бонус начисляется только при завершённой и полностью оплаченной аренде и не создаётся, если по этой аренде бонусы уже списывались.
- Счётчик «в аренде» может объединять статусы «В аренде» и «Просрочка» в зависимости от настройки компании об объединении.
- Редактирование завершённой или отменённой аренды запрещено обычному сотруднику; разрешено только суперпользователю или обладателю специального права на изменение завершённых.
- Отправка ссылки на оплату по SMS или Wazzup требует подключённой интеграции соответствующего канала, иначе запрос отклоняется.
Связанные страницы
Глоссарий: Аренда и статусы
Полный перечень полей и терминов сущности аренды, её статусов и статусов оплаты.
Аренда: заявки и жизненный цикл
Обзорная страница модуля со ссылками на все его разделы.
Выдача и приёмка
Действия по аренде: создание, бронирование, сборка, выдача, приёмка, отмена и архив, а также отмена действия с восстановлением статуса.
Позиции инвентаря и обмен
Строки инвентаря аренды и продажи, их тарифы и периоды, массовые операции и обмен позиций внутри заявки.
Услуги и доставка
Услуги в составе аренды и доставки: выдача, приёмка, подтверждение и отмена с привязкой к действиям аренды.
Пересчёт сумм и цен
Движок пересчёта итогов аренды: цены позиций и услуг, скидки, налоги, продление периода и суммарные поля заявки.
Депозиты и штрафы
Привязка депозитов и штрафов к аренде и позициям, а также генерация штрафных задач за просрочку.
График оплат, паузы и рабочие дни
График платежей, автосписание, паузы аренды и рабочие/выходные дни, влияющие на длительность и суммы.
Уведомления, бонусы и воронка
Реакции на смену статуса: клиентские уведомления, бонусы, реферальные выплаты и продвижение по воронке продаж.