О проекте
Команда: Resource
Кейс HackAlem.ai: Логистика — Электрокомплект · ekt.kz
Стадия: Доведённый продукт
Задача кейса: Автоматический расчёт заказов поставщикам для пополнения склада, с утверждением менеджером
Суть
Сервис расчёта рекомендованных заказов поставщикам (IEK, Systeme Electric) по выгрузкам 1С с объяснением каждой строки, симулятором склада, утверждением менеджером и выгрузкой Excel в 1С.
Как устроено
Выгрузки 1С (продажи, остатки, товары в пути, MOQ, сезонность) → прогноз на горизонт «срок поставки + период пересмотра» с сезонными индексами классической декомпозиции (центрированная 12-мес. скользящая), устойчивым ростом г/г и досчётом упущенного спроса в месяцы stockout. Разовые крупные заказы отсекаются робастным порогом max(Q3+3·IQR, 5·медиана, 2·P90); страховой запас, округление до MOQ, ABC, срочность по покрытию. AI-ассистент закупщика на OpenAI function calling отвечает только через инструменты над расчётом и готовит черновик письма; бэктест «Машина времени» на март–август 2026.
Ключевые решения
- сезонная декомпозиция
- восстановление упущенного спроса при stockout
- робастные пороги IQR/MAD
- страховой запас
- MOQ-округление
- ABC-классификация
- бэктест
- кривая сервис/запас
- OpenAI function calling
Метрики
Бэктест мар–авг 2026: случаи «нет на складе» IEK 1648→760 (−54%) при запасе −5%; Systeme Electric 108→30 (−72%) при сервисе 95%
Особенности
Доказательство эффекта бэктестом на реальной истории компании, «Симулятор склада» (что будет с остатком по дням при любом N до утверждения) и «Кривая выбора» — цена каждого процента уровня сервиса в тенге для собственника; README-цифры генерируются из результатов автоматически.
Стек
Python · pandas · Streamlit · OpenAI SDK · pytest
Модели
OpenAI (function calling)
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-4bb3095c-resource.
README
README.mdАвтозаказ ЕКТ — заказ поставщикам за секунды, а не полдня в Excel
Проблема. Менеджер закупа «Электрокомплекта» вручную сводит в Excel продажи, остатки и товары в пути по 3 600 артикулам. Это полдня работы, поэтому заказ считают редко — одних товаров нет на складе, другие лежат лишними.
Решение. Сервис по выгрузкам 1С сам считает, сколько заказать каждого товара и у какого поставщика, объясняет каждую строку человеческим языком и отдаёт готовый Excel для 1С. Человек только проверяет и утверждает.
Результат на реальных данных компании (март–август 2026): случаев «товара нет на складе» — −54% у IEK (при этом запас −5%) и −72% у Systeme Electric.
Кейс: ТОО «Электрокомплект» (ekt.kz) · Трек: Логистика · Стек: Python · pandas · Streamlit · OpenAI · Тесты: 30 автотестов · Ключи для проверки не нужны

