feat: Add OCR integration for automatic receipt data extraction

Implement Tesseract-based OCR to automatically extract vendor name,
date, total amount, and VAT from uploaded receipt images/PDFs,
reducing manual data entry and improving accuracy.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2025-12-12 11:48:29 +02:00
parent 5960154094
commit 41ae97180e
16 changed files with 2773 additions and 32 deletions

View File

@@ -3,6 +3,7 @@
## Obiectiv
Sistem de introducere bonuri fiscale cu:
- **OCR automat** pentru extragerea datelor din poze bonuri (100% local, fara costuri)
- **Upload poze** bonuri de la utilizatori
- **Generare automata** note contabile (staging area)
- **Aprobare de contabil** inainte de finalizare
@@ -13,8 +14,10 @@ Sistem de introducere bonuri fiscale cu:
### 1. Gestiune Bonuri Fiscale
#### 1.1 Creare Bon
- Utilizatorul poate uploada o poza a bonului fiscal
#### 1.1 Creare Bon cu OCR
- Utilizatorul uploadeaza poza bonului fiscal
- **OCR extrage automat**: suma, data, furnizor, CUI, numar bon
- Utilizatorul verifica si corecteaza datele extrase
- Campuri obligatorii: tip document, directie, data, suma, furnizor, casa/banca
- Campuri optionale: numar bon, serie, descriere
- Tipuri document: Bon Fiscal, Chitanta
@@ -145,11 +148,71 @@ GET /api/receipts/cash-registers # Case/Banci
GET /api/receipts/expense-types # Tipuri cheltuieli
```
### OCR
```
GET /api/ocr/status # Verifica disponibilitate OCR
POST /api/ocr/extract # Extrage date din imagine uploadata
POST /api/ocr/extract-attachment/{id} # Re-proceseaza atasament existent
```
## OCR - Specificatii Tehnice
### Cerinte OCR
- **100% local** - fara costuri externe, fara API-uri cloud
- **Full-auto** - completeaza formularul automat
- **Input**: doar imagini (JPG/PNG/PDF)
- **On-premise** - datele sensibile raman locale
### Campuri Extrase Automat
| Camp | Tip | Acuratete Estimata |
|------|-----|-------------------|
| Suma (TOTAL) | Decimal | 90-95% |
| Data bon | Date | 85-90% |
| Numar bon | String | 80-85% |
| Furnizor | String | 70-80% |
| CUI | String | 85-90% |
| Tip document | Enum | 95%+ |
### Stack Tehnic OCR
| Component | Solutie | Justificare |
|-----------|---------|-------------|
| **OCR Engine** | PaddleOCR (primar) | 85-92% acuratete, pip install, CPU-friendly |
| **Fallback OCR** | Tesseract + ron | Suport excelent diacritice romanesti |
| **Extractie** | Regex/rules-based | Zero dependente extra, rapid (<100ms) |
| **Preprocessing** | OpenCV | Deskew, binarizare, denoise |
| **PDF → Image** | pdf2image + Poppler | Standard, fiabil |
### Dependente Sistem (Linux)
```bash
apt-get install -y \
tesseract-ocr tesseract-ocr-ron tesseract-ocr-eng \
poppler-utils libgl1-mesa-glx libglib2.0-0
```
### User Flow OCR
```
1. User deschide "Bon Fiscal Nou"
2. User trage/selecteaza poza bonului
3. Click "Proceseaza cu OCR"
4. [Spinner 2-3 sec] "Se proceseaza imaginea..."
5. Apare preview cu date extrase + indicatori incredere
6. User click "Aplica datele" sau corecteaza manual
7. Formularul se completeaza automat
8. User selecteaza tip cheltuiala, casa de marcat
9. User salveaza draft sau trimite pentru aprobare
```
## Criterii de Succes (Faza 1)
- [ ] Utilizator poate uploada poza bon + date de baza
- [ ] Sistem genereaza automat note contabile
- [ ] Contabil poate vedea, edita si aproba note
- [ ] Bonurile aprobate sunt vizibile in lista
- [ ] Migrarile Alembic functioneaza corect
- [ ] Poze bonuri se salveaza si se afiseaza corect
- [x] Utilizator poate uploada poza bon + date de baza
- [x] **OCR extrage automat date din poza bonului**
- [x] **Indicatori de incredere pentru date extrase**
- [x] Sistem genereaza automat note contabile
- [x] Contabil poate vedea, edita si aproba note
- [x] Bonurile aprobate sunt vizibile in lista
- [x] Migrarile Alembic functioneaza corect
- [x] Poze bonuri se salveaza si se afiseaza corect