AAYMA
RU
Войти

Оргструктура

Streamlit-агент для сравнения комплектов оргдокументов «до/после» (DOCX, PDF, XLSX, TXT): карта изменений подразделений и функций, риски…

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

О проекте

Команда: SWAG
Кейс HackAlem.ai: Спецтрек — Казахтелеком
Стадия: Доведённый продукт

Задача кейса: Агент, сравнивающий документы оргструктуры до и после реорганизации

Суть

Streamlit-агент для сравнения комплектов оргдокументов «до/после» (DOCX, PDF, XLSX, TXT): карта изменений подразделений и функций, риски потери/дублирования/конфликта полномочий с проверенными цитатами, DOCX-отчёт, маршрут согласования и ознакомления.

Как устроено

Документы парсятся (python-docx, PyMuPDF, openpyxl) в пункты с полями doc/clause/text/section; правила и регулярки извлекают подразделения, исполнителей, обязанности и запреты. Функции «до/после» сопоставляются собственной реализацией TF-IDF + косинусного сходства, формируются находки (потеря, дублирование, противоречие функции и запрета, совмещение исполнения и контроля). Каждая цитата верифицируется точным вхождением в источник, неподтверждённые исключаются. OpenAI (gpt-5.4-mini, Responses API, JSON Schema) опционально добавляет наблюдения и чат по выдержкам; без ключа работает локальный режим.

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

  • TF-IDF
  • cosine similarity
  • regex/rule-based extraction
  • верификация цитат по точному вхождению
  • JSON Schema structured output

Особенности

Работает без API-ключа и GPU: ядро анализа на правилах и собственном TF-IDF, а LLM — только надстройка; жёсткая цепочка «документ → пункт → цитата» с автоматическим отсевом неподтверждённых находок; сверх кейса добавлены согласование версии пакета и ознакомление сотрудников; 97 тестов и контрольный синтетический комплект с expected.json.

Стек

Python · Streamlit · ECharts · python-docx · PyMuPDF · openpyxl · pytest · Docker · Railway · GitHub Actions

Модели

gpt-5.4-mini (OpenAI Responses API)


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

README

README.md

Оргструктура

ИИ-агент для анализа организационной структуры и функционала

Сравните документы до и после реорганизации.
Найдите изменения ответственности и риски — с пунктами и цитатами из источников.

🚀 Открыть LIVE DEMO

LIVE DEMO — afm.codes



Python Streamlit Docker Formats Tests Local mode

Возможности · Быстрый старт · Сценарий для жюри · Архитектура

О проекте

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

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

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

Попробовать: www.afm.codes. Откройте «Сравнить документы» и выберите встроенный пример или загрузите свои комплекты. Для воспроизводимой проверки без обращений к модели используйте локальный запуск с DEMO_MODE=true.

Хакатонный прототип работает без API-ключей и GPU. OpenAI опционально добавляет наблюдения и ответы по документам. Данные сравнений и демонстрационные действия участников сохраняются в пределах одной сессии.

Выводы рекомендательные. Проверенная цитата подтверждает наличие текста в источнике; интерпретацию и итоговое решение проверяет ответственный человек.

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

