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

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

`POST /api/v1/automation/rules/validate`

## Request

- Base URL: `https://erp.akeda.ru`
- URL: `https://erp.akeda.ru/api/v1/automation/rules/validate`
- 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`)

Проверяет документ правила «когда → если → то» той же проверкой, что
и запись правила: событие и условие по каталогам, сборка условия
вычислителем, обязательные входы действий, подключённость модулей.
Ничего не сохраняет (`saved` всегда `false`).

Отвечает нормализованным документом (условие собрано из сравнений,
исполнитель — вызывающий), первым замечанием `problem` с путём в
документе, текстом и подсказкой на языке запроса и статусом каждого
действия: исполняется ли оно движком, хватает ли вызывающему права
(он станет исполнителем правила) и уходит ли оно за пределы кабинета
(`external`). `external_send` — включение такого правила потребует
подтверждения человеком. Документ с замечанием — это ответ 200 с
`valid: false`, а не ошибка.

## Query parameters

- `locale` 'ru' | 'en'

## Headers

- `X-Tenant` string, required

## Request body

- object
  - `rule` AutomationRuleDraft, required: Документ правила в той же форме, что у записи с экрана и у проверки; новые поля документа принимаются без смены этой схемы. Правка без branches и otherwise сохраняет прежние ветки; убрать их — прислать пустые списки.
    - `name` string
    - `event_type` string, required
    - `conditions` object[]
      - `field` string, required
      - `op` string, required
      - `value` string
      - `value_to` string
      - `of` string
      - `group` integer
    - `actions` AutomationRuleBlock[]
      - `id` string
      - `kind` 'action' | 'wait': Пусто — действие
      - `command` string
      - `inputs` object
      - `wait` object: Пауза: after_event — через amount единиц unit от начала паузы; relative_to_field — до даты поля field (± amount); cancel_on — события, факт которых по той же записи прекращает правило
        - `kind` 'after_event' | 'relative_to_field'
        - `amount` integer
        - `unit` 'minutes' | 'hours' | 'days' | 'working_days'
        - `direction` 'before' | 'after'
        - `field` string
        - `at` string
        - `cancel_on` string[]
    - `branches` AutomationRuleBranch[]
      - `id` string
      - `condition` string: Выражение, собранное сервером из conditions
      - `conditions` object[], required
        - `field` string, required
        - `op` string, required
        - `value` string
        - `value_to` string
        - `of` string
        - `group` integer
      - `actions` AutomationRuleBlock[], required
        - `id` string
        - `kind` 'action' | 'wait': Пусто — действие
        - `command` string
        - `inputs` object
        - `wait` object: Пауза: after_event — через amount единиц unit от начала паузы; relative_to_field — до даты поля field (± amount); cancel_on — события, факт которых по той же записи прекращает правило
          - `kind` 'after_event' | 'relative_to_field'
          - `amount` integer
          - `unit` 'minutes' | 'hours' | 'days' | 'working_days'
          - `direction` 'before' | 'after'
          - `field` string
          - `at` string
          - `cancel_on` string[]
    - `otherwise` AutomationRuleBlock[]
      - `id` string
      - `kind` 'action' | 'wait': Пусто — действие
      - `command` string
      - `inputs` object
      - `wait` object: Пауза: after_event — через amount единиц unit от начала паузы; relative_to_field — до даты поля field (± amount); cancel_on — события, факт которых по той же записи прекращает правило
        - `kind` 'after_event' | 'relative_to_field'
        - `amount` integer
        - `unit` 'minutes' | 'hours' | 'days' | 'working_days'
        - `direction` 'before' | 'after'
        - `field` string
        - `at` string
        - `cancel_on` string[]
    - `after_rule_id` string: Очередь (ERP-1613): id правила на то же событие, после которого сработать; пустая строка — сразу; поля нет — очередь прежняя

## Response `200`

Итог проверки

- AutomationRuleValidation
  - `valid` boolean, required
  - `rule` AutomationRuleDraft, required: Документ правила в той же форме, что у записи с экрана и у проверки; новые поля документа принимаются без смены этой схемы. Правка без branches и otherwise сохраняет прежние ветки; убрать их — прислать пустые списки.
    - `name` string
    - `event_type` string, required
    - `conditions` object[]
      - `field` string, required
      - `op` string, required
      - `value` string
      - `value_to` string
      - `of` string
      - `group` integer
    - `actions` AutomationRuleBlock[]
      - `id` string
      - `kind` 'action' | 'wait': Пусто — действие
      - `command` string
      - `inputs` object
      - `wait` object: Пауза: after_event — через amount единиц unit от начала паузы; relative_to_field — до даты поля field (± amount); cancel_on — события, факт которых по той же записи прекращает правило
        - `kind` 'after_event' | 'relative_to_field'
        - `amount` integer
        - `unit` 'minutes' | 'hours' | 'days' | 'working_days'
        - `direction` 'before' | 'after'
        - `field` string
        - `at` string
        - `cancel_on` string[]
    - `branches` AutomationRuleBranch[]
      - `id` string
      - `condition` string: Выражение, собранное сервером из conditions
      - `conditions` object[], required
        - `field` string, required
        - `op` string, required
        - `value` string
        - `value_to` string
        - `of` string
        - `group` integer
      - `actions` AutomationRuleBlock[], required
        - `id` string
        - `kind` 'action' | 'wait': Пусто — действие
        - `command` string
        - `inputs` object
        - `wait` object: Пауза: after_event — через amount единиц unit от начала паузы; relative_to_field — до даты поля field (± amount); cancel_on — события, факт которых по той же записи прекращает правило
          - `kind` 'after_event' | 'relative_to_field'
          - `amount` integer
          - `unit` 'minutes' | 'hours' | 'days' | 'working_days'
          - `direction` 'before' | 'after'
          - `field` string
          - `at` string
          - `cancel_on` string[]
    - `otherwise` AutomationRuleBlock[]
      - `id` string
      - `kind` 'action' | 'wait': Пусто — действие
      - `command` string
      - `inputs` object
      - `wait` object: Пауза: after_event — через amount единиц unit от начала паузы; relative_to_field — до даты поля field (± amount); cancel_on — события, факт которых по той же записи прекращает правило
        - `kind` 'after_event' | 'relative_to_field'
        - `amount` integer
        - `unit` 'minutes' | 'hours' | 'days' | 'working_days'
        - `direction` 'before' | 'after'
        - `field` string
        - `at` string
        - `cancel_on` string[]
    - `after_rule_id` string: Очередь (ERP-1613): id правила на то же событие, после которого сработать; пустая строка — сразу; поля нет — очередь прежняя
  - `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[]
  - `actions` object[], required
    - `index` integer, required: Номер действия по путям подряд: «Если да», «Если ещё», «Иначе»
    - `block_id` string
    - `command` string, required
    - `label` string, required
    - `status` 'live' | 'declared' | 'unknown', required
    - `permission` string, required
    - `allowed` boolean, required: Хватает ли права вызывающему — он станет исполнителем правила
    - `connected` boolean, required
    - `danger` string, required
    - `external` boolean, required: Действие уходит за пределы кабинета
    - `posting` boolean: Действие выпускает учётный документ или двигает товар и деньги
    - `code` string
    - `message` string
  - `external_send` boolean, required: Включение правила потребует подтверждения человеком
  - `money_posting` boolean: Включение правила потребует подтверждения человеком по классу «деньги и проводки»
  - `saved` boolean, required

## Other responses

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

---

[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)
