Avoid false garbage classification for UPD mentions
Deploy contracts-flask / validate (push) Canceled after 0s

This commit is contained in:
“Naeel”
2026-08-27 10:44:48 +03:00
parent 475efefb40
commit e5c7c88073
5 changed files with 75 additions and 10 deletions
@@ -81,3 +81,57 @@ Kubernetes проверялся только командами чтения ч
- frontend upload-тесты — успешно;
- layer 2 upload-тесты — успешно;
- архивы `duplicates_inside.zip` и `mixed_with_error.zip` прошли `unzip -t`.
## Реальный end-to-end тест сверки
27.08.2026 выполнен тест через deployed API `v2.0.19` на batch
`0dd0d3a7-3e52-4888-95eb-1b6d3e37f40e`.
Загружены через VM-поток два реальных DOCX:
- `договор-XXX001-03700.docx` — распарсен, 20 элементов;
- `допник-1-XXX001-03700.docx` — распарсен, 16 элементов.
Классификация завершилась `2/2`, но результат классификации неожиданен:
- допсоглашение попало в группу `03700`;
- базовый договор попал в `__unresolved__` со статусом `garbage` и причиной
отсутствия matching-договора.
Это функциональный дефект/проблема классификации тестовой пары: без базового
договора группа не проверяет корректное сравнение договора с приложением.
Тем не менее реальный pipeline сверки для сформированной группы проверен:
- `/api/apply-groups``200`, создан contract ID
`b859e813-bac9-4eb9-82b5-6b5666f2ba4a`;
- `/process-v2` — SSE завершён событием `complete`;
- LLM вернул `6` операций в режиме `partial`;
- применено: `added=6`, `updated=0`, `deleted=0`;
- ошибок соединения и SSE не было;
- время pipeline: `9.4с`.
Следующий обязательный тест для проверки matching — загрузить базовый договор с
точным именем/содержимым, которое классификатор ожидает как базовый, и повторить
ту же пару. Код после этого прогона не изменялся.
## Исправление ложного garbage для базового договора
При повторной проверке реального файла `договор-XXX001-03700.docx` установлена
точная причина ошибочной классификации: второй garbage-фильтр искал подстроку
`УПД` в первых 2000 символах. В договоре эта аббревиатура встречается в
обычном условии оплаты: «на основании УПД и счета». Из-за этого договор
получал `garbage=header_keywords`, хотя его заголовок начинается со слова
«Договор».
Исправление в `site/services/classify.py`:
- удалено общее substring-срабатывание для `УПД`;
- добавлено распознавание `УПД` и полного названия только с начала строки,
когда это заголовок самого документа.
Добавлены регрессионные тесты: упоминание УПД внутри договора не является
garbage, а заголовок документа `УПД № ...` является garbage.
Версия приложения повышена до `2.0.20`, cache-buster обновлён в
`site/templates/index.html`.