ВозможностьЧто доступно в текущем коде
Загрузка документовНесколько DOCX, PDF с текстовым слоем, XLSX или TXT в каждом комплекте. Общий лимит двух комплектов — 50 МиБ.
Сравнение структурыСопоставление упоминаний подразделений и должностей: сохранение, признаки реорганизации, кандидаты на создание или упразднение.
Сопоставление функцийИзвлечение явно заданных обязанностей и запретов; поиск сохранённых, переданных, изменённых, новых и потенциально утраченных функций. Неоднозначные пары выделяются для проверки.
Поиск рисковКандидаты на потерю и дублирование функций, противоречия функции и запрету, совмещение выполнения и контроля одного объекта.
Объяснение результатаКраткое заключение, таблицы, графики, фильтры находок, просмотр структуры и пунктов документов, журнал этапов. Находку можно подтвердить или отклонить вручную.
Помощник по документамБольшая кнопка «Спросить ИИ» открывает отдельное окно чата. С OpenAI доступны ответы по выбранным выдержкам; без ключа — подбор релевантных фрагментов. История привязана к сравнению.
ЭкспортСкачивание оригиналов и отчёта DOCX. В отчёт включаются только записи с подтверждёнными источниками.
СогласованиеСоздание версии пакета с оригиналами, выбранными изменениями и получателями; фиксированный состав участников, согласование или возврат с обязательным комментарием, журнал решений.
ОзнакомлениеПосле согласования всеми участниками — назначение документов сотрудникам, вопросы и ответы, отметки по каждому документу и точной версии, просмотр прогресса.
Документы новичкаОтдельная форма: имя, фамилия, должность и моковый список документов с галочками. Также доступен сценарий назначения уже опубликованных согласованных версий.

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

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

  1. Загрузить два комплекта. Пользователь добавляет предыдущие и новые редакции документов либо выбирает один из встроенных примеров.
  2. Запустить сравнение. Приложение извлекает текст и пункты, выделяет подразделения и функции, сопоставляет их и проверяет цитаты. При включённом OpenAI отдельно добавляет наблюдения модели.
  3. Проверить результат. Пользователь читает резюме, раскрывает находки и источники, при необходимости задаёт вопрос по документам и скачивает отчёт.
  4. Подготовить версию к согласованию. Ответственный выбирает изменения, назначает получателей, проверяет цитаты и фиксирует версию пакета. Участники согласуют её или возвращают на доработку.
  5. Открыть ознакомление. После согласования всех участников ответственный публикует пакет назначенным сотрудникам. Они читают оригиналы, задают вопросы и отмечают ознакомление с конкретной версией.

Технологии

КомпонентРеализация
Язык и средаPython; Docker и GitHub Actions настроены на Python 3.11.
Веб-интерфейсStreamlit >=1.64,<2, локальные CSS/SVG, графики ECharts через st.echarts_chart.
Чтение и создание Wordpython-docx: извлечение абзацев и таблиц DOCX, создание отчёта DOCX.
Чтение PDFPyMuPDF: извлечение текстового слоя.
Чтение Excelopenpyxl: чтение всех листов XLSX, включая текст формул.
Локальный анализРегулярные выражения, правила, собственная реализация TF-IDF и косинусного сходства на стандартной библиотеке Python.
Генеративный ИИОпционально OpenAI Python SDK и Responses API, ответы по JSON Schema. Модель по умолчанию в конфигурации — gpt-5.4-mini, заменяется через OPENAI_MODEL.
Проверкиpytest, Streamlit AppTest, контрольный синтетический комплект.
РазвёртываниеDocker и ручной деплой в Railway. Резервный workflow использует Railway CLI 4.36.1 и Node.js 22.

Полный список зависимостей находится в requirements.txt. Векторная база данных и нейросетевые эмбеддинги в текущем анализаторе не используются.

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

Браузер → Streamlit (app/main.py)
                  │
                  ├─ src/agent.py → app/local_analysis.py
                  │                    ├─ src/parse.py: текст и пункты
                  │                    └─ src/structure.py: структура
                  │
                  ├─ app/ai_assistant.py → src/config.py → OpenAI (опционально)
                  ├─ src/report.py → отчёт DOCX
                  └─ app/workflow.py → согласование → ознакомление

Аналитические этапы

  1. Разбор документов (parse). Текст делится на фрагменты с полями doc, clause, text, section. Ненумерованный текст тоже сохраняется.
  2. Структура и функции (structure, functions). Правила извлекают упоминания подразделений, исполнителей, обязанностей и запретов. Учитывается контекст заголовков.
  3. Сопоставление (match). TF-IDF и косинусное сходство помогают найти пары функций «до/после». Близкие конкурирующие варианты не объявляются автоматически потерянными или новыми.
  4. Находки (findings). Формируются кандидаты на изменения и риски; текстовое сходство само по себе не считается доказательством одинакового смысла.
  5. Проверка источников (verify). Цитата ищется в исходном документе и пункте после нормализации регистра и пробелов. Записи с неподтверждёнными источниками исключаются. Здесь используется точное вхождение, а не нечёткий поиск.
  6. Заключение (report). Создаётся краткое резюме находок с проверенными цитатами. Журнал показывает фактически выполненные этапы.

Результат содержит units, function_map, findings, conclusion; источники представлены как doc, clause, quote, verified. Решение пользователя по находке хранится отдельно и не меняет verified.

Фактическая точка входа — src/agent.py. Адаптер предусматривает подключение src.pipeline.run, но src/pipeline.py в текущем репозитории отсутствует. Поэтому рабочий анализ выполняет app/local_analysis.py. Обычные кнопки сравнения читают документы; тестовая функция run_stub() не используется для пользовательского анализа. Готовый artifacts/sample_result.json также не используется.

