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:
@@ -80,3 +80,69 @@ def test_operatie_fallback_la_cod():
|
||||
d = prezentare_din_payload({"prestatii": [{"cod_op_service": "OP-77"}]})
|
||||
assert d["cod"] == "OP-77"
|
||||
assert d["operatie"] == "OP-77"
|
||||
|
||||
|
||||
# --- US-005: cod_rar distinct ---
|
||||
|
||||
def test_cod_rar_prezent_cand_mapat():
|
||||
"""cod_prestatie prezent -> cod_rar e uppercase + strip '.0'."""
|
||||
d = prezentare_din_payload({
|
||||
"prestatii": [{"cod_prestatie": "r-frane", "denumire": "Reparatie frane"}]
|
||||
})
|
||||
assert d["cod_rar"] == "R-FRANE"
|
||||
|
||||
# defensiv ca odometru: strip '.0' chiar daca codurile RAR nu au zecimale
|
||||
d2 = prezentare_din_payload({
|
||||
"prestatii": [{"cod_prestatie": "oe-2.0"}]
|
||||
})
|
||||
assert d2["cod_rar"] == "OE-2"
|
||||
|
||||
# deja uppercase + fara zecimale -> trece neschimbat
|
||||
d3 = prezentare_din_payload({
|
||||
"prestatii": [{"cod_prestatie": "OE-2", "denumire": "Verificare"}]
|
||||
})
|
||||
assert d3["cod_rar"] == "OE-2"
|
||||
|
||||
|
||||
def test_cod_rar_gol_cand_nemapat():
|
||||
"""cod_prestatie absent/None -> cod_rar == EMPTY; NU cade pe cod_op_service."""
|
||||
# doar cod_op_service prezent
|
||||
d = prezentare_din_payload({
|
||||
"prestatii": [{"cod_op_service": "OP-77", "denumire": "Verificare faruri"}]
|
||||
})
|
||||
assert d["cod_rar"] == EMPTY
|
||||
|
||||
# fara prestatii deloc
|
||||
d2 = prezentare_din_payload({"vin": "WVWZZZ1JZXW000001"})
|
||||
assert d2["cod_rar"] == EMPTY
|
||||
|
||||
# cod_prestatie explicit None
|
||||
d3 = prezentare_din_payload({
|
||||
"prestatii": [{"cod_prestatie": None, "cod_op_service": "OP-99"}]
|
||||
})
|
||||
assert d3["cod_rar"] == EMPTY
|
||||
|
||||
|
||||
def test_operatie_ramane_denumire_sau_op():
|
||||
"""operatie si cod raman neschimbate (compatibilitate cu apelantii existenti)."""
|
||||
# cu ambele coduri -> operatie=denumire, cod=cod_prestatie (neschimbat)
|
||||
d = prezentare_din_payload({
|
||||
"prestatii": [{"cod_prestatie": "R-FRANE", "cod_op_service": "OP-1",
|
||||
"denumire": "Reparatie frane"}]
|
||||
})
|
||||
assert d["operatie"] == "Reparatie frane"
|
||||
assert d["cod"] == "R-FRANE"
|
||||
|
||||
# fara denumire, doar cod_op_service -> operatie=cod intern, cod=cod intern
|
||||
d2 = prezentare_din_payload({
|
||||
"prestatii": [{"cod_op_service": "OP-77"}]
|
||||
})
|
||||
assert d2["operatie"] == "OP-77"
|
||||
assert d2["cod"] == "OP-77"
|
||||
|
||||
# cod_rar nu afecteaza cod si operatie
|
||||
d3 = prezentare_din_payload({
|
||||
"prestatii": [{"cod_prestatie": "oe-2", "denumire": "Verificare"}]
|
||||
})
|
||||
assert d3["operatie"] == "Verificare"
|
||||
assert d3["cod"] == "oe-2" # cod ramas neschimbat (nu uppercase)
|
||||
|
||||
Reference in New Issue
Block a user