AAYMA
RU
Войти

EKT: объяснимое пополнение склада

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

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

О проекте

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

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

Суть

Streamlit-приложение для менеджера закупок Электрокомплекта: считает заказы поставщикам по товару и складу с объяснением каждой позиции, даёт вручную поправить количество, утвердить заказ и выгрузить CSV/XLSX.

Как устроено

Таблицы продаж, остатков, поставок в пути, правил заказа и stockout-интервалов импортируются и нормализуются в единый Bundle со схемой, проверкой связей и fingerprint; есть адаптеры IEK/Systeme. Из спроса убираются разовые крупные события (детектор по клиенту, дате и повторяемости покупок) и добавляется упущенный спрос за подтверждённые периоды stockout. Прогноз учитывает сезонность SKU или внешний prior, устойчивый тренд и план роста. Потребность = max(0, прогноз + страховой запас − остаток − путь), затем применяются MOQ и кратность. Менеджер проверяет и корректирует позиции с указанием причины, утверждает и экспортирует; качество прогноза оценивается walk-forward.

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

  • outlier/one-off event detection
  • stockout demand compensation
  • SKU seasonality with prior fallback
  • trend and growth plan
  • safety stock
  • MOQ and pack multiplicity
  • walk-forward forecast evaluation
  • manager review/approval workflow

Метрики

Синтетика 1000 SKU / 365 000 продаж: расчёт 40,14 с, пик памяти 541 МиБ

Особенности

Команда организовала мультиагентную разработку: роли и промпты для backend, frontend, logic, аудита и ревьюера, handoff-документы, аудит соответствия ТЗ и бенчмарки нагрузки. Синтетическое демо чётко отделено от данных партнёра, заказ проходит через явный шаг утверждения менеджером.

Стек

Python 3.12 · Streamlit · pandas · NumPy · openpyxl · Altair · pytest · GitHub Actions


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

README

README.md

EKT: объяснимое пополнение склада

Проект команды Furia для кейса ТОО «Электрокомплект» на HackAlem AI. Приложение помогает менеджеру закупок рассчитать заказ поставщикам, проверить обоснование по каждому товару, изменить количество, утвердить результат и выгрузить CSV/XLSX.

Эксперту для проверки: клонируйте репозиторий, установите зависимости и запустите встроенное демо по инструкции ниже. Приватные архивы, API-ключи, платные сервисы, Docker, Node.js, GPU и отдельная база данных не нужны. Основной расчёт работает локально.

Это MVP: состояние хранится в памяти сессии, внешней отправки заказа нет, совместимость с конкретным импортом 1С ещё не подтверждена. Синтетическое демо явно отделено от данных партнёра и ручных допущений.

1. Назначение и принцип работы

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

  1. Импорт и нормализация таблиц, проверка типов, связей и происхождения.
  2. Выделение регулярного спроса, исключение разовых крупных событий.
  3. Компенсация упущенного спроса по подтверждённым периодам отсутствия товара.
  4. Прогноз с сезонностью, устойчивым трендом и отдельным планом роста.
  5. Расчёт потребности с учётом запаса, пути, минимальной партии и кратности.
  6. Проверка менеджером, ручная корректировка, утверждение и экспорт.
Потребность = max(0, прогноз на горизонт + страховой запас
                    - доступный остаток - подтверждённый путь в горизонте)
Заказ = потребность с учётом минимальной партии и округления к кратности

Горизонт задают срок поставки и период пересмотра. Доступный запас берётся напрямую либо как on_hand минус reserved; резерв повторно не вычитается. При нулевой потребности MOQ не создаёт заказ. Месячная история и её детализация не суммируются повторно.

Детектор выбросов группирует продажи по обезличенному клиенту и дате, учитывает повторяемость крупных покупок и массовые пики. Без клиента используется документ, но документ не выдаётся за клиента. При менее 12 положительных событиях эвристика неприменима. При наличии не менее двух полных годовых циклов используется сезонность самого SKU; внешний prior применяется при недостатке такой истории, затем — нейтральный профиль. Нулевые продажи не доказывают stockout. Формулы, пороги и допущения описаны в методологии.

2. Архитектура

