AAYMA
RU
Войти

БАТЫС AI

Объяснимый агент, который сравнивает комплекты документов оргструктуры до и после реорганизации.

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

О проекте

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

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

Суть

Объяснимый агент, который сравнивает комплекты документов оргструктуры до и после реорганизации. Он находит созданные, сохранённые и упразднённые подразделения, потерю и сужение функций, дублирование и конфликты полномочий, а к каждому выводу даёт цитату и номер пункта. Есть веб-версия (PWA), мобильное приложение на Expo и роль эксперта, который подтверждает или отклоняет выводы.

Как устроено

DOCX, PDF, XLSX и TXT разбираются через mammoth, pdf-parse и ExcelJS. Собственный детерминированный алгоритм (русский стеммер, глобальное сопоставление пунктов, учёт перехода функций) строит таблицу «пункт ДО ↔ пункт ПОСЛЕ» с процентом сходства и статусами. По желанию включается AI-агент с tool calling (search_document, read_clause, submit_verdict): он перепроверяет только готовых кандидатов, а каждая его ссылка на пункт сверяется с документом. Анализы и решения эксперта хранятся в PostgreSQL (JSONB), итог выгружается печатным HTML-заключением.

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

  • русский стеммер
  • глобальное сопоставление функций
  • tool calling (search_document/read_clause/submit_verdict)
  • проверка ссылок агента на пункты
  • RACI-рекомендации
  • JWT-роли expert/admin

Особенности

Основной результат даёт детерминированное ядро, которому не нужен ключ. LLM-агент только перепроверяет готовых кандидатов, а ссылки на несуществующие пункты подсвечиваются красным, поэтому выдумать доказательство нельзя. Ожидания по контрольному комплекту организатора (редакции 8→9) закреплены в автотесте. Есть мобильный клиент на Expo и одностраничная презентация в PDF.

Стек

Node.js 22 · Express 5 · PostgreSQL 16 · Docker Compose · Expo / React Native · PWA (vanilla HTML/CSS/JS) · mammoth · pdf-parse · ExcelJS

Модели

OpenAI (OPENAI_MODEL) · NVIDIA NIM deepseek-ai/deepseek-v4.1-flash


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

README

README.md

БАТЫС AI

Объяснимый ИИ-агент для анализа организационной структуры и функционала. Кейс HackAlem AI «Анализ организационной структуры и функционала», команда БАТЫС.

Агент сравнивает комплекты документов «до» и «после» реорганизации: оргструктуры, положения, должностные инструкции, приказы (Word, PDF, Excel). На каждую сторону можно загрузить до 10 файлов. Он определяет созданные, сохранённые, преобразованные и упразднённые подразделения, строит таблицу сопоставления функций, находит потери, сужения, переносы, дублирование и конфликты полномочий. Каждый вывод подтверждается номером пункта и цитатой из исходного документа. Окончательное решение принимает эксперт.

Результаты анализа

Презентация на одном листе: docs/presentation.html. Там схема архитектуры, путь анализа, находки на контрольном комплекте и сверка с ТЗ. Готовый PDF для печати и показа: docs/batys-ai-presentation.pdf.

Быстрый старт: 1 команда, 1 клик

git clone https://github.com/BAITC-Hacks/hack-032ef148-team.git
cd hack-032ef148-team
docker compose up --build

Откройте http://localhost:4180 и нажмите «▶ Положение о внутреннем аудите: редакция 8 → 9». Агент проанализирует контрольный комплект организатора примерно за секунду.

Запуск без Docker (Node.js 22+)
npm install
npm start          # http://127.0.0.1:4180, хранение в памяти

Чтобы использовать PostgreSQL без Docker, укажите DATABASE_URL в .env (шаблон: .env.example).

Соответствие ТЗ

