From 36f31c2e238c82fe05e873a24121bfc505654b92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Thu, 25 Jun 2026 10:50:13 +0400 Subject: [PATCH] =?UTF-8?q?v1.0.178:=20=D0=B7=D0=B0=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D1=81=20=D0=BA=20=D0=9E=D0=BF=D1=83=D1=81=D1=83=20v2=20?= =?UTF-8?q?=E2=80=94=20=D1=81=20=D1=80=D0=B5=D0=B0=D0=BB=D1=8C=D0=BD=D1=8B?= =?UTF-8?q?=D0=BC=D0=B8=20=D1=82=D0=B0=D0=B1=D0=BB=D0=B8=D1=86=D0=B0=D0=BC?= =?UTF-8?q?=D0=B8=20=D1=83=D1=81=D0=BB=D1=83=D0=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- History/opus-generator-request.md | 145 +++++++++++++----------------- 1 file changed, 61 insertions(+), 84 deletions(-) diff --git a/History/opus-generator-request.md b/History/opus-generator-request.md index 477a3d0..b06a483 100644 --- a/History/opus-generator-request.md +++ b/History/opus-generator-request.md @@ -1,115 +1,92 @@ -# Запрос к Opus — генератор тестовых документов + симулятор поведения +# Запрос к Opus — генератор тестовых документов + симулятор -## Что за сервис (кратко) +## Что за сервис -**contracts** — загрузка договоров колокейшн/ЦОД, авто-классификация через LLM, -группировка по контрактам, сравнение версий (сверка спецификаций). +Сервис для сверки договоров колокейшн/ЦОД через LLM. +Pipeline: загрузка → парсинг → классификация → группировка → сравнение. +Одна HTML-страница, бэкенд Python/PostgreSQL. -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` +### Договор: `договор-XXX001-03700.docx` Заголовок: "Договор на оказание технологических услуг" Номер: № 03700_1 -Стороны: ЗАО "XXX001" (Заказчик) + ООО "НУБЕС" (Исполнитель) -Адрес/дата: г. Москва, 01.02.2026 +Стороны: ЗАО "XXX001" + ООО "НУБЕС", г. Москва, 01.02.2026 +Секции: Термины, Предмет, Права/Обязанности, Стоимость, Оплата, ... +Таблица реквизитов (Заказчик | Исполнитель) -Секции: Термины, Предмет, Права/Обязанности, Состав/Порядок/Сроки, -Стоимость, Порядок оплаты, Взаимодействие, Сдача-приёмка, Особые условия -Таблица реквизитов (1×2 — Заказчик | Исполнитель) - -### Тип 2: Допсоглашение — `допник-1-XXX003-01300_2.doc` +### Допсоглашение: `допник-1-XXX003-01300_2.docx` Заголовок: "Дополнительное Соглашение №1" Привязка: "к Договору № 01300_2 от 20.12.2025" Стороны: АО "XXX003" + ООО "НУБЕС" -Таблица услуг (6 колонок): №, Наименование, Цена руб. с НДС, Объем, Сумма, Дата начала -Пример: Организация L2 канала без резерва — 8 283,80 × 1 = 8 283,80, 26.03.2026 -Строка итого: Итого инсталляционный платеж — 8 283,80 +Таблица инсталляционных услуг (6 колонок): +``` +№ | Наименование услуг | Цена | Объем | Сумма | Дата начала +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" -Секция: "Спецификация и стоимость услуг" -Подсекция: "Абонентские услуги с ДАТА – ДАТА" +Секция: "Абонентские услуги с 01.04.2026 – 24.04.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. - -### Паттерны имён - +Таблица (6 колонок, 9 строк): ``` -договор-{КОМПАНИЯ}-{НОМЕР}.docx -допник-{N}-{КОМПАНИЯ}-{НОМЕР}.doc / .docx -спецификация-{КОМПАНИЯ}-{НОМЕР}.docx +№ | Наименование услуг | Цена | Объем | Сумма | Дата начала +1 | Аренда стойко-места | 213 905,44 | 3 | 641 716,32 | 01.04.2026 +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. Как варьировать: компании, номера, даты, цены, наборы услуг -3. Ошибочные случаи: - - без номера договора - - нестандартный заголовок - - битый XML внутри docx - - пустой файл - - только таблицы / только текст - - .doc (старый формат, идёт через конвертер) - - битый PDF - - дубликаты имён -4. Как связать parent-child (договор → допник → спецификация) -5. Структура шаблонов python-docx +### 2. СТРАТЕГИЯ симулятора (не код!) -### Часть 2 — Симулятор поведения +- Сценарии: хэппи-путь, зигзаги (удалил→добавил), тупые действия (дубликаты OK/Отмена, всё удалить) +- Тайминги между действиями +- ZIP с дубликатами +- Верификация после каждого шага: число файлов, статусы, группы -Нужна СТРАТЕГИЯ: - -1. Хэппи-путь: загрузка → классификация → группы → сравнение -2. Зигзаги: загрузил → удалил → перезагрузил → ещё загрузил -3. Тупые действия: дубликаты (OK/Отмена), удалить всё, смешать форматы -4. ZIP с дубликатами внутри -5. Тайминги и задержки -6. Верификация после каждого шага: число файлов, статусы, группы - -### Часть 3 — Верификация - -Как проверять корректность после каждого шага симулятора: -- Количество файлов в state.files -- Статусы парсинга (✓ / ✗) -- Наличие групп после classify -- Результаты сравнения - ---- - -## Формат ответа - -Принципиальная схема (НЕ реализация): -- Что генерировать (типы, количество, вариации) -- Как генерировать (шаблоны, подстановки) -- Как симулировать (последовательности, тайминги) -- Как проверять (чек-лист верификации) -- Структура папок - -Код генератора и симулятора напишу я сам. +Код напишу я сам.