# Analiză: Telegram/WhatsApp → roa2web → Contabilitate ROA **Data:** 2026-02-03 **Status:** Analiză tehnică actualizată după review cod **Tags:** @work @project --- ## TL;DR Integrare canale messaging (Telegram/WhatsApp) cu roa2web pentru import documente în contabilitatea ROA. OCR prin Doctr (cost zero, local). Flux cu aprobare contabil. **UPDATE:** După analiza codului, roa2web are deja: - ✅ OCR complet (Doctr + PaddleOCR + Tesseract) - ✅ API `/api/data-entry/ocr/extract` funcțional - ✅ Bot Telegram pentru dashboard/facturi/sold - ❌ **LIPSEȘTE:** Handler fișiere în bot Telegram - ❌ **LIPSEȘTE:** PDF text layer extraction (optimizare pentru Adobe Scan) --- ## 1. Ce Există Deja ### roa2web - **OCR:** Doctr (local, gratuit, rezultate bune) - **Storage:** SQLite local (bonuri procesate) - **API:** FastAPI endpoints ### Clawdbot - **Canale:** Telegram ✅, WhatsApp ✅, Discord ✅ - **Capabilități:** Primire fișiere, rutare, răspuns ### ROA (ERP) - **DB:** Oracle - **Contabilitate:** Module existente pentru intrări/facturi --- ## 2. Ce Lipsește (Gap Analysis) | Component | Status | Ce trebuie | |-----------|--------|------------| | Telegram → roa2web | ❌ | Endpoint webhook sau polling | | WhatsApp → roa2web | ❌ | Endpoint webhook sau polling | | roa2web → Oracle | ❌ | API salvare în contabilitate | | Workflow aprobare | ❌ | UI contabil + status draft/approved | --- ## 3. Arhitectură Propusă ``` ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ Telegram │ │ │ │ │ │ │ │ WhatsApp │────▶│ Clawdbot │────▶│ roa2web │────▶│ ROA Oracle │ └─────────────┘ │ (Bridge) │ │ (OCR+API) │ │ (Contab) │ └─────────────┘ └─────────────┘ └─────────────┘ │ │ │ ▼ ▼ ▼ • Primește fișier • Doctr OCR • Salvare draft • Forward la API • Extrage date • Aprobare contabil • Răspuns user • Validare • Înregistrare finală ``` --- ## 4. Opțiuni Implementare ### Opțiunea A: Clawdbot ca Bridge (RECOMANDAT) **Flux:** 1. User trimite bon pe Telegram/WhatsApp 2. Clawdbot detectează fișier, îl descarcă 3. Clawdbot trimite fișierul la `roa2web/api/upload` 4. roa2web procesează cu Doctr, returnează JSON 5. Clawdbot trimite răspuns user: "Bon procesat: Mega Image, 45.50 RON" 6. roa2web salvează draft în Oracle (status: pending) 7. Contabil vede în UI, aprobă → status: approved **Pro:** - Folosește Clawdbot existent - Nu modifică roa2web prea mult - Flexibilitate pe canale **Contra:** - Clawdbot trebuie să știe să ruteze fișiere **Efort:** 8-12 ore ### Opțiunea B: Webhook Direct în roa2web **Flux:** 1. Telegram/WhatsApp webhook direct la roa2web 2. roa2web procesează și salvează 3. roa2web trimite răspuns înapoi pe canal **Pro:** - Mai direct, fără intermediar **Contra:** - Trebuie implementat handler pentru fiecare canal - Duplicare logică cu Clawdbot **Efort:** 15-20 ore ### Opțiunea C: Shared Folder / Email **Flux:** 1. User trimite pe canal → Clawdbot salvează în folder 2. roa2web monitorizează folder, procesează automat **Pro:** - Simplu, decuplat **Contra:** - Fără feedback instant la user - Polling inefficient **Efort:** 4-6 ore --- ## 5. Recomandare: Opțiunea A (Clawdbot Bridge) ### 5.1 Ce trebuie în Clawdbot ```python # Pseudo-cod: handler pentru fișiere pe Telegram/WhatsApp async def on_file_received(channel, file, user): # 1. Descarcă fișierul local_path = await download_file(file) # 2. Trimite la roa2web response = await http_post( "https://roa2web.romfast.ro/api/ocr/process", files={"file": open(local_path, "rb")}, data={"user_id": user.id, "source": channel} ) # 3. Răspuns la user if response.ok: data = response.json() await reply(f"✅ Procesat: {data['furnizor']}, {data['total']} RON") else: await reply("❌ Eroare procesare. Încearcă din nou.") ``` ### 5.2 Ce trebuie în roa2web **Endpoint nou:** `POST /api/ocr/process` - Primește fișier (PDF/imagine) - Procesează cu Doctr (existent) - Salvează în SQLite (existent) + Oracle (NOU) - Returnează JSON cu datele extrase **Endpoint nou:** `POST /api/contabilitate/save-draft` - Primește datele extrase - Creează înregistrare draft în Oracle - Status: pending_approval **Endpoint nou:** `POST /api/contabilitate/approve/{id}` - Contabil aprobă - Status: approved → înregistrare finală ### 5.3 UI Contabil (opțional, faza 2) - Lista documente pending - Preview date extrase vs. imagine originală - Buton Approve / Reject / Edit --- ## 6. Integrare Oracle - Detalii ### Ce tabele în ROA? **Întrebare pentru Marius:** - Unde se salvează intrările de marfă/bonuri în Oracle? - Ce câmpuri sunt obligatorii? - Există API/proceduri Oracle existente pentru insert? ### Propunere structură draft ```sql -- Tabel nou pentru documente OCR pending CREATE TABLE roa_ocr_drafts ( id NUMBER PRIMARY KEY, source VARCHAR2(20), -- 'telegram', 'whatsapp' user_id VARCHAR2(50), file_path VARCHAR2(500), extracted_data CLOB, -- JSON cu datele OCR status VARCHAR2(20), -- 'pending', 'approved', 'rejected' created_at TIMESTAMP, approved_by VARCHAR2(50), approved_at TIMESTAMP, roa_document_id NUMBER -- FK la documentul creat în ROA după aprobare ); ``` --- ## 7. Plan Implementare ### Faza 1: Conectare canale (3-4 ore) - [ ] Clawdbot: handler fișiere Telegram - [ ] Clawdbot: handler fișiere WhatsApp - [ ] Forward la roa2web API ### Faza 2: roa2web API (4-6 ore) - [ ] Endpoint `/api/ocr/process` (extinde existent) - [ ] Returnare JSON standardizat - [ ] Logging și error handling ### Faza 3: Salvare Oracle (4-6 ore) - [ ] Conexiune Oracle din roa2web (cx_Oracle/oracledb) - [ ] Tabel `roa_ocr_drafts` - [ ] Endpoint `/api/contabilitate/save-draft` ### Faza 4: Aprobare (2-3 ore) - [ ] Endpoint `/api/contabilitate/approve` - [ ] Notificare user după aprobare ### Faza 5: UI Contabil (opțional, 4-8 ore) - [ ] Pagină listare drafts - [ ] Aprobare/respingere din UI --- ## 8. Estimare Totală | Fază | Ore | Cine | |------|-----|------| | Conectare canale | 3-4 | Echo (Clawdbot config) | | roa2web API | 4-6 | Marius + Claude | | Salvare Oracle | 4-6 | Marius (cunoaște schema) | | Aprobare | 2-3 | Marius + Claude | | **Total MVP** | **13-19 ore** | | | UI Contabil (opț.) | 4-8 | Marius | **Cost:** 0 RON (Doctr local, fără API externe) --- ## 9. Întrebări pentru Marius 1. **Schema Oracle:** În ce tabel/modul se salvează bonurile în contabilitate? 2. **Câmpuri obligatorii:** Ce date TREBUIE să existe pentru o înregistrare validă? 3. **Contabil:** Cine aprobă? Un singur user sau mai mulți? 4. **Notificări:** Contabilul vrea notificare când vine ceva nou? (email/Telegram?) 5. **roa2web deploy:** Unde rulează? Are acces la Oracle-ul de producție? --- ## 10. Următorul Pas Când ai 30 min, hai să: 1. Clarificăm schema Oracle pentru bonuri 2. Verificăm dacă roa2web poate conecta la Oracle 3. Facem un test: Telegram → Clawdbot → roa2web → JSON response --- *Analiză generată de Echo • 2026-02-03*