chore: add venv/ to .gitignore and remove from tracking
This commit is contained in:
263
memory/kb/projects/analiza-telegram-whatsapp-roa2web.md
Normal file
263
memory/kb/projects/analiza-telegram-whatsapp-roa2web.md
Normal file
@@ -0,0 +1,263 @@
|
||||
# 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*
|
||||
Reference in New Issue
Block a user