
Универсальный сервис для работы с закупками, позволяющий поставщикам бесплатно искать предложения по всем электронным площадкам России и оформлять тендерное кредитование.
Высокая скорость отклика системы и продуманный интерфейс позволяют участникам торгов легко планировать и организовывать многомиллионные сделки.
Сервис предлагает полезные функции как для поставщиков, так и для заказчиков, в том числе уникальные возможности по поиску внутри файлов закупочной документации и услугу автоматической проверки ГОСТов в документах.
Предыстория проекта
Ранее специалисты DD Planet участвовали в разработке одной из крупных цифровых платформ, предназначенной для привлечения тендерного финансирования или банковских гарантий для участия в торгах.
Запрос клиента
Одна из крупнейших B2B-платформ в сфере государственных и коммерческих закупок объединяет сотни тысяч актуальных предложений, из-за чего поставщикам сложно быстро находить подходящие предложения. Перед нами стояла задача разработать удобный и понятный инструмент поиска, который который упростит навигацию по базе и ускорит подбор релевантных закупок.
Цель проекта
Созданный сервис представляет собой систему аналитических решений для поиска и подбора закупок. Его основная цель - стать быстрым и удобным инструментом для поставщиков, стремящихся к максимальной эффективности при участии в тендерах.
Техническая платформа
1. Поисковой движок
В качестве основной технологии мы выбрали известный поисковой движок Elasticsearch. Его главные преимущества:
- Предоставляет большие возможности горизонтального масштабирования. При увеличении количества пользователей в системе достаточно подключать новые сервера, что исключительно важно для развития smart-сервиса с постоянно растущими нагрузками.
- Работает со всеми типами данных: текстом, числами, гео-координатами, структурированной и неструктурированной информацией.
- Elasticsearch используют многие крупные бренды и проекты: Microsoft, IBM, Cisco, Facebook, GitHub, Stack Overflow, LinkedIn, Ebay, Volkswagen, NewYorkTimes, BBC и др.
- Команда DD Planet обладает опытом по внедрению данного решения — мы использовали его при разработке портала «Мир Квартир» с ежемесячной посещаемостью более 1,5 млн человек.
2. Обработка файлов
Сегодня проект ежедневно обрабатывает около 100 тысяч файлов, и этот объем постоянно увеличивается. Для организации такого объема задач используется технология очередей RabbitMQ, которая отличается надежностью и высокой производительностью.
3. Особенности поиска
Для взаимодействия поискового движка с информацией из обычной реляционной базы данных используется тракт, построенный на основе пакетов MS SQL Server. Это решение обеспечивает высокую скорость передачи данных из файлового хранилища в поисковый движок.
4. Бэкенд и фронтэнд
Для бэкенд-разработки проекта использовались C# и ASP.NET. Их выбор обусловлен значительной экспертизой DD Planet в этих технологиях, накопленной в течение 12 лет использования. Фронтэнд-разработка велась на React.
Функционал для поставщика
Основная функция системы — морфологический поиск по огромной базе закупок. Он позволяет вводить запрос в любой словоформе и искать одновременно до 5 различных наименований.
Искать закупки можно по наименованию товаров, работ и услуг, по названию и ИНН заказчика или поставщика, а также по номеру сделки.

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

Система фильтров позволяет производить поиск по текущим, будущим и завершенным закупкам. Конкуренты сервиса предоставляют поиск только по открытым торгам, однако закрытые и планируемые закупки тоже имеют большое значение для бизнеса.
Используя поиск по закрытым закупкам, поставщик может найти победителей тендеров и договориться о субподряде. Просмотр будущих закупок нужен для подготовки к новым торгам.
Результаты поиска отображаются в формате удобной карточки. Она содержит стоимость закупки, а также долю товара/услуги, по которому производится запрос — в процентах и денежном выражении.

В карточках также отображается присутствие поискового запроса в закупочной документации. Это расширяет поисковые возможности — например, поставщик может искать закупки с авансом.
Внутри каждой карточки содержится вся необходимая информация для участия в тендере — правила участия и проводник по сделке, а также графическое отображение ее этапов.

Функционал для заказчика
Для компаний, размещающих закупки, сервис предлагает две важных функции.\
1. Создание документа «Обоснование начальной (максимальной) цены контракта (НМЦК)» прямо на сайте
Без этого документа участие в тендере невозможно.
Чтобы создать документ по обоснованию НМЦК, достаточно ввести наименование и вид своих товаров, работ или услуг, после чего сервис автоматически рассчитает среднерыночную стоимость, опираясь на данные заключенных контрактов.

