AAYMA
RU
Войти

Artifex

Система сравнения документов оргструктуры до и после реорганизации: находит изменения подразделений, возможные потери и передачи функций…

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

О проекте

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

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

Суть

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

Как устроено

Два движка. Python (orgsolvency) разбирает пункты .docx/txt, сопоставляет подразделения по аббревиатуре, названию, функциям и должностям, применяет правила-детекторы (orphan_obligations, дублирование, самооценка) и проверяет дословность цитат. LLM подключается только для пар с лексическим сходством 0.18–0.45. TypeScript-приложение Lineage извлекает граф оргструктуры и функции агентным циклом вызова инструментов на OpenAI Responses API с Zod-схемами, сравнивает нормализованные функции (частичное покрытие, разделение, объединение) и экспортирует HTML/CSV/JSON; решения проверяющего хранятся в SQLite.

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

  • regex clause parsing
  • lexical similarity
  • heuristic unit matching
  • rule-based detectors
  • quote verification
  • custom tool-calling loop
  • Structured Outputs (Zod)
  • React Flow/Dagre graph
  • golden-set evaluation

Метрики

Без LLM: 44/42 пункта, 23 вывода, recall 56% (14 из 25 размеченных случаев); 74 TS-теста

Особенности

Работает на реальных редакциях положения о внутреннем аудите (ред. 8 и 9) с командной golden-разметкой и честно посчитанной полнотой. Интересное правило «обязательство сохранилось, полномочие пропало». Каждый вывод привязан к проверенной цитате.

Стек

Python · TypeScript · Node.js 24 · React · Vite · Express · Zod · SQLite · React Flow · Dagre · Graphlib · pypdf · openpyxl · Vitest

Модели

OpenAI Responses API (gpt-4.1-mini) · OpenAI Chat Completions · Anthropic Messages


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

README

README.md

Artifex

1. Название проекта

Artifex помогает проверять организационные изменения по документам: находит возможные потери функций, пересечения ответственности и противоречия с указанием источников. Проект команды Artifex для HackAlem AI, трек «Анализ организационной структуры и функционала».

2. Краткое описание

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

Пример из контрольной выдержки. В редакции 8 пункт 5.6.3 закрепляет за ДККМ право вносить предложения по объёму и содержанию внешней оценки. В редакции 9 система не находит соответствующего полномочия, хотя пункт 11.2 сохраняет требование проводить внешнюю оценку не реже одного раза в пять лет. Python-движок выдаёт L-5.6.3 и O-11.2: возможный разрыв между обязательством и полномочием. Сотруднику нужно проверить распределение ответственности и другие документы; система не доказывает, что оценка фактически не проводится.

3. Что реализовано

В репозитории два приложения: Python-приложение с русскоязычным заключением и Lineage на TypeScript с извлечением графа, функций и проверкой результатов. Это отдельные аналитические движки; загрузчик Word из Python переиспользуется в Lineage.

ТребованиеРеализацияКак проверить
Изменения подразделенийPython сопоставляет аббревиатуру, название, функции и состав должностей. Lineage использует идентификаторы, названия и явно заданные соответствия.Открыть «Контрольный комплект» и вкладку «Структура»: появляются ДИТААД и ДОА.
Сопоставление функций и возможные потериPython ищет сохранение, передачу и ненайденные полномочия. Lineage сравнивает нормализованные поля, область действия и числовые ограничения; поддерживает частичное покрытие, разделение и объединение функций.Проверить L-5.6.3; в Lineage открыть Function lineage на синтетическом примере.
Дублирование и потенциальные конфликтыОтдельные правила проверяют пересечение функций, противоречия с запретами и признаки самооценки. Lineage также проверяет совмещение исполнения, утверждения и независимого аудита.В контрольном комплекте проверить дублирование пунктов 5.1.4 и 5.3.7 и основания вывода по 11.1.
Источники существенных выводовВыводы содержат цитаты и номера пунктов; код проверяет присутствие цитат в тексте. JSON v2 дополнительно проверяет смещения, идентификаторы пунктов и хеши документов.Раскрыть вывод и открыть цитату в источнике.
Итоговое аналитическое заключениеPython формирует сводку, объяснения и рекомендации; доступны JSON-экспорт и копирование текста. Lineage экспортирует HTML, CSV и JSON с результатами проверки.Просмотреть заключение после анализа или запустить python3 run.py.

