О проекте
Команда: linar
Кейс HackAlem.ai: Спецтрек — Казахтелеком
Стадия: Рабочий MVP
Задача кейса: Агент, сравнивающий документы оргструктуры до и после реорганизации
Суть
Локальное рабочее место аудитора: загружаются два комплекта ВНД (до и после реорганизации), система сравнивает пункты, функции и подразделения, формирует наблюдения с доказательствами и заключение.
Как устроено
Документы DOCX, PDF, XLSX, TXT и MD парсятся с привязкой к источнику (файл, пункт, страница или ячейка). Пункты одноимённых документов сравниваются clause-diff'ом, функции сопоставляются правилами и текстовым сходством, а для изменённых разделов формируются кандидаты-наблюдения с риском и нормативным основанием. Аудитор подтверждает или отклоняет каждое наблюдение, в отчёт (Markdown/PDF) попадают только подтверждённые. Дополнительная проверка через OpenAI (gpt-4.1-mini, gpt-4o-mini) или NVIDIA Llama 3.3 70B опциональна; ID источников, придуманные моделью, отклоняются.
Ключевые решения
- парсинг DOCX/PDF/XLSX
- clause diff
- rule-based и text-similarity сопоставление функций
- hash-vector поиск фрагментов
- мультипровайдерная проверка LLM
- human-in-the-loop подтверждение наблюдений
- pgvector (опционально)
Особенности
Источники восстанавливаются сервером, а не берутся у модели, поэтому придуманные ID отклоняются. Можно сравнить ответы двух провайдеров LLM. Есть учебная цифровая модель организации (подразделение → сотрудник → функция → полномочие). В README в примере .env указано значение, похожее на реальный OpenAI-идентификатор: это стоит проверить.
Стек
Node.js · JavaScript · PostgreSQL · pgvector · Docker Compose · jsdom
Модели
OpenAI gpt-4.1-mini · OpenAI gpt-4o-mini · NVIDIA meta/llama-3.3-70b-instruct
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-89355007-linar.
README
README.mdSIL
Локальное рабочее пространство аудитора для сравнения организационной структуры и функций до и после реорганизации. Кейс: «Анализ организационной структуры и функционала», Казахтелеком.
Запуск в Windows / PowerShell
Нужен Node.js 20.12+ (для загрузки .env; рекомендуется Node.js 22+).
git switch main
git pull --ff-only origin main
npm.cmd ci
npm.cmd test
npm.cmd start
Откройте http://localhost:3000. Если сервер уже запущен, сначала остановите его сочетанием Ctrl+C. После обновления файлов обновите страницу с Ctrl+F5.
Другой порт:
$env:PORT = "3001"
npm.cmd start
Для Linux/macOS: npm ci, npm test, npm start. Сервер слушает только 127.0.0.1.
Интерфейс
| Раздел | Возможности |
|---|---|
| Обзор | Статистика текущего анализа, переход к изменениям и наблюдениям |
| Документы | Два комплекта, перетаскивание и выбор файлов, удаление из очереди, проверка формата/размера, просмотр извлечённого текста |
| Сравнение | Функции, изменения пунктов, подразделения, извлечённые факты; поиск, фильтры и страницы |
| Наблюдения | Доказательства, нормативное основание, риск, рекомендация, подтверждение/отклонение и комментарий |
| Заключение | Предпросмотр, скачивание Markdown, печать/сохранение в PDF через браузер |
| Подразделения | Карточки структуры, руководителей, функций, полномочий, ответственности и процессов |
| Сотрудники | Синтетические ФИО, должности, образование, стаж, сертификаты и компетенции |
| Карта функций | Учебная AS-IS: подразделение → сотрудник → функция → полномочие → ответственность |
| База знаний | Поиск исходных фрагментов, применимые контрольные требования и каталог источников |
| Настройки ИИ | Состояние OpenAI/NVIDIA, дополнительная проверка функций, результаты и расхождения провайдеров |
Подразделения, сотрудники и карта AS-IS — отдельная учебная модель для просмотра; загруженные документы не подменяются этой моделью. Факты именно из документов доступны в Сравнение → Извлечение.
Проверка ваших двух положений
- В Документы добавьте редакцию 8 в «До», редакцию 9 — в «После».
- Оставьте объект пустым для всего комплекта или укажите «Внутренний аудит».
- Нажмите Запустить анализ. Для локального режима API-ключ не нужен.
- Откройте Сравнение → Пункты. В поиске укажите, например,
3.6. - Откройте источник: отображаются имя исходного файла, пункт, цитата и определённая парсером страница/ячейка.
- В Наблюдения проверьте доказательства, выберите решение, добавьте комментарий и нажмите Сохранить решение.
- В Заключение нажмите Сформировать заключение, затем скачайте
.mdили выберите Печать / PDF.
В отчёт включаются только подтверждённые наблюдения. Отклонённые и ожидающие проверки учитываются отдельно. Ноль подтверждений не означает отсутствие рисков.
Пункты сопоставляются внутри одноимённых документов с учётом обозначения редакции в названии; одинаковый номер пункта разных положений не объединяется. Изменения текста не равнозначны нарушениям. Для положения о внутреннем аудите автоматически формируются кандидаты по изменённым пунктам разделов 3, 5 и 7 (до 30 наблюдений); полный список текстовых изменений доступен во вкладке «Пункты».
Предоставленные пользователем положения не публикуются в репозитории. Их нужно выбрать из своих локальных файлов.
Демо без собственных документов
- Открыть учебный сценарий: разделение Департамента ИБ на Security Operations и Risk Department, одна функция не передана.
- Документы → Проверить 12 документов: реальные учебные DOCX/XLSX из
company_before/иcompany_after/.
Оба сценария создают полноценную сессию с источниками, решениями и отчётом.
ИИ
Создайте .env в корне проекта и задайте нужные переменные:
OPENAI_API_KEY=[скрыто]
OPENAI_MODEL=gpt-4.1-mini
NVIDIA_API_KEY=ваш_ключ
NVIDIA_MODEL=meta/llama-3.3-70b-instruct
Перезапустите сервер и откройте Настройки ИИ → Обновить статус. Не добавляйте .env в Git.
- При загрузке флажок ИИ по умолчанию выключен; для него нужен OpenAI. В этом режиме используются существующие модули сопоставления и извлечения с
gpt-4o-mini. - Дополнительная проверка в настройках поддерживает OpenAI, NVIDIA или оба провайдера. Для неё используются
OPENAI_MODEL/NVIDIA_MODEL. - Запросы внешним моделям запускаются только действиями пользователя. Тексты отправляются провайдеру; запросы могут тарифицироваться.
- Дополнительная проверка ограничена 60 функциями и 60 000 символами контекста. Результаты показываются отдельно; они автоматически не заменяют утверждённые наблюдения.
- Источники восстанавливаются сервером из исходного комплекта. Придуманные моделью ID отклоняются. Интерпретацию подтверждает аудитор.
- API-ключи хранятся на сервере. OpenAI вызывается с
store:false.
Сессии и хранение
По умолчанию сервер держит в памяти до 20 анализов. Браузер запоминает только ID текущей сессии. После обновления страницы анализ и сохранённые решения восстанавливаются, пока работает тот же сервер. При перезапуске сервера сессии в памяти исчезают; интерфейс объясняет необходимость повторной загрузки. Несохранённые изменения защищены предупреждением при закрытии страницы.
Для PostgreSQL/pgvector задайте DATABASE_URL и используйте compose.yaml. Схема находится в db/schema.sql; настройка описана в STAGE712.md. В этом режиме анализы, фрагменты и решения записываются в базу. Поле статуса показывает наличие конфигурации, а не проверку доступности базы.
Форматы и ограничения
- DOCX, PDF с текстовым слоем, XLSX, TXT и MD.
- Не более 30 файлов / 30 МБ в комплекте; не более 15 МБ на файл.
- PDF-сканы требуют отдельного OCR. Графические схемы не распознаются.
- Для DOCX сохраняются номер пункта и текст; номер страницы не выдумывается.
- Локальное сопоставление функций использует правила и текстовое сходство. «Не найдено» означает отсутствие совпадения в представленном комплекте.
- Внешние законы/стандарты в каталоге представлены ссылками; автоматическая юридическая оценка по полным текстам не выполняется. Требования из загруженных ВНД — кандидаты для экспертной проверки.
- Поиск фрагментов использует простые хеш-векторы. Это не семантическая модель embeddings.
- Приложение предназначено для локальной демонстрации с доверенными документами. Авторизация и промышленная изоляция парсеров не реализованы.
Тестирование
npm.cmd ci
npm.cmd test
Запускаются только тесты из папки test/ текущего проекта: вложенные старые копии репозитория игнорируются.
Проверяются парсеры DOCX/PDF/XLSX, сопоставление функций, валидация ответов ИИ, источники, требования, сохранение решений, восстановление сессии и фильтрация заключения. Интеграционные DOM-тесты на jsdom подключаются к реальному локальному API и проходят основные действия интерфейса: загрузка, карточки, поиск, пагинация, источники, подтверждение и отчёт. Они не заменяют визуальную проверку в браузере. Реальные платные API в тестах не вызываются.
Основные файлы
public/index.html,public/style.css,public/workspace-ui.js— интерфейс без сборки и фреймворков.server.js— HTTP, документы, аудит и сессии.lib/document-parser.js— извлечение текста и метаданных источников.lib/analyzer.js,lib/agent.js,lib/ai.js— локальное и ИИ-сопоставление.lib/audit.js,lib/clause-diff.js,lib/document-requirements.js— наблюдения, сравнение пунктов, требования и заключение.lib/knowledge.js,lib/storage.js— поиск и необязательное хранение в PostgreSQL.test/workspace.test.js— интеграционные проверки нового интерфейса.
Этапы 4–6: STAGE456.md. Этапы 7–12: STAGE712.md.
Авторы коммитов
История коммитов
- 2026-09-23 17:58Rename project to SIL and update descriptionliiinar404
- 2026-09-23 17:56Change OPENAI_API_KEY example in READMEliiinar404
- 2026-09-23 17:54Обновить main: рабочий интерфейс OrgLens и сквозной сценарий аудитаAmangeldy18
- 2026-09-23 17:53feat(ui): рабочее пространство аудитора с загрузкой, источниками и заключениемAmangeldy18
- 2026-09-23 17:25Исправить запуск аудита без ключа и экспорт заключенияAmangeldy18
- 2026-09-23 17:25Исправить запуск анализа без ключа и экспорт заключения аудитораAmangeldy18
- 2026-09-23 17:18Этапы 7–12: аудит документов и заключениеAmangeldy18
- 2026-09-23 17:16Добавить аудит документов с пунктами, базой знаний и заключениемAmangeldy18
Все коммиты (70)
- 2026-09-23 16:56Исправить запуск тестов при вложенной копии проектаAmangeldy18
- 2026-09-23 16:56Исправить поиск тестов при вложенных копиях проектаAmangeldy18
- 2026-09-23 16:51Этапы 4–6: документы и база контрольных требованийAmangeldy18
- 2026-09-23 16:37Добавить документы компании и базу контрольных требованийAmangeldy18
- 2026-09-23 16:22Добавить карту функций AS-ISAmangeldy18
- 2026-09-23 16:16Этап 3: карта функций AS-IS — STAGE3.mdAmangeldy18
- 2026-09-23 16:16Этап 3: карта функций AS-IS — test/function-map.test.jsAmangeldy18
- 2026-09-23 16:16Этап 3: карта функций AS-IS — public/function-map-ui.jsAmangeldy18
- 2026-09-23 16:16Этап 3: карта функций AS-IS — lib/function-map.jsAmangeldy18
- 2026-09-23 16:15Этап 3: карта функций AS-IS — public/style.cssAmangeldy18
- 2026-09-23 16:15Этап 3: карта функций AS-IS — public/index.htmlAmangeldy18
- 2026-09-23 16:15Этап 3: карта функций AS-IS — public/app.jsAmangeldy18
- 2026-09-23 16:15Этап 3: карта функций AS-IS — server.jsAmangeldy18
- 2026-09-23 16:11Добавил синтетических сотрудников компанииliiinar404
- 2026-09-23 16:02Этап 2: синтетические сотрудники — STAGE2.mdAmangeldy18
- 2026-09-23 16:02Этап 2: синтетические сотрудники — test/employees.test.jsAmangeldy18
- 2026-09-23 16:01Этап 2: синтетические сотрудники — public/employees-ui.jsAmangeldy18
- 2026-09-23 16:01Этап 2: синтетические сотрудники — lib/employees.jsAmangeldy18
- 2026-09-23 16:01Этап 2: связать сотрудников с интерфейсом — public/style.cssAmangeldy18
- 2026-09-23 16:01Этап 2: связать сотрудников с интерфейсом — public/index.htmlAmangeldy18
- 2026-09-23 16:01Этап 2: связать сотрудников с интерфейсом — public/app.jsAmangeldy18
- 2026-09-23 16:01Этап 2: связать сотрудников с интерфейсом — server.jsAmangeldy18
- 2026-09-23 15:56Добавить цифровую модель учебной организацииAmangeldy18
- 2026-09-23 15:46Change project name to SIL-auditliiinar404
- 2026-09-23 15:45Этап 1: цифровая модель организации — STAGE1.mdAmangeldy18
- 2026-09-23 15:44Этап 1: цифровая модель организации — test/organization.test.jsAmangeldy18
- 2026-09-23 15:44Этап 1: цифровая модель организации — public/organization-ui.jsAmangeldy18
- 2026-09-23 15:44Этап 1: цифровая модель организации — lib/organization.jsAmangeldy18
- 2026-09-23 15:44Этап 1: показать модель организации — public/style.cssAmangeldy18
- 2026-09-23 15:44Этап 1: показать модель организации — public/index.htmlAmangeldy18
- 2026-09-23 15:44Этап 1: показать модель организации — public/app.jsAmangeldy18
- 2026-09-23 15:44Этап 1: показать модель организации — server.jsAmangeldy18
- 2026-09-23 15:26Добавить ИИ-агента и экспертную проверку оргструктурыAmangeldy18
- 2026-09-23 15:26Добавить агентный анализ: test/semantic.test.jsAmangeldy18
- 2026-09-23 15:25Добавить агентный анализ: test/agent.test.jsAmangeldy18
- 2026-09-23 15:25Добавить агентный анализ: lib/semantic.jsAmangeldy18
- 2026-09-23 15:25Добавить агентный анализ: lib/agent.jsAmangeldy18
- 2026-09-23 15:25Свести ИИ-анализ и экспертную проверку: test/analyzer.test.jsAmangeldy18
- 2026-09-23 15:25Свести ИИ-анализ и экспертную проверку: lib/analyzer.jsAmangeldy18
- 2026-09-23 15:25Свести ИИ-анализ и экспертную проверку: public/style.cssAmangeldy18
- 2026-09-23 15:24Свести ИИ-анализ и экспертную проверку: public/index.htmlAmangeldy18
- 2026-09-23 15:24Свести ИИ-анализ и экспертную проверку: public/app.jsAmangeldy18
- 2026-09-23 15:24Свести ИИ-анализ и экспертную проверку: server.jsAmangeldy18
- 2026-09-23 15:24Свести ИИ-анализ и экспертную проверку: README.mdAmangeldy18
- 2026-09-23 15:08Добавлена интеграция с OpenAI APIAmangeldy Sultan
- 2026-09-23 13:59изменил readmeitamijvx
- 2026-09-23 14:54Добавить ИИ-агента: test/agent.test.jsAmangeldy18
- 2026-09-23 14:54Добавить ИИ-агента: lib/agent.jsAmangeldy18
- 2026-09-23 14:53Интегрировать ИИ-агента в анализ: README.mdAmangeldy18
- 2026-09-23 14:53Интегрировать ИИ-агента в анализ: public/style.cssAmangeldy18
- 2026-09-23 14:53Интегрировать ИИ-агента в анализ: public/index.htmlAmangeldy18
- 2026-09-23 14:53Интегрировать ИИ-агента в анализ: public/app.jsAmangeldy18
- 2026-09-23 14:53Интегрировать ИИ-агента в анализ: server.jsAmangeldy18
- 2026-09-23 14:47Добавить смысловой поиск: test/semantic.test.jsAmangeldy18
- 2026-09-23 14:47Добавить смысловой поиск: lib/semantic.jsAmangeldy18
- 2026-09-23 14:46Добавить экспертную проверку и аналитику: test/analyzer.test.jsAmangeldy18
- 2026-09-23 14:46Добавить экспертную проверку и аналитику: public/style.cssAmangeldy18
- 2026-09-23 14:46Добавить экспертную проверку и аналитику: public/app.jsAmangeldy18
- 2026-09-23 14:46Добавить экспертную проверку и аналитику: lib/analyzer.jsAmangeldy18
- 2026-09-23 14:46Добавить экспертную проверку и аналитику: server.jsAmangeldy18
- 2026-09-23 14:46Добавить экспертную проверку и аналитику: README.mdAmangeldy18
- 2026-09-23 14:21сделал локальное веб-приложение с демонстрационным анализом и загрузкой текстовых файловAmangeldy Sultan
Структура репозитория (78 файлов)
.env.example .gitignore README.md STAGE1.md STAGE2.md STAGE3.md STAGE456.md STAGE712.md company_after/Должностные инструкции.docx company_after/Оргструктура компании.xlsx company_after/Положение о Департаменте ИБ.docx company_after/Положение о внутреннем аудите.docx company_after/Положение об ИТ-департаменте.docx company_after/Приказ о реорганизации.docx company_before/Должностные инструкции.docx company_before/Оргструктура компании.xlsx company_before/Положение о Департаменте ИБ.docx company_before/Положение о внутреннем аудите.docx company_before/Положение об ИТ-департаменте.docx company_before/Приказ о реорганизации.docx compose.yaml db/schema.sql examples/after/Положение о внутреннем контроле.txt examples/after/Положение о департаменте закупок.txt examples/after/Положение о департаменте экономики и финансов.txt examples/after/Положение о юридическом отделе.txt examples/after/Приложение № 1 — новая структура.txt examples/before/Положение о финансовом департаменте.txt examples/before/Положение о юридическом отделе.txt examples/before/Положение об управлении закупок.txt lib/agent.js lib/ai.js lib/analyzer.js lib/audit.js lib/clause-diff.js lib/demo.js lib/document-parser.js lib/document-requirements.js lib/employees.js lib/extraction-agent.js lib/function-map.js lib/knowledge.js lib/organization.js lib/regulatory.js lib/scenario.js lib/semantic.js lib/storage.js package-lock.json package.json public/ai-ui.js public/app.js public/audit-ui.js public/employees-ui.js public/function-map-ui.js public/index.html public/organization-ui.js public/style.css public/workspace-ui.js regulatory/README.md regulatory/catalog.json regulatory/requirements.json scripts/build_documents.py scripts/build_workbooks.mjs scripts/document-data.json scripts/normalize_workbooks.py scripts/run-tests.mjs server.js test/agent.test.js test/ai.test.js test/analyzer.test.js test/api.test.js test/audit.test.js test/employees.test.js test/function-map.test.js test/organization.test.js test/regulatory.test.js test/semantic.test.js test/workspace.test.js
Ветки (11)
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.