AAYMA
RU
Войти

QOR ai

Объяснимый помощник закупщика для Электрокомплекта: по истории продаж, остаткам и поставкам в пути рассчитывает заказ поставщику, показывает «Почему…

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

О проекте

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

Задача кейса: Автоматический расчёт заказов поставщикам для пополнения склада, с утверждением менеджером

Суть

Объяснимый помощник закупщика для Электрокомплекта: по истории продаж, остаткам и поставкам в пути рассчитывает заказ поставщику, показывает «Почему так?», позволяет проверить сценарий «что если», утвердить заказ менеджером и выгрузить CSV. Есть импорт XLSX из 1С и интерактивный 3D-склад.

Как устроено

Статистический модуль на Python считает потребность как прогноз на горизонт плюс страховой запас минус свободный остаток минус своевременные поставки в пути. Результат округляется до минимальной партии и кратности. История очищается от разовых крупных покупок через медиану и MAD, есть компенсация упущенного спроса при отсутствии товара и сезонные поправки. LLM (OpenAI или NVIDIA через адаптер, json_schema) только превращает фразу в параметры сценария и объясняет готовый расчёт, а сервер проверяет параметры и коды факторов. Утверждение заказа остаётся ручным.

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

  • формула пополнения со страховым запасом
  • MOQ и кратность
  • median/MAD очистка выбросов
  • компенсация упущенного спроса
  • сезонность
  • what-if сценарии
  • JSON schema output

Особенности

Публичный HTTPS-деплой. Количество к заказу считает только статистический модуль, а LLM лишь разбирает сценарии и объясняет расчёт. Неизвестный остаток не превращается в ноль. Сделан файловый обмен с 1С (шесть XLSX поставщика), а передача реальных коммерческих данных внешнему ИИ по умолчанию выключена.

Стек

Python · FastAPI · SQLite · React · TypeScript · Vite · Caddy · Docker Compose · Playwright · pytest

Модели

OpenAI · NVIDIA API


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

README

README.md

Демо для жюри — публичный сайт QOR ai

Проверить проект онлайн
Нажмите кнопку ниже, чтобы перейти на публичный сайт QOR ai.

Открыть QOR ai — перейти к публичному демо

https://qor.152.70.57.1.sslip.io
Публичный HTTPS · готовые frontend и backend · серверный расчёт на синтетических данных
Для просмотра сайта не нужно устанавливать проект на компьютер.

Быстрая проверка: выберите режим API и набор demo-engine-v1 → откройте рекомендации → посмотрите объяснение количества → проверьте сценарий → утвердите заказ и скачайте CSV. Подробный сценарий проверки →

Логотип QOR ai

QOR ai — закупки с объяснением. Что купить, сколько и почему. Команда Samgau, HackAlem AI.

Объяснимый помощник закупщика
От истории продаж и остатков - к обоснованному заказу поставщику.

Открыть демо для жюри · Идея · Возможности · Искусственный интеллект · Запуск · Технологии · Документация

React + TypeScript   FastAPI + Python   SQLite   OpenAI / NVIDIA

Статус: MVP. React подключён к FastAPI через Bearer-сессию. Реализованы расчёт, интерактивный 3D-склад, импорт исходных XLSX и выгрузка утверждённого CSV. Общий Docker Compose собирает React + FastAPI + Caddy. Публичный HTTPS и загрузка серверного расчёта в браузере проверены 23.09.2026. OpenAI настроен на сервере; настоящий вызов при развёртывании не проверялся. Совместимость CSV с обработкой конкретной базы 1С требует отдельной проверки. Файловый обмен и запуск → · План и критерии интеграции →

01 — Идея проекта

QOR ai помогает закупщикам и специалистам по управлению запасами понять, какие товары пора заказать, в каком количестве и на основании каких данных. Проект команды Samgau создан для кейса ТОО «Электрокомплект» на HackAlem AI.

Когда расчёты собирают вручную из нескольких Excel, склад легко оказывается между двумя проблемами: нужный товар закончился, а лишний занимает место и замораживает деньги. Разовая крупная покупка искажает средние продажи. Отсутствие товара скрывает спрос: продали ноль, хотя купить хотели.

