представляем ScanBind WMS — промышленный сервис, который автоматически распознаёт пачки сканированных документов, определяет их тип (например, АКТ, М-11, ТН, ОС-15, и др) и привязывает их к соответствующим объектам INBOUND/OUTBOUND и др в вашей WMS. с Открытым API

Что делает ScanBind WMS:

  • Пакетная обработка сканов из сетевых папок (Samba/FTP/SFTP) с рекурсивным обходом.
  • Поиск штрих и QR-кодов “пачки” (например, Code-128/QR/DataMatrix) и сопоставление с документом поставки или заказа.
  • OCR и классификация типа документа: сначала по “умным” правилам и нечёткому поиску, затем — моделью ML (Tribuo) для повышения точности.
  • Статусы и прозрачность: в каждой папке сервис ведёт файл robot.process.json с прогрессом и итогами распознавания.
  • Интеграция: результат уходит в интеграционную шину (с файлами в base64 или ссылками) для дальнейшей загрузки в БД/WMS.
  • Надёжность: идемпотентные повторные попытки, разбор ошибок по файлам, перемещение успешно обработанных пачек в “выходные” каталоги.

ScanBindApp для классификации сканов и привязки к документам поставки/отгрузки

Как это работает

  • Пачки документов маркируются штрих-/QR-кодом.
  • Сканер складывает файлы в сетевую папку.
  • ScanBind WMS находит “код пачки”, делает OCR, определяет docType и формирует robot.process.json.
  • Данные улетают в шину, а оттуда — в вашу WMS/БД, где документы автоматически привязываются к поставкам/отгрузкам.

Технологический фундамент

  • Java 21 + Spring Boot — сервисный контур и API.
  • ZXing — надёжное распознавание штрих- и QR-кодов.
  • Tesseract OCR (rus+eng) — извлечение текста из PDF/TIFF/JPG/PNG.
  • Tribuo ML — классификация типа документа по OCR-тексту (TF-IDF + логистическая регрессия).
  • Apache Camel — коннекторы к файловым источникам и интеграционной шине.
  • Docker/Kubernetes — развёртывание и масштабирование; Actuator/Micrometer — мониторинг.

Польза для склада и бухгалтерии

Меньше ручной работы и ошибок при разборе сканов.

Быстрый доступ к документам прямо из карточек поставки/заказа.

Прозрачный контроль статусов обработки.

Готовность к росту объёмов без увеличения штата.

Расширяемые правила под ваши типы форм и бренды бланков.

Готовы показать демо на ваших сканах и подключить ScanBind WMS к существующей шине и WMS. Напишите нам — пришлём инструкцию по пилоту и чек-лист интеграции.

Из публичного репозитория qndirocheck/mobile-cis_service:latest выможете создать контейнер для Сервера приложений мобильных терминалов

Для запуска из командной строки:

```
docker run -d --name mcis \
-p 10081:10081 \
-e TZ=Europe/Moscow \
-e PORT=10081 \
-e DB_URL="jdbc:oracle:thin:@137.18.77.2119:1521:tst" \
-e DB_USER=username \
-e DB_PASSWORD=your_db_password \
qndirocheck/mobile-cis_service:latest
```

Для запуска docker-compose (с табуляцией внимательно) :

```
version: '3.8'

services:
mcis:
image: qndirocheck/mobile-cis_service:latest
ports:
- "10081:10081" # порт сервера приложений
environment:
TZ: Europe/Moscow
PORT: "10081"
DB_URL: "jdbc:oracle:thin:@137.18.77.2119:1521:tst" # урл базы данных
DB_USER: "" # логин
DB_PASSWORD: "" # пароль
SESSION_TIMEOUT: 600000 # тайм аут сессии БД
volumes:
- mcis-data:/usr/src/app/data

volumes:
mcis-data:
external: true
```

# docker volume create mcis-data # создать раздел в докере

для запуска сохраните конфиг в docker-compose.yml

