Перейти к содержимому

Организация

Назначение

Структура бизнеса: корпорации, юрлица, подразделения, контрагенты, места приготовления, настройки списания. Фундаментальный контекст — все остальные модули зависят от организационных сущностей.

7 контроллеров, ~25 эндпоинтов.


Сценарии

Настройка корпорации

Актор: Владелец / Администратор

Корпорация — верхний уровень иерархии (сеть ресторанов или отдельное заведение).

Настройки:

НастройкаЗачемГде используется
Часовой пояс (IANA timezone)Корректный расчёт датКассовые смены, отчёты, явки
Время начала учётного дняНочные операции (после полуночи до этого времени) → предыдущий деньКассовые смены, отчёты
Метод списанияFIFO или средняя стоимостьСкладской учёт
Предварительная блокировкаПредупреждение при работе с документами закрытого периодаВсе документы
Окончательная блокировкаЗапрет создания/изменения документов до этой датыВсе документы
Стратегия времени документаКакое время подставлять для каждого типа документа (текущее / начало дня / конец дня)Складские, бухгалтерские документы

Бизнес-правила:

  • Предварительная блокировка ≤ окончательная
  • Timezone — валидный IANA (например, Europe/Moscow)

Outbox-события:

  • core.company.office.corporation.updated — при изменении настроек; публикуется через outbox в общий топик office.events

Юрлица

Актор: Владелец / Бухгалтер

Юрлицо — организация для документооборота (накладные, платежи, акты).

Операции: CRUD + назначение должностных лиц (директор, главбух, технолог) из списка сотрудников.

Бизнес-правила:

  • ИНН с контрольной суммой: 10 цифр (юрлицо), 12 (ИП)
  • КПП — 9 цифр, БИК — 9 цифр, расчётный счёт — 20 цифр
  • ИНН уникален в корпорации
  • Нельзя удалить юрлицо с подразделениями

Доменное событие: legal-entity-changed

Подразделения

Актор: Управляющий / Владелец

Подразделение — локация или функциональная единица.

Типы:

  • WAREHOUSE (склад) — хранение товара → накладные, инвентаризации, остатки
  • KITCHEN (кухня) — место приготовления → привязка к номенклатуре
  • HALL (зал) — место обслуживания гостей
  • OUTLET (торговая точка) — продажи, привязка POS-терминалов

Операции: CRUD, иерархия (parent → children), дерево подразделений, мягкое удаление/восстановление.

Бизнес-правила:

  • Код уникален в рамках юрлица
  • Нельзя создать циклическую иерархию
  • Нельзя удалить подразделение с дочерними или привязанными сотрудниками

Доменное событие: subdivision-changed

Настройка списания

Актор: Управляющий

Определяет: из какого склада списывать товар при продаже в данном подразделении для данного места приготовления.

Пример:

ПодразделениеМесто приготовленияСклад списания
Основной залКухняКухонный склад
Основной залБарБарный склад

Бизнес-правила:

  • Склад — подразделение типа WAREHOUSE в том же юрлице
  • Пара (подразделение, место приготовления) уникальна

Контрагенты

Актор: Менеджер закупок / Бухгалтер

Внешняя организация или физлицо для документооборота.

Роли (может быть несколько): поставщик, клиент, сотрудник, гость.

Операции: CRUD, юрлица контрагента (с реквизитами), мягкое удаление.

Бизнес-правила:

  • Минимум одна роль
  • ИНН с контрольной суммой
  • Название уникально в корпорации
  • Нельзя удалить контрагента, используемого в активных документах

Доменное событие: counterparty-changed

Места приготовления

Актор: Управляющий

Абстракция производственной зоны (кухня, бар, кондитерская). Используется для настройки списания и привязки номенклатуры.

Нельзя удалить, если используется в настройках списания или привязано к номенклатуре (проверка через ACL к модулю Меню).

Доменное событие: preparation-place-changed


Связи с другими контекстами

НаправлениеЧтоЗачем
Организация → СкладПодразделения, даты блокировкиПринадлежность складов, запрет документов в закрытых периодах
Организация → БухгалтерияДаты блокировки, timezoneЗапрет проводок в закрытых периодах
Организация → POSTimezone, учётный деньРасчёт учётной даты смены
Организация → МенюДаты блокировкиЗапрет изменения цен в закрытых периодах
Организация → ОтчётностьTimezone, учётный деньГруппировка выручки по дням
Организация ← Меню (через ACL)Количество номенклатурыПроверка перед удалением места приготовления

Синхронизация с POS

При изменении любой организационной сущности — событие в Kafka для обновления POS-терминалов.


Сущности

СущностьОписание
КорпорацияКорневая сущность. Timezone, учётный день, метод списания, даты блокировки
ЮрлицоИНН, КПП, ОГРН, адрес, банковские реквизиты. Тип: ООО или ИП
ПодразделениеТип (склад/кухня/зал/точка), иерархия, мягкое удаление
КонтрагентРоли (поставщик/клиент/сотрудник/гость), мягкое удаление
Юрлицо контрагентаРеквизиты конкретного юрлица контрагента
Место приготовленияАбстракция производственной зоны
Настройка списанияСвязь: подразделение + место приготовления → склад
Настройка времени документаСтратегия для каждого типа документа