Основные файлы

ПутьНазначение
app/main.pyЗагрузка, запуск анализа, список сравнений, результаты, чат и навигация.
app/local_analysis.pyЛокальное извлечение функций, сопоставление, находки и проверка цитат.
src/parse.py, src/structure.pyЧтение документов, выделение пунктов и организационных единиц.
app/ai_assistant.py, src/config.pyДополнительные наблюдения ИИ, поиск источников для чата, настройка API.
src/report.pyФормирование DOCX из записей с подтверждёнными источниками.
app/workflow.pyКарточки изменений и снимки версий с оригиналами, получателями и ответственным.
app/approvals.py, app/acknowledgements.pyМаршруты согласования, ознакомление, вопросы и пакеты новичков.
app/onboarding_ui.pyОтдельная форма новичка с моковым чек-листом.
app/source_explorer.pyПросмотр структуры и исходных пунктов.
app/presentation.py, app/styles.css, app/interactive_ui.pyОформление, графики и отображение хода анализа.
data/, tests/, scripts/eval_control.pyПримеры документов, автоматические тесты и проверка контрольного комплекта.

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

Локально, без API-ключей

Нужны Python 3.11 и pip. Команды ниже предназначены для macOS/Linux и выполняются из корня проекта. GPU не требуется.

  1. Получите репозиторий и перейдите в его каталог:

    git clone https://github.com/BAITC-Hacks/hack-101116b6-swag.git
    cd hack-101116b6-swag
    

    Для приватного репозитория нужен доступ. Если проект передан архивом, распакуйте его и откройте корневой каталог.

  2. Создайте виртуальное окружение и установите зависимости:

    python3.11 -m venv .venv
    source .venv/bin/activate
    python -m pip install -r requirements.txt
    
  3. Запустите приложение:

    DEMO_MODE=true python -m streamlit run app/main.py
    
  4. Откройте http://localhost:8501. Для первого знакомства выберите «Сравнить документы» → «Синтетический пример: подключения и кабельные работы».

DEMO_MODE=true отключает обращения к модели, даже если в окружении есть API-ключ. Это локальный анализ выбранных документов, а не подстановка готового ответа.

После обновления кода перезапустите уже работающий локальный Streamlit: остановите его через Ctrl+C и повторите команду запуска. Старый процесс может сохранять ранее загруженные Python-модули и выдавать ImportError при открытии нового раздела. Перезапуск сбрасывает данные текущих сессий.

Через Docker

Из корня репозитория при установленном Docker:

docker build -t orgstructure .
docker run --rm -p 8501:8501 -e DEMO_MODE=true orgstructure

Приложение доступно на http://localhost:8501. Dockerfile запускает Streamlit на 0.0.0.0 и использует переменную PORT, по умолчанию 8501.

Опционально: OpenAI

Ключи читаются только из переменных окружения через src/config.py. Файл .env автоматически не загружается. Для режима OpenAI задайте окружение процесса или переменные сервиса Railway:

ПеременнаяЗначение
DEMO_MODEtrue — без обращений к модели; false — разрешить использование настроенного API. Без явного значения режим определяется наличием ключей.
OPENAI_API_KEYВаш ключ OpenAI API; не нужен для локального режима.
OPENAI_MODELНеобязательно: имя модели, поддерживающей используемый Responses API с JSON Schema. Значение по умолчанию в коде — gpt-5.4-mini.

Пример запуска после установки зависимостей:

export OPENAI_API_KEY="<ваш_API-ключ>"
export DEMO_MODE=false
python -m streamlit run app/main.py

При доступном OpenAI переключатель «Улучшить анализ с OpenAI» изначально включён. Его можно выключить перед сравнением. Наблюдения модели показываются отдельно в разделе «Заключение» и не заменяют локальные находки. При ошибке API локальный результат сохраняется.

Чат использует OpenAI независимо от переключателя анализа, если ключ доступен и DEMO_MODE не равен true. Для полностью локального сценария запускайте приложение с DEMO_MODE=true. Подробнее о передаваемых данных — ниже.

Как проверить решение: сценарий для жюри

