AAYMA
RU
Войти

Комплект AI

AI-консультант по каталогу EKT для покупателей: подбор по артикулу, описанию, фото или списку, сравнение цен и остатков, кандидаты на замену, работа…

Доведённый продукт
Команда «Zhigitter» 7💬 0 комментариевс 23 сентября 2026 г.

О проекте

Команда: Zhigitter
Кейс HackAlem.ai: Торговля — Электрокомплект · ekt.kz
Стадия: Доведённый продукт

Задача кейса: AI-консультант по каталогу ekt.kz: товары, аналоги, цены, остатки, корзина

Суть

AI-консультант по каталогу EKT для покупателей: подбор по артикулу, описанию, фото или списку, сравнение цен и остатков, кандидаты на замену, работа с возражениями и подтверждённая корзина с экспортом спецификации.

Как устроено

Точные артикулы разбираются правилами, свободный текст и изображения обрабатывает OpenAI Responses API со структурированными ответами. Для фото мультимодальная модель читает маркировку и сопоставляет её с индексом каталога. Сервер берёт цены, остатки по складам и кратность из API EKT, а суммы считает код, а не модель. Добавление в корзину идёт по цепочке «предложение → повторная проверка цены и наличия → явное подтверждение пользователем». Прямой записи в корзину у AI нет. Импортируются списки из PDF, DOCX, XLSX и фото.

Ключевые решения

  • structured output (JSON Schema)
  • vision product lookup (OCR маркировки)
  • rule-based article parsing
  • analog comparison
  • детекция противоречий в характеристиках
  • signed cart confirmation

Особенности

Прототип развёрнут на Vercel и работает без ключей. Поиск по фото сделан через мультимодальную модель. Сценарии возражений («дорого», «срочно», «подойдёт ли») разобраны отдельно. Найдено противоречие 160/250 А у товара 027228, и такой товар блокируется в корзине. Разработка шла по фазам, по каждой есть отчёт о проверке.

Стек

TypeScript · Next.js 16 · React 19 · Tailwind CSS 4 · Node.js · Vercel

Модели

GPT-4.1-mini · OpenAI multimodal vision model


Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-14404732-zhigitter.

README

README.md

Комплект AI — ИИ-помощник продаж для электротехнического магазина

Закрывает путь от первого запроса до подтверждённой корзины: подбирает товары, сравнивает цены и помогает дожимать клиентов, снимая возражения перед покупкой.

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

  • Дожим клиента в диалоге: работа с возражениями «дорого», «нужно срочно», «подойдёт ли мне?» и подготовка согласования закупки.
  • Компьютерное зрение: поиск по фотографии и маркировке, даже когда покупатель не знает названия товара.
  • Готовый комплект: реальные цены и остатки, варианты со складов, итоговая сумма и спецификация.

Проект команды Zhigitter для HackAlem AI, трек «Торговля», кейс AI-помощника для EKT.

Открыть работающий прототип · Репозиторий · Сценарий выступления

Попробуйте сразу: опубликованная версия работает без регистрации, установки и собственных API-ключей. В демо используется реальный каталог EKT и отдельная корзина прототипа.

1. Проблема и аудитория

Закупщику, монтажнику или менеджеру недостаточно найти похожий электротовар. Нужно сверить характеристики, узнать остаток в своём городе, найти замену отсутствующей позиции, сравнить цены и согласовать покупку. Данные могут быть неполными или противоречивыми, а нужное количество — распределено между складами.

Комплект AI закрывает последовательные задачи продажи: понимает запрос, подбирает товар, сравнивает варианты и помогает преодолеть сомнения перед покупкой. На входе — текст, список или фото; на выходе — проверенный комплект, понятная сумма и корзина после подтверждения клиента.

2. Что реализовано

