Что такое реестр настроек компании
Реестр настроек — это единый список из 116 параметров, заданный в коде и одинаковый для всех компаний. Каждый параметр описан двумя или тремя элементами:
Для конкретной компании в базе хранятся только изменённые значения. Всё остальное берётся из реестра. Поэтому «настройки компании» — это всегда наложение: реестр снизу, сохранённые значения компании сверху.
Набор параметров реестра можно переопределить на уровне платформы целиком, но в текущей конфигурации никаких переопределений нет — работает список, описанный ниже.
Модель данных
Сохранённое значение — это отдельная запись «компания + ключ + значение».
Пара «компания + ключ» уникальна: у одной компании не может быть двух значений одного параметра. Ключи, по которым записи нет, работают на значении по умолчанию. Пустое значение в записи равносильно её отсутствию — при чтении оно снова подменяется значением по умолчанию.
Состав реестра
Ниже — полный состав реестра по смысловым группам. Группировка нужна для чтения: в самом реестре это один плоский список.Больше половины параметров сервер только хранит и отдаёт наружу — проверяет их интерфейс. Ниже в колонке «Назначение» отдельно отмечено там, где серверная логика параметр действительно читает, и там, где не читает вовсе.
Реквизиты и валюта
Название, адрес, валюта и язык — единственные настройки, которые заполняются автоматически при создании компании. Подробнее: «Создание компании и её адрес».
Признаки доступных сущностей
Все признаки выключены по умолчанию. Включаются они не вручную, а подключением платного модуля или интеграции: у каждого модуля есть свой список ключей реестра, и подключение выставляет их компании во «включено». При регистрации компании подключается стартовый набор модулей, и признаки выставляются тем же механизмом. Подробнее: «Создание компании и её адрес».
Инвентаризация
Доставки и интеграции
Поведение подтверждения доставки описано отдельно: «Услуги и доставка».
В реестре также сохранились два устаревших ключа доставки (уведомление по SMS и уведомление через сторонний мессенджер) — они не читаются ни одним участком системы и наружу не отдаются.
Транзакции
Цвета статусов аренды
Все семь параметров — это HEX-коды подсветки статуса в интерфейсе; сервер их не читает.Поведение аренды
Как эти настройки влияют на жизненный цикл, описано в «Аренда и статусы». Работа автоархива броней разобрана в «Онбординг, новости и статистика».
Штрафы, выдача и смены
Формула расчёта штрафа, роль льготного периода, шага начисления и округления суммы разобраны с числовым примером в «Депозиты и штрафы». Поведение единой выдачи и единого приёма — в «Выдача и приёмка».
Приоритет подбора сравнивается с точным написанием варианта заглавными буквами, поэтому любое незнакомое значение равносильно случайному порядку подбора. Само же направление сортировки обратно названиям вариантов — см. раздел с подводными камнями.
Проценты менеджеров
При создании заявки с первых пяти значений снимается снимок в собственный набор процентов заявки; общие настройки затем работают как запасной вариант при расчёте начислений. Подробнее: «Зарплаты и субаренда сотрудников».
Метрики
Бонусы и налог
Как бонусы применяются на практике — в «Бонусы».
Клиенты и документы
Режим тарификации документов — единственное поле набора, которое компания видит, но не может изменить. Подробнее: «Пакеты, баланс и квоты подписи».
Раскладка карточки аренды
Доступ к значениям
Вся система обращается к настройкам через один ленивый объект: он создаётся при первом обращении, поэтому импорт модулей на старте приложения не лезет в базу.Чтение настройки
- Ключ проверяется по реестру. Неизвестный ключ или испорченное описание — сразу ошибка, «тихого» пустого ответа не бывает.
- Хранилище отдаёт сохранённое значение компании.
- Если сохранённого значения нет, берётся значение по умолчанию и тут же записывается компании как её собственное.
Запись и массовое обновление
- Запись одного значения: ключ обязан быть в реестре, иначе ошибка. Значение уходит в базу и сразу кладётся в кэш.
- Массовое обновление: сначала проверяются все переданные ключи, и только потом идёт запись пачкой. Если хотя бы один ключ незнаком, не сохраняется ничего.
- Перечень ключей: объект умеет отдать список всех известных настроек — на этом построены и админка, и прогрев кэша.
Вне контекста компании
Настройки читаются в контексте конкретной компании. Если контекст не установлен, то:- чтение возвращает значение по умолчанию из реестра;
- запись молча ничего не делает — ошибки не будет.
Хранение и кэш
Читать настройки приходится буквально на каждом шаге бизнес-логики, поэтому хранилище агрессивно кэширует.
Ключевые следствия:
- Прогретая пачка живёт сутки; значения, записанные поштучно, ложатся в кэш с общим коротким сроком жизни (15 секунд), после чего перечитываются из базы.
- Создание новой записи настройки кэш не сбрасывает (при создании кэш и так уже содержит актуальное значение) — сбрасывает только изменение существующей.
- Удаление записи кэш не сбрасывает вообще.
- Массовое сохранение делает ровно один сброс на всю пачку, а не по сбросу на каждый ключ.
- Кэш разложен по компаниям и по схемам: значения одной компании невозможно прочитать в контексте другой, но и вычистить их можно только из той же схемы, в которой они были записаны.
Единая точка API
Чтение и обновление всего набора настроек идёт через одну точку.Что отдаётся
Ответ строится как значения по умолчанию из реестра, перекрытые сохранёнными значениями компании. Читается напрямую из базы, минуя кэш, — страница настроек всегда показывает актуальную картину, даже если у других процессов в кэше ещё старые значения. Схема ответа повторяет реестр за вычетом девяти служебных ключей, которые наружу не выходят и меняются только платформой:- буфер между арендами;
- периодичность инвентаризации;
- первоначальный взнос в графике;
- тип фильтрации по датам;
- автоучёт дней недели;
- процент за сбор;
- секрет банковского разбора выписок;
- два устаревших ключа доставки.
Эти параметры продолжают работать: система читает их из реестра или из значений, выставленных платформой. Просто изменить их из интерфейса компании нельзя.
- дополнительные поля справочников — меняются отдельной точкой;
- режим тарификации документов — назначается платформой.
Кто что может
Изменение требует роли владельца компании, чтение — роли сотрудника или субарендодателя. Владелец читает набор потому, что при создании компании получает обе роли сразу; отдельно выданная роль владельца без роли сотрудника права на чтение не даёт.
Что происходит при сохранении
- Значения проверяются по схеме. Отрицательный срок аренды по умолчанию запрещён.
- Дополнительные поля из набора исключаются — их общий набор этой точкой не меняется.
- Остальные значения уходят в хранилище одной пачкой: запись, сброс и прогрев кэша компании.
Как это используется
Реестр — не справочный список, а рабочая развилка для значительной части бизнес-логики. Примеры прямых потребителей:- Подбор инвентаря. Приоритет подбора определяет порядок выборки единиц при автоматическом наполнении аренды и при добавлении продукта или комплекта.
- Проверка занятости. Буфер между арендами продлевает занятость единицы после окончания предыдущей аренды на заданное число минут; на границе «конец новой аренды — начало следующей» буфер не применяется.
- Просроченная инвентаризация. Периодичность инвентаризации задаёт, через сколько дней осмотр считается устаревшим (при пустом значении используется 7 дней).
- Фильтрация списка аренд. Тип фильтрации по датам решает, по какой границе периода — начало, окончание или комбинированно — отбираются аренды; любое незнакомое значение отключает фильтр по датам целиком.
- Начисления сотрудникам. Проценты подставляются как запасное значение, когда у заявки нет собственного снимка процентов.
- Расчёт срока. Автоучёт дней недели включает пересчёт расписания аренды по рабочим дням.
- Бонусы. Фиксированное начисление создаёт приветственную бонусную операцию при заведении бонусного счёта, процент начисления работает, если у клиента нет уровня лояльности, а лимит списания ограничивает долю аренды, оплачиваемую бонусами.
Подводные камни
Менее заметные особенности
- Признаки, которые включаются подключением платного модуля или интеграции, при отключении модуля обратно не выключаются: остаётся только сброс кэшей, а сами значения остаются включёнными.
- Буфер между арендами односторонний: он продлевает занятость только после окончания предыдущей аренды, а на границе «конец проверяемого периода — начало следующей аренды» не применяется.
- Проверка на отрицательную длительность штрафного интервала привязана к имени поля, которого в схеме нет, поэтому фактически не выполняется: отрицательный штрафной интервал сохранится (в отличие от срока аренды, где проверка работает).
- Очистка текстового параметра в платформенной админке сохраняет «пусто» как отсутствие значения, а не как пустую строку, поэтому при следующем чтении вместо пустого значения возвращается и снова записывается значение по умолчанию — очистить название или адрес «в ноль» таким способом не получится.
- Форма редактирования одной строки настройки в админке ожидает описание ключа ровно из трёх элементов и ломается на четырёх ключах, где тип не указан: штрафной интервал по умолчанию, оба набора статусов для метрик и типы позиций для выручки. Она же падает на строке, ключа которой нет в реестре. Постраничная форма настроек компании такие описания обрабатывает корректно и посторонние ключи просто не показывает.
- После массового сохранения кэш сначала полностью прогревается на сутки, а затем только что сохранённые значения перезаписываются в кэш с общим коротким сроком жизни (15 секунд), поэтому именно изменённые ключи вскоре начинают перечитываться из базы, пока не истечёт суточная метка прогрева.
- И массовое сохранение, и автоматическая реакция на сохранение одной строки дополнительно кладут копии значений в кэш под ключами без номера компании; эти записи никем не читаются и не удаляются при сбросе, а просто истекают сами.
- Право на чтение набора настроек требует роли сотрудника или субарендодателя именно в текущей компании: аутентифицированный пользователь без такой роли (например клиент) получает отказ, а не пустой ответ. Владелец компании читает набор только потому, что при создании компании ему выдаются обе роли сразу.
- Дополнительные поля справочников присутствуют в общем ответе только на чтение и намеренно исключаются из сохранения — попытка изменить их через общий набор настроек ничего не даст, для этого есть отдельная точка.
- Часть параметров, которые звучат как серверные правила, сервер не читает вовсе: лимит долга клиента, требование паспорта и его скана, длина ИИН, маска телефона, типы позиций для выручки, признак налога, признак бонусов и подготовка на точке проката. Бонусы, в частности, начисляются исходя из процента и фиксированной суммы независимо от общего признака бонусов.
Уточнения
- Незнакомое значение типа фильтрации по датам не просто игнорируется — оно полностью отключает отбор аренд по границам периода.
- Название и адрес организации по умолчанию — латинские заглушки, а не пустые строки; отдельные участки системы специально проверяют заглушку названия, чтобы не подставить её в сообщения клиентам.
- Валюта хранится либо символом, либо трёхбуквенным кодом: значение по умолчанию — символ, а при создании компании записывается код. При выводе сумм прописью значение приводится к коду через таблицу синонимов, потому что компании реально хранят там и то и другое.
- Признак «начатый интервал считать полным» управляет только направлением округления количества штрафных интервалов (вверх вместо вниз) — к моменту фактического приёма инвентаря он отношения не имеет.
- Фоновая архивация касается не завершённых аренд, а броней: в архив уходят брони, до начала которых осталось меньше заданной отсрочки, и все уже просроченные.
- Бонусные значения по умолчанию именно в реестре — нулевой процент начисления, нулевое фиксированное начисление и лимит списания 100 %; другие цифры, которые встречаются в описании бонусной программы, приходят не из реестра, а из уровня лояльности клиента.
- Дробный процент начисления бонусов из настроек компании обрезается до целого числа, поэтому значение вроде 2,5 % работает как 2 %; процент из уровня лояльности используется как есть.
- Ответ единой точки собирается напрямую из базы, минуя кэш, поэтому страница настроек может показывать значение, которое остальные процессы ещё не подхватили.
- Текстовые параметры реестра помечены не типом «текст», а вспомогательной функцией форматирования из стандартной библиотеки; распознавание типа в админке выживает только за счёт запасной ветки, а цветовые параметры распознаются по виду значения по умолчанию (решётка и 4 или 7 символов), а не по типу.
Связанные страницы
Глоссарий: Реестр настроек компании
Полный перечень полей и параметров реестра с их значениями по умолчанию.
Настройки компании
Обзорная страница модуля: из чего складываются настройки компании.
Хранение и кэш настроек
Как значение настройки попадает в базу, кэшируется по компаниям и почему его изменение сбрасывает кэш целиком.
Дополнительные поля
Собственные поля компании для клиентов, инвентаря, аренд и других справочников.
Переименование сущностей
Как компания меняет названия разделов и статусов под свою нишу, включая формы слова.
Настройки таблиц
Сохранённый состав, порядок и ширина колонок отдельно по каждой таблице компании.
Промо-баннеры
Показ рекламных и информационных баннеров внутри системы и отметка о просмотре.
Сквозная автонумерация
Общий счётчик компании для номеров клиентов, артикулов единиц и номеров документов.
Настройки в админ-панели
Служебный экран платформы для правки настроек компании и сброса значений к умолчанию.