# ROA Reports Backend API

FastAPI backend pentru aplicația de rapoarte ROA2WEB.

## 🚀 Funcționalități

### 📊 API Endpoints Implementate

#### Authentication (`/auth`)
- `POST /auth/login` - Autentificare utilizator
- `POST /auth/logout` - Deconectare utilizator
- `GET /auth/me` - Informații utilizator curent
- `GET /auth/validate` - Validare token JWT

#### Companies (`/companies`)
- `GET /companies/` - Lista firmelor utilizatorului
- `GET /companies/{company_code}` - Detalii firmă
- `GET /companies/{company_code}/validate` - Validare acces firmă

#### Invoices (`/invoices`)
- `GET /invoices/` - Lista facturi cu filtrare și paginare
- `GET /invoices/summary` - Rezumat facturi pentru dashboard
- `GET /invoices/{invoice_number}` - Detalii factură specifică
- `GET /invoices/export/{format}` - Export facturi (planned)

#### Payments (`/payments`)
- `GET /payments/` - Lista încasări/plăți cu filtrare și paginare
- `GET /payments/summary` - Rezumat încasări pentru dashboard
- `GET /payments/{payment_number}` - Detalii încasare specifică
- `POST /payments/` - Creare încasare nouă (planned)
- `PUT /payments/{payment_number}` - Actualizare încasare (planned)
- `GET /payments/export/{format}` - Export încasări (planned)

#### Health Check
- `GET /` - Status API
- `GET /health` - Health check complet cu database

## 🏗️ Arhitectură

### Shared Components Integration
- **Database Pool**: Folosește `roa2web/shared/database/oracle_pool.py`
- **JWT Authentication**: Folosește `roa2web/shared/auth/` pentru validare token-uri
- **Middleware**: Authentication middleware cu rate limiting

### Structură Aplicație
```
app/
├── main.py                 # FastAPI entry point
├── models/                 # Pydantic models
│   ├── invoice.py          # Modele pentru facturi
│   └── payment.py          # Modele pentru încasări
├── routers/                # API endpoints
│   ├── auth.py             # Authentication endpoints
│   ├── companies.py        # Companies management
│   ├── invoices.py         # Invoices API
│   └── payments.py         # Payments API
├── services/               # Business logic
│   ├── invoice_service.py  # Serviciu facturi cu Oracle queries
│   └── payment_service.py  # Serviciu încasări cu Oracle queries
└── schemas/                # Response schemas (reserved)
```

## 🔧 Instalare și Rulare

### Development Local

1. **Install dependencies**:
```bash
pip install -r requirements.txt
```

2. **Environment Variables**:
```bash
cp .env.example .env
# Editează .env cu configurările tale
```

3. **Run development server**:
```bash
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
```

4. **Access API**:
- API: http://localhost:8000
- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc

### Docker

```bash
# Build image
docker build -t roa-reports-backend .

# Run container
docker run -p 8000:8000 --env-file .env roa-reports-backend
```

## 📝 Configurație

### 🔐 Oracle Database Setup

**IMPORTANT**: Conectare la schema **CONTAFIN_ORACLE** pentru authentication!

#### Arhitectura Bazei de Date
- **Schema CONTAFIN_ORACLE**: Conține utilizatorii și procedura `pack_drepturi.verificautilizator`
- **Scheme separate pentru firme**: Fiecare firmă are propria schemă cu date (ROMFAST, EUROLEVIS, etc.)

#### Flow-ul de Autentificare
1. **Conectare**: La schema `CONTAFIN_ORACLE`
2. **Verificare**: User/pass prin `pack_drepturi.verificautilizator(username, password)`
3. **Drepturi**: Citire firme din `vdef_util_grup WHERE id_util = user_id`
4. **Selecție**: User selectează firma/schema pentru acces la date

### Environment Variables

```bash
# Oracle Database (prin SSH tunnel)
ORACLE_USER=CONTAFIN_ORACLE
ORACLE_PASSWORD=your_oracle_password
ORACLE_HOST=localhost
ORACLE_PORT=1521
ORACLE_SID=ROA

# SSH Tunnel Setup Required:
# ./ssh_tunnel.sh start
# Server: 83.103.197.79:22122 -> 10.0.20.36:1521

# Test User Credentials (pentru dezvoltare):
# Username: "MARIUS M" (cu spațiu în nume!)
# Password: "PAROLA81"
# Are acces la 66+ firme/scheme Oracle

# JWT Settings
JWT_SECRET_KEY=your-secret-key
ACCESS_TOKEN_EXPIRE_MINUTES=30

# API Settings
API_HOST=0.0.0.0
API_PORT=8000
DEBUG=True

# CORS
FRONTEND_URLS=http://localhost:3000,http://localhost:5173
```

## 🔐 Autentificare

API-ul folosește JWT Bearer tokens pentru autentificare:

1. **Login**: `POST /auth/login` cu username/password
2. **Token Usage**: Include `Authorization: Bearer <token>` în header
3. **Company Access**: Fiecare request verifică dacă utilizatorul are acces la firma specificată

## 📊 Models și Filtrare

### Invoice Filter Parameters
- `company`: Codul firmei (obligatoriu)
- `partner_type`: CLIENTI sau FURNIZORI
- `date_from`, `date_to`: Filtrare după dată
- `partner_name`: Filtrare după numele partenerului
- `only_unpaid`: Doar facturile neachitate
- `min_amount`, `max_amount`: Filtrare după sumă
- `page`, `page_size`: Paginare

### Response Models
- **InvoiceListResponse**: Lista paginată cu metadata
- **InvoiceSummary**: Statistici pentru dashboard
- **PaymentListResponse**: Lista încasări cu metadata
- **PaymentSummary**: Statistici încasări

## 🚀 Următorii Pași

1. **Export Functionality**: Implementare export Excel, PDF, CSV
2. **CRUD Operations**: Operațiuni complete pentru încasări
3. **Advanced Filtering**: Filtre avansate și sortare
4. **Caching**: Redis cache pentru performance
5. **Rate Limiting**: Advanced rate limiting
6. **Audit Logging**: Logging complet pentru operațiuni

## 🧪 Testing

```bash
# Unit tests (când vor fi implementate)
pytest tests/ -v

# Health check manual
curl http://localhost:8000/health

# API testing
# Vezi documentația Swagger la /docs pentru toate endpoint-urile
```

## 📚 Compatibilitate

API-ul este compatibil 100% cu query-urile și datele din aplicația Flask existentă:
- Stesso schema de date Oracle
- Aceleași view-uri (`vireg_parteneri`)
- Aceleași calcule pentru statusul facturilor
- Aceleași validări pentru acces utilizatori

---

**Status**: ✅ COMPLET - Ready for Frontend Integration
**Next Phase**: Frontend Vue.js Development