ВозможностьРезультат для пользователя
Диалог и поискПодбор по артикулу или свободному описанию, выбор города и продолжение диалога с учётом последних сообщений
Уточняющие вопросыЗапрос недостающих параметров для автоматов, дифзащиты и клемм вместо угадывания номинала
КаталогПоиск по выборке из 200 реальных товаров, фотографии и подробные карточки
Данные поставщикаЦены, характеристики, остатки по городам и складам, источник и время проверки
Сравнение в AI-чатеДве цены, разница, остатки и характеристики прямо в ответе; уточнение второго артикула, если он не указан
Отдельная таблица сравненияВыбор двух товаров из чата или каталога и обновление данных перед сравнением
Кандидаты на заменуОбъяснение совпадающих, различающихся и неизвестных параметров
Проверка противоречийПредупреждение о расхождении номинального тока в названии/описании и характеристиках
КомплектацияМестный остаток, доступная часть заказа или сочетание складов; сумма и готовность комплекта
Поиск по фото — CVЧтение маркировки и видимых признаков, сопоставление с каталогом, выбор кандидата пользователем
Импорт спискаPDF, DOCX, XLSX, TXT/CSV и фото списка; проверка распознанных строк перед подбором
Дожим клиента в диалогеОтработка возражений «Дорого», «Нужно срочно», «Подойдёт ли мне?» и подготовка согласования закупки — помощь в переходе от сомнений к решению
Условия покупкиОтветы об оплате и доставке; кратность продажи из API
КорзинаПредложение, повторная проверка цены и наличия, явное подтверждение, сохранение и ссылка на корзину
ЭкспортКопирование спецификации и скачивание CSV из подтверждённой корзины
Интерфейс и языкиКомпьютер и мобильный экран, собственный аватар «Контакт», русский и базовая поддержка казахского

Компьютерное зрение: от фотографии к товару

Комплект AI использует компьютерное зрение (Computer Vision, CV): покупатель может сфотографировать электротовар, даже если не знает его названия. Мультимодальная модель OpenAI анализирует изображение, читает маркировку и выделяет видимые признаки. Помощник сопоставляет результат с каталогом EKT и предлагает подходящих кандидатов с реальными ценами и остатками.

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

Как помощник может дожимать клиентов

Помощник работает с причиной, по которой клиент откладывает покупку:

  • «Дорого» → ищет доступных кандидатов с более низкой ценой и показывает, что нужно проверить перед заменой.
  • «Нужно срочно» → проверяет остаток в выбранном городе и помогает выбрать местный вариант комплектации.
  • «Нужно согласовать» → готовит текст для руководителя с товаром, количеством, суммой и источником.
  • «Подойдёт ли мне?» → помогает сформулировать запрос на проверку совместимости для менеджера.

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

3. Как работает решение

  1. Вход: покупатель выбирает город и пишет запрос, например «Нужны 10 штук 027024 в Алматы», загружает список или фото.
  2. Разбор: точные артикулы обрабатываются правилами; для свободного текста и распознавания используется AI. При недостатке параметров помощник задаёт вопросы. Распознанный список сначала проверяет пользователь.
  3. Проверка: сервер сопоставляет товары с индексом и получает подробные данные EKT. Цены и остатки приходят из API, суммы рассчитывает код.
  4. Выбор: пользователь сравнивает цены и характеристики, рассматривает кандидатов на замену и варианты комплектации. Неподтверждённые параметры показаны явно.
  5. Подтверждение: «Проверить и добавить» формирует предложение. Пользователь проверяет состав и предупреждения; сервер повторно проверяет цену, остатки и кратность.
  6. Результат: подтверждённая корзина доступна по ссылке. Её можно открыть повторно в этом браузере, скопировать как спецификацию или выгрузить в CSV.

Обычный текст запроса, загрузка файла или сравнение товаров сами по себе не меняют корзину.

