AAYMA
RU
Войти

SIL

Локальное рабочее место аудитора: загружаются два комплекта ВНД (до и после реорганизации), система сравнивает пункты, функции и подразделения…

Рабочий MVP
Команда «linar» 9💬 0 комментариевс 23 сентября 2026 г.

О проекте

Команда: 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.md

SIL

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

Запуск в 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 — отдельная учебная модель для просмотра; загруженные документы не подменяются этой моделью. Факты именно из документов доступны в Сравнение → Извлечение.

Проверка ваших двух положений

  1. В Документы добавьте редакцию 8 в «До», редакцию 9 — в «После».
  2. Оставьте объект пустым для всего комплекта или укажите «Внутренний аудит».
  3. Нажмите Запустить анализ. Для локального режима API-ключ не нужен.
  4. Откройте Сравнение → Пункты. В поиске укажите, например, 3.6.
  5. Откройте источник: отображаются имя исходного файла, пункт, цитата и определённая парсером страница/ячейка.
  6. В Наблюдения проверьте доказательства, выберите решение, добавьте комментарий и нажмите Сохранить решение.
  7. В Заключение нажмите Сформировать заключение, затем скачайте .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.

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

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

Amangeldy18 63liiinar404 4Amangeldy Sultan 2itamijvx 1

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

  • 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 комментариев

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

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