Обзор
Эта страница описывает, как в Yume заводится и хранится сама компания и её домены. Здесь собраны: центральная запись компании и её вычисляемые поля, привязанные к ней домены, создание новой компании (создание записи, стартового пробного периода, дефолтных справочников и настроек), регистрация кастомного домена, справочники стран/валют/типов компаний и два пути регистрации компании.Компания хранится в общих таблицах базы данных и служит «якорем» всей коммерческой обвязки: к ней привязаны владелец, лимиты, домены и настройки. Все остальные модули биллинга ссылаются именно на неё.
Модель данных
Компания
Это основная запись компании. Она одновременно является техническим описанием компании (к ней привязаны все её данные) и коммерческой карточкой (владелец, оформление).Вычисляемые поля: Ссылка и Код типа
Список компаний при каждом запросе дополняется двумя вычисляемыми полями:- Ссылка (домен) — основной (primary) домен компании в зоне
.yume.cloud. Если такого домена нет, подставляется запасное значениеaccount.yume.cloud. - Код типа — машинный код типа компании, подтянутый из связанного справочника типов.
Из-за запасного значения у любой компании без основного домена в зоне
.yume.cloud «Ссылка» всегда будет равна account.yume.cloud. Это ожидаемое поведение, а не признак ошибки.Домен компании
Домен привязывается к компании и описывает, как до неё «дотянуться» из интернета.
Обычные поддомены вида
<название>.yume.cloud считаются верифицированными сразу. Признак «кастомный домен» ставится для собственных доменов клиента — их нужно дополнительно проверить и зарегистрировать во внешней системе (см. раздел о регистрации кастомного домена).
Справочники: типы компаний, страны, валюты
Тип компании — это редактируемый справочник сфер деятельности (прокат авто, самокатов и т. п.). У каждого типа есть отображаемое название, машинный код, иконка, флаги «опубликован» и «активен», порядок сортировки и привязка к стране. Публичный список типов сортируется по полю порядка. Страна — фиксированный перечень поддерживаемых стран: Казахстан и ОАЭ. Валюта — фиксированный перечень поддерживаемых валют: тенге, доллар США, рубль, евро, узбекский сум, киргизский сом, дирхам ОАЭ, саудовский риял. Рядом с типами компаний в системе объявлен и перечень функциональных возможностей (продукты, комплекты, услуги, инвентарь, автомобиль, автоштрафы, различные режимы аренды и инвентаризации и т. д.) — он используется при настройке того, какие функции доступны типу компании и самой компании.Привязка периодической задачи к компании
Отдельная сущность связывает запланированную периодическую задачу с конкретной компанией, делая фоновую задачу зависимой от компании.
При сохранении привязки система:
- Прописывает идентификатор компании в служебные заголовки задачи — благодаря этому задача при запуске выполнится в контексте нужной компании.
- Если у задачи есть расписание по времени и включён флаг часового пояса компании — пересчитывает расписание из часового пояса компании; иначе использует UTC.
Как создаётся новая компания
Создание компании — это единая операция, которая заводит компанию «под ключ»: одну запись компании, стартовый период, домен, членство владельца, лимиты и полный набор дефолтных справочников и настроек. Всё это выполняется в одной транзакции — при сбое ничего не остаётся «наполовину созданным».Что именно создаётся
Запись компании. Создаётся в общих таблицах платформы. Заполняются: начало периода — текущий момент, окончание — через 7 дней, валюта (по умолчанию тенге), страна (по умолчанию Казахстан), владелец.
<поддомен>.yume.cloud. Если поддомен не передан, домен не создаётся, и «Ссылка» компании остаётся запасной (account.yume.cloud).
Членство владельца — владелец добавляется в компанию как администратор с правами суперпользователя и сотрудника.
Лимиты плана — создаётся начальный набор лимитов (см. ниже).
Дефолтные справочники (создаются как стартовое наполнение компании):
- Период времени «День» (длительность — одни сутки).
- Пункт проката «Пункт проката» с адресом-заглушкой.
- Метки клиентов: «Хороший» и «Плохой».
- Категория «Категория».
- Статусы состояния инвентаря: «Исправен» (без блокировки) и «Сломан» (с блокировкой).
- Способы привлечения клиентов: «Instagram», «Whatsapp», «Сарафанка».
- Типы оплаты: «Kaspi QR», «Kaspi RED», «Наличные».
Стартовые лимиты плана
Генерация лимитов добавляет только те лимиты, которых у компании ещё нет (существующие не трогает), а затем сбрасывает кэш лимитов компании. Начальный набор:
Эта же генерация вызывается повторно при открытии карточки компании, если число сохранённых лимитов не совпадает с полным перечнем типов лимитов — тогда недостающие лимиты будут дозаведены на лету.
Демо-доступ новой компании
Сразу после создания компания получает набор подключённых интеграций — иначе в только что заведённой компании не было бы даже аренды. Набор собирается из ответов онбординга, которые передаются вместе с данными компании и на самой компании не сохраняются:
Если сфера не указана, она выводится из типа компании: типы «такси» и «авто» дают транспорт, все остальные — инвентарь.
Что попадает в набор:
1
Аренда — демо
Основной модуль аренды подключается в демо-режиме. Вариация выбирается по сфере: для транспорта — та, где в лимитах есть автомобили, для инвентаря — любая другая. К подключению сразу привязывается самый короткий публичный тариф этой вариации в валюте компании — это тот тариф, в который демо превратится при оплате.
2
Бессрочные модули
Проверка должников egov подключается без даты окончания — она бесплатна, и демо-срок на неё тратить незачем.
3
Выбранные модули — демо
Каждый модуль из ответов онбординга подключается в демо-режиме.
В наборе перечисляются только точки входа. Каждое подключение дальше само «разворачивается» в связанные с ним рекомендованные интеграции, поэтому конкретный состав модулей по сферам настраивается в админке, а не зашит в код провижининга.
- Демо ставится только если у интеграции задана ненулевая длительность демо.
- Подключение, у которого уже есть демо-срок, оплаченный срок или тариф, не передатируется — то же правило, что и у ручного подключения («Демо-режим уже использован»). Если оно было отключено, его просто включают обратно.
- Неизвестные коды, повторы в списке и интеграции, которым не хватает обязательных полей настройки, пропускаются — один неверно настроенный модуль не роняет весь набор.
- Весь набор идёт одной транзакцией и даёт одно сообщение в административный канал со списком «интеграция — до какого числа — демо или нет».
Единственный путь создания компании
Компанию создаёт только отдельный запрос на создание компании — от уже вошедшего пользователя, с названием, адресом, типом, валютой, страной, поддоменом и ответами онбординга. Формат валидирует поддомен, после чего запускает провижининг. Создание разрешено только вне контекста конкретной компании; при попытке создать компанию, когда в запросе уже определена активная компания, вернётся отказ с предложением обратиться в поддержку по указанному телефону.Домены и поддомены
Проверка занятости поддомена
Перед регистрацией фронтенд проверяет, свободен ли желаемый поддомен. Правила:- Поддомен не должен содержать пробелов.
- Если существует домен, начинающийся с введённого текста, поддомен считается занятым.
- Если поддомен входит в список зарезервированных имён, он тоже считается занятым.
docs, manager, yume, api, dev, widget, auth, cabinet, landing, domain, app, prod, stage.
При фактическом создании компании поддомен проверяется ещё строже: сверка с зарезервированными именами и точная проверка «домен начинается с <поддомен>.». Если поддомен занят или зарезервирован — создание отклоняется с сообщением, что такой домен уже существует.
Регистрация кастомного домена
Когда клиент подключает собственный домен, его нужно проверить и зарегистрировать во внешней системе. Это делает фоновая задача:- Берёт домен, помеченный как кастомный. Если такого нет — завершается.
- Проверяет счётчик повторов: если он достиг предела (30 попыток) — прекращает попытки.
- Разрешает домен в IP-адрес. Если DNS ещё не отвечает — планирует повтор через 15 минут. Если IP не совпадает с ожидаемым адресом платформы — завершается с сообщением о несовпадении.
- Если IP совпал — обращается к внешнему сервису регистрации (с ключом доступа). При успешном ответе помечает домен верифицированным и проставляет дату верификации. При неуспехе или ошибке связи — планирует повтор через 15 минут.
Логика повторов рассчитана примерно на 30 попыток с интервалом 15 минут, то есть верификация кастомного домена может «дозревать» в течение нескольких часов, пока DNS-записи клиента распространяются.
Как это используется
API компаний и справочников
- Список компаний / создание компании — возвращает компании, где текущий пользователь является администратором-сотрудником; создание доступно только вне контекста конкретной компании. Это единственная точка, создающая компанию, и она же принимает ответы онбординга (сфера, модули), формирующие демо-набор.
- Карточка компании — чтение и обновление данных текущей компании; при открытии дозаводит недостающие лимиты. Если компания в запросе не определена, возвращается 404 с сообщением «Пользователь не подключён к компании» — тот же ответ, что и для несуществующей компании, вместо ошибки на пустом объекте.
- Массовое подключение интеграций — подключает сразу список модулей (
POST /v1/crm/integrations/bulk_connect/), по тем же правилам, что и демо-набор при регистрации: пропуск неизвестного и ненастраиваемого, одна транзакция, одно сообщение администраторам. В ответе — список того, что действительно подключилось. - Список типов компаний — публичный справочник, отсортированный по порядку.
- Шаги онбординга — список и отметка пройденных шагов для текущей компании.
- Заявка на демо — принимает телефон, ФИО и сферу деятельности и отправляет уведомление в административный Telegram-канал.
- Проверка поддомена — см. выше.
Инвалидация кэша компании
Компании кэшируются (по идентификатору и по именам доменов). При обновлении записи компании кэш сбрасывается автоматически: удаляется запись по идентификатору и записи по всем доменам этой компании. При создании компании сброс кэша не выполняется (кэшировать ещё нечего).Устаревший вход компании
Есть отдельная точка входа компании, возвращающая данные сессии, но с пустым идентификатором компании в ответе. Она помечена как устаревшая и подлежит удалению после обновления мобильных приложений — новый код на неё завязывать не следует.Связанные страницы
Глоссарий: Создание компании и её адрес
Полный перечень полей компании, домена, справочников и привязки периодических задач.
Компании и биллинг (подписки, платежи)
Обзорная страница модуля: как связаны компании, подписки, счета и платежи.
Проблемы и логические ошибки
Сводный список известных багов и логических нюансов всего модуля биллинга.
Инвойсы и платежи
Счета, их позиции и ошибки, расчёт суммы, инициация оплаты и обработка ответа от платёжной системы.
Карты и автосписания
Сохранённые платёжные карты компании и их привязка к автоматическим списаниям.
Платёжные шлюзы
Интеграция с платёжным шлюзом (подпись, инициация платежа/карты, списание и возврат) и legacy-клиент.
Лимиты и тарификация
Лимиты плана по ресурсам (сотрудники, точки, транспорт), их цены по периодам и пересчёт потребления.
Онбординг, новости и статистика
Шаги онбординга компании, лента новостей, снапшоты системной статистики и фоновые задачи.