feat(5.8): reguli mapare pe text (substring/cont) + UX tabel trimiteri (detaliu inline, fara scroll, cod RAR)
Reguli text per cont (operation_text_rules), resolve_prestatii cu param aditiv text_rules + precedenta stricta, threadat pe toate cele 6 callsite-uri + valid_codes + seam classify_prezentare. UI Mapari: sectiune reguli + preview pre-salvare + overlap + telemetrie text_rule_hit. UX tabel: cod_rar sub operatie, pill eticheta scurta, fara scroll orizontal (scopat .tabel-trimiteri + carduri <768px), detaliu inline expandabil (a11y + pauza poll). code-review: reparat regula auto_send=0 care trimitea automat la RAR in loc sa tina randul pentru review. 814 passed. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -108,6 +108,78 @@ def test_resolve_fara_valid_codes_e_backcompat():
|
||||
assert unmapped == []
|
||||
|
||||
|
||||
# --------------------------------------------------------------------------- #
|
||||
# US-002: reguli text (substring) dupa maparea exacta #
|
||||
# --------------------------------------------------------------------------- #
|
||||
|
||||
def test_regula_text_contains_rezolva():
|
||||
"""O operatie nemapata al carei text CONTINE pattern-ul primeste codul regulii."""
|
||||
text_rules = [{"pattern": "verificare", "cod_prestatie": "OE-2", "auto_send": 0, "priority": 0}]
|
||||
resolved, unmapped = resolve_prestatii(
|
||||
[{"cod_op_service": "OP1", "denumire": "Verificare faruri"}],
|
||||
{},
|
||||
valid_codes={"OE-2"},
|
||||
text_rules=text_rules,
|
||||
)
|
||||
assert resolved[0]["cod_prestatie"] == "OE-2"
|
||||
assert unmapped == []
|
||||
|
||||
|
||||
def test_mapare_exacta_bate_regula_text():
|
||||
"""Maparea exacta cod_op_service->cod are precedenta peste regula text."""
|
||||
text_rules = [{"pattern": "verificare", "cod_prestatie": "OE-2", "auto_send": 0, "priority": 0}]
|
||||
resolved, unmapped = resolve_prestatii(
|
||||
[{"cod_op_service": "OP1", "denumire": "Verificare faruri"}],
|
||||
{"OP1": "OE-1"},
|
||||
valid_codes={"OE-1", "OE-2"},
|
||||
text_rules=text_rules,
|
||||
)
|
||||
assert resolved[0]["cod_prestatie"] == "OE-1" # maparea exacta castiga
|
||||
assert unmapped == []
|
||||
|
||||
|
||||
def test_regula_text_insensibila_diacritice_caz():
|
||||
"""Match-ul e insensibil la diacritice si majuscule (ambele parti normalizate)."""
|
||||
text_rules = [{"pattern": "Verificări", "cod_prestatie": "OE-2", "auto_send": 0, "priority": 0}]
|
||||
resolved, unmapped = resolve_prestatii(
|
||||
[{"cod_op_service": "OP1", "denumire": "VERIFICARI complete auto"}],
|
||||
{},
|
||||
valid_codes={"OE-2"},
|
||||
text_rules=text_rules,
|
||||
)
|
||||
assert resolved[0]["cod_prestatie"] == "OE-2"
|
||||
assert unmapped == []
|
||||
|
||||
|
||||
def test_regula_text_cod_invalid_in_nomenclator_ramane_nemapat():
|
||||
"""Regula da match dar codul ei nu e in nomenclator -> operatia ramane nemapata."""
|
||||
text_rules = [{"pattern": "verificare", "cod_prestatie": "ZZZ", "auto_send": 0, "priority": 0}]
|
||||
resolved, unmapped = resolve_prestatii(
|
||||
[{"cod_op_service": "OP1", "denumire": "Verificare faruri"}],
|
||||
{},
|
||||
valid_codes={"OE-2"},
|
||||
text_rules=text_rules,
|
||||
)
|
||||
assert resolved[0]["cod_prestatie"] is None
|
||||
assert unmapped == [{"cod_op_service": "OP1", "denumire": "Verificare faruri"}]
|
||||
|
||||
|
||||
def test_prima_regula_dupa_priority_castiga():
|
||||
"""La match multiplu castiga prima regula in ordinea listei (priority, id)."""
|
||||
text_rules = [
|
||||
{"pattern": "verificare faruri", "cod_prestatie": "OE-3", "auto_send": 0, "priority": 0},
|
||||
{"pattern": "verificare", "cod_prestatie": "OE-2", "auto_send": 0, "priority": 1},
|
||||
]
|
||||
resolved, unmapped = resolve_prestatii(
|
||||
[{"cod_op_service": "OP1", "denumire": "Verificare faruri"}],
|
||||
{},
|
||||
valid_codes={"OE-2", "OE-3"},
|
||||
text_rules=text_rules,
|
||||
)
|
||||
assert resolved[0]["cod_prestatie"] == "OE-3" # prima din lista
|
||||
assert unmapped == []
|
||||
|
||||
|
||||
# --------------------------------------------------------------------------- #
|
||||
# Flux complet (API) #
|
||||
# --------------------------------------------------------------------------- #
|
||||
|
||||
Reference in New Issue
Block a user