4. Особенности и преимущества

  • Проверяемые факты. У товара есть источник и время проверки. Модель не генерирует цены и складские остатки.
  • От запроса к готовому комплекту. При нехватке местного остатка помощник предлагает доступные варианты комплектации, чтобы покупатель мог продолжить закупку.
  • Объяснимое сравнение. Более низкая цена не объявляется доказательством совместимости. Различия и неизвестные свойства показаны отдельно.
  • Работа с ошибками каталога. Например, у 027228 обнаруживается конфликт 160/250 А; такой товар нельзя подтвердить в корзине до устранения противоречия.
  • Дожим через работу с возражениями. Помощник отвечает на сомнения по цене, срочности и применимости, готовит согласование и помогает перейти к подтверждению покупки.
  • Готовый результат для бизнеса. Текст для согласования, спецификация и CSV можно передать руководителю или менеджеру.
  • Контроль пользователя. Изменения корзины требуют подтверждения; AI не имеет инструмента прямой записи в неё.
  • Устойчивость типовых запросов. Точный поиск и сравнение по артикулам не зависят от ответа модели. Для свободных запросов предусмотрен ограниченный повтор при временной ошибке или неполном структурированном ответе.

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

5. Технологии

СлойТехнологии и назначение
ЯзыкиTypeScript; JavaScript для скриптов и тестов; CSS
ПриложениеNext.js 16.3.6, App Router, серверные Route Handlers
ИнтерфейсReact 19.3.0, Tailwind CSS 4, собственные CSS-стили, Lucide
Среда выполненияNode.js; разработка и проверки выполнялись на 24.14.1
AIOpenAI Responses API через серверный fetch, структурированные ответы по JSON Schema
Диалог и спискиПо умолчанию gpt-4.1-mini, переменная OPENAI_MODEL
Поиск по фотоПо умолчанию gpt-4.1, переменная OPENAI_VISION_MODEL
Файлыsharp — изображения; pdf-lib — проверка PDF; yauzl и fast-xml-parser — извлечение текста DOCX/XLSX
Корзинаnode:crypto, HMAC-SHA256, подписанные предложения и cookies
Проверкиnode:test, ESLint, TypeScript, скрипты проверки API и браузерные проверки
Хостинг и кодVercel, GitHub

Supabase и NVIDIA API в текущей реализации не используются. Отдельной базы данных нет: индекс каталога хранится в JSON, корзина — в подписанных cookies.

6. Архитектура проекта

flowchart TD
    UI["Браузер: чат, каталог, фото и списки"] --> CHAT["/api/chat: разбор запроса"]
    UI --> FILES["/api/attachments: чтение вложений"]
    FILES --> AI["OpenAI Responses API"]
    AI --> FILES
    FILES --> REVIEW["Пользователь проверяет распознанные строки"]
    REVIEW --> CHAT
    CHAT --> RULES["Правила, точный поиск, уточнения"]
    CHAT --> AI
    AI --> VALIDATE["Проверка ID и структуры ответа"]
    VALIDATE --> CATALOG["Индекс каталога и API EKT"]
    RULES --> CATALOG
    CATALOG --> RESULT["Карточки, сравнение и варианты комплекта"]
    RESULT --> QUOTE["/api/cart/quote: подписанное предложение"]
    QUOTE --> CONFIRM["Явное подтверждение пользователя"]
    CONFIRM --> CHECK["/api/cart/confirm: повторная проверка EKT"]
    CHECK --> CART["Корзина в подписанных cookies"]
    CART --> EXPORT["/cart, спецификация и CSV"]

Роль AI: понять свободный запрос, извлечь сведения из файла или фото и предложить ID из доступной выборки. Роль серверного кода: проверить ID, получить факты EKT, рассчитать суммы, сопоставить параметры и контролировать корзину.

Основные компоненты

src/
  app/                  Страницы, стили и серверные маршруты API
    api/chat/           Ответы помощника
    api/catalog/        Поиск и подробные карточки
    api/attachments/    Фото и списки закупки
    api/cart/           Предложения, подтверждение, чтение и экспорт
    cart/               Страница корзины
  components/           Чат, каталог, сравнение, вложения и панель комплекта
  lib/
    assistant/          AI-разбор, уточнения, факты и помощь с покупкой
    catalog/            Нормализация данных и клиент API EKT
    attachments/        Чтение файлов и сопоставление артикулов
    cart/               Распределение по складам, проверки, подписи и экспорт
