---
title: "Привязать операцию к статье ДДС, контрагенту или продаже или закупке"
method: POST
path: "/api/v1/finance/transactions/{id}/categorize"
tags: ["Finance transactions"]
---

# Привязать операцию к статье ДДС, контрагенту или продаже или закупке

`POST /api/v1/finance/transactions/{id}/categorize`

## Request

- Base URL: `https://erp.akeda.ru`
- URL: `https://erp.akeda.ru/api/v1/finance/transactions/{id}/categorize`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-Api-Key`
  - OAuth 2 (authorization code, authorization URL `https://erp.akeda.ru/oauth2/authorize`, token URL `https://erp.akeda.ru/oauth2/token`, scopes: `akeda:delegate`)
  - HTTP bearer

Категоризация перепроводит проекцию операции; pnl_item намеренно не принимается.

Эта же команда ПРИНИМАЕТ рекомендацию внешнего расширения — полем `suggestion`. Отдельного маршрута принятия нет намеренно: принять совет значит разнести операцию, со всеми её проверками закрытого периода, обязательной аналитики и перепроведения, и второй путь записи в книгу отличался бы от первого ровно тем, что о нём забудут при следующей правке правил проведения. Статья при этом берётся из самой рекомендации; названная в теле другая статья отвечает 400, уже решённая рекомендация — 409, чужая или несуществующая — 404.

## Path parameters

- `id` string, uuid, required

## Headers

- `X-Tenant` string, required

## Request body

- FinanceTransactionCategorize
  - `cashflow_item` string, uuid, nullable
  - `contact` string, uuid, nullable
  - `for_contact` string, uuid, nullable: «За кого»: чей расчёт гасит платёж. У зарплаты — контрагент из папки «Сотрудники», у расчётов с собственником — контрагент из состава владельцев на дату платежа. Пусто — как контрагент. Не присланное поле остаётся как было.
  - `order` string, uuid, nullable
  - `project` string, uuid, nullable
  - `suggestion` string, uuid, nullable: Рекомендация внешнего расширения, которую человек принимает этим вызовом. Не второй способ назвать статью: статья берётся из самой рекомендации, а поле отвечает на другой вопрос — чей совет сработал. Названная в теле другая статья — отказ, а не тихая победа одного из двух значений. Рекомендация с чужой операции и уже решённая отвечают так же, как несуществующая.

## Response `200`

Переклассифицированная операция

- FinanceTransaction
  - `id` string, uuid, required
  - `date` string, date, required
  - `direction` 'in' | 'out', required
  - `amount` string, required: Positive decimal string
  - `currency` string, required
  - `counterparty_name` string, required
  - `counterparty_inn` string, required
  - `counterparty_account` string, required
  - `purpose` string, required
  - `bank_txn_id` string, required
  - `account` string, uuid, required
  - `account_name` string, required
  - `statement` string, uuid, nullable, required
  - `cashflow_item` string, uuid, nullable, required
  - `cashflow_item_name` string, nullable, required
  - `cashflow_section` string, nullable, required
  - `pnl_item` string, uuid, nullable, required
  - `pnl_item_name` string, nullable, required
  - `contact` string, uuid, nullable, required
  - `contact_name` string, nullable, required
  - `for_contact` string, uuid, nullable: «За кого»: контрагент из папки «Сотрудники» или «Собственники», чей расчёт гасит платёж. Пусто — как контрагент: платили самому человеку
  - `for_contact_name` string, nullable
  - `contact_employee` string, uuid, nullable: Сотрудник, связанный с контрагентом. У зарплаты пустое «За кого» при нём означает самого получателя
  - `order` string, uuid, nullable, required
  - `order_number` string, nullable, required
  - `project` string, uuid, nullable, required
  - `project_name` string, nullable, required
  - `responsible` string, uuid, nullable: Инициатор: кто завёл или согласовал платёж. В проводки не идёт; чей расчёт гасится, задаёт for_contact
  - `responsible_name` string, nullable
  - `order_total` string, nullable, required
  - `order_paid_percent` integer, required
  - `match_state` string, required
  - `reconciliation_state` string, required
  - `reconciliation_needs` string[], required
  - `classification_explanation` string, required
  - `suggested_order` object, nullable, required
  - `suggested_cashflow_item` object, nullable, required
  - `suggested_pnl_item` object, nullable, required
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required

## Other responses

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

---

[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/a99574d597cc?raw)