1. Сравнение и проверка источников

  1. Запустите приложение без ключей по инструкции выше.
  2. В «Моих сравнениях» нажмите «Сравнить документы», затем «Синтетический пример: подключения и кабельные работы». Он использует файлы из data/control/.
  3. Прочитайте краткое резюме. Откройте «Все находки, функции и источники» → «Находки» и проверьте кандидатов на потерю, дублирование, реорганизацию и конфликт. Для каждой находки доступны документ, пункт и цитата.
  4. Сверьте источники с data/control/before/regulation.txt и data/control/after/regulation.txt. Например, контрольная проверка потери функции опирается на пункт 2.1.2 исходной редакции, а переименования — на пункт 1.4 новой редакции.
  5. Нажмите «Спросить ИИ» и задайте вопрос: «Кто ремонтирует наружные кабельные линии?». В локальном режиме отобразятся ближайшие выдержки, а не сгенерированный ответ. Закройте и снова откройте окно: история этого сравнения сохранится.
  6. Нажмите «Скачать отчёт» и откройте DOCX: проверьте наличие источников у экспортированных записей.

Для второго примера создайте новое сравнение и нажмите «Демо на тестовом комплекте». Будут проанализированы две обезличенные редакции положения о внутреннем аудите из data/sample/. Готовые ответы под эти файлы не подставляются; полноту найденных изменений следует оценивать по самим документам.

2. Согласование и ознакомление

В том же синтетическом сравнении:

  1. Нажмите «Передать на согласование». Выберите хотя бы одно изменение и назначьте ему получателя из демонстрационного списка.
  2. Укажите название, редакцию пакета и ответственного. Отметьте «Я проверил выбранные изменения, цитаты и получателей» и нажмите «Создать версию для согласования».
  3. Оставьте вымышленных руководителей и нажмите «Начать согласование». По очереди выберите каждого участника и нажмите «Согласовать версию».
  4. После согласования всеми нажмите «Назначить ознакомление» → «Открыть ознакомление назначенным сотрудникам».
  5. Перейдите в «Мои документы», выберите назначенного сотрудника, прочитайте оригинал и нажмите «Ознакомлен с этой версией документа». Вернитесь к ознакомлению в сравнении и проверьте прогресс.

Это симуляция ролей в одной сессии. Если вместо согласования вернуть версию с комментарием, маршрут завершится; повторное согласование требует новой редакции пакета.

Отдельно откройте «Документы новичка», заполните имя, фамилию и должность, выберите документы галочками и нажмите «Сформировать демо-пакет». Получится моковый список, без создания файлов и рассылки. Блок «Назначить реальные согласованные документы» работает с опубликованными версиями, уже адресованными выбранному сотруднику с той же ролью.

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

Из корня проекта с активированным виртуальным окружением:

DEMO_MODE=true python -m pytest -q
DEMO_MODE=true python scripts/eval_control.py

Оценочный скрипт проверяет четыре ожидаемых случая из data/control/expected.json: потерю, дублирование, реорганизацию и конфликт. Для совпадения нужны правильный тип находки, сторона сравнения, пункт, цитата и признак её проверки. Успешный итог:

4/4 проверок пройдено; данные синтетические.

expected.json читает только оценочный скрипт, а не анализатор. Эти четыре проверки подтверждают работу на контрольном примере и не являются измерением точности на произвольных документах.

При локальной проверке этой версии: 97 тестов пройдено (бейдж выше статический). Тесты охватывают парсер, локальный анализ и проверку источников, переходы интерфейса, изоляцию сравнений, чат, экспорт DOCX, согласование, ознакомление и пакеты новичков. В тестах OpenAI используются подменённые ответы, без реальных вызовов API.

Для отдельной проверки извлечения текста:

python -m src.parse data/sample --limit 3

Команда выводит количество фрагментов и первые три фрагмента каждого документа.

Данные и внешние сервисы

Источники данных

ИсточникСодержимое и назначение
data/sample/before/, data/sample/after/Обезличенные DOCX «Положение о внутреннем аудите», редакции 8 и 9. Пример сравнения документов.
data/control/Вымышленные регламенты «до/после» с контрольными изменениями. Не являются действующими регламентами организации.
Загружаемые файлыПользовательские комплекты поддерживаемых форматов. Встроенный поиск по внешним сайтам и корпоративным хранилищам не выполняется.
Демонстрационные участники и чек-лист новичкаВымышленные данные для показа пользовательских сценариев.

DOCX читается вместе с таблицами в порядке документа. Из PDF извлекается текстовый слой. В XLSX читаются все листы, формулы сохраняются как текст формул. Для TXT поддерживаются UTF-8, UTF-8 с BOM и Windows-1251.

