# M02: комплект для проверки WMS до покупки

Версия данных: **M02-v1, 31.10.2026**. Все организации, товары, заказы, штрихкоды, операции, результаты и значения времени здесь вымышлены. Комплект показывает, как провести испытание и зафиксировать результат. Он не содержит результатов испытания Skirbo, SelSup или другого продукта.

## Что скачать

Весь набор можно получить одним файлом: [m02-demo-kit.zip](m02-demo-kit.zip). Внутри — все 11 CSV из таблицы и эта инструкция. После распаковки файлы находятся в одной папке.

| Файл | Для чего нужен |
|---|---|
| [m02-passport-template.csv](m02-passport-template.csv) | Паспорт системы, версии, оборудования, ролей и условий проверки |
| [m02-protocol-template.csv](m02-protocol-template.csv) | 12 заданий с заполненными входом и ожиданием; факты и решения заполняете вы |
| [m02-protocol-example.csv](m02-protocol-example.csv) | Учебное заполнение; одна проверка требует доработки |
| [m02-owners.csv](m02-owners.csv) | Два вымышленных владельца товара |
| [m02-catalog.csv](m02-catalog.csv) | Три сочетания владелец/вариант, два варианта одного товара |
| [m02-invalid-catalog.csv](m02-invalid-catalog.csv) | Намеренно конфликтная строка для проверки реакции на неоднозначность |
| [m02-locations.csv](m02-locations.csv) | Один учебный склад и семь мест хранения/обработки |
| [m02-receipt.csv](m02-receipt.csv) | Начальная приёмка: 8 единиц в трёх строках |
| [m02-orders.csv](m02-orders.csv) | Три обычных заказа и отдельная попытка полного резерва при дефиците |
| [m02-expected-stock.csv](m02-expected-stock.csv) | Эталон по каждой позиции после шагов 0–12 |
| [m02-final-orders.csv](m02-final-orders.csv) | Ожидаемое состояние четырёх заказов в конце |

CSV записаны в UTF-8 с BOM, разделитель — запятая, поля с запятыми заключены в кавычки. В Excel используйте «Данные → Из текста/CSV» и выберите UTF-8 и запятую. Если программа открывает весь ряд в одном столбце, исправьте способ импорта. Идентификаторы и штрихкоды импортируйте как текст, количества — как целые числа. Формул в файлах нет: ожидаемые величины зафиксированы, формула объяснена ниже.

CSV — нейтральный формат задания. Это **не универсальный импортёр WMS**. До испытания сопоставьте колонки с полями выбранного продукта. Если в нём другой формат загрузки, сохраните отдельную карту преобразования. Ручной ввод допустим, но отметьте его в протоколе и не называйте проверкой автоматического обмена.

## Подготовка

1. Создайте отдельную учебную организацию/базу или согласованный тестовый контур. Убедитесь с ответственным, что он не публикует остатки, не создаёт реальные отправления и не выполняет операции в действующих кабинетах.
2. Заполните паспорт. Укажите проверяемую версию, тариф/редакцию, модули, две рабочие станции, сканер, принтер, роли и режим внешнего канала.
3. Выберите обязательные проверки до демонстрации. Для одного владельца второй учебный владелец может быть неприменим; тогда вывод о разделении владельцев не делается. Если вам необходимы несколько клиентов или организаций, исключать этот тест нельзя.
4. Обнулите только собственный учебный контур штатным согласованным способом. Шаг 0 эталона — пустой запас. Данные и активные операции настоящих клиентов здесь не нужны.
5. Подготовьте 8 физических учебных предметов с текстовыми ярлыками. `M02-S-001` и `M02-L-002` можно закодировать в Code 128 для испытания обычного сканера. Это не GTIN, КИЗ или коды маркетплейса. Проверка маркировки в этот комплект не входит.
6. Заведите двух тестовых исполнителей PICK-A/PICK-B с заранее оговорёнными правами и контролёра. Для прав используйте исключительно свои учебные объекты.