data/catalog-index.json Снимок выборки из 200 товаров
scripts/                Синхронизация и интеграционные проверки
tests/                  Автоматические тесты и тестовые DOCX/XLSX
docs/                   Аудит требований, проверки и сценарий демо
.env.example            Шаблон серверных настроек без секретов

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

7. Установка и запуск

Требования

  • Git, npm и Node.js 24 — рекомендуемая проверенная среда; в package.json указан минимум Node.js 22.
  • Для полного локального сценария: ключ OpenAI, доступ к API EKT от организаторов/партнёра и секрет подписи корзины.
  • Для проверки опубликованного сайта эти настройки не нужны.

Шаг 1. Получить код и установить зависимости

git clone https://github.com/BAITC-Hacks/hack-14404732-zhigitter.git
cd hack-14404732-zhigitter
npm ci

Шаг 2. Создать настройки

PowerShell:

Copy-Item .env.example .env.local

macOS / Linux:

cp .env.example .env.local

Заполните .env.local:

ПеременнаяЗначение
OPENAI_API_KEYВаш серверный API-ключ OpenAI
OPENAI_MODELgpt-4.1-mini по умолчанию
OPENAI_VISION_MODELgpt-4.1 по умолчанию
EKT_API_BASE_URLhttps://ekt.kz/api
EKT_API_USERNAMEЛогин API, выданный партнёром
EKT_API_PASSWORDПароль API, выданный партнёром
CART_SIGNING_SECRETСлучайный секрет длиной не менее 32 символов

Создать случайное значение для CART_SIGNING_SECRET:

node -e "console.log(require('node:crypto').randomBytes(32).toString('hex'))"

Скопируйте результат в соответствующую переменную. .env.local исключён из Git и загрузки исходников в Vercel. Секреты не должны иметь префикс NEXT_PUBLIC_.

Шаг 3. Проверить настройки и запустить

npm run env:check
npm run dev

Откройте http://127.0.0.1:3000. Enter отправляет сообщение, Shift + Enter добавляет строку. Кнопки стартовых примеров заполняют поле запроса.

env:check проверяет наличие переменных и длину секрета, но не валидность доступов. Без ключей можно открыть интерфейс и поиск по сохранённому индексу; живые карточки и полноценный сценарий требуют настроенных интеграций.

Сборка и размещение

npm run build
npm start

Для Vercel: пресет Next.js, корень репозитория, сборка npm run build; серверные переменные добавляются в настройках проекта. Текущая публикация выполнена через Vercel CLI. Автоматическая публикация при push не подключена. Команда для уже привязанного проекта:

npx vercel deploy --prod

8. Как жюри проверить решение

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

ШагДействиеОжидаемый результат
1. ПодборНаписать Нужны 10 штук 027024 в АлматыКарточка с ценой и остатками; панель комплекта с доступными вариантами. При нехватке местного остатка — частичный вариант или сочетание складов
2. СравнениеНаписать Сравни цены 027024 и 027228Две цены и разница в сообщении, таблица характеристик и предупреждение о 160/250 А, пока расхождение есть в API. Ранее выбранный комплект сохраняется
3. СогласованиеНаписать Нужны 2 штуки 027024 в Алматы, нажать «Согласовать закупку»Копируемый черновик с товаром, количеством, ценой и источником; автоматической отправки нет
4. КорзинаВыбрать доступный вариант → «Проверить и добавить» → проверить и подтвердить предложениеТолько после подтверждения состав сохраняется. При изменении наличия или цены потребуется новое предложение
5. РезультатОткрыть корзину, перезагрузить страницу, скопировать спецификацию или скачать CSVСостав сохраняется в этом браузере; экспорт содержит подтверждённые позиции

