Files
second-mind-aep/adssa.md
2025-09-12 13:12:03 +04:00

26 KiB
Raw Blame History

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 для всех текстовых данных

Схема проекта

Архитектура системы

graph TB  
    HOST[HOST System<br/>ERP/WMS]    WAMAS[WAMAS-C<br/>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  

Взаимодействие компонентов

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  

База данных

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)

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)

flowchart TD  
    A[Лоток прибывает на станцию] --> B[Отображение 'КОНТР' и количества]    B --> C[Подсветка ячейки лотка]    C --> D[Оператор берет товар]    D --> E[Сканирование EAN штрих-код]    E --> F{Код читается?}    F -->|Нет| G[Сканирование эталонного кода]    G --> E    F -->|Да| H{Защита от двойного сканирования<br/>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: Печать этикетки

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: Инвентаризация лотка

flowchart TD  
    A[Получено задание inventory-new-add] --> B[Лоток прибывает на станцию]    B --> C[Отображение 'ИНВЕНТАРИЗАЦИЯ']    C --> D[Оператор подтверждает кнопкой №2]    D --> E[Подсветка первой ячейки]    E --> F[Отображение наименования SKU<br/>до 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: Валидация типа лотка

flowchart TD  
    A[Получено сообщение disp-add] --> B[Получено сообщение tub-type]    B --> C[Проверка соответствия tu_type и compartment_id]    C --> D{Соответствие корректно?}    D -->|Да| E[Обработка задания]    D -->|Нет| F[Запись в таблицу со статусом error]        G[Правила валидации:<br/>TUB1: compartment_id = 1<br/>TUB2: compartment_id = 1,2<br/>TUB4: compartment_id = 1,2,3,4<br/>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 (Задание на резервирование товара)

graph LR  
    subgraph "HOST System"        A[Create Task]    end        subgraph "XML Message"  
        B[disp-add<br/>TRANSFERID<br/>order_id<br/>print=true/false<br/>SGTIN=true/false<br/>marker=scan/damaged/careful<br/>LEN=минимальная длина]    end        subgraph "WAMAS Database"  
        C[RESERVE_LINES_OW<br/>Table]    end        A --> B  
    B --> C  

Назначение: Создание задания на сборку товара из лотка хранения
Формат: XML
Таблица: RESERVE_LINES_OW

Структура сообщения:

<record_type="disp-add" TRANSFERID="12900129" tub_number="110002556">  
  <disp-add-line    order_id="1877865"   
    order_line_id="1"   
    station_id="PTL001"   
    geo_code="001.01.01.01"   
    compartment_id="1"   
    ordered="5"  
    host_order_line_id="1863829413"    print="true"   
    SGTIN="true"  
    LEN="20"    marker="scan">  </disp-add-line></disp-add>  

Ключевые поля:

  • TRANSFERID: Уникальный идентификатор сообщения
  • print: Флаг необходимости печати этикетки (true/false)
  • SGTIN: Наличие SGTIN кодов у товара (true/false)
  • LEN: Минимальная длина сканируемого кода
  • marker: Специальные маркеры (damaged/careful/scan)

MSG-002: tub-type (Определение типа лотка)

graph LR  
    subgraph "HOST System"        A[Define Tub Type]    end        subgraph "XML Message"  
        B[tub-type<br/>TRANSFERID<br/>box_number<br/>tu_type=TUB1/TUB2/TUB4/TUB8]    end        subgraph "WAMAS Database"  
        C[TUB_TYPE_OW<br/>Table]    end        A --> B  
    B --> C  

Назначение: Сообщение о типе лотка для валидации операций
Формат: XML
Таблица: TUB_TYPE_OW

Структура сообщения:

<tub-type TRANSFERID="12900130" box_number="110002556" tu_type="TUB4"/>  

MSG-003: inventory-new-add (Задание на инвентаризацию)

graph LR  
    subgraph "HOST System"        A[Create Inventory Task]    end        subgraph "XML Message"  
        B[inventory-new-add<br/>TRANSFERID<br/>box_number<br/>tu_type<br/>station_id<br/>sku_names]    end        subgraph "WAMAS Database"  
        C[INVENTORY_OW<br/>Table]    end        A --> B  
    B --> C  

Назначение: Создание задания на инвентаризацию лотка
Формат: XML
Таблица: INVENTORY_OW

Структура сообщения:

<inventory-new-add TRANSFERID="12900131" box_number="110002556" tu_type="TUB2" station_id="PTL001">  
  <inventory-line compartment_id="1" sku_name="Товар 1"/>  <inventory-line compartment_id="2" sku_name="Товар 2"/></inventory-new-add>  

Обмен данными WAMAS → HOST

MSG-101: pick-response (Отчет о сборке заказа)

graph LR  
    subgraph "WAMAS Database"        A[PICK_WO<br/>Table]        B[PICK_CODE_WO<br/>Table]    end        subgraph "XML Message"  
        C[pick-response<br/>TRANSFERID<br/>picked quantity<br/>pick_status<br/>item_codes array]    end        subgraph "HOST System"  
        D[Process Results]    end        A --> C  
    B --> C    C --> D  

Назначение: Подтверждение выполнения операции сборки с деталями
Формат: XML
Таблицы: PICK_WO, PICK_CODE_WO

Структура сообщения:

<pick-response   
  TRANSFERID="12900141"   
  tote_number="40009681"   
  geo_code="001.01.01.01"  
  customer_code="448359"  host_order_id="1280449"   
  station_id="PTL001"  
  tub_number="110002964"  pick_status="1"   
  compartment_id="1"   
  picked="2">  
  <pick-response-line item_code="SGTIN:123456789012345"/>  <pick-response-line item_code="SGTIN:123456789012346"/></pick-response>  

MSG-102: print-response (Отчет о печати)

graph LR  
    subgraph "WAMAS Database"        A[PRINT_WO<br/>Table]    end        subgraph "XML Message"  
        B[print-response<br/>TRANSFERID<br/>print_status=1/2<br/>station_id<br/>order_id]    end        subgraph "HOST System"  
        C[Update Print Status]    end        A --> B  
    B --> C  

Назначение: Подтверждение статуса печати этикетки
Формат: XML
Таблица: PRINT_WO

Структура сообщения:

<print-response   
  TRANSFERID="169954915"   
  print_status="1"   
  station_id="PTL001"   
  order_id="1877865"/>  

Статусы печати:

  • 1: Печать выполнена успешно
  • 2: Ошибка печати

MSG-103: inventory-response (Результаты инвентаризации)

graph LR  
    subgraph "WAMAS Database"        A[INVENTORY_WO<br/>Table]    end        subgraph "XML Message"  
        B[inventory-response<br/>TRANSFERID<br/>box_number<br/>station_id<br/>actual quantities]    end        subgraph "HOST System"  
        C[Update Inventory]    end        A --> B  
    B --> C  

Назначение: Передача результатов инвентаризации лотка
Формат: XML

Структура сообщения:

<inventory-response   
  TRANSFERID="12900131"   
  box_number="110002556"   
  station_id="PTL001">  
  <inventory-line compartment_id="1" actual_qty="15"/>  <inventory-line compartment_id="2" actual_qty="0"/></inventory-response>  

Процессы интеграции

INT-001: Инициация сборки заказа

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: Обработка ошибок

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: Мониторинг и логирование

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