chore: curatare agresiva comentarii — scoatere referinte US/PRD din cod si template-uri
Eliminat zgomotul de trasabilitate (US-xxx, PRD x.x, Rn, OV-x, Tn, decizii/naratiune istorica) din 41 fisiere app/ + template-uri. Pastrate comentariile care documenteaza invarianti si logica ne-evidenta (idempotenta/hash, reconciliere anti-duplicat, RAR 500 esec definitiv, creds per cont, WAF User-Agent, 422 fara echo de parola, scope NULL->1), curatate doar de tokeni. Verificare: pentru cele 27 module .py curatate, structura de cod (tokeni non-comentariu/ non-string) e IDENTICA fata de HEAD -> doar comentarii/docstring-uri schimbate. Singura schimbare de cod e in tests/test_web_responsive.py (scos 3 assert pe markeri US-006/007/008, inlocuite de asertiunile structurale alaturate). 0 tokeni US/PRD reziduali in app/. Regresie: 896 passed, 1 deselected. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,24 +1,18 @@
|
||||
"""Cheie de idempotenta = hash de continut canonic.
|
||||
|
||||
RAR nu are camp nr. comanda si accepta duplicate -> dedup-ul e in sarcina noastra
|
||||
(plan.md sect. 14). Hash stabil peste o reprezentare canonica a prezentarii.
|
||||
RAR nu are camp nr. comanda si accepta duplicate -> dedup-ul e in sarcina noastra.
|
||||
Hash stabil peste o reprezentare canonica a prezentarii.
|
||||
|
||||
Treapta 2 (T9 + OV-2): extrage canonicalize_row + build_key ca helpere publice
|
||||
partajate intre canalul API si canalul import.
|
||||
canonicalize_row + build_key sunt helpere publice partajate intre canalul API si
|
||||
canalul import:
|
||||
- canonicalize_row: normeaza VIN/nr/odometru (strip ".0" Excel coercion) INAINTE
|
||||
de validare (§3.4bis) si INAINTE de cheie.
|
||||
de validare si INAINTE de cheie.
|
||||
- build_key: aplica account_or_default INAINTE de hash (None si 1 => o cheie).
|
||||
Altfel acelasi rand logic din canale diferite (account_id None pe canalul API,
|
||||
1 pe import) ar primi chei diferite -> al doilea FINALIZATA duplicat.
|
||||
|
||||
OV-2 — skew account_id: routerul vechi pasa account_id AS-PASSED (None pe canal API
|
||||
fara auth). Randurile se stocau sub account_or_default=1, dar cheia includea None.
|
||||
Acelasi rand logic din import (account_id=1) dadea cheie diferita -> already_sent
|
||||
rata -> al doilea FINALIZATA. Fix: build_key normalizeaza INTOTDEAUNA la
|
||||
account_or_default inainte de hash.
|
||||
|
||||
Migrare DB productie (OV-2): randurile existente cu cheie-None nu mai sunt gasite de
|
||||
build_key nou. Strategie documentata: dual-lookup la already_sent (incearca cheia
|
||||
noua, apoi cheia legacy). In dev nu exista date reale; la first-deploy productie
|
||||
se poate face recompute-keys o singura data.
|
||||
Randuri vechi cu cheie-None nu sunt gasite de build_key nou: dual-lookup la
|
||||
already_sent (cheia noua, apoi build_key_legacy) sau recompute-keys o singura data.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
@@ -46,10 +40,7 @@ def canonicalize_row(raw: dict[str, Any]) -> dict[str, Any]:
|
||||
- data_prestatie: strip (normalizarea la YYYY-MM-DD se face in parser).
|
||||
- prestatii: pastrate ca-atare (rezolvarea e in resolve_prestatii).
|
||||
"""
|
||||
# VIN
|
||||
vin = (raw.get("vin") or "").strip().upper()
|
||||
|
||||
# Nr. inmatriculare
|
||||
nr = (raw.get("nr_inmatriculare") or "").strip().upper()
|
||||
|
||||
# Odometru: strip ".0" Excel float coercion
|
||||
@@ -82,8 +73,8 @@ def canonicalize_row(raw: dict[str, Any]) -> dict[str, Any]:
|
||||
def build_key(account_id: int | None, canon: dict[str, Any]) -> str:
|
||||
"""SHA-256 partajat canal-API + canal-import.
|
||||
|
||||
Aplica account_or_default inainte de hash (OV-2): None si 1 colapseaza la
|
||||
aceeasi cheie => acelasi rand logic din canale diferite nu se trimite de doua ori.
|
||||
Aplica account_or_default inainte de hash: None si 1 colapseaza la aceeasi
|
||||
cheie => acelasi rand logic din canale diferite nu se trimite de doua ori.
|
||||
"""
|
||||
# Import local ca sa evitam import circular (mapping importa din idempotency via validator)
|
||||
from .mapping import account_or_default
|
||||
@@ -106,8 +97,8 @@ def idempotency_key(account_id: int | None, prezentare: dict[str, Any]) -> str:
|
||||
Wrapper backward-compat peste canonicalize_row + build_key.
|
||||
Exclude obs si b64Image (cosmetice, nu definesc unicitatea declaratiei).
|
||||
|
||||
NOTA: dupa OV-2, account_id=None si account_id=1 produc ACEEASI cheie
|
||||
(via account_or_default in build_key). Randuri vechi cu cheie-None nu sunt
|
||||
NOTA: account_id=None si account_id=1 produc ACEEASI cheie (via
|
||||
account_or_default in build_key). Randuri vechi cu cheie-None nu sunt
|
||||
acoperite automat — dual-lookup sau recompute-keys la migrare productie.
|
||||
"""
|
||||
canon = canonicalize_row(prezentare)
|
||||
@@ -117,8 +108,8 @@ def idempotency_key(account_id: int | None, prezentare: dict[str, Any]) -> str:
|
||||
def build_key_legacy(account_id: int | None, prezentare: dict[str, Any]) -> str:
|
||||
"""Cheia in formatul vechi (account_id AS-PASSED, fara canonicalize).
|
||||
|
||||
Folosita EXCLUSIV pentru dual-lookup la already_sent pe DB cu randuri vechi
|
||||
(dinainte de T9). Nu folosi pentru randuri noi.
|
||||
Folosita EXCLUSIV pentru dual-lookup la already_sent pe DB cu randuri vechi.
|
||||
Nu folosi pentru randuri noi.
|
||||
"""
|
||||
canonic = {
|
||||
"account_id": account_id,
|
||||
|
||||
Reference in New Issue
Block a user