Требование ТЗ (Must have)Как реализовано
1. Какие подразделения реорганизованы, сохранены, созданыВкладка «Подразделения»: статусы создано / сохранено / преобразовано / упразднено с учётом перехода функций. Отдельно выявляются упразднённые позиции-владельцы функций
2. Сопоставить функционал, выявить потерю функцийВкладка «Сопоставление функций»: таблица «пункт ДО ↔ пункт ПОСЛЕ» со статусом и % сходства. Выводы «Потеря функции» и «Сужение функции»
3. Дублирование и конфликт интересовСравнение функций разных владельцев в новой редакции. Типовые обязанности руководителей отфильтрованы. Контрольные функции у двух владельцев помечаются как конфликт полномочий
4. Подтверждающий источник для каждого выводаУ каждого вывода есть документ, номер пункта, владелец и цитата. Проверяется автотестом
5. Итоговое аналитическое заключениеКнопка «Открыть отчёт»: печатное заключение с итогом, таблицами и статусами экспертной проверки
Ограничение: выводы рекомендательныеКаждый вывод эксперт подтверждает или отклоняет с комментарием. Прогресс проверки виден в интерфейсе и в отчёте
Ограничение: без неподтверждённых утвержденийДетерминированное ядро не может сослаться на несуществующий пункт. AI-агент проверяет только готовых кандидатов, а каждая его ссылка на пункт сверяется с документом (AI-контракт)
Опционально: рекомендации по перераспределениюУ каждого вывода есть рекомендация: назначить владельца, развести зоны через RACI, подтвердить передачу

Проверка на контрольном комплекте

ТЗ, п. 11: «проверяется, обнаружил ли агент реорганизацию, потерю функции и дублирование и указал ли корректные источники». Результат на samples/ (редакции 8 → 9):

Что изменилось в документахЧто нашёл агентИсточник
Созданы ДИТААД и ДОАСоздано подразделение ×2п. 3.4 ред. 9
ДНМ и ДККМ сохраненыСохранено ×2, указано, сколько функций осталось за каждымп. 3.4
Упразднена должность «Директор направления внутреннего аудита»Упразднён владелец функций: 10 из 12 функций перешли к директорам департаментовп. 5.3 ред. 8
У ДККМ исключены «анализ результатов непрерывного аудита» и «предложения в план работ»Потеря функции: осталась только у ДНМп. 5.5.4, 5.5.10 ред. 8
Из отчётности ДККМ выпала периодичность «ежеквартально и по итогам года»Сужение функциип. 5.5.5 → 5.5.3
Функции директоров департаментов пересекаются с функциями директора ДНМВозможное дублирование, конфликт полномочийп. 5.3.x ↔ 5.4.x ред. 9

Эти ожидания зафиксированы в автотесте test/analyzer.test.mjs:

npm test     # 11 тестов: контрольный комплект организатора, AI-агент на подставной модели, загрузка комплекта файлов, авторизация и роли, помощь и заключение

Демонстрационный сценарий (5 минут)

  1. Главный экран: кнопка «▶ Положение о внутреннем аудите: редакция 8 → 9».
  2. Метрики: подразделения, потери, сужения, переносы, дубли, конфликты.
  3. Фильтр «Потери»: ДККМ 5.5.4 и цитаты «ДО/ПОСЛЕ» рядом.
  4. Вкладка «Подразделения»: созданы ДИТААД и ДОА, сохранены ДНМ и ДККМ.
  5. Вкладка «Сопоставление функций», фильтр «Сужены»: пропавшая периодичность отчётов.
  6. Нажать «Подтвердить»: откроется вход эксперта, зарегистрироваться. Подтвердить один вывод и отклонить другой с комментарием, показать подпись эксперта и прогресс проверки.
  7. «Открыть отчёт»: печатное заключение.
  8. Показать то же на телефоне в приложении Expo (или PWA).

В интерфейсе есть раздел «Помощь» с пошаговой инструкцией и скриншотами. Там же показан QR-код и адрес для открытия системы на телефоне. В мобильном приложении есть такая же вкладка «Помощь» и ссылка на веб-версию.

Второй набор, «Синтетический пример», показывает упразднение отдела с передачей 2 из 3 функций и потерю антикоррупционной функции.

Технологии