Наличие детектора не гарантирует обнаружение всех случаев. Метки риска и рекомендации требуют проверки сотрудником.

4. Как работает решение

Загрузка → извлечение текста и пунктов → сопоставление подразделений и функций → проверка отклонений → открытие источников → заключение. В Python-интерфейсе загружаются комплекты .docx или текстовых файлов. Сотрудник раскрывает вывод, изучает цепочку его получения, открывает цитаты в исходных документах и проверяет рекомендацию.

В Lineage сценарий начинается в Document extraction: загрузить документы или выбрать Edition 8 / 9, при необходимости добавить нормативные тексты и документы других операторов, выполнить извлечение, проверить Graph, Functions, Issues, Context и JSON, затем нажать Compare JSON. Дополнительные проверки дают только цитируемые кандидаты, а не правовое заключение или оценку лучшей практики. Функции без установленного владельца остаются в JSON, но исключаются из сравнения ответственности с явным предупреждением. В результатах анализа можно подтвердить или отклонить находку и оставить комментарий. Печатное заключение показывает структурные изменения, вывод, план действий и краткую выборку из очереди проверки; полный список остаётся в JSON и CSV.

5. Технологии

  • Python-приложение: Python 3, стандартная библиотека, ThreadingHTTPServer, HTML/CSS/JavaScript. Анализ использует регулярные выражения, лексическое сходство, эвристическое сопоставление подразделений и отдельные правила отклонений.
  • Lineage: TypeScript, Node.js 24+, React, Vite, Express, Zod, SQLite, React Flow, Dagre и Graphlib. Сравнение использует индекс кандидатов, канонические поля функций, проверку пересечения областей и покрытия интервалов. Тестирование: Vitest.
  • Извлечение документов: текст, Markdown и Word; для текстовых PDF используется pypdf, для Excel — openpyxl. Сканированные документы требуют внешнего OCR.
  • LLM в Lineage: OpenAI Responses API, структурированные ответы по Zod-схемам и собственный ограниченный цикл вызова инструментов. Специалисты по структуре, функциям и проверке могут искать и читать пункты загруженных документов. Код назначает идентификаторы, проверяет источники и граф, кэширует ответы и ограничивает число вызовов. Зависимости от Agents SDK нет.
  • LLM в Python: адаптеры OpenAI Chat Completions и Anthropic Messages. Модель может уточнять смысловое совпадение выбранной пары, если лексическое сходство попало в диапазон 0.18–0.45. Итоговое заключение формируют правила.

Без LLM работают Python-анализ, сравнение готовых нормализованных графов и локальное извлечение Lineage. Локальное извлечение формирует структурный базис и нераспределённые кандидаты функций. Протокол взаимодействия с моделями проверен подставными ответами; качество живой модели на полных контрольных документах пока не измерено.

6. Запуск

Все команды выполняются из корня проекта. Для основного сценария нужен Python 3; проверка выполнена на Python 3.14.4. Внешние пакеты не требуются:

python3 webapp/server.py

Открыть Python-приложение и нажать «Контрольный комплект». Для собственных данных выбрать файлы «до» и «после». При занятом порте: python3 webapp/server.py --port 8001.

Для Lineage нужны Node.js 24+, npm и Python:

npm ci
npm run dev

Открыть Lineage; при занятом порте сервер напечатает следующий свободный адрес. Для агентного режима указать в .env серверный OPENAI_API_KEY, при необходимости OPENAI_MODEL (по умолчанию gpt-4.1-mini), и перезапустить сервер. Настройки Python-адаптера отдельные: ARTIFEX_AI, ARTIFEX_AI_KEY, ARTIFEX_AI_MODEL. Для PDF и Excel установить requirements-input.txt в виртуальное окружение и задать PYTHON_BIN на его интерпретатор.

7. Архитектура и API

Python: core.py разбирает нормы, units.py сопоставляет структуру, detect.py применяет правила, verify.py проверяет цитаты, summary.py формирует заключение. Сценарий «обязательство сохраняется, полномочие не найдено» реализован здесь отдельным правилом orphan_obligations; в движок Lineage он напрямую не перенесён.

