# Инвентаризация в МойСкладе — выписка (эталон для нашей реализации) Источники: dev.moysklad.ru/doc/api/remap/1.2 (documents/inventory, /enter, /loss), support.moysklad.ru (UI-логика), moysklad.ru/poleznoe/shkola-torgovli (излишки/пересортица). JS-рендер SPA мешал полной выгрузке полей — факты сверены по справке UI + школе торговли + известной модели API. ## Документ «Инвентаризация» (inventory) - **Не двигает остатки сама.** Инвентаризация фиксирует пересчёт; изменение остатков делают отдельные документы Оприходование/Списание, создаваемые «на основании» инвентаризации. ([support: инвентаризация товаров](https://support.moysklad.ru/hc/ru/товары%20и%20склады/операции/инвентаризация_товаров), [школа: излишки](https://www.moysklad.ru/poleznoe/shkola-torgovli/izlishki-pri-inventarizacii/)). - **Поля позиции (positions):** - `assortment` — товар; - `price` — учётная цена (себестоимость) на момент; - `calculatedQuantity` — **расчётное** (учётное) количество по системе; - `correctionAmount` — **коррекция** = фактическое − расчётное (>0 излишек, <0 недостача); - `correctionSum` — сумма коррекции = `correctionAmount × price`. - Фактическое кол-во = `calculatedQuantity + correctionAmount`. ([API documents](https://dev.moysklad.ru/doc/api/remap/1.2/documents/)). - **`applicable`** есть (как у всех документов), но для инвентаризации проведение не меняет остатки — это просто «пересчёт зафиксирован». - Через API можно пересчитать `calculatedQuantity` (перезасечь учётные остатки) — документ пересохранится. ## Создание Оприходования/Списания «на основании» (UI) - На документе инвентаризации кнопка **«Создать документ»** → в выпадающем списке **«Оприходование»** (для излишков) или **«Списание»** (для недостачи). ([support: оприходование](https://support.moysklad.ru/hc/ru/товары%20и%20склады/операции/оприходование_товаров), [списание](https://support.moysklad.ru/hc/ru/товары%20и%20склады/операции/списание_товаров)). - Шаблоны API: `/entity/enter/new` и `/entity/loss/new` c передачей `inventory` (meta инвентаризации) — создаётся черновик со строками разницы. - Строки: **излишки** (correctionAmount>0) → в Оприходование; **недостача** (correctionAmount<0, по модулю) → в Списание. Цена — учётная себестоимость (FIFO у МойСклада). - Созданные Оприходование/Списание — обычные документы: их можно открыть, поправить, **провести** (вот тогда меняются остатки) и отменить проведение. ## Связи и видимость - Из инвентаризации видно созданные на её основании документы (связанные документы). - В Оприходовании/Списании «на основании» видно, из какой инвентаризации они созданы. (В API жёсткого поля-ссылки у enter/loss на inventory нет — связь ведётся механизмом «создать на основании»; **у нас** мы сохраняем явную ссылку `InventoryDocId` — это осознанное улучшение, владелец просил видимые связи, см. docs/moysklad-logic-audit.md §3.3.) ## Статусы (UI) - У МойСклада документы: «Черновик» / «Проведён» (`applicable`). Для инвентаризации «проведён» означает «пересчёт зафиксирован» (без движения остатков). - **Решение владельца для нас:** статусы инвентаризации — **«Черновик» → «Завершена»**, без слова «Проведено» (понятнее; «Проведено» осталось бы только у Оприходования/Списания). ## Себестоимость в документах результата - Оприходование добавляет остаток по учётной себестоимости; Списание убирает по FIFO-себестоимости (у нас пока скользящее среднее — см. ревизию). Для строк разницы берём снимок `Product.Cost`. ## Наша целевая модель (вывод) 1. Инвентаризация: Черновик (идёт подсчёт) → Завершена (строки заморожены), остатки НЕ трогает. Показываем расчётное / фактическое / разница / сумма разницы. 2. На завершённой — две кнопки: **«Создать оприходование излишков»**, **«Создать списание недостачи»** (кнопку «Применить результаты» НЕ добавляем — не одобрено владельцем). Документы со строками разницы, ссылка `InventoryDocId` на инвентаризацию, проводятся как обычные. 3. Карточка инвентаризации: блок «Связанные документы»; список: колонка «Результат». В Оприходовании/Списании: «На основании инвентаризации №…». 4. Нельзя вернуть инвентаризацию в черновик, пока есть проведённые связанные документы. 5. Мобильный `post` инвентаризации — временная совместимость: завершить + создать и провести оба документа (помечено в docs/mobile-api.md как compat).