Анализ организационной структуры и функций
Streamlit-прототип сравнивает документы оргструктуры «до» и «после» (DOCX/PDF/XLSX), находит изменённые, потерянные, дублирующиеся и пересекающиеся…
О проекте
Команда: West side
Кейс HackAlem.ai: Спецтрек — Казахтелеком
Стадия: Рабочий MVP
Задача кейса: Агент, сравнивающий документы оргструктуры до и после реорганизации
Суть
Streamlit-прототип сравнивает документы оргструктуры «до» и «после» (DOCX/PDF/XLSX), находит изменённые, потерянные, дублирующиеся и пересекающиеся функции со ссылками на источник и экспортирует заключение в Markdown.
Как устроено
Экстракторы (python-docx, PyMuPDF, openpyxl) извлекают текст и фрагменты. Эвристические правила выделяют подразделения и функции. Функции двух версий сопоставляются по текстовому сходству, по результатам формируются наблюдения об изменениях, потерях, дублировании и пересечениях с исходными фрагментами. В последнем коммите добавлена приоритизация подразделений по риску. Внешний AI API не используется.
Ключевые решения
- heuristic function extraction
- text similarity matching
- department risk prioritization
Особенности
Решение полностью локальное, без LLM, у каждого наблюдения указан исходный фрагмент документа.
Стек
Python · Streamlit · python-docx · PyMuPDF · openpyxl · pytest
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-a4cdff0f-west-side.
README
README.mdАнализ организационной структуры и функций
Прототип для автоматизированного сравнения двух версий организационных документов — «До» и «После».
Система извлекает текст из документов, сопоставляет функции и формирует аналитическое заключение с указанием источников. Решение помогает находить изменения функций, потенциальные потери, дублирование, пересечения ответственности и изменения подразделений.
Что реализовано
- загрузка документов версий «До» и «После»;
- поддержка DOCX, PDF, XLSX и XLSM;
- извлечение текста и фрагментов документов;
- определение подразделений и функций;
- сопоставление функций между версиями документов;
- поиск изменений функций;
- выявление потенциально потерянных функций;
- выявление возможного дублирования и пересечения ответственности;
- отображение источника каждого наблюдения;
- аналитическая сводка результатов;
- экспорт заключения в Markdown;
- интерфейс на Streamlit;
- автоматические тесты основного сценария.
Как работает решение
- Пользователь загружает исходную версию документа в блок «До».
- Пользователь загружает обновлённую версию в блок «После».
- Система извлекает текст и структурирует фрагменты документов.
- Правила анализа определяют функции и подразделения.
- Функции версий «До» и «После» сопоставляются по текстовому сходству.
- Система формирует наблюдения об изменениях, потерях, дублировании и пересечениях.
- Для результатов отображаются исходные фрагменты документов.
- Пользователь может просмотреть аналитическое заключение и скачать его в Markdown.
Технологии и архитектура
- Python
- Streamlit
- python-docx
- PyMuPDF
- openpyxl
- pytest
Основные компоненты:
analyzer/extractors.py— извлечение данных из документов;analyzer/findings.py— анализ функций и формирование наблюдений;analyzer/matching.py— сопоставление функций;analyzer/models.py— модели данных;analyzer/report.py— формирование аналитического заключения;app.py— пользовательский интерфейс Streamlit.
Установка
pip install -r requirements.txt
Запуск
streamlit run app.py
После запуска откройте локальный адрес, указанный Streamlit в терминале.
Проверка
Для запуска автоматических тестов:
pytest
Основной пользовательский сценарий:
- Загрузить документ «До».
- Загрузить документ «После».
- Нажать «Запустить анализ».
- Проверить найденные изменения и их источники.
- Просмотреть сопоставление функций и аналитическое заключение.
Данные и внешние сервисы
Документы обрабатываются локально приложением. Текущая версия прототипа не требует внешнего AI API для выполнения основного анализа.
Ограничения
- Определение подразделений и функций основано на эвристических правилах и зависит от структуры исходных документов.
- В сложных или нестандартно оформленных документах название подразделения может быть определено неточно.
- Результаты автоматического анализа носят рекомендательный характер и требуют экспертной проверки.
- Старые форматы
.docи.xlsнеобходимо предварительно сохранить в современном формате. - Сопоставление функций основано на текстовом сходстве и не является полноценным семантическим анализом.
Команда
Проект разработан командой West Side в рамках HackAlem AI.
Авторы коммитов
История коммитов
- 2026-09-23 17:55feat: add department risk prioritizationAmanzhankyzy Amina
- 2026-09-23 17:13docs: update README and improve unit detectionSabina Saratayeva
- 2026-09-23 16:24fix: correct test indentationSabina Saratayeva
- 2026-09-23 16:11Merge pull request #3 from BAITC-Hacks/Fatimanurlanf1
- 2026-09-23 16:04Merge pull request #2 from BAITC-Hacks/Sabina-SaratayevaSaratayeva Sabina
- 2026-09-23 16:04Merge pull request #1 from BAITC-Hacks/Amina-Amanzhankyzyaminaamanzhankyzy
- 2026-09-23 15:56report: improve findings formattingSabina Saratayeva
- 2026-09-23 15:54report: add analysis summarySabina Saratayeva
Все коммиты (16)
- 2026-09-23 15:51report: add expert review noticeSabina Saratayeva
- 2026-09-23 15:35ui: add analysis disclaimernurlanf1
- 2026-09-23 15:33ui: add document upload guidancenurlanf1
- 2026-09-23 15:27docs: add project launch instructionsnurlanf1
- 2026-09-23 15:08Add finding source validation testAmanzhankyzy Amina
- 2026-09-23 15:07Add empty documents validation testAmanzhankyzy Amina
- 2026-09-23 15:06Add empty after validation testAmanzhankyzy Amina
- 2026-09-23 13:38Implement hackathon solutionSabina Saratayeva
Структура репозитория (17 файлов)
.env.example .gitignore README.md analyzer/__init__.py analyzer/extractors.py analyzer/findings.py analyzer/matching.py analyzer/models.py analyzer/report.py app.py pyproject.toml requirements.txt sample_data/README.md sample_data/after.xlsx sample_data/before.docx sample_data/create_samples.py tests/test_analysis.py
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.