и запустите docker-compose -f docker-compose.yml up -d

Наша компания разработала новое гибкое решение для терминала саморегистрации. Оно предназначено для замены или уменьшения ручного труда персонала, уменьшения контакта посетителей с обслуживающим персоналом.
Ключевым моментом данного устройства является то, что оно может быть с легкостью интегрировано в уже действующую пропускную и иные системы с обменом в реальном времени по протоколу HTTP API в формате JSON.

Также можно интегрировать камеру для распознавания лиц сотрудников и/или тепловизор для анализа температуры посетителей, что очень важно в условиях сложной эпидемиологической ситуации.

Применение подобных систем имеет широкий охват. Это могут быть:
— регистрация водителей
— регистрация посетителей
— журнал здоровья сотрудников

Enterprise Service Bus (Корпоративная сервисная шина данных)

Собственная разработка, базирующаяся на платформе интеграций приложений Apache Camel с дополнительными надстройками, такими как балансировка нагрузки, логирование событий и данных и прочее. Настройку интеграционных маршрутов вынесли в groovy-скрипты, что позволяет в динамике писать, подгружать и настраивать интеграцию.

Видео с примером работы шины

Что это такое

Основной принцип ШИНЫ (ESB) — передача информации между различными приложениями путем передачи данных по любому «транспорту». Шина разделяет приложения, организовывая коммуникацию, независящую ни от формы данных, ни от способа их передачи.

Концепция ШИНЫ появилась благодаря желанию избавиться от программирования транспортного слоя интеграции (т.е. подбирать компоненты для считывания почты, работы с SFTP,  поднятия интеграционных сервисов точка-точки), которая со временем становится разрозненной и, как следствие, менее управляемой со сложной системой мониторинга и управления.

Корпоративная интеграционная шина
Корпоративная интеграционная шина

зачем

для повышения гибкости, для увеличения скорости развертываемости

когда задуматься о новом подходе к интеграции

  • когда выросли затраты в первую очередь на поддержку интеграции
  • когда количество разных протоколов и методов выросло в разы
  • когда нужно маршрутизировать интеграционные данные, а не просто передавать из А в Б
  • когда требуется гарантированная доставка сообщения вне зависимости от транспорта
  • когда количество форматов данных уже не укладывается в разумные рамки (более двух)
  • когда требуется быстрое масштабирование

