AAYMA
RU
Войти

Vivalet — AI Organization Auditor

Прототип, сравнивающий документы оргструктуры «до» и «после» реорганизации: находит перемещённые, потерянные, дублирующиеся функции и конфликты…

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

О проекте

Команда: vivalet
Кейс HackAlem.ai: Спецтрек — Казахтелеком
Стадия: Рабочий MVP

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

Суть

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

Как устроено

PDF/DOCX/XLSX парсятся (pdf-parse, Mammoth, SheetJS) во фрагменты с местоположением (раздел, страница, абзац). OpenAI Responses API со строгой JSON-схемой извлекает подразделения и функции, embeddings text-embedding-3-small ищут кандидатов соответствия, отдельные запросы делают смысловую проверку и итоговое заключение. Валидатор оставляет только выводы с точной цитатой из исходного фрагмента, остальное — в needsReview; без ключа работает режим правил. Результаты в SQLite через Prisma, экспорт JSON/Markdown.

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

  • structured output JSON schema
  • embeddings similarity matching
  • проверка точных цитат
  • детекция конфликта функций исполнения и контроля
  • rules fallback

Особенности

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

Стек

TypeScript · Next.js 16 · React 19 · Prisma · SQLite · OpenAI SDK · Mammoth · pdf-parse · SheetJS · Vitest

Модели

gpt-4.1-mini · text-embedding-3-small


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

README

README.md

Vivalet — AI Organization Auditor

Прототип для сопоставления организационной структуры и функций подразделений до и после реорганизации. Интерфейс и выводы на русском языке.

Problem

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

Solution

Приложение принимает документы «до» и «после», извлекает текст с указанием местоположения, строит список подразделений и функций, сопоставляет их и показывает возможные изменения с цитатами. Выводы о потерях, дублировании и конфликте интересов являются гипотезами для проверки сотрудником.

Features

  • Загрузка нескольких PDF, DOCX и XLSX в каждую сторону сравнения.
  • Сохранение анализов и распознанных фрагментов в SQLite.
  • Сопоставление подразделений, функций и потенциальных потерь.
  • Поиск возможного дублирования и конфликта функций исполнения и контроля.
  • Проверка каждого вывода на наличие точной цитаты в исходном фрагменте.
  • Панель источника с разделом, страницей, абзацем или строкой.
  • Экспорт результата в JSON и Markdown.
  • Демо на документах редакций №8 и №9 из testdocs/.

Architecture

flowchart LR
    A[PDF / DOCX / XLSX] --> B[Парсер и фрагменты]
    B --> C[Извлечение подразделений и функций]
    C --> D[Нормализация]
    D --> E[Сопоставление подразделений]
    D --> F[Поиск кандидатов и сверка функций]
    E --> G[Выводы]
    F --> G
    G --> H[Проверка цитат]
    H --> I[Заключение и интерфейс]
    I --> J[(SQLite)]

AI Pipeline

Если задан OPENAI_API_KEY, приложение использует Responses API со строгой JSON-схемой для извлечения сущностей, embeddings для поиска похожих функций, отдельные запросы для смысловой проверки и генерации итогового заключения. Документы передаются модели как недоверенные данные. Текст функции всегда хранится и цитируется в исходном виде. Кандидаты без точной цитаты отсеиваются.

Без ключа работает явно обозначенный режим правил: извлечение по структуре текста и сопоставление по действиям и словам. Он нужен для локального запуска и демонстрации без внешнего API; его выводы требуют более тщательной проверки. Демо никогда не подменяется готовым JSON.

Tech Stack

Next.js 16, React 19, TypeScript, Prisma 6, SQLite, OpenAI SDK, Mammoth, pdf-parse, SheetJS, Vitest.

Project structure

  • src/app/ — страницы и HTTP-маршруты.
  • src/components/AnalysisView.tsx — экран результатов и панель источника.
  • src/lib/documents.ts — парсеры и привязка цитат.
  • src/lib/analysis/ — извлечение, сопоставление, проверка доказательств и pipeline.
  • src/lib/ai/ — клиент, схемы ответов и инструкции модели.
  • prisma/schema.prisma — схема хранения.
  • tests/ — проверки ключевых правил.
  • testdocs/ — предоставленные документы для демо.

Prerequisites

Node.js 20.9+ и npm. Для AI-режима нужен ключ OpenAI и сетевой доступ.

Installation

npm install

При первом npm run dev или npm run build скрипт создаёт .env из примера и инициализирует SQLite через Prisma. Для AI-режима добавьте ключ в .env.

Environment variables

DATABASE_URL="file:./dev.db"
OPENAI_API_KEY=""
OPENAI_MODEL="gpt-4.1-mini"
OPENAI_EMBEDDING_MODEL="text-embedding-3-small"

