# Claude Learn: Backend **Domain**: backend **Last updated**: 2026-01-06 **Sessions recorded**: 1 Knowledge about FastAPI, Python services, Oracle DB, and backend architecture. --- ## Patterns ### ProfileRegistry cu Hot-Reload pentru Store Profiles **Discovered**: 2026-01-06 (feature: ocr-store-profiles) **Description**: Sistem de înregistrare profile OCR folosind decorator `@ProfileRegistry.register` cu hot-reload via `importlib.reload()`. Permite adăugarea/modificarea profilelor fără restart server. **Example** (`backend/modules/data_entry/services/ocr/profiles/__init__.py`): ```python class ProfileRegistry: _profiles: Dict[str, Type["BaseStoreProfile"]] = {} _instances: Dict[str, "BaseStoreProfile"] = {} @classmethod def register(cls, profile_class): """Decorator to register a store profile class.""" for cui in profile_class.CUI_LIST: cls._profiles[cls._normalize_cui(cui)] = profile_class return profile_class @classmethod def reload_all(cls): """Hot-reload all profile modules via importlib.reload().""" cls._instances.clear() for module_name in cls._get_profile_module_names(): importlib.reload(sys.modules[f"backend...profiles.{module_name}"]) ``` **Usage**: ```python @ProfileRegistry.register class LidlProfile(BaseStoreProfile): CUI_LIST = ["22891860"] STORE_NAME = "LIDL DISCOUNT S.R.L." # Lookup profile = ProfileRegistry.get_profile("22891860") # Hot-reload (endpoint) POST /api/data-entry/ocr/profiles/reload ``` **Tags**: registry-pattern, hot-reload, decorator, ocr, singleton --- ### Script generare cod Python din analiză PDF **Discovered**: 2026-01-06 (feature: ocr-store-profiles) **Description**: Script care analizează PDF-uri via OCR API, detectează pattern-uri (TVA format, date format, payment) și generează automat cod Python pentru profile noi. Include JWT auth, async polling, și verificare sintaxă. **Example** (`scripts/generate_store_profile.py`): ```python def analyze_tva_patterns(results: List[Dict]) -> Dict: """Detectează format TVA dominant din rezultatele OCR.""" tva_formats = defaultdict(int) for text in raw_texts: if re.search(r'TVA\s+[A-D]\s+\d{1,2}', text_upper): tva_formats["lidl_multi_rate"] += 1 if re.search(r'BAZA\s+TVA', text_upper): tva_formats["table"] += 1 return {"dominant_format": max(tva_formats, key=tva_formats.get)} def generate_profile_code(store_name, cui, tva_analysis, ...): """Generează cod Python pentru clasa de profil.""" # Template-based generation cu OCR error variants ``` **Usage**: ```bash # Dry-run pentru preview python scripts/generate_store_profile.py \ --name "Magazin Nou" --cui "12345678" \ --receipts "docs/data-entry/MagazinNou*.pdf" --dry-run # Generează și salvează python scripts/generate_store_profile.py \ --name "Magazin Nou" --cui "12345678" \ --receipts "docs/data-entry/MagazinNou*.pdf" \ --output backend/.../profiles/magazin_nou.py ``` **Tags**: code-generation, ocr, automation, cli-tool --- ## Gotchas _(None recorded yet)_ --- ## Statistics - **Total Patterns**: 2 - **Total Gotchas**: 0 - **Last Session**: 2026-01-06 - **Sessions Recorded**: 1