Дополнительные проверки:

  • Аналог: Нужен 007886 Legrand. Если его нет, предложи аналог и объясни различия. Кандидаты зависят от наличия; полная совместимость не гарантируется.
  • Уточнение: Нужен автомат для квартиры, затем 40 А, 3P, 2 штуки.
  • Word/Excel: загрузите order.docx или order.xlsx через «Загрузить список». Проверьте строки 027024 — 2 и 221-413 — 3 перед подбором.
  • CV: через «Найти по фото» загрузите чёткое фото маркировки электротовара. Сверьте код и выберите кандидата; по внешнему виду точная модель не гарантируется.
  • Казахский: Алматыда 027024 бар ма? — базовый ответ на казахском; карточки и часть интерфейса останутся на русском.

Автоматические проверки

npm test
npm run lint
npm run typecheck
npm run build

При запущенном приложении и настроенных интеграциях, из корня проекта:

node scripts/verify-chat-comparison.mjs
node scripts/verify-phase7.mjs
node scripts/verify-cart.mjs

По умолчанию используется http://127.0.0.1:3000. Для проверки опубликованной версии задайте VERIFY_BASE_URL, например в PowerShell:

$env:VERIFY_BASE_URL = 'https://komplekt-ai-zhigitter.vercel.app'
node scripts/verify-chat-comparison.mjs

Проверки с распознаванием вызывают OpenAI и расходуют API-кредиты. Тест корзины использует отдельную сессию прототипа и не создаёт заказ в EKT. Дополнительные сценарии: scripts/verify-phase6.mjs и scripts/verify-attachments.mjs.

Зафиксированный результат на 23.09.2026: 61 автоматический тест, ESLint, TypeScript и сборка прошли; опубликованная версия прошла 26 проверок сравнения, функций фазы 7 и корзины. Это результаты проверенных сценариев, а не измерение точности AI на всех запросах. Подробности — отчёт о проверке.

9. Данные и интеграции

ИсточникИспользование
API EKT: GET /api/products?page=…Индекс поиска: первые 10 страниц, до 200 товаров
API EKT: GET /api/products/detail?id=…Подробности, цены, характеристики и остатки; серверная Basic Auth
Изображения и карточки EKTФото и ссылки из полей API; для недоступного изображения предусмотрена заглушка
Условия оплаты и доставки EKTПодготовленные ответы по странице, проверенной 23.09.2026; условия не перечитываются при каждом сообщении
OpenAI Responses APIПонимание свободного запроса, чтение маркировки и извлечение строк
VercelПубличный интерфейс и серверные маршруты приложения

Поиск работает по сохранённому индексу. Подробные карточки получаются через API с серверным кешем до 30 секунд; сравнение и подтверждение корзины запрашивают свежие данные. Общий остаток API и городской остаток показываются отдельно: технические склады исключаются из расчёта доступных вариантов.

Обновить индекс при наличии доступов EKT:

npm run catalog:sync

Команда перезапишет data/catalog-index.json. После обновления требуется новая сборка и публикация.

Обработка данных пользователя. Свободный текст и распознаваемое содержимое файлов передаются OpenAI с store:false; это не означает гарантированного нулевого хранения у провайдера. Приложение не сохраняет загрузки в постоянное файловое хранилище. Тексты файлов рассматриваются как данные, результат проверяется по схеме и каталогу. Платёжные данные для работы прототипа не нужны.

10. Границы прототипа и дальнейшее развитие

  • Масштаб демо: 200 товаров, до четырёх позиций за подбор. Следующий шаг — полный каталог и большие спецификации.
  • Внедрение в магазин: сейчас работает корзина прототипа без реального заказа, оплаты и резерва EKT. Подключение к магазину и CRM требует доступов партнёра. Дожим реализован в текущем диалоге; черновики пользователь отправляет сам, автоматических рассылок и скидок нет.
  • Проверка данных: распознанные позиции и совместимость требуют проверки. Сертификаты показываются при наличии ссылок в API; в текущей выборке их нет. Минимальная сумма заказа, сроки и стоимость конкретной доставки не подтверждены.
  • История и языки: корзина сохраняется в текущем браузере на 7 дней, чат — на время работы вкладки. Базовая поддержка казахского есть; полная локализация и история между устройствами — следующие шаги.