Ситуация закупщикаКак помогает QOR ai
Один клиент купил необычно многоОтделяет разовую часть покупки от регулярной потребности; клиентский анализ возможен при наличии обезличенного ID
Товар отсутствовал, поэтому продажи упалиОценивает упущенный спрос при известных интервалах отсутствия
Часть товара уже заказанаУчитывает количество в пути и даты поступления
Спрос меняется по сезонам или растётПрименяет сезонность и поправку на изменение спроса
Нужно объяснить закупку руководителюПоказывает формулу, факторы, источники и предупреждения по позиции

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

02 — Возможности

Обзор склада
Показатели, интерактивный 3D-склад, графики продаж и прогноз запаса помогают выбрать позиции для проверки.
План закупок
Рекомендации по товарам и поставщикам, поиск, фильтры риска и качества данных.
Паспорт решения
Формула заказа, история, факторы и ограничения — рядом с рассчитанным количеством.
«Что, если…»
Проверка задержки поставки или изменения спроса с новым расчётом и сравнением.
Проверка данных
Пропуски и неопределённость показываются явно: неизвестный остаток не превращается в ноль.
Проверка и выгрузка заказа
Менеджер корректирует количество с причиной, утверждает черновик и выгружает CSV.

Экраны работают с API: отдельный расчёт для каждого поставщика, реальные партии для сценария, проверка предупреждений и утверждённый CSV. Раздел «Обмен с 1С» принимает шесть XLSX одного поставщика и необязательный inventory.csv. Формат, ограничения данных и проверка совместимости описаны в документации обмена.

Пользовательский путь:

  1. Выбрать серверный синтетический набор или загрузить данные компании в разделе «Обмен с 1С».
  2. Выбрать поставщика и дату расчёта.
  3. Открыть рекомендации и проверить проблемные позиции.
  4. Посмотреть «Почему так?» — какие данные повлияли на количество.
  5. При необходимости проверить сценарий задержки или роста спроса.
  6. Проверить заказ, обосновать ручные изменения, утвердить и скачать CSV.

Заказ поставщику автоматически не отправляется. Финальное решение принимает ответственный сотрудник.

Как рассчитывается количество

Предварительная потребность:

Прогноз на горизонт + страховой запас
− свободный остаток − своевременные поставки в пути

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

Например: 210 + 70 − 80 − 50 = 150. При кратности 12 рекомендуемый заказ — 156 штук. Если партия 50 штук приедет за пределами горизонта, результат после округления — 204 штуки. Это контрольный пример, а не измеренный результат экономии компании.

Текущий алгоритм очистки использует медиану и медианное абсолютное отклонение (MAD), с проверками достаточности истории и повторяемости крупных покупок. Компенсация отсутствия товара и сезонные поправки выполняются в Python. Подробности: движок расчёта.

03 — ИИ для закупщика

ИИ помогает работать с результатом на обычном языке. В проекте подготовлены три функции:

ФункцияПример запросаПольза клиенту
Разбор сценария«Задержи выбранную поставку на неделю, спрос вырастет на 20%»Превращает фразу в параметры для проверки и подтверждения
Объяснение рекомендации«Почему предложено столько заказать?»Выделяет подтверждённые факторы уже выполненного расчёта
Помощник по интерфейсу«Где выгрузить заказ?»Подсказывает следующий шаг и помогает ориентироваться в текущем экране

Количество рассчитывает статистический модуль. Модель не назначает объём закупки самостоятельно. Сервер проверяет распознанные параметры и коды факторов; применение сценария и утверждение заказа остаются отдельными действиями пользователя.

Подключение: OpenAI либо NVIDIA через серверный адаптер.Конкретная модель задаётся настройками команды. При недоступности провайдера показывается явно обозначенная справка или расчётное объяснение — такой ответ не выдаётся за результат ИИ.

Настройка настоящего ИИ

В корневом .env:

AI_PROVIDER=openai
OPENAI_API_KEY=ваш_ключ
OPENAI_MODEL=идентификатор_доступной_модели
AI_RESPONSE_FORMAT=json_schema
ALLOW_REAL_AI=false

Для NVIDIA используются NVIDIA_API_KEY, NVIDIA_MODEL, NVIDIA_BASE_URL и AI_PROVIDER=nvidia. Общие AI_API_KEY, AI_MODEL, AI_BASE_URL, если заполнены, имеют приоритет. Формат ответа должен поддерживаться выбранной моделью.

Перезапустите backend и выполните scripts/ai_smoke.py при работающем сервере. Также проверьте чат через интерфейс. Успешная конфигурация не заменяет успешный сетевой вызов.