как начать настраивать интеграцию

  • получить в тест шину
  • начать писать скрипты интеграции
  • 3 строки, чтобы информировать о любом событии в Telegram
    builder.from("direct:telegramSendMessage")
            .id("telegramSendMessage").description("отправка сообщения в телеграмм")
            .toD("https://api.telegram.org/bot\NULL/sendMessage?chat_id=\NULL&text=\${bodyAs(String)} ")
    забрать файлы из почты и трасформировать в XML
    //получение сообщения из почты
    builder.from("pop3s:mail3.mail.ru:995?username=esb@mail.ru&password=ччччччч&fetchSize=1&delete=true")
            .id("fromMail").description("загружаю из почты cwms pop3 из ящика esb@mail.ru")
    // разделили на вложения
            .split(new SplitEmailByParts())
            .log("\NULL")
            .log("\NULL regex '\\*\\.(xlsx|xls|csv)' ")
            .choice()
    //если вложенный файл XML
            .when(builder.header("fileName").endsWith(".xml"))
    //установили хидеры для сохранения в бд
    //завернули в edi сообщение
            .setHeader(BaseEdiHeaders.PROCESSING_STEP, builder.constant("workWithFileFromMAIL"))
            .setHeader(BaseEdiHeaders.STATUS, builder.constant(EdiBusMessage.Status.PENDING))
            .setHeader(BaseEdiHeaders.BASE_ROUTE_ID, builder.constant("xmlFromQueue"))
            .to("direct:body-wrap") //тут BODY NULL почему????
    // сохранили в базу со статусом  PENDING для дальнейшей обработки
            .to("direct:edi-queue-push")
    

     

    файлы из почты трансформируем в базовый XML
    /**
    * Забрали сообщение из очереди
    * EXCEL
    * **/
    builder.from("direct:excelFromQueue")
    .id("excelFromQueue").description("забираем из очереди EXCEL и трансформируем в XML")
    .to("direct:processed")
    //развернули из сообщения тело
    .to("direct:body-unwrap")
    //если это EXCEL то переводим в XML
    .to("direct:xls2xml")
    //установили хидеры для сохранения в бд
    // меняем заголовки, чтобы отразить выполнение в базу
    .setHeader(BaseEdiHeaders.UP, builder.simple("\${in.header." + BaseEdiHeaders.N + "}"))
    .setHeader(BaseEdiHeaders.N, builder.constant(0L))
    //завернули в edi сообщение
    .setHeader(BaseEdiHeaders.PROCESSING_STEP, builder.constant("after-xls2xml"))
    .setHeader(BaseEdiHeaders.STATUS, builder.constant(EdiBusMessage.Status.PENDING))
    .setHeader(BaseEdiHeaders.BASE_ROUTE_ID, builder.constant("xml2xslFromQueue"))
    .to("direct:body-wrap") //тут BODY NULL почему????
    // сохранили в базу со статусом PENDING для дальнейшей обработки
    .to("direct:edi-queue-push")
    XML трансформируем с помощью XSLT-трансформации в формат, который уже универсален для НАС
    /**
    * забрали из очереди XML
    * делаем трансформацию XSL в формат WMS
    *
    * **/
    builder.from("direct:xml2xslFromQueue")
    .id("xml2xslFromQueue").description("забираем из очереди XML и трансформируем в XML")
    .to("direct:processed")
    //развернули из сообщения тело
    .to("direct:body-unwrap")
    .toD("xslt:file://C:/_ESB/scripts/XSL/fulleksInbound.xsl")
    //установили хидеры для сохранения в бд
    // меняем заголовки, чтобы отразить выполнение в базу
    .setHeader(BaseEdiHeaders.UP, builder.simple("\${in.header." + BaseEdiHeaders.N + "}"))
    .setHeader(BaseEdiHeaders.N, builder.constant(0L))
    //завернули в edi сообщение
    .setHeader(BaseEdiHeaders.PROCESSING_STEP, builder.constant("after-xls2xml"))
    .setHeader(BaseEdiHeaders.STATUS, builder.constant(EdiBusMessage.Status.PENDING))
    .setHeader(BaseEdiHeaders.BASE_ROUTE_ID, builder.constant("xmlFromQueue"))
    .to("direct:body-wrap") //тут BODY NULL почему????
    // сохранили в базу со статусом PENDING для дальнейшей обработки
    .to("direct:edi-queue-push")
    Отправляем XML в WMS для создания документов
    /**
    * Забрали сообщение из очереди
    * XML и отправляем в WMS для создания документов поставки или отгрузки
    * **/
    builder.from("direct:xmlFromQueue")
    .id("xmlFromQueue").description("забираем из очереди XML и отправляем на обработку в direct:kk-load-xml")
    .to("direct:processed")
    //развернули из сообщения тело
    .to("direct:body-unwrap")
    // инициализировали dataSource
    .to("direct:oracle-CWMS")
    //cунули на обработку в пакет БД
    .to("direct:kk-load-xml")
    // меняем заголовки, чтобы отразить выполнение в базу
    .setHeader(BaseEdiHeaders.UP, builder.simple("\${in.header." + BaseEdiHeaders.N + "}"))
    .setHeader(BaseEdiHeaders.N, builder.constant(0L))
    // двинули на след обработке PROCESSING_STEP = XSLT
    .setHeader(BaseEdiHeaders.PROCESSING_STEP, builder.constant("KK_LOAD_XML"))
    .setHeader(BaseEdiHeaders.STATUS, builder.constant(EdiBusMessage.Status.PROCESSED))
    .log("KK_LOAD_XML DONE step. ")
    .to("direct:body-wrap")
    .to("direct:edi-queue-push")

     

    Корпоративная интеграционная шина
    Корпоративная интеграционная шина

    Мы готовы ответить на все ваши вопросы по тел. +7 (495) 775-76-31 и даже дать попробовать шину в тест.

    Скажите, вам звонил ваш робот на телефон или писал сообщения в Telegram, о важных событиях на предприятии?

    Мы разработали новые сервисы взаимодействия с IT инфраструктурой вашей компании!

    Теперь вы можете получать уведомления еще двумя способами о любом событии, что было зафиксировано в системе или в других ваших системах: Товар попал в ячейку Lost, изменилось состоянии кондиции — контролер получит уведомление;

    Водитель получит уведомление о начале/окончании погрузочно-разгрузочных работ;

    Подборщик задержался на перерыве и не получил следующее задание — начальник смены не упустит ни чего из виду.

    • интегрируем ваши информационные системы в современные инструменты общения Telegram и Ip телефонию
    • оповещения о событиях голосом или текстом (textToSpeech или    Bot)
    • интерактивное взаимодействие с системами в том числе и роботизированное
    • перевод в текст и анализ звонков (speechToText)
    • запрос и уведомление о состоянии систем и серверов

     

    Любые уведомления удобным для вас способом!

     

    В CWMS-3000® разработан новый модуль «Электронный документооборот» для электронного подписания документов.
    При проводке документов (приемка поставок, возвраты, отгрузка и прочее) создается пакет документов в новом модуле «Электронный документооборот», к нему формируется МХ1, МХ3 и другие документы, активируется возможность подписания.
    Все документы, подписываемые в модуле «Электронный документооборот» от CWMS-3000® или web-сервиса, подписываются электронной подписью с использованием сертифицированных средств криптографической защиты информации.

    Возможности модуля системы ЭДО

    • Удобный доступ в систему как через web-интерфейс, так и через CWMS-3000®
    • Учет, отслеживание и структуризация входящих и исходящих документов
    • Возможность обмена формализованными и неформализованными документами
    • Многопользовательская работа с документами (создание, редактирование, подписание, поддержка версионности, поиск документов по ряду параметров, в том числе полнотекстовый поиск)
    • Безопасность и доступность решения. Надежное, оперативное и долговременное хранение документов в рамках электронного архива
    • Прозрачный механизм согласования, полное информирование участников процесса согласования и заинтересованных лиц о статусе документа и его маршруте, а также возможность гибкой настройки маршрутов согласования документов
    • Гибкая система отчетности по документообороту как для работника, так и для работодателя
    • Интеграция с внутренними системами и внешними сервисами ЭДО

    Преимущества использования ЭДО

    • Сокращение расходов организации на печать, согласование и логистику документов
    • Отсутствие возможности задержек или потери любых документов
    • Снижение времени на обработку входящих и исходящих документов
    • Сокращение количества ошибок при вводе и обработке документов
    • Доступ к системе 24/7/365 из любой точки земного шара

    В текущих условиях в быстрорастущем сегменте fulfillment растет потребность к не дорогим и качественным инструментам автоматизации процессов на складах. Мы проанализировали предложение рынка и нашли потребность в недорогих измерительных углах, которые могут интегрироваться с любыми системами автоматизации. На данный момент собрали и протестировали прототип измерительного угла и готовы к массовому производству.
    На данный момент максимальный размер измеряемого объекта 600мм по каждой из осей. Угол может быть произведен под заказ. Точность измерения 3mm.
    Весы интегрированы с весами MASSA-K*
    По всем вопросам обращайтесь в нашу техническую поддержку

    Измерительный угол
    Измерительный угол для складов

    Коллеги!

    Контактный телефон +7 (495) 775 76 31 восстановлен.

    Уважаемые коллеги! В связи с проведением технических работ нашего провайдера сегодня телефон Технической поддержки может быть недоступен. Просьба звонить при необходимости на номер +7-968-374-58-89 и обращаться на почту notify@cwms3000.ru

    Разбираемся в маркировке фармацевтической продукции (и любой продукции) для соответствия законодательству.
    Далее узнаете откуда получить данные и как их обрабатывать, а так же ссылки на нормативно-правовые акты и сроки внедрения процессов
    Подготовлено по многочисленным просьбам наших клиентов http://cwms3000.ru/clients/
    Что такое GTIN (англ. Global Trade Item Number) — префикс зарегистрированного производителя и код товара, обеспечивает однозначную идентификацию товара в любой стране мира и не может быть присвоен никакому иному товару. Функции администрирования номера GTIN в каждой стране возложена на национальную организацию GS1.
    Где получить — gs1ru
    Что такое sGTIN — это GTIN + Серийный номер (12 символов)
    Где получить — GTIN (см выше), Серийный номер генерируем сами и запоминаем что cгенерировали
    Что зашито в коде DATAMATRIX нашего примера(см картинку) GTIN в формате GS1-128 и серийный номер:

    (01)14605501000080(17)211100(10)DU10034 21DSLVXW1QCTXG
    (01) префикс, признак того что далее будет GTIN 14 знаков
    14605501000080 GTIN-14 (бывают еще GTIN-8, GTIN-12, GTIN-13, GTIN-14, но в GS1-128 всегда 14)
    (17) префикс, признак того что далее будет срок годности 6-знаков
    211100 сам срок годности
    (10) префикс, признак того что далее будет партионный признак ( до 20 знаков — по документации), если поле с плавающей длинной то по его окончанию будет символ прерыватель (1d hex)
    DU10034 а вот и партия

    21DSLVXW1QCTXG и сам серийный номер

    Что мы (мы, как производитель понимаем из вышесказанного) — для соответствия законодательству нам нужно иметь GTIN и генерировать серийныйе номера, а в штрихкод DATAMATRIX мы можем зашивать, помимо, GTIN и серийника, все что нам может понадобиться для быстрой идентификации данного конкретного товара, позаботьтесь о достаточном объеме данных для упрощения жизни ваших контрагентов

    В соответствии с законодательством на каждый sGTIN мы должны будем получать проверочный код и так разываемый криптохвост и будем платить 0,5 рубля (бэз НДС), те будем загружать эмиссионеру sGTIN + серийный номер и получать на каждую пару проверочный код(для проверки валидности криптохвоста) и криптохвост в кодировке BASE64

    В итоге на штрихкод формата DATAMATRIX мы будем выводить все данные sGTIN с дополнительными атрибутами которые нам нужны для быстрой идентификации продукции, проверочный код (как открытый ключ для проверки валидности криптохвоста) и сам криптохвост

    Пример данных которые мы получили на запрос генерации криптохвостов по нашим sGTIN

    0105713219545693219412271422582 91ee05 92mM7+lsrdUiwT/9gXY70yFoRUnzPPLgJ+XsLPmqFxqso=
    0105713219545693219205265270045 91ee05 921vj5IJqMzTZqskhl0350GwA6FWj4IkB4rRYjjJGR/jc=
    0105713219545693219051677104650 91ee05 92Q6gKx0ctkv4ho/iNAiHqkBYuDVhATSAxLxzxyEWAxDY=
    0105713219545693218760526834148 91ee05 92tZEHHyawvFa2sCtVachqY+mvgHOhoNHF//2xbsdUdas=
    0105713219545693218670039188819 91ee05 9255zim+/pOy3AIJppCB3lmo8+JHXRjSZknQaoxeXaWKM=
    0105713219545693218599100055506 91ee05 92oPjZ1kps2PUvh1zpuuGzJG1bssHlFHn5DGXuzVE6p3Y=