## Правила учебной модели

Товар различается ключом `owner_id + variant_id`. `item_id` обозначает общую модель товара. Один и тот же `seller_sku` и товарный штрихкод у двух владельцев не разрешают смешивать их остатки. Внутри OWN-A попытка назначить `M02-S-001` другому варианту VAR-X намеренно неоднозначна.

Заказ различается парой `source_account_id + external_order_id`, строка — ещё и `line_id`. CHANNEL-A/CHANNEL-B — вымышленные источники; имена не доказывают подключение конкретной площадки.

В основном наборе все внешние номера различаются. Поэтому он проверяет повтор одного заказа, но не обнаружение одинакового внешнего номера в разных кабинетах. При необходимости создайте отдельный прогон с двумя кабинетами, одинаковым внешним ID и разными заказами. Они должны остаться двумя объектами, а повтор каждого не должен создавать новый. Этот дополнительный прогон имеет собственные начальные данные и не входит в 39 строк основного эталона.

В справочнике мест `allowed_owner_ids` содержит допустимых владельцев через точку с запятой: общий участок RECEIVING принимает обоих, а запас всё равно хранится раздельно по владельцу. В финальных заказах `shipped_qty` — количество, переданное за весь сценарий; `returned_qty` — часть этого количества, физически вернувшаяся на склад. Это два отдельных события, а не две независимые продажи.

Выбранная политика: резерв возникает при принятии заказа. Для дефицитного ORD-103 **частичное резервирование выключено**: заказу требуется 2 L, доступна 1, поэтому полного резерва не возникает. Продукт с другой политикой можно оценивать, но политику и новый эталон нужно согласовать заранее.

Все количества — штуки. В модели:

`available = on_hand − reserved − quarantine`

`on_hand` — всё физически находящееся на учебном складе, включая PACK и Q-01. `reserved` — физические единицы для активных заказов; `quarantine` — изолированные единицы, которые не находятся в резерве. Товар в PACK уже включён в резерв: вычитать упаковку второй раз нельзя. Ожидаемый приход, транзит, страховой буфер, комплекты, партии и сроки годности в эту модель не включены.

## Как пройти 12 шагов

Выполняйте строки `m02-protocol-template.csv` последовательно. В шаге 4 берите только заказы с `input_step=4`, затем повторите именно этот пакет. Строку ORD-103 вводите в шаге 5. В шаге 3 разместите и переместите товар точно по указанным ячейкам. В шаге 7 две S уходят из A-01 в PACK, оставаясь физически на складе. В шаге 9 отменяется ещё не подобранный ORD-104.

В шаге 10 сотрудник инициирует передачу штатным действием **проверяемой WMS**. Согласованный тестовый получатель принимает и применяет SHIP-101, но его ответ до WMS не доходит. В паспорте запишите отправителя, получателя и точку потери ответа. Проверка состояния и допустимый повтор выполняются штатным способом через WMS, а не прямым ручным вызовом симулятора. Способ корреляции и повтор выбираются по контракту продукта; нельзя требовать выдуманный параметр `idempotency-key`, если его нет в интерфейсе.

Сохраните два отдельных доказательства по тому же заказу/операции: журнал тестового получателя с одной применённой передачей и журнал WMS с одним списанием двух S. Повтор не создаёт ещё одну передачу или списание. Прямой тест самостоятельного симулятора не проверяет поведение WMS; тест только локальной операции WMS не засчитывается как проверка внешнего обмена. Если согласованная среда не позволяет воспроизвести потерю ответа или получить эти доказательства, отметьте **«Не проверено»**. Ручное переключение статуса не доказывает устойчивость внешнего обмена.

