diff --git a/CLAUDE.md b/CLAUDE.md index c8d07de..eb37931 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -4,127 +4,257 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co ## Project Overview -This is a Visual FoxPro 9 project that interfaces with the GoMag e-commerce API. The application retrieves both product and order data from GoMag's REST API endpoints with full pagination support and comprehensive error handling. +**System:** Import Comenzi Web → Sistem ROA Oracle + +This is a multi-tier system that automatically imports orders from web platforms (GoMag, etc.) into the ROA Oracle ERP system. The project combines Oracle PL/SQL packages, Visual FoxPro orchestration, and a Flask web admin interface for SKU mapping management. + +**Current Status:** Phase 1 (Database Foundation) - 75% Complete +- ✅ P1-001: ARTICOLE_TERTI table created +- ✅ P1-002: IMPORT_PARTENERI package complete +- ✅ P1-003: IMPORT_COMENZI package complete +- 🔄 P1-004: Manual testing packages (NEXT UP) ## Architecture -- **Main Application**: `gomag-vending.prg` - Primary Visual FoxPro script with pagination support -- **Utility Module**: `utils.prg` - INI file handling, logging, and helper functions -- **JSON Library**: `nfjson/` - Third-party JSON parsing library for VFP -- **Technology**: Visual FoxPro 9 with WinHttp.WinHttpRequest.5.1 for HTTP requests -- **API Integration**: GoMag REST API v1 for products and orders management +``` +[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 connection pool +- **Data:** Oracle 11g/12c (ROA system) ## Core Components -### gomag-vending.prg -Main application script with: -- Complete pagination support for products and orders -- Configurable API settings via INI file -- Comprehensive error handling and logging -- Rate limiting compliance (1-second delays between requests) -- JSON array output generation for both products and orders +### Oracle PL/SQL Packages -### utils.prg -Utility functions module containing: -- INI file operations (`ReadPini`, `WritePini`, `LoadSettings`) -- Logging system (`InitLog`, `LogMessage`, `CloseLog`) -- Connectivity testing (`TestConnectivity`) -- URL encoding utilities (`UrlEncode`) -- Default configuration creation (`CreateDefaultIni`) +#### 1. IMPORT_PARTENERI Package +**Location:** `api/database-scripts/02_import_parteneri.sql` +**Functions:** +- `cauta_sau_creeaza_partener()` - Search/create partners with priority: cod_fiscal → denumire → create new +- `parseaza_adresa_semicolon()` - Parse addresses in format "JUD:București;BUCURESTI;Str.Victoriei;10" -### settings.ini -Configuration file with sections: -- `[API]` - API endpoints, credentials, and headers -- `[PAGINATION]` - Page size limits -- `[OPTIONS]` - Feature toggles for products/orders retrieval -- `[FILTERS]` - Date range filters for orders +**Logic:** +- Individual vs company detection (CUI 13 digits) +- Automatic address defaults to București Sectorul 1 +- All new partners get ID_UTIL = -3 (system) + +#### 2. IMPORT_COMENZI Package +**Location:** `api/database-scripts/03_import_comenzi.sql` +**Functions:** +- `gaseste_articol_roa()` - Complex SKU mapping with pipelined functions +- `importa_comanda_web()` - Complete order import with JSON parsing + +**Mapping Types:** +- Simple: SKU found directly in nom_articole (not stored in ARTICOLE_TERTI) +- Repackaging: SKU → CODMAT with different quantities +- Complex sets: One SKU → multiple CODMATs with percentage pricing + +### Visual FoxPro Integration + +#### gomag-vending.prg +**Location:** `vfp/gomag-vending.prg` +Current functionality: +- GoMag API integration with pagination +- JSON data retrieval and processing +- HTML entity cleaning (ă→a, ș→s, ț→t, î→i, â→a) + +**Future:** Will be adapted for JSON output to Oracle packages + +#### sync-comenzi-web.prg (Phase 2) +**Planned orchestrator with:** +- 5-minute timer automation +- Oracle package integration +- Comprehensive logging system +- Error handling and retry logic + +### Database Schema + +#### ARTICOLE_TERTI Table +**Location:** `api/database-scripts/01_create_table.sql` +```sql +CREATE TABLE ARTICOLE_TERTI ( + sku VARCHAR2(100), -- SKU from web platform + codmat VARCHAR2(50), -- CODMAT from nom_articole + cantitate_roa NUMBER(10,3), -- ROA units per web unit + procent_pret NUMBER(5,2), -- Price percentage for sets + activ NUMBER(1), -- 1=active, 0=inactive + PRIMARY KEY (sku, codmat) +); +``` + +### Flask Admin Interface + +#### admin.py +**Location:** `api/admin.py` +**Features:** +- Oracle connection pool management +- SKU mappings CRUD operations +- Web interface for configuration +- Real-time validation ## Development Commands -### Running the Application +### Database Setup +```bash +# Start Oracle container +docker-compose up -d + +# Run database scripts in order +sqlplus CONTAFIN_ORACLE/password@ROA_ROMFAST @01_create_table.sql +sqlplus CONTAFIN_ORACLE/password@ROA_ROMFAST @02_import_parteneri.sql +sqlplus CONTAFIN_ORACLE/password@ROA_ROMFAST @03_import_comenzi.sql +``` + +### VFP Development ```foxpro -DO gomag-vending.prg +DO vfp/gomag-vending.prg ``` -### Running from Windows Command Line -Use the provided batch file: -```cmd -run-gomag.bat +### Flask Admin Interface +```bash +cd api +python admin.py ``` -Direct execution with Visual FoxPro: -```cmd -"C:\Program Files (x86)\Microsoft Visual FoxPro 9\vfp9.exe" -T "gomag-vending.prg" -``` - -## Configuration Management - -The application uses `settings.ini` for all configuration. Key settings: - -### Required Configuration -- `ApiKey` - Your GoMag API key -- `ApiShop` - Your shop URL (e.g., "https://yourstore.gomag.ro") - -### Feature Control -- `GetProducts` - Set to "1" to retrieve products, "0" to skip -- `GetOrders` - Set to "1" to retrieve orders, "0" to skip -- `OrderDaysBack` - Number of days back to retrieve orders (default: 7) - -### Pagination -- `Limit` - Records per page (default: 100, max recommended for GoMag API) - -## API Integration Details - -### Authentication -- Header-based authentication using `Apikey` and `ApiShop` headers -- User-Agent must differ from "PostmanRuntime" - -### Endpoints -- Products: `https://api.gomag.ro/api/v1/product/read/json?enabled=1` -- Orders: `https://api.gomag.ro/api/v1/order/read/json` - -### Rate Limiting -- 1-second pause between paginated requests -- No specific READ request limitations -- POST requests limited to ~1 request per second (Leaky Bucket) - -## Directory Structure +## Project Structure ``` / -├── gomag-vending.prg # Main application -├── utils.prg # Utility functions -├── settings.ini # Configuration file -├── run-gomag.bat # Windows launcher -├── nfjson/ # JSON parsing library -│ ├── nfjsoncreate.prg -│ └── nfjsonread.prg -├── log/ # Generated log files -├── output/ # Generated JSON files -└── products-example.json # Sample API response +├── api/ # ✅ Flask Admin & Database +│ ├── admin.py # ✅ Flask app with Oracle pool +│ ├── database-scripts/ # ✅ Oracle SQL scripts +│ │ ├── 01_create_table.sql # ✅ ARTICOLE_TERTI table +│ │ ├── 02_import_parteneri.sql # ✅ Partners package +│ │ └── 03_import_comenzi.sql # ✅ Orders package +│ ├── Dockerfile # ✅ Oracle client container +│ ├── tnsnames.ora # ✅ Oracle connection config +│ ├── .env # ✅ Environment variables +│ └── requirements.txt # ✅ Python dependencies +├── docs/ # 📋 Project Documentation +│ ├── PRD.md # ✅ Product Requirements +│ ├── LLM_PROJECT_MANAGER_PROMPT.md # ✅ Project Management +│ └── stories/ # 📋 User Stories +│ ├── P1-001-ARTICOLE_TERTI.md # ✅ Story P1-001 (COMPLETE) +│ ├── P1-002-Package-IMPORT_PARTENERI.md # ✅ Story P1-002 (COMPLETE) +│ ├── P1-003-Package-IMPORT_COMENZI.md # ✅ Story P1-003 (COMPLETE) +│ └── P1-004-Testing-Manual-Packages.md # 📋 Story P1-004 (READY) +├── vfp/ # ⏳ VFP Integration +│ ├── gomag-vending.prg # ✅ Current GoMag client +│ ├── utils.prg # ✅ Utility functions +│ ├── nfjson/ # ✅ JSON parsing library +│ └── sync-comenzi-web.prg # ⏳ Future orchestrator +├── docker-compose.yaml # ✅ Container setup +└── logs/ # ✅ Application logs ``` -## Output Files +## Configuration -### Generated Files -- `log/gomag_sync_YYYYMMDD_HHMMSS.log` - Detailed execution logs -- `output/gomag_all_products_YYYYMMDD_HHMMSS.json` - Complete product array -- `output/gomag_orders_last7days_YYYYMMDD_HHMMSS.json` - Orders array +### Environment Variables (.env) +```env +ORACLE_USER=CONTAFIN_ORACLE +ORACLE_PASSWORD=******** +ORACLE_DSN=ROA_ROMFAST +TNS_ADMIN=/app +INSTANTCLIENTPATH=/opt/oracle/instantclient +``` -### Error Files -- `gomag_error_pageN_*.json` - Raw API responses for failed parsing -- `gomag_error_pageN_*.log` - HTTP error details with status codes +### Business Rules + +#### Partners +- Search priority: cod_fiscal → denumire → create new +- Individuals (CUI 13 digits): separate nume/prenume +- Default address: București Sectorul 1 +- All new partners: ID_UTIL = -3 + +#### Articles +- Simple SKUs: found directly in nom_articole (not stored) +- Special mappings: only repackaging and complex sets +- Inactive articles: activ=0 (not deleted) + +#### Orders +- Uses existing PACK_COMENZI packages +- Default: ID_GESTIUNE=1, ID_SECTIE=1, ID_POL=0 +- Delivery date = order date + 1 day +- All orders: INTERNA=0 (external) + +## Phase Implementation Status + +### ✅ Phase 1: Database Foundation (75% Complete) +- **P1-001:** ✅ ARTICOLE_TERTI table + Docker setup +- **P1-002:** ✅ IMPORT_PARTENERI package complete +- **P1-003:** ✅ IMPORT_COMENZI package complete +- **P1-004:** 🔄 Manual testing (READY TO START) + +### ⏳ Phase 2: VFP Integration (Planned) +- Adapt gomag-vending.prg for JSON output +- Create sync-comenzi-web.prg orchestrator +- Oracle packages integration +- Logging system with rotation + +### ⏳ Phase 3: Web Admin Interface (Planned) +- Flask app with Oracle connection pool +- HTML/CSS admin interface +- JavaScript CRUD operations +- Client/server-side validation + +### ⏳ Phase 4: Testing & Deployment (Planned) +- End-to-end testing with real orders +- Complex mappings validation +- Production environment setup +- User documentation ## Key Functions -### Main Application (gomag-vending.prg) -- `SaveProductsArray` - Converts paginated product data to JSON array -- `SaveOrdersArray` - Converts paginated order data to JSON array -- `MergeProducts` - Combines products from multiple pages -- `MergeOrdersArray` - Combines orders from multiple pages +### Oracle Packages +- `IMPORT_PARTENERI.cauta_sau_creeaza_partener()` - Partner management +- `IMPORT_PARTENERI.parseaza_adresa_semicolon()` - Address parsing +- `IMPORT_COMENZI.gaseste_articol_roa()` - SKU resolution +- `IMPORT_COMENZI.importa_comanda_web()` - Order import -### Utilities (utils.prg) -- `LoadSettings` - Loads complete INI configuration into object -- `InitLog`/`LogMessage`/`CloseLog` - Comprehensive logging system -- `TestConnectivity` - Internet connection verification -- `CreateDefaultIni` - Generates template configuration file \ No newline at end of file +### VFP Utilities (utils.prg) +- `LoadSettings` - INI configuration management +- `InitLog`/`LogMessage`/`CloseLog` - Logging system +- `TestConnectivity` - Connection verification +- `CreateDefaultIni` - Default configuration + +## Success Metrics + +### Technical KPIs +- Import success rate > 95% +- Average processing time < 30s per order +- Zero downtime for main ROA system +- 100% log coverage + +### Business KPIs +- 90% reduction in manual order entry time +- Elimination of manual transcription errors +- New mapping configuration < 5 minutes + +## Error Handling + +### Categories +1. **Oracle connection errors:** Retry logic + alerts +2. **SKU not found:** Log warning + skip item +3. **Invalid partner:** Create attempt + detailed log +4. **Duplicate orders:** Skip with info log + +### Logging Format +``` +2025-09-09 14:30:25 | ORDER-123 | OK | ID:456789 +2025-09-09 14:30:26 | ORDER-124 | ERROR | SKU 'XYZ' not found +``` + +## Project Manager Commands + +Available commands for project tracking: +- `status` - Overall progress and current story +- `stories` - List all stories with status +- `phase` - Current phase details +- `risks` - Identify and prioritize risks +- `demo [story-id]` - Demonstrate implemented functionality +- `plan` - Re-planning for changes \ No newline at end of file diff --git a/docs/LLM_PROJECT_MANAGER_PROMPT.md b/docs/LLM_PROJECT_MANAGER_PROMPT.md index eae3ec2..1f7e8b5 100644 --- a/docs/LLM_PROJECT_MANAGER_PROMPT.md +++ b/docs/LLM_PROJECT_MANAGER_PROMPT.md @@ -219,10 +219,7 @@ Toate story-urile sunt stocate în fișiere individuale în `docs/stories/` cu f ## 🚀 Getting Started **Primul tau task:** -1. Citește întregul PRD furnizat -2. Generează toate story-urile pentru Phase 1 -3. Prezintă overall project plan cu timeline -4. Începe tracking primul story +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 @@ -230,6 +227,15 @@ Toate story-urile sunt stocate în fișiere individuale în `docs/stories/` cu f - 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. Să încep cu generarea story-urilor pentru Phase 1?" \ No newline at end of file +**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 index 29aaf10..a6edda2 100644 --- a/docs/PRD.md +++ b/docs/PRD.md @@ -106,10 +106,167 @@ CREATE TABLE ARTICOLE_TERTI ( **Responsabilități:** - Rulare automată (timer 5 minute) -- Citire comenzi din API-ul web -- Apelare package-uri Oracle +- Citire comenzi din JSON-ul generat de gomag-vending.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:** @@ -129,10 +286,20 @@ CREATE TABLE ARTICOLE_TERTI ( - [ ] 🔄 **P1-004:** Testare manuală package-uri (NEXT UP!) ### Phase 2: VFP Integration (Ziua 2) -- [ ] Adaptare gomag-vending-test.prg pentru output JSON -- [ ] Creare sync-comenzi-web.prg -- [ ] Testare import comenzi end-to-end -- [ ] Configurare logging +- [ ] **P2-001:** Adaptare gomag-vending.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 @@ -355,5 +522,5 @@ Toate story-urile pentru fiecare fază sunt stocate în `docs/stories/` cu detal --- **Document Owner:** Development Team -**Last Updated:** 09 septembrie 2025, 10:45 +**Last Updated:** 09 septembrie 2025, 12:15 (Updated VFP Orchestrator plan) **Next Review:** După P1-004 completion (Phase 1 FINALIZAT!) \ No newline at end of file diff --git a/vfp/output/gomag_all_products_20250909_193919.json b/vfp/output/gomag_all_products_20250909_193919.json new file mode 100644 index 0000000..c6560e2 --- /dev/null +++ b/vfp/output/gomag_all_products_20250909_193919.json @@ -0,0 +1,817 @@ +[ + {"alloworderswhenoutofstock":"0","attributes":["_EMPTY_ARRAY_FLAG_"],"base_price":"1.0000","brand":"Wittenborg","bundleitems":["_EMPTY_ARRAY_FLAG_"],"canonical_url":"https:\\/\\/www.coffeepoint.ro\\/piese-schimb-aparate-cafea\\/surub-sita-piston-9g-necta-wittenborg.html","categories":[[{"id":"10","name":"Piese aparate cafea"},{"id":"11","name":"Grupuri de cafea"}]],"created":"2021-04-23 10:02:41","currency":"RON","customsearchkeys":"","delivery_time":null,"delivery_time_type":"text","description":"","ean":"","ecotax":"0.0000","enabled":"1","feeddescription":"","files":null,"group_key":"","html_description":"Surub sita piston 9g Necta\\/Wittenborg","html_title":"Surub sita piston 9g Necta\\/Wittenborg","id":"10","images":["https:\\/\\/gomagcdn.ro\\/domains\\/coffeepoint.ro\\/files\\/product\\/original\\/surub-sita-piston-9g-necta-wittenborg-10-685063.png"],"name":"Surub sita piston 9g Necta\\/Wittenborg","parent":"10","parent_sku":"094508","price":"1.0000","short_description":"","sku":"094508","stock":"0","stockmanagement":"0","stock_status":"instock","um":null,"updated":"2024-08-30 09:00:33","url":"https:\\/\\/www.coffeepoint.ro\\/surub-sita-piston-9g-necta-wittenborg.html","vat":"21","vat_included":1,"videos":null,"weight":"0.1"}, + {"alloworderswhenoutofstock":"0","attributes":[{"id":"4","name":"Capacitate","type":"dropdown","value":"8oz"}],"base_price":"170.0000","brand":"RLP","bundleitems":["_EMPTY_ARRAY_FLAG_"],"canonical_url":"https:\\/\\/www.coffeepoint.ro\\/oferte\\/pahar-carton-8oz-albastru-rlp-bax-1000buc.html","categories":[[{"id":"56","name":"Oferte"},{"id":"47","name":"Baxuri Pahare"}]],"created":"2021-04-23 10:02:47","currency":"RON","customsearchkeys":"","delivery_time":null,"delivery_time_type":"text","description":"Acest tip de pahar este recomandat pentru automatele vending cu pahare automat. Sunt produse din material tratat antistatic, rezistent si cu un design frumos.
\\r\\nPahar carton 230ml\\/8oz.
\\r\\nMod ambalare: 50\\/set, iar o cutie contine 20 seturi.Pretul afisat este pentru un bax de 1000buc.","ean":"","ecotax":"0.0000","enabled":"1","feeddescription":"","files":null,"group_key":"","html_description":"","html_title":"","id":"101","images":["https:\\/\\/gomagcdn.ro\\/domains\\/coffeepoint.ro\\/files\\/product\\/original\\/pahar-carton-8oz-albastru-rlp-bax-1000buc-315976.webp"],"name":"Pahar carton 8oz Albastru RLP bax 1000buc","parent":"101","parent_sku":"58912111224","price":"137.0000","short_description":"","sku":"58912111224","stock":"0","stockmanagement":"0","stock_status":"instock","um":null,"updated":"2024-08-30 09:00:57","url":"https:\\/\\/www.coffeepoint.ro\\/pahar-carton-8oz-albastru-rlp-bax-1000buc.html","vat":"21","vat_included":1,"videos":null,"weight":"10"}, + {"alloworderswhenoutofstock":"0","attributes":["_EMPTY_ARRAY_FLAG_"],"base_price":"89.0000","brand":"Kimbo","bundleitems":["_EMPTY_ARRAY_FLAG_"],"canonical_url":"https:\\/\\/www.coffeepoint.ro\\/cafea\\/kimbo-extra-cream-cafea-boabe-1kg.html","categories":[[{"id":"8","name":"Cafea"},{"id":"24","name":"Cafea Boabe"}]],"created":"2024-05-14 12:36:15","currency":"RON","customsearchkeys":"","delivery_time":null,"delivery_time_type":"text","description":"Kimbo Extra Cream Medium Roast<\\/em> este o cafea boabe premium, care încântă simțurile cu arome bogate și o cremă catifelată. Această cafea italiană autentică face parte din linia Kimbo Espresso Bar pentru profesioniști și oferă o experiență de degustare intensă, cu note profunde de piper negru și lemn dulce, echilibrate perfect de o aciditate delicată. Boabele sunt meticulos selecționate și prăjite cu grijă pentru a extrage maximul de arome și a obține o cremă bogată și persistentă în fiecare ceașcă.<\\/span>\\r\\n