Ключи хранятся только на сервере, не попадают в Git и переменные VITE_*. Передача реальных коммерческих данных внешнему ИИ по умолчанию отключена; разрешение определяет владелец данных. Документация помощника →

04 — Запуск и проверка

Нужны Python 3.12, Node.js 22 и Git. Для Docker-сценария — Docker Engine/поддерживаемый Docker Desktop и Compose v2. Ключ ИИ для синтетического демо не нужен.

git clone https://github.com/BAITC-Hacks/hack-7ccada8c-samgau.git
cd hack-7ccada8c-samgau

Посмотреть интерфейс

cd frontend
npm ci
npm run dev

Откройте http://localhost:5173 и выберите режим API для работы с сервером. В Vite можно явно задать VITE_DATA_MODE=api в frontend/.env.local. Для просмотра без backend выберите локальное демо: 12 синтетических товаров, два поставщика; демо-черновики живут в памяти вкладки.

Запустить серверный расчёт

В другом терминале, из корня репозитория:

Linux / macOS

python3.12 -m venv .venv
.venv/bin/python -m pip install -r backend/requirements-dev.lock -r backend/requirements-engine.txt
cp .env.example .env
.venv/bin/python run.py

Windows, PowerShell или cmd

py -3.12 -m venv .venv
.venv\Scripts\python.exe -m pip install -r backend/requirements-dev.lock -r backend/requirements-engine.txt
copy .env.example .env
.venv\Scripts\python.exe run.py

Откройте http://127.0.0.1:8000/api/docs. Серверный набор demo-engine-v1 содержит 8 синтетических товаров и использует движок qor-mvp-1.0. Это отдельный набор от локального UI-демо.

UI и API используют общую Bearer-сессию. При локальной разработке Vite перенаправляет /api в backend. Серверные наборы и расчёты отличаются от локального демо. Неизвестный остаток и блокировки качества нельзя превращать в утверждённый заказ.

Проверить решение

При работающем backend, из корня:

.venv/bin/python scripts/smoke.py
.venv/bin/python -m pytest

На Windows используйте .venv\Scripts\python.exe. Дополнительная проверка ИИ после настройки ключа:

.venv/bin/python scripts/ai_smoke.py --url http://127.0.0.1:8000

Проверки frontend, из frontend/:

npm test
npm run build

Сценарий для жюри: открыть режим API и demo-engine-v1 → выбрать 00001 (156) → задержать выбранную поставку на 30 дней (204) → вернуть исходный расчёт → изменить заказ на 168 с причиной → явно подтвердить предупреждения → утвердить и скачать CSV с количеством 168. Для 00007 проверить 2 бухты по 305 м, для 00008 — блокировку заказа. Серверный путь проверяется через scripts/smoke.py и Swagger.

Docker и публикация

Из корня репозитория:

cp .env.example .env
docker compose up --build -d

На Windows: copy .env.example .env. Корневой Compose собирает React + FastAPI + Caddy на http://localhost:8080. Caddy обслуживает React и проксирует /api; база и загрузки сохраняются в томе qor_data. По умолчанию импорт API защищён ключом (IMPORT_ACCESS=admin). Для разрешённой владельцем загрузки из интерфейса без ручного ключа предусмотрен IMPORT_ACCESS=session.

Отдельный UI-контейнер:

docker compose -f frontend/compose.yaml up --build -d

Он также использует порт 8080. Не запускайте оба web-контейнера одновременно на одном порту. Остановка соответствующего Compose: docker compose down с тем же -f, если он использовался. Флаг -v удаляет тома — для обычного перезапуска он не нужен.

Для публичного HTTPS задайте домен в SITE_ADDRESS, HTTP_PORT=80, HTTPS_PORT=443, направьте DNS на сервер и откройте эти порты. Публичная версия для жюри: открыть QOR ai. Обмен, запуск и публикация →

05 — Технологии и данные

Часть проектаТехнологииНазначение
ИнтерфейсReact 19, TypeScript, Vite 6, Recharts, LucideРабочее место закупщика, графики и карточки
APIPython 3.12, FastAPI, PydanticПроверка запросов, сессии, расчёты и заказы
Расчёт и импортPython, openpyxlЧтение выгрузок и объяснимый статистический расчёт
ХранениеSQLite и файлы импортаНаборы, расчёты, версии черновиков
ИИHTTP-адаптер OpenAI / NVIDIAСценарии, объяснение, помощник
РазвёртываниеDocker Compose, Caddy; отдельный UI-образ с NginxУпаковка приложения и обслуживание web
Проверкиpytest, Vitest, smoke-скриптыКонтракты, алгоритм и воспроизводимые сценарии

