---
title: "Прогнать правило автоматизации на истории кабинета"
method: POST
path: "/api/v1/automation/rules/simulate"
tags: ["Automation"]
---

# Прогнать правило автоматизации на истории кабинета

`POST /api/v1/automation/rules/simulate`

## Request

- Base URL: `https://erp.akeda.ru`
- URL: `https://erp.akeda.ru/api/v1/automation/rules/simulate`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://erp.akeda.ru/oauth2/authorize`, token URL `https://erp.akeda.ru/oauth2/token`, scopes: `akeda:delegate`)

Прогоняет документ правила «когда → если → то» по настоящим фактам
кабинета за последние `days` дней (по умолчанию 30, не больше 90) тем
же вычислителем условия, что и живой прогон, и отвечает: сколько фактов
события было, сколько раз правило сработало бы, в какой день больше
всего, на каких записях (до 50), что сделали бы действия и кому не
хватило бы прав.

С `rule_id` в ответе есть и «было» (`before`): сохранённая версия
правила на тех же фактах; выключенное правило — 0. Так экран показывает
«было 0 → станет 12» до включения.

Ничего не исполняется и не записывается (`executed` всегда `false`).
Факты видны только те, что вызывающий вправе видеть: письмо — из его
ящиков, остальное — при праве чтения модуля-источника. Учитываются
последние 2000 фактов периода (`truncated`).

Кривое событие или условие — 422 со словами, как у записи правила.
Недозаполненное действие прогону не мешает: итог приходит с `problem`.

## Query parameters

- `locale` 'ru' | 'en'

## Headers

- `X-Tenant` string, required

## Request body

- AutomationRuleSimulateRequest
  - `rule` object, required: Документ правила в той же форме, что у проверки правила (event_type, conditions, actions); название и исполнитель не нужны.
    - `event_type` string, required
  - `rule_id` string, uuid: Сохранённое правило: его версия на тех же фактах — «было»
  - `days` integer: Период прогона в днях; по умолчанию 30

## Response `200`

Итог прогона на истории

- object
  - `result` AutomationRuleSimulation, required
    - `days` integer, required
    - `since` string, date-time, required
    - `events` integer, required: Фактов события за период, видимых вызывающему
    - `fired` integer, required: Сколько раз правило сработало бы
    - `truncated` boolean, required: Учтены только последние 2000 фактов периода
    - `max_per_day` integer, required: Больше всего срабатываний за один день
    - `records` object[], required
      - `key` string, required
      - `entity_id` string, required
      - `title` string: Номер, идентификатор или тема записи
      - `occurred_at` string, date-time, required
      - `path_id` string: Каким путём пошёл бы факт
    - `paths` object[]: У правила с ветками — сколько фактов пошло бы каждым путём
      - `id` string, required
      - `count` integer, required
    - `actions` object[], required
      - `index` integer, required
      - `block_id` string
      - `path_id` string
      - `command` string, required
      - `label` string, required
      - `permission` string, required
      - `allowed` boolean, required
      - `connected` boolean, required
      - `count` integer, required: Сколько раз действие выполнилось бы; 0 — его заблокировали права или нет исполнителя
      - `code` string
      - `message` string
    - `before` object
      - `enabled` boolean, required
      - `version` integer, required
      - `fired` integer, required: Сколько раз сработала бы сохранённая версия; выключенное правило — 0
    - `selection` object: Отбор записей правила по расписанию (ERP-1939): сколько записей отобрал бы модуль-владелец сегодня под проверяющим, сколько прошли бы «если», пример
      - `key` string, required
      - `label` string, required
      - `count` integer, required
      - `matched` integer, required: Сколько записей прошли бы условие и пути
      - `truncated` boolean, required: Записей больше limit — за запуск возьмутся первые
      - `limit` integer, required
      - `code` string: Почему отбор не прочитан (automation.reason.<код>)
      - `message` string
      - `sample` object[], required
        - `entity_id` string, required
        - `title` string, required
        - `matched` boolean, required
        - `fields` object, required
    - `executed` boolean, required: Всегда false: прогон ничего не исполняет
  - `problem` AutomationRuleProblem
    - `field` string, required: Путь в документе правила: event_type, conditions[1].op, actions[0].inputs.title
    - `code` string, required
    - `message` string, required
    - `hint` string
    - `params` object
    - `allowed` string[]

## Other responses

- `400`: Некорректный запрос или нарушение бизнес-правила
- `401`: Сессия, ключ или кабинет не подтверждены
- `403`: Текущая роль не имеет требуемого права
- `404`: Запись не найдена или не видима текущему пользователю
- `422`: Событие или условие правила не проходит проверку

---

[API](https://skmtc.dev/akeda/apis/akeda-erp-client-api.md) · [All operations](https://skmtc.dev/akeda/apis/akeda-erp-client-api/llms.txt) · [OpenAPI document](https://skmtc.dev/akeda/apis/akeda-erp-client-api/revisions/3c60ded179f2?raw)