Хранение и внешние сервисы

  • Локальный режим: анализ выполняется на машине или сервере, где запущен Streamlit. При удалённом размещении загруженные файлы передаются этому серверу.
  • Сессия: исходные файлы, результаты, чат, версии и решения хранятся в памяти серверной сессии Streamlit. Временные файлы загрузки удаляются после анализа; копии оригиналов остаются в сессии для просмотра и скачивания. Постоянной базы данных нет.
  • OpenAI, если включён: для дополнительного анализа отправляются группы изменённых пунктов; для чата — вопрос, выбранные выдержки с обозначениями документов и часть истории диалога. Ответы запрашиваются по JSON Schema, идентификаторы источников проверяются, цитаты берутся из прочитанных документов.
  • Кэш ИИ: ответы дополнительного анализа сохраняются в .cache/llm/, если доступна запись. Это отдельное от сессии хранение на диске; кэш может содержать сведения из документов и исключён из Git. История чата в этот кэш не записывается.
  • Railway: размещение приложения и ручной деплой. Резервный GitHub Actions workflow отключён; автоматических запусков при push нет. Для локального запуска эти сервисы не нужны.
  • Shields.io: изображения бейджей в этом README загружаются с внешнего сервиса. Документы в него не отправляются.

Ограничения текущей версии

  • Неполнота анализа. Правила ориентированы на русскоязычные тексты с явными исполнителями. Неявные обязанности, сложные переформулировки и связи между документами могут быть пропущены. Отсутствие находок не означает отсутствие рисков; единственное упоминание в одной редакции не доказывает создание или упразднение подразделения.
  • Качество исходного текста. OCR отсутствует. PDF без текстового слоя не анализируется; при предупреждении о частично извлечённом PDF отключаются выводы об отсутствии функций и подразделений. Автоматическая нумерация Word, не включённая в текст абзаца, не восстанавливается. Старые форматы .doc и .xls не поддерживаются.
  • Ограниченный контекст ИИ. Дополнительный анализ обрабатывает не более восьми групп изменённых пунктов; длинные фрагменты сокращаются. Чат получает выбранные выдержки, а не весь комплект. В интерфейсе установлен лимит 20 вопросов на сравнение и 2000 символов на вопрос.
  • Нет постоянного рабочего пространства. Потеря сессии, обновление страницы с созданием новой сессии или перезапуск сервера могут удалить результаты и решения. Между браузерами они не синхронизируются. Дисковый кэш ИИ не восстанавливает рабочую сессию.
  • Симуляция документооборота. Нет аутентификации, разграничения реальных пользователей, электронной подписи, внешних уведомлений и интеграции с кадровой системой или СЭД. Выбор участника имитирует вход. Отметки согласования и ознакомления не являются ЭЦП.
  • Границы экспорта и моковых данных. Экспорт XLSX не реализован. DOCX включает находки, структуру и сопоставления с подтверждёнными источниками; свободный текст заключения и дополнительные наблюдения ИИ отдельно не экспортируются. Чек-лист новичка формирует только демонстрационный список.
  • Запланированная архитектура реализована частично. Нет отдельных src/pipeline.py, src/functions.py, src/match.py, src/findings.py, src/verify.py: соответствующая локальная логика собрана в app/local_analysis.py. Эмбеддинги и LLM-подтверждение пар функций не подключены. В src/config.py есть заготовка клиента NVIDIA, но текущие анализ и чат интерфейса используют только интеграцию OpenAI.
  • Воспроизводимость зависимостей. В requirements.txt часть версий не закреплена; lock-файл отсутствует. Контрольный комплект небольшой, метрики качества на независимом корпусе документов не представлены.

Live demo и ручной деплой

Приложение: https://www.afm.codes.

Сейчас проект деплоится вручную в Railway. Сборка описана в Dockerfile: Python 3.11, установка requirements.txt, запуск Streamlit на 0.0.0.0 с портом из PORT (по умолчанию 8501).

Перед ручным деплоем выполните локальные проверки:

DEMO_MODE=true python -m pytest -q
DEMO_MODE=true python scripts/eval_control.py

Переменные DEMO_MODE, OPENAI_API_KEY и OPENAI_MODEL задаются в окружении сервиса Railway. Ключи не нужно добавлять в репозиторий.

Резервный GitHub Actions workflow

