Update dashboard, memory, root (+1 ~7 -2)

This commit is contained in:
Echo
2026-02-03 17:20:24 +00:00
parent f184b2b179
commit db4b57f5a3
10 changed files with 378 additions and 529 deletions

View File

@@ -1,226 +0,0 @@
# 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*

View File

@@ -1,263 +0,0 @@
# 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*

View File

@@ -0,0 +1,121 @@
# Meditație: Vizualizare pentru Motivație
**Sursă:** MP3 de la Marius (Google Drive)
**Durată:** ~10-12 minute
**Domenii:** @sprijin @growth
**Tip:** meditație ghidată NLP
---
## TL;DR
Exercițiu de vizualizare care leagă o acțiune pentru care vrei motivație de o stare de plăcere intensă din trecut. Folosește tehnica "fissurii în ecran" pentru a transfera emoțional motivația.
---
## Pași
1. **Relaxare** - Găsește o poziție confortabilă, închide ochii
2. **Identifică imaginea de plăcere**
- Caută în memorie o imagine din trecut care îți produce plăcere extremă
- Poate fi un moment, o acțiune, un loc de relaxare
- Orice simți că îți produce plăcere intensă
3. **Vizualizează pe ecranul mental**
- Proiectează imaginea pe un ecran uriaș (ca la cinematograf)
- Vezi-te pe tine în scenă, filmat din lateral
- Fii atent la ce vezi, ce auzi, ce simți
4. **Amplifică starea**
- Imaginează-ți o telecomandă în mână
- Apasă butonul și crește luminozitatea
- Fă scena mai caldă, mai luminoasă
- Simte cum se amplică starea de plăcere
5. **Suprapune ecranul cu acțiunea**
- Între tine și scena cu plăcere, apare un nou ecran
- Pe noul ecran: tu făcând acțiunea pentru care vrei motivație
- Poate fi: să înveți ceva, să faci o acțiune, să lucrezi la dezvoltare personală
6. **Tehnica fissurii** (repetă de 3 ori)
- Creează o fissură în centrul imaginii cu acțiunea
- Lărgește fissura până vezi complet scena de plăcere din spate
- Închide rapid fissura
- Observă cum se schimbă emoția față de acțiune
7. **Proiectează în viitor**
- Lasă să curgă emoția spre viitorul tău
- De-a lungul secundelor, minutelor, orelor, zilelor
- Acțiunea rămâne definitiv legată de starea de plăcere
8. **Revenire** - Deschide ochii când ești gata
---
## Transcriere completă
> O să te rog să te relaxezi și să închizi ochii, să îți găsești o poziție cât mai confortabilă și să identifici în memoria ta, o imagine de undeva din trecut, îndepărtată sau mai apropiată, o imagine care îți place extrem de mult, ceva care te motivează foarte, foarte tare.
>
> Poate să fie absolut orice, poate să fie un anumit element, poate să fie o acțiune, poate să fie un moment în care te relaxezi, orice simți tu că îți produce o plăcere extremă.
>
> Și când ai găsit această imagine, o să te rog să o vizualizezi, să ți-o imaginezi pe ecranul minții tale, cât mai clar, și doar să o privești, și să te vezi și pe tine în acea imagine ca și cum cineva cu un aparat de filmat ar fi filmat din lateral acea scenă.
>
> Și acum ai proiectat-o pe un ecran uriaș, ca al unui cinematograf chiar în mintea ta. Fii acum atent la tot ce vezi în această scenă. Fii acum atent la tot ce auzi, fii atent la tot ce simți.
>
> Și imaginează-ți acum că ții în mână o telecomandă și că apăși pe un buton și intensifici, crești luminozitatea, și scena pe care o vezi în minte, fă-o mai luminoasă, mai caldă, și o să simți acum cum se amplifică chiar și mai mult, starea de plăcere pe care o ai privind acea imagine.
>
> O să te las pentru câteva momente să savurezi această stare de plăcere pe care o ai în timp ce privești această scenă.
>
> Foarte bine. Păstrează acum în minte această scenă și imaginează-ți că între această scenă și tine apare un alt ecran care acoperă complet scena cu starea de plăcere.
>
> Și pe acest ecran care a apărut acum între tine și această scenă inițială, așază o imagine cu tine, făcând acțiunea pentru care ai zis că să te simți mai motivat, să ai mai mult entuziasm, mai multă dorință de a o face.
>
> Poate vrei să înveți ceva, sau poate vrei să faci o anumită acțiune, sau poate chiar vrei să lucrezi pentru dezvoltarea ta personală.
>
> Orice ai dori, alege o imagine care să fie caracteristică pentru acea acțiune și proiecteaz-o pe acest nou ecran.
>
> Când o privești acum în minte această nouă scenă, îți creează poate emoții contrare, pe de o parte te atrage, ai vrea să mergi spre ea și să faci acțiunea, de altă parte ceva nu te atrage suficient de mult, nu te motivează.
>
> Ce o să facem în continuare, este să încărcăm cu motivație chiar și această imagine pe care creierul tău o percepe lipsită de motivație.
>
> Vreau acum să te relaxezi, chiar și mai mult, și să fii atent la cele două ecrane suprapuse din interiorul minții tale, și să îți folosești imaginația și creativitatea, privind aceste ecrane, privind pe ecranul de deasupra.
>
> Și o să te rog acum să creezi cu puterea minții și a imaginației tale o fissură chiar în centrul acestei imagini, chiar în centrul ecranului, fissură pe care să o lărgești, suficient de mult, încât prin ea să se vadă clar și complet, scena din spate, scena cu plăcerea imensă pe care ai descris-o inițial.
>
> Foarte bine, acum închide rapid acea fissură și recreează imaginea inițială, privește acum iarăși scena pentru care vrei să creezi motivație, și observă cum s-a schimbat, ușor, starea de plăcere, pe care o ai în timp ce privești această scenă.
>
> Folosește-ți iarăși imaginația și creează o fissură în centrul ei, în centrul imaginii, suficient de mare încât prin ea să se vadă complet și clar, scena care îți provoca plăcerea și motivația.
>
> Foarte bine, închide iarăși, imaginează-ți fissura și privește iarăși acea scenă, acțiunea pentru care vrei să îți crești motivația și observă cum s-a schimbat emoția.
>
> Folosește-ți încă o dată pentru a treia oară imaginația și creează iarăși o fissură în mijlocul ecranului mental, suficient de mare încât să vezi prin ea, scena care pentru tine este plină de plăcere și motivație.
>
> Foarte bine, închide acum rapid fissura și privește cum această... doua scenă care în acest moment o simți foarte plăcută și motivată.
>
> Creierul tău o percepe ca fiind plină de motivație, pentru mintea ta, pentru creierul tău această imagine, conține, foarte multă plăcere și motivație.
>
> E posibil chiar din acest moment, după ce vei deschide ochii să simți nevoia să faci acea acțiune.
>
> Păstrează pentru câteva momente o stare de relaxare și o să te rog acum să lași să curgă, spre viitorul tău, toată această emoție pe care ai legat-o de această acțiune.
>
> Lasă să curgă această emoție, acest entuziasm, motivația, de-a lungul secundelor tale viitoare, de-a lungul minutelor, de-a lungul orelor, de-a lungul zilelor, de oricât de mult ai nevoie.
>
> Și simte cum această acțiune rămâne acum definitiv legată de această stare de plăcere, de-a lungul întregii tale vieți.
>
> Să fii cine poți deschide ochii.
---
## Când să folosești
- Când ai o acțiune importantă dar nu găsești motivația
- La începutul zilei, pentru a te pregăti mental
- Înainte de task-uri pe care le tot amâni
- În grup sprijin, ca exercițiu de auto-motivare
## Note
- Tehnica e din NLP (Neuro-Linguistic Programming)
- Similar cu "ancorarea" - leagă o stare emoțională de un trigger
- Funcționează mai bine cu practică repetată