Архитектура приложения:

flowchart TD
  UI["React: рабочее место закупщика"] --> API["FastAPI: единый API"]
  XLSX["Excel: продажи, остатки, поставки"] --> IMP["Импорт и проверка данных"]
  IMP --> DB["SQLite и файлы"]
  API --> ENG["Прогноз и расчёт заказа"]
  ENG --> DB
  API --> AI["ИИ: сценарии и пояснения"]
  API --> ORDER["Проверка и утверждение человеком"]
  ORDER --> CSV["CSV заказа"]

Источники: предоставленные наборы IEK и Systeme Electric — динамика продаж, месячные продажи и остатки, товары в пути, сезонность, MOQ/кратность. Импортеры и синтетические примеры находятся в backend/app/importers/. Демо не содержит сведения о реальных клиентах.

Границы текущей версии:

  • В предоставленной детализации нет ID клиента: клиентский анализ проверяется на синтетических данных.
  • Месячные снимки остатков не определяют точные интервалы отсутствия товара. Необходимые предположения должны быть обозначены.
  • Для IEK нужен актуальный остаток; неизвестные исходные данные могут блокировать утверждение позиции.
  • Excel-выгрузки — снимки на дату, а не непрерывная синхронизация с учётной системой.
  • CSV не означает готовую интеграцию с конкретной 1С. Прямое подключение к 1С и автоматическая отправка поставщику не реализованы.
  • Нет заявленного расчёта маршрутов транспорта, доказанного процента экономии или автоматического исполнения решений ИИ.

06 — Команда и документация

Samgau · HackAlem AI · кейс «Электрокомплект»

РольОтветственность
КапитанAPI, ИИ, сессии, заказы, интеграция и развёртывание
Данные и алгоритмИмпорт, прогноз, аномалии, stockout, сезонность и правила заказа
ИнтерфейсЭкраны, графики, работа пользователя и демонстрация
ДокументЧто внутри
Спецификация MVPИдея, требования и границы решения
Интеграция сайтаЗадачи объединения frontend, backend, ИИ и Docker
FrontendЗапуск интерфейса и деморежима
BackendЗапуск API и проверка серверной части
API · OpenAPIКонтракты и форматы
Движок · ИмпортДанные, формулы и алгоритмы
ИИ-помощникСценарии, ограничения и конфигурация
Файловый обмен с 1СПрофили XLSX, актуальные остатки, CSV и ограничения

При разработке и подготовке документации использовался Codex. Наличие AI-инструмента разработки не заменяет проверку ИИ-функций внутри приложения.

QOR ai — каждый заказ можно объяснить.

Оформление: логотип команды; графические заголовки — Archive Ukr, Slava Kirilenko. Буквы сохранены как SVG-контуры, поэтому внешний шрифт для их отображения не требуется. Основной текст использует стандартное оформление GitHub.

Звёзды
⭐ 0
Форки
0
Язык
Python
Последний push
в прошлом месяце
Коммиты
53
Авторы
5
Файлы
140
Ветки
11

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

ajaxavoc 20Asanali 12Dimash 11Asanali 9boombacha 1

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

  • 2026-09-23 17:55Allow file uploads without admin tokenDimash
  • 2026-09-23 17:47Merge pull request #10 from BAITC-Hacks/codex/jury-demo-readmeajaxavoc
  • 2026-09-23 17:45docs: preserve latest team README updates in jury demo sectionajaxavoc
  • 2026-09-23 17:44docs: add prominent jury demo section with Archive Ukr buttonajaxavoc
  • 2026-09-23 17:43Merge pull request #9 from BAITC-Hacks/codex/remove-import-keyAsanali
  • 2026-09-23 17:42Merge remote-tracking branch 'origin/main' into codex/remove-import-keyAsanali
  • 2026-09-23 17:42Remove manual import key fields and retain protected defaultAsanali
  • 2026-09-23 17:37readme ipDimash