Workflow Railway сохранён только для ручного запуска (workflow_dispatch); триггера на push нет. В настройках GitHub Actions workflow отключён, пока команда использует ручной деплой.

Если потребуется вернуть запуск через Actions, включите workflow Manual test and deploy to Railway, задайте secret RAILWAY_TOKEN и variable RAILWAY_SERVICE_ID, затем запустите его на ветке main. Он выполнит тесты и передаст код в Railway. Для запуска нужны доступные GitHub Actions runners; состояние сборки и приложения проверяется в Railway.

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

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

bekarys tuleutay 16Raiymbek Temirlan 5

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

  • 2026-09-23 17:35[app] обновить визуальный стиль и добавить карту анализаbekarys tuleutay
  • 2026-09-23 17:30[docs] увеличить ссылку и кнопку live demobekarys tuleutay
  • 2026-09-23 17:29[docs] обновить README и отключить автоматический деплойbekarys tuleutay
  • 2026-09-23 17:26[app] показать понятные состояния без документов и согласованийbekarys tuleutay
  • 2026-09-23 17:17[docs] описать проект и сценарий проверки для жюриbekarys tuleutay
  • 2026-09-23 17:08[app] выделить ИИ-чат и вернуть документы новичкаbekarys tuleutay
  • 2026-09-23 16:53[app] обновить оформление и навигацию разделовbekarys tuleutay
  • 2026-09-23 16:44[app] Организовать работу вокруг сравнений и личных документовRaiymbek Temirlan
Все коммиты (21)
  • 2026-09-23 16:22[app] улучшить интерфейс и добавить интерактивные графикиRaiymbek Temirlan
  • 2026-09-23 16:17[app] добавить просмотр структуры и исходных пунктовbekarys tuleutay
  • 2026-09-23 16:08[app] улучшить подбор источников для чатаbekarys tuleutay
  • 2026-09-23 16:04[app] добавить опциональный анализ OpenAI и чат по документамbekarys tuleutay
  • 2026-09-23 15:44[docs] сохранить проектные инструкцииbekarys tuleutay
  • 2026-09-23 15:37[app] исправить извлечение исполнителя из текста функцийbekarys tuleutay
  • 2026-09-23 15:28[app] добавить анализ и версионные процессы работы с документамиbekarys tuleutay
  • 2026-09-23 14:42[docs] добавить инструкции Codex и Claude и навыки проектаRaiymbek Temirlan
  • 2026-09-23 14:33[app] добавить Streamlit UI анализа оргструктуры с учебной заглушкой и тестамиRaiymbek Temirlan
  • 2026-09-23 14:19[parse] чтение документов и разбиение на пунктыbekarys tuleutay
  • 2026-09-23 14:19[structure] извлечение подразделений и ролей без LLMbekarys tuleutay
  • 2026-09-23 14:19[deploy] настроить Railway CI и исключения Dockerbekarys tuleutay
  • 2026-09-23 13:36[docs] AGENTS.md и тестовые документыRaiymbek Temirlan
