YouTube rate limit protection + progressive retry system
- 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
This commit is contained in:
226
memory/kb/projects/analiza-import-bonuri-pdf.md
Normal file
226
memory/kb/projects/analiza-import-bonuri-pdf.md
Normal file
@@ -0,0 +1,226 @@
|
||||
# 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*
|
||||
Reference in New Issue
Block a user