Если шаг 10 не выполнен, остановите последовательный прогон. Шаг 11 и количественная часть шага 12 остаются **«Не проверено: не выполнено предусловие — передача»**. Для отдельного показа возврата создайте другую учебную копию с искусственно подготовленным состоянием после передачи и новым ID прогона. Это проверяет только выбранную часть интерфейса; не засчитывайте подготовку как успешный шаг 10 и не склеивайте результаты разных прогонов в один сквозной результат. По тому же правилу действуйте, если не выполнен любой другой необходимый предыдущий шаг.

В шаге 11 на склад физически возвращается одна S из ORD-101. Она поступает в Q-01; до осмотра доступный запас не растёт. Возвращённая единица остаётся связанной с исходной передачей. ORD-102 остаётся в резерве в конце специально: незавершённый заказ помогает проверить, что итоговая сверка не освобождает резерв самопроизвольно.

После каждой строки фиксируйте факт, время, ID результата и файл доказательства. Обозначения E01–E12, в том числе E10-WMS и E10-RECEIVER, в заполненном примере вымышлены; файлов с такими доказательствами в комплекте нет. Ссылки на собственные снимки/журналы добавляйте в вашу копию протокола.

## Контрольные итоги

Порядок чисел: **физически / резерв / карантин / доступно**.

| После шага | Всего по двум владельцам |
|---|---:|
| 0–1 | 0 / 0 / 0 / 0 |
| 2–3 | 8 / 0 / 0 / 8 |
| 4–8 | 8 / 4 / 0 / 4 |
| 9 | 8 / 3 / 0 / 5 |
| 10 | 6 / 1 / 0 / 5 |
| 11–12 | 7 / 1 / 1 / 5 |

Финальная сверка по позициям:

| Владелец / вариант | Физически | Резерв | Карантин | Доступно |
|---|---:|---:|---:|---:|
| OWN-A / VAR-S | 4 | 0 | 1 | 3 |
| OWN-A / VAR-L | 2 | 1 | 0 | 1 |
| OWN-B / VAR-S | 1 | 0 | 0 | 1 |
| Всего | 7 | 1 | 1 | 5 |

Независимая проверка физического количества: `8 принято − 2 передано + 1 возвращено = 7`. Доступно: `7 − 1 − 1 = 5`. Итог только владельца А: 6 физически, 1 в резерве, 1 в карантине, 4 доступно. Не сравнивайте его с общим итогом двух владельцев.

## Как принять решение

- **Годно:** наблюдение совпало с ожиданием и приложено проверяемое доказательство для этой версии и условий.
- **Доработка:** расхождение описано, понятны исправление и повторный тест. Одного обещания разработчика недостаточно.
- **Стоп:** неверный товар прошёл контроль, появился двойной расход/резерв, раскрыты чужие данные или результат нельзя сверить. Удобный интерфейс не компенсирует такой результат.
- **Не проверено:** действия не удалось воспроизвести или нет доказательства. Это не «годно».
- **Не применимо:** заранее согласовано, что функция не входит в выбираемый процесс; причина и граница вывода записаны.

В учебном заполнении шаг 8 имеет статус «Доработка»: повтор печатает правильный номер, но его причина не сохраняется. Остальные строки условно пройдены. Даже такой результат не означает готовности к запуску: нужно устранить существенное для вашей работы расхождение, повторить соответствующий тест и отдельно решить вопрос рабочего пилота.

Время в примере выдумано: 1 310 секунд активной работы и 91 секунда ожидания. Эти числа служат примером заполнения отдельных полей и не являются нормой выработки, замером продукта, сроком демонстрации или расчётом экономии.

## Что остаётся за пределами комплекта

Протокол не доказывает работу конкретной интеграции, производительность под нагрузкой, безошибочность всех сценариев, юридический цикл маркировки, перенос истории или приёмку склада после миграции. Для маркировки, партий, сроков, комплектов и реальных каналов нужны отдельные согласованные проверки. Для решения о запуске нужен ограниченный рабочий пилот со своими данными и критериями.