Структура репозитория (141 файлов)
.agents/skills/accelerated-computing-cudf/BENCHMARK.md
.agents/skills/accelerated-computing-cudf/SKILL.md
.agents/skills/accelerated-computing-cudf/evals/evals.json
.agents/skills/accelerated-computing-cudf/evals/files/cudf-apply-udf/code/generate_data.py
.agents/skills/accelerated-computing-cudf/evals/files/cudf-apply-udf/code/udf_pipeline.py
.agents/skills/accelerated-computing-cudf/evals/files/cudf-csv-etl/code/etl_pipeline.py
.agents/skills/accelerated-computing-cudf/evals/files/cudf-csv-etl/code/generate_data.py
.agents/skills/accelerated-computing-cudf/evals/files/cudf-groupby-agg/code/generate_data.py
.agents/skills/accelerated-computing-cudf/evals/files/cudf-groupby-agg/code/groupby_analysis.py
.agents/skills/accelerated-computing-cudf/evals/files/cudf-multi-join/code/generate_data.py
.agents/skills/accelerated-computing-cudf/evals/files/cudf-multi-join/code/multi_join.py
.agents/skills/accelerated-computing-cudf/evals/files/cudf-native-stream-handoff-boundary/NOTICE.md
.agents/skills/accelerated-computing-cudf/evals/files/cudf-native-stream-handoff-boundary/code/run_smoke.sh
.agents/skills/accelerated-computing-cudf/evals/files/cudf-native-stream-handoff-boundary/code/threaded_handoff.cu
.agents/skills/accelerated-computing-cudf/evals/files/cudf-null-handling/code/generate_data.py
.agents/skills/accelerated-computing-cudf/evals/files/cudf-null-handling/code/null_pipeline.py
.agents/skills/accelerated-computing-cudf/evals/files/cudf-parquet-io/code/generate_data.py
.agents/skills/accelerated-computing-cudf/evals/files/cudf-parquet-io/code/parquet_pipeline.py
.agents/skills/accelerated-computing-cudf/evals/files/cudf-pivot-melt/code/generate_data.py
.agents/skills/accelerated-computing-cudf/evals/files/cudf-pivot-melt/code/reshape_analysis.py
.agents/skills/accelerated-computing-cudf/evals/files/cudf-string-ops/code/clean_contacts.py
.agents/skills/accelerated-computing-cudf/evals/files/cudf-string-ops/code/generate_data.py
.agents/skills/accelerated-computing-cudf/evals/files/cudf-timeseries-resample/code/generate_data.py
.agents/skills/accelerated-computing-cudf/evals/files/cudf-timeseries-resample/code/timeseries_analysis.py
.agents/skills/accelerated-computing-cudf/evals/files/cudf-window-functions/code/generate_data.py
.agents/skills/accelerated-computing-cudf/evals/files/cudf-window-functions/code/window_analysis.py
.agents/skills/accelerated-computing-cudf/evals/files/negative-deep-learning-training/code/train.py
.agents/skills/accelerated-computing-cudf/evals/files/source-cudf-null-fillna-semantics/NOTICE.md
.agents/skills/accelerated-computing-cudf/evals/files/source-cudf-null-fillna-semantics/code/null_cleanup.py
.agents/skills/accelerated-computing-cudf/references/api-patterns.md
.agents/skills/accelerated-computing-cudf/references/cudf-pandas-accelerator.md
.agents/skills/accelerated-computing-cudf/references/dask-cudf-patterns.md
.agents/skills/accelerated-computing-cudf/skill-card.md
.agents/skills/accelerated-computing-cudf/skill.oms.sig
.agents/skills/cuopt-numerical-optimization-api/BENCHMARK.md
.agents/skills/cuopt-numerical-optimization-api/SKILL.md
.agents/skills/cuopt-numerical-optimization-api/assets/c/README.md
.agents/skills/cuopt-numerical-optimization-api/assets/c/lp_basic/README.md
.agents/skills/cuopt-numerical-optimization-api/assets/c/lp_basic/lp_simple.c
.agents/skills/cuopt-numerical-optimization-api/assets/c/lp_duals/README.md
.agents/skills/cuopt-numerical-optimization-api/assets/c/lp_duals/lp_duals.c
.agents/skills/cuopt-numerical-optimization-api/assets/c/lp_warmstart/README.md
.agents/skills/cuopt-numerical-optimization-api/assets/c/milp_basic/README.md
.agents/skills/cuopt-numerical-optimization-api/assets/c/milp_basic/milp_simple.c
.agents/skills/cuopt-numerical-optimization-api/assets/c/milp_production_planning/README.md
.agents/skills/cuopt-numerical-optimization-api/assets/c/milp_production_planning/milp_production.c
.agents/skills/cuopt-numerical-optimization-api/assets/c/mps_solver/README.md
.agents/skills/cuopt-numerical-optimization-api/assets/c/mps_solver/data/sample.mps
.agents/skills/cuopt-numerical-optimization-api/assets/c/mps_solver/mps_solver.c
.agents/skills/cuopt-numerical-optimization-api/assets/cli/README.md
.agents/skills/cuopt-numerical-optimization-api/assets/cli/lp_production/README.md
.agents/skills/cuopt-numerical-optimization-api/assets/cli/lp_production/production.mps
.agents/skills/cuopt-numerical-optimization-api/assets/cli/lp_simple/README.md
.agents/skills/cuopt-numerical-optimization-api/assets/cli/lp_simple/sample.mps
.agents/skills/cuopt-numerical-optimization-api/assets/cli/milp_facility/README.md
.agents/skills/cuopt-numerical-optimization-api/assets/cli/milp_facility/facility.mps
.agents/skills/cuopt-numerical-optimization-api/assets/python/README.md
.agents/skills/cuopt-numerical-optimization-api/assets/python/least_squares/README.md
.agents/skills/cuopt-numerical-optimization-api/assets/python/least_squares/model.py
.agents/skills/cuopt-numerical-optimization-api/assets/python/lp_basic/README.md
.agents/skills/cuopt-numerical-optimization-api/assets/python/lp_basic/model.py
.agents/skills/cuopt-numerical-optimization-api/assets/python/lp_duals/README.md
.agents/skills/cuopt-numerical-optimization-api/assets/python/lp_duals/model.py
.agents/skills/cuopt-numerical-optimization-api/assets/python/lp_warmstart/README.md
.agents/skills/cuopt-numerical-optimization-api/assets/python/lp_warmstart/model.py
.agents/skills/cuopt-numerical-optimization-api/assets/python/maximization_workaround/README.md
.agents/skills/cuopt-numerical-optimization-api/assets/python/maximization_workaround/model.py
.agents/skills/cuopt-numerical-optimization-api/assets/python/milp_basic/README.md
.agents/skills/cuopt-numerical-optimization-api/assets/python/milp_basic/incumbent_callback.py
.agents/skills/cuopt-numerical-optimization-api/assets/python/milp_basic/model.py
.agents/skills/cuopt-numerical-optimization-api/assets/python/milp_production_planning/README.md
.agents/skills/cuopt-numerical-optimization-api/assets/python/milp_production_planning/model.py
.agents/skills/cuopt-numerical-optimization-api/assets/python/mps_solver/README.md
.agents/skills/cuopt-numerical-optimization-api/assets/python/mps_solver/data/README.md
.agents/skills/cuopt-numerical-optimization-api/assets/python/mps_solver/data/sample.mps
.agents/skills/cuopt-numerical-optimization-api/assets/python/mps_solver/model.py
.agents/skills/cuopt-numerical-optimization-api/assets/python/mps_solver/results.md
.agents/skills/cuopt-numerical-optimization-api/assets/python/portfolio/README.md
.agents/skills/cuopt-numerical-optimization-api/assets/python/portfolio/model.py
.agents/skills/cuopt-numerical-optimization-api/evals/evals.json
.agents/skills/cuopt-numerical-optimization-api/references/c_api.md
.agents/skills/cuopt-numerical-optimization-api/references/cli_api.md
.agents/skills/cuopt-numerical-optimization-api/references/python_api.md
.agents/skills/cuopt-numerical-optimization-api/references/qp_examples.md
.agents/skills/cuopt-numerical-optimization-api/skill-card.md
.agents/skills/cuopt-numerical-optimization-api/skill.oms.sig
.agents/skills/cuopt-numerical-optimization-formulation/BENCHMARK.md
.agents/skills/cuopt-numerical-optimization-formulation/SKILL.md
.agents/skills/cuopt-numerical-optimization-formulation/evals/evals.json
.agents/skills/cuopt-numerical-optimization-formulation/skill-card.md
.agents/skills/cuopt-numerical-optimization-formulation/skill.oms.sig
.claude/skills/accelerated-computing-cudf
.claude/skills/cuopt-numerical-optimization-api
.claude/skills/cuopt-numerical-optimization-formulation
.dockerignore
.env.example
.github/workflows/deploy-railway.yml
.gitignore
.streamlit/config.toml
AGENTS.md
CLAUDE.md
Dockerfile
README.md
app/DESIGN.md
app/PRODUCT.md
app/acknowledgements.py
app/ai_assistant.py
app/approvals.py
app/interactive_ui.py
app/local_analysis.py
app/main.py
app/onboarding_ui.py
app/presentation.py
app/source_explorer.py
app/styles.css
app/workflow.py
data/control/after/regulation.txt
data/control/before/regulation.txt
data/control/expected.json
data/sample/after/Положение_о_внутреннем_аудите_редакция_9_обезличено.docx
data/sample/before/Положение_о_внутреннем_аудите_редакция_8_обезличено.docx
init_project.sh
requirements.txt
scripts/eval_control.py
src/__init__.py
src/agent.py
src/config.py
src/parse.py
src/report.py
src/structure.py
tests/test_acknowledgements.py
tests/test_ai_assistant.py
tests/test_app.py
tests/test_app_interactions.py
tests/test_approvals.py
tests/test_comparisons.py
tests/test_local_analysis.py
tests/test_parse.py
tests/test_smoke.py
tests/test_source_explorer.py
tests/test_workflow.py
Ветки (2)

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

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

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