СлойСтекПочему
СерверNode.js 22+, Express 5, Helmet, rate-limit, JWT (jsonwebtoken), scryptОдин язык с фронтендом и мобильным приложением, быстрый старт
Разбор документовmammoth (DOCX), pdf-parse (PDF), ExcelJS (XLSX), CSV/TXTФорматы из ТЗ: Word, PDF, Excel
АнализСобственный объяснимый алгоритм: русский стеммер, глобальное сопоставление, переход функцийПрослеживаемость и воспроизводимость
AIAI-агент с tool calling: OpenAI или NVIDIA NIM (опционально)Сам ищет доказательства в документах, ссылки проверяются, решение за экспертом
База данныхPostgreSQL 16 (JSONB), резервный режим в памятиИстория анализов и решений эксперта
ВебHTML/CSS/JS без фреймворка, PWAЛёгкий, устанавливается на телефон
МобильноеExpo SDK 57 / React Native, Android и iOSОдин код для двух платформ, запуск через Expo Go
ИнфраструктураDocker Compose (app + db), healthcheckЗапуск одной командой

Подробности: архитектура и алгоритм · AI-контракт · безопасность · мобильные клиенты.

Мобильное приложение (Android и iOS)

cd mobile
npm install
EXPO_PUBLIC_API_URL=http://<IP-компьютера>:4180 npx expo start

Отсканируйте QR-код в Expo Go. Возможности: загрузка файлов с телефона, демо в одно нажатие, выводы с цитатами, экспертная проверка, история. Инструкция и сборка APK: docs/MOBILE.md.

API

МетодПутьНазначение
GET/api/healthГотовность, режим AI и хранилища
GET/api/demoСписок демо-наборов
POST/api/demo/:idАнализ демо-набора (real, synthetic)
POST/api/analysesmultipart: before и after — комплекты до 10 файлов на сторону, name, useAi
GET/api/analysesИстория анализов
GET/api/analyses/:idПолный результат: findings, units, functionMap, summary
PATCH/api/analyses/:id/findings/:findingIdРешение эксперта {status, comment}, нужен вход
GET/api/analyses/:id/reportПечатное заключение (HTML)
POST/api/auth/signup · /signin · /logoutРегистрация, вход (возвращает JWT), выход с отзывом токенов
GET/api/auth/meТекущий пользователь
GET · PATCH · DELETE/api/users, /api/users/:idУправление пользователями и ролями (только admin)

Пользователи и роли

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

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

Для постоянного входа задайте JWT_SECRET в .env. Подробнее: SECURITY.md.

AI-агент (опционально)

Включается переключателем «AI-агент проверки выводов». По каждому значимому выводу (до AI_MAX_FINDINGS, по умолчанию 12, сначала критичные) агент сам ведёт расследование через инструменты:

  1. search_document — ищет функцию в редакции «до» или «после» (в том числе другими словами, чтобы отличить перенос от потери);
  2. read_clause — читает найденный пункт целиком;
  3. submit_verdict — выносит вердикт (подтверждён / сомнителен, уверенность, обоснование, рекомендация) со ссылками на пункты.

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

Провайдер задаётся в .env: OPENAI_API_KEY (ключ sk-… с platform.openai.com, модель OPENAI_MODEL) или NVIDIA_API_KEY (ключ nvapi-… с build.nvidia.com, модель NVIDIA_MODEL, по умолчанию deepseek-ai/deepseek-v4.1-flash). Ключ другого вида сервер игнорирует. Если ключа нет или произошла ошибка, сохраняется локальный результат. Основной сценарий работает полностью без ключа.

Данные

  • samples/polozhenie-vnutrenniy-audit-red-8.docx, …-red-9.docx: обезличенный контрольный комплект организатора.
  • samples/synthetic/: синтетический пример, придуман командой, совпадения случайны.

Ограничения

  • Стеммер упрощённый. Для других типов документов (должностные инструкции, приказы) могут понадобиться новые шаблоны заголовков.
  • Проверка соответствия внешним нормативам и бенчмаркинг с другими операторами (опциональные пункты ТЗ) не реализованы.
  • Авторизация по email и паролю. Для промышленного контура нужны корпоративный SSO, TLS и антивирусная проверка, см. SECURITY.md.
  • Мобильное приложение проверено сборкой бандлов Android/iOS и expo-doctor. На физических устройствах в рамках хакатона оно не тестировалось.

Команда и вклад

  • Команда: БАТЫС
  • Бисенбаев Султан Бекрикулы: постановка задачи, продуктовая логика, проверка требований ТЗ, демо-сценарий, разработка с использованием AI-агентов (Codex, Claude Code).
