Настройка для нескольких локаций в небольших сетях: филиалы, персонал, клиенты
Настройка многопунктовой системы для небольших сетей: структура филиалов, роли персонала и общие клиенты, чтобы каждая точка видела только нужные ей данные.

Что обычно идёт не так в многопунктовой настройке
Многопунктовая настройка для небольших сетей часто начинается с простой идеи: одна система для всех. Проблемы появляются, когда у каждого филиала одни и те же экраны, списки и кнопки, хотя обязанности у них разные.
Самая распространённая ошибка — смешанная видимость. Сотрудник на ресепшене в Филиале A может видеть записи, заметки или счета из Филиала B. Или менеджер пытается исправить локальную проблему и случайно меняет глобальную настройку, которая затрагивает все точки. Сначала это кажется удобным, но быстро превращается в шум и риск.
«Каждый филиал видит только то, что должен видеть» — это просто: персонал должен видеть только тех клиентов, заказы, расписания, запасы и отчёты, которые соответствуют их работе и филиалу. Если человек работает в двух филиалах, он должен видеть оба. Если кто‑то — региональный админ, он видит всё, но только потому, что вы специально это ему разрешили.
Когда вы ничего не делаете (или полагаетесь на неформальные правила), появляются предсказуемые проблемы:
- Сотрудники редактируют не ту запись, потому что списки включают данные других филиалов.
- Детали клиентов, заметки или статус платежа просачиваются между филиалами.
- Отчёты некорректны, потому что итоги смешивают филиалы без явных фильтров.
- Служба поддержки целый день отвечает на вопросы «Почему я это вижу?» и «Я не могу найти».
Цель не в том, чтобы всё заблокировать. Цель — осознанно определить, что разделяется, а что остаётся отдельным. Многие сети хотят общую базу клиентов (чтобы постоянного клиента узнали в любой точке), но при этом держать данные филиала — локальные расписания, внутренние заметки и эффективность персонала — отдельно.
Если вы используете конструктор без кода, примите эти решения до того, как будете строить экраны и рабочие процессы. Иначе придётся латать права, когда люди уже начнут пользоваться системой.
Ключевые элементы, которые нужно определить сначала
Многопунктовые системы работают лучше, когда вы заранее договоритесь о нескольких базовых вещах, прежде чем строить экраны, формы или отчёты. Если пропустить это, права запутаются, а данные утратят доверие.
Начните с называния строительных блоков. Большинству небольших сетей нужны: филиалы (локации), пользователи (учётные записи персонала), роли (типы должностей), клиенты (общая идентичность) и транзакции (заказы, записи, талоны, возвраты).
Дальше решите, какие записи являются глобальными, а какие принадлежат филиалу. Глобальные записи общие для компании, например профиль клиента, каталог товаров или корпоративные правила ценообразования. Записи, принадлежащие филиалу, относятся к одной точке: ежедневный кассовый отчёт, локальное расписание или учёт запасов по филиалу.
Правам нужны две измерения, не одно:
- Область (Scope): какие филиалы человек может видеть.
- Действие (Action): что он может делать с видимыми записями.
Доступ на чтение и редактирование должен быть раздельным. Региональный менеджер может читать все филиалы, но редактировать только штат своего филиала. Сотрудник на ресепшене может просматривать профили клиентов, но создавать и редактировать записи только для своей локации.
Наконец, договоритесь, как будут работать отчёты. Большинству команд нужны и ежедневные отчёты по каждой точке, и сводные отчёты для владельцев и бухгалтерии. Решите это заранее, чтобы не строить отчёты, которые путают данные.
Как моделировать филиалы, чтобы не загнать себя в угол
Многопунктовая настройка начинается с одного решения: что для вашего бизнеса значит «филиал»? Для кого‑то это розничный магазин, который посещает клиент. Для других — клиника, склад или франчайзинговая единица, которую нужно держать отдельной.
Начните с чёткого определения
Выберите одно значение и придерживайтесь его в модели данных. Если позже понадобятся отделы или сервисные зоны, добавьте их как отдельные сущности, а не перегружайте запись филиала.
Дайте каждому филиалу стабильный идентификатор, который никогда не меняется, даже если изменится имя. Короткий код (например, "NYC-01") обычно удобнее, чем адрес или название в качестве ключа.
Храните то, от чего зависит повседневная работа: код филиала и отображаемое имя, адрес, часовой пояс (важно для часов работы, бронирований и отчётов), рабочие часы (и переопределения на праздники), а также статус: активен, временно закрыт или заархивирован.
Теперь решите, как персонал связан с филиалами. В одних компаниях строго — один человек привязан к одному филиалу. В других персонал перемещается между точками. Любой подход работает, но он меняет назначение задач и фильтрацию записей.
Практичный подход — модель «назначение сотрудника на филиал», чтобы поддерживать связь один‑ко‑многим без переделки основной логики позже.
Сделайте рост несложным
Обращайтесь с новыми локациями как с данными, а не как с особым случаем. Простой тест: «Можем ли мы добавить филиал №7 без правок в логике?» В идеале добавление локации — это создание новой записи филиала, настройка часового пояса и часов работы, назначение персонала. Если вам приходится менять много правил, модель слишком жёстко связана.
Доступ персонала: роли, области видимости и кто что может
Чистая настройка прав начинается с одной идеи: отделяйте, что человек может делать (роль), от того, что он может видеть (область). Если смешивать это, вы получите «полезный» доступ, который незаметно превращается в избыточное раскрытие данных.
Большинству небольших сетей достаточно простых ролей: владелец, региональный менеджер, управляющий филиалом, сотрудник и поддержка. Определите стандартные права для каждой роли и держите их простыми. Для каждой области (клиенты, записи/заказы, запасы, заметки, отчёты) решите, что значит просматривать, создавать и редактировать. Отдельно отметьте действия, которые по умолчанию не даются: экспорт данных или админ‑изменения.
Чек‑лист, который предотвращает путаницу:
- Просмотр записей
- Создание новых записей
- Редактирование существующих записей
- Экспорт или скачивание данных
- Админ‑действия (управление пользователями, изменение правил, удаление)
Область — вторая половина замка. Большинству команд достаточно трёх уровней: только свой филиал, назначенные филиалы или все филиалы. Управляющий филиалом может редактировать внутри своей точки. Региональный менеджер может просматривать несколько филиалов, но редактировать только штат и расписания.
Планируйте исключения заранее. Временный доступ должен истекать автоматически, не полагайтесь на чью‑то память. Учебные учётные записи пользуйтесь фиктивными данными или изолированной песочницей. Подрядчики должны получать минимальную область доступа и без права экспорта по умолчанию.
Общие клиенты без лишнего раскрытия
Общая база клиентов — частая цель многопунктовой настройки, но она же может стать самым быстрым способом утечки данных между филиалами. Решите, что действительно «один клиент везде», а что должно оставаться локальным.
Обычно в общем хранят профиль клиента (имя, контакты), статус лояльности и общие предпочтения вроде «не звонить» или «предпочитает e‑mail». Это помогает любой точке узнать клиента и обслужить его последовательно.
Данные, связанные с конкретным филиалом, должны оставаться привязанными к точке: визиты, покупки, записи, сервисные заметки и локальные теги вроде «VIP для филиала A» или «нужен фоллоу‑ап на следующей неделе». Хранение таких данных локально снижает шум и не даёт сотрудникам читать детали, которые им не нужны.
Установите чёткие правила просмотра
Простая политика: все могут найти клиента, но не все видят всё.
Сотрудники на ресепшене видят профиль и контактные предпочтения, а также визиты своего филиала. Менеджеры видят сквозные суммы (например, суммарные расходы клиента) без подробных заметок из других точек. Роли HQ или поддержка могут просматривать полную историю при необходимости эскалации. Маркетинг может иметь доступ к статусу подписки и сегментам, но не к приватным сервисным заметкам.
Так общая база полезна, но не превращается в общий дневник.
Защищайте чувствительные поля по дизайну
Чувствительные данные (приватные заметки, документы, жалобы, медицинские или юридические детали) должны отделяться от общих заметок и быть под более строгими правами. Если вы храните документы, сделайте доступ явным: кто может загружать, кто — просматривать, и ограничен ли просмотр рамками того же филиала.
Пример: клиент пришёл в Филиал 1 на стрижку, а в Филиале 2 купил товар. Персонал Филиала 2 должен видеть уровень лояльности и предпочтение «аллергия на аромат», но не детальную жалобу из Филиала 1.
Простые паттерны разделения данных
Ключевое решение — разделять данные тегом или физически. Большинству небольших сетей хватает одного общего набора данных и чётких правил.
Паттерн 1: одна база, у каждой записи — BranchID
Обычно так делают. Заказы, записи, учёт запасов и действия персонала хранятся в одних таблицах, но каждая строка содержит BranchID (или LocationID). Это поддерживает общих клиентов, кросс‑отчётность и покрытие персонала между филиалами.
Паттерн 2: отдельные базы для каждого филиала
Это кажется «безопаснее», но увеличивает операционные расходы. Миграции нужно делать многократно, отчёты усложняются, а общие клиенты превращаются в проблему синхронизации.
Практическое правило:
- Используйте одну базу с BranchID, если хотите общих клиентов, сводные отчёты и гибкое покрытие персоналом.
- Используйте отдельные базы только при юридических или контрактных ограничениях, требующих изоляции.
Независимо от выбора, сделайте фильтрацию по филиалу автоматической. Не полагайтесь на каждый экран или отчёт, чтобы помнить фильтр. Рассматривайте локацию как часть сессии пользователя и принудительно применяйте её в одном месте, чтобы все списки и действия по умолчанию были ограничены.
Также продумайте глобальные элементы и локальные переопределения. Держите определения глобальными (каталог, шаблоны услуг, правила цен), добавляйте опциональные поля переопределения по филиалу (локальная цена, порог запаса, часы работы). Это позволяет не дублировать весь каталог по каждой точке.
Заведите аудит‑логи сразу. Вам нужно будет отвечать «кто это изменил и где?». Минимум — user ID, branch ID, метка времени, действие (создание, обновление, удаление) и предыдущие/последующие значения для чувствительных полей.
Пошагово: настройте филиалы, права и правила видимости
Цель простая: люди должны видеть только то, что нужно для работы, и ничего лишнего. Самый лёгкий путь — решить, что принадлежит филиалу, что общее и как персонал переходит по экранам.
Практическая последовательность настройки
Начните на бумаге или в простой таблице перед тем, как лезть в базу или конструктор приложений.
- Перечислите все типы данных (записи, заказы, запасы, заметки персонала, профили клиентов). Отметьте каждый как глобальный (общий) или принадлежащий филиалу.
- Определите роли простым языком (ресепшн, техник, управляющий, офис). Для каждой роли пропишите область: один филиал, назначенные филиалы или все филиалы.
- Задайте правила для общих клиентов: что видно между филиалами, что остаётся локальным. Решите, кто может редактировать общие поля.
- Спроектируйте отдельные экраны и отчёты для персонала и менеджеров. Виды сотрудников по умолчанию должны показывать «мой филиал». У менеджеров могут быть фильтры и сравнения.
- Протестируйте на тестовых аккаунтах из разных филиалов: создайте бронирование, возврат, обновите профиль клиента, запустите отчёт и убедитесь, что система блокирует то, что должна.
Не пропускайте тестирование. Большинство проблем с правами проявляются только при входе под реальной ролью и попытке быстро выполнить ежедневную задачу.
Распространённые ошибки и как их избегать
Большинство проблем не катастрофичны. Это мелкие дефолты, которые тихо дают утечки данных или мешают работе. Считайте, что каждый экран, отчёт и экспорт требует правило по локации.
Отчёты и экспорты — частая недоработка. Команда аккуратно фильтрует представления в приложении по филиалу, а затем экспортирует «всех клиентов» или «продажи за месяц» и случайно включает другие точки. Относитесь к экспортам как к отдельной функции с собственными фильтрами и тестами. Если сотрудник не видит запись в приложении, он не должен иметь возможность экспортировать её.
Ещё одна проблема — роль «менеджер», которая тихо становится админом. Это происходит, когда группируют права по экрану, а не по риску. Менеджерам могут понадобиться возвраты, правки смены или заметки, но не создание пользователей, изменение прав или настройка филиалов. Разделяйте «управление операциями» и «управление системой».
Общие клиенты тоже путают, когда всё хранится в одном наборе полей. Если вы кладёте заметки, относящиеся к конкретной точке («всегда просит скидку здесь»), в глобальную заметку, вы получаете избыточное раскрытие. Держите общие факты о клиенте отдельно от локальных заметок и истории посещений.
Отсутствие аудита вызывает обвинения и переработку. Когда два филиала редактируют одного клиента, нужно базовое «кто и когда это поменял». Хотя бы created_by, updated_by и метки времени значительно помогают.
Наконец, планируйте персонал, который плавает между филиалами. Если вы «перемещаете» его между локациями вместо назначения множественных доступов, расписания и видимость ломаются.
Практические фиксы, которые стоит заложить сразу:
- Пропишите правило для каждого типа данных: глобально (для всех) или только для филиала.
- Определите роли через действия, затем добавьте область (один филиал против многих).
- Встроите фильтры по филиалу во все списки, отчёты и экспорты.
- Храните локальные заметки и общие данные клиентов раздельно.
- Фиксируйте правки (пользователь + время) для изменений клиентов и заказов.
Быстрая проверка перед запуском
Прежде чем открыть доступ для всех точек, проведите «псевдодень» с тестовыми аккаунтами. Создайте по крайней мере одного сотрудника для каждого филиала и одного регионального менеджера. Затем выполните типовые задачи: запишитесь на приём, создайте заказ, обновите профиль клиента, запустите отчёт.
Используйте этот чек‑лист, чтобы поймать самые распространённые ошибки:
- Войдите как сотрудник филиала и подтвердите, что он видит только заказы, записи и задачи своего филиала. Поиск, фильтры и недавние элементы не должны показывать другие точки.
- Войдите как менеджер, который наблюдает за несколькими филиалами. Он должен видеть несколько точек, но редактирование ограничено назначенными филиалами.
- Откройте один и тот же профиль клиента из двух филиалов. Имя и контакты должны совпадать, обновления не должны создавать дубликаты.
- Переключите активный филиал в админке или отчётах и сравните итоги. Проверьте несколько дней: числа должны меняться при переключении, а вид для «всех филиалов» должен равняться сумме по отдельным филиалам.
- Деактивируйте учётную запись сотрудника и убедитесь, что доступ немедленно отозван (в приложении и через API/админ‑пути).
Потом протестируйте одну крайность: клиент купил в Филиале A, затем звонит в Филиал C за поддержкой. Сотрудник Филиала C должен видеть общий профиль клиента, но не внутренние заметки Филиала A или закрытые записи.
Пример сценария: один клиент, три филиала
Представьте салон с тремя точками: Downtown, Riverside и Mall. У них общая база клиентов, чтобы клиент мог записаться в любой точке, но у каждого филиала своё расписание, штат и ежедневные заметки.
Майя (ресепшн в Downtown) заходит в систему. Она видит только календарь Downtown, сотрудников Downtown и сегодняшние записи. Она может искать клиентов по всей базе, но видит только базовую информацию: имя, телефон, аллергии и статус лояльности. Она не видит расписание Riverside, показатели сотрудников Riverside или приватные заметки.
Алекс (владелец) входит в систему. Алекс видит все три календаря, отчёты по выручке по филиалам и может управлять ролями персонала. Алекс также может одобрять исключения типа больших скидок.
Джордан обычно ходит в Downtown, но на этой неделе записался в Mall. При чекине в Mall видят основной профиль и историю услуг (что сделано, когда и кем). После приёма Mall добавляет новую услугу в историю Джордана. Downtown позже видит это, чтобы не задавать лишних вопросов и не предложить ненужный фоллоу‑ап.
Сложный момент на кассе: Джордан просит скидку 30% из‑за задержки. Ресепшн Mall может создать запрос на скидку, но применить более 10% не может. Запрос идёт к Алексу на одобрение. Алекс одобряет, чек обновляется, а аудит‑лог показывает, кто запросил и кто одобрил.
Чувствительные заметки обрабатываются по‑другому. Если стилист добавил приватную заметку вроде «у клиента медицинская проблема, осторожно с процедурами», её видят только стилисты и владелец. Ресепшн видит нейтральный флаг «требуется особое обращение», без деталей.
Что делает это возможным: набор простых правил — расписания и персонал привязаны к филиалу, базовые данные клиента общие, чувствительные заметки ограничены, лимиты на скидки через согласование.
Следующие шаги: задокументируйте правила, протестируйте доступ, затем стройте
Многопунктовая настройка остаётся аккуратной только если правила заданы письменно и протестированы как функция, а не ощущение. Превратите решения «кто что видит» в короткие чёткие предложения.
Стремитесь к 10–15 коротким утверждениям, покрывающим повседневные случаи: бронирования, профили клиентов, платежи, возвраты, заметки и отчёты. Например:
- Сотрудник видит клиентов и заказы только своего филиала.
- Контактные данные клиента видны всем филиалам, но заметки — только филиалу.
- Менеджеры видят отчёты по филиалу; только владелец видит суммарные отчёты по всем филиалам.
- Возвраты требуют одобрения менеджера и должны быть в пределах того же филиала.
- Только HQ может редактировать прайс‑листы и глобальные настройки.
Решите, какие экраны и отчёты всегда по умолчанию должны открываться в контексте филиала. Если экран может показывать все филиалы, сделайте это явным фильтром, а не дефолтом. Хороший тест: может ли кассир случайно открыть отчёт по выручке другого филиала без усилий? Если да — ужесточите дефолт.
Тестируйте не под админом, а под реальными ролями. Создайте три тестовых пользователя (кассир, менеджер, HQ) и пройдитесь по сценарию: звонок из Филиала A, визит в Филиал B, возврат в Филиал C. Убедитесь, что каждый видит только нужное.
Планируйте ежемесячную проверку прав, чтобы предотвратить дрейф: новые роли, смены должностей, открытие филиалов и накопление доступа к отчётам.
Если вы строите кастомный внутренний инструмент, AppMaster (appmaster.io) может помочь смоделировать филиалы, роли и бизнес‑правила в одном месте, а затем генерировать чистый код по мере изменения требований, чтобы правила прав доступа оставались последовательными по мере роста.


