docs: update README with fund/ETF report feature (endpoints, layout, architecture)

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-08 18:19:22 +02:00
parent 9a73ae9a1b
commit 9d8acbae6b

View File

@@ -5,12 +5,13 @@ Generatore di report PDF per certificati finanziari strutturati, sviluppato in A
## Caratteristiche principali
- Generazione PDF multi-sezione da dati SQL Server
- **Due template report**: certificati in quotazione (4 sezioni) e certificati non in quotazione / scaduti / rimborsati / revocati (3 sezioni) — rilevamento automatico dal campo `Stato`
- **Pagina dividendi opzionale** (`?dividend=true`): pagina landscape con tabella Sottostanti+Dividendi a header raggruppati (SOTTOSTANTE / BARRIERE / DIVIDENDI), inserita dopo la Sezione 1
- **Due template report certificati**: in quotazione (4 sezioni) e non in quotazione / scaduti / rimborsati / revocati (3 sezioni) — rilevamento automatico dal campo `Stato`
- **Report ETF/Fondi**: 2 pagine — anagrafica con layout a 3 colonne (Dati Anagrafici, ESG Score, griglia Performance/Volatilità/RendRisk) + grafico storico prezzi
- **Pagina dividendi opzionale** (`?dividend=true`): pagina landscape con tabella Sottostanti+Dividendi a header raggruppati
- Grafico performance sottostanti (SkiaSharp → PNG in memoria)
- Footer con branding opzionale e hyperlink cliccabile
- Cache in memoria per ISIN già generati (chiavi separate per ogni combinazione di flag: suffissi `:branded`, `:dividend`, `:natixis` concatenati)
- Endpoint per PDF inline, download, grafico standalone v1 e **grafico V2 con multi-formato e salvataggio su disco**
- Cache in memoria per ISIN già generati (chiavi separate per ogni combinazione di flag)
- Endpoint per PDF inline, download, grafico standalone v1, grafico V2 multi-formato e **grafico fondi**
- Supporto Docker
## Stack tecnologico
@@ -46,8 +47,18 @@ Generatore di report PDF per certificati finanziari strutturati, sviluppato in A
Il tipo di report viene selezionato automaticamente dall'orchestratore in base al campo `Stato` restituito dalla SP `rpt_Master_CFT_ISIN`.
### Report ETF/Fondi — 2 pagine
| Pagina | Contenuto |
|--------|-----------|
| **1 — Anagrafica** | Title bar con Tipo/Nome/ISIN; strip Rank+Prezzo+Data; 3 colonne: **Dati Anagrafici** (Società, Categoria MS, Valuta, Hedged, Benchmark, Spese, Catalogo, Proventi, Data lancio, Patrimonio) · **ESG Score** (Sustainability, Environmental, Social, Governance) · **Griglia Performance/Volatilità/RendRisk** (3M, 6M, YTD, 1Y, 3Y, 5Y) |
| **2 — Grafico** | Storico prezzi close (linea singola, SkiaSharp), asse X con intervalli mensili adattivi |
SP: `sfih_GetOptDettagli` (anagrafica) · `sfih_GetChartPrices` (prezzi storici).
## API Endpoints
**Certificati:**
```
GET /api/report/by-isin/{ISIN} → PDF inline
GET /api/report?p={isin_cifrato} → PDF inline (ISIN cifrato)
@@ -56,10 +67,23 @@ GET /api/report/download?p={...} → PDF come allegato
GET /api/chart/{isin} → Grafico standalone v1 (PNG/PDF)
GET /api/chart/v2/{isin} → Grafico standalone v2 (multi-formato, vedi sotto)
```
**ETF/Fondi:**
```
GET /api/report/fund/by-isin/{ISIN} → PDF inline
GET /api/report/fund?p={isin_cifrato} → PDF inline (ISIN cifrato)
GET /api/report/fund?alias={id} → PDF inline (alias)
GET /api/report/fund/download?p={...} → PDF come allegato
GET /api/chart/fund/{isin} → Grafico storico prezzi (PNG/JPEG/PDF)
```
```
GET /health → Health check DB + chart service
```
Parametri opzionali accettati da tutti gli endpoint report:
Parametri opzionali accettati da tutti gli endpoint report certificati:
| Parametro | Default | Effetto |
|-----------|---------|---------|
@@ -69,6 +93,23 @@ Parametri opzionali accettati da tutti gli endpoint report:
I parametri sono combinabili, es. `?branding=true&dividend=true&natixis=true`.
Parametri opzionali accettati dagli endpoint report **ETF/Fondi**:
| Parametro | Default | Effetto |
|-----------|---------|---------|
| `?branding=true` | `false` | Aggiunge footer "Powered by Smart Roots" con hyperlink |
### Grafico Fondi — parametri
```
GET /api/chart/fund/{isin}[?format=png|jpg|jpeg|pdf&width=&height=&save=true]
```
| Parametro | Valori | Effetto |
|-----------|--------|---------|
| `?format=` | `png` (default), `jpg`/`jpeg`, `pdf` | Formato output |
| `?save=true` | — | Salva JPEG su disco (`ChartSettings:SavePath/{isin}_fund.jpg`) — solo per `jpg`/`jpeg` |
### Grafico V2 — parametri
```
@@ -161,6 +202,19 @@ HTTP (ISIN) → ReportController → ReportOrchestrator
HTTP (ISIN) → ChartController → /api/chart/v2/{isin}
├── ChartDataServiceV2 (cedlab_Chart_UL1 + cedlab_Chart_AllSeriesV2)
└── SkiaChartRendererV2 → PNG/JPEG/PDF → Response (+ salvataggio disco se ?save=true)
HTTP (ISIN) → FundReportController → /api/report/fund/
├── FundDataService (sfih_GetOptDettagli + sfih_GetChartPrices)
├── FundReportOrchestrator
│ ├── FundAnagraficaRenderer → PdfDocument (Pagina 1: layout C)
│ ├── FundChartSectionRenderer → PdfDocument (Pagina 2: grafico landscape)
│ │ └── FundSkiaChartRenderer [static] → PNG in memoria
│ └── PdfMergerService → byte[] → Response
└── PdfCacheService (chiave fund:{isin}[:branded])
HTTP (ISIN) → FundChartController → /api/chart/fund/{isin}
├── FundDataService (sfih_GetOptDettagli + sfih_GetChartPrices, in parallelo)
└── FundSkiaChartRenderer [static] → PNG/JPEG/PDF → Response (+ salvataggio disco se ?save=true)
```
---