2. Автоматическая проверка СНиПов и ГОСТов в документации заказчика
Санитарные нормы и государственные технические стандарты часто меняются, и заказчики не всегда могут уследить за актуальностью своих документов. Сервис автоматически находит несоответствия документации текущей версии СНиПов и ГОСТов, сообщает об этом заказчику и дает рекомендации по корректировкам.
Обновленная технология поиска похожих фраз
В основе этого сопоставления поставщиков и заказчиков лежит установление связи между товарами и услугами поставщика и заказчика.
Для выполнения такого поиска мы использовали ElasticSearch – с его помощью можно организовать поиск по огромным базам данных. Однако он не совсем подходит для сопоставления коротких наименований товаров.
Дело в том, что такой поиск не учитывает синонимы и контекст, в которых употребляются слова. Так, фразы «красное дерево» и «синяя ручка» имеют в себе слова, обозначающие цвет. Но понимаем мы их по-разному: в первом случае говорится о виде древесины, во втором – о цвете туши внутри ручки. При этом во фразе «красная ручка» мы также подразумеваем красную тушь, а значит семантически эта фраза ближе к «синей ручке».
Наше решение предполагает совмещение функций поискового движка ElasticSearch и подходов NLP (Natural Language Processing – обработка естественного языка), направления искусственного интеллекта и математической лингвистики. Благодаря им, мы можем учитывать значения слов в зависимости от их контекста при поиске.
Одна из задач NLP – поиск парафраз. Парафраза – это выражение, которое описанием передает смысл другого выражение. Известный пример такого описания – «пишущий эти строки» вместо «я» или «автор». Использование такого поиска позволяет анализировать текстовое описание товаров у заказчика и сравнивать его с описанием товара у поставщика и наоборот.
Изначально для поиска парафраз мы использовали нейронную сеть BiLSTM, но позднее перешли к более сложной модели – BERT. Подробнее о том, как мы применяем машинное обучение для полнотекстового поиска можно почитать в статьях руководителя группы разработки проекта Юрия Басалова: Как построить полнотекстовый поиск с помощью нейронных сетей и Как с помощью BERT организовать поиск похожих текстов.
Преобразование неструктурированных данных
В базе проекта – структурированные и неструктурированные данные о закупках и предложениях поставщиков. Неструктурированные данные – это приложенные к закупкам документы.
Чтобы повысить точность сопоставления товаров и закупок, мы разработали технологию, которая может учитывать информацию из приложенных документов – текстовых файлов, сканов изображений и счетов фактур.
После извлечения информации из документов мы получаем относительно структурированную информацию о товарах или параметрах контракта – сроках оплаты, наличия аванса и т.д.
Извлечение данных из описания лекарств
Отдельно отметим технологию извлечения данных из документов к закупкам лекарственных средств. В описании лекарств много параметров – состав, дозировки, форма выпуска и т.д. Важно максимально точно сопоставить закупку и описание. Эту задачу мы также решили с помощью машинного обучения.
Для правильного сопоставления мы извлекаем информацию о лекарственных средств из документации. В закупке и описании товара должны быть указаны МНН, название, форма выпуска и дозировка препарата.
Следующий шаг – определение единицы измерения вещества. Она может быть указана, например, в штуках (для таблеток), в миллиграммах, миллилитрах и т.д. Не во всех закупочных документациях этот параметр прописывают явно, поэтому для его определения мы используем простую нейронную сеть. Из документации извлекаем информацию о дозировке и форме выпуска, а нейронная сеть определяет способы хранения препарата и возможные единицы измерения.
Получив информацию о единицах измерения, мы можем рассчитать цену – например, за количество таблеток или за миллиграммы.


Стек технологий
- Elastic Search
- C#
- .Net
- Java
- Python
- MS SQL
- MongoDB
- ClickHouse
- RabbitMQ
- MinIO
- React
- Remix
Архитектура поискового модуля

Источники данных
DS1, DS2, DS3 – FTP источники данных (примерно 100000 XML в день)
Извлечение, обработка, систематизация
Document Recognition Service ML, DS(*) – система распознавания отсканированного текста и таблиц (из Word, Excel, PDF, изображений);
File Processing Bus – распределенный сервис многопоточного скачивания и сохранения файлов;
Data Processing Bus – интеграция с источниками закупок;
Данные получаются через FTP-выгрузки и API. Затем с помощью системы парсинга попадают в БД, а затем – собираются в единое хранилище DWH (объемом ~2 Тб) на сервере MSSQL.
GridFS содержит ~10 миллионов извлеченных текстов и таблиц из файлов PDF, а MongoDB – структурированные данные и тексты из таблиц файлов. Для получения конечной информации используется Machine Learning.
Безопасность
Решение использует КриптоПро и применяет национальные стандарты криптографии для обеспечения защиты и безопасности данных.
Результаты
На сегодняшний день на платформе зарегистрировано более 96 тысяч пользователей, активно работающих с поиском и аналитикой закупок. В системе аккумулируется информация о свыше 30 миллионов тендеров от 400 тысяч заказчиков. Общий объем данных составляет несколько терабайтов и используется как для оперативного поиска, так и для глубокого анализа рынка.
Сервис осуществляет автоматический сбор и обновление данных более чем из 30 открытых источников, включая интернет-магазины, агрегаторы и специализированные порталы в сегменте B2B-закупок. В базе данных хранится информация о сотнях миллионов товарных позиций от миллионов поставщиков, что позволяет формировать точную и детализированную аналитику.
Ежедневно система обрабатывает и добавляет 15–20 тысяч новых закупок, обеспечивая пользователям доступ к актуальным данным и своевременным возможностям для участия в тендерах.
