К статье о проверке выгрузки WMS

Матрица переносимости и учебный комплект

Учебный пример. Все записи вымышлены. Это схема проверки локальных файлов, а не выгрузка клиента, формат импорта SelSup или Skirbo либо доказательство работы их API.

1. Заполните матрицу

В матрице 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 у движений и документов отсутствуют. Связь отгрузки с конкретной строкой заказа требует отдельного образца и здесь не проверяется.

ФайлЗаписейНазначение и связь
Владельцы2O1 и O2 — вымышленные владельцы товара.
Товары2Каждый товар ссылается на владельца.
Варианты3Вариант ссылается на товар и владельца. V001 и V002 имеют одинаковые sku и barcode у разных владельцев.
Склад1W01 — один физический учебный склад.
Ячейки2Ячейка ссылается на склад.
Заказы3Два открытых и один отменённый. Внешний номер повторяется у разных владельцев.
Строки заказов3Связь заказа с вариантом и заказанное количество.
Активные резервы2Связи со строкой заказа, владельцем, вариантом и ячейкой. История снятых резервов сюда не входит.
Остатки3Физический остаток включает резерв. Доступно = физически − в резерве. Нулевая строка V003 сохранена.
Движения4Приёмки и корректировка, без связи с заказом. Знак количества показывает приход/расход. Начальный остаток учебного периода равен нулю.
Документы4Внутренние учебные основания приёмки и корректировки. Вложения связаны через document_id в реестре вложений; отдельного attachment_id в таблице документов нет. Связи с заказом и юридических подписей в наборе нет.
Выбранные события истории2Отмена Q003 и изменение S003. Это частичный пример, не полный журнал.
Реестр вложений1Ссылка на D004, имя, размер и SHA-256 учебного файла.

Дополнительно: манифест файлов и контрольных значений; учебное вложение D004. Всего 32 записи в 13 CSV.

3. Проверьте руками

  1. Сохраните оригиналы. Импортируйте CSV с кодами как текст; убедитесь, что у V001 осталось 000123, а у Q001 — 000000042.
  2. Найдите L001 → Q001 и V001 → P01 → O1. Затем R001 → L001 и ячейку C01 → W01. На всех участках владелец должен совпасть.
  3. Сверьте физический остаток 5 + 4 + 0 = 9, резерв 2 + 1 + 0 = 3, доступность 3 + 3 + 0 = 6.
  4. Для V003 найдите приход +1 и корректировку −1, основание D004 и файл A001. Корректировка MV004 не имеет связи с заказом Q003 и не представлена как результат его отмены.
  5. Объясните ограничения: отгрузки со связью со строкой заказа в наборе нет; 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. Режим показывает, почему одна ошибка может нарушить несколько связей.

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