- 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
227 lines
7.0 KiB
Markdown
227 lines
7.0 KiB
Markdown
# 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 |
|
|
| WhatsApp | 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
|
|
|
|
```json
|
|
{
|
|
"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`
|
|
|
|
```python
|
|
# 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
|
|
|
|
1. **Marius** face poză la bon în magazin
|
|
2. **Trimite** pe Telegram la @ROABot (sau grup dedicat)
|
|
3. **Clawdbot** detectează imagine, descarcă
|
|
4. **OCR** extrage datele, validează structura
|
|
5. **Clawdbot** trimite preview: "Am extras: Mega Image, 20.50 RON, 3 articole. Confirm import? ✅/❌"
|
|
6. **Marius** confirmă (sau corectează)
|
|
7. **roa2web** importă în Oracle
|
|
8. **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
|
|
|
|
1. **Marius decide:** Merită efortul? Câte bonuri/lună?
|
|
2. **Test rapid:** Un bon de la Mega Image → Claude Vision → vezi output
|
|
3. **Prototip:** Clawdbot + Claude Vision → răspuns formatat
|
|
|
|
---
|
|
|
|
## 9. Întrebări pentru Marius
|
|
|
|
1. Câte bonuri/documente procesezi lunar manual?
|
|
2. Care sunt cei mai frecvenți furnizori?
|
|
3. Ce câmpuri sunt obligatorii în ROA pentru intrare marfă?
|
|
4. Preferi confirmare înainte de import sau import direct cu corecție ulterioară?
|
|
|
|
---
|
|
|
|
*Analiză generată de Echo • 2026-02-03 03:00*
|