AAYMA
RU
Войти

Электрокомплект — помощник закупщика

Приложение для закупщика: прогнозирует спрос по истории продаж IEK/Systeme Electric, рассчитывает пополнение с учётом остатков, MOQ, кратности и…

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

О проекте

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

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

Суть

Приложение для закупщика: прогнозирует спрос по истории продаж IEK/Systeme Electric, рассчитывает пополнение с учётом остатков, MOQ, кратности и сроков поставки. Закупщик проверяет, правит, сравнивает сценарии, утверждает план и выгружает CSV.

Как устроено

Данные собираются в неизменяемые снимки (SQLite + Parquet) с проверкой качества и видимыми причинами исключения товаров. Спрос классифицируется, строится 90-дневный прогноз с базовой, сезонной и ростовой составляющими. Движок планирования считает страховой запас и точку заказа при цели цикла без дефицита 95%/99% с учётом поступлений в пути, минимальной партии и кратности упаковки. В Streamlit-интерфейсе видны объяснения количества, правки с обязательной причиной и версиями, сравнение сценариев (задержка 0/7/14 дней, бюджет) и утверждение точной версии с экспортом в CSV. Бэкенд на FastAPI.

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

  • классификация спроса
  • прогноз с базой, сезонностью и ростом
  • safety stock
  • reorder point
  • service level 95/99%
  • MOQ и кратность упаковки
  • scenario comparison
  • temporal evaluation

Особенности

Полный цикл закупщика с человеком в контуре: правка с причиной создаёт новую версию и снимает прежнее утверждение, пустое значение трактуется как «неизвестно», а не ноль. Демо опубликовано на Railway. Работа разбита на три параллельных трека (платформа, данные/прогноз, UI) с контрактами.

Стек

Python · FastAPI · Streamlit · SQLite · Parquet · Docker Compose · uv · GitHub Actions · Railway


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

README

README.md

Электрокомплект — помощник закупщика

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

Открыть опубликованное демо · Запустить локально · Инструкция закупщика

Данные → Прогноз спроса → План закупки → Проверка и правки → Утверждение → CSV
                              ↓
                    Сравнение вариантов → Новый план

Решение о закупке принимает человек. Приложение сохраняет расчёты, причины правок и утверждения; отправка поставщикам и в ERP не выполняется.

Содержание

  1. О проекте и опубликованном демо
  2. Возможности
  3. Локальный запуск
  4. Как пользоваться
  5. Подключение данных компании
  6. Архитектура и API
  7. Проверки и решение проблем
  8. Ограничения
  9. Документация и работа команды

1. О проекте и опубликованном демо

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

Приложение уже опубликовано на Railway и работает независимо от компьютера разработчика. Для просмотра установка не нужна. В облаке используется синтетический набор, общая демонстрационная учётная запись и общее состояние посетителей; корпоративные исходные файлы туда не загружены.

Публичное демо и текущий main могут различаться: последняя зафиксированная облачная сборка — 19596be, а новые возможности подготовки реальных данных и сохранённых планов появились позже. Инструкции ниже относятся к текущей локальной версии репозитория. Доступность публичного UI и ответ HTTP 200 от health повторно проверены 23.09.2026; версия облачной сборки этой проверкой не обновлялась.

2. Возможности

ВозможностьЧто получает закупщик
Подготовка данныхУчебный набор или подключённая история IEK/Systeme Electric; проверка качества и видимые причины исключения товаров.
Остатки и условия закупкиВвод свободного остатка, закупочных единиц, конверсии, минимальной партии, упаковки и сроков для выбранных товаров.
Прогноз спросаЕжедневный прогноз с базовой, сезонной и ростовой составляющими; спорные разовые продажи доступны для проверки.
Расчёт пополненияСтраховой запас, порог пополнения, учёт датированных поступлений, раннего дефицита, минимальной партии и кратности упаковки.
Объяснение рекомендацииСостав количества до и после округления, запас и условия закупки, допущения и предупреждения.
Ручной контрольПравка количества с причиной, новая версия после изменения, утверждение точной версии и выгрузка CSV.
Сравнение вариантовЦель 95%/99%, задержка 0/7/14 дней и бюджет при наличии сопоставимых цен; выбранные условия можно применить к новому плану.
Проверка продажПодтверждение спорной продажи как регулярной или разовой проектной с обоснованием и отдельным пересчётом.
Сохранённая работаВозврат к предыдущим планам, правкам, подготовленным условиям и утверждениям после перезапуска.