Все коммиты (53)
  • 2026-09-23 17:21Merge pull request #8 from BAITC-Hacks/codex/live-ai-chatAsanali
  • 2026-09-23 17:21Merge main and preserve server-verified AI chat contextAsanali
  • 2026-09-23 17:17feat: connect live OpenAI chat with grounded calculation contextAsanali
  • 2026-09-23 17:17Update README.mdAsanali
  • 2026-09-23 17:16.boombacha
  • 2026-09-23 17:15Merge pull request #7 from BAITC-Hacks/codex/full-ui-backend-integrationajaxavoc
  • 2026-09-23 17:15Merge pull request #6 from BAITC-Hacks/codex/qor-readme-brandingajaxavoc
  • 2026-09-23 17:14Merge main, preserve 1C exchange and adapt warehouse to canonical APIajaxavoc
  • 2026-09-23 17:11Merge main into README branding and refresh API, 1C and Docker guideajaxavoc
  • 2026-09-23 17:01Merge pull request #5 from BAITC-Hacks/codex/interactive-warehouseajaxavoc
  • 2026-09-23 17:00feat: implement partner 1C file exchange and connect UI to canonical APIAsanali
  • 2026-09-23 17:00Merge remote-tracking branch 'origin/main' into codex/interactive-warehouseAsanali
  • 2026-09-23 16:59Integrate dashboard with canonical API, persistent orders and Composeajaxavoc
  • 2026-09-23 16:59docs: brand QOR ai README and align guide with current implementationajaxavoc
  • 2026-09-23 16:53Merge remote-tracking branch 'origin/main' into codex/full-ui-backend-integrationajaxavoc
  • 2026-09-23 16:38Merge branch 'main' of https://github.com/BAITC-Hacks/hack-7ccada8c-samgau commit mergeDimash
  • 2026-09-23 16:37Document participant 2 work and backend reviewDimash
  • 2026-09-23 16:27Merge remote-tracking branch 'origin/main' into codex/full-ui-backend-integrationajaxavoc
  • 2026-09-23 16:27Merge remote-tracking branch 'origin/codex/backend-integration-ready' into codex/full-ui-backend-integrationajaxavoc
  • 2026-09-23 16:25feat(frontend): add interactive 3D warehouse overviewAsanali
  • 2026-09-23 16:17Merge pull request #3 from BAITC-Hacks/codex/dashboard-redesignAsanali
  • 2026-09-23 16:16docs: hand off frontend integration and deployment to captainAsanali
  • 2026-09-23 16:12Merge remote-tracking branch 'origin/main' into codex/dashboard-redesignAsanali
  • 2026-09-23 16:12Merge pull request #4 from BAITC-Hacks/codex/backend-integration-readyajaxavoc
  • 2026-09-23 16:11feat: add contextual AI assistant for warehouse and navigationAsanali
  • 2026-09-23 16:10Enable integrated backend and verify engine import order workflowajaxavoc
  • 2026-09-23 16:04Update README.mdajaxavoc
  • 2026-09-23 16:03Update MVP_SPEC_QOR_AI.mdAsanali
  • 2026-09-23 15:58feat(frontend): refresh dashboard design and simplify navigationAsanali
  • 2026-09-23 15:45Connect participant 2 engine and importers to API contractsDimash
  • 2026-09-23 15:22Merge remote-tracking branch 'origin/main'Dimash
  • 2026-09-23 15:20Merge pull request #2 from BAITC-Hacks/codex/qor-interfaceAsanali
  • 2026-09-23 15:20Merge branch 'codex/data-engine' Backend with apiDimash
  • 2026-09-23 15:17backend dopolnilDimash
  • 2026-09-23 15:16feat(frontend): add QOR procurement workspace and demo workflowAsanali
  • 2026-09-23 15:13Merge pull request #1 from BAITC-Hacks/codex/integrate-captain-backendajaxavoc
  • 2026-09-23 15:09Integrate captain API while preserving shared team filesajaxavoc
  • 2026-09-23 15:03Update MVP_SPEC_QOR_AI.mdboombacha
  • 2026-09-23 15:01Update README.mdajaxavoc
  • 2026-09-23 15:01Update MVP_SPEC_QOR_AI.mdAsanali
  • 2026-09-23 14:44Prepare participant 2 data environmentDimash
  • 2026-09-23 14:21Add files via uploadAsanali
  • 2026-09-23 13:53Update README.mdajaxavoc
  • 2026-09-23 13:52Update README.mdAsanali
  • 2026-09-23 13:52readme updatedboombacha
