DWT и счета — интеграция для фронта
Форма «Тип внесения/изъятия» (DWT) + форма «Редактирование счёта».
JWT обязателен. corporationId бэк берёт из токена — не передавать.
Суть
Шеф-счёт, Корр. счёт, Статья ДДС — это всё Account. Дропдауны грузятся одним
эндпоинтом, отличается только role:
| Поле формы | Эндпоинт дропдауна | Поле в запросе | Обяз. | Бэк проверяет роль? |
|---|---|---|---|---|
| Шеф-счёт | GET /accounting/accounts?role=CASH | chefAccountId | нет | нет |
| Корр. счёт | GET /accounting/accounts?role=REVENUE,EXPENSE,COUNTERPARTY_SETTLEMENTS | correspondentAccountId | да | нет |
| Статья ДДС | GET /accounting/accounts?role=CASH_FLOW_ITEM | ddsAccountId | нет | да → 400 |
«Статья ДДС» — не отдельная таблица, а счёт с ролью CASH_FLOW_ITEM.
Корр-счёт широкий: для внесения — доход, для изъятия — расход. Можно сузить
дропдаун по operationType: DEPOSIT → role=REVENUE, WITHDRAWAL → role=EXPENSE.
API DWT — /accounting/deposit-withdrawal-types
| Метод | Путь | Заголовок |
|---|---|---|
GET | /?showDeleted=&search= | — |
GET | /:id | — |
POST | / | — |
PATCH | /:id | If-Match: <version> |
DELETE | /:id | If-Match: <version> |
PATCH | /:id/restore | If-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,COUNTERPARTYAccountRole:CASH,COUNTERPARTY_SETTLEMENTS,CASH_FLOW_ITEM,REVENUE,EXPENSE,OTHER
?role= принимает массив или CSV: ?role=REVENUE,EXPENSE.