3. Локальный запуск

3.1. Получить проект

Понадобится Git. Выполните в терминале:

git clone https://github.com/BAITC-Hacks/hack-20ebc90b-codex-monsters.git
cd hack-20ebc90b-codex-monsters

Далее выберите один способ: Docker Compose либо Python с uv. Команды выполняются из корня репозитория. Для первой установки зависимостей или сборки образа нужен интернет.

3.2. Вариант A — Docker Compose

Требования: Docker и Compose v2. На macOS/Windows запустите Docker Desktop.

docker compose up --build -d
docker compose ps

Дождитесь готовности контейнера и откройте http://localhost:8501. Образ содержит синтетический набор; корпоративные книги в него не копируются.

Проверка готовности и логи:

docker compose exec -T app python scripts/check_health.py
docker compose logs --tail=100 app

Остановка с сохранением данных:

docker compose down

Состояние хранится в именованном volume ekt-data. Не добавляйте -v к down, если хотите сохранить планы и утверждения. Наружу опубликован только интерфейс на порту 8501; API доступен внутри контейнера.

3.3. Вариант B — Python и uv

Требования: установленный uv. Проект поддерживает Python 3.11–3.12; для воспроизводимого запуска используйте 3.12. При необходимости uv установит эту версию Python.

uv sync --frozen --python 3.12
uv run python scripts/run_app.py

После сообщения Application ready откройте http://localhost:8501.

АдресНазначение
localhost:8501Интерфейс закупщика
127.0.0.1:8000/docsSwagger: запросы API и схемы
127.0.0.1:8000/openapi.jsonOpenAPI JSON
127.0.0.1:8000/v1/healthПроверка API

Launcher запускает FastAPI и Streamlit вместе. Ctrl+C останавливает оба процесса. Секреты и корпоративные файлы для учебного сценария не нужны. Локальное состояние хранится в var/; повторный запуск использует сохранённые данные.

Если нужны другие порты или отдельное хранилище:

uv run python scripts/run_app.py --port 8502 --api-port 8001 --state-dir ./var-local

В этом случае интерфейс будет доступен на http://localhost:8502, API — на http://127.0.0.1:8001.

3.4. Настройки и сохранение данных

НастройкаНазначение
--state-dir / EKT_DATA_DIRКаталог SQLite, снимков, планов и истории решений
--port / UI_PORTПорт интерфейса; по умолчанию 8501
--api-port / API_PORTПорт API; по умолчанию 8000
--source-root / EKT_SOURCE_ROOTКаталог локальных исходных книг
EKT_UI_PORTОпубликованный порт UI в Docker Compose

Полный пример переменных — .env.example. Python launcher не читает .env автоматически: передайте переменные в окружение либо используйте аргументы запуска. Compose читает .env для подстановки опубликованного адреса и порта.

Локальная папка var/ и Docker volume — независимые хранилища. Для резервной копии сохраняйте SQLite вместе со связанными Parquet-артефактами.

4. Как пользоваться

Шаг 1. Подготовить первый план

В разделе «Данные» откройте «Подготовить новый план»:

  1. В поле «Источник для расчёта» выберите «Демонстрационный набор» для первого знакомства.
  2. Укажите «Цель: цикл без дефицита» — 95% или 99%.
  3. Нажмите «Подготовить план закупки» и дождитесь завершения подготовки и расчёта.
  4. Перейдите в «План закупки»: появятся предложения по поставщикам.

Учебный набор использует фиксированную дату 2026-09-23T00:00:00Z. Цель 95%/99% — вероятность пройти цикл поставки без дефицита в модели, а не гарантия наличия или измеренный результат компании.

Для подключённых реальных данных вместо учебного набора выберите IEK или Systeme Electric. Доступны первые 20, первые 100 или все поддерживаемые товары. Если обязательных сведений не хватает, заполните условия на следующем шаге.

