К статье о проверке выгрузки WMS
Матрица переносимости и учебный комплект
Учебный пример. Все записи вымышлены. Это схема проверки локальных файлов, а не выгрузка клиента, формат импорта SelSup или Skirbo либо доказательство работы их API.
1. Заполните матрицу
- Пустой шаблон CSV — перечень сущностей и вопросов. Поля способа, условий, доказательств и решения заполняете вы.
- Заполненный учебный пример CSV — показывает границы проверки и ограничения набора.
- Весь учебный комплект ZIP — CSV, манифест, учебное вложение, проверка Python и инструкция.
В матрице entity — сущность, purpose — зачем она нужна, criticality — критичность, required_fields — необходимые поля, primary_key — ключ записи, foreign_keys — связи. Остальные колонки: формат/кодировка, период, объём и страницы, права доступа, история/удаления/вложения, доказательство, результат, ограничение, следующий шаг.
Порядок работы: отметьте критичные данные; запишите конфигурацию поставщика и дату; получите образец; проверьте файлы и связи; внесите факт и ограничение; назначьте действие по незакрытым пунктам. Срок хранения, доступ после окончания тарифа, стоимость и способ экспорта уточняйте письменно.
2. Прочитайте учебные данные
CSV используют UTF-8 с BOM, запятую как разделитель, строку заголовков и CRLF. Количество — целые штуки. Идентификаторы и коды импортируйте как текст. Время файлов нормализовано в UTC с суффиксом Z; срез 2026-10-31T06:00:00Z равен 2026-10-31T09:00:00+03:00.
Проверяются две группы связей. В первой заказ и его строка связаны с владельцем, вариантом и резервом. Во второй складские движения связаны с вариантом, местом хранения, документом и вложением. Документы примера относятся к приёмке и корректировке; поля order_id или line_id у движений и документов отсутствуют. Связь отгрузки с конкретной строкой заказа требует отдельного образца и здесь не проверяется.
| Файл | Записей | Назначение и связь |
|---|---|---|
| Владельцы | 2 | O1 и O2 — вымышленные владельцы товара. |
| Товары | 2 | Каждый товар ссылается на владельца. |
| Варианты | 3 | Вариант ссылается на товар и владельца. V001 и V002 имеют одинаковые sku и barcode у разных владельцев. |
| Склад | 1 | W01 — один физический учебный склад. |
| Ячейки | 2 | Ячейка ссылается на склад. |
| Заказы | 3 | Два открытых и один отменённый. Внешний номер повторяется у разных владельцев. |
| Строки заказов | 3 | Связь заказа с вариантом и заказанное количество. |
| Активные резервы | 2 | Связи со строкой заказа, владельцем, вариантом и ячейкой. История снятых резервов сюда не входит. |
| Остатки | 3 | Физический остаток включает резерв. Доступно = физически − в резерве. Нулевая строка V003 сохранена. |
| Движения | 4 | Приёмки и корректировка, без связи с заказом. Знак количества показывает приход/расход. Начальный остаток учебного периода равен нулю. |
| Документы | 4 | Внутренние учебные основания приёмки и корректировки. Вложения связаны через document_id в реестре вложений; отдельного attachment_id в таблице документов нет. Связи с заказом и юридических подписей в наборе нет. |
| Выбранные события истории | 2 | Отмена Q003 и изменение S003. Это частичный пример, не полный журнал. |
| Реестр вложений | 1 | Ссылка на D004, имя, размер и SHA-256 учебного файла. |
Дополнительно: манифест файлов и контрольных значений; учебное вложение D004. Всего 32 записи в 13 CSV.
3. Проверьте руками
- Сохраните оригиналы. Импортируйте CSV с кодами как текст; убедитесь, что у V001 осталось
000123, а у Q001 —000000042. - Найдите L001 → Q001 и V001 → P01 → O1. Затем R001 → L001 и ячейку C01 → W01. На всех участках владелец должен совпасть.
- Сверьте физический остаток 5 + 4 + 0 = 9, резерв 2 + 1 + 0 = 3, доступность 3 + 3 + 0 = 6.
- Для V003 найдите приход +1 и корректировку −1, основание D004 и файл A001. Корректировка MV004 не имеет связи с заказом Q003 и не представлена как результат его отмены.
- Объясните ограничения: отгрузки со связью со строкой заказа в наборе нет; 2 события истории не доказывают полноту журнала. Отдельно нужны проверки исполнения заказа, полного периода, удалений, прав и объёма.
4. Проверка Python
Нужен Python 3.8 или новее без дополнительных библиотек. Временные отметки с Z преобразуются в явное смещение +00:00 перед разбором. Скачайте проверяющий скрипт, все 13 CSV, манифест и вложение в одну папку или распакуйте ZIP. Скрипт читает только локальный комплект; сетевых запросов и изменений файлов не делает.
python m03-check-export.py .
python m03-check-export.py . --demo-broken
Обычный запуск: 13 CSV, 32 записи, физически 9, в резерве 3, доступно 6; код завершения 0. Проверяются размеры набора, SHA-256, ключи и связи двух описанных групп, владельцы, остатки/резервы/движения, временные отметки и учебное вложение. Успех этой проверки не подтверждает связь заказа с отгрузкой.
Второй запуск портит две записи только в памяти: L001 получает ссылку V999, sku V001 становится 123. Ожидается код 1 и три сообщения: BROKEN_LINK, IDENTIFIER_CHANGED, RESERVE_LINK. Режим показывает, почему одна ошибка может нарушить несколько связей.
Для собственных данных нужен согласованный словарь и адаптация проверок. Переписанный вами манифест не доказывает полноту исходной системы; число записей и контрольные суммы количества сверяйте с независимым отчётом источника.