# Normalizer v1.1.2.1 Patch Notes

## Задача этапа

Сохранить стабильную prompt-логику `v1.1.2` и добавить новый 30-case набор
из живых формулировок бух-ревью (`TZ_LLM_Normalizer_v1.1.2.1.md`) для отдельного контрольного прогона.

Ключевой принцип этапа:
- не ломать работающий taxonomy/route baseline;
- расширить покрытие на реальный язык бухгалтера.

## Что изменено

1. Добавлена версия prompt preset `normalizer_v1_1_2_1`.
2. Добавлены новые prompt-файлы:
- `prompts/developer/normalizer_v1_1_2_1.txt`
- `prompts/fewshot/normalizer_fewshot_v1_1_2_1.txt`
3. Добавлен новый eval dataset:
- `eval_cases/normalizer_eval_v1_1_2_1_30cases.json`
4. GUI переведен по умолчанию на:
- `promptVersion: normalizer_v1_1_2_1`
- `caseSetFile: normalizer_eval_v1_1_2_1_30cases.json`
5. В `EvalService` добавлена автозапись артефактов для strict-run:
- `reports/normalizer_v1_1_2_1_eval.json`
- `reports/normalizer_v1_1_2_1_eval.md`
6. Обновлены документы `docs/PROMPTS.md` и `docs/API.md`.

## Охват 30-case набора

В набор включены 7 предметных блоков:
- поставщики/покупатели/взаиморасчеты;
- реализация/неоплата/90+62;
- банк/выписки/51;
- товары/склад/41;
- материалы/10;
- РБП/97;
- ОС/01-02.

## Совместимость и риск

Изменения в `v1.1.2.1` сделаны как controlled extension:
- schema не менялась;
- базовые route-policy и boundary-policy из `v1.1.2` сохранены;
- добавлено только покрытие новых формулировок и новый eval-pack.

## Артефакты этапа

- `prompts/developer/normalizer_v1_1_2_1.txt`
- `prompts/fewshot/normalizer_fewshot_v1_1_2_1.txt`
- `eval_cases/normalizer_eval_v1_1_2_1_30cases.json`
- `reports/normalizer_v1_1_2_1_eval.json` (после strict-run)
- `reports/normalizer_v1_1_2_1_eval.md` (после strict-run)

## Результат контрольного прогона

Strict-run выполнен на `normalizer_eval_v1_1_2_1_30cases.json` в режиме `use_mock=true`.

- run_id: `eval-qfxRc9_xyJ`
- cases_total: `30`
- schema_validation_pass_rate: `100`
- intent_class_accuracy: `83.33`
- route_hint_accuracy: `100`
- causal_flag_accuracy: `93.33`
- high_confidence_error_rate: `0`

Комментарий:
- mock-режим использует внутренние эвристики и не отражает финальное LLM-качество 1:1;
- для production-приемки нужен повтор этого же strict-run в `use_mock=false`.
