116 lines
5.7 KiB
Markdown
116 lines
5.7 KiB
Markdown
# Запрос к Opus — генератор тестовых документов + симулятор поведения
|
||
|
||
## Что за сервис (кратко)
|
||
|
||
**contracts** — загрузка договоров колокейшн/ЦОД, авто-классификация через LLM,
|
||
группировка по контрактам, сравнение версий (сверка спецификаций).
|
||
|
||
Pipeline: Загрузка (.docx/.doc/.pdf/.zip) → Парсинг → Классификация (LLM) → Группировка → Сравнение (LLM, Event Sourcing)
|
||
|
||
Фронтенд: одна страница с таблицей файлов, карточками групп, SSE-сравнением.
|
||
Бэкенд: Python http.server, PostgreSQL, LLM через api.aillm.ru (gpt-oss-120b).
|
||
|
||
## Какие файлы уже есть (3 типа, 6 шт.)
|
||
|
||
### Тип 1: Договор — `договор-XXX001-03700.docx`
|
||
|
||
Заголовок: "Договор на оказание технологических услуг"
|
||
Номер: № 03700_1
|
||
Стороны: ЗАО "XXX001" (Заказчик) + ООО "НУБЕС" (Исполнитель)
|
||
Адрес/дата: г. Москва, 01.02.2026
|
||
|
||
Секции: Термины, Предмет, Права/Обязанности, Состав/Порядок/Сроки,
|
||
Стоимость, Порядок оплаты, Взаимодействие, Сдача-приёмка, Особые условия
|
||
Таблица реквизитов (1×2 — Заказчик | Исполнитель)
|
||
|
||
### Тип 2: Допсоглашение — `допник-1-XXX003-01300_2.doc`
|
||
|
||
Заголовок: "Дополнительное Соглашение №1"
|
||
Привязка: "к Договору № 01300_2 от 20.12.2025"
|
||
Стороны: АО "XXX003" + ООО "НУБЕС"
|
||
|
||
Таблица услуг (6 колонок): №, Наименование, Цена руб. с НДС, Объем, Сумма, Дата начала
|
||
Пример: Организация L2 канала без резерва — 8 283,80 × 1 = 8 283,80, 26.03.2026
|
||
Строка итого: Итого инсталляционный платеж — 8 283,80
|
||
|
||
### Тип 3: Спецификация — `спецификация-XXX001-03700.docx`
|
||
|
||
Заголовок: "Приложение № 1 к Договору № 03700_1 от 01.02.2026"
|
||
Секция: "Спецификация и стоимость услуг"
|
||
Подсекция: "Абонентские услуги с ДАТА – ДАТА"
|
||
Общая стоимость: 769 279,53 руб.
|
||
|
||
Таблица услуг (6 колонок): №, Наименование, Цена, Объем, Сумма, Дата начала
|
||
9 строк, включая:
|
||
- Аренда стойко-места — 213 905,44 × 3 = 641 716,32
|
||
- Аренда PDU 3Ф 32А — 2 511,17 × 3 = 7 533,51
|
||
- Организация L2 канала — цена × кол-во
|
||
- IP-адреса, cross-connect, etc.
|
||
|
||
### Паттерны имён
|
||
|
||
```
|
||
договор-{КОМПАНИЯ}-{НОМЕР}.docx
|
||
допник-{N}-{КОМПАНИЯ}-{НОМЕР}.doc / .docx
|
||
спецификация-{КОМПАНИЯ}-{НОМЕР}.docx
|
||
```
|
||
|
||
КОМПАНИЯ = XXX001..XXX010, НОМЕР = 03700, 01200_3, 01300_2
|
||
N = номер допника (1, 2, 3...)
|
||
|
||
Иерархия: спецификация и допник привязаны к договору через НОМЕР.
|
||
|
||
---
|
||
|
||
## Что нужно от Опуса
|
||
|
||
### Часть 1 — Принцип генерации ~100 файлов
|
||
|
||
Нужна СХЕМА (не код):
|
||
|
||
1. Сколько контрактов, сколько файлов каждого типа
|
||
2. Как варьировать: компании, номера, даты, цены, наборы услуг
|
||
3. Ошибочные случаи:
|
||
- без номера договора
|
||
- нестандартный заголовок
|
||
- битый XML внутри docx
|
||
- пустой файл
|
||
- только таблицы / только текст
|
||
- .doc (старый формат, идёт через конвертер)
|
||
- битый PDF
|
||
- дубликаты имён
|
||
4. Как связать parent-child (договор → допник → спецификация)
|
||
5. Структура шаблонов python-docx
|
||
|
||
### Часть 2 — Симулятор поведения
|
||
|
||
Нужна СТРАТЕГИЯ:
|
||
|
||
1. Хэппи-путь: загрузка → классификация → группы → сравнение
|
||
2. Зигзаги: загрузил → удалил → перезагрузил → ещё загрузил
|
||
3. Тупые действия: дубликаты (OK/Отмена), удалить всё, смешать форматы
|
||
4. ZIP с дубликатами внутри
|
||
5. Тайминги и задержки
|
||
6. Верификация после каждого шага: число файлов, статусы, группы
|
||
|
||
### Часть 3 — Верификация
|
||
|
||
Как проверять корректность после каждого шага симулятора:
|
||
- Количество файлов в state.files
|
||
- Статусы парсинга (✓ / ✗)
|
||
- Наличие групп после classify
|
||
- Результаты сравнения
|
||
|
||
---
|
||
|
||
## Формат ответа
|
||
|
||
Принципиальная схема (НЕ реализация):
|
||
- Что генерировать (типы, количество, вариации)
|
||
- Как генерировать (шаблоны, подстановки)
|
||
- Как симулировать (последовательности, тайминги)
|
||
- Как проверять (чек-лист верификации)
|
||
- Структура папок
|
||
|
||
Код генератора и симулятора напишу я сам.
|