Технические границы и лимиты файлов

Корзина ограничена 12 строками; авторизации и постоянной истории нет. Чат сбрасывается при перезагрузке или переходе на отдельную страницу корзины. Между вкладками нет серверной транзакции: последний ответ может заменить cookie. Для промышленного внедрения нужны база данных и атомарные операции.

Сопоставление охватывает ограниченный набор параметров, автоматическая проверка противоречий — номинальный ток. Количество заказа по фото товара не назначается автоматически. Отсутствие товара в выборке не означает его отсутствия у EKT; кратность продажи не равна минимальной сумме заказа.

Скорость и доступность зависят от OpenAI и EKT. Проверки входных данных, подписей и отдельные тесты инъекций не заменяют аудит безопасности; ограничитель частоты работает в памяти серверного экземпляра. Карточки, таблицы и часть готовых ответов пока на русском.

Ограничения файлов

ФорматЛимиты
JPEG, PNG, WebPДо 15 МБ исходного фото в браузере; уменьшение до 1800 px. Сервер принимает до 3 МБ после подготовки и проверяет изображение
PDFДо 3 МБ и 5 страниц; без пароля
DOCX, XLSXДо 3 МБ; распакованные данные до 8 МБ и 500 ZIP-записей; до 5 листов Excel, 1000 строк и 16 000 символов текста
TXT, CSVUTF-8, до 16 000 символов, общий серверный лимит файла 3 МБ

Из списка извлекается до четырёх позиций с проверкой пользователем. Старые DOC/XLS нужно пересохранить в DOCX/XLSX. Формулы XLSX не исполняются: требуется копия со значениями. Внешние XML-сущности запрещены; макросы и вложенные программы не выполняются.

11. Материалы и статус проекта

Фазы 1–7 реализованы в объёме прототипа. Готовы опубликованное приложение, воспроизводимые проверки и сценарий демонстрации.

12. Опубликованная версия

https://komplekt-ai-zhigitter.vercel.app

Открывается без входа в Vercel. Для начала проверки введите: «Нужны 10 штук 027024 в Алматы».

Звёзды
⭐ 0
Форки
0
Язык
TypeScript
Последний push
в прошлом месяце
Коммиты
21
Авторы
2
Файлы
99
Ветки
1

Авторы коммитов

wasikaly 16wasikaly 5

История коммитов

  • 2026-09-23 17:46docs: update README opening with sales assistant positioningwasikaly
  • 2026-09-23 17:38docs: explain computer vision product discoverywasikaly
  • 2026-09-23 17:38docs: strengthen sales positioning and streamline prototype limitswasikaly
  • 2026-09-23 17:30docs: rewrite Russian README for HackAlem jurywasikaly
  • 2026-09-23 17:20docs: record final chat comparison deployment and acceptance checkswasikaly
  • 2026-09-23 17:19feat: compare live prices inside assistant chat and prepare final demowasikaly
  • 2026-09-23 17:12docs: record phase 7 production verificationwasikaly
  • 2026-09-23 17:10feat: harden assistant and add guided purchasing with refreshed storefrontwasikaly
Все коммиты (21)
  • 2026-09-23 16:42docs: record phase 6 production verificationwasikaly
  • 2026-09-23 16:40feat: add guided product selection, price comparison and phase 6 UI polishwasikaly
  • 2026-09-23 16:15fix: show catalog names for recognized list codes and record verificationwasikaly
  • 2026-09-23 16:13feat: add vision product lookup, reviewed list import and specification exportwasikaly
  • 2026-09-23 15:46docs: record successful production cart verificationwasikaly
  • 2026-09-23 15:44feat: add confirmed procurement cart and improve responsive interfacewasikaly
  • 2026-09-23 15:22docs: record successful phase 3 production verificationwasikaly
  • 2026-09-23 15:20feat: add grounded AI chat and product comparisonwasikaly
  • 2026-09-23 14:52docs: record phase 2 deployment attribution blockerwasikaly
  • 2026-09-23 14:49feat: connect EKT catalog search and live product stockwasikaly
  • 2026-09-23 14:30docs: record phase-one deployment and verificationwasikaly
  • 2026-09-23 14:29feat: scaffold procurement assistant and secure phase-one setupwasikaly
  • 2026-09-23 13:54docs: add project concept and implementation planwasikaly
