# WAMAS System - Требования и спецификация ## Функциональные требования ### FR-001: Поддержка типов лотков **Описание**: Система должна поддерживать работу с четырьмя типами лотков (TUB1, TUB2, TUB4, TUB8) с различным количеством активных ячеек. **Критерии приемки**: - TUB1: поддержка 1 активной ячейки с одним SKU - TUB2: поддержка 2 ячеек с различными SKU - TUB4: поддержка 4 активных ячеек - TUB8: поддержка 8 активных ячеек (новый тип) - Валидация соответствия типа лотка и номера ячейки ### FR-002: Контрольное сканирование товаров **Описание**: Система должна обеспечивать контрольное сканирование товаров с поддержкой различных типов кодов. **Критерии приемки**: - Поддержка сканирования SGTIN (2D QR-коды) - Поддержка сканирования EAN (1D штрих-коды) - Режим без сканирования для товаров, не требующих контроля - Валидация минимальной длины сканируемого кода (поле LEN) - Защита от двойного сканирования (таймер 0.5 сек) ### FR-003: Световая индикация ячеек **Описание**: Система должна обеспечивать точную световую индикацию активных ячеек для каждого типа лотка. **Критерии приемки**: - TUB1: подсветка всех 8 лампочек - TUB2: подсветка 4 лампочек - TUB4: подсветка 2 лампочек - TUB8: подсветка 1 лампочки - Режим мигания для товаров со специальными маркерами ### FR-004: Печать этикеток **Описание**: Система должна поддерживать печать этикеток через сетевые принтеры. **Критерии приемки**: - Управление сетевыми принтерами через WAMAS-C - Загрузка файлов из директории `/hcom/to_ssi/print/pbl_network_printer/` - Использование файла по умолчанию при недоступности основного - Обработка ошибок печати с соответствующими уведомлениями ### FR-005: Инвентаризация **Описание**: Система должна поддерживать процесс инвентаризации лотков хранения. **Критерии приемки**: - Поячеечная инвентаризация лотков - Отображение наименований SKU (до 42 символов) - Ввод фактического количества через интерфейс станции - Многоэкранное отображение информации с навигацией - Автоматическая отправка результатов в HOST систему ### FR-006: Обработка маркеров товаров **Описание**: Система должна обрабатывать специальные маркеры товаров и отображать соответствующие индикации. **Критерии приемки**: - Маркер "damaged" → отображение "МЕХ" - Маркер "careful" → отображение "СТЕКЛ" - Маркер "scan" + SGTIN=true → отображение "МАРКИР" - Маркер "scan" + SGTIN=false → отображение "КОНТР" ## Нефункциональные требования ### NFR-001: Производительность - Время отклика системы на действия оператора: не более 2 секунд - Пропускная способность: обработка до 100 операций в минуту на станцию - Время обработки сканирования: не более 1 секунды ### NFR-002: Надежность - Доступность системы: 99.5% в рабочее время - Устойчивость к сбоям сети между WAMAS и HOST системой - Автоматическое восстановление после кратковременных отключений ### NFR-003: Безопасность - Валидация всех входящих сообщений от HOST системы - Логирование всех операций для аудита - Защита от некорректных данных в XML сообщениях ### NFR-004: Совместимость - Обратная совместимость с существующими процессами WAMAS - Поддержка существующего протокола HOST Communication - Совместимость с текущим аппаратным обеспечением PTL станций ### NFR-005: Масштабируемость - Поддержка до 50 PTL станций одновременно - Возможность добавления новых типов лотков без изменения архитектуры - Горизонтальное масштабирование обработки сообщений ## Технические характеристики ### Аппаратные требования - **PTL станции**: Дисплеи, световые индикаторы, кнопки-мультилайты - **Сканеры**: Стационарные сканеры 1D/2D кодов на каждой станции - **Принтеры**: Сетевые принтеры этикеток (один на станцию) - **Сетевая инфраструктура**: Ethernet подключение для всех устройств ### Программные требования - **WAMAS-C**: Центральная система управления складом - **HOST система**: ERP/WMS система верхнего уровня - **База данных**: Таблицы для хранения данных операций и кодов - **Файловая система**: Доступ к сетевым директориям для файлов печати ### Протоколы и форматы - **Обмен данными**: XML сообщения между HOST и WAMAS - **Коды товаров**: SGTIN (2D QR), EAN (1D штрих-код) - **Файлы печати**: PDF формат для этикеток - **Кодировка**: UTF-8 для всех текстовых данных ## Схема проекта ### Архитектура системы ```mermaid graph TB HOST[HOST System
ERP/WMS] WAMAS[WAMAS-C
Controller] PTL1[PTL Station #001] PTL2[PTL Station #002] PTLX[PTL Station #XXX] subgraph Equipment1 ["PTL Station Equipment"] DISP[Display] LIGHTS[Light Indicators] SCAN[Scanner] PRINT[Printer] BTN[Buttons/Multilights] end HOST <==>|XML Messages| WAMAS WAMAS -->|Control Commands| PTL1 WAMAS -->|Control Commands| PTL2 WAMAS -->|Control Commands| PTLX PTL1 --> DISP PTL1 --> LIGHTS PTL1 --> SCAN PTL1 --> PRINT PTL1 --> BTN ``` ### Взаимодействие компонентов ```mermaid sequenceDiagram participant HOST as HOST System participant WAMAS as WAMAS-C Controller participant PTL as PTL Station Hardware HOST->>WAMAS: disp-add, tub-type, inventory-new-add WAMAS->>PTL: Station Commands PTL->>WAMAS: Hardware Status & Scan Data WAMAS->>HOST: pick-response, print-response, inventory-response Note over HOST,PTL: XML Protocol Communication ``` ### База данных ```mermaid erDiagram RESERVE_LINES_OW { int TRANSFERID PK int order_id int order_line_id string station_id boolean print boolean SGTIN int LEN string marker } TUB_TYPE_OW { int TRANSFERID PK int box_number string tu_type } INVENTORY_OW { int TRANSFERID PK int box_number string tu_type string station_id } PICK_WO { int TRANSFERID PK int picked int pick_status string station_id int tub_number } PICK_CODE_WO { int TRANSFERID PK string item_code } PRINT_WO { int TRANSFERID PK int print_status string station_id int order_id } PICK_WO ||--o{ PICK_CODE_WO : "TRANSFERID" ``` ## Use Cases ### UC-001: Сборка заказа с маркированным товаром (SGTIN) ```mermaid flowchart TD A[Лоток прибывает на станцию] --> B[Отображение 'МАРКИР' и количества] B --> C[Подсветка ячейки лотка] C --> D[Оператор берет товар] D --> E[Сканирование SGTIN QR-код] E --> F{Длина кода >= LEN?} F -->|Нет| G[Сообщение 'Пересканировать'] G --> E F -->|Да| H{QR читается?} H -->|Нет| I[Сканирование эталонного QR] I --> J[Режим 1.5.3] H -->|Да| K{Двойное сканирование?} K -->|Да| L[Сообщение 'ПОВТОР'] L --> M[Мигание кнопки №2] M --> N[Нажатие кнопки №2] N --> B K -->|Нет| O[Уменьшение счетчика] O --> P{Все единицы отсканированы?} P -->|Нет| D P -->|Да| Q[Отображение 'ПОДТВЕРДИТЬ'] Q --> R[Нажатие кнопки-мультилайт] R --> S[Отправка pick-response с item_code] ``` **Актеры**: Оператор склада, WAMAS-C, HOST система **Предусловия**: - Лоток хранения находится на станции - Получено задание disp-add с SGTIN=true, marker="scan" **Основной поток**: 1. Система отображает "МАРКИР" и количество на дисплее 2. Загорается подсветка нужной ячейки лотка 3. Оператор берет единицу товара 4. Оператор сканирует SGTIN (QR-код) 5. Система проверяет длину кода (должна быть >= LEN) 6. Система уменьшает счетчик на дисплее 7. Повторяется пп. 3-6 для всех единиц 8. Система просит подтверждение "ПОДТВЕРДИТЬ" 9. Оператор нажимает кнопку-мультилайт 10. Система отправляет pick-response с item_code для каждой единицы **Альтернативные потоки**: - 5а. Код слишком короткий → "Пересканировать" - 5б. QR не читается → сканирование эталонного кода → режим 1.5.3 - 4а. Двойное сканирование → "ПОВТОР" → возврат к п.3 ### UC-002: Сборка заказа с обычным товаром (EAN) ```mermaid flowchart TD A[Лоток прибывает на станцию] --> B[Отображение 'КОНТР' и количества] B --> C[Подсветка ячейки лотка] C --> D[Оператор берет товар] D --> E[Сканирование EAN штрих-код] E --> F{Код читается?} F -->|Нет| G[Сканирование эталонного кода] G --> E F -->|Да| H{Защита от двойного сканирования
0.5 сек} H -->|Блокировка| H H -->|OK| I[Уменьшение счетчика] I --> J{Все единицы отсканированы?} J -->|Нет| D J -->|Да| K[Отправка pick-response с item_code] ``` **Актеры**: Оператор склада, WAMAS-C, HOST система **Предусловия**: - Лоток хранения находится на станции - Получено задание disp-add с SGTIN=false, marker="scan" **Основной поток**: 1. Система отображает "КОНТР" и количество на дисплее 2. Загорается подсветка нужной ячейки лотка 3. Оператор берет единицу товара 4. Оператор сканирует EAN (штрих-код) 5. Система уменьшает счетчик на дисплее 6. Повторяется пп. 3-5 для всех единиц 7. Система отправляет pick-response с item_code **Альтернативные потоки**: - 4а. Код не читается → сканирование эталонного кода - 4б. Защита от двойного сканирования (таймер 0.5 сек) ### UC-003: Печать этикетки ```mermaid flowchart TD A[Получено задание с print=true] --> B[Отображение 'УПАК' и стрелки к принтеру] B --> C[Подсветка кнопки-мультилайт у принтера] C --> D[Оператор нажимает кнопку принтера] D --> E[Загрузка файла этикетки] E --> F{Файл доступен?} F -->|Нет| G[Использование default_label.pdf] F -->|Да| H[Отправка на принтер] G --> H H --> I{Печать успешна?} I -->|Да| J[print-response status=1] I -->|Нет| K[Сообщение 'ОШИБКА ПЕЧАТИ'] K --> L[Повторное нажатие кнопки] L --> M[print-response status=2] J --> N[Продолжение основного процесса] M --> N ``` **Актеры**: Оператор склада, WAMAS-C, Принтер, HOST система **Предусловия**: - Получено задание disp-add с print=true - Принтер подключен и готов ### UC-004: Инвентаризация лотка ```mermaid flowchart TD A[Получено задание inventory-new-add] --> B[Лоток прибывает на станцию] B --> C[Отображение 'ИНВЕНТАРИЗАЦИЯ'] C --> D[Оператор подтверждает кнопкой №2] D --> E[Подсветка первой ячейки] E --> F[Отображение наименования SKU
до 3 экранов] F --> G[Отображение 'КОЛ-ВО: 0'] G --> H[Оператор вводит количество +/-] H --> I[Подтверждение кнопкой №2] I --> J{Есть еще ячейки?} J -->|Да| K[Переход к следующей ячейке] K --> E J -->|Нет| L[Отправка inventory-response] L --> M[Лоток покидает станцию] style A fill:#e1f5fe style L fill:#c8e6c9 style M fill:#c8e6c9 ``` **Актеры**: Оператор склада, WAMAS-C, HOST система **Предусловия**: - Получено задание inventory-new-add - Лоток прибыл на станцию ### UC-005: Валидация типа лотка ```mermaid flowchart TD A[Получено сообщение disp-add] --> B[Получено сообщение tub-type] B --> C[Проверка соответствия tu_type и compartment_id] C --> D{Соответствие корректно?} D -->|Да| E[Обработка задания] D -->|Нет| F[Запись в таблицу со статусом error] G[Правила валидации:
TUB1: compartment_id = 1
TUB2: compartment_id = 1,2
TUB4: compartment_id = 1,2,3,4
TUB8: compartment_id = 1,2,3,4,5,6,7,8] style D fill:#fff3e0 style F fill:#ffcdd2 style E fill:#c8e6c9 ``` **Актеры**: WAMAS-C, HOST система **Предусловия**: Получено сообщение disp-add ## Host Communication процессы ### Обмен данными HOST → WAMAS #### MSG-001: disp-add (Задание на резервирование товара) ```mermaid graph LR subgraph "HOST System" A[Create Task] end subgraph "XML Message" B[disp-add
TRANSFERID
order_id
print=true/false
SGTIN=true/false
marker=scan/damaged/careful
LEN=минимальная длина] end subgraph "WAMAS Database" C[RESERVE_LINES_OW
Table] end A --> B B --> C ``` **Назначение**: Создание задания на сборку товара из лотка хранения **Формат**: XML **Таблица**: RESERVE_LINES_OW **Структура сообщения**: ```xml ``` **Ключевые поля**: - `TRANSFERID`: Уникальный идентификатор сообщения - `print`: Флаг необходимости печати этикетки (true/false) - `SGTIN`: Наличие SGTIN кодов у товара (true/false) - `LEN`: Минимальная длина сканируемого кода - `marker`: Специальные маркеры (damaged/careful/scan) #### MSG-002: tub-type (Определение типа лотка) ```mermaid graph LR subgraph "HOST System" A[Define Tub Type] end subgraph "XML Message" B[tub-type
TRANSFERID
box_number
tu_type=TUB1/TUB2/TUB4/TUB8] end subgraph "WAMAS Database" C[TUB_TYPE_OW
Table] end A --> B B --> C ``` **Назначение**: Сообщение о типе лотка для валидации операций **Формат**: XML **Таблица**: TUB_TYPE_OW **Структура сообщения**: ```xml ``` #### MSG-003: inventory-new-add (Задание на инвентаризацию) ```mermaid graph LR subgraph "HOST System" A[Create Inventory Task] end subgraph "XML Message" B[inventory-new-add
TRANSFERID
box_number
tu_type
station_id
sku_names] end subgraph "WAMAS Database" C[INVENTORY_OW
Table] end A --> B B --> C ``` **Назначение**: Создание задания на инвентаризацию лотка **Формат**: XML **Таблица**: INVENTORY_OW **Структура сообщения**: ```xml ``` ### Обмен данными WAMAS → HOST #### MSG-101: pick-response (Отчет о сборке заказа) ```mermaid graph LR subgraph "WAMAS Database" A[PICK_WO
Table] B[PICK_CODE_WO
Table] end subgraph "XML Message" C[pick-response
TRANSFERID
picked quantity
pick_status
item_codes array] end subgraph "HOST System" D[Process Results] end A --> C B --> C C --> D ``` **Назначение**: Подтверждение выполнения операции сборки с деталями **Формат**: XML **Таблицы**: PICK_WO, PICK_CODE_WO **Структура сообщения**: ```xml ``` #### MSG-102: print-response (Отчет о печати) ```mermaid graph LR subgraph "WAMAS Database" A[PRINT_WO
Table] end subgraph "XML Message" B[print-response
TRANSFERID
print_status=1/2
station_id
order_id] end subgraph "HOST System" C[Update Print Status] end A --> B B --> C ``` **Назначение**: Подтверждение статуса печати этикетки **Формат**: XML **Таблица**: PRINT_WO **Структура сообщения**: ```xml ``` **Статусы печати**: - `1`: Печать выполнена успешно - `2`: Ошибка печати #### MSG-103: inventory-response (Результаты инвентаризации) ```mermaid graph LR subgraph "WAMAS Database" A[INVENTORY_WO
Table] end subgraph "XML Message" B[inventory-response
TRANSFERID
box_number
station_id
actual quantities] end subgraph "HOST System" C[Update Inventory] end A --> B B --> C ``` **Назначение**: Передача результатов инвентаризации лотка **Формат**: XML **Структура сообщения**: ```xml ``` ### Процессы интеграции #### INT-001: Инициация сборки заказа ```mermaid sequenceDiagram participant HOST as HOST System participant WAMAS as WAMAS-C participant PTL as PTL Station participant OP as Operator HOST->>WAMAS: tub-type (определение типа лотка) WAMAS->>WAMAS: Сохранение типа лотка HOST->>WAMAS: disp-add (задание на сборку) WAMAS->>WAMAS: Валидация tu_type vs compartment_id alt Валидация успешна WAMAS->>PTL: Активация станции PTL->>OP: Отображение задания alt Требуется печать (print=true) PTL->>OP: "УПАК" + подсветка принтера OP->>PTL: Нажатие кнопки принтера PTL->>PTL: Печать этикетки PTL->>WAMAS: Статус печати WAMAS->>HOST: print-response (status=1) end PTL->>OP: Отображение товара + подсветка ячейки OP->>PTL: Сборка товара (с/без сканирования) PTL->>WAMAS: Результат операции WAMAS->>HOST: pick-response (с item_code если было сканирование) else Ошибка валидации WAMAS->>WAMAS: Запись в таблицу со статусом error end ``` #### INT-002: Обработка ошибок ```mermaid flowchart TD A[Получение сообщения] --> B{Валидация OK?} B -->|Нет| C[Запись в таблицу с error] B -->|Да| D[Обработка на PTL] D --> E{Принтер доступен?} E -->|Нет| F[print-response status=2] E -->|Да| G[Печать OK] G --> H[print-response status=1] F --> I[Продолжение без печати] H --> I I --> J{Сканирование OK?} J -->|Ошибка| K[Эталонный код или режим исключения] J -->|OK| L[pick-response с кодами] K --> M[pick-response без кодов] L --> N[Завершение] M --> N style C fill:#ffcccc style F fill:#ffffcc style K fill:#ffffcc ``` #### INT-003: Мониторинг и логирование ```mermaid graph TB subgraph "Входящие события" A[XML Messages] B[Scan Operations] C[Print Events] D[Validation Results] end subgraph "Система логирования" E[Message Logger] F[Operation Logger] G[Error Logger] H[Performance Monitor] end subgraph "Метрики и отчеты" I[Response Time] J[Success Rate] K[Station Load] L[Error Statistics] end A --> E B --> F C --> F D --> G E --> I F --> J F --> K G --> L style G fill:#ffcccc style L fill:#ffcccc ```