Один Python-процесс Streamlit. Frontend, Backend и Logic разделены по модулям, взаимодействуют через Python-функции и pandas DataFrame, не через HTTP API.

Браузер -> Streamlit -> app.py -> ekt_ui.app
                                  |
              Frontend: формы, таблицы, фильтры, session_state
                                  |
              Backend: application -> ingest / partner -> schema
                                  |
              Logic: demand -> forecast -> engine -> review
                                  |
              Backend: export -> CSV/XLSX -> скачивание
ПутьНазначение
app.pyТочка запуска, подключает локальный src
src/ekt_ui/Импорт в UI, таблицы, аналитика, темы, правки и состояние сессии
src/ekt/application.py, ingest.py, partner.pyОперации над наборами, канонический импорт и адаптеры IEK/Systeme
src/ekt/schema.pyЕдиный Bundle, схема, нормализация, валидация и fingerprint
src/ekt/demand.py, forecast.py, engine.pyСпрос, прогноз и расчёт заказа
src/ekt/review.py, export.pyУтверждение, состав выгрузки и сериализация
src/ekt/demo.pyВоспроизводимый синтетический набор
tests/, scripts/Автотесты, smoke и оценка прогноза
.streamlit/config.tomlАдрес, порт, лимит загрузки и темы

Backend и Logic не импортируют UI. БД, очереди задач, внешний AI API и промышленная авторизация не используются. Данные, правки и утверждения могут исчезнуть при перезагрузке страницы или перезапуске процесса. Подробности: DEVELOPMENT, действующий API: INTERFACES.

3. Технологии и зависимости

Для воспроизведения используйте Python 3.12, 64-разрядную ОС, Git и современный браузер. Нужны Python-модули venv и pip, права записи в каталог проекта и свободный локальный порт. Интернет требуется для клонирования и первоначальной установки.

КомпонентВерсия в lock-файлеНазначение
Streamlit1.64.0Интерфейс и локальный сервер
pandas3.0.6Таблицы и временные ряды
NumPy2.5.3Числовые операции
openpyxl3.1.5Чтение и запись XLSX
Altair6.3.0Графики
pytest9.1.1Автотесты

Все прямые и транзитивные зависимости закреплены в requirements.lock. Устанавливайте весь файл. pyproject.toml допускает более широкий диапазон Python, но проверенное окружение и setup.ps1 ориентированы на 3.12. Командой проверялись Windows и Linux; отдельная приёмка macOS не заявляется.

Универсальные минимальные требования RAM и максимальный каталог не установлены. В синтетическом профиле ядра до интеграции UI-02 на 1000 SKU / 365000 продаж расчёт занял 40.14 с, fingerprint — 1.24 с, пик процесса с прежним UI — 541 МиБ. Замер выполнен на Windows/Python 3.12.14, история 365 дней, лимиты профилировщика 180 с / 800 МиБ. Время и память нового UI отдельно не измерялись; это единичный синтетический замер, не SLA и не замер реальных данных. Условия и остальные размеры: handoff Logic.

4. Установка

Клонируйте свежий main в новый каталог. Если GitHub запросит авторизацию, используйте учётную запись с доступом; не сохраняйте токены в репозитории.

git clone --branch main https://github.com/BAITC-Hacks/hack-2f144651-furia.git
cd hack-2f144651-furia
git rev-parse HEAD

Последняя команда фиксирует проверяемую версию. Все последующие команды выполняются из корня репозитория, где находятся app.py и requirements.lock.

Windows PowerShell

py -3.12 -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r requirements.lock
.\.venv\Scripts\python.exe -m pip check

Альтернатива первым двум командам: ./setup.ps1. Скрипт ищет Python 3.12 через Windows launcher, затем через окружение Codex, если оно установлено. Codex не обязателен. Явный путь: ./setup.ps1 -PythonExe 'C:\Python312\python.exe'. Если PowerShell запрещает скрипты, используйте команды выше, не меняя системную политику. Активация .venv не требуется.

Linux и macOS

python3.12 -m venv .venv
.venv/bin/python -m pip install -r requirements.lock
.venv/bin/python -m pip check

При отсутствии Python 3.12, venv или pip установите их средствами своей ОС. macOS-команды предназначены для стандартной Python-среды, но не являются заявлением о выполненном тесте на macOS.

