Правила Документирования Алгоритма
Каноничная структура раздела «Алгоритм» для любой операции (API-метод, consumer, background job, use case). Раздел описывает поведение — что операция делает по шагам на уровне бизнес-логики, happy path и negative paths. Уровень изложения — по Уровню изложения ТЗ.
Зачем
Алгоритм — главная ценность документа операции. Он отвечает: что делает операция, какую сущность по каким условиям читает/проверяет, какие бизнес-правила применяет, что создаёт/меняет/удаляет, какие факты/события фиксирует и что возвращает — и что происходит при каждом отказе. Это постановка для аналитика и разработчика, а не псевдокод: никаких имён классов/хендлеров, вызовов репозиториев, монады результата и транзакций SDK.
Структура шагов
Заполняй нумерованными шагами. Неприменимый шаг опускается, а не помечается «не применяется». Шаги записи (5–7) в read-операциях не пишутся вовсе. Порядок:
- Контекст и доступ. Кто выполняет операцию (актор), в каком scope/tenant; какие права требуются.
- Проверка входа и предусловий (каждый пункт явно, при нарушении — какой код ошибки):
- формат/диапазоны/enum входных полей → ошибка валидации;
- существование сущности по её бизнес-ключу/id → если не найдена, какой код ошибки (или это upsert — тогда отсутствие допустимо);
- допустимость состояния — текущий статус сущности разрешает операцию (перечислить допустимые);
- принадлежность/scope — tenant, владелец/группа (record-level), согласованность связей.
- Что читаем. Какие сущности и по каким условиям загружаем и зачем (напр. «карточка проекта — для проверки инварианта до записи»). Списки/поиск — по каким фильтрам/сортировке/пагинации.
- Бизнес-правила и переходы. Инварианты (
INV-*), переходы статусаFrom → Toс условием, расчёты; маппинг поле-в-поле: для каждого выходного/сохраняемого поля — источник (вход/загруженная сущность/ вычисление). - Что меняется (только операции записи). Какие сущности создаются/обновляются/удаляются и в каком порядке; правила конкурентного доступа — как бизнес-условие («правка не должна затирать чужую»).
- Какие факты/события фиксируются (только если есть). Доменные и интеграционные события: имя события, топик, из каких полей собирается снапшот, кто потребители.
- Согласованность (только операции записи). Что меняется в одном согласованном изменении (атомарно) — бизнес-формулировкой, без имён транзакций SDK.
- Результат. Что возвращает операция (модель/статус); для чтения — актуальность (freshness) и правила маскирования чувствительных полей.
Правила стиля
- Пиши доменными именами: сущность, поле, статус, enum, инвариант, код ошибки, топик, событие. Не
используй имён классов/хендлеров/валидаторов, вызовов репозиториев,
Result.Fail(...), транзакций SDK. - Коды ошибок называй в шаге и дублируй в таблице «Ошибки»; не показывай форму
Result.Fail(CODE). - Каждый шаг — happy path; для каждой ветки отказа явно указывай исход (какой код ошибки / деградация).
- Диаграмма — опциональна; если рисуешь, участники — бизнес/доменные роли (актор, сервис, витрина, внешняя система), не репозитории/хендлеры. Для тривиального CRUD диаграмму не рисуй.
Мини-пример (фиксация клиента, CRM)
- Контекст и доступ. Операцию выполняет агент; tenant — его агентство; требуется право фиксировать клиента.
- Проверка. Объект существует и его статус ∈ {
Available,Reserved}; инвестор существует; агент принадлежит агентству (scope); на пару (агент, инвестор, объект) ещё нет активной фиксации — иначе отказCRM_FIXATION_ALREADY_EXISTS. - Что читаем. Объект и инвестора — для проверок выше.
- Правила. Создаём фиксацию (инвариант «одна активная фиксация на пару»), статус
None → Active. - Что меняется. Появляется запись фиксации.
- События. Публикуется
ClientFixated(топикpin.crm.client-fixations.v1) — потребители: rewards, dev-stats. - Согласованность. Фиксация и факт её создания фиксируются в одном согласованном изменении.
- Результат. Идентификатор фиксации, её статус и дата.
Обратные ссылки
Автоссылки: где используется этот документ.
- API (2): Identity Admin API — реестр методов и общие правила области, Identity Agent API — реестр методов и общие правила области
- index.md (1): Rewards Service
- cqrs-documentation-rules.md (1): Правила Документирования CQRS
- cross-cutting-document-requirements.md (1): Общие Требования К Документам
- documentation-file-templates.md (1): Индекс Шаблонов Документации
- spec-authoring-altitude-rules.md (1): Уровень изложения ТЗ (analyst altitude)
- api-method-template.md (1): <HTTP-метод>
— <Название операции> - command-query-template.md (1): Внутренняя операция: <НазваниеОперации>
- consumer-template.md (1): Consumer:
Связанные документы
- Уровень изложения: spec-authoring-altitude-rules.md.
- Общие требования: cross-cutting-document-requirements.md.
- Смежные правила: api-documentation-rules.md, entity-documentation-rules.md, event-documentation-rules.md.
- Шаблоны: api-method-template.md, consumer-template.md, use-case-template.md.