Sistema enterprise per la simulazione e valutazione di gare d'appalto pubbliche multi-lotto. Calcola punteggi tecnici ed economici, esegue analisi Monte Carlo per probabilità di vittoria, e genera report PDF professionali.
| Funzionalità | Descrizione |
|---|---|
| Configurazione Multi-lotto | Gestione di più lotti di gara con requisiti e pesi differenti |
| Scoring Tecnico | Valutazione basata su criteri configurabili con pesi interni |
| Scoring Economico | Formula di interpolazione con esponente alpha progressivo |
| Monte Carlo Simulation | Analisi probabilità di vittoria con 500+ iterazioni |
| Discount Optimizer | Suggerisce lo sconto ottimale per massimizzare la probabilità di vittoria |
| Export PDF | Report professionali con grafici e analisi strategica |
| Autenticazione OIDC | Integrazione sicura con SAP Identity Authentication Service |
| Internazionalizzazione | Supporto lingua italiana (i18n) |
| Verifica Certificazioni OCR | Riconoscimento automatico certificazioni PDF con OCR |
simulator-poste/
├── backend/ # FastAPI Backend (Python 3.12+)
│ ├── main.py # Endpoint API e logica di business
│ ├── services/
│ │ ├── scoring_service.py # Calcolo punteggi (estratto per testabilità)
│ │ └── cert_verification_service.py # Verifica OCR certificazioni
│ ├── vendor_defaults.py # Configurazioni vendor centralizzate
│ ├── models.py # Modelli SQLAlchemy ORM
│ ├── schemas.py # Schemi Pydantic per validazione
│ ├── crud.py # Operazioni CRUD database
│ ├── auth.py # Middleware autenticazione OIDC
│ ├── database.py # Configurazione SQLite
│ ├── pdf_generator.py # Generatore report PDF
│ └── logging_config.py # Logging strutturato
│
├── frontend/ # React Frontend (Vite)
│ ├── src/
│ │ ├── App.jsx # Componente principale applicazione
│ │ ├── components/ # Componenti UI
│ │ │ ├── Dashboard.jsx # Gauge, grafici, analisi strategica
│ │ │ ├── ConfigPage.jsx # Configurazione lotti e requisiti
│ │ │ ├── TechEvaluator.jsx # Valutazione tecnica interattiva
│ │ │ ├── MasterDataConfig.jsx # Configurazione vendor OCR
│ │ │ ├── CertVerificationPage.jsx # Verifica certificazioni
│ │ │ └── Sidebar.jsx # Navigazione e controlli sconto
│ │ ├── features/
│ │ │ ├── config/ # Context configurazione
│ │ │ └── simulation/ # Context simulazione
│ │ ├── shared/ # Componenti condivisi (Gauge, Toast)
│ │ └── locales/ # File traduzioni (it.json)
│ └── package.json
│
├── k8s/ # Manifesti Kubernetes/Kyma
├── docs/ # Documentazione dettagliata
│ ├── api.md # Reference API completa
│ ├── user-guide.md # Guida utente
│ └── technical.md # Documentazione tecnica
│
├── docker-compose.yml # Deployment Docker locale
└── render.yaml # Configurazione Render.com
# Avvia frontend e backend con Docker
./start-all.sh
# Oppure con docker-compose direttamente
docker-compose up --buildServizi disponibili:
- Frontend:
http://localhost:5173 - Backend API:
http://localhost:8000 - API Docs (Swagger):
http://localhost:8000/docs
Backend:
cd backend
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
uvicorn main:app --reload --host 0.0.0.0 --port 8000Frontend:
cd frontend
npm install
npm run dev# Backend
ENVIRONMENT=development|staging|production
OIDC_ISSUER=https://your-ias.accounts.ondemand.com
OIDC_CLIENT_ID=your-client-id
OIDC_AUDIENCE=your-audience
FRONTEND_URL=http://localhost:5173
# Frontend (.env)
VITE_API_URL=/api
VITE_OIDC_ISSUER=...
VITE_OIDC_CLIENT_ID=...| Documento | Descrizione |
|---|---|
| API Reference | Documentazione completa di tutti gli endpoint REST |
| Guida Utente | Come utilizzare l'applicazione passo-passo |
| Documentazione Tecnica | Architettura, formule, schema database |
| Metodo | Endpoint | Descrizione |
|---|---|---|
| GET | /api/config |
Recupera tutte le configurazioni lotto |
| POST | /api/calculate |
Calcola punteggi tecnici ed economici |
| POST | /api/simulate |
Genera curva simulazione sconto |
| POST | /api/monte-carlo |
Esegue simulazione Monte Carlo |
| POST | /api/optimize-discount |
Trova lo sconto ottimale |
| POST | /api/export-pdf |
Genera report PDF |
| GET | /health |
Health check con stato database |
| POST | /api/verify-certificate |
Verifica singolo certificato PDF via OCR |
| POST | /api/verify-certificates |
Verifica batch certificati (SSE streaming) |
Punteggio Economico:
ratio = (P_base - P_offerto) / (P_base - P_migliore_effettivo)
Punteggio_Economico = Max_Econ × (ratio ^ alpha)
Punteggio Professionale (Certificazioni):
Punteggio = (2 × R) + (R × C)
Dove: R = risorse, C = certificazioni (C ≤ R)
# Test backend
cd backend
pip install -r requirements-test.txt
pytest test_main.py -v
# Test con coverage
pytest --cov=. --cov-report=html
# Test specifici
pytest test_main.py::TestEconomicScore -v
pytest test_main.py::TestProfScore -vTest Suite:
- 13 test unitari
- Coverage formule di scoring
- Test endpoint API
kubectl apply -f k8s/namespace.yaml
kubectl apply -f k8s/secrets.yaml # Da template
kubectl apply -f k8s/backend/
kubectl apply -f k8s/frontend/
kubectl apply -f k8s/apirule.yamlIl file render.yaml contiene la configurazione Blueprint per deployment automatico.
./start-prod.sh| Tecnologia | Versione | Scopo |
|---|---|---|
| FastAPI | 0.128.0 | Framework API REST |
| SQLAlchemy | 2.0.46 | ORM database |
| Pydantic | 2.12.5 | Validazione dati |
| NumPy | 2.2.6 | Calcoli numerici, Monte Carlo |
| ReportLab | 4.4.9 | Generazione PDF |
| python-jose | 3.3.0 | Validazione JWT |
| pytesseract | 0.3.13 | OCR per certificazioni |
| Tecnologia | Versione | Scopo |
|---|---|---|
| React | 19.2.0 | Framework UI |
| Vite | 7.2.4 | Build tool |
| Tailwind CSS | 4.1.18 | Styling |
| Recharts | 3.6.0 | Grafici |
| i18next | 25.7.4 | Internazionalizzazione |
| Axios | 1.13.2 | HTTP client |
- SQLite in sviluppo/staging
- Migrabile a PostgreSQL per produzione
| Metrica | Valore |
|---|---|
| RAM Backend | ~54MB |
| CPU Idle | <1% |
| API Response (p95) | <500ms |
| Frontend HMR | <100ms |
| Monte Carlo (500 iter) | <200ms |
Gabriele Rendina
Proprietario - Tutti i diritti riservati