Шаг 2. Заполнить остатки и условия для реальной истории

В «Данные» → «Остатки и условия закупки» выберите все товары либо отдельные позиции. Общие условия можно задать сразу для выбранных товаров: они заполняют только пустые ячейки, сохраняя индивидуальные значения.

ПолеЧто указать
Доступный остатокСвободное количество на дату расчёта в базовой единице склада, уже за вычетом резервов и блокировок.
Ед. закупки и базовых единиц в закупочнойЗакупочную единицу и явную конверсию: например, бухты при складском учёте в метрах.
Шаг базовой единицыДопустимую точность складского количества.
Минимальная партияMOQ в единицах закупки; 0 означает подтверждённое отсутствие минимума.
Кратность упаковкиДопустимый шаг закупочного количества.
Срок поставки и период проверкиКоличество календарных дней до поступления и между проверками потребности.
Цена и валюта — необязательноЦену за базовую единицу. Для суммы и бюджета нужны известные цены всех товаров в одной валюте.
Товар в пути — необязательноКоличество в базовых единицах и дату ожидаемого поступления.

Укажите «Источник данных и обоснование», явно примите допущение об истории продаж и нажмите «Сохранить условия и рассчитать заказ». Создаётся отдельный снимок и план; исходные данные и прошлые решения сохраняются.

Пустое значение означает «неизвестно», а не ноль. Отсутствие цены не блокирует утверждение и CSV, но не позволяет рассчитать полноценную сумму и применить бюджет. Принятие допущений не восстанавливает неподдержанные движения и возвраты.

Шаг 3. Проверить рекомендацию и изменить количество

В «Плане закупки» выберите «Поставщик и склад». Используйте поиск товара и фильтр срочности, проверьте ожидаемый дефицит и исключённые позиции.

Для выбранного товара проверьте блок «Как рассчитано количество» и раскройте «Допущения расчёта» и «Запас и условия закупки». Если требуется правка, задайте количество в единицах закупки, укажите причину и нажмите «Сохранить количество».

Количество должно соблюдать минимальную партию и кратность. Ноль исключает позицию из CSV. Сохранение правки создаёт новую черновую версию и снимает предыдущее утверждение.

Шаг 4. Сравнить варианты

В «Сравнении вариантов» задайте цель 95%/99%, задержку поставки 0/7/14 дней и, если доступны цены, лимит закупки. Нажмите «Сравнить варианты» и проверьте изменения количества, стоимости и страхового запаса.

База сравнения — исходный успешный расчёт; ручные правки заказа в неё не входят. Сценарий не изменяет базовый заказ. Кнопка «Применить условия к новому плану» создаёт новый расчёт, который нужно проверить и утвердить отдельно.

Шаг 5. Утвердить и скачать CSV

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

Нажмите «Утвердить и подготовить CSV», затем «Скачать CSV». Выгрузка содержит товары, количества, единицы, доступные цены, объяснения и допущения. Экспорт разрешён только для утверждённой версии; после любой правки требуется новое утверждение.

Учебная выгрузка помечена «ДЕМОНСТРАЦИЯ — НЕ ЗАКАЗ ПОСТАВЩИКУ». Ни учебный, ни реальный CSV приложение не отправляет поставщику автоматически.

Дополнительно: проверить разовые продажи

В «Данные» → «Разовые продажи» доступны классификация, причины и статус проверки событий. Спорную положительную продажу можно подтвердить как «Регулярная продажа» или «Разовая проектная продажа».

Укажите «Обоснование решения» и нажмите «Подтвердить и пересчитать новый план». Старые планы и утверждения сохранятся. Разовая продажа в прошлом сама по себе не создаёт будущую проектную потребность.

Вернуться к предыдущей работе

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

5. Подключение данных компании

Для работы с локальными книгами используйте запуск через Python. Интерфейс выбирает уже подключённые источники; загрузки произвольного Excel через браузер нет.

Подготовьте каталог с поддерживаемыми книгами в исходной структуре:

/path/to/sources/
├── IEK/
│   └── *.xlsx
└── Systeme electric/
    └── *.xlsx

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

uv run python scripts/run_app.py --source-root /path/to/sources