Запуск за 1 минуту
./run.sh # macOS / Linux → http://localhost:8501
run.bat # Windows
Первая загрузка читает выгрузки 1С ~20 с. Питч-лендинг: http://localhost:8501/app/static/landing.html
(или двойной щелчок по app/static/landing.html).
Навигация и критерии оценки
| Критерий оценки | Где в README |
|---|---|
| Проблема и ценность | 2. Краткое описание · Результат на реальных данных |
| Функциональность прототипа | 3. Что реализовано · 4. Как работает · 8. Как проверить |
| Техническая реализация | 5. Технологии · 6. Архитектура |
| Практическая применимость | 12. Практическая применимость |
| Потенциал развития | 13. Потенциал развития |
| README и воспроизводимость | 7. Установка и запуск · 8. Как проверить · 9. Данные · 10. Ограничения |
1. Название
Автозаказ ЕКТ — сервис рекомендованных заказов поставщикам для пополнения склада дистрибьютора.
2. Краткое описание
Какую проблему решает. Расчёт пополнения склада вручную в Excel занимает полдня, поэтому делается редко и «на глаз». Разовые крупные продажи одному клиенту выглядят как рост спроса и раздувают закупку. Итог — дефицит по одним позициям (клиент уходит к конкуренту) и излишки по другим (деньги заморожены на складе).
Для кого. Основной пользователь — менеджер отдела закупа. Собственник и финансист выбирают, сколько денег держать в запасе ради уровня сервиса («Кривая выбора»).
В чём ценность.
- Заказ по всем 3 600 артикулам — за секунды, с обоснованием каждой строки: менеджер разбирает только очередь «Требует решения сейчас», а не весь ассортимент.
- «Симулятор склада»: до утверждения видно, что будет с остатком по дням, если заказать больше или меньше.
- Разовые крупные продажи не искажают закупку; месяцы, когда товара не было, досчитываются как упущенный спрос.
- Эффект доказан на истории компании: меньше дефицитов при том же или меньшем запасе (см. результаты ниже).
- Решение остаётся за человеком: правка с причиной, утверждение с ФИО, выгрузка в 1С; автоотправки нет.
Чем мы отличаемся от очевидного решения
Очевидное решение кейса — «прогноз продаж + таблица с количеством». Наше собственное преимущество:
| Очевидный подход | Автозаказ ЕКТ |
|---|---|
| Прогноз = среднее или ML-модель, которой надо верить | Каждая строка объяснена человеческим языком; «Почему в очереди» — причина срочности |
| Разовая крупная продажа раздувает прогноз | Разовые заказы находятся и исключаются, регулярный опт — нет |
| Продажи в дни без товара считаются спросом | Упущенный спрос в месяцы дефицита досчитывается |
| Число «заказать N» | Симулятор склада: видно, в какой день кончится товар при любом количестве — до утверждения |
| «Модель точная, поверьте» | Проверка на истории клиента до покупки: −54% / −72% случаев «нет на складе» |
| Уровень сервиса — настройка в глубине меню | Кривая выбора: цена каждого процента сервиса в ₸ для собственника |
| Правки менеджера теряются | Аудит правок с причинами — основа для обучения системы |
| Интеграция с ERP на месяцы | Excel из 1С → результат → Excel в 1С, пилот за день |
Как перевести эффект в деньги на пилоте. В выгрузке нет цен продаж, поэтому эффект показан в штуках, случаях дефицита и запасе по себестоимости (₸, Systeme Electric). На пилоте упущенная выручка считается так: упущенный спрос (вкладка «Разбор артикула», шт) × цена продажи × маржа — по данным клиента.
Доказательство на истории — «как было» и «как было бы с сервисом», кривая выбора:

Сценарий демо на 3 минуты — docs/DEMO.md. План питча к Demo Day — docs/PITCH.md.
3. Что реализовано
| Требование ТЗ | Как закрыто | Проверка |
|---|---|---|
| 1. Базовая потребность с учётом всех источников: история продаж, остатки, товары в пути, категории, прогноз прироста | Прогноз на горизонт «срок поставки + период пересмотра» + страховой запас − остаток − товары в пути, прибывающие до конца горизонта; категория задаёт сезонный профиль группы; прирост — параметр по поставщику (UI) | tests/test_must_have.py::test_each_input_source_affects_calculation_or_is_supported |
| 2. Сезонность и устойчивый рост | Сезонные индексы классической декомпозиции (отношение к центрированной 12-мес. скользящей средней). Собственный профиль артикула используется, если он повторяется по годам (корреляция профилей), иначе — профиль группы «поставщик × категория». Рост г/г учитывается только если он устойчив (одинаков по знаку в обоих полугодиях), с затуханием | test_seasonal_forecast_has_summer_peak |
| 3. Упущенный спрос в периоды stockout | По помесячным остаткам 1С определяется доля месяца в наличии; месяцы дефицита досчитываются до ожидаемого уровня; базовый уровень считается только по месяцам, когда товар был | test_stockout_recovers_lost_demand_and_raises_level |
| 4. Исключение разовых крупных заказов, включая крупные продажи одному клиенту | Документ с количеством выше робастного порога max(Q3 + 3·IQR, 5·медиана, 2·P90) по документам артикула урезается до «обычного» заказа (медиана), излишек исключается из регулярного спроса. При наличии поля клиента — дополнительно агрегат «клиент × месяц». Повторяющиеся крупные заказы (≥ 4 месяцев за год) считаются регулярным оптом и остаются. Для 2024 г. (нет документов) — ограничение месяца 3× медианы | test_big_oneoff_is_excluded_from_regular_level, вкладка «Разовые заказы» |
| 5. Итоговый список по поставщикам с обоснованием | Таблица по поставщикам, у каждой строки текст: прогноз, сезонность, рост, страховой запас, остаток, в пути, кратность, упущенный спрос, исключённые заказы | test_order_output_has_reason_supplier_groups_and_moq_multiples, вкладка «Заказ поставщикам» |
| Опц.: приоритизация по риску дефицита | Срочность «Критично / Высокая / Плановая» по покрытию остатком срока поставки; шкала риска; сортировка | UI |
| Опц.: минимальная партия и условия поставщика | Округление вверх до кратности/MOQ из файлов поставщиков; срок поставки — по поставщику | UI, тест 5 |
| Симулятор склада (сверх ТЗ) | Ползунок «заказать N шт» → остаток по дням до прихода следующего заказа: когда товар закончится, сколько дней без товара и сколько продаж потеряно, сколько пролежит лишнего — до нажатия «Утвердить» | вкладка «Разбор артикула», tests/test_simulate.py |
| Опц.: визуализация трендов | График «факт / регулярный спрос / прогноз», месяцы без товара подсвечены | вкладка «Разбор артикула» |
| Опц.: выгрузка заказа | Excel по листам-поставщикам (код 1С, артикул, количество, обоснование) — для загрузки в 1С | кнопка «Выгрузить заказ для 1С (Excel)» |
| Избыточные запасы (из «Проблема и ценность» ТЗ) | Вкладка «Излишки»: запас сверх максимума политики (прогноз на горизонт + страховой запас), в шт и ₸ по себестоимости | UI |
| ABC-классификация | A/B/C по годовому регулярному спросу внутри поставщика (80/15/5%) — колонка в заказе и излишках | UI |
| Масштабирование на любую компанию | «Данные и параметры» → «Загрузить свой файл»: один Excel с листами sales, stock_now, transit, items, stock_hist, stockouts (два последних — необязательно); кнопка «Скачать шаблон (пример)» | tests/test_upload.py |
| Ограничение: без автоотправки | Заказ только утверждается человеком (ФИО + время, файл в data/approved/); AI-ассистент готовит лишь черновик письма | UI |
| Ограничения: приватность, объяснимость, устойчивость к выбросам | Данных о клиентах в выгрузке нет; расчёт детерминированный и объяснённый; робастные пороги (IQR, MAD) для выбросов и страхового запаса | код engine/core.py |
AI-ассистент закупщика (OpenAI, function calling): отвечает на вопросы («что критично по IEK?», «почему столько по этой позиции?») только через инструменты над результатами расчёта и готовит черновик письма-заказа поставщику. Без ключа работает детерминированный режим — сервис полностью проверяется без личных аккаунтов.
Результат на реальных данных ЕКТ
Бэктест «Машина времени»: с 01.03.2026 по 31.08.2026 заказы каждое 1-е число считает сервис (видит только прошлое), старт — с фактических остатков 1С. Сравнение с фактическими остатками 1С за те же месяцы. Метрика дефицита одинакова для обеих сторон: начальный остаток месяца = 0 при наличии спроса (артикул × месяц).
| Поставщик | Активных артикулов | Случаи «нет на складе» (артикул×месяц): было → с сервисом | Средний запас |
|---|---|---|---|
| IEK | 1891 | 1648 → 760 (−54%) при сервисе 95% · 770 (−53%) при 90% | −5% шт (95%) · −8% шт (90%) |
| Systeme Electric | 472 | 108 → 30 (−72%) при сервисе 95% · 36 (−67%) при 90% | +7% ₸ по себестоимости (95%) · +1% ₸ (90%) |
Из сравнения исключены 133 артикулов «под заказ» (ни разу не были на складе на начало месяца — склад их держать не должен). Воспроизведение: python -m scripts.backtest 1.65 и python -m scripts.backtest 1.28 → data/results/*.json.
Неудовлетворённый спрос в штуках (для прозрачности; для «как было» виден только в месяцы с нулём на начало, поэтому занижен и несопоставим с симуляцией): IEK: было ≥16 209, с сервисом 29 149 шт; Systeme Electric: было ≥7 587, с сервисом 33 325 шт.
Точность прогноза на истории (python -m scripts.accuracy: отсечки 01.04–01.06.2026, горизонт 3 мес., только месяцы с товаром в наличии, WAPE — меньше лучше): IEK — 36.2% против 36.8% у «среднего за 12 мес.»; Systeme Electric — 32.2% против 30.3% у «среднего за 12 мес.». Помесячный спрос по артикулу сильно зашумлён, поэтому сезонность применяется только при подтверждённой повторяемости (параметры подобраны по этой проверке); основной эффект даёт политика заказа — см. таблицу выше.
Кривая выбора (вкладка «Машина времени», прогоны при сервисе 80/90/95/98/99%): есть уровни сервиса, где сервис лучше факта сразу по обоим показателям — IEK — при сервисе 80%: дефицитов −52% и запаса −11% шт; Systeme Electric — при сервисе 80%: дефицитов −59% и запаса −6% ₸.
4. Как работает решение (сценарий пользователя)
- Менеджер открывает сервис → видит KPI: позиции под угрозой дефицита, к заказу, исключённые всплески, восстановленный спрос.
- Кнопка «Данные и параметры»: источник данных (кейс ЕКТ или свой Excel), сроки поставки, период пересмотра, уровень сервиса, план прироста.
- Во вкладке «Заказ поставщикам» (по умолчанию — режим «Требует решения сейчас») фильтрует по поставщику, срочности и полю «Поиск по наименованию / коду / категории», правит «К заказу», использует кнопки «Отметить все» и «Снять все».
- Поле «Кто утверждает (ФИО)» и кнопка «Утвердить заказ» → файл заказа; кнопка «Выгрузить заказ для 1С (Excel)» → Excel по поставщикам.
- «Разбор артикула» — график и обоснование; «Машина времени» — эффект на истории; «AI-ассистент» — вопросы и черновик письма.
5. Технологии
- Язык и данные: Python 3.11+, pandas, numpy, openpyxl / xlsxwriter (чтение выгрузок 1С и экспорт Excel).
- Интерфейс: Streamlit (веб-приложение), Plotly (графики), собственные CSS/SVG (без эмодзи), статичный лендинг
app/static/landing.html. - Методы расчёта: робастная статистика (IQR, MAD), классическая сезонная декомпозиция (центрированная 12-мес. средняя), страховой запас по уровню сервиса, политика периодического пересмотра заказа, бэктест-симуляция.
- AI в продукте: OpenAI API (модель задаётся
OPENAI_MODEL, по умолчаниюgpt-5.4-mini), function calling над результатами расчёта; без ключа — детерминированный режим. - Качество: pytest (must-have ТЗ, граничные случаи, бэктест, загрузчики, интерфейс через Streamlit AppTest).
- AI-агенты в разработке: Claude Code и OpenAI Codex (код, тесты, два раунда код-ревью, лендинг).
6. Архитектура проекта
data/raw/*.xlsx (выгрузки 1С)
│ engine/loaders.py — приведение к единой схеме:
│ sales(date, sku, qty, doc, warehouse[, client]) · stock_hist · stock_now · transit · items · monthly_hist
▼
engine/core.py compute_orders(): разовые заказы → чистый спрос → сезонность → stockout → уровень/рост
→ прогноз на горизонт → страховой запас → потребность − остаток − в пути → кратность → срочность → обоснование
├── engine/backtest.py «Машина времени» (симуляция политики заказов на истории)
├── engine/simulate.py «Симулятор склада» (остаток по дням при заданном заказе)
└── engine/agent.py AI-ассистент (function calling над результатами, фолбэк без ключа)
app/app.py + app/ui.py Streamlit-интерфейс: заказ, утверждение, экспорт, графики, ассистент
tests/ pytest: must-have на синтетических данных (scripts/make_synthetic.py)
7. Установка и запуск
Требования: Python 3.11+ (проверено на 3.14), macOS / Linux / Windows.
git clone https://github.com/BAITC-Hacks/hack-4bb3095c-resource.git # или по SSH: [email protected]:BAITC-Hacks/hack-4bb3095c-resource.git
cd hack-4bb3095c-resource
./run.sh # macOS/Linux: создаст .venv, поставит зависимости, запустит http://localhost:8501
# Windows: run.bat
Если что-то пошло не так:
Permission deniedпри./run.sh(например, репозиторий скачан zip-архивом) →bash run.sh;- порт 8501 занят →
PORT=8502 ./run.sh(откроется http://localhost:8502); - нет Python 3.11+ → установите с python.org; на Windows при установке отметьте «Add Python to PATH»;
- остановить сервис —
Ctrl+Cв терминале.
Вручную (в т.ч. Windows):
python -m venv .venv
.venv/bin/pip install -r requirements.txt # Windows: .venv\Scripts\pip install -r requirements.txt
.venv/bin/streamlit run app/app.py # Windows: .venv\Scripts\streamlit run app/app.py
Первый запуск читает Excel-выгрузки (~15–20 с) и кэширует их в data/cache/.
Переменные окружения (необязательно)
Нужны только для AI-ассистента в режиме LLM. Скопируйте .env.example в .env:
| Переменная | Назначение |
|---|---|
OPENAI_API_KEY | ключ OpenAI API |
OPENAI_MODEL | модель, напр. gpt-5.4-mini |
Без ключа ассистент отвечает детерминированно по тем же данным.
8. Как проверить решение
.venv/bin/python -m pytest -q # тесты: 5 must-have ТЗ, граничные случаи, бэктест, загрузчики реальных данных, ассистент, загрузка своих данных
.venv/bin/python -m scripts.backtest 1.65 # пересчёт «Машины времени» (~1–2 мин)
.venv/bin/python -m scripts.accuracy # точность прогноза на истории
Windows: те же команды через .venv\Scripts\python.exe, например .venv\Scripts\python.exe -m pytest -q.
Проверка вручную в UI: вкладка «Разбор артикула» → выберите любую позицию (напр. 030300014_): видно исключённые разовые
документы, месяцы без товара, прогноз; вкладка «Разовые заказы» — все исключения с документами.
9. Данные и интеграции
data/raw/— выгрузки 1С, предоставленные партнёром: продажи по документам (фактически с 01.2025), помесячные продажи и материальная ведомость — начальные остатки по месяцам (с 01.2024), товары в пути (IEK — по документам с датами поступления, SE — «в пути 24.09»), кратность/MOQ, рабочая таблица SE (категория, свободный остаток, себестоимость «СС реал»).- Данные о клиентах в выгрузках отсутствуют; код поддерживает необязательное обезличенное поле
client. - Синтетические данные (
scripts/make_synthetic.py) — только для тестов. - Внешние сервисы: OpenAI API — опционально, только для AI-ассистента.
Сторонние компоненты и заготовки (раскрытие по п. 5.4.4 положения)
| Что | Где используется | Лицензия / источник |
|---|---|---|
| pandas, numpy, openpyxl, xlsxwriter | расчёт, чтение выгрузок 1С, экспорт Excel | BSD-3 / MIT (open source) |
| Streamlit, Plotly | веб-интерфейс, графики | Apache-2.0 / MIT |
| openai (Python SDK), python-dotenv, pydantic | AI-ассистент, настройки | Apache-2.0 / BSD / MIT |
| pytest | автотесты | MIT |
Модель OpenAI gpt-5.4-mini (через API) | AI-ассистент (необязательно; без ключа — офлайн-режим) | OpenAI API, кредиты хакатона |
| Шрифт Inter (Google Fonts) | интерфейс и лендинг | SIL Open Font License 1.1 |
| Иконки Material Symbols (встроены в Streamlit) | вкладки и кнопки интерфейса | Apache-2.0 |
| SVG-иконки и иллюстрации (склад, грузовик и др.) | шапка, KPI, лендинг | нарисованы командой (в стиле Lucide, код не заимствован) |
Данные ТОО «Электрокомплект» (data/raw/) | расчёт и бэктест | предоставлены партнёром кейса для хакатона |
Синтетические данные (scripts/make_synthetic.py) | только тесты | сгенерированы командой |
AI-инструменты разработки: Claude Code (Anthropic) и OpenAI Codex — написание кода, тестов, два раунда код-ревью,
лендинг. Заранее подготовлено до 13:00: только AGENTS.md (правила для AI-агентов), autopush.sh (служебный
автокоммит раз в 5 минут — для запуска решения не нужен) и памятки подготовки в docs/prep/; заготовка обёртки LLM
не понадобилась и удалена. Вся функциональность кейса написана во время соревновательной части — см. историю коммитов.
Скриншоты docs/img/ сняты с работающего приложения.
10. Ограничения
- Периоды stockout определяются по материальной ведомости 1С (помесячные начальные остатки); явные периоды можно
дополнительно передать листом
stockouts(sku, month, avail) при загрузке своих данных. - Сроки поставки в данных не переданы — заданы в UI (по умолчанию IEK 40 дн., SE 30 дн. — оценка по датам документов «в пути»).
- Текущий остаток IEK = начальный остаток сентября − продажи сентября (поступления сентября в выгрузке нет); у SE — «Свободный остаток».
- Бэктест — месячный шаг; товар, пришедший до 15-го, доступен для продаж месяца; себестоимость есть только у SE.
- Бэктест: объём неудовлетворённого спроса в штуках для «как было» и «с сервисом» несопоставим (для факта виден только в месяцы с нулём на начало, в симуляции — любой недостаток внутри месяца). Поэтому основная метрика — число случаев «нет на складе на начало месяца», одинаковое для обеих сторон; объём приведён в разделе результатов для прозрачности.
- Склад в выгрузке один (Алматы); расчёт по нескольким складам поддерживается схемой (
warehouse), но UI показывает общий. - Деплой: локальный запуск (
./run.sh).
11. Ссылка на развёрнутую версию
Публичного развёртывания нет: данные партнёра не публикуются в открытом доступе. Решение запускается локально одной
командой (./run.sh или run.bat) → http://localhost:8501; лендинг — http://localhost:8501/app/static/landing.html.
Развёртывание на сервере компании (чтобы сервисом пользовались несколько сотрудников по сети):
git clone https://github.com/BAITC-Hacks/hack-4bb3095c-resource.git && cd hack-4bb3095c-resource
python3 -m venv .venv && .venv/bin/pip install -r requirements.txt
cp .env.example .env # необязательно: ключ OpenAI для AI-ассистента
.venv/bin/streamlit run app/app.py --server.address 0.0.0.0 --server.port 8501 --server.headless true
Сервис будет доступен по адресу http://<IP-сервера>:8501, лендинг — http://<IP-сервера>:8501/app/static/landing.html
(раздаётся тем же сервером). Лендинг — один статичный файл app/static/landing.html: его можно выложить отдельно на любой
статический хостинг (nginx, GitHub Pages) как есть; кнопка «Запустить демо» в нём ведёт на http://localhost:8501 —
при размещении замените адрес на адрес сервера. Для постоянной работы команду запускают как службу
(systemd / Планировщик заданий Windows); свои выгрузки 1С загружаются через «Данные и параметры» → «Загрузить свой файл».
12. Практическая применимость
Где и кем используется. Отдел закупа дистрибьютора электротехники (в кейсе — ТОО «Электрокомплект», поставщики IEK и Systeme Electric): еженедельный или ежемесячный цикл заказа поставщикам.
Какую задачу закрывает уже сейчас:
- расчёт заказа по всем артикулам и поставщикам вместо ручного Excel;
- очередь решений: что заказать срочно и почему (остатка не хватит до прихода поставки);
- контроль излишков: сколько денег лежит в запасе сверх нужного (вкладка «Излишки», в ₸);
- аудит: что рекомендовал сервис, что поменял человек и почему (файл утверждения).
Неделя менеджера закупа с сервисом:
| Когда | Действие | Время |
|---|---|---|
| Понедельник, утро | Выгрузка из 1С → «Требует решения сейчас»: только критичные позиции, у каждой — причина | 10–15 мин вместо полдня в Excel |
| Понедельник | Спорные позиции — «Разбор артикула» и «Симулятор склада»: сколько заказать, чтобы не кончилось | по 1 мин на позицию |
| Понедельник | Правки с причиной → «Утвердить заказ» → «Выгрузить заказ для 1С» → заказы поставщикам | 5 мин |
| Среда | Вопрос ассистенту: «что критично по SE?» — проверка без пересчёта таблиц | 1 мин |
| Раз в месяц | Собственник смотрит «Излишки» (₸) и «Кривую выбора»: решает, сколько денег держать в запасе | 10 мин |
выгрузка Excel из 1С → расчёт → Excel обратно в 1С. Любая другая компания загружает свои данные по шаблону («Данные и параметры» → «Загрузить свой файл»), интеграция не требуется.
13. Потенциал развития
Подробный план масштабирования по стратегии «кеглей» (как Facebook: Гарвард → университеты → все) — docs/SCALE.md:
Электрокомплект → дистрибьюторы электротехники КЗ → соседние отрасли дистрибуции → Центральная Азия, плюс новые
продукты для тех же клиентов (прогноз для поставщиков, финансирование закупки, биржа излишков, бенчмарки отрасли).
Во что проект может вырасти после хакатона:
- Все поставщики и склады компании — в схеме данных уже есть поставщик, склад и (обезличенный) клиент; следующий шаг — расчёт по каждому складу и сроки поставки по фактическим документам поступления.
- Прямая интеграция с 1С (выгрузка по расписанию и загрузка «Заказа поставщику») — ежедневный пересчёт без ручных файлов.
- Самообучение на правках менеджера: причины правок накапливаются и показывают, где модель систематически ошибается (сроки, акции, крупные клиенты).
- Условия поставщиков: минимальная сумма заказа, скидки за объём, консолидация машины/паллеты.
- Перераспределение излишков между складами и акции на залежавшийся товар.
- Другие отрасли с той же задачей: дистрибуция стройматериалов, автозапчастей, FMCG, аптечные сети — везде, где есть склад, поставщики и 1С/ERP.
- AI-агент закупщика: ежедневная сводка «что критично» и черновики писем поставщикам — с утверждением человеком.
Авторы коммитов
История коммитов
- 2026-09-23 17:50docs: README — где лендинг на сервере и как выложить его отдельноResource
- 2026-09-23 17:48docs: README — клон по HTTPS, частые проблемы запуска, развёртывание на сервере компанииResource
- 2026-09-23 17:35docs: ссылка на план питча в READMEResource
- 2026-09-23 17:22chore: убран неиспользуемый engine/llm.py, памятки подготовки перенесены в docs/prep, пояснён autopush.shResource
- 2026-09-23 17:03docs: план питча к Demo Day (слайды, текст на 3 минуты, ответы на вопросы жюри)Resource
- 2026-09-23 17:00docs: README — чем отличаемся от очевидного решения, как перевести эффект в деньги, неделя менеджера с сервисомResource
- 2026-09-23 16:54docs: план масштабирования (стратегия «кеглей»: ЕКТ → дистрибьюторы КЗ → соседние отрасли → ЦА; продукты для поставщиков, финансирование, биржа излишков)Resource
- 2026-09-23 16:14docs: упомянуты памятки подготовкиResource
Все коммиты (85)
- 2026-09-23 16:13docs: полное раскрытие сторонних компонентов (п. 5.4.4): библиотеки и лицензии, модель OpenAI, шрифт Inter, иконки, данные, AI-инструменты, заготовкиResource
- 2026-09-23 16:05docs: текст сдачи — симулятор и очередь решенийResource
- 2026-09-23 16:05docs: симулятор склада в README и сценарии демоResource
- 2026-09-23 16:04feat: «Симулятор склада» (остаток по дням до прихода следующего заказа) + тесты; fix по ревью: MOQ при ручной правке, аудит всех правок (в т.ч. обнулённых), защита от повторного утверждения, «нет даннResource
- 2026-09-23 16:03auto: 2026-09-23 16:03:52Resource
- 2026-09-23 16:03auto: 2026-09-23 16:03:06Resource
- 2026-09-23 16:00ux: пустой заказ нельзя выгрузить/утвердить — подсказка вместо пустого файлаResource
- 2026-09-23 15:58docs: README — зацепка за 10 секунд (проблема/решение/результат, скриншот, запуск), карта критериев оценки, разделы «Практическая применимость» и «Потенциал развития»Resource
- 2026-09-23 15:58auto: 2026-09-23 15:58:49Resource
- 2026-09-23 15:52docs: скриншоты интерфейса в README; ux: прочерк вместо None в «Причина правки»Resource
- 2026-09-23 15:48auto: 2026-09-23 15:48:46Resource
- 2026-09-23 15:48auto: 2026-09-23 15:48:02Resource
- 2026-09-23 15:45docs: README строго по 11 разделам промпта организаторов (+Технологии, +Ссылка на развёрнутую версию, +Для кого)Resource
- 2026-09-23 15:33auto: 2026-09-23 15:33:43Resource
- 2026-09-23 15:32auto: 2026-09-23 15:32:59Resource
- 2026-09-23 15:27ux: убран жаргон (горизонт, WAPE) из подписейResource
- 2026-09-23 15:26docs: ссылка на лендинг и сценарий демо в READMEResource
- 2026-09-23 15:23auto: 2026-09-23 15:23:40Resource
- 2026-09-23 15:20ux: обоснование в разборе артикула — списком шаговResource
- 2026-09-23 15:19ux: AI-ассистент как чат (история, пузыри, быстрые вопросы), язык ответов без технических полейResource
- 2026-09-23 15:18auto: 2026-09-23 15:18:38Resource
- 2026-09-23 15:16ux: форматы чисел и дат в таблицах излишков и разовых заказовResource
- 2026-09-23 15:15ux: шапка до расчёта (скелет загрузки); docs: материальная ведомость = помесячные остатки 1С, используется для stockoutResource
- 2026-09-23 15:14ux: порядок вкладок по пути пользователя, числа с разделителями, главное слева в таблице, единый стиль графиков, подсказка «3 шага»; лист stockouts в загрузке (вход ТЗ)Resource
- 2026-09-23 15:13auto: 2026-09-23 15:13:35Resource
- 2026-09-23 15:10ci: убран workflow — GitHub Actions недоступен в организации (задачи не стартуют); проверка — локально и чистым клономResource
- 2026-09-23 15:08deps: numpy 2.2.6 для Python 3.11 (у 2.5.3 нет колёс под 3.11), 2.5.3 для 3.12+Resource
- 2026-09-23 15:05ci: pytest на Python 3.11–3.13Resource
- 2026-09-23 15:00ui: подпись ссылается на кнопку «Данные и параметры»Resource
- 2026-09-23 14:57auto: 2026-09-23 14:57:56Resource
- 2026-09-23 14:55ui: в «Истории товара» только примеры без необъяснимых падений остатка (перемещения/списания)Resource
- 2026-09-23 14:53auto: 2026-09-23 14:53:32Resource
- 2026-09-23 14:52auto: 2026-09-23 14:52:53Resource
- 2026-09-23 14:48auto: 2026-09-23 14:48:30Resource
- 2026-09-23 14:47auto: 2026-09-23 14:47:51Resource
- 2026-09-23 14:43auto: 2026-09-23 14:43:27Resource
- 2026-09-23 14:42auto: 2026-09-23 14:42:48Resource
- 2026-09-23 14:40fix: не помечать «Критично» товары с прогнозом < 1 шт за горизонтResource
- 2026-09-23 14:36docs: описание набора тестовResource
- 2026-09-23 14:36docs: кривая выбора в READMEResource
- 2026-09-23 14:36feat: «Кривая выбора» — цена каждого процента сервиса в ₸ по бэктестам 80–99%; текст для формы сдачиResource
- 2026-09-23 14:33auto: 2026-09-23 14:33:24Resource
- 2026-09-23 14:32auto: 2026-09-23 14:32:45Resource
- 2026-09-23 14:29docs: формат чисел в READMEResource
- 2026-09-23 14:29fix: второе ревью (последний месяц без следующей записи, выброс при 2 документах, пустой каталог, имена листов Excel, Windows-команды); README-цифры генерируются из data/resultsResource
- 2026-09-23 14:27auto: 2026-09-23 14:27:43Resource
- 2026-09-23 14:23auto: 2026-09-23 14:23:22Resource
- 2026-09-23 14:22auto: 2026-09-23 14:22:40Resource
- 2026-09-23 14:17auto: 2026-09-23 14:17:37Resource
- 2026-09-23 14:13auto: 2026-09-23 14:13:19Resource
- 2026-09-23 14:12auto: 2026-09-23 14:12:34Resource
- 2026-09-23 14:08fix: итоги код-ревью (пустые продажи, пропуски остатков, малые выборки, сплошной дефицит, regex-поиск, экранирование, ФИО в файле утверждения, агент на всех позициях + обязательный инструмент), WindowResource
- 2026-09-23 14:08auto: 2026-09-23 14:08:16Resource
- 2026-09-23 14:04docs+ui: обновлённые результаты бэктеста, точность прогноза в UI и READMEResource
- 2026-09-23 14:02auto: 2026-09-23 14:02:14Resource
- 2026-09-23 14:01auto: 2026-09-23 14:01:32Resource
- 2026-09-23 13:57auto: 2026-09-23 13:57:11Resource
- 2026-09-23 13:56auto: 2026-09-23 13:56:29Resource
- 2026-09-23 13:52feat: излишки (замороженный запас в ₸), ABC, загрузка своих данных по шаблону + тестResource
- 2026-09-23 13:52auto: 2026-09-23 13:52:09Resource
- 2026-09-23 13:51auto: 2026-09-23 13:51:26Resource
- 2026-09-23 13:46ux: очередь решений, sparkline спроса, массовые действия, итоги в ₸, параметры в поповере, адаптив, фиксы шапки и графикаResource
- 2026-09-23 13:37docs: README — методология, результаты бэктеста, запуск, проверка, ограниченияResource
- 2026-09-23 13:37auto: 2026-09-23 13:37:06Resource
- 2026-09-23 13:36fix(agent): код 1С vs артикул в системной инструкцииResource
- 2026-09-23 13:35design: логистическая тема, SVG-иконки вместо эмодзи, KPI-карточки, риск-бар; фикс названий товаровResource
- 2026-09-23 13:31auto: 2026-09-23 13:31:24Resource
- 2026-09-23 13:26auto: 2026-09-23 13:26:21Resource
- 2026-09-23 13:25feat: AI-агент закупщика (function calling + фолбэк)Resource
- 2026-09-23 13:22auto: 2026-09-23 13:22:03Resource
- 2026-09-23 13:20feat: движок расчёта заказов (сезонность, рост, stockout, разовые заказы, MOQ) + дашборд StreamlitResource
- 2026-09-23 13:14tests: must-have checks on synthetic dataResource
- 2026-09-23 13:12auto: 2026-09-23 13:12:01Resource
- 2026-09-23 13:11auto: 2026-09-23 13:11:15Resource
- 2026-09-23 11:07auto: 2026-09-23 11:07:02Resource
- 2026-09-23 11:02auto: 2026-09-23 11:02:00Resource
- 2026-09-23 07:35setup: gitignore + autopush scriptResource
Структура репозитория (62 файлов)
.env.example .gitignore .streamlit/config.toml AGENTS.md CLAUDE.md README.md app/app.py app/static/landing.html app/ui.py autopush.sh data/raw/iek_in_transit.xlsx data/raw/iek_monthly_sales_qty.xlsx data/raw/iek_monthly_stock.xlsx data/raw/iek_moq.xlsx data/raw/iek_sales_dynamics.xlsx data/raw/iek_seasonality.xlsx data/raw/se_in_transit.xlsx data/raw/se_monthly_sales_qty.xlsx data/raw/se_monthly_stock.xlsx data/raw/se_moq.xlsx data/raw/se_sales_dynamics.xlsx data/raw/se_seasonality.xlsx data/results/accuracy.json data/results/backtest_0.84.json data/results/backtest_1.28.json data/results/backtest_1.65.json data/results/backtest_2.05.json data/results/backtest_2.33.json data/results/replay.json docs/DEMO.md docs/PITCH.md docs/SCALE.md docs/SUBMISSION.md docs/img/app.png docs/img/frontier.png docs/img/landing.png docs/img/time_machine.png docs/prep/GATES.md docs/prep/HACKATHON_CONTEXT.md engine/__init__.py engine/agent.py engine/backtest.py engine/core.py engine/loaders.py engine/simulate.py requirements.txt run.bat run.sh scripts/__init__.py scripts/accuracy.py scripts/backtest.py scripts/make_synthetic.py scripts/update_readme.py tests/__init__.py tests/test_agent.py tests/test_app.py tests/test_backtest.py tests/test_edge_cases.py tests/test_loaders.py tests/test_must_have.py tests/test_simulate.py tests/test_upload.py
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.