Caracteristici:<\\/b><\\/span><\\/span><\\/span><\\/h2>\\r\\n\\r\\n
    \\r\\n\\t
  • Note – <\\/b>piper, lemn dulce<\\/span><\\/span><\\/span><\\/li>\\r\\n\\t
  • Aromă – <\\/b>Intens<\\/span><\\/span><\\/span><\\/li>\\r\\n\\t
  • Corp — <\\/strong>Mediu<\\/span><\\/span><\\/span><\\/li>\\r\\n\\t
  • Originea boabelor de cafea – <\\/b>Brazilia, India si Columbia<\\/span><\\/span><\\/span><\\/li>\\r\\n\\t
  • Nivel de prăjire – <\\/b>Mediu (Medium Roast)<\\/span><\\/span><\\/span><\\/li>\\r\\n\\t
  • Recomandată pentru – <\\/b>espressor, mocha pot, filtru<\\/span><\\/span><\\/span><\\/li>\\r\\n<\\/ul>\\r\\n \\r\\n\\r\\n

    Mod de ambalare:<\\/b><\\/span><\\/span><\\/span><\\/h2>\\r\\n
    \\r\\nCafeaua boabe Kimbo Extra Cream medium roast<\\/em> este ambalată în pungi de 1 kg iar un bax conține 6 pungi.<\\/span><\\/span><\\/span>","ean":"8002200148157","ecotax":"0.0000","enabled":"1","feeddescription":"","files":null,"group_key":"","html_description":"","html_title":"","id":"1014","images":["https:\\/\\/gomagcdn.ro\\/domains\\/coffeepoint.ro\\/files\\/product\\/original\\/lavazza-qualita-oro-cafea-boabe-1kg-copie-885012.webp"],"name":"Kimbo Extra Cream Cafea Boabe 1kg","parent":"1014","parent_sku":"8002200148157-1893","price":"83.9900","short_description":"
    \\r\\n