Альтернативы: EKT_SOURCE_ROOT или каталог data/sources/ в корне проекта. Если оба исходных архива IEK.zip и Systeme electric.zip уже присутствуют в корне, launcher автоматически распакует книги в игнорируемую Git папку состояния. Для явной регистрации локальных путей предусмотрен EKT_SOURCE_CONFIG.

После подключения выберите поставщика в «Данных» и заполните остатки и условия. Реальная история с пользовательскими допущениями сохраняет режим real_preview: это не подтверждение текущего состояния ERP. Не добавляйте новые корпоративные выгрузки, локальные БД, экспорты и секреты в Git или публичное демо.

6. Архитектура и API

КомпонентТехнология и ответственность
ИнтерфейсStreamlit; рабочий процесс закупщика через HTTP API
API и контрактыFastAPI, Pydantic; валидация, фоновые задания, версии и утверждения
Данные и прогнозpandas, NumPy, DuckDB/Parquet; импорт, классификация, подготовка спроса и ежедневный прогноз
ПланированиеСтраховой запас, потребность, даты поступлений, закупочные ограничения, бюджет и объяснение
ХранениеSQLite для рабочего состояния и истории; Parquet для табличных артефактов
apps/buyer_ui/    Интерфейс закупщика
src/ekt/
├── api/          HTTP API и координация заданий
├── contracts/    Общие модели и форматы артефактов
├── data/         Подготовка снимков и адаптеры источников
├── forecast/     Классификация спроса и прогноз
├── planning/     Расчёт предложений и объяснений
└── storage/      Состояние, версии и аудит
scripts/         Запуск и проверки
tests/           Проверки модулей, UI и интеграции
docs/            Контракты, инструкции и доказательства приёмки

Раздельный запуск для разработки

После uv sync --frozen --python 3.12 запустите в первом терминале:

uv run uvicorn ekt.api.app:app --host 127.0.0.1 --port 8000

Во втором терминале (пример для bash/zsh):

BUYER_UI_MODE=http BUYER_API_URL=http://127.0.0.1:8000 uv run streamlit run apps/buyer_ui/app.py --server.address 127.0.0.1 --server.port 8501

По умолчанию UI работает с настоящим API. Изолированный mock включается явно через BUYER_UI_MODE=mock, технические настройки — через BUYER_DEVELOPER_MODE=true.

Основные маршруты

ЗадачаHTTP API
Готовность, источники, сохранённая работаGET /v1/health, GET /v1/sources, GET /v1/workspace
Подготовка данныхPOST /v1/snapshots, GET /v1/jobs/{job_id}
Остатки и закупочные условияGET / POST /v1/snapshots/{snapshot_id}/buyer-inputs
Расчёт планаPOST /v1/planning-runs, GET /v1/planning-runs/{run_id}
Просмотр и правка заказаGET /v1/proposals, GET / PATCH /v1/proposals/{proposal_id}
УтверждениеPOST /v1/proposals/{proposal_id}/approve
Выгрузка CSVPOST /v1/proposals/{proposal_id}/export
СценарииPOST /v1/scenarios, GET /v1/scenarios/{scenario_id}
Проверка продажGET /v1/planning-runs/{run_id}/demand-events, POST /v1/planning-runs/{run_id}/review-events

Подготовка и расчёты возвращают 202 и status_url; результат нужно дождаться до succeeded или failed. Правка использует expected_version, утверждение — точную версию и content_hash. Количества и деньги типа Decimal передаются JSON-строками; null означает неизвестное значение.

Актуальные схемы доступны в локальном Swagger. Дополнительно: контракты и сквозной API-пример.

7. Проверки и решение проблем

Сквозная проверка локального приложения

При работающем приложении выполните во втором терминале:

uv run python scripts/check_health.py
uv run python scripts/smoke_api.py

Smoke создаёт собственный синтетический план, проверяет запрет выгрузки черновика, правит количество, утверждает версию 2, сохраняет var/demo-approved.csv и сравнивает 95%/99% без изменения базового заказа. Успех отмечен "status": "passed". Команда добавляет демонстрационные записи в состояние выбранного экземпляра и не отправляет заказ.

Для Docker:

docker compose exec -T app python scripts/smoke_api.py