5. Запуск и остановка

Windows:

.\.venv\Scripts\python.exe -m streamlit run app.py

Linux / macOS:

.venv/bin/python -m streamlit run app.py

Откройте http://127.0.0.1:8501. Оставьте терминал открытым. Остановка сервера: Ctrl+C в этом терминале. Не используйте python app.py: UI нужен Streamlit runner.

Если порт занят, выберите другой, не останавливая чужой процесс:

.\.venv\Scripts\python.exe -m streamlit run app.py --server.port 8502

В Linux/macOS замените путь интерпретатора на .venv/bin/python. Адрес станет http://127.0.0.1:8502. Проверка готовности процесса в другом терминале PowerShell:

(Invoke-WebRequest http://127.0.0.1:8501/_stcore/health).Content

Linux/macOS: curl -fsS http://127.0.0.1:8501/_stcore/health. Ожидается ok. Health подтверждает готовность процесса, не корректность бизнес-расчётов.

6. Параметры окружения

Обязательных переменных окружения нет. .env, secrets.toml, токен OpenAI, Google API, параметры БД и облачные учётные данные для основного запуска не нужны.

ПараметрЗначение / назначение
.streamlit/config.toml: server.address127.0.0.1, только та же машина
server.port8501, переопределяется --server.port
server.headlesstrue, браузер открывается вручную
server.maxUploadSize80 МБ на файл; не гарантия обработки любого такого набора
Бюджет импортаДо 100 МиБ входа суммарно на вызов, 200 МиБ распакованных данных, 100 файлов, 500 000 строк и 5 000 000 ячеек
browser.gatherUsageStatsfalse, телеметрия Streamlit отключена
ТемаLight / Dark / System через меню Streamlit; палитры в конфигурации
EKT_PARTNER_ARCHIVE_DIRНеобязательная папка только для opt-in тестов оригиналов
Дата расчётаЗадаётся в UI, совпадает с датой текущего остатка; для демо 22.09.2026

Сервер предназначен для локальной экспертной проверки. Не публикуйте его с приватными данными в интернет: промышленная аутентификация, разграничение доступа, постоянное хранение и аудит действий не реализованы. Сетевой деплой требует отдельного решения.

7. Основной сценарий проверки экспертом

Начните с новой сессии браузера. Демо полностью синтетическое, архивы не нужны.

  1. Нажмите «Попробовать на демо» на первом экране или «Загрузить демо» в боковой панели.
  2. В «Параметры расчёта» оставьте дату 22.09.2026, включённые исключение разовых заказов и компенсацию stockout.
  3. Нажмите «Рассчитать предложения». Ожидаются 4 позиции двух поставщиков: IEK и Systeme, маркировка синтетики и рассчитанные рекомендации.
  4. Выберите товар, откройте «Почему столько?». Проверьте прогноз, запас, путь, MOQ/кратность и объяснение. Просмотрите вкладки «Контроль данных», «Поставки», «Входные таблицы».
  5. В таблице «Заказ» у одной позиции задайте 0 в поле «Заказать», добавьте причину, например «Проверка ручного решения», и подтвердите ввод ячейки. Ноль должен сохраниться; позиция должна оставаться выбранной.
  6. Нажмите «Утвердить выбранные позиции». Ожидается локальное утверждение без отправки поставщику.
  7. Установите фильтр IEK. Видны 2 строки, но при исходном выборе всех позиций «Экспорт» сохраняет 4 строки, включая скрытые. Скачайте CSV/XLSX: ручной ноль сохранён, approval_status равен approved.
  8. Измените количество или причину после утверждения. Прежнее утверждение должно отмениться. Изменение входов или параметров расчёта также требует нового расчёта/утверждения.
  9. Дополнительно проверьте темы, поиск, плотность таблицы и «Мои представления». Представления сохраняют фильтры только в текущей сессии, не заказы в БД.

Любое отличие ручного количества от рекомендации требует причины; пустое поле количества означает оставить рассчитанную рекомендацию, ручной ноль — отдельное решение. Даже небольшое изменение считается ручной правкой. Выбранная позиция с нечисловой, бесконечной или отрицательной рекомендацией не утверждается даже после ручной замены. Изменение входов, параметров расчёта, результата, количества или причины отменяет прежнее утверждение. Для кратности заказа поддерживается точность до 8 знаков после запятой; меньшая кратность или большее число знаков даёт локальную ошибку расчёта, а переполнение не подменяется нулевым заказом.

CSV/XLSX скачиваются через браузер. При открытии CSV в Excel задайте текстовый тип столбца кода; XLSX записывает коды текстом. Недопустимые для XML управляющие знаки видимо кодируются только в копии XLSX; заголовки и ячейки сверх лимита Excel либо непредставимые XML символы дают ошибку экспорта с координатой без обрезания данных. Размер XLSX может немного меняться. «Общая сумма заказа: Нет цен» отражает отсутствие согласованного контракта закупочных цен.

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

Windows, отдельный терминал из корня проекта:

.\.venv\Scripts\python.exe scripts/smoke.py
.\.venv\Scripts\python.exe -m pytest tests/test_acceptance.py -q -p no:cacheprovider
.\.venv\Scripts\python.exe -m pytest -q -p no:cacheprovider
.\.venv\Scripts\python.exe -m pip check

Linux/macOS: замените .\.venv\Scripts\python.exe на .venv/bin/python. Smoke проверяет импорт демо, расчёт, ручной ноль, утверждение и оба формата экспорта. Ожидаемый JSON: mode: synthetic, positions: 4, suppliers: 2, manual_zero: 0.0, approval: approved, положительные csv_bytes и xlsx_bytes. Успешный exit code: 0. Pytest должен завершиться без failed/errors. Skipped без приватных оригиналов ожидаемы, но не означают успешной проверки этих данных.

Must haveПроверки tests/test_acceptance.py
M1Влияние истории, срока, роста, категории, остатка и пути
M2Сезонность и устойчивый рост, отличимые от единичного всплеска
M3Компенсация подтверждённого stockout без двойного учёта
M4Разовый заказ, несколько документов клиента, сохранение регулярных крупных покупок
M5Разные поставщики, позиции, объяснения и срочность

Последний полный прогон после интеграции AUD-LOG-01/AUD-BE-01 с UI-02 (продуктовый код cf2b7e8): 424 passed, 20 skipped, Windows/Python 3.12.14, 139.86 с. Smoke успешен; 20 пропусков относятся к приватным оригиналам. Последующее слияние README-01 меняет только документацию. Команды и ограничения: STATUS, handoff Logic.

Дополнительная синтетическая оценка прогноза:

.\.venv\Scripts\python.exe scripts/evaluate_forecast.py --demo --output work/evaluation.json

Она сохраняет локальный JSON с walk-forward метриками, не доказывает точность реальных закупок. Приватные исходники и диагностические выгрузки не публикуйте.

9. Собственные данные

Выберите «Мои данные». Канонический импорт: ZIP с CSV, XLSX с именованными листами или отдельные CSV. Шаблон доступен через «Скачать демо для импорта». Таблицы: products, sales, monthly_sales, stock_snapshots, inbound, stockouts, policies, growth_plan, seasonal_prior. Поля, единицы и обязательность: INPUT_GUIDE, точная схема: schema.py. Происхождение задаётся явно: synthetic, partner или manual.

«Дополнить текущий набор» заменяет загруженную таблицу целиком, а не добавляет строки. Для IEK/Systeme выберите формат отчётов, поставщика, дату выгрузки и только действительно подтверждённые область склада, семантику MOQ и единицы. Ошибка импорта сохраняет прежний набор. Не включайте подтверждения ради получения числа. Помимо лимита Streamlit 80 МиБ на файл действует бюджет одного вызова импорта: 100 МиБ входных данных, 200 МиБ после распаковки ZIP/XLSX, 100 файлов, 500 000 строк и 5 000 000 ячеек. Отдельный файл или архив ограничен 100 МиБ. Проверяется прямоугольный размер всех листов XLSX до загрузки книги; превышение явно отклоняется. Подробности: INPUT_GUIDE.

Opt-in проверка оригиналов на Windows:

$env:EKT_PARTNER_ARCHIVE_DIR = 'C:\private\ekt'
.\.venv\Scripts\python.exe -m pytest tests/backend/test_partner_originals.py -q -rs -p no:cacheprovider
Remove-Item Env:EKT_PARTNER_ARCHIVE_DIR

Папка должна содержать IEK.zip и Systeme.zip; второй может быть копией выданного Systeme electric.zip с новым именем и неизменными байтами. Файлы в Git не входят. Linux/macOS: EKT_PARTNER_ARCHIVE_DIR=/private/ekt .venv/bin/python -m pytest tests/backend/test_partner_originals.py -q -rs -p no:cacheprovider.

10. Ограничения и диагностика

  • Оригиналы на 2377769: 2 passed, 18 skipped. Подтверждён корректный отказ: 15 ошибок Excel в MOQ IEK и 26 конфликтующих правил количества Systeme. Это не успешный полный импорт. Требуются исправленные и согласованные исходники.
  • Недостающие customer_id, stockout, сроки, единицы и текущие остатки не выдумываются. IEK month_start не является текущим остатком. Неизвестное не заменяется нулём. Формулы исходного Excel не пересчитываются.
  • Исправлены ошибки строковых кодов XLSX и сериализации, составных ключей, точности подписей и числовых крайних случаев; добавлен общий бюджет импорта. Остаются интерфейсные задачи AUD-FE-01: подключение общего правила подсветки/фильтра ручных правок, перехват отказа при подготовке XLSX, выбор аналитики по складу и другие пункты промпта. Актуальные результаты: STATUS; исходная сверка до исправлений — AUD-02.
  • Постоянной БД, многопользовательского журнала, проверенной загрузки в 1С и внешней отправки заказа нет. Скачайте результаты до закрытия сессии. Экономия и точность на реальных закупках не измерены.
  • CI временно запускается только вручную: GitHub Actions → EKT checks → Run workflow. Последний известный внешний блокер: billing lock. Отсутствие автоматического статуса не означает зелёный CI; выполняйте локальные проверки.

После разблокировки аккаунта владельцем запустите workflow вручную на актуальном main. После успешной проверки интегратор может вернуть триггеры push для main и pull_request в .github/workflows/checks.yml. До этого удалённый CI не считается подтверждённым.

СимптомДействие
Python/Streamlit не найденИспользуйте Python 3.12 и интерпретатор созданной .venv, установите lock-файл
Нет UI или ModuleNotFoundError для ektПерейдите в корень проекта, запускайте -m streamlit run app.py, не модуль из src напрямую
Порт занят / браузер не открылсяВыберите другой --server.port, откройте localhost вручную
В демо нет текущего остаткаВерните дату 22.09.2026, не подставляйте сегодня к старому снимку
Импорт отклонёнПрочитайте ошибку и контроль данных, исправьте источник; не отключайте проверку и не подставляйте нули
Утверждение отклоненоПроверьте причины правок, выбранные строки и доступность расчёта
Длительный расчётНачните с демо; большие наборы обрабатываются синхронно, гарантии времени нет

11. Дополнительная документация

Разработка продолжается в существующем Python/Streamlit проекте. Перед изменениями проверяется свежий main; проверенные изменения публикуются без переписывания истории. Сырые архивы, клиентские данные и секреты не коммитятся. Push, локальная готовность и официальная сдача Организатору являются разными результатами; README не подтверждает факт или срок официальной сдачи.

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

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

Ramazan Utegen 17Zaywoo66 15Ziyadinkhan 9Codex 2

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

  • 2026-09-23 17:54docs: sync README with latest audited behaviorRamazan Utegen
  • 2026-09-23 17:50merge(docs): reconcile organizer README with verified audit fixesRamazan Utegen
  • 2026-09-23 17:49merge: integrate audited core changes with current frontendRamazan Utegen
  • 2026-09-23 17:48docs: rewrite README for organizer technical verificationZaywoo66
  • 2026-09-23 17:45fix(backend): bound imports and preserve spreadsheet dataRamazan Utegen
  • 2026-09-23 17:45fix(logic): preserve review identity and numeric correctnessRamazan Utegen
  • 2026-09-23 17:23docs(audit): compare current release with original requirements and archivesZaywoo66
  • 2026-09-23 17:06feat(frontend): add adaptive themes and saved workspace viewsZaywoo66
Все коммиты (43)
  • 2026-09-23 16:55docs(audit): verify latest integrated UI and record final evidenceZaywoo66
  • 2026-09-23 16:49merge: preserve audit and latest team UI status integrationZaywoo66
  • 2026-09-23 16:49docs(audit): report system integrity, load measurements and role tasksZaywoo66
  • 2026-09-23 16:30merge: preserve team design and Logic UI integrationZiyadinkhan
  • 2026-09-23 16:29feat(frontend): integrate Logic risk and detector statusesZiyadinkhan
  • 2026-09-23 16:24merge: preserve design verification and team CI updatesZaywoo66
  • 2026-09-23 16:24docs(integration): record verified Inspo frontend releaseZaywoo66
  • 2026-09-23 16:23docs(ci): confirm manual workflow publicationZiyadinkhan
  • 2026-09-23 16:22ci: pause automatic checks while owner billing blocks ActionsZiyadinkhan
  • 2026-09-23 16:20Merge remote-tracking branch 'origin/main'Zaywoo66
  • 2026-09-23 16:20docs(frontend): record Inspo design handoff and verificationZaywoo66
  • 2026-09-23 16:16Merge remote-tracking branch 'origin/main'Zaywoo66
  • 2026-09-23 16:16feat(frontend): refine purchasing workspace with Inspo referencesZaywoo66
  • 2026-09-23 16:16Merge origin/main and verify Logic dashboard helpers with Backend changesRamazan Utegen
  • 2026-09-23 16:13fix(logic): reconcile demand events and expose risk applicability helpersRamazan Utegen
  • 2026-09-23 16:13fix(backend): reject conflicting quantity rules and preserve provenanceZiyadinkhan
  • 2026-09-23 16:06docs(dev): unify agent roles and main publication workflowZiyadinkhan
  • 2026-09-23 15:55feat(frontend): add purchasing dashboard and persistent batch reviewZaywoo66
  • 2026-09-23 15:48Merge remote-tracking branch 'origin/main'Ziyadinkhan
  • 2026-09-23 15:47fix(backend): verify partner originals and preserve stock product namesZiyadinkhan
  • 2026-09-23 15:46docs: record clean verification and remaining external blockersRamazan Utegen
  • 2026-09-23 15:42ci: verify Python 3.12 on Windows and Linux and refresh task statusRamazan Utegen
  • 2026-09-23 15:40fix(backend): report source conflicts and validate partner dates and quantitiesRamazan Utegen
  • 2026-09-23 15:36fix(logic): reject incomplete and ambiguous review row identitiesRamazan Utegen
  • 2026-09-23 15:17fix(logic): correct customer recurrence and add walk-forward evaluationRamazan Utegen
  • 2026-09-23 15:13feat(frontend): split UI workflows and improve import feedbackZaywoo66
  • 2026-09-23 15:08fix(backend): handle empty imports and stable row provenanceZiyadinkhan
  • 2026-09-23 14:53refactor(architecture): separate frontend backend and logicZaywoo66
  • 2026-09-23 14:29Merge team verification updates with agent handoff instructionsCodex
  • 2026-09-23 14:19Record clean-install verification and browser workflow resultsRamazan Utegen
  • 2026-09-23 14:19Prepare agent handoff with bounded roles and fix MOQ normalizationCodex
  • 2026-09-23 14:13Complete MVP acceptance, conservative imports and run documentationRamazan Utegen
  • 2026-09-23 14:04Merge team repository history and preserve original READMERamazan Utegen
  • 2026-09-23 14:04Checkpoint audited adapters and M1-M5 acceptance checksRamazan Utegen
  • 2026-09-23 13:55Implement local replenishment workflow with synthetic demoRamazan Utegen
Структура репозитория (128 файлов)
.github/workflows/checks.yml
.gitignore
.streamlit/config.toml
AGENTS.md
README.md
START_HERE.md
THIRD_PARTY.md
app.py
data/demo/README.md
docs/AGENT_PLAN.md
docs/DASHBOARD.md
docs/DATA_LIMITATIONS.md
docs/DEMO.md
docs/DEVELOPMENT.md
docs/INPUT_GUIDE.md
docs/INTERFACES.md
docs/METHODOLOGY.md
docs/STATUS.md
docs/TASKS.md
docs/TASK_TEMPLATE.md
docs/VERIFICATION.md
docs/audit/REPORT.md
docs/audit/REQUIREMENTS_RECHECK.md
docs/audit/benchmark-1000-latest-windows.jsonl
docs/audit/benchmark-1000-windows.jsonl
docs/audit/benchmark-3years-windows.jsonl
docs/audit/benchmark-concurrent-windows.jsonl
docs/audit/benchmark-windows.jsonl
docs/audit/benchmark.py
docs/audit/reproduce.py
docs/audit/reproductions-latest.jsonl
docs/audit/reproductions.jsonl
docs/handoffs/TEMPLATE.md
docs/handoffs/backend.md
docs/handoffs/engine.md
docs/handoffs/frontend.md
docs/handoffs/logic.md
docs/handoffs/review.md
docs/history/AGENT_PLAN_LEGACY.md
docs/kit/ACCEPTANCE.md
docs/kit/CASE_BRIEF.md
docs/kit/DATA_AUDIT.md
docs/kit/DATA_CONTRACTS.md
docs/kit/ENGINE_SPEC.md
docs/kit/SOURCES.md
docs/tasks-closeout.md
docs/tasks/AUD-01.md
docs/tasks/AUD-02.md
docs/tasks/AUD-LOG-01.md
docs/tasks/CI-02.md
docs/tasks/README-01.md
docs/tasks/ROLE-01.md
docs/tasks/UI-02.md
docs/tasks/UI-LOGIC-01.md
prompts/AUDIT_BACKEND.md
prompts/AUDIT_FRONTEND.md
prompts/AUDIT_LOGIC.md
prompts/BACKEND_AGENT.md
prompts/DATA_AGENT.md
prompts/ENGINE_AGENT.md
prompts/FRONTEND_AGENT.md
prompts/INTEGRATOR_START.md
prompts/LEAD_START.md
prompts/LOGIC_AGENT.md
prompts/REVIEWER.md
pyproject.toml
requirements.lock
scripts/evaluate_forecast.py
scripts/smoke.py
setup.ps1
src/ekt/AGENTS.md
src/ekt/__init__.py
src/ekt/application.py
src/ekt/demand.py
src/ekt/demo.py
src/ekt/engine.py
src/ekt/export.py
src/ekt/forecast.py
src/ekt/ingest.py
src/ekt/partner.py
src/ekt/review.py
src/ekt/schema.py
src/ekt_ui/AGENTS.md
src/ekt_ui/__init__.py
src/ekt_ui/app.py
src/ekt_ui/details.py
src/ekt_ui/imports.py
src/ekt_ui/inputs.py
src/ekt_ui/layout.py
src/ekt_ui/presentation.py
src/ekt_ui/quality.py
src/ekt_ui/results.py
src/ekt_ui/review.py
src/ekt_ui/state.py
src/ekt_ui/styles.css
src/ekt_ui/workspace.py
tests/AGENTS.md
tests/backend/test_application.py
tests/backend/test_audit_backend_regressions.py
tests/backend/test_empty_import.py
tests/backend/test_export_audit_edges.py
tests/backend/test_import_budget_edges.py
tests/backend/test_partner_originals.py
tests/backend/test_partner_quantity_sources.py
tests/backend/test_partner_report_headers.py
tests/backend/test_provenance.py
tests/backend/test_schema_foreign_keys.py
tests/conftest.py
tests/frontend/conftest.py
tests/frontend/test_app.py
tests/frontend/test_dashboard.py
tests/frontend/test_detector_integration.py
tests/frontend/test_imports.py
tests/frontend/test_presentation.py
tests/frontend/test_risk_integration.py
tests/frontend/test_workflows.py
tests/frontend/test_workspace.py
tests/logic/test_audit_review_integrity.py
tests/test_acceptance.py
tests/test_demand.py
tests/test_edges.py
tests/test_engine_regressions.py
tests/test_forecast.py
tests/test_partner.py
tests/test_partner_regressions.py
tests/test_review.py
tests/test_schema.py
tests/test_workflow.py

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

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

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