Ключ используется только на сервере. .env и локальная база исключены из Git.

Database setup

Обычно выполняется автоматически. Для ручного обновления схемы:

npm run db:push

Run locally

npm run dev

Откройте http://localhost:3000. Для production-сборки: npm run build и npm start.

Demo scenario

Нажмите «Запустить демо». Приложение загрузит редакцию №8 как «до», редакцию №9 как «после» и запустит тот же pipeline, что используется для пользовательских файлов. Вкладки результата показывают обзор, структуру, функции, выводы и заключение. Нажмите на ссылку источника, чтобы увидеть точный фрагмент.

How analysis works

  1. Парсеры переводят документ в фрагменты с местоположением.
  2. Извлекаются подразделения и функции. Нормализованный текст нужен только для поиска соответствий.
  3. Подразделения сопоставляются по названиям и функциям.
  4. Для функций ищутся кандидаты. В AI-режиме используются embeddings и отдельная смысловая проверка.
  5. Формируются гипотезы о потерях, перемещениях, изменениях, пересечениях и конфликте интересов.
  6. Валидатор проверяет ссылки на документы, существование фрагмента и точное вхождение цитаты.
  7. Только проверенные выводы попадают в основной результат; остальные записываются в needsReview.

Explainability / source traceability

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

Limitations

  • PDF без текстового слоя не распознаётся; OCR не включён.
  • Режим правил опирается на формулировки документа и может пропустить синонимы или неверно распределить функции между подразделениями.
  • Очень большие документы требуют больше запросов к модели и могут обрабатываться дольше; синхронный HTTP-запуск рассчитан на демонстрационные комплекты.
  • Локальный прототип не имеет авторизации; не размещайте его публично с конфиденциальными документами.

Security notes

Загруженный текст считается недоверенным. Инструкции из документа не исполняются. API-ключ не передаётся в браузер. Размер одного файла ограничен 20 МБ.

Future development

OCR, более точное извлечение иерархии и ролей, пакетная обработка больших документов, доступ по ролям и сравнение с предоставленными нормативными требованиями.

Verification

npm run lint
npm test
npm run build
Звёзды
⭐ 0
Форки
0
Язык
TypeScript
Последний push
в прошлом месяце
Коммиты
8
Авторы
3
Файлы
55
Ветки
1

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

ienslxms 5Ruslanski 2assreborn 1

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

  • 2026-09-23 17:54commitienslxms
  • 2026-09-23 17:30wetassreborn
  • 2026-09-23 17:18Fixed sqliteRuslanski
  • 2026-09-23 17:09Reviewing semanticsRuslanski
  • 2026-09-23 16:13chapterssienslxms
  • 2026-09-23 15:53fixesienslxms
  • 2026-09-23 15:16frontienslxms
  • 2026-09-23 14:36back commitienslxms
Структура репозитория (55 файлов)
.env.example
.gitignore
AGENTS.md
CLAUDE.md
PROMPT.md
README.md
eslint.config.mjs
next-env.d.ts
next.config.ts
package-lock.json
package.json
prisma/schema.prisma
scripts/setup.mjs
src/app/analysis/[id]/page.tsx
src/app/api/analyses/[id]/chat/route.ts
src/app/api/analyses/[id]/documents/route.ts
src/app/api/analyses/[id]/review/route.ts
src/app/api/analyses/[id]/route.ts
src/app/api/analyses/[id]/run/route.ts
src/app/api/analyses/route.ts
src/app/api/demo/route.ts
src/app/globals.css
src/app/history/page.tsx
src/app/layout.tsx
src/app/page.tsx
src/components/AnalysisView.tsx
src/components/DocumentStructure.tsx
src/components/OrgChart.tsx
src/components/SemanticResults.tsx
src/lib/ai/client.ts
src/lib/ai/prompts.ts
src/lib/ai/schemas.ts
src/lib/analysis/evidence.ts
src/lib/analysis/export.ts
src/lib/analysis/extract.ts
src/lib/analysis/hierarchy.ts
src/lib/analysis/matching.ts
src/lib/analysis/pipeline.ts
src/lib/analysis/quote.ts
src/lib/analysis/sections.ts
src/lib/analysis/semantic-report.ts
src/lib/analysis/semantic.ts
src/lib/db.ts
src/lib/documents.ts
src/lib/types.ts
techtask.md
testdocs/Положение_о_внутреннем_аудите_редакция_8_обезличено.docx.pdf
testdocs/Положение_о_внутреннем_аудите_редакция_9_обезличено.docx
tests/core.test.ts
tests/extraction-evidence.test.ts
tests/sections.test.ts
tests/semantic.test.ts
tests/setup.test.ts
tests/structure.test.ts
tsconfig.json

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

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

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