При нестандартных портах передайте API_PORT и UI_PORT health-скрипту; smoke принимает --url http://127.0.0.1:8001 и --output /path/to/demo.csv.

Проверки кода

uv run pytest -q
uv run ruff check src apps tests scripts

Протокол интегрированной приёмки: product-acceptance.md. Он отделяет проверенные функции, синтетические примеры и реальные данные с тестовыми допущениями. Локальные результаты не подтверждают успешный запуск облачного CI.

Частые проблемы

СимптомЧто сделать
uv не найденУстановить uv по ссылке выше; при установке через pip можно использовать python3 -m uv вместо uv.
Порт занятОстановить свой предыдущий запуск или выбрать другие --port и --api-port. Для Compose изменить EKT_UI_PORT.
UI не соединяется с APIПри едином запуске проверить терминал и health; при раздельном — процесс API и BUYER_API_URL.
IEK/Systeme нет в выбореПроверить --source-root, названия папок, исходные имена книг и полный поддерживаемый комплект.
Расчёт или утверждение недоступныПрочитать причины в качестве данных и исключённых позициях; заполнить обязательные условия и подтвердить допущения.
Бюджет недоступенПроверить цены всех участвующих товаров и единую валюту.
CSV недоступен после правкиПроверить и заново утвердить текущую версию.
После обновления кода остался старый интерфейсПерезапустить оба процесса приложения, сохранив каталог состояния.

8. Ограничения

  • Данные. Поддерживаются определённые форматы IEK/Systeme. Непонятные движения и возвраты остаются исключёнными; дни без записей принимаются за нулевые продажи только с явным согласием закупщика.
  • Прогноз. Восстановление потерянного спроса требует подтверждённых интервалов отсутствия товара. Без них потерянный спрос неизвестен. Обнаруженный всплеск — повод для проверки, а не доказанный проектный заказ.
  • Результаты. Точность на будущем периоде, достигнутый уровень сервиса, экономия и сокращение времени работы компании здесь не заявляются. Синтетические расчёты подтверждают работу сценария, а не бизнес-эффект.
  • Расчёт. Используются календарные дни UTC. Бюджет распределяется допустимым жадным алгоритмом без гарантии математического оптимума; многоскладовой оптимизации нет.
  • Эксплуатация. Один worker и одна реплика; нет корпоративного SSO, разделения организаций и производственного SLA. Демонстрационная серверная роль не заменяет аутентификацию.
  • Интеграции. Нет автоматической отправки поставщику, в 1С или другую ERP. Следующий пилот требует проверенных остатков, условий закупки и согласованного способа измерять результат.

9. Документация и работа команды

ДокументКогда читать
Приёмка продуктаЧто проверено и в каких условиях
Готовность исходных данныхПоддержка книг, охват и ограничения истории
Сценарий демонстрацииПодготовка и проведение показа
API-контрактыИнтеграция модулей и форматы запросов
Статус интеграции AТекущий handoff и история checkpoints
Планы командыОбласти ответственности A/B/C
Критерии хакатонаПольза, качество и доказательства для презентации
Git workflowСинхронизация и публикация изменений

Разработка ведётся непосредственно в main, без новых веток, worktree и PR. A отвечает за платформу, контракты и интеграцию; B — за данные и прогноз; C — за интерфейс и демо. Перед работой прочитайте AGENTS.md и план своей роли; сохраняйте изменения коллег и публикуйте только проверенные файлы своей области.

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

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

arssuleimenov 13bassan 13akazbeku 11qprivh 1

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

  • 2026-09-23 17:51docs: restructure README around local setup and buyer workflowakazbeku
  • 2026-09-23 17:40docs: record integrated buyer MVP acceptanceakazbeku
  • 2026-09-23 17:38merge: preserve verified deployment workflow with completed buyer MVPakazbeku
  • 2026-09-23 17:38feat: complete buyer procurement workflow with real-data preparationakazbeku
  • 2026-09-23 17:36docs: publish verified Railway demo and safe redeploy workflowarssuleimenov
  • 2026-09-23 17:09feat: add one-command local launch and live demo deploymentarssuleimenov
  • 2026-09-23 16:52fix(ui): remove developer diagnostics from buyer screensbassan
  • 2026-09-23 16:43fix(ui): make procurement workflow and job status readablebassan