Lineage: server/extraction/ извлекает данные, graph.ts передаёт их в сравнительный движок, server/engine/ формирует результаты, SQLite хранит завершённые извлечения, анализы и решения проверяющего. JSON v2 содержит before и after; в каждой редакции — graph.nodes, graph.edges, functions, источники, проблемы и метрики. Подразделения, должности, внешние органы и группы различаются; функциональное и административное подчинение представлены отдельными типами связей.

Основные HTTP-интерфейсы Lineage: POST /api/documents, POST /api/extraction-jobs, GET /api/extraction-jobs/:id, POST /api/analyze. Контракт находится в shared/extraction.ts, JSON Schema — в examples/extraction-pair.schema.json. Подробности: docs/agentic-extraction.md.

8. Контрольные данные

corpus/rev8.txt и corpus/rev9.txt содержат подготовленные выдержки из реальных редакций положения о внутреннем аудите; golden/golden.json — командную разметку ожидаемых находок. Полные Markdown-экспорты документов находятся отдельно в corpus/full/. Разметка выдержек не является полным эталоном для этих документов.

Для полных редакций проверяются конкретные структурные случаи: два департамента против четырёх по пункту 3.4, разные линии подчинения по 1.5–1.6, одноимённые должности в разных подразделениях, контекст запретов и перенумерация. Встроенный граф Lineage — отдельный синтетический пример.

9. Проверка и результаты

python3 run.py
python3 tests/smoke.py
python3 tests/ai_seam.py
npm test
python3 tests/document_bridge_test.py
npm run build

run.py создаёт out/report.html и out/findings.json. В проверенном прогоне без LLM разобраны 44 и 42 пункта, получены 23 вывода, зачтены 14 из 25 размеченных случаев: полнота 56%. Совпадение засчитывается по типу вывода и основному пункту. Ещё 9 выводов не сопоставлены с разметкой и требуют ручной оценки; precision не установлен. Контроль цитат отклонил 0 выводов, заданные негативные тесты пройдены.

Дополнительно прошли 74 теста TypeScript, 8 тестов загрузки документов, Python-проверки регрессий и адаптера модели. Эти результаты подтверждают проверенные сценарии, а не универсальную точность системы.

10. Ограничения и данные

Ненайденная функция не равна доказанной утрате: она может быть переформулирована или закреплена в другом документе. Проверка дословности подтверждает происхождение цитаты, но не правильность её интерпретации. Python-эвристики могут смешивать должности и подразделения; признаки самооценки не доказывают нарушение независимости. Автоматическая нумерация Word, схемы, сканы и междокументные ссылки обработаны ограниченно.

Это локальный однопользовательский прототип без промышленной системы доступа. При включении LLM текст передаётся выбранному API-провайдеру; ключи остаются на сервере. Lineage хранит документы и результаты в .data/, которую следует считать конфиденциальной. Процент обработанных пунктов не является оценкой точности или подтверждением человеком.

11. Ценность и развитие

Artifex показывает путь от изменения документа к возможному организационному последствию и конкретному источнику. Сотрудник получает список вопросов для проверки. Экономия рабочего времени пока не измерена.

Следующие шаги команды Artifex: объединить два аналитических приложения; проверить агентное извлечение на полных размеченных документах с живой моделью; измерить precision, recall, время и стоимость; расширить обработку полномочий и обязательств между документами; добавить OCR и корпоративное управление доступом.

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

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

Yerkhat 18altidj422-tech 6isaisai101 2

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

  • 2026-09-23 17:58Merge agentic organization review into mainaltidj422-tech
  • 2026-09-23 17:56Format supplementary comparison changesaltidj422-tech
  • 2026-09-23 17:56Add supplementary document comparisons and report contextaltidj422-tech
  • 2026-09-23 17:54Провайдер по умолчанию — OpenAIYerkhat
  • 2026-09-23 17:52Слой модели проверен вживую на OpenAIYerkhat
  • 2026-09-23 17:44Document Artifex project in Russianaltidj422-tech
  • 2026-09-23 17:40Add agentic organization extraction and review workspacealtidj422-tech
  • 2026-09-23 17:32Довести состав репозитория: в описании нет неупомянутых файловYerkhat
