---
title: "Завести продажу или закупку"
method: POST
path: "/api/v1/finance/operations"
tags: ["Finance operations"]
---

# Завести продажу или закупку

`POST /api/v1/finance/operations`

## Request

- Base URL: `https://erp.akeda.ru`
- URL: `https://erp.akeda.ru/api/v1/finance/operations`
- 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

Создаёт штатный черновик операции. Режим document описывает один документ начисления, режим plan — договор или иной план с несколькими будущими начислениями. План сам долг не создаёт: долг появляется только после отдельного проведённого начисления. Повтор того же конверта источника идемпотентен; прямой записи в регистры нет.

## Headers

- `X-Tenant` string, required

## Request body

- FinanceOperationCreate
  - `recognition_mode` 'document' | 'plan': document — один документ начисления; plan — план, который сам не создаёт долг
  - `source` FinanceOperationSource, required
    - `schema_version` 1, required
    - `source_system` string, required
    - `source_ref` string, required
    - `external_id` string, required
    - `idempotency_key` string, required
  - `kind` 'sale' | 'purchase', required
  - `company_id` string, uuid, required
  - `contact_id` string, uuid, required
  - `date` string, date, required
  - `currency` string, required
  - `amount` string, required: Положительная decimal string
  - `due_date` string, date
  - `purpose` string
  - `pnl_item_id` string, uuid, required
  - `project_id` string, uuid
  - `contract_id` string, uuid
  - `accruals` FinanceOperationStageInput[]
    - `sequence` integer, required
    - `label` string
    - `date` string: Необязательная календарная дата; пусто означает без срока
    - `amount` string, required: Положительная decimal string
    - `currency` string: По умолчанию валюта операции; другая валюта не принимается
    - `due_trigger` 'after_accrual': Только для графика оплаты: считать срок от проведённого начисления
    - `after_accrual_sequence` integer: Номер части начисления; отсутствие означает от любого начисления
    - `delay_days` integer
  - `payments` FinanceOperationStageInput[]
    - `sequence` integer, required
    - `label` string
    - `date` string: Необязательная календарная дата; пусто означает без срока
    - `amount` string, required: Положительная decimal string
    - `currency` string: По умолчанию валюта операции; другая валюта не принимается
    - `due_trigger` 'after_accrual': Только для графика оплаты: считать срок от проведённого начисления
    - `after_accrual_sequence` integer: Номер части начисления; отсутствие означает от любого начисления
    - `delay_days` integer
  - `references` FinanceOperationReferenceInput[]
    - `relation` string, required
    - `target_module` string, required
    - `target_type` string, required
    - `target_id` string, required
  - `vat_amount` string: Только закупка: «в т.ч. НДС» документа поставщика (ERP-484, подшаги 5.3 и 5.3в). У закупки по документу обязательна, если на дату бизнес очищает суммы и юрлицо принимает налог к вычету; 0 — налог не выделен. У плана по периодам необязательна: указана — начисления берут долю нарастающим итогом, нет — налог приносит каждое начисление. Вне периода непустое значение — 400
  - `supplier_document` SupplierDocument: Номер и дата документа поставщика (ERP-484, подшаг 5.3): по ним входящий НДС сверяется с книгой покупок. Оба поля необязательны
    - `number` string
    - `date` string, date

## Response `201`

Текущее состояние операции

