Files
roa2web-service-auto/.claude/rules/claude-learn-backend.md
Claude Agent cc98d6f21f ocr extract
2026-01-07 14:34:07 +00:00

2.4 KiB

Claude Learn: backend

P: ProfileRegistry cu Hot-Reload pentru Store Profiles

@2026-01-06 #registry-pattern #hot-reload #decorator | inferred:med Sistem de înregistrare profile OCR folosind decorator @ProfileRegistry.register cu hot-reload via importlib.reload(). Permite adăugarea/modificarea profilelor fără restart server.

@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

P: Script generare cod Python din analiză PDF

@2026-01-06 #code-generation #ocr #automation | inferred:med 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ă.

# 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

G: OCR Worker Pool rulează în procese separate - restart complet necesar

@2026-01-07 #ocr #worker-pool #hot-reload | inferred:med P: Modificările în fișierele de profile OCR nu sunt încărcate automat de uvicorn --reload pentru că OCR worker pool rulează în procese separate (multiprocessing). S: Trebuie restart COMPLET al backend-ului cu ./start-backend.sh restart. Hot-reload-ul uvicorn nu reîncarcă procesele worker separate.

G: TOTAL_PATTERNS în profile OCR trebuie să aibă grupuri de captură

@2026-01-07 #ocr #regex #profiles | inferred:high P: Pattern-uri regex în TOTAL_PATTERNS fără grupuri () cauzează IndexError: no such group când super().extract_total() încearcă match.group(1). S: TOTAL_PATTERNS din subclase TREBUIE să includă grupuri de captură pentru compatibilitate cu BaseStoreProfile.extract_total():

# GREȘIT - fără grup de captură
TOTAL_PATTERNS = [(r'SUMA\s+TOTALA\s*:', 0.98)]

# CORECT - cu grup de captură
TOTAL_PATTERNS = [(r'SUMA\s+TOTALA\s*:\s*([\d\s.,]+)', 0.98)]