docs: update README and DOCS with ?dividend=true feature

- Document ?dividend=true parameter in all report endpoints
- Add DividendSectionRenderer to architecture diagrams and file structure
- Update Struttura del report sections (Sezione 1b optional)
- Document 4-key cache combinations (base/branded/dividend/branded+dividend)
- Add 2026-03-23 changelog entries in DOCS.md

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-23 17:38:48 +01:00
parent b3cf03e3d4
commit 8c3a900a9c
2 changed files with 50 additions and 17 deletions

View File

@@ -6,9 +6,10 @@ Generatore di report PDF per certificati finanziari strutturati, sviluppato in A
- 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
- Grafico performance sottostanti (SkiaSharp → PNG in memoria)
- Footer con branding opzionale e hyperlink cliccabile
- Cache in memoria per ISIN già generati (chiavi separate per tipo report e branding)
- Cache in memoria per ISIN già generati (4 chiavi separate: base, branded, dividend, branded+dividend)
- Endpoint per PDF inline, download e grafico standalone
- Supporto Docker
@@ -24,20 +25,22 @@ Generatore di report PDF per certificati finanziari strutturati, sviluppato in A
## Struttura del report
### Certificati in quotazione (Stato = "Quotazione") — 4 sezioni
### Certificati in quotazione (Stato = "Quotazione") — 4 sezioni (+1 opzionale)
| Sezione | Contenuto |
|---------|-----------|
| **1 — Anagrafica** | Header con Tipologia / Data / Bid / Ask, caratteristiche prodotto, analisi KV, tabella sottostanti |
| **1 — Anagrafica** | Header con Tipologia / Data / Bid / Ask, caratteristiche prodotto, analisi KV, tabella sottostanti (omessa se `?dividend=true`) |
| **1b — Sottostanti e Dividendi** *(opzionale, `?dividend=true`)* | Pagina landscape: tabella unificata con colonne SOTTOSTANTE / BARRIERE / DIVIDENDI a 2 livelli di header |
| **2 — Eventi** | Lista eventi cedole e autocall (tabella landscape multi-pagina) |
| **3 — Scenario** | Scenari di rendimento (opzionale, saltato se assente) |
| **4 — Grafico** | Performance storica dei sottostanti |
### Certificati non in quotazione (Stato = "Scaduto" / "Rimborsato" / "Revocato") — 3 sezioni
### Certificati non in quotazione (Stato = "Scaduto" / "Rimborsato" / "Revocato") — 3 sezioni (+1 opzionale)
| Sezione | Contenuto |
|---------|-----------|
| **1 — Anagrafica (semplificata)** | Header con solo Tipologia, caratteristiche con Valore/Data Rimborso, analisi KV, tabella sottostanti (9 colonne, senza Bid/Ask) |
| **1 — Anagrafica (semplificata)** | Header con solo Tipologia, caratteristiche con Valore/Data Rimborso, analisi KV, tabella sottostanti (omessa se `?dividend=true`) |
| **1b — Sottostanti e Dividendi** *(opzionale, `?dividend=true`)* | Pagina landscape: tabella unificata con colonne SOTTOSTANTE / BARRIERE / DIVIDENDI a 2 livelli di header |
| **2 — Eventi** | Lista eventi con colonne adattate (Barriera Cedola, Soglia Rimborso, Barriera Capitale, Rimborso Capitale) |
| **3 — Grafico** | Performance storica dei sottostanti |
@@ -55,7 +58,14 @@ GET /api/chart/{isin} → Grafico standalone (PNG/PDF)
GET /health → Health check DB + chart service
```
Tutti gli endpoint report accettano `?branding=true` per aggiungere il footer "Powered by Smart Roots".
Parametri opzionali accettati da tutti gli endpoint report:
| Parametro | Default | Effetto |
|-----------|---------|---------|
| `?branding=true` | `false` | Aggiunge footer "Powered by Smart Roots" con hyperlink |
| `?dividend=true` | `false` | Inserisce pagina landscape Sottostanti+Dividendi dopo la Sezione 1; omette la tabella sottostanti dalla Sezione 1 |
I due parametri sono combinabili: `?branding=true&dividend=true`.
## Avvio locale
@@ -117,13 +127,15 @@ HTTP (ISIN) → ReportController → ReportOrchestrator
├── CertificateDataService (SP → anagrafica, sottostanti, eventi, scenario)
├── [Stato == "Quotazione"] ──────────────────────────────────────────
│ ├── AnagraficaSectionRenderer → PdfDocument (Sezione 1)
│ ├── AnagraficaSectionRenderer → PdfDocument (Sezione 1, senza tabella sottostanti se dividend=true)
│ ├── DividendSectionRenderer → PdfDocument (Sezione 1b, solo se ?dividend=true, landscape)
│ ├── EventiSectionRenderer → PdfDocument (Sezione 2)
│ ├── ScenarioSectionRenderer → PdfDocument (Sezione 3, opzionale)
│ └── ChartSectionRenderer → PdfDocument (Sezione 4)
├── [Stato != "Quotazione"] ─────────────────────────────────────────
│ ├── ExpiredAnagraficaSectionRenderer → PdfDocument (Sezione 1)
│ ├── ExpiredAnagraficaSectionRenderer → PdfDocument (Sezione 1, senza tabella sottostanti se dividend=true)
│ ├── DividendSectionRenderer → PdfDocument (Sezione 1b, solo se ?dividend=true, landscape)
│ ├── EventiSectionRenderer → PdfDocument (Sezione 2, colonne adattate)
│ └── ChartSectionRenderer → PdfDocument (Sezione 3)