From 3d83d64ab9304cc5cccd197e7d1963d7a3a5fea6 Mon Sep 17 00:00:00 2001 From: Andrey Epifancev Date: Fri, 12 Sep 2025 13:16:24 +0400 Subject: [PATCH] vault backup: 2025-09-12 13:16:24 --- .obsidian/app.json | 8 +- adssa.md | 1167 ++++++++++++++++++++++++++++---------------- 2 files changed, 740 insertions(+), 435 deletions(-) diff --git a/.obsidian/app.json b/.obsidian/app.json index c9e99e1..57e5465 100644 --- a/.obsidian/app.json +++ b/.obsidian/app.json @@ -1,4 +1,10 @@ { "alwaysUpdateLinks": true, - "promptDelete": false + "promptDelete": false, + "pdfExportSettings": { + "pageSize": "Letter", + "landscape": false, + "margin": "0", + "downscalePercent": 100 + } } \ No newline at end of file diff --git a/adssa.md b/adssa.md index 7418534..c87b396 100644 --- a/adssa.md +++ b/adssa.md @@ -1,435 +1,734 @@ -# 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 +# 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 ``` \ No newline at end of file