Структура репозитория (99 файлов)
.env.example
.gitignore
.vercelignore
AGENTS.md
CLAUDE.md
README.md
data/catalog-index.json
docs/DEMO_SCRIPT.md
docs/MUST_HAVE_AUDIT.md
docs/PHASE3_VERIFICATION.md
docs/PHASE4_VERIFICATION.md
docs/PHASE5_VERIFICATION.md
docs/PHASE6_VERIFICATION.md
docs/PHASE7_VERIFICATION.md
docs/PHASES.md
docs/PROJECT_PLAN.md
eslint.config.mjs
next-env.d.ts
next.config.ts
package-lock.json
package.json
postcss.config.mjs
scripts/check-env.mjs
scripts/sync-catalog.mjs
scripts/verify-attachments.mjs
scripts/verify-cart.mjs
scripts/verify-chat-comparison.mjs
scripts/verify-phase6.mjs
scripts/verify-phase7.mjs
src/app/api/attachments/route.ts
src/app/api/cart/confirm/route.ts
src/app/api/cart/export/route.ts
src/app/api/cart/quote/route.ts
src/app/api/cart/route.ts
src/app/api/catalog/[id]/route.ts
src/app/api/catalog/route.ts
src/app/api/chat/route.ts
src/app/api/health/route.ts
src/app/attachments.css
src/app/cart.css
src/app/cart/page.tsx
src/app/comparison.css
src/app/globals.css
src/app/icon.svg
src/app/layout.tsx
src/app/page.tsx
src/app/phase6-polish.css
src/app/phase7-storefront.css
src/app/sales-help.css
src/components/assistant-avatar.tsx
src/components/assistant-chat.tsx
src/components/attachment-dialog.tsx
src/components/cart-confirmation.tsx
src/components/cart-page.tsx
src/components/catalog-browser.tsx
src/components/procurement-workspace.tsx
src/components/product-comparison.tsx
src/components/proposal-panel.tsx
src/components/sales-help.tsx
src/lib/assistant/chat-comparison.ts
src/lib/assistant/clarification.ts
src/lib/assistant/direct-selection.ts
src/lib/assistant/facts.ts
src/lib/assistant/openai.ts
src/lib/assistant/price-comparison.ts
src/lib/assistant/responses.ts
src/lib/assistant/sales-help.ts
src/lib/assistant/server.ts
src/lib/assistant/terms.ts
src/lib/assistant/types.ts
src/lib/assistant/validation.ts
src/lib/attachments/import-matching.ts
src/lib/attachments/matching.ts
src/lib/attachments/office.ts
src/lib/attachments/server.ts
src/lib/attachments/types.ts
src/lib/attachments/validation.ts
src/lib/cart/core.ts
src/lib/cart/export.ts
src/lib/cart/options.ts
src/lib/cart/server.ts
src/lib/cart/signing.ts
src/lib/cart/types.ts
src/lib/catalog/normalize.ts
src/lib/catalog/server.ts
src/lib/catalog/types.ts
tests/assistant.test.mjs
tests/attachments.test.mjs
tests/cart.test.mjs
tests/catalog.test.mjs
tests/chat-comparison.test.mjs
tests/fixtures/entity.docx
tests/fixtures/formula.xlsx
tests/fixtures/order.docx
tests/fixtures/order.xlsx
tests/fixtures/oversized.docx
tests/phase6.test.mjs
tests/phase7.test.mjs
tsconfig.json

Обсуждение 0 комментариев

Войдите, чтобы комментировать

Пока нет комментариев — будьте первым.