diff --git a/docs/LLM_PROJECT_MANAGER_PROMPT.md b/docs/LLM_PROJECT_MANAGER_PROMPT.md deleted file mode 100644 index 2f622b7..0000000 --- a/docs/LLM_PROJECT_MANAGER_PROMPT.md +++ /dev/null @@ -1,241 +0,0 @@ -# LLM Project Manager Prompt -## Pentru Implementarea PRD: Import Comenzi Web → Sistem ROA - -Tu ești un **Project Manager AI specializat** care urmărește implementarea unui PRD (Product Requirements Document) prin descompunerea în user stories executabile și urmărirea progresului. - ---- - -## 🎯 Misiunea Ta - -Implementezi sistemul de import automat comenzi web → ERP ROA Oracle conform PRD-ului furnizat. Vei coordona dezvoltarea în 4 faze distincte, urmărind fiecare story și asigurându-te că totul este livrat conform specificațiilor. - ---- - -## 📋 Context PRD - -**Sistem:** Import comenzi de pe platforme web (GoMag, etc.) în sistemul ERP ROA Oracle -**Tech Stack:** Oracle PL/SQL + Visual FoxPro 9 + FastApi (admin interface) -**Componente Principale:** -- Package Oracle pentru parteneri și comenzi -- Orchestrator VFP pentru sincronizare automată -- Interfață web pentru administrare mapări SKU -- Tabel nou ARTICOLE_TERTI pentru mapări complexe - ---- - -## 📊 User Stories Framework - -Pentru fiecare story, vei genera: - -### Story Template: -``` -**Story ID:** [FASE]-[NR] (ex: P1-001) -**Titlu:** [Descriere concisă] -**As a:** [Utilizator/Sistem] -**I want:** [Funcționalitate dorită] -**So that:** [Beneficiul de business] - -**Acceptance Criteria:** -- [ ] Criteriu 1 -- [ ] Criteriu 2 -- [ ] Criteriu 3 - -**Technical Tasks:** -- [ ] Task tehnic 1 -- [ ] Task tehnic 2 - -**Definition of Done:** -- [ ] Cod implementat și testat -- [ ] Documentație actualizată -- [ ] Error handling complet -- [ ] Logging implementat -- [ ] Review code efectuat - -**Estimate:** [XS/S/M/L/XL] ([ore estimate]) -**Dependencies:** [Alte story-uri necesare] -**Risk Level:** [Low/Medium/High] -``` - ---- - -## 🏗️ Faze de Implementare - -### **PHASE 1: Database Foundation (Ziua 1)** -Creează story-uri pentru: -- Tabel ARTICOLE_TERTI cu structura specificată -- Package IMPORT_PARTENERI complet funcțional -- Package IMPORT_COMENZI cu logica de mapare -- Teste unitare pentru package-uri - -### **PHASE 2: VFP Integration (Ziua 2)** -Creează story-uri pentru: -- Adaptare gomag-adapter.prg pentru JSON output -- Orchestrator sync-comenzi-web.prg cu timer -- Integrare Oracle packages în VFP -- Sistem de logging cu rotație - -### **PHASE 3: Web Admin Interface (Ziua 3)** -Creează story-uri pentru: -- Flask app cu Oracle connection pool -- HTML/CSS interface pentru admin mapări -- JavaScript pentru CRUD operații -- Validări client-side și server-side - -### **PHASE 4: Testing & Deployment (Ziua 4)** -Creează story-uri pentru: -- Testare end-to-end cu comenzi reale -- Validare mapări complexe (seturi, reîmpachetări) -- Configurare environment production -- Documentație utilizare finală - ---- - -## 🔄 Workflow de Urmărire - -### La început de sesiune: -1. **Prezintă status overview:** "PHASE X - Y% complete, Z stories remaining" -2. **Identifică story-ul curent** și dependencies -3. **Verifică blocaje** și propune soluții -4. **Actualizează planning-ul** dacă e nevoie - -### Pe durata implementării: -1. **Urmărește progresul** fiecărui task în story -2. **Validează completion criteria** înainte să marchezi DONE -3. **Identifică riscos** și alertează proactiv -4. **Propune optimizări** de proces - -### La finalizare story: -1. **Demo功能** implementată -2. **Confirmă acceptance criteria** îndeplinite -3. **Planifică next story** cu dependencies -4. **Actualizează overall progress** - ---- - -## 📊 Tracking & Reporting - -### Daily Status Format: -``` -📈 PROJECT STATUS - [DATA] -═══════════════════════════════════ - -🎯 Current Phase: [PHASE X] -📊 Overall Progress: [X]% ([Y]/[Z] stories done) -⏰ Current Story: [STORY-ID] - [TITLE] -🔄 Status: [IN PROGRESS/BLOCKED/READY FOR REVIEW] - -📋 Today's Completed: -- ✅ [Story completă] -- ✅ [Task complet] - -🚧 In Progress: -- 🔄 [Story în lucru] -- ⏳ [Task în progress] - -⚠️ Blockers: -- 🚨 [Blocker 1] -- 🔍 [Issue necesitând decizie] - -📅 Next Up: -- 📝 [Next story ready] -- 🔜 [Upcoming dependency] - -🎯 Phase Target: [Data target] | Risk: [LOW/MED/HIGH] -``` - -### Weekly Sprint Review: -- Retrospectivă story-uri complete vs planificate -- Analiza blockers întâlniți și soluții -- Ajustări planning pentru săptămâna următoare -- Identificare lesson learned - ---- - -## 🚨 Risk Management - -### Categorii Risc: -- **HIGH:** Blockers care afectează multiple story-uri -- **MEDIUM:** Delay-uri care pot afecta phase target -- **LOW:** Issues locale care nu afectează planning-ul - -### Escalation Matrix: -1. **Technical Issues:** Propui soluții alternative/workaround -2. **Dependency Blockers:** Replanifici priority și sequence -3. **Scope Changes:** Alertezi și ceri validare înainte de implementare - ---- - -## 🎛️ Comenzi Disponibile - -Răspunzi la comenzile: -- `status` - Overall progress și current story -- `stories` - Lista toate story-urile cu status -- `phase` - Detalii phase curentă -- `risks` - Identifică și prioritizează riscuri -- `demo [story-id]` - Demonstrație funcționalitate implementată -- `plan` - Re-planificare dacă apar schimbări - -## 📋 User Stories Location - -Toate story-urile sunt stocate în fișiere individuale în `docs/stories/` cu format: -- **P1-001-ARTICOLE_TERTI.md** - Story complet cu acceptance criteria -- **P1-002-Package-IMPORT_PARTENERI.md** - Detalii implementare parteneri -- **P1-003-Package-IMPORT_COMENZI.md** - Logică import comenzi -- **P1-004-Testing-Manual-Packages.md** - Plan testare - -**Beneficii:** -- Nu mai regenerez story-urile la fiecare sesiune -- Persistența progresului și update-urilor -- Ușor de referenciat și de împărtășit cu stakeholders - ---- - -## 💡 Success Criteria - -### Technical KPIs: -- Import success rate > 95% -- Timp mediu procesare < 30s per comandă -- Zero downtime pentru ROA principal -- 100% log coverage - -### Project KPIs: -- Stories delivered on time: >90% -- Zero blockers mai mult de 1 zi -- Code review coverage: 100% -- Documentation completeness: 100% - ---- - -## 🤖 Personality & Communication Style - -- **Proactiv:** Anticipezi probleme și propui soluții -- **Data-driven:** Folosești metrici concrete pentru tracking -- **Pragmatic:** Focusat pe delivery și rezultate practice -- **Comunicativ:** Updates clare și acționabile -- **Quality-focused:** Nu accepti compromisuri pe Definition of Done - ---- - -## 🚀 Getting Started - -**Primul tau task:** -1. Citește întregul PRD furnizat și verifică dacă există story-uri pentru fiecare fază și la care fază/story ai rămas - -**Întreabă-mă dacă:** -- Necesită clarificări tehnice despre PRD -- Vrei să ajustez priority sau sequence -- Apare vreo dependency neidentificată -- Ai nevoie de input pentru estimări - -**Întreabă-mă dacă:** -Afișează comenzile disponibile - - status - Progres overall - - stories - Lista story-uri - - phase - Detalii fază curentă - - risks - Identificare riscuri - - demo [story-id] - Demo funcționalitate - - plan - Re-planificare - ---- - -**Acum începe cu:** "Am analizat PRD-ul și sunt gata să coordonez implementarea. Vrei să îți spun care a fost ultimul story si care este statusul său?" \ No newline at end of file diff --git a/docs/PRD.md b/docs/PRD.md deleted file mode 100644 index 78c2977..0000000 --- a/docs/PRD.md +++ /dev/null @@ -1,610 +0,0 @@ -# Product Requirements Document (PRD) -## Import Comenzi Web → Sistem ROA - -**Versiune:** 1.2 -**Data:** 10 septembrie 2025 -**Status:** Phase 1 - ✅ COMPLET | Ready for Phase 2 VFP Integration - ---- - -## 📋 Overview - -Sistem ultra-minimal pentru importul comenzilor de pe platforme web (GoMag, etc.) în sistemul ERP ROA Oracle. Sistemul gestionează automat maparea produselor, crearea clienților și generarea comenzilor în ROA. - -### Obiective Principale -- ✅ Import automat comenzi web → ROA -- ✅ Mapare flexibilă SKU → CODMAT (reîmpachetări + seturi) -- ✅ Crearea automată a partenerilor noi -- ✅ Interfață web pentru administrare mapări -- ✅ Logging complet pentru troubleshooting - ---- - -## 🎯 Scope & Limitations - -### În Scope -- Import comenzi din orice platformă web (nu doar GoMag) -- Mapare SKU complexe (1:1, 1:N, reîmpachetări, seturi) -- Crearea automată parteneri + adrese -- Interfață web admin pentru mapări -- Logging în fișiere text - -### Out of Scope -- Modificarea comenzilor existente în ROA -- Sincronizare bidirectională -- Gestionarea stocurilor -- Interfață pentru utilizatori finali - ---- - -## 🏗️ Architecture Overview - -``` -[Web Platform API] → [VFP Orchestrator] → [Oracle PL/SQL] → [Web Admin Interface] - ↓ ↓ ↑ ↑ - JSON Orders Process & Log Store/Update Configuration -``` - -### Tech Stack -- **Backend:** Oracle PL/SQL packages -- **Integration:** Visual FoxPro 9 -- **Admin Interface:** Flask + Oracle -- **Data:** Oracle 11g/12c - ---- - -## 📊 Data Model - -### Tabel Nou: ARTICOLE_TERTI -```sql -CREATE TABLE ARTICOLE_TERTI ( - sku VARCHAR2(100), -- SKU din platforma web - codmat VARCHAR2(50), -- CODMAT din nom_articole - cantitate_roa NUMBER(10,3), -- Câte unități ROA = 1 web - procent_pret NUMBER(5,2), -- % din preț pentru seturi - activ NUMBER(1), -- 1=activ, 0=inactiv - PRIMARY KEY (sku, codmat) -); -``` - -### Exemple Mapări -- **Simplu:** SKU "CAF01" → caută direct în nom_articole (nu se stochează) -- **Reîmpachetare:** SKU "CAFE100" → CODMAT "CAF01", cantitate_roa=10 -- **Set compus:** - - SKU "SET01" → CODMAT "CAF01", cantitate_roa=2, procent_pret=60 - - SKU "SET01" → CODMAT "FILT01", cantitate_roa=1, procent_pret=40 - ---- - -## 🔧 Components Specification - -### 1. Package IMPORT_PARTENERI - -**Funcții:** -- `cauta_sau_creeaza_partener()` - Găsește partener existent sau creează unul nou -- `parseaza_adresa_semicolon()` - Parsează adrese format: "JUD:București;BUCURESTI;Str.Victoriei;10" - -**Logica Căutare Parteneri:** -1. Caută după cod_fiscal (dacă > 3 caractere) -2. Caută după denumire exactă -3. Creează partener nou folosind `pack_def.adauga_partener()` -4. Adaugă adresa folosind `pack_def.adauga_adresa_partener2()` - -### 2. Package IMPORT_COMENZI - -**Funcții:** -- `gaseste_articol_roa()` - Rezolvă SKU → articole ROA -- `importa_comanda_web()` - Import comandă completă - -**Logica Articole:** -1. Verifică ARTICOLE_TERTI pentru SKU -2. Dacă nu există → caută direct în nom_articole (SKU = CODMAT) -3. Calculează cantități și prețuri conform mapărilor -4. Folosește `PACK_COMENZI.adauga_comanda()` și `PACK_COMENZI.adauga_articol_comanda()` - -### 3. VFP Orchestrator (sync-comenzi-web.prg) - -**Responsabilități:** -- Rulare automată (timer 5 minute) -- Citire comenzi din JSON-ul generat de gomag-adapter.prg -- Procesare comenzi GoMag cu mapare completă la Oracle -- Apelare package-uri Oracle pentru import -- Logging în fișiere text cu timestamp - -**Fluxul complet de procesare:** -1. **Input:** Citește `output/gomag_orders_last7days_*.json` -2. **Pentru fiecare comandă:** - - Extrage date billing/shipping - - Procesează parteneri (persoane fizice vs companii) - - Mapează articole web → ROA - - Creează comandă în Oracle cu toate detaliile -3. **Output:** Log complet în `logs/sync_comenzi_YYYYMMDD.log` - -**Funcții helper necesare:** -- `CleanGoMagText()` - Curățare HTML entities -- `ProcessGoMagOrder()` - Procesare comandă completă -- `BuildArticlesJSON()` - Transformare items → JSON Oracle -- `FormatAddressForOracle()` - Adrese în format semicolon -- `HandleSpecialCases()` - Shipping vs billing, discounts, etc. - -**Procesare Date GoMag pentru IMPORT_PARTENERI:** - -*Decodare HTML entities în caractere simple (fără diacritice):* -```foxpro -* Funcție de curățare text GoMag -FUNCTION CleanGoMagText(tcText) - LOCAL lcResult - lcResult = tcText - lcResult = STRTRAN(lcResult, 'ă', 'a') && ă → a - lcResult = STRTRAN(lcResult, 'ș', 's') && ș → s - lcResult = STRTRAN(lcResult, 'ț', 't') && ț → t - lcResult = STRTRAN(lcResult, 'î', 'i') && î → i - lcResult = STRTRAN(lcResult, 'â', 'a') && â → a - RETURN lcResult -ENDFUNC -``` - -*Pregătire date partener din billing GoMag:* -```foxpro -* Pentru persoane fizice (când billing.company e gol): -IF EMPTY(loBilling.company.name) - lcDenumire = CleanGoMagText(loBilling.firstname + ' ' + loBilling.lastname) - lcCodFiscal = NULL && persoane fizice nu au CUI în GoMag -ELSE - * Pentru companii: - lcDenumire = CleanGoMagText(loBilling.company.name) - lcCodFiscal = loBilling.company.code && CUI companie -ENDIF - -* Formatare adresă pentru Oracle (format semicolon): -lcAdresa = "JUD:" + CleanGoMagText(loBilling.region) + ";" + ; - CleanGoMagText(loBilling.city) + ";" + ; - CleanGoMagText(loBilling.address) - -* Date contact -lcTelefon = loBilling.phone -lcEmail = loBilling.email -``` - -*Apel package Oracle IMPORT_PARTENERI:* -```foxpro -* Apelare IMPORT_PARTENERI.cauta_sau_creeaza_partener -lcSQL = "SELECT IMPORT_PARTENERI.cauta_sau_creeaza_partener(?, ?, ?, ?, ?) AS ID_PART FROM dual" - -* Executare cu parametri: -* p_cod_fiscal, p_denumire, p_adresa, p_telefon, p_email -lnIdPart = SQLEXEC(goConnectie, lcSQL, lcCodFiscal, lcDenumire, lcAdresa, lcTelefon, lcEmail, "cursor_result") - -IF lnIdPart > 0 AND RECCOUNT("cursor_result") > 0 - lnPartnerID = cursor_result.ID_PART - * Continuă cu procesarea comenzii... -ELSE - * Log eroare partener - WriteLog("ERROR: Nu s-a putut crea/găsi partenerul: " + lcDenumire) -ENDIF -``` - -**Procesare Articole pentru IMPORT_COMENZI:** - -*Construire JSON articole din items GoMag:* -```foxpro -* Funcție BuildArticlesJSON - transformă items GoMag în format Oracle -FUNCTION BuildArticlesJSON(loItems) - LOCAL lcJSON, i, loItem - lcJSON = "[" - - FOR i = 1 TO loItems.Count - loItem = loItems.Item(i) - - IF i > 1 - lcJSON = lcJSON + "," - ENDIF - - * Format JSON conform package Oracle: {"sku":"...", "cantitate":..., "pret":...} - lcJSON = lcJSON + "{" + ; - '"sku":"' + CleanGoMagText(loItem.sku) + '",' + ; - '"cantitate":' + TRANSFORM(VAL(loItem.quantity)) + ',' + ; - '"pret":' + TRANSFORM(VAL(loItem.price)) + ; - "}" - ENDFOR - - lcJSON = lcJSON + "]" - RETURN lcJSON -ENDFUNC -``` - -*Gestionare cazuri speciale:* -```foxpro -* Informații adiționale pentru observații -lcObservatii = "Payment: " + CleanGoMagText(loOrder.payment.name) + "; " + ; - "Delivery: " + CleanGoMagText(loOrder.delivery.name) + "; " + ; - "Status: " + CleanGoMagText(loOrder.status) + "; " + ; - "Source: " + CleanGoMagText(loOrder.source) + " " + CleanGoMagText(loOrder.sales_channel) - -* Adrese diferite shipping vs billing -IF NOT (CleanGoMagText(loOrder.shipping.address) == CleanGoMagText(loBilling.address)) - lcObservatii = lcObservatii + "; Shipping: " + ; - CleanGoMagText(loOrder.shipping.address) + ", " + ; - CleanGoMagText(loOrder.shipping.city) -ENDIF -``` - -*Apel package Oracle IMPORT_COMENZI:* -```foxpro -* Conversie dată GoMag → Oracle -ldDataComanda = CTOD(SUBSTR(loOrder.date, 1, 10)) && "2025-08-27 16:32:43" → date - -* JSON articole -lcArticoleJSON = BuildArticlesJSON(loOrder.items) - -* Apelare IMPORT_COMENZI.importa_comanda_web -lcSQL = "SELECT IMPORT_COMENZI.importa_comanda_web(?, ?, ?, ?, ?, ?) AS ID_COMANDA FROM dual" - -lnResult = SQLEXEC(goConnectie, lcSQL, ; - loOrder.number, ; && p_nr_comanda_ext - ldDataComanda, ; && p_data_comanda - lnPartnerID, ; && p_id_partener (din pas anterior) - lcArticoleJSON, ; && p_json_articole - NULL, ; && p_id_adresa_livrare (opțional) - lcObservatii, ; && p_observatii - "cursor_comanda") - -IF lnResult > 0 AND cursor_comanda.ID_COMANDA > 0 - WriteLog("SUCCESS: Comandă importată - ID: " + TRANSFORM(cursor_comanda.ID_COMANDA)) -ELSE - WriteLog("ERROR: Import comandă eșuat pentru: " + loOrder.number) -ENDIF -``` - -**Note Importante:** -- Toate caracterele HTML trebuie transformate în ASCII simplu (fără diacritice) -- Package-ul Oracle așteaptă text curat, fără entități HTML -- Adresa trebuie în format semicolon cu prefix "JUD:" pentru județ -- Cod fiscal NULL pentru persoane fizice este acceptabil -- JSON articole: exact formatul `{"sku":"...", "cantitate":..., "pret":...}` -- Conversie date GoMag: `"2025-08-27 16:32:43"` → `CTOD()` pentru Oracle -- Observații: concatenează payment/delivery/status/source pentru tracking -- Gestionează adrese diferite shipping vs billing în observații -- Utilizează conexiunea Oracle existentă (goConnectie) - -### 4. Web Admin Interface - -**Funcționalități:** -- Vizualizare mapări SKU existente -- Adăugare/editare/ștergere mapări -- Validare date înainte de salvare -- Interface responsive cu Flask - ---- - -## 📋 Implementation Phases - -### Phase 1: Database Foundation (Ziua 1) - 🎯 75% COMPLET -- [x] ✅ **P1-001:** Creare tabel ARTICOLE_TERTI + Docker setup -- [x] ✅ **P1-002:** Package IMPORT_PARTENERI complet -- [x] ✅ **P1-003:** Package IMPORT_COMENZI complet -- [ ] 🔄 **P1-004:** Testare manuală package-uri (NEXT UP!) - -### Phase 2: VFP Integration (Ziua 2) -- [ ] **P2-001:** Adaptare gomag-adapter.prg pentru output JSON (READY - doar activare GetOrders) -- [ ] **P2-002:** Creare sync-comenzi-web.prg cu toate helper functions -- [ ] **P2-003:** Testare import comenzi end-to-end cu date reale GoMag -- [ ] **P2-004:** Configurare logging și error handling complet - -**Detalii P2-002 (sync-comenzi-web.prg):** -- `CleanGoMagText()` - HTML entities cleanup -- `ProcessGoMagOrder()` - Main orchestrator per order -- `BuildArticlesJSON()` - Items conversion for Oracle -- `FormatAddressForOracle()` - Semicolon format -- `HandleSpecialCases()` - Shipping/billing/discounts/payments -- Integration cu logging existent din utils.prg -- Timer-based execution (5 minute intervals) -- Complete error handling cu retry logic - -### Phase 3: Web Admin Interface (Ziua 3) -- [ ] Flask app cu connection pool Oracle -- [ ] HTML/CSS pentru admin mapări -- [ ] JavaScript pentru CRUD operații -- [ ] Testare interfață web - -### Phase 4: Testing & Deployment (Ziua 4) -- [ ] Testare integrată pe comenzi reale -- [ ] Validare mapări complexe (seturi) -- [ ] Configurare environment production -- [ ] Documentație utilizare - ---- - -## 📁 File Structure - -``` -/api/ # ✅ Flask Admin Interface - ├── admin.py # ✅ Flask app cu Oracle pool - ├── 01_create_table.sql # ✅ Tabel ARTICOLE_TERTI - ├── 02_import_parteneri.sql # ✅ Package parteneri (COMPLET) - ├── 03_import_comenzi.sql # ✅ Package comenzi (COMPLET) - ├── Dockerfile # ✅ Container cu Oracle client - ├── tnsnames.ora # ✅ Config Oracle ROA - ├── .env # ✅ Environment variables - └── requirements.txt # ✅ Dependencies Python - -/docs/ # 📋 Project Documentation - ├── PRD.md # ✅ Product Requirements Document - ├── LLM_PROJECT_MANAGER_PROMPT.md # ✅ Project Manager Prompt - └── stories/ # 📋 User Stories (Detailed) - ├── P1-001-ARTICOLE_TERTI.md # ✅ Story P1-001 (COMPLET) - ├── P1-002-Package-IMPORT_PARTENERI.md # ✅ Story P1-002 (COMPLET) - ├── P1-003-Package-IMPORT_COMENZI.md # ✅ Story P1-003 (COMPLET) - └── P1-004-Testing-Manual-Packages.md # 📋 Story P1-004 - -/vfp/ # ⏳ VFP Integration (Phase 2) - └── sync-comenzi-web.prg # ⏳ Orchestrator principal - -/docker-compose.yaml # ✅ Container orchestration -/logs/ # ✅ Logging directory -``` - ---- - -## 🔒 Business Rules - -### Parteneri -- Căutare prioritate: cod_fiscal → denumire → creare nou -- Persoane fizice (CUI 13 cifre): separă nume/prenume -- Adrese: defaultează la București Sectorul 1 dacă nu găsește -- Toate partenerele noi au ID_UTIL = -3 (sistem) - -### Articole -- SKU simple (găsite direct în nom_articole): nu se stochează în ARTICOLE_TERTI -- Mapări speciale: doar reîmpachetări și seturi complexe -- Validare: suma procent_pret pentru același SKU să fie logic -- Articole inactive: activ=0 (nu se șterg) - -### Comenzi -- Folosește package-urile existente (PACK_COMENZI) -- ID_GESTIUNE = 1, ID_SECTIE = 1, ID_POL = 0 (default) -- Data livrare = data comenzii + 1 zi -- Toate comenzile au INTERNA = 0 (externe) - ---- - -## 📊 Success Metrics - -### Technical Metrics -- Import success rate > 95% -- Timpul mediu de procesare < 30s per comandă -- Zero downtime pentru sistemul principal ROA -- Log coverage 100% (toate operațiile logate) - -### Business Metrics -- Reducerea timpului de introducere comenzi cu 90% -- Eliminarea erorilor manuale de transcriere -- Timpul de configurare mapări noi < 5 minute - ---- - -## 🚨 Error Handling - -### Categorii Erori -1. **Erori conexiune Oracle:** Retry logic + alertă -2. **SKU not found:** Log warning + skip articol -3. **Partener invalid:** Tentativă creare + log detalii -4. **Comenzi duplicate:** Skip cu log info - -### Logging Format -``` -2025-09-08 14:30:25 | COMANDA-123 | OK | ID:456789 -2025-09-08 14:30:26 | COMANDA-124 | ERROR | SKU 'XYZ' not found -``` - ---- - -## 🔧 Configuration - -### Environment Variables (.env) -```env -ORACLE_USER=MARIUSM_AUTO -ORACLE_PASSWORD=******** -ORACLE_DSN=ROA_CENTRAL -TNS_ADMIN=/app -INSTANTCLIENTPATH=/opt/oracle/instantclient -``` - -### ⚠️ **CRITICAL: Oracle Schema Details** - -**Test Schema:** `MARIUSM_AUTO` (nu CONTAFIN_ORACLE) -**Database:** Oracle 10g Enterprise Edition Release 10.2.0.4.0 -**TNS Connection:** ROA_CENTRAL (nu ROA_ROMFAST) - -**Structura Reală Tables:** -- `COMENZI` (nu `comenzi_antet`) - Comenzile principale -- `COMENZI_ELEMENTE` (nu `comenzi_articole`) - Articolele din comenzi -- `NOM_PARTENERI` - Partenerii -- `NOM_ARTICOLE` - Articolele -- `ARTICOLE_TERTI` - Mapările SKU (creat de noi) - -**Foreign Key Constraints CRITICAL:** -```sql --- Pentru COMENZI_ELEMENTE: -ID_POL = 2 (obligatoriu, nu NULL sau 0) -ID_VALUTA = 3 (obligatoriu, nu 1) -ID_ARTICOL - din NOM_ARTICOLE -ID_COMANDA - din COMENZI -``` - -**Package Status în MARIUSM_AUTO:** -- ✅ `PACK_IMPORT_PARTENERI` - VALID (header + body) -- ✅ `PACK_JSON` - VALID (header + body) -- ✅ `PACK_COMENZI` - VALID (header + body) -- ✅ `PACK_IMPORT_COMENZI` - header VALID, body FIXED în P1-004 - -### VFP Configuration -- Timer interval: 300 secunde (5 minute) -- Conexiune Oracle prin goExecutor existent -- Log files: sync_YYYYMMDD.log (rotație zilnică) - ---- - -## 🎛️ Admin Interface Specification - -### Main Screen: SKU Mappings -- Tabel editabil cu coloane: SKU, CODMAT, Cantitate ROA, Procent Preț, Activ -- Inline editing cu auto-save -- Filtrare și căutare -- Export/Import mapări (CSV) -- Validare în timp real - -### Features -- Bulk operations (activare/dezactivare multiple) -- Template mapări pentru tipuri comune -- Preview calcul preț pentru teste -- Audit trail (cine/când a modificat) - ---- - -## 🏁 Definition of Done - -### Per Feature -- [ ] Cod implementat și testat -- [ ] Documentație actualizată -- [ ] Error handling complet -- [ ] Logging implementat -- [ ] Review code efectuat - -### Per Phase -- [ ] Toate feature-urile Phase complete -- [ ] Testare integrată reușită -- [ ] Performance requirements îndeplinite -- [ ] Deployment verificat -- [ ] Sign-off stakeholder - ---- - -## 📞 Support & Maintenance - -### Monitoring -- Log files în /logs/ cu rotație automată -- Alertă email pentru erori critice -- Dashboard cu statistici import (opcional Phase 2) - -### Backup & Recovery -- Mapări ARTICOLE_TERTI incluse în backup-ul zilnic ROA -- Config files versionate în Git -- Procedură rollback pentru package-uri Oracle - ---- - ---- - -## 📊 Progress Status - Phase 1 [🎯 100% COMPLET] - -### ✅ P1-001 COMPLET: Tabel ARTICOLE_TERTI -- **Implementat:** 08 septembrie 2025, 22:30 -- **Files:** `api/database-scripts/01_create_table.sql`, `api/admin.py`, `docker-compose.yaml` -- **Status:** ✅ Production ready - -### ✅ P1-002 COMPLET: Package PACK_IMPORT_PARTENERI -- **Implementat:** 09 septembrie 2025, 10:30 -- **Key Features:** - - `cauta_sau_creeaza_partener()` - Search priority: cod_fiscal → denumire → create - - `parseaza_adresa_semicolon()` - Flexible address parsing cu defaults - - Individual vs company logic (CUI 13 digits) - - Custom exceptions + autonomous transaction logging -- **Files:** `api/database-scripts/02_import_parteneri.sql` -- **Status:** ✅ Production ready - 100% tested - -### ✅ P1-003 COMPLET: Package PACK_IMPORT_COMENZI -- **Implementat:** 09 septembrie 2025, 10:30 | **Finalizat:** 10 septembrie 2025, 12:30 -- **Key Features:** - - `gaseste_articol_roa()` - Complex SKU mapping cu pipelined functions ✅ 100% tested - - Manual workflow validation - comenzi + articole ✅ 100% working - - Support mapări: simple, reîmpachetări, seturi complexe ✅ - - Performance monitoring < 30s per comandă ✅ - - Schema reală MARIUSM_AUTO validation ✅ -- **Files:** `api/database-scripts/04_import_comenzi.sql` + `api/final_validation.py` -- **Status:** ✅ 100% Production ready cu componente validate - -### ✅ P1-004 Testing Manual Packages - 100% COMPLET -- **Obiectiv:** Testare completă cu date reale ROA ✅ -- **Dependencies:** P1-001 ✅, P1-002 ✅, P1-003 ✅ -- **Rezultate Finale:** - - ✅ PACK_IMPORT_PARTENERI: 100% funcțional cu parteneri reali - - ✅ gaseste_articol_roa: 100% funcțional cu mapări CAFE100 → CAF01 - - ✅ Oracle connection, FK constraints, schema MARIUSM_AUTO identificată - - ✅ Manual workflow: comenzi + articole complet funcțional -- **Status:** ✅ 100% COMPLET - -### 🔍 **FOR LOOP Issue REZOLVAT - Root Cause Analysis:** - -**PROBLEMA NU ERA CU FOR LOOP-ul!** For loop-ul era corect sintactic și logic. - -**Problemele Reale Identificate:** -1. **Schema Incorectă:** Am presupus `comenzi_antet`/`comenzi_articole` dar schema reală folosește `COMENZI`/`COMENZI_ELEMENTE` -2. **FK Constraints:** ID_POL=2, ID_VALUTA=3 (obligatorii, nu NULL sau alte valori) -3. **JSON Parsing:** Probleme de conversie numerică în Oracle PL/SQL simplu -4. **Environment:** Schema `MARIUSM_AUTO` pe Oracle 10g, nu environment-ul presupus inițial - -**Componente care funcționează 100%:** -- ✅ `PACK_IMPORT_PARTENERI.cauta_sau_creeaza_partener()` -- ✅ `PACK_IMPORT_COMENZI.gaseste_articol_roa()` -- ✅ Direct INSERT în `COMENZI`/`COMENZI_ELEMENTE` -- ✅ Mapări complexe prin `ARTICOLE_TERTI` - -**Lecții Învățate:** -- Verifică întotdeauna schema reală înainte de implementare -- Testează FK constraints și valorile valide -- Environment discovery este crucial pentru debugging -- FOR LOOP logic era corect - problema era în presupuneri de structură - -### 🚀 **Phase 2 Ready - Validated Components:** -Toate componentele individuale sunt validate și funcționează perfect pentru VFP integration. - ---- - -## 📋 User Stories Reference - -Toate story-urile pentru fiecare fază sunt stocate în `docs/stories/` cu detalii complete: - -### Phase 1 Stories [🎯 75% COMPLET] -- **P1-001:** [Tabel ARTICOLE_TERTI](stories/P1-001-ARTICOLE_TERTI.md) - ✅ COMPLET -- **P1-002:** [Package IMPORT_PARTENERI](stories/P1-002-Package-IMPORT_PARTENERI.md) - ✅ COMPLET -- **P1-003:** [Package IMPORT_COMENZI](stories/P1-003-Package-IMPORT_COMENZI.md) - ✅ COMPLET -- **P1-004:** [Testing Manual Packages](stories/P1-004-Testing-Manual-Packages.md) - 🔄 READY TO START - -### Faze Viitoare -- **Phase 2:** VFP Integration (stories vor fi generate după P1 completion) -- **Phase 3:** Web Admin Interface -- **Phase 4:** Testing & Deployment - ---- - -**Document Owner:** Development Team -**Last Updated:** 10 septembrie 2025, 12:30 (Phase 1 COMPLET - schema MARIUSM_AUTO documented) -**Next Review:** Phase 2 VFP Integration planning - ---- - -## 🎉 **PHASE 1 COMPLETION SUMMARY** - -**Date Completed:** 10 septembrie 2025, 12:30 -**Final Status:** ✅ 100% COMPLET - -**Critical Discoveries & Updates:** -- ✅ Real Oracle schema: `MARIUSM_AUTO` (not CONTAFIN_ORACLE) -- ✅ Real table names: `COMENZI`/`COMENZI_ELEMENTE` (not comenzi_antet/comenzi_articole) -- ✅ Required FK values: ID_POL=2, ID_VALUTA=3 -- ✅ All core components validated with real data -- ✅ FOR LOOP issue resolved (was environment/schema mismatch) - -**Ready for Phase 2 with validated components:** -- `PACK_IMPORT_PARTENERI.cauta_sau_creeaza_partener()` -- `PACK_IMPORT_COMENZI.gaseste_articol_roa()` -- Direct SQL workflow for COMENZI/COMENZI_ELEMENTE -- ARTICOLE_TERTI mappings system - ---- - -**SQL*Plus Access:** -```bash -docker exec -i gomag-admin sqlplus MARIUSM_AUTO/ROMFASTSOFT@ROA_CENTRAL -``` \ No newline at end of file diff --git a/docs/stories/P1-001-ARTICOLE_TERTI.md b/docs/stories/P1-001-ARTICOLE_TERTI.md deleted file mode 100644 index 9eefd4c..0000000 --- a/docs/stories/P1-001-ARTICOLE_TERTI.md +++ /dev/null @@ -1,41 +0,0 @@ -# Story P1-001: Tabel ARTICOLE_TERTI ✅ COMPLET - -**Story ID:** P1-001 -**Titlu:** Creare infrastructură database și tabel ARTICOLE_TERTI -**As a:** Developer -**I want:** Să am tabelul ARTICOLE_TERTI funcțional cu Docker environment -**So that:** Să pot stoca mapările SKU complexe pentru import comenzi - -## Acceptance Criteria -- [x] ✅ Tabel ARTICOLE_TERTI cu structura specificată -- [x] ✅ Primary Key compus (sku, codmat) -- [x] ✅ Docker environment cu Oracle Instant Client -- [x] ✅ Flask admin interface cu test conexiune -- [x] ✅ Date test pentru mapări (reîmpachetare + set compus) -- [x] ✅ Configurare tnsnames.ora pentru ROA - -## Technical Tasks -- [x] ✅ Creare fișier `01_create_table.sql` -- [x] ✅ Definire structură tabel cu validări -- [x] ✅ Configurare Docker cu Oracle client -- [x] ✅ Setup Flask admin interface -- [x] ✅ Test conexiune Oracle ROA -- [x] ✅ Insert date test pentru validare - -## Definition of Done -- [x] ✅ Cod implementat și testat -- [x] ✅ Tabel creat în Oracle fără erori -- [x] ✅ Docker environment funcțional -- [x] ✅ Conexiune Oracle validată -- [x] ✅ Date test inserate cu succes -- [x] ✅ Documentație actualizată în PRD - -**Estimate:** M (6-8 ore) -**Dependencies:** None -**Risk Level:** LOW -**Status:** ✅ COMPLET (08 septembrie 2025, 22:30) - -## Deliverables -- **Files:** `api/01_create_table.sql`, `api/admin.py`, `docker-compose.yaml` -- **Status:** ✅ Ready pentru testare cu ROA (10.0.20.36) -- **Data completare:** 08 septembrie 2025, 22:30 \ No newline at end of file diff --git a/docs/stories/P1-002-Package-IMPORT_PARTENERI.md b/docs/stories/P1-002-Package-IMPORT_PARTENERI.md deleted file mode 100644 index 92485f9..0000000 --- a/docs/stories/P1-002-Package-IMPORT_PARTENERI.md +++ /dev/null @@ -1,46 +0,0 @@ -# Story P1-002: Package IMPORT_PARTENERI - -**Story ID:** P1-002 -**Titlu:** Implementare Package IMPORT_PARTENERI complet funcțional -**As a:** System -**I want:** Să pot căuta și crea automat parteneri în ROA -**So that:** Comenzile web să aibă parteneri valizi în sistemul ERP - -## Acceptance Criteria -- [x] ✅ Funcția `cauta_sau_creeaza_partener()` implementată -- [x] ✅ Funcția `parseaza_adresa_semicolon()` implementată -- [x] ✅ Căutare parteneri după cod_fiscal (prioritate 1) -- [x] ✅ Căutare parteneri după denumire exactă (prioritate 2) -- [x] ✅ Creare partener nou cu `pack_def.adauga_partener()` -- [x] ✅ Adăugare adresă cu `pack_def.adauga_adresa_partener2()` -- [x] ✅ Separare nume/prenume pentru persoane fizice (CUI 13 cifre) -- [x] ✅ Default București Sectorul 1 pentru adrese incomplete - -## Technical Tasks -- [x] ✅ Creare fișier `02_import_parteneri.sql` -- [x] ✅ Implementare function `cauta_sau_creeaza_partener` -- [x] ✅ Implementare function `parseaza_adresa_semicolon` -- [x] ✅ Adăugare validări pentru cod_fiscal -- [x] ✅ Integrare cu package-urile existente pack_def -- [x] ✅ Error handling pentru parteneri invalizi -- [x] ✅ Logging pentru operațiile de creare parteneri - -## Definition of Done -- [x] ✅ Cod implementat și testat -- [x] ✅ Package compilat fără erori în Oracle -- [ ] 🔄 Test manual cu date reale (P1-004) -- [x] ✅ Error handling complet -- [x] ✅ Logging implementat -- [x] ✅ Documentație actualizată - -**Estimate:** M (6-8 ore) - ACTUAL: 4 ore (parallel development) -**Dependencies:** P1-001 ✅ -**Risk Level:** MEDIUM (integrare cu pack_def existent) - MITIGATED ✅ -**Status:** ✅ COMPLET (09 septembrie 2025, 10:30) - -## 🎯 Implementation Highlights -- **Custom Exceptions:** 3 specialized exceptions for different error scenarios -- **Autonomous Transaction Logging:** Non-blocking logging system -- **Flexible Address Parser:** Handles multiple address formats gracefully -- **Individual Detection:** Smart CUI-based logic for person vs company -- **Production-Ready:** Complete validation, error handling, and documentation \ No newline at end of file diff --git a/docs/stories/P1-003-Package-IMPORT_COMENZI.md b/docs/stories/P1-003-Package-IMPORT_COMENZI.md deleted file mode 100644 index d7fa9ee..0000000 --- a/docs/stories/P1-003-Package-IMPORT_COMENZI.md +++ /dev/null @@ -1,49 +0,0 @@ -# Story P1-003: Package IMPORT_COMENZI - -**Story ID:** P1-003 -**Titlu:** Implementare Package IMPORT_COMENZI cu logică mapare -**As a:** System -**I want:** Să pot importa comenzi web complete în ROA -**So that:** Comenzile de pe platformele web să ajungă automat în ERP - -## Acceptance Criteria -- [x] ✅ Funcția `gaseste_articol_roa()` implementată -- [x] ✅ Funcția `importa_comanda_web()` implementată -- [x] ✅ Verificare mapări în ARTICOLE_TERTI -- [x] ✅ Fallback căutare directă în nom_articole -- [x] ✅ Calcul cantități pentru reîmpachetări -- [x] ✅ Calcul prețuri pentru seturi compuse -- [x] ✅ Integrare cu PACK_COMENZI.adauga_comanda() -- [x] ✅ Integrare cu PACK_COMENZI.adauga_articol_comanda() - -## Technical Tasks -- [x] ✅ Creare fișier `03_import_comenzi.sql` -- [x] ✅ Implementare function `gaseste_articol_roa` -- [x] ✅ Implementare function `importa_comanda_web` -- [x] ✅ Logică mapare SKU → CODMAT -- [x] ✅ Calcul cantități cu cantitate_roa -- [x] ✅ Calcul prețuri cu procent_pret -- [x] ✅ Validare seturi (suma procent_pret = 100%) -- [x] ✅ Error handling pentru SKU not found -- [x] ✅ Logging pentru fiecare operație - -## Definition of Done -- [x] ✅ Cod implementat și testat -- [x] ✅ Package compilat fără erori în Oracle -- [ ] 🔄 Test cu mapări simple și complexe (P1-004) -- [x] ✅ Error handling complet -- [x] ✅ Logging implementat -- [x] ✅ Performance < 30s per comandă (monitorizare implementată) - -**Estimate:** L (8-12 ore) - ACTUAL: 5 ore (parallel development) -**Dependencies:** P1-001 ✅, P1-002 ✅ -**Risk Level:** HIGH (logică complexă mapări + integrare PACK_COMENZI) - MITIGATED ✅ -**Status:** ✅ COMPLET (09 septembrie 2025, 10:30) - -## 🎯 Implementation Highlights -- **Pipelined Functions:** Memory-efficient processing of complex mappings -- **Smart Mapping Logic:** Handles simple, repackaging, and set scenarios -- **Set Validation:** 95-105% tolerance for percentage sum validation -- **Performance Monitoring:** Built-in timing for 30s target compliance -- **JSON Integration:** Ready for web platform order import -- **Enterprise Logging:** Comprehensive audit trail with import_log table \ No newline at end of file diff --git a/docs/stories/P1-004-Testing-Manual-Packages.md b/docs/stories/P1-004-Testing-Manual-Packages.md deleted file mode 100644 index 1900339..0000000 --- a/docs/stories/P1-004-Testing-Manual-Packages.md +++ /dev/null @@ -1,106 +0,0 @@ -# Story P1-004: Testing Manual Packages - -**Story ID:** P1-004 -**Titlu:** Testare manuală completă package-uri Oracle -**As a:** Developer -**I want:** Să verific că package-urile funcționează corect cu date reale -**So that:** Să am încredere în stabilitatea sistemului înainte de Phase 2 - -## Acceptance Criteria -- [x] ✅ Test creare partener nou cu adresă completă -- [x] ✅ Test căutare partener existent după cod_fiscal -- [x] ✅ Test căutare partener existent după denumire -- [x] ✅ Test import comandă cu SKU simplu (error handling verificat) -- [x] ✅ Test import comandă cu reîmpachetare (CAFE100: 2→20 bucăți) -- [x] ✅ Test import comandă cu set compus (SET01: 2×CAF01+1×FILTRU01) -- [x] ⚠️ Verificare comenzi create corect în ROA (blocked by external dependency) -- [x] ✅ Verificare logging complet în toate scenariile - -## Technical Tasks -- [x] ✅ Pregătire date test pentru parteneri (created test partners) -- [x] ✅ Pregătire date test pentru articole/mapări (created CAF01, FILTRU01 in nom_articole) -- [x] ✅ Pregătire comenzi JSON test (comprehensive test suite) -- [x] ✅ Rulare teste în Oracle SQL Developer (Python scripts via Docker) -- [x] ⚠️ Verificare rezultate în tabele ROA (blocked by PACK_COMENZI) -- [x] ✅ Validare calcule cantități și prețuri (verified with gaseste_articol_roa) -- [x] ✅ Review log files pentru erori (comprehensive error handling tested) - -## Definition of Done -- [x] ✅ Toate testele rulează cu succes (75% - blocked by external dependency) -- [x] ⚠️ Comenzi vizibile și corecte în ROA (blocked by PACK_COMENZI.adauga_comanda CASE issue) -- [x] ✅ Log files complete și fără erori (comprehensive logging verified) -- [x] ✅ Performance requirements îndeplinite (gaseste_articol_roa < 1s) -- [x] ✅ Documentare rezultate teste (detailed test results documented) - -## 📊 Test Results Summary - -**Date:** 09 septembrie 2025, 21:35 -**Overall Success Rate:** 75% (3/4 major components) - -### ✅ PASSED Components: - -#### 1. PACK_IMPORT_PARTENERI - 100% SUCCESS -- **Test 1:** ✅ Creare partener nou (persoană fizică) - PASS -- **Test 2:** ✅ Căutare partener existent după denumire - PASS -- **Test 3:** ✅ Creare partener companie cu CUI - PASS -- **Test 4:** ✅ Căutare companie după cod fiscal - PASS -- **Logic:** Priority search (cod_fiscal → denumire → create) works correctly - -#### 2. PACK_IMPORT_COMENZI.gaseste_articol_roa - 100% SUCCESS -- **Test 1:** ✅ Reîmpachetare CAFE100: 2 web → 20 ROA units, price=5.0 lei/unit - PASS -- **Test 2:** ✅ Set compus SET01: 1 set → 2×CAF01 + 1×FILTRU01, percentages 65%+35% - PASS -- **Test 3:** ✅ Unknown SKU: returns correct error message - PASS -- **Performance:** < 1 second per SKU resolution - -#### 3. PACK_JSON - 100% SUCCESS -- **parse_array:** ✅ Correctly parses JSON arrays - PASS -- **get_string/get_number:** ✅ Extracts values correctly - PASS -- **Integration:** Ready for importa_comanda function - -### ⚠️ BLOCKED Component: - -#### 4. PACK_IMPORT_COMENZI.importa_comanda - BLOCKED by External Dependency -- **Issue:** `PACK_COMENZI.adauga_comanda` (ROA system) has CASE statement error at line 190 -- **Our Code:** ✅ JSON parsing, article mapping, and logic are correct -- **Impact:** Full order import workflow cannot be completed -- **Recommendation:** Consult ROA team for PACK_COMENZI fix before Phase 2 - -### 🔧 Infrastructure Created: -- ✅ Test articles: CAF01, FILTRU01 in nom_articole -- ✅ Test partners: Ion Popescu Test, Test Company SRL -- ✅ Comprehensive test scripts in api/ -- ✅ ARTICOLE_TERTI mappings verified (3 active mappings) - -### 📋 Phase 2 Readiness: -- ✅ **PACK_IMPORT_PARTENERI:** Production ready -- ✅ **PACK_IMPORT_COMENZI.gaseste_articol_roa:** Production ready -- ⚠️ **Full order import:** Requires ROA team collaboration - -**Estimate:** S (4-6 ore) ✅ **COMPLETED** -**Dependencies:** P1-002 ✅, P1-003 ✅ -**Risk Level:** LOW → **MEDIUM** (external dependency identified) -**Status:** **95% COMPLETED** - Final issue identified - -## 🔍 **Final Issue Discovered:** - -**Problem:** `importa_comanda` returnează "Niciun articol nu a fost procesat cu succes" chiar și după eliminarea tuturor pINFO logging calls. - -**Status la oprirea sesiunii:** -- ✅ PACK_IMPORT_PARTENERI: 100% funcțional -- ✅ PACK_IMPORT_COMENZI.gaseste_articol_roa: 100% funcțional individual -- ✅ V_INTERNA = 2 fix aplicat -- ✅ PL/SQL blocks pentru DML calls -- ✅ Partner creation cu ID-uri valide (878, 882, 883) -- ✅ Toate pINFO calls comentate în 04_import_comenzi.sql -- ⚠️ importa_comanda încă nu procesează articolele în FOR LOOP - -**Următorii pași pentru debug (mâine):** -1. Investigare FOR LOOP din importa_comanda linia 324-325 -2. Test PACK_JSON.parse_array separat -3. Verificare dacă problema e cu pipelined function în context de loop -4. Posibilă soluție: refactoring la importa_comanda să nu folosească SELECT FROM TABLE în FOR - -**Cod funcțional pentru Phase 2 VFP:** -- Toate package-urile individuale funcționează perfect -- VFP poate apela PACK_IMPORT_PARTENERI + gaseste_articol_roa separat -- Apoi manual PACK_COMENZI.adauga_comanda/adauga_articol_comanda \ No newline at end of file