v1.0.178: запрос к Опусу v2 — с реальными таблицами услуг
This commit is contained in:
@@ -1,115 +1,92 @@
|
|||||||
# Запрос к Opus — генератор тестовых документов + симулятор поведения
|
# Запрос к Opus — генератор тестовых документов + симулятор
|
||||||
|
|
||||||
## Что за сервис (кратко)
|
## Что за сервис
|
||||||
|
|
||||||
**contracts** — загрузка договоров колокейшн/ЦОД, авто-классификация через LLM,
|
Сервис для сверки договоров колокейшн/ЦОД через LLM.
|
||||||
группировка по контрактам, сравнение версий (сверка спецификаций).
|
Pipeline: загрузка → парсинг → классификация → группировка → сравнение.
|
||||||
|
Одна HTML-страница, бэкенд Python/PostgreSQL.
|
||||||
|
|
||||||
Pipeline: Загрузка (.docx/.doc/.pdf/.zip) → Парсинг → Классификация (LLM) → Группировка → Сравнение (LLM, Event Sourcing)
|
## Реальные файлы (проанализированы)
|
||||||
|
|
||||||
Фронтенд: одна страница с таблицей файлов, карточками групп, SSE-сравнением.
|
### Договор: `договор-XXX001-03700.docx`
|
||||||
Бэкенд: Python http.server, PostgreSQL, LLM через api.aillm.ru (gpt-oss-120b).
|
|
||||||
|
|
||||||
## Какие файлы уже есть (3 типа, 6 шт.)
|
|
||||||
|
|
||||||
### Тип 1: Договор — `договор-XXX001-03700.docx`
|
|
||||||
|
|
||||||
Заголовок: "Договор на оказание технологических услуг"
|
Заголовок: "Договор на оказание технологических услуг"
|
||||||
Номер: № 03700_1
|
Номер: № 03700_1
|
||||||
Стороны: ЗАО "XXX001" (Заказчик) + ООО "НУБЕС" (Исполнитель)
|
Стороны: ЗАО "XXX001" + ООО "НУБЕС", г. Москва, 01.02.2026
|
||||||
Адрес/дата: г. Москва, 01.02.2026
|
Секции: Термины, Предмет, Права/Обязанности, Стоимость, Оплата, ...
|
||||||
|
Таблица реквизитов (Заказчик | Исполнитель)
|
||||||
|
|
||||||
Секции: Термины, Предмет, Права/Обязанности, Состав/Порядок/Сроки,
|
### Допсоглашение: `допник-1-XXX003-01300_2.docx`
|
||||||
Стоимость, Порядок оплаты, Взаимодействие, Сдача-приёмка, Особые условия
|
|
||||||
Таблица реквизитов (1×2 — Заказчик | Исполнитель)
|
|
||||||
|
|
||||||
### Тип 2: Допсоглашение — `допник-1-XXX003-01300_2.doc`
|
|
||||||
|
|
||||||
Заголовок: "Дополнительное Соглашение №1"
|
Заголовок: "Дополнительное Соглашение №1"
|
||||||
Привязка: "к Договору № 01300_2 от 20.12.2025"
|
Привязка: "к Договору № 01300_2 от 20.12.2025"
|
||||||
Стороны: АО "XXX003" + ООО "НУБЕС"
|
Стороны: АО "XXX003" + ООО "НУБЕС"
|
||||||
|
|
||||||
Таблица услуг (6 колонок): №, Наименование, Цена руб. с НДС, Объем, Сумма, Дата начала
|
Таблица инсталляционных услуг (6 колонок):
|
||||||
Пример: Организация L2 канала без резерва — 8 283,80 × 1 = 8 283,80, 26.03.2026
|
```
|
||||||
Строка итого: Итого инсталляционный платеж — 8 283,80
|
№ | Наименование услуг | Цена | Объем | Сумма | Дата начала
|
||||||
|
1 | Организация L2 канала без резерва, 1 Гбит/с | 8 283,80 | 1 | 8 283,80 | 26.03.2026
|
||||||
|
| Итого инсталляционный платеж | | | 8 283,80 | -
|
||||||
|
```
|
||||||
|
|
||||||
### Тип 3: Спецификация — `спецификация-XXX001-03700.docx`
|
Таблица абонентских услуг (7 колонок, +дата окончания):
|
||||||
|
```
|
||||||
|
№ | Наименование услуг | Цена | Объем | Сумма | Дата начала | Дата оконч.
|
||||||
|
1 | Аренда порта без резерва, 1 Гбит/с | 1 525,00 | 1 | 1 525,00 | 26.03.2026 |
|
||||||
|
2 | Аренда публичной подсети /30 | 589,66 | 1 | 589,66 | 26.03.2026 |
|
||||||
|
3 | Интернет без защиты от DDoS, 100 Мбит | 7 015,00 | 1 | 7 015,00 | 26.03.2026 |
|
||||||
|
4 | Next Generation Cloud (AMD 4.0 ГГц) | 123 823,00| 1 | 123 823,00 | 26.03.2026 |
|
||||||
|
5 | Next Generation Cloud (AMD 4.0 ГГц) | 4 928,30 | 1 | 4 928,30 | 29.01.2026 |
|
||||||
|
| Итого абонентский платеж | | | 137 880,96 | - |
|
||||||
|
```
|
||||||
|
|
||||||
|
### Спецификация: `спецификация-XXX001-03700.docx`
|
||||||
|
|
||||||
Заголовок: "Приложение № 1 к Договору № 03700_1 от 01.02.2026"
|
Заголовок: "Приложение № 1 к Договору № 03700_1 от 01.02.2026"
|
||||||
Секция: "Спецификация и стоимость услуг"
|
Секция: "Абонентские услуги с 01.04.2026 – 24.04.2026"
|
||||||
Подсекция: "Абонентские услуги с ДАТА – ДАТА"
|
|
||||||
Общая стоимость: 769 279,53 руб.
|
Общая стоимость: 769 279,53 руб.
|
||||||
|
|
||||||
Таблица услуг (6 колонок): №, Наименование, Цена, Объем, Сумма, Дата начала
|
Таблица (6 колонок, 9 строк):
|
||||||
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
|
1 | Аренда стойко-места | 213 905,44 | 3 | 641 716,32 | 01.04.2026
|
||||||
спецификация-{КОМПАНИЯ}-{НОМЕР}.docx
|
2 | Аренда PDU: 3Ф 32А вертикальный | 2 511,17 | 3 | 7 533,51 | 01.04.2026
|
||||||
|
3 | Организация L2 канала без резерва, 1 Гбит | 11 016,36 | 2 | 22 032,72 | 01.04.2026
|
||||||
|
4 | Next Generation Cloud (Intel 3.0 ГГц) | 76 704,00 | 1 | 76 704,00 | 01.04.2026
|
||||||
|
5 | Аренда IPv4 адреса /32 | 157,28 | 5 | 786,40 | 01.04.2026
|
||||||
|
6 | Аренда IPv4 подсети /30 | 629,10 | 2 | 1 258,20 | 01.04.2026
|
||||||
|
7 | Организация cross-connect: ВОЛС, 2×SMF | 4 192,40 | 3 | 12 577,20 | 06.04.2026
|
||||||
|
8 | Организация cross-connect: UTP | 840,94 | 1 | 840,94 | 06.04.2026
|
||||||
|
9 | Next Generation Cloud (Intel 3.0 ГГц) | 5 830,24 | 1 | 5 830,24 | 06.04.2026
|
||||||
```
|
```
|
||||||
|
|
||||||
КОМПАНИЯ = XXX001..XXX010, НОМЕР = 03700, 01200_3, 01300_2
|
### Имена файлов (паттерн)
|
||||||
N = номер допника (1, 2, 3...)
|
|
||||||
|
|
||||||
Иерархия: спецификация и допник привязаны к договору через НОМЕР.
|
```
|
||||||
|
договор-{КОМПАНИЯ}-{НОМЕР}.docx КОМПАНИЯ=XXX001..XXX010, НОМЕР=03700
|
||||||
|
допник-{N}-{КОМПАНИЯ}-{НОМЕР}.docx N=1,2,3...
|
||||||
|
спецификация-{КОМПАНИЯ}-{НОМЕР}.docx привязана к договору по НОМЕРу
|
||||||
|
```
|
||||||
|
|
||||||
|
Иерархия: спецификация/допник ссылаются на договор через НОМЕР и дату.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Что нужно от Опуса
|
## Что нужно от Опуса
|
||||||
|
|
||||||
### Часть 1 — Принцип генерации ~100 файлов
|
### 1. СХЕМА генерации ~100 файлов (не код!)
|
||||||
|
|
||||||
Нужна СХЕМА (не код):
|
- Сколько контрактов (3-5?), сколько файлов каждого типа
|
||||||
|
- Вариативность: компании XXX001-XXX010, номера, даты ±месяцы, цены ±20%
|
||||||
|
- Типы услуг из пула: Аренда стойко-места, PDU, L2 канал, IPv4, cross-connect, Cloud, Интернет
|
||||||
|
- **Ошибочные:** без номера, битый XML, пустой, только таблицы, .doc формат, дубликаты имён
|
||||||
|
- Как генерировать python-docx: структура шаблонов
|
||||||
|
|
||||||
1. Сколько контрактов, сколько файлов каждого типа
|
### 2. СТРАТЕГИЯ симулятора (не код!)
|
||||||
2. Как варьировать: компании, номера, даты, цены, наборы услуг
|
|
||||||
3. Ошибочные случаи:
|
|
||||||
- без номера договора
|
|
||||||
- нестандартный заголовок
|
|
||||||
- битый XML внутри docx
|
|
||||||
- пустой файл
|
|
||||||
- только таблицы / только текст
|
|
||||||
- .doc (старый формат, идёт через конвертер)
|
|
||||||
- битый PDF
|
|
||||||
- дубликаты имён
|
|
||||||
4. Как связать parent-child (договор → допник → спецификация)
|
|
||||||
5. Структура шаблонов python-docx
|
|
||||||
|
|
||||||
### Часть 2 — Симулятор поведения
|
- Сценарии: хэппи-путь, зигзаги (удалил→добавил), тупые действия (дубликаты OK/Отмена, всё удалить)
|
||||||
|
- Тайминги между действиями
|
||||||
|
- ZIP с дубликатами
|
||||||
|
- Верификация после каждого шага: число файлов, статусы, группы
|
||||||
|
|
||||||
Нужна СТРАТЕГИЯ:
|
Код напишу я сам.
|
||||||
|
|
||||||
1. Хэппи-путь: загрузка → классификация → группы → сравнение
|
|
||||||
2. Зигзаги: загрузил → удалил → перезагрузил → ещё загрузил
|
|
||||||
3. Тупые действия: дубликаты (OK/Отмена), удалить всё, смешать форматы
|
|
||||||
4. ZIP с дубликатами внутри
|
|
||||||
5. Тайминги и задержки
|
|
||||||
6. Верификация после каждого шага: число файлов, статусы, группы
|
|
||||||
|
|
||||||
### Часть 3 — Верификация
|
|
||||||
|
|
||||||
Как проверять корректность после каждого шага симулятора:
|
|
||||||
- Количество файлов в state.files
|
|
||||||
- Статусы парсинга (✓ / ✗)
|
|
||||||
- Наличие групп после classify
|
|
||||||
- Результаты сравнения
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Формат ответа
|
|
||||||
|
|
||||||
Принципиальная схема (НЕ реализация):
|
|
||||||
- Что генерировать (типы, количество, вариации)
|
|
||||||
- Как генерировать (шаблоны, подстановки)
|
|
||||||
- Как симулировать (последовательности, тайминги)
|
|
||||||
- Как проверять (чек-лист верификации)
|
|
||||||
- Структура папок
|
|
||||||
|
|
||||||
Код генератора и симулятора напишу я сам.
|
|
||||||
|
|||||||
Reference in New Issue
Block a user