- New: tools/yt_download.py with cookies support + rate limit tracking - New: docs/YOUTUBE-SETUP.md complete documentation - Updated: night-execute jobs to use new script - Updated: TOOLS.md with YouTube section - Added: 5 new YouTube notes (OpenClaw, cost optimization, task system, leads) - Added: credentials/ to .gitignore
7.0 KiB
7.0 KiB
Analiză: Sistem Import Bonuri PDF via Telegram/Discord/WhatsApp → roa2web
Data: 2026-02-03
Status: Analiză conceptuală
Tags: @work @project
TL;DR
Sistem pentru importul bonurilor fiscale (PDF/imagine) în ERP ROA prin canale de mesagerie. Utilizatorul trimite poza bonului → OCR extrage datele → roa2web validează și importă în Oracle.
1. Arhitectură Propusă
┌─────────────┐ ┌─────────────┐ ┌──────────────┐ ┌─────────────┐
│ Telegram │ │ │ │ │ │ │
│ Discord │────▶│ Clawdbot │────▶│ OCR Engine │────▶│ roa2web │
│ WhatsApp │ │ (Router) │ │ (Parsare) │ │ (FastAPI) │
└─────────────┘ └─────────────┘ └──────────────┘ └─────────────┘
│ │ │
│ │ │
▼ ▼ ▼
• Primește fișier • Tesseract/Mistral • Validare date
• Identifică tip • Extrage câmpuri • Import Oracle
• Rutare canal • Structurează JSON • Confirmare user
2. Componente Tehnice
2.1 Canale Inbound (Clawdbot)
| Canal | Cum primește | Format acceptat |
|---|---|---|
| Telegram | Bot API / file_id | PDF, JPG, PNG |
| Discord | Attachment | PDF, JPG, PNG |
| Media message | PDF, JPG, PNG |
Clawdbot poate:
- Detecta atașamente pe orice canal
- Descărca fișierul local temporar
- Ruta către procesare OCR
2.2 OCR Engine
Opțiuni (în ordinea complexității):
| Soluție | Pro | Contra | Efort |
|---|---|---|---|
| Tesseract + regex | Gratuit, local | Acuratețe medie, layout-uri diverse | Mic |
| Mistral OCR API | Calitate bună, JSON direct | Cost per request | Mic |
| Claude Vision | Excelent la context | Cost mai mare | Mic |
| Google Document AI | Enterprise, structurat | Cost, setup complex | Mare |
Recomandare: Mistral OCR sau Claude Vision - calitate bună, integrare simplă cu Clawdbot.
2.3 Câmpuri de Extras din Bon
{
"tip_document": "bon_fiscal",
"data": "2026-02-03",
"ora": "14:32",
"furnizor": {
"nume": "MEGA IMAGE SRL",
"cui": "RO12345678",
"adresa": "Str. Exemplu nr. 1"
},
"articole": [
{"denumire": "Paine alba", "cantitate": 1, "pret_unitar": 4.50, "valoare": 4.50},
{"denumire": "Lapte 1L", "cantitate": 2, "pret_unitar": 8.00, "valoare": 16.00}
],
"total": 20.50,
"tva": {
"cota_9": 1.50,
"cota_19": 0.50
},
"numar_bon": "0001234",
"casa_marcat": "ABC12345"
}
2.4 roa2web Integration
Endpoint propus: POST /api/data-entry/import-bon
# FastAPI endpoint
@router.post("/import-bon")
async def import_bon(
bon_data: BonFiscalSchema,
user_id: str = Depends(get_current_user)
):
# 1. Validare date (CUI valid, sume corecte)
# 2. Mapare furnizor în baza ROA
# 3. Creare document intrare marfă
# 4. Return confirmare + document_id
3. Flux Utilizator
3.1 Happy Path
- Marius face poză la bon în magazin
- Trimite pe Telegram la @ROABot (sau grup dedicat)
- Clawdbot detectează imagine, descarcă
- OCR extrage datele, validează structura
- Clawdbot trimite preview: "Am extras: Mega Image, 20.50 RON, 3 articole. Confirm import? ✅/❌"
- Marius confirmă (sau corectează)
- roa2web importă în Oracle
- Confirmare: "✅ Bon importat. Document #12345"
3.2 Edge Cases
| Situație | Handling |
|---|---|
| Poză neclară | "Nu am putut citi bonul. Retrimite o poză mai clară." |
| Furnizor nou | "Furnizor MEGA IMAGE nu există. Creez? [Da/Nu]" |
| Articol necunoscut | "Articol 'Paine alba' nu are corespondent. Alege: [1] Paine [2] Produse panificatie [3] Skip" |
| PDF protejat | "PDF-ul e protejat. Trimite ca imagine." |
4. Provocări și Soluții
4.1 Calitatea imaginii
- Problemă: Poze făcute pe fugă, iluminate prost
- Soluție:
- Pre-procesare imagine (contrast, deskew)
- Fallback la input manual dacă OCR confidence < 70%
4.2 Varietatea formatelor
- Problemă: Fiecare comerciant are alt layout
- Soluție:
- LLM (Claude/Mistral) extrage semantic, nu pe poziție
- Template-uri pentru comercianți frecvenți (Mega, Lidl, Kaufland)
4.3 Mapare articole
- Problemă: "Lapte Zuzu 1L 3.5%" vs cod ROA "LAPTE_001"
- Soluție:
- Fuzzy matching pe denumire
- Tabel mapări (bon_text → cod_roa)
- Learning: salvează mapările confirmate
4.4 Rate limiting canale
- Problemă: WhatsApp/Telegram pot limita
- Soluție:
- Queue local pentru procesare
- Confirmare async ("Procesez, te anunț în 30 sec")
5. Plan Implementare
Faza 1: POC (2-3 zile)
- Endpoint Clawdbot pentru primire fișier
- Integrare Mistral OCR / Claude Vision
- Parsare bon simplu (1 comerciant test)
- Răspuns pe canal cu datele extrase
Faza 2: Integrare roa2web (3-5 zile)
- Endpoint FastAPI
/api/import-bon - Validare și mapare furnizor
- Creare document Oracle
- Confirmare utilizator
Faza 3: Polish (2-3 zile)
- Handling edge cases
- Template-uri comercianți mari
- Tabel mapări articole
- Logging și statistici
Faza 4: Extindere (opțional)
- Suport pentru mai multe tipuri documente (facturi, chitanțe)
- Batch import (multiple bonuri)
- Dashboard statistici achiziții
6. Efort Estimat
| Componentă | Ore | Cine |
|---|---|---|
| Clawdbot file handler | 2-4 | Echo/Claude |
| OCR integration | 2-3 | Echo/Claude |
| roa2web endpoint | 4-6 | Marius + Claude |
| Mapări și validări | 4-8 | Marius |
| Total MVP | 12-21 ore | Mix |
Cost OCR estimat: ~$0.01-0.05 per bon (Claude Vision sau Mistral)
7. Beneficii
- Timp economisit: 2-5 min/bon → 10 sec/bon
- Erori reduse: OCR consistent vs. tastare manuală
- Mobilitate: Import din teren, nu doar de la birou
- Trasabilitate: Fiecare bon are sursa (poza originală)
8. Următorii Pași
- Marius decide: Merită efortul? Câte bonuri/lună?
- Test rapid: Un bon de la Mega Image → Claude Vision → vezi output
- Prototip: Clawdbot + Claude Vision → răspuns formatat
9. Întrebări pentru Marius
- Câte bonuri/documente procesezi lunar manual?
- Care sunt cei mai frecvenți furnizori?
- Ce câmpuri sunt obligatorii în ROA pentru intrare marfă?
- Preferi confirmare înainte de import sau import direct cu corecție ulterioară?
Analiză generată de Echo • 2026-02-03 03:00