Все коммиты (38)
  • 2026-09-23 16:17feat(ui): redesign buyer workspace around guided order reviewbassan
  • 2026-09-23 15:31fix(ui): preserve caption contrast against native opacitybassan
  • 2026-09-23 15:30feat(ui): apply restrained design and clearer operation feedbackbassan
  • 2026-09-23 15:23docs(data): record published clone verificationarssuleimenov
  • 2026-09-23 15:21feat(data): publish reproducible B evidence and criteria auditarssuleimenov
  • 2026-09-23 15:21fix(forecast): scope assumptions and classify complete documentsarssuleimenov
  • 2026-09-23 15:12feat(ui): simplify buyer workflow and combine approval with CSV preparationbassan
  • 2026-09-23 15:04fix: unify team test imports and verify integrated forecast UI workflowakazbeku
  • 2026-09-23 14:59docs: align all team agents with hackathon criteria and change reportsqprivh
  • 2026-09-23 14:56docs(data): record reproducible B integration and numerical evidencearssuleimenov
  • 2026-09-23 14:52Merge remote-tracking branch 'origin/main' into codex/data-forecastarssuleimenov
  • 2026-09-23 14:52feat(forecast): integrate shared platform contracts and document team handoffarssuleimenov
  • 2026-09-23 14:50docs(ui): verify integration against latest mainbassan
  • 2026-09-23 14:50Merge remote-tracking branch 'origin/main'bassan
  • 2026-09-23 14:49docs(ui): record live acceptance and backend launch stepsbassan
  • 2026-09-23 14:47fix(ui): align live backend and verify persisted buyer workflowbassan
  • 2026-09-23 14:46docs: record verified API demo and GitHub runner billing blockerakazbeku
  • 2026-09-23 14:45chore: add API handoff HTTP smoke checks and main-only workflowakazbeku
  • 2026-09-23 14:45Merge remote-tracking branch 'origin/main' into codex/data-forecastarssuleimenov
  • 2026-09-23 14:44feat(data): build immutable snapshots and Systeme preview adaptersarssuleimenov
  • 2026-09-23 14:44feat(forecast): classify demand and publish robust 90-day forecastsarssuleimenov
  • 2026-09-23 14:44test(forecast): add temporal and independent recovery evaluationarssuleimenov
  • 2026-09-23 14:42Merge branch 'codex/ui-mvp'bassan
  • 2026-09-23 14:41feat: ship replenishment backend contracts planning and buyer workflowakazbeku
  • 2026-09-23 14:40docs(ui): add verified demo runbook and integration handoffbassan
  • 2026-09-23 14:40feat(ui): implement buyer review, scenarios and contract clientsbassan
  • 2026-09-23 14:34data: share supplied IEK and Systeme source archivesarssuleimenov
  • 2026-09-23 14:27docs: plan strong MVP and three implementation tracks (#1)5enynmaman
  • 2026-09-23 14:22docs: plan strong MVP and three implementation tracksakazbeku
  • 2026-09-23 13:58initial docsakazbeku
Структура репозитория (143 файлов)
.DS_Store
.dockerignore
.env.example
.github/workflows/checks.yml
.gitignore
.impeccable/design.json
.impeccable/review/clean-comparison.png
.impeccable/review/clean-sources.png
.impeccable/review/data.png
.impeccable/review/desktop.png
.impeccable/review/human-1024.png
.impeccable/review/human-data.png
.impeccable/review/human-mobile.png
.impeccable/review/human-orders.png
.impeccable/review/human-status.png
.impeccable/review/mobile-review.png
.impeccable/review/mobile.png
.impeccable/review/scenario.png
.impeccable/review/user-619.png
.streamlit/config.toml
AGENTS.md
DESIGN.md
Dockerfile
IEK.zip
PRODUCT.md
README.md
Systeme electric.zip
apps/buyer_ui/.gitignore
apps/buyer_ui/__init__.py
apps/buyer_ui/app.py
apps/buyer_ui/client.py
apps/buyer_ui/formatting.py
apps/buyer_ui/presentation.py
apps/buyer_ui/procurement_inputs.py
apps/buyer_ui/secondary_views.py
apps/buyer_ui/styles.css
apps/buyer_ui/views.py
apps/buyer_ui/workflow.py
apps/buyer_ui/workspace.py
assets/demo/ui-fixtures/README.md
assets/demo/ui-fixtures/bundle.json
compose.yaml
docs/architecture-blueprint.md
docs/demo/acceptance-report.md
docs/demo/design-skills.md
docs/demo/five-minute-demo.md
docs/demo/full-test-results.txt
docs/demo/integration-handoff.md
docs/demo/runbook.md
docs/demo/ui-redesign.md
docs/demo/ui-simplification.md
docs/demo/ui-test-results.txt
docs/deployment.md
docs/mvp/README.md
docs/mvp/acceptance-demo.md
docs/mvp/contracts.md
docs/mvp/evidence/b-criteria-audit-2026-09-23.md
docs/mvp/evidence/b-real-assessment.json
docs/mvp/evidence/b-real-assessment.md
docs/mvp/evidence/b-synthetic-evidence.json
docs/mvp/evidence/b-synthetic-evidence.md
docs/mvp/evidence/product-acceptance.md
docs/mvp/evidence/product-data-readiness.md
docs/mvp/git-workflow.md
docs/mvp/hackathon-criteria.md
docs/mvp/master-plan.md
docs/mvp/participant-a-platform-integration.md
docs/mvp/participant-b-data-forecast.md
docs/mvp/participant-c-ui-demo.md
docs/mvp/status-a.md
docs/samples/contracts.schema.json
docs/samples/foundation.json
docs/samples/openapi.json
docs/source-data-assessment.md
pyproject.toml
scripts/build_snapshot.py
scripts/check_health.py
scripts/prepare_deploy.py
scripts/profile_sources.py
scripts/run_app.py
scripts/smoke_api.py
src/ekt/__init__.py
src/ekt/api/__init__.py
src/ekt/api/app.py
src/ekt/api/catalog.py
src/ekt/api/procurement.py
src/ekt/api/service.py
src/ekt/contracts/__init__.py
src/ekt/contracts/io.py
src/ekt/contracts/models.py
src/ekt/data/__init__.py
src/ekt/data/artifacts.py
src/ekt/data/assessment.py
src/ekt/data/boundary.py
src/ekt/data/errors.py
src/ekt/data/presets.py
src/ekt/data/snapshot.py
src/ekt/data/sources.py
src/ekt/demo.py
src/ekt/forecast/__init__.py
src/ekt/forecast/__main__.py
src/ekt/forecast/baseline.py
src/ekt/forecast/classification.py
src/ekt/forecast/evaluation.py
src/ekt/forecast/evidence.py
src/ekt/forecast/recovery.py
src/ekt/forecast/service.py
src/ekt/planning/__init__.py
src/ekt/planning/engine.py
src/ekt/storage/__init__.py
src/ekt/storage/store.py
tests/api/test_buyer_preparation.py
tests/api/test_buyer_workflow.py
tests/api/test_catalog.py
tests/api/test_product_readiness.py
tests/contracts/test_contracts.py
tests/data/test_assessment.py
tests/data/test_presets.py
tests/data/test_runtime_contracts.py
tests/data/test_snapshot.py
tests/fixtures/test_demo_snapshot.py
tests/forecast/test_baseline.py
tests/forecast/test_classification.py
tests/forecast/test_evaluation.py
tests/forecast/test_evidence.py
tests/forecast/test_platform_integration.py
tests/forecast/test_recovery.py
tests/forecast/test_service.py
tests/forecast/test_service_audit.py
tests/integration/test_launcher.py
tests/integration/test_prepare_deploy.py
tests/planning/test_engine.py
tests/storage/test_store.py
tests/ui/.gitignore
tests/ui/test_buyer_workspace.py
tests/ui/test_hosted_config.py
tests/ui/test_http_client.py
tests/ui/test_live_backend.py
tests/ui/test_mock_workflow.py
tests/ui/test_orders_app.py
tests/ui/test_procurement_inputs.py
tests/ui/test_secondary_views.py
uv.lock
Ветки (4)

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

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

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