# CLAUDE.md ## Project Overview **System:** Import Comenzi Web GoMag → Sistem ROA Oracle Stack: FastAPI + Jinja2 + Bootstrap 5.3 + Oracle PL/SQL + SQLite Documentatie completa: [README.md](README.md) ## Implementare cu TeamCreate **OBLIGATORIU:** Folosim TeamCreate + TaskCreate, NU Agent tool cu subagenti paraleli. Skill-ul `superpowers:dispatching-parallel-agents` NU se aplica in acest proiect. - Team lead citeste TOATE fisierele implicate, creeaza planul - **ASTEAPTA aprobare explicita** de la user inainte de implementare - Task-uri pe fisiere non-overlapping (evita conflicte) - Cache-bust static assets (`?v=N`) la fiecare schimbare UI ## Development Commands ```bash # INTOTDEAUNA via start.sh (seteaza Oracle env vars) ./start.sh # NU folosi uvicorn direct — lipsesc LD_LIBRARY_PATH si TNS_ADMIN # Tests python api/test_app_basic.py # fara Oracle python api/test_integration.py # cu Oracle ``` ## Reguli critice (nu le incalca) ### Flux import comenzi 1. Download GoMag API → JSON → parse → validate SKU-uri → import Oracle 2. Ordinea: **parteneri** (cauta/creeaza) → **adrese** → **comanda** → **factura cache** 3. SKU lookup: ARTICOLE_TERTI (mapped) are prioritate fata de NOM_ARTICOLE (direct) 4. Complex sets (kituri/pachete): un SKU → multiple CODMAT-uri cu `cantitate_roa`; preturile se preiau din lista de preturi Oracle 5. Comenzi anulate (GoMag statusId=7): verifica daca au factura inainte de stergere din Oracle ### Statusuri comenzi `IMPORTED` / `ALREADY_IMPORTED` / `SKIPPED` / `ERROR` / `CANCELLED` / `DELETED_IN_ROA` - Upsert: `IMPORTED` existent NU se suprascrie cu `ALREADY_IMPORTED` - Recovery: la fiecare sync, comenzile ERROR sunt reverificate in Oracle ### Parteneri - Prioritate: **companie** (PJ, cod_fiscal + registru) daca exista in GoMag, altfel persoana fizica cu **shipping name** - Adresa livrare: intotdeauna GoMag shipping - Adresa facturare: daca shipping ≠ billing person → shipping pt ambele; altfel → billing din GoMag ### Preturi - Dual policy: articolele sunt rutate la `id_pol_vanzare` sau `id_pol_productie` pe baza contului contabil (341/345 = productie) - Daca pretul lipseste, se insereaza automat pret=0 ### Dashboard paginare - Contorul din paginare arata **totalul comenzilor** din perioada selectata (ex: "378 comenzi"), NU doar cele filtrate - Butoanele de filtru (Importat, Omise, Erori, Facturate, Nefacturate, Anulate) arata fiecare cate comenzi are pe langa total - Aceasta este comportamentul dorit: userul vede cate comenzi totale sunt, din care cate importate, cu erori etc. ### Invoice cache - Coloanele `factura_*` pe `orders` (SQLite), populate lazy din Oracle (`vanzari WHERE sters=0`) - Refresh complet: verifica facturi noi + facturi sterse + comenzi sterse din ROA ## Deploy Windows Vezi [README.md](README.md#deploy-windows)