---
title: "Принять решение согласующего"
method: POST
path: "/api/v1/docflow/approvals/{id}/decisions"
tags: ["Docflow approvals"]
---

# Принять решение согласующего

`POST /api/v1/docflow/approvals/{id}/decisions`

## Request

- Base URL: `https://erp.akeda.ru`
- URL: `https://erp.akeda.ru/api/v1/docflow/approvals/{id}/decisions`
- 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`)

Решений три, и «отказать» с «вернуть на доработку» — РАЗНЫЕ действия: reject заканчивает маршрут, return отдаёт предмет автору и ждёт его правки, оставляя проход открытым. Обоим обязателен комментарий: без слов автор не узнает, что исправлять, и вернётся с той же бумагой. Approve комментария не требует.

Поле reviewer_id называет, ЧЬЯ виза закрывается, и это не обязательно тот, кто нажимает: замещающий закрывает визу отсутствующего, оставаясь собой в истории. Право ответить за чужую визу ищется в одном порядке — замещающий, прямой согласующий, администратор согласований. Автор прохода approve не ставит ни за кого — 409 docflow.approval.self_review (ERP-1188); вернуть или отклонить свою бумагу он может.

Режим этапа — «все» или «достаточно одного». Кворума с процентом нет намеренно: «две трети склада» никто не считает, а объяснить отказ таким правилом невозможно.

Операция стоит под ОТДЕЛЬНЫМ правом docflow.flow:approve: «согласовать» и «редактировать» в живой компании дают разным людям, и права на правку предмета для решения недостаточно, как и наоборот.

## Path parameters

- `id` string, uuid, required

## Headers

- `X-Tenant` string, required

## Request body

- DocflowApprovalDecisionInput: Одно решение. Комментарий обязателен у return и reject и не требуется у approve: отказ без слов отправляет автора чинить неизвестно что.
  - `approval_id` string, uuid
  - `reviewer_id` integer: ЧЬЯ виза закрывается. Не обязательно тот, кто нажимает: замещающий закрывает визу отсутствующего, оставаясь собой в истории
  - `decision` 'approve' | 'return' | 'reject', required
  - `comment` string

## Response `200`

Проход после решения

- DocflowApproval: Один проход предмета по маршруту. Согласование ничего не проводит и ни строки регистра не пишет: оно отвечает на один вопрос — можно ли уже выполнить действие, выпускающее бумагу или деньги наружу. Возврат на доработку проход не закрывает: предмет правят и продолжают тот же проход, сохраняя чужие визы.
  - `id` string, uuid, required
  - `subject` DocflowApprovalSubject, required: Предмет согласования нейтральной тройкой «модуль — вид — идентификатор». Факты предоставляет модуль-владелец: карточка, заявка на оплату, пакет ЭДО или складская заявка на закупку. Складскую заявку отправляют проведением через API склада; общие команды отправки, повтора и отзыва согласования для неё закрыты.
    - `module` 'docflow' | 'finance' | 'stock', required: Модуль-владелец предмета
    - `kind` 'flow_document' | 'payment_request' | 'edo_message' | 'stock_purchase_request', required: Вид предмета: карточка документооборота, заявка на оплату, входящий документ ЭДО или складская заявка на закупку
    - `id` string, uuid, required
  - `subject_title` string
  - `subject_number` string
  - `company_id` string, uuid
  - `contact_id` string, uuid
  - `item_id` string, uuid
  - `route_id` string, uuid
  - `route_name` string
  - `rework_mode` 'restart' | 'returner_only', required
  - `amount` string: Пусто законно: у рамочного договора суммы нет
  - `currency` string
  - `content_version` integer, required: Редакция предмета, по которой решают
  - `content_fingerprint` string: SHA-256 значимого состава складской заявки, по которому получено согласие; закупка проверяет совпадение с текущим составом
  - `state` 'pending' | 'approved' | 'rejected' | 'returned' | 'cancelled', required
  - `active_stage` integer, required: Номер текущего этапа
  - `requested_by` integer, required
  - `requested_name` string
  - `requested_at` string, date-time, required
  - `finished_at` string, date-time
  - `reminded_at` string, date-time
  - `escalated_at` string, date-time
  - `updated_at` string, date-time, required
  - `stages` DocflowApprovalStage[], required
    - `id` string, uuid, required
    - `position` integer, required
    - `title` string
    - `stage_kind` 'approve' | 'acknowledge': Что делает этап: approve — согласует и держит маршрут; acknowledge — «ознакомиться»: извещает участников (нужно право docflow.flow:read), маршрут не держит, отказа не знает (ERP-1566). Пусто — approve
    - `mode` 'all' | 'any', required
    - `assignee_kind` 'user' | 'department' | 'role' | 'manager' | 'department_head', required
    - `assignee_label` string
    - `min_amount` string
    - `due_hours` integer
    - `due_at` string, date-time
    - `state` 'waiting' | 'active' | 'approved' | 'rejected' | 'returned' | 'skipped' | 'notified' | 'acknowledged', required: notified — этап ознакомления известил участников и пропустил проход дальше; acknowledged — все отметились
    - `started_at` string, date-time
    - `decided_at` string, date-time
    - `reviews` DocflowApprovalReview[], required
      - `id` string, uuid, required
      - `actor_id` integer, required
      - `actor_name` string
      - `decided_by` integer
      - `decided_by_name` string
      - `decided_via` 'self' | 'substitute' | 'delegate' | 'administrator'
      - `delegated_to` integer
      - `decision` 'approve' | 'return' | 'reject' | 'acknowledge': Пусто, пока человек не решил; acknowledge — отметка «ознакомлен» на этапе ознакомления
      - `comment` string: Обязателен у return и reject: без слов автор не узнает, что исправлять
      - `decided_at` string, date-time
  - `events` DocflowApprovalEvent[]
    - `id` string, uuid, required
    - `stage_position` integer
    - `action` 'submitted' | 'approved' | 'returned' | 'rejected' | 'cancelled' | 'resubmitted' | 'reset_significant_change' | 'delegated' | 'escalated' | 'reminded' | 'operator_replied' | 'operator_refused' | 'operator_signature_required' | 'operator_skipped' | 'acknowledged' | 'auto_approved', required: auto_approved — согласовано автоматически: сумма меньше порогов маршрута. operator_* — ответ оператору по входящему пакету ЭДО после прохода (настройка подключения reply_after_approval); comment несёт слова оператора или машинный код отказа docflow.edo.*
    - `user_id` integer
    - `user_name` string
    - `comment` string
    - `created_at` string, date-time, required

## Other responses

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

---

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