---
title: "Узнать состояние согласования одного предмета"
method: GET
path: "/api/v1/docflow/approvals/state"
tags: ["Docflow approvals"]
---

# Узнать состояние согласования одного предмета

`GET /api/v1/docflow/approvals/state`

## Request

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

Ответ, который читает карточка: есть ли у предмета открытый проход, на каком он этапе и что человек вправе сделать прямо сейчас — отправить, решить, отозвать, отправить повторно. Предмет называется той же нейтральной тройкой «модуль — вид — идентификатор», поэтому одна и та же операция обслуживает карточку документооборота и карточку заявки на оплату модуля finance (счета, выписки и расчёты).

Проверки действий названы отдельно: send_to_counterparty, send_to_bank и create_purchase для закупки по складской заявке. Закупка требует согласия на текущий состав заявки. Поле editing_stays_unlocked означает, что согласование не запрещает редактирование карточки: человек может исправить возвращённый предмет.

Это СНИМОК по образцу операции блокировок модуля core (справочники, документы и проведение): между чтением и нажатием кнопки мир может измениться, и настоящую защиту держит транзакция самого действия. После каждого действия состояние перезапрашивают.

## Query parameters

- `module` 'docflow' | 'finance' | 'stock', required
- `kind` 'flow_document' | 'payment_request' | 'edo_message' | 'stock_purchase_request', required
- `id` string, uuid, required

## Headers

- `X-Tenant` string, required

## Response `200`

Состояние согласования предмета

- DocflowApprovalSubjectState: Согласование одного предмета глазами его карточки.
  - `blockers` DocflowApprovalBlockers, required: Что можно сделать с предметом прямо сейчас и почему нельзя остальное. Согласование проверяет отправку контрагенту, отправку заявки в банк и закупку по складской заявке. create_purchase есть у складской заявки и требует согласия на её текущий состав. editing_stays_unlocked означает, что согласование не запрещает редактирование карточки. Это СНИМОК: между чтением и нажатием кнопки мир может измениться, и настоящую защиту держит транзакция самого действия.
    - `subject` DocflowApprovalSubject, required: Предмет согласования нейтральной тройкой «модуль — вид — идентификатор». Факты предоставляет модуль-владелец: карточка, заявка на оплату, пакет ЭДО или складская заявка на закупку. Складскую заявку отправляют проведением через API склада; общие команды отправки, повтора и отзыва согласования для неё закрыты.
      - `module` 'docflow' | 'finance' | 'stock', required: Модуль-владелец предмета
      - `kind` 'flow_document' | 'payment_request' | 'edo_message' | 'stock_purchase_request', required: Вид предмета: карточка документооборота, заявка на оплату, входящий документ ЭДО или складская заявка на закупку
      - `id` string, uuid, required
    - `required` boolean, required: Объявлен ли вид предмета требующим согласования
    - `approval_id` string, uuid
    - `state` 'pending' | 'approved' | 'rejected' | 'returned' | 'cancelled'
    - `send_to_counterparty` DocflowApprovalActionCheck, required: Вердикт по одному действию вместе с причинами отказа.
      - `allowed` boolean, required
      - `reasons` DocflowApprovalBlockReason[], required
        - `code` string, required
        - `message` string, required
        - `approval_id` string, uuid
        - `stage_title` string
    - `send_to_bank` DocflowApprovalActionCheck, required: Вердикт по одному действию вместе с причинами отказа.
      - `allowed` boolean, required
      - `reasons` DocflowApprovalBlockReason[], required
        - `code` string, required
        - `message` string, required
        - `approval_id` string, uuid
        - `stage_title` string
    - `create_purchase` DocflowApprovalActionCheck: Вердикт по одному действию вместе с причинами отказа.
      - `allowed` boolean, required
      - `reasons` DocflowApprovalBlockReason[], required
        - `code` string, required
        - `message` string, required
        - `approval_id` string, uuid
        - `stage_title` string
    - `can_submit` boolean, required
    - `submit_blocked` DocflowApprovalBlockReason: Почему действие запрещено, словами, а не кодом состояния.
      - `code` string, required
      - `message` string, required
      - `approval_id` string, uuid
      - `stage_title` string
    - `can_decide` boolean, required
    - `can_acknowledge` boolean: У человека есть неотмеченное «ознакомиться» в этом проходе — своё или делегированное
    - `can_cancel` boolean, required
    - `can_resubmit` boolean, required
    - `matched_route_id` string, uuid
    - `matched_route_name` string
    - `editing_stays_unlocked` boolean, required: Всегда истинно: редактирование карточки согласование не глушит
  - `approval` 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
  - `facts` DocflowApprovalSubjectFacts, 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
    - `title` string, required
    - `number` string
    - `document_kind` string: Вид бумаги у владельца: договор, счёт, акт
    - `company_id` string, uuid
    - `business_id` string, uuid
    - `contact_id` string, uuid
    - `contact_folder_id` string, uuid
    - `item_id` string, uuid
    - `amount` string: Сумма десятичным текстом; пусто там, где суммы нет
    - `currency` string
    - `content_version` integer, required: Редакция предмета у владельца — основание значимой правки
    - `content_fingerprint` string: SHA-256 значимого состава складской заявки: количества, строки, бизнес, юрлицо, склад и даты. Комментарий и цены не входят
    - `details` DocflowApprovalSubjectDetails: Состав и реквизиты предмета для согласующего, прочитанные у владельца.
      - `date` string, date
      - `desired_at` string, date
      - `company_name` string
      - `business_name` string
      - `warehouse_name` string
      - `comment` string
      - `lines` DocflowApprovalSubjectLine[], required
        - `line_id` string, uuid, required
        - `product_id` string, uuid, required
        - `sku` string
        - `name` string, required
        - `unit` string
        - `qty` string, required: Количество десятичным текстом
    - `author_id` integer, required: Кто завёл предмет; нужен этапу «руководитель автора»
  - `preview` DocflowApprovalChainPreview: Кто согласует предмет по его фактам: маршрут, этапы, пропуски по сумме и люди.
    - `outcome` 'route' | 'direct' | 'blocked' | 'auto', required: auto — маршрут подошёл, но все его этапы согласования отсечены порогами по сумме: предмет согласуется автоматически, без виз
    - `required` boolean, required: Согласование вида объявлено обязательным
    - `route_id` string, uuid
    - `route_name` string
    - `route_standard` boolean: Подобран стандартный маршрут: ни один маршрут кабинета не подошёл
    - `payment_destination` 'calendar' | 'treasury'
    - `stages` DocflowApprovalChainStage[], 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
      - `applies` boolean, required: Этап выполнится при этих фактах
      - `skip_reason` 'amount_below': Почему этап не выполнится
      - `problem` 'no_reviewers': Этап выполнится, но спросить некого
      - `people` DocflowApprovalPerson[], required
        - `id` integer, required
        - `name` string, required

## Other responses

- `400`: Некорректный запрос или нарушение бизнес-правила
- `401`: Сессия, ключ или кабинет не подтверждены
- `403`: Текущая роль не имеет требуемого права
- `404`: Запись не найдена или не видима текущему пользователю
- `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)
