feat(sync): gate CUI invalid/ANAF-notFound → ERROR inainte de import Oracle
Incident 22.04.2026 (#485225171 NONA ROYAL SRL): clientul a inversat cod_fiscal cu registru in GoMag → sistem a creat partener cu CUI=J1994000194225. Adauga evaluate_cui_gate() care blocheaza comanda (ERROR) daca: - CUI format invalid (ex: J.. in loc de cifre) - CUI nu trece cifra de control - ANAF returneaza explicit notFound (scpTVA=None + denumire_anaf="") ANAF down (anaf_data=None) → fallback pass, comportament existent pastrat. _record_order_error() DRY helper evita duplicarea upsert/add_items. Contract ANAF down/notFound/found documentat in anaf_service._call_anaf_api. 9 teste unit (inclusiv T5 CRITIC: ANAF down nu blocheaza) + T7 COALESCE. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -141,6 +141,12 @@ async def _call_anaf_api(body: list[dict], retry: int = 0, log_fn=None) -> dict[
|
||||
|
||||
checked_at = datetime.now().isoformat()
|
||||
|
||||
# CONTRACT (consumed by sync_service.evaluate_cui_gate):
|
||||
# Return {} → transient error (down/429/5xx/timeout)
|
||||
# Return {cui: {scpTVA: None, denumire_anaf: ""}} → ANAF notFound explicit
|
||||
# Return {cui: {scpTVA: bool, denumire_anaf: str}} → ANAF found
|
||||
# If you change this semantics, update the gate in sync_service too.
|
||||
|
||||
# Parse ANAF response
|
||||
found_list = data.get("found", [])
|
||||
for item in found_list:
|
||||
|
||||
Reference in New Issue
Block a user