Нормализовать юрлица в truth-harness фильтрах

This commit is contained in:
dctouch 2026-06-03 13:54:06 +03:00
parent 66d5f68270
commit ef8391e069
2 changed files with 85 additions and 2 deletions

View File

@ -976,7 +976,7 @@ def evaluate_truth_step(
expected=expected_value, expected=expected_value,
) )
continue continue
if actual_value != expected_value: if not dcl.validation_filter_values_match(filter_key, actual_value, expected_value):
append_finding( append_finding(
findings, findings,
step, step,
@ -1006,7 +1006,10 @@ def evaluate_truth_step(
) )
for filter_key, forbidden_values in forbidden_filter_values.items(): for filter_key, forbidden_values in forbidden_filter_values.items():
actual_value = normalize_actual_filter_value(filter_key, extracted_filters.get(filter_key)) actual_value = normalize_actual_filter_value(filter_key, extracted_filters.get(filter_key))
if actual_value and actual_value in forbidden_values: if actual_value and any(
dcl.validation_filter_values_match(filter_key, actual_value, forbidden_value)
for forbidden_value in forbidden_values
):
append_finding( append_finding(
findings, findings,
step, step,

View File

@ -0,0 +1,80 @@
from __future__ import annotations
import sys
import unittest
from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parent))
import domain_truth_harness as dth
class DomainTruthHarnessTests(unittest.TestCase):
def test_required_organization_filter_accepts_quoted_legal_name(self) -> None:
step = dth.normalize_step_spec(
1,
{
"step_id": "step_01",
"title": "Inventory root",
"question_template": "что там на складе по остаткам",
"required_filters": {"organization": "ООО Альтернатива Плюс"},
},
)
reviewed = dth.evaluate_truth_step(
step=step,
step_state={
"question_resolved": "что там на складе по остаткам",
"reply_type": "factual",
"assistant_text": "На складе подтверждено 11 позиций.",
"extracted_filters": {"organization": 'ООО "Альтернатива Плюс"'},
},
step_results={},
bindings={},
runtime_bindings={},
)
self.assertEqual(reviewed["review_status"], "pass")
self.assertFalse(
[
finding
for finding in reviewed["review_findings"]
if finding.get("code") == "wrong_filter:organization"
]
)
def test_forbidden_organization_filter_matches_quoted_legal_name(self) -> None:
step = dth.normalize_step_spec(
1,
{
"step_id": "step_01",
"title": "Wrong organization scope",
"question_template": "что там на складе по остаткам",
"forbidden_filter_values": {"organization": ["ООО Альтернатива Плюс"]},
},
)
reviewed = dth.evaluate_truth_step(
step=step,
step_state={
"question_resolved": "что там на складе по остаткам",
"reply_type": "factual",
"assistant_text": "На складе подтверждено 11 позиций.",
"extracted_filters": {"organization": 'ООО "Альтернатива Плюс"'},
},
step_results={},
bindings={},
runtime_bindings={},
)
self.assertEqual(reviewed["review_status"], "fail")
self.assertTrue(
[
finding
for finding in reviewed["review_findings"]
if finding.get("code") == "forbidden_filter_value:organization"
]
)
if __name__ == "__main__":
unittest.main()