Все коммиты (26)
  • 2026-09-23 17:30Палитра: цвет означает состояние, бренд — нейтраленYerkhat
  • 2026-09-23 17:26Оболочка рабочего места и таблица переходов подразделенийYerkhat
  • 2026-09-23 17:17README по структуре, заданной организаторомYerkhat
  • 2026-09-23 16:57Сделать сопоставление явным и убрать следы черновикаYerkhat
  • 2026-09-23 16:46Must-have №1: сопоставление подразделений и вкладка «Структура»Yerkhat
  • 2026-09-23 16:27Развести имена классов: метка цитаты конфликтовала с выдвижной панельюYerkhat
  • 2026-09-23 16:26Подготовить интерфейс к чужому движку: ошибки, контракт, защита полейYerkhat
  • 2026-09-23 16:22Подача по последствию, подтверждённость и свет за курсоромYerkhat
  • 2026-09-23 16:06Пересобрать подачу выводов и закрыть три дефекта работоспособностиYerkhat
  • 2026-09-23 15:48testisaisai101
  • 2026-09-23 15:41Разъём слоя модели, группировка по критичности, экспортYerkhat
  • 2026-09-23 15:35Снять привязку к структуре одного документа + синтетический комплектYerkhat
  • 2026-09-23 15:30Интерфейс: загрузка документов и итоговое заключениеYerkhat
  • 2026-09-23 15:05Приём .docx без зависимостей и рубеж против регрессийYerkhat
  • 2026-09-23 14:49Test push (empty commit)isaisai101
  • 2026-09-23 14:12Работающий прототип: проверка исполнимости обязательствYerkhat
  • 2026-09-23 13:59test: verify github pushaltidj422-tech
  • 2026-09-23 13:56Зафиксировать контракт данных и золотой набор отклоненийYerkhat
Структура репозитория (84 файлов)
.env.example
.gitignore
.prettierrc.json
BENCHMARK.md
README.md
corpus/demo/after.txt
corpus/demo/before.txt
corpus/demo/ОТВЕТЫ.md
corpus/full/README.md
corpus/full/rev8.md
corpus/full/rev9.md
corpus/rev8.txt
corpus/rev9.txt
docs/agentic-extraction.md
docs/api-contract.md
docs/case-analysis.md
docs/design-principles.md
docs/lineage-app.md
examples/extraction-pair.schema.json
examples/extraction.schema.json
examples/graph-input.schema.json
examples/operator-sample.txt
examples/reference-sample.txt
examples/sample-graph.json
golden/golden.json
index.html
orgsolvency/__init__.py
orgsolvency/ai.py
orgsolvency/core.py
orgsolvency/detect.py
orgsolvency/ingest.py
orgsolvency/report.py
orgsolvency/score.py
orgsolvency/summary.py
orgsolvency/units.py
orgsolvency/verify.py
package-lock.json
package.json
requirements-input.txt
run.py
scripts/evaluate.ts
scripts/export-schema.ts
scripts/extract.ts
server/adapters/graph.ts
server/app.ts
server/demo.ts
server/engine/analyze.ts
server/engine/normalize.ts
server/engine/validate.ts
server/extraction/agent.ts
server/extraction/document.ts
server/extraction/examples.ts
server/extraction/ingest.ts
server/extraction/local.ts
server/extraction/pipeline.ts
server/extraction/proposals.ts
server/extraction/supplementary.ts
server/index.ts
server/normalization.ts
server/report.ts
server/store.ts
shared/extraction.ts
shared/input.ts
shared/schema.ts
shared/text.ts
src/App.tsx
src/DocumentWorkspace.tsx
src/OrgGraph.tsx
src/api.ts
src/main.tsx
src/styles.css
tests/ai_seam.py
tests/api.test.ts
tests/document_bridge_test.py
tests/engine.test.ts
tests/extraction.test.ts
tests/normalization.test.ts
tests/smoke.py
tools/document_bridge.py
tools/make_docx.py
tsconfig.json
vite.config.ts
webapp/index.html
webapp/server.py
Ветки (4)

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

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

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