К содержимому
firstpaint

Кейсы / 02

B2B-каталог программного обеспечения с ИИ-импортом прайсов

Витрина и админ-панель для поставщика ПО юрлицам. Прайс-лист производителя в любом формате превращается в опубликованные карточки товаров с конфигуратором и ценами — модель разбирает структуру, человек проверяет, код отвечает за цифры.

роль
Full-stack, единственный разработчик
срок
5 недель до продакшена
год
2026
формат
B2B-витрина, админка, ИИ-конвейер

задача

Заказчик продаёт организациям программное обеспечение: сертифицированные средства защиты информации, операционные системы, резервное копирование, доступ к веб-сервисам. Ассортимент — тысячи позиций, и у каждого производителя свой прайс: xlsx, PDF, HTML-таблица, а иногда и картинка. У одного продукта бывают десятки вариантов по редакции, сроку, числу пользователей и типу поддержки.

Вручную такой каталог не наполнить и тем более не поддерживать в актуальном состоянии. Цель из ТЗ: максимум работы по ценам, карточкам и SEO-страницам отдать модели, а человеку оставить проверку.

решение

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

Длинные импорты переживают сбои: обработка идёт окнами с контрольными точками, дублирующиеся цепочки задач отсекаются токеном запуска, чтобы не платить за вызов модели дважды, зависшие импорты подхватывает watchdog. Большие прайсы сначала режутся по товарам. Повторная загрузка прайса работает как diff: система показывает, что изменилось, и применяет только это. Текст файлов изолируется от инструкций модели как недоверенные данные — защита от prompt injection через прайс.

Каталог устроен под B2B: лестницы цен по количеству, правила наценки, цены в валюте поставщика с пересчётом в рубли по курсу, разные ставки НДС внутри одного товара, «цена по запросу» как отдельное состояние, обязательные сопутствующие позиции. Покупатель собирает конфигурацию, оформляет заказ с автозаполнением реквизитов по ИНН и скачивает коммерческое предложение в PDF.

Для SEO каждый товар раскрывается на трёх уровнях из одних и тех же данных: продукт с конфигуратором, редакция и посадочная страница под конкретный артикул. Снятый с продажи артикул ещё 90 дней живёт в архивном виде, затем уходит в 301. Поиск понимает артикулы, вставленные с кириллицей вместо латиницы. Изменения отправляются в поисковики через IndexNow и товарный фид.

MCP-сервер

Отдельно поднят MCP-сервер: внешние ИИ-клиенты могут читать и редактировать каталог через 109 инструментов с OAuth-авторизацией. Каждое изменение пишется в журнал, крупные правки оформляются планом с откатом. Это превращает рутину вроде «поправь описания у всей линейки» в задачу на одну реплику, не открывая админку.

результат

Для заказчика это значит: новый прайс производителя попадает на витрину за время проверки, а не за дни ручного набора, цены на сайте всегда совпадают с документом, а правка описаний по всей линейке — одна фраза ИИ-ассистенту.

За пять недель один инженер собрал систему примерно на 150 тысяч строк кода с 2 400 автотестами: витрину, админку на девять разделов прав, конвейер из 16 ИИ-агентов и MCP-сервер. Каталог наполняется из прайсов производителей: оператор проверяет решения модели, а не набирает цены руками.

стек подробно

бэкенд
Laravel, Octane (Swoole), Horizon, Passport (OAuth для MCP), dompdf, OpenSpout
витрина
Серверный рендер на Blade + Alpine.js, PhotoSwipe, marked + DOMPurify — быстрый HTML без SPA
админка
Vue + Inertia, TypeScript, shadcn-vue (Reka UI), Tailwind CSS, TanStack Table, VueUse
данные и поиск
PostgreSQL, Redis (кэш и очереди), Meilisearch через Laravel Scout
ИИ
laravel/ai, OpenRouter (Gemini Flash по умолчанию), переключаемые провайдеры Anthropic, OpenAI, DeepSeek; 16 агентов, журнал всех вызовов, промпты с переопределением на уровне производителя
документы
Docling для разбора PDF и HTML, собственная нормализация xlsx и csv
MCP
laravel/mcp — 109 инструментов на чтение и запись, OAuth, журнал вызовов, планы изменений с откатом
интеграции
DaData (реквизиты по ИНН), Яндекс Wordstat, e-commerce Метрики, YML-фид, IndexNow, imgproxy
инфраструктура
Docker Compose, OpenResty, VPS; деплой одной командой с миграциями, прогревом sitemap и SEO-аудитом релиза
качество
Pest + paratest (≈2 400 тестов), Pint, Laravel Boost

Похожая задача?