Звёзды
⭐ 1
Форки
0
Язык
JavaScript
Последний push
в прошлом месяце
Коммиты
22
Авторы
1
Файлы
68
Ветки
1

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

Sultan 22

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

  • 2026-09-23 17:56Revalidate static files on every loadSultan
  • 2026-09-23 17:51Fix the collapsed sidebar spilling text over the page titleSultan
  • 2026-09-23 17:50Add the presentation as an A4 PDFSultan
  • 2026-09-23 17:48Add a one-page presentation in hand-drawn sketch styleSultan
  • 2026-09-23 17:46Remove the TaskForge AI prototype from another caseSultan
  • 2026-09-23 17:41Restyle the web app as dark glassmorphism with neon accentsSultan
  • 2026-09-23 17:37Load styles and scripts over HTTP when opened by LAN addressSultan
  • 2026-09-23 17:26Review findings with a tool-using AI agent (OpenAI or NVIDIA)Sultan
Все коммиты (22)
  • 2026-09-23 17:24Split help into web and mobile guides with a proper help iconSultan
  • 2026-09-23 17:19Ignore OpenAI keys that are not sk- API keysSultan
  • 2026-09-23 17:19Suggest a new owner for lost and duplicated functionsSultan
  • 2026-09-23 17:14Accept a set of documents per side, as the task scenario requiresSultan
  • 2026-09-23 17:10Add in-app help with screenshots and cross-links between web and mobileSultan
  • 2026-09-23 17:00Add JWT sign-in with expert and admin rolesSultan
  • 2026-09-23 16:52Run the mobile app in a browser via Expo webSultan
  • 2026-09-23 16:41Set explicit Compose project nameSultan
  • 2026-09-23 16:40Build БАТЫС AI: explainable org-structure analysis agent (HackAlem case)Sultan
  • 2026-09-23 15:46Build TaskForge AI hackathon MVPSultan
  • 2026-09-23 15:46Add project chat handoff for VS CodeSultan
  • 2026-09-23 15:46Initial commitSultan
  • 2026-09-23 15:46Protect API keys and local filesSultan
  • 2026-09-23 15:46Add API environment templateSultan
Структура репозитория (68 файлов)
.dockerignore
.env.example
.gitignore
Dockerfile
README.md
docker-compose.yml
docs/AI_CONTRACT.md
docs/ARCHITECTURE.md
docs/CHAT_HISTORY.md
docs/MOBILE.md
docs/SECURITY.md
docs/batys-ai-presentation.pdf
docs/presentation.html
docs/screenshots/function-map.png
docs/screenshots/home.png
docs/screenshots/mobile-web.png
docs/screenshots/results.png
docs/screenshots/units.png
mobile/.gitignore
mobile/AGENTS.md
mobile/App.js
mobile/CLAUDE.md
mobile/LICENSE
mobile/README.md
mobile/app.json
mobile/assets/android-icon-background.png
mobile/assets/android-icon-foreground.png
mobile/assets/android-icon-monochrome.png
mobile/assets/favicon.png
mobile/assets/icon.png
mobile/assets/splash-icon.png
mobile/index.js
mobile/package-lock.json
mobile/package.json
package-lock.json
package.json
public/app.js
public/help/1-start.png
public/help/2-results.png
public/help/3-evidence.png
public/help/4-units.png
public/help/5-functions.png
public/help/6-login.png
public/help/7-report.png
public/help/mobile-1.png
public/help/mobile-2.png
public/icon.svg
public/index.html
public/manifest.webmanifest
public/styles.css
public/sw.js
samples/polozhenie-vnutrenniy-audit-red-8.docx
samples/polozhenie-vnutrenniy-audit-red-9.docx
samples/synthetic/polozhenie-bva-redakciya-8.txt
samples/synthetic/polozhenie-bva-redakciya-9.txt
src/ai-agent.mjs
src/analyzer.mjs
src/app.mjs
src/auth.mjs
src/config.mjs
src/connect.mjs
src/parser.mjs
src/report.mjs
src/server.mjs
src/store.mjs
test/ai-agent.test.mjs
test/analyzer.test.mjs
test/api.test.mjs

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

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

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