---
title: "Получить остатки по партиям со сроками"
method: GET
path: "/api/v1/stock/batch-stock"
tags: ["Stock batches"]
---

# Получить остатки по партиям со сроками

`GET /api/v1/stock/batch-stock`

## Request

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

Остатки по партиям (ERP-1788): строка — партия × склад × юрлицо × состояние с ненулевым остатком регистра stock на дату as_of. Срок, серия и выпуск — из карточки партии. ОСГ — доля остаточного срока годности: (до − дата ОСГ) / (до − от) × 100 по основанию кабинета (по дням или по месяцам), округление до 0,1, границы 0..100; без даты выпуска — null. Дата ОСГ — shelf_as_of, по умолчанию as_of: остаток — на as_of, ОСГ, дни до срока и shelf — на shelf_as_of (ERP-2182, плановая дата отгрузки документа). shelf: none — без срока, expired — годен до раньше даты ОСГ, critical / warning / ok — по градациям кабинета (grades, настройки склада; по умолчанию ОСГ < 30, 30–70, от 70; без ОСГ — по дням до срока: ≤ 30, ≤ 90). С порогом min_remaining_pct / min_remaining_days строка называет shelf_life_reason — почему подбор партий проведения её не возьмёт на дату ОСГ. Сортировка fefo — порядок, в котором «Авто» спишет партии. Только чтение: запретов отгрузки здесь нет.

## Query parameters

- `product_id` string, uuid
- `warehouse_id` string, uuid
- `warehouse_ids` string
- `company_id` string, uuid
- `business_id` string, uuid
- `condition_id` string
- `search` string
- `shelf` string
- `expires_within_days` integer
- `osg_below` number
- `as_of` string, date
- `shelf_as_of` string, date
- `min_remaining_pct` string
- `min_remaining_days` integer
- `series` string
- `group` 'series'
- `sort` 'fefo' | 'expires_at' | 'osg' | 'product' | 'warehouse' | 'qty' | 'amount' | 'received_at' | 'batch_code'
- `direction` 'asc' | 'desc'
- `limit` integer
- `offset` integer
- `min_remaining_scale` string
- `unavailable_only` boolean
- `without_company` boolean

## Headers

- `X-Tenant` string, required

## Response `200`

Страница остатков по партиям

- StockBatchStockPage
  - `count` integer, required
  - `limit` integer, required
  - `offset` integer, required
  - `as_of` string, date, required
  - `shelf_as_of` string, date, required: Дата ОСГ и градаций (ERP-2182)
  - `grades` StockShelfGrades, required: Градации ОСГ кабинета (ERP-2182, настройки склада): ОСГ ниже critical_pct — critical, ниже warning_pct — warning, иначе ok; партия без ОСГ — по дням до срока: не больше critical_days — critical, не больше warning_days — warning.
    - `critical_pct` string, required
    - `warning_pct` string, required
    - `critical_days` integer, required
    - `warning_days` integer, required
  - `totals` object, required
    - `qty` string, required
    - `amount` string, required
  - `results` StockBatchStockRow[], required
    - `batch_id` string, uuid, required
    - `batch_code` string, required: Серия поставщика
    - `product_id` string, uuid, required
    - `product_sku` string, required
    - `product_name` string, required
    - `photo_file_id` string, uuid
    - `business_id` string, uuid, required
    - `company_id` string, uuid, required
    - `company_name` string, required
    - `warehouse_id` string, uuid, required
    - `warehouse_name` string, required
    - `warehouse_parent_id` string, uuid, required
    - `warehouse_parent_name` string, required
    - `condition_id` string, uuid, required
    - `condition_name` string, required
    - `unavailable_condition` string: Название состояния вне доступного остатка
    - `received_at` string, date, required
    - `produced_at` string, date, nullable, required
    - `expires_at` string, date, nullable, required
    - `days_left` integer, nullable, required: Дней до срока годности от даты ОСГ (shelf_as_of, по умолчанию as_of); отрицательное — просрочено
    - `osg_percent` string, nullable, required: ОСГ, % с одним знаком; null — нет даты выпуска или срока
    - `shelf` 'expired' | 'critical' | 'warning' | 'ok' | 'none', required: Градация срока на дату ОСГ по градациям кабинета (grades)
    - `shelf_life_reason` '' | 'expired' | 'below_pct' | 'below_days' | 'no_production_date' | 'production_date_invalid' | 'shelf_life_within_month', required: Почему подбор партий проведения не возьмёт партию на дату ОСГ (ERP-2182): просрочена или ниже порога из запроса; пустая строка — проходит. Без порога в запросе — только просрочка
    - `qty` string, required: Decimal string остатка в базовой единице
    - `amount` string, required: Себестоимость остатка
    - `unit_cost` string, required: Себестоимость единицы
    - `source_document_id` string, uuid, required
    - `source_document_type_key` string, required
    - `series_batch_count` integer: Строка серии (group=series, ERP-2199): сколько партий серии сложено в этом месте хранения; у строки партии поля нет

## Other responses

- `400`: Некорректный запрос или нарушение бизнес-правила
- `401`: Сессия, ключ или кабинет не подтверждены
- `403`: Текущая роль не имеет требуемого права

---

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