Files
clawd/memory/kb/projects/analiza-telegram-whatsapp-roa2web.md

7.7 KiB

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

# 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

-- 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