Перейти к содержимому

DWT и счета — интеграция для фронта

Форма «Тип внесения/изъятия» (DWT) + форма «Редактирование счёта». JWT обязателен. corporationId бэк берёт из токена — не передавать.


Суть

Шеф-счёт, Корр. счёт, Статья ДДС — это всё Account. Дропдауны грузятся одним эндпоинтом, отличается только role:

Поле формыЭндпоинт дропдаунаПоле в запросеОбяз.Бэк проверяет роль?
Шеф-счётGET /accounting/accounts?role=CASHchefAccountIdнетнет
Корр. счётGET /accounting/accounts?role=REVENUE,EXPENSE,COUNTERPARTY_SETTLEMENTScorrespondentAccountIdданет
Статья ДДСGET /accounting/accounts?role=CASH_FLOW_ITEMddsAccountIdнетда → 400

«Статья ДДС» — не отдельная таблица, а счёт с ролью CASH_FLOW_ITEM.

Корр-счёт широкий: для внесения — доход, для изъятия — расход. Можно сузить дропдаун по operationType: DEPOSITrole=REVENUE, WITHDRAWALrole=EXPENSE.


API DWT — /accounting/deposit-withdrawal-types

МетодПутьЗаголовок
GET/?showDeleted=&search=
GET/:id
POST/
PATCH/:idIf-Match: <version>
DELETE/:idIf-Match: <version>
PATCH/:id/restoreIf-Match: <version>

Тело POST / PATCH

{
"name": "Инкассация", // обяз. POST, ≤ 100
"operationType": "WITHDRAWAL", // обяз. POST: DEPOSIT | WITHDRAWAL
"counterpartyType": "EMPLOYEE", // опц.: EMPLOYEE | COUNTERPARTY (дефолт EMPLOYEE)
"correspondentAccountId": "uuid", // обяз.
"chefAccountId": "uuid", // опц., в PATCH можно null = очистить
"ddsAccountId": "uuid", // опц., в PATCH можно null; роль CASH_FLOW_ITEM
"limit": 50000, // опц., число ≥ 0.01
"isManualInputForbidden": false,
"requiresComment": false,
"description": "заметка" // опц., ≤ 300
}

PATCH: все поля опциональны. В ответе придёт новый version.

Ответ — отличия от тела

  • chefAccountName / correspondentAccountName / ddsAccountName — имена счетов уже в ответе, отдельный запрос не нужен.
  • limitстрока ("50000" / null), хотя в запрос шлётся числом.
  • isSystem: true → редактировать/удалять нельзя (бэк вернёт 409). Кнопки прятать.
  • ещё в ответе: version, isDeleted, systemKey, createdAt, updatedAt.

Ошибки

КодКогда
400невалидное тело; счёт не найден/удалён/чужой; ДДС не роли CASH_FLOW_ITEM
404тип не найден
409имя занято; правка/удаление системного типа; конфликт версий (STALE_VERSION)

Версионирование: берём version из GET → шлём в If-Match при PATCH/DELETE/restore → на 409 перечитываем и повторяем.


Форма «Редактирование счёта» — /accounting/accounts

Поле формыAPI полеПримечание
ТипtypeIdиз GET /accounting/account-types
Названиеnameобяз., ≤ 255
Кодcodeопц., ≤ 50; или autoGenerateCode: true
Является подсчётом + родительparentIdиз GET /accounting/accounts
Комментарийcommentопц.
Удалённый счётчерез DELETE / PATCH /:id/restore

Эндпоинты: GET / (фильтры showDeleted, search, role, accountTypeId), GET /:id, POST /, PATCH /:id, DELETE /:id, PATCH /:id/restore.

Правила бэка:

  • подсчёт обязан иметь тот же typeId, что и родитель (тип = тип родителя);
  • autoGenerateCode: true → код подбирается сам (62.01 для подсчёта);
  • системный/удалённый счёт не редактируется; родителя с детьми не удалить;
  • дубликат имени/кода в корпорации → 409.

Типы счетов: GET /accounting/account-types. Поле role (AccountRole) на типе и определяет, в какой дропдаун попадёт счёт. Свой денежный/ДДС-счёт без роли в дропдаун не попадёт.


Enum-ы

  • operationType: DEPOSIT (внесение), WITHDRAWAL (изъятие)
  • counterpartyType: EMPLOYEE, COUNTERPARTY
  • AccountRole: CASH, COUNTERPARTY_SETTLEMENTS, CASH_FLOW_ITEM, REVENUE, EXPENSE, OTHER

?role= принимает массив или CSV: ?role=REVENUE,EXPENSE.