---
title: "Отсканировать короб в инвентаризацию"
method: POST
path: "/api/v1/marking/inventories/{id}/codes/scan-box"
tags: ["Marking stock documents"]
---

# Отсканировать короб в инвентаризацию

`POST /api/v1/marking/inventories/{id}/codes/scan-box`

## Request

- Base URL: `https://erp.akeda.ru`
- URL: `https://erp.akeda.ru/api/v1/marking/inventories/{id}/codes/scan-box`
- 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`)

Раскрывает короб по скану SSCC и кладёт его коды единиц в пересчёт марок инвентаризации найденными или лишними — как при скане по одному. Код товара вне снимка или немаркируемого — в `skipped` с причиной. Ответ несёт пересчёт после скана.

## Path parameters

- `id` string, uuid, required

## Headers

- `X-Tenant` string, required

## Request body

- MarkingBoxScanInput
  - `raw` string, required: Скан марки или SSCC

## Response `200`

Итог раскрытия и пересчёт

- MarkingBoxInventoryScanResult
  - `box` MarkingBox, required
    - `id` string, uuid, required
    - `company_id` string, uuid, required
    - `company_name` string, required
    - `code_id` string, uuid, required
    - `sscc` string, required: 18 цифр SSCC без AI
    - `identity` string, required: КИТУ «00» + SSCC
    - `group` string, required: Товарная группа; у чужого короба без товара в кабинете — пусто
    - `origin` 'own' | 'gismt', required: own — собран здесь, gismt — снимок чужого из ГИС МТ
    - `status` 'assembling' | 'closed' | 'signing' | 'sent' | 'accepted' | 'rejected' | 'disbanding' | 'disbanded' | 'received', required
    - `units` integer, required: Вложений первого уровня
    - `printed` integer, required: Этикеток короба напечатано, без тестовых
    - `parent_sscc` string, required: SSCC паллеты, где лежит короб; пусто — нигде
    - `aggregation_document_id` string, uuid, required
    - `disaggregation_document_id` string, uuid, required
    - `error_text` string, required: Отказ ГИС МТ по отчёту агрегации
    - `created_at` string, date-time, required
    - `closed_at` string, date-time, nullable, required
    - `disbanded_at` string, date-time, nullable, required
  - `source` 'own' | 'gismt', required
  - `units` integer, required
  - `added` integer, required
  - `already` integer, required
  - `skipped` integer, required
  - `skipped_codes` MarkingBoxExpandSkip[], nullable, required
    - `identity` string, required
    - `reason` string, required: Машинная причина, как у скана по одному
  - `shortage` MarkingBoxShortage[], nullable, required
    - `product_id` string, uuid, required
    - `count` integer, required: Кодам не хватило строки или штук
  - `inventory` MarkingInventoryCodes, required
    - `inventory_id` string, uuid, required
    - `company_id` string, uuid, required
    - `warehouse_id` string, uuid, required
    - `date` string, date, required: Дата инвентаризации: на неё читается остаток кодов
    - `workflow` string, required: Состояние пересчёта склада: counting, counted, acts_created, closed
    - `editable` boolean, required: Марки ещё сканируются — акты не сформированы
    - `source` 'register', required: С чем сверено: регистр marking_codes
    - `lines` MarkingInventoryCodeLine[], required
      - `line` string, uuid, required
      - `product_id` string, uuid, required
      - `product_name` string, required
      - `product_sku` string, required
      - `group` string, required: Товарная группа профиля маркировки
      - `mode` '' | 'unit' | 'gtin', required: unit — коды поштучно; gtin — юрлицо передаёт товар по GTIN; пусто — товар не маркируется на дату
      - `book_qty` string, required: Количество по учёту из снимка инвентаризации
      - `actual_qty` string, nullable, required: Факт пересчёта; пусто — ещё не введён
      - `expected` integer, required: Кодов числится на складе
      - `scanned` integer, required: Отсканировано всего (найдено и лишних)
      - `found` integer, required
      - `missing` integer, required: Числится, но не найдено
      - `extra` integer, required: Найдено, но здесь не числится
      - `status` 'ok' | 'missing' | 'extra' | 'not_required', required: Лишние важнее нехватки
      - `codes` MarkingInventoryCode[], required
        - `id` string, uuid, required
        - `identity` string, required: Код без криптохвоста
        - `gtin` string, required
        - `gismt_status` string, required: Последний известный статус в ГИС МТ
        - `state` 'found' | 'missing' | 'extra', required: Найден, не найден (недостача) или лишний
        - `reason` 'other_warehouse' | 'other_company' | 'not_on_stock': Почему код лишний
        - `warehouse_id` string, uuid
        - `scanned_at` string, date-time: Когда отсканирован; у недостающего нет
    - `summary` MarkingInventoryCodesSummary, required
      - `expected` integer, required
      - `scanned` integer, required
      - `found` integer, required
      - `missing` integer, required
      - `extra` integer, required
      - `status` 'ok' | 'missing' | 'extra' | 'not_required', required

## Other responses

- `400`: У инвентаризации нет юрлица
- `401`: Сессия, ключ или кабинет не подтверждены
- `403`: Текущая роль не имеет требуемого права
- `404`: Инвентаризация или короб не найдены
- `409`: Акты сформированы, короб расформирован или пуст, нет входа в ГИС МТ
- `422`: Скан не SSCC
- `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)
