feat(editor): editor prestatii unificat in modal - un select, un rand de chips (PRD 5.23)
Inlocuieste cele 3 controale de asociere cod RAR cu un singur rand de chips + un singur select care adauga instant la change. Stare = un hidden chips_state JSON versionat; post_form_chips redus la 2 actiuni (add/remove). Optgroup Sugestii (fuzzy/k-NN) + optiune "Nu se declara la RAR" in select, cu tinta implicita evidentiata si placeholder care o numeste. exclus persistat prin payload_json (treapta noua de precedenta in resolve_prestatii, round-trip complet). Siguranta: itemii exclusi sunt scosi din payload la momentul trimiterii (worker split_prestatii_excluse inainte de build_rar_payload + filtru defensiv), ca sa nu ajunga NICIODATA la RAR ca codPrestatie:null. Suita: 1680 passed, 1 skipped. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -266,11 +266,16 @@ def resolve_prestatii(
|
||||
COD_PRESTATIE max 5 car.); un cod necunoscut da HTTP 500 si RECORD PARTIAL
|
||||
la RAR (terminal) -> nu-l trimitem niciodata raw.
|
||||
|
||||
Precedenta (stricta): `cod_prestatie` direct valid > exclus de la declarare >
|
||||
mapare exacta `cod_op_service` in `mapping` > reguli text > nemapat. Un cod ales
|
||||
explicit pe rand (editor) bate regula de excludere; regula de excludere bate
|
||||
regulile text. Regulile text se incearca DOAR cand nu exista cod valid SI op
|
||||
nu e in `mapping`.
|
||||
Precedenta (stricta): item-exclus EXPLICIT (`exclus=1` venit pe item, ex. din
|
||||
editorul de chips) > `cod_prestatie` direct valid > exclus de la declarare
|
||||
(regula de cont) > mapare exacta `cod_op_service` in `mapping` > reguli text >
|
||||
nemapat. Un item marcat explicit `exclus` de utilizator (editor) domina TOT —
|
||||
inclusiv un `cod_prestatie` deja valid pe rand — pentru ca alegerea explicita
|
||||
"Nu se declara la RAR" e intentia cea mai recenta si trebuie sa supravietuiasca
|
||||
re-rezolvarii (altfel un item exclus ar reveni needs_mapping sau, mai rau, ar fi
|
||||
declarat la RAR). Restul precedentei (cod valid > exclus de cont > mapare >
|
||||
reguli text) e NESCHIMBAT. Regulile text se incearca DOAR cand nu exista cod
|
||||
valid SI op nu e in `mapping`.
|
||||
|
||||
`valid_codes` = setul de coduri RAR valide (uppercase) din nomenclator. Cand e
|
||||
None, validarea e dezactivata (compat: comportamentul vechi „cod_prestatie trece
|
||||
@@ -295,11 +300,21 @@ def resolve_prestatii(
|
||||
# un cod_sursa/flag stale din payload -> telemetrie falsa + hold gresit.
|
||||
it.pop("cod_sursa", None)
|
||||
it.pop("regula_fara_autosend", None)
|
||||
it.pop("exclus", None)
|
||||
exclus_explicit = bool(it.pop("exclus", None))
|
||||
cod = (it.get("cod_prestatie") or "").strip().upper()
|
||||
op = (it.get("cod_op_service") or "").strip()
|
||||
cod_valid = bool(cod) and (valid_codes is None or cod in valid_codes)
|
||||
if cod_valid:
|
||||
if exclus_explicit:
|
||||
# Treapta noua (precedenta maxima): alegerea explicita "Nu se declara la
|
||||
# RAR" (editor de chips) supravietuieste re-rezolvarii, chiar daca ramane
|
||||
# (sau a ramas) un cod_prestatie valid pe rand.
|
||||
if cod and not op:
|
||||
op = cod
|
||||
if op and not it.get("cod_op_service"):
|
||||
it["cod_op_service"] = op
|
||||
it["cod_prestatie"] = None
|
||||
it["exclus"] = True
|
||||
elif cod_valid:
|
||||
it["cod_prestatie"] = cod
|
||||
else:
|
||||
# cod lipsa SAU necunoscut in nomenclator -> ruta de mapare.
|
||||
|
||||
Reference in New Issue
Block a user