7.7 KiB
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/extractfuncț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:
- User trimite bon pe Telegram/WhatsApp
- Clawdbot detectează fișier, îl descarcă
- Clawdbot trimite fișierul la
roa2web/api/upload - roa2web procesează cu Doctr, returnează JSON
- Clawdbot trimite răspuns user: "Bon procesat: Mega Image, 45.50 RON"
- roa2web salvează draft în Oracle (status: pending)
- 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:
- Telegram/WhatsApp webhook direct la roa2web
- roa2web procesează și salvează
- 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:
- User trimite pe canal → Clawdbot salvează în folder
- 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
- Schema Oracle: În ce tabel/modul se salvează bonurile în contabilitate?
- Câmpuri obligatorii: Ce date TREBUIE să existe pentru o înregistrare validă?
- Contabil: Cine aprobă? Un singur user sau mai mulți?
- Notificări: Contabilul vrea notificare când vine ceva nou? (email/Telegram?)
- roa2web deploy: Unde rulează? Are acces la Oracle-ul de producție?
10. Următorul Pas
Când ai 30 min, hai să:
- Clarificăm schema Oracle pentru bonuri
- Verificăm dacă roa2web poate conecta la Oracle
- Facem un test: Telegram → Clawdbot → roa2web → JSON response
Analiză generată de Echo • 2026-02-03