Структура репозитория (140 файлов)
.dockerignore
.env.example
.gitattributes
.gitignore
Dockerfile
MVP_SPEC_QOR_AI.md
README.md
backend/.python-version
backend/DATA_ENVIRONMENT.md
backend/app/__init__.py
backend/app/ai/__init__.py
backend/app/ai/adapter.py
backend/app/ai/assistant.py
backend/app/api/__init__.py
backend/app/api/models.py
backend/app/config.py
backend/app/contracts.py
backend/app/demo.py
backend/app/engine/CAPTAIN_HANDOFF.md
backend/app/engine/PARTICIPANT_2_REPORT.md
backend/app/engine/README.md
backend/app/engine/__init__.py
backend/app/engine/calculator.py
backend/app/engine/demand.py
backend/app/engine/demo.py
backend/app/engine/examples/table.json
backend/app/engine/models.py
backend/app/engine/service.py
backend/app/importers/README.md
backend/app/importers/__init__.py
backend/app/importers/assemble.py
backend/app/importers/demo_files.py
backend/app/importers/partner.py
backend/app/importers/service.py
backend/app/importers/xlsx.py
backend/app/integration.py
backend/app/main.py
backend/app/orders.py
backend/app/storage.py
backend/requirements-data.in
backend/requirements-data.lock
backend/requirements-dev.lock
backend/requirements-engine.txt
backend/requirements.in
backend/requirements.lock
backend/tests/test_assistant.py
backend/tests/test_engine.py
backend/tests/test_importers.py
backend/tests/test_partner_exchange.py
backend/tests/test_platform.py
backend/tests/test_services.py
backend/tests/test_startup.py
backend/tests/test_team_config.py
compose.yaml
deploy/Caddyfile
deploy/Dockerfile.web
deploy/web/index.html
docs/API.md
docs/ASSISTANT.md
docs/BACKEND_LOGIC_REVIEW.md
docs/CAPTAIN_BACKEND.md
docs/CAPTAIN_UI_INTEGRATION.md
docs/DEPLOY_AND_MERGE.md
docs/FRONTEND_HANDOFF.md
docs/INTEGRATION.md
docs/MERGE_NOTES.md
docs/ONE_C_EXCHANGE.md
docs/ORACLE_DEPLOYMENT.md
docs/UI_BACKEND_VERIFICATION.md
docs/VERIFICATION.md
docs/assets/ai.svg
docs/assets/architecture.svg
docs/assets/features.svg
docs/assets/idea.svg
docs/assets/jury.svg
docs/assets/open-demo.svg
docs/assets/qor-banner.svg
docs/assets/qor-logo.jpg
docs/assets/start.svg
docs/assets/team.svg
docs/ci/README.md
docs/ci/backend.yml
docs/openapi.json
examples/api-client.ts
frontend/.dockerignore
frontend/.env.example
frontend/.gitattributes
frontend/.gitignore
frontend/.prettierignore
frontend/.prettierrc.json
frontend/Dockerfile
frontend/INTEGRATION.md
frontend/README.md
frontend/VERIFICATION.md
frontend/compose.yaml
frontend/e2e/integration.spec.ts
frontend/index.html
frontend/nginx.conf
frontend/package-lock.json
frontend/package.json
frontend/playwright.config.ts
frontend/public/favicon.svg
frontend/src/App.tsx
frontend/src/components/Assistant.css
frontend/src/components/Assistant.tsx
frontend/src/components/Charts.tsx
frontend/src/components/Detail.tsx
frontend/src/components/Exchange.css
frontend/src/components/Exchange.tsx
frontend/src/components/ImportModal.tsx
frontend/src/components/InventorySummary.tsx
frontend/src/components/Modal.tsx
frontend/src/components/OrderModal.tsx
frontend/src/components/SavedOrders.tsx
frontend/src/components/ScenarioModal.tsx
frontend/src/components/WarehouseScene.css
frontend/src/components/WarehouseScene.tsx
frontend/src/dashboard-theme.css
frontend/src/lib/api.test.ts
frontend/src/lib/api.ts
frontend/src/lib/assistant.test.ts
frontend/src/lib/assistant.ts
frontend/src/lib/dataMessages.ts
frontend/src/lib/demo.test.ts
frontend/src/lib/demo.ts
frontend/src/lib/format.ts
frontend/src/lib/session.ts
frontend/src/main.tsx
frontend/src/styles.css
frontend/src/types.ts
frontend/src/vite-env.d.ts
frontend/tsconfig.json
frontend/vite.config.ts
pytest.ini
run.py
scripts/ai_smoke.py
scripts/e2e_smoke.py
scripts/export_openapi.py
scripts/import_smoke.py
scripts/smoke.py
Ветки (11)

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

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

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