- FinanceOperation
  - `recognition_mode` 'document' | 'plan', required
  - `cash_paid` string, required: Фактически оплачено по проведённым распределениям
  - `advance` string, required: Оплата сверх признанного начисления
  - `cash_payments` FinanceOperationFact[], required
    - `document_id` string, uuid, required
    - `type_key` string, required
    - `type_name` string, required
    - `number` string, required
    - `date` string, date, required
    - `status` 'draft' | 'posted' | 'cancelled', required
    - `amount` string, required: Decimal string из движений проведённого регистратора
    - `currency` string, required
  - `unattributed_facts` FinanceOperationFact[], required: Применения к долгу, не привязанные к строке графика (ERP-1417)
    - `document_id` string, uuid, required
    - `type_key` string, required
    - `type_name` string, required
    - `number` string, required
    - `date` string, date, required
    - `status` 'draft' | 'posted' | 'cancelled', required
    - `amount` string, required: Decimal string из движений проведённого регистратора
    - `currency` string, required
  - `id` string, uuid, required
  - `kind` 'sale' | 'purchase', required
  - `company_id` string, uuid, required
  - `contact_id` string, uuid, required
  - `currency` string, required
  - `amount` string, required: Decimal string
  - `due_date` string, date
  - `purpose` string
  - `pnl_item_id` string, uuid
  - `project_id` string, uuid
  - `contract_id` string, uuid
  - `source_system` string, required
  - `source_ref` string, required
  - `external_id` string, required
  - `schema_version` 1, required
  - `status` 'draft' | 'posted' | 'cancelled', required
  - `current` FinanceOperationVersion, required
    - `id` string, uuid, required
    - `version` integer, required
    - `change_kind` 'initial' | 'correction' | 'reversal', required
    - `previous_version_id` string, uuid
    - `document_id` string, uuid, required
    - `document_status` 'draft' | 'posted' | 'cancelled', required
    - `is_marked_deleted` boolean, required
    - `company_id` string, uuid, required
    - `contact_id` string, uuid, required
    - `currency` string, required
    - `effective_date` string, date, required
    - `reason` string
    - `accruals` FinanceOperationStage[], required
      - `id` string, uuid, required
      - `sequence` integer, required
      - `label` string
      - `date` string, required
      - `amount` string, required: Плановая decimal string
      - `currency` string, required
      - `actual_amount` string, required: Decimal string из проведённых документов
      - `due_trigger` 'after_accrual'
      - `after_accrual_id` string, uuid
      - `delay_days` integer
      - `payment_attribution_pending` boolean
      - `facts` FinanceOperationFact[], required
        - `document_id` string, uuid, required
        - `type_key` string, required
        - `type_name` string, required
        - `number` string, required
        - `date` string, date, required
        - `status` 'draft' | 'posted' | 'cancelled', required
        - `amount` string, required: Decimal string из движений проведённого регистратора
        - `currency` string, required
    - `payments` FinanceOperationStage[], required
      - `id` string, uuid, required
      - `sequence` integer, required
      - `label` string
      - `date` string, required
      - `amount` string, required: Плановая decimal string
      - `currency` string, required
      - `actual_amount` string, required: Decimal string из проведённых документов
      - `due_trigger` 'after_accrual'
      - `after_accrual_id` string, uuid
      - `delay_days` integer
      - `payment_attribution_pending` boolean
      - `facts` FinanceOperationFact[], required
        - `document_id` string, uuid, required
        - `type_key` string, required
        - `type_name` string, required
        - `number` string, required
        - `date` string, date, required
        - `status` 'draft' | 'posted' | 'cancelled', required
        - `amount` string, required: Decimal string из движений проведённого регистратора
        - `currency` string, required
  - `versions` FinanceOperationVersion[], required
    - `id` string, uuid, required
    - `version` integer, required
    - `change_kind` 'initial' | 'correction' | 'reversal', required
    - `previous_version_id` string, uuid
    - `document_id` string, uuid, required
    - `document_status` 'draft' | 'posted' | 'cancelled', required
    - `is_marked_deleted` boolean, required
    - `company_id` string, uuid, required
    - `contact_id` string, uuid, required
    - `currency` string, required
    - `effective_date` string, date, required
    - `reason` string
    - `accruals` FinanceOperationStage[], required
      - `id` string, uuid, required
      - `sequence` integer, required
      - `label` string
      - `date` string, required
      - `amount` string, required: Плановая decimal string
      - `currency` string, required
      - `actual_amount` string, required: Decimal string из проведённых документов
      - `due_trigger` 'after_accrual'
      - `after_accrual_id` string, uuid
      - `delay_days` integer
      - `payment_attribution_pending` boolean
      - `facts` FinanceOperationFact[], required
        - `document_id` string, uuid, required
        - `type_key` string, required
        - `type_name` string, required
        - `number` string, required
        - `date` string, date, required
        - `status` 'draft' | 'posted' | 'cancelled', required
        - `amount` string, required: Decimal string из движений проведённого регистратора
        - `currency` string, required
    - `payments` FinanceOperationStage[], required
      - `id` string, uuid, required
      - `sequence` integer, required
      - `label` string
      - `date` string, required
      - `amount` string, required: Плановая decimal string
      - `currency` string, required
      - `actual_amount` string, required: Decimal string из проведённых документов
      - `due_trigger` 'after_accrual'
      - `after_accrual_id` string, uuid
      - `delay_days` integer
      - `payment_attribution_pending` boolean
      - `facts` FinanceOperationFact[], required
        - `document_id` string, uuid, required
        - `type_key` string, required
        - `type_name` string, required
        - `number` string, required
        - `date` string, date, required
        - `status` 'draft' | 'posted' | 'cancelled', required
        - `amount` string, required: Decimal string из движений проведённого регистратора
        - `currency` string, required

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