docs: add all superpowers plans and specs
This commit is contained in:
175
docs/superpowers/specs/2026-03-20-anagrafica-redesign-design.md
Normal file
175
docs/superpowers/specs/2026-03-20-anagrafica-redesign-design.md
Normal file
@@ -0,0 +1,175 @@
|
||||
# Design Spec: Redesign Pagina 1 Report + Parametro Footer
|
||||
|
||||
**Data:** 2026-03-20
|
||||
**Progetto:** CertReports.Syncfusion
|
||||
**Scope:** `AnagraficaSectionRenderer.cs`, `ReportController.cs`, `PdfTheme.cs`, modelli dati
|
||||
|
||||
---
|
||||
|
||||
## Obiettivo
|
||||
|
||||
Ridisegnare la prima pagina del report PDF per renderla graficamente più professionale, riallineare i campi all'ordine del vecchio report DevExpress, e fare entrare la tabella Sottostanti nella prima pagina. Aggiungere inoltre un parametro API opzionale per abilitare/disabilitare il footer con branding Smart Roots.
|
||||
|
||||
---
|
||||
|
||||
## 1. Stile visivo (Opzione C — "Ibrido elegante")
|
||||
|
||||
Approvato dall'utente.
|
||||
|
||||
### Titolo pagina
|
||||
- Testo: `"Scheda Prodotto {ISIN}"` — grande, **blu** (`#1565C0`), font bold 17pt
|
||||
- Sottotitolo: `"Tipologia: {Categoria}"` — grigio, 9.5pt
|
||||
- Separatore: linea orizzontale blu `#1565C0` spessore 2.5pt sotto il titolo
|
||||
- **Bid/Ask in alto a destra** del titolo: data/ora piccola in grigio, Bid e Ask in blu bold 13pt
|
||||
|
||||
### Intestazioni di sezione
|
||||
- Niente header-bar scura (attuale). Sostituire con:
|
||||
`font bold 10.5pt colore #1565C0` + accent line verticale sinistra 3pt blu
|
||||
- Esempio: `"Caratteristiche Prodotto"`, `"Analisi"`, `"Sottostanti"`
|
||||
|
||||
### Tabelle dati emittente
|
||||
- Border 1px `#bbb`, border-radius 2px
|
||||
- Prima riga: header piena `#1565C0` bianco bold (es. `"EMITTENTE UBS"`)
|
||||
- Righe alternate: sfondo `#f9f9f9` / bianco
|
||||
- Bordi interni `#e5e5e5` 0.5pt
|
||||
|
||||
### KV pairs (sezione Analisi)
|
||||
- Label a sinistra in grigio `#555`, valore a destra bold
|
||||
- Separatori orizzontali `#e8e8e8` 0.3pt
|
||||
- Valori negativi in rosso `#CC0000`, valori chiave (cedola) in blu `#1565C0`
|
||||
|
||||
---
|
||||
|
||||
## 2. Struttura e ordine campi — Pagina 1
|
||||
|
||||
La prima pagina è divisa in **3 sezioni** verticali, tutte dentro una singola pagina A4.
|
||||
|
||||
### Sezione A — "Caratteristiche Prodotto"
|
||||
|
||||
Due colonne:
|
||||
|
||||
| Colonna sinistra (tabella con header) | Colonna destra (KV list) |
|
||||
|---------------------------------------|--------------------------|
|
||||
| EMITTENTE (header blu) | Importo Cedole Pagate |
|
||||
| ISIN | Importo Cedole da Pagare |
|
||||
| Mercato | Importo Cedole in Memoria |
|
||||
| Valuta | Rendimento Totale (rosso se negativo) |
|
||||
| Data Emissione | |
|
||||
| Data Scadenza | |
|
||||
| Prossimo Autocall | |
|
||||
|
||||
> La colonna destra non contiene più il box Bid/Ask separato: Bid/Ask sono già nel titolo pagina.
|
||||
|
||||
### Sezione B — "Analisi"
|
||||
|
||||
Due colonne KV:
|
||||
|
||||
| Colonna sinistra | Colonna destra |
|
||||
|------------------|----------------|
|
||||
| Importo Cedola (p.a.) | Rendimento Capitale a Scadenza |
|
||||
| Frequenza Cedola | IRR |
|
||||
| Valore Nominale | Protezione Capitale |
|
||||
| Prezzo Emissione | Protezione Coupon |
|
||||
| Barriera Capitale | Valore Autocall |
|
||||
| Tipo Barriera | Distanza Autocall |
|
||||
| Tipo Basket | Rendimento Autocall |
|
||||
| Leva | Fattore Airbag |
|
||||
| | Trigger OneStar |
|
||||
|
||||
> I campi vuoti (Leva, Fattore Airbag, Trigger OneStar) vengono mostrati con valore `"—"` invece di essere omessi, per mantenere la struttura fissa come nel vecchio report.
|
||||
|
||||
### Sezione C — "Sottostanti"
|
||||
|
||||
Tabella full-width con **9 colonne** (la colonna "Dist. AC" presente nel report attuale viene rimossa per consentire l'inserimento nella pagina 1):
|
||||
|
||||
| Nome | Strike | Last | % Perf. | Barr. Cap. | Buffer K | Trigger CPN | Buffer CPN | Trig. AC |
|
||||
|------|--------|------|---------|------------|----------|-------------|------------|----------|
|
||||
|
||||
- Header: sfondo `#1565C0`, testo bianco bold 7.5pt
|
||||
- Righe alternate: `#f7f9fc` / bianco
|
||||
- Valori performance negativi: rosso `#CC0000`; positivi: verde `#2E7D32`
|
||||
- Font celle sottostanti: 7.5pt (sia header che celle dati) — sovrascrive il valore generico `Small` 6.5pt di `PdfTheme`
|
||||
|
||||
---
|
||||
|
||||
## 3. Gestione spazio e pagina
|
||||
|
||||
Per fare entrare tutto in una pagina A4 (area utile ~757pt):
|
||||
|
||||
- Ridurre `PageMargin` da 40pt a 36pt
|
||||
- `RowHeight` per KV pairs: 14pt (attuale 18pt)
|
||||
- `RowHeight` per tabella sottostanti: 13pt
|
||||
- Usare font `Small` (6.5pt) per celle sottostanti, `SmallBold` per header
|
||||
- Nelle sezioni Analisi, saltare i campi null/vuoti **eccetto** questi tre che vengono sempre mostrati con `"—"`: `Leva`, `Fattore Airbag`, `Trigger OneStar` (sono visibili anche nel vecchio report anche quando vuoti)
|
||||
|
||||
Se la tabella Sottostanti non entra comunque (certificati con molti sottostanti), aggiungere una nuova pagina solo per essa — non alterare la struttura della pagina 1.
|
||||
|
||||
---
|
||||
|
||||
## 4. Parametro API footer
|
||||
|
||||
### Modifica API
|
||||
|
||||
Tutti gli endpoint di generazione report accettano un nuovo parametro query opzionale:
|
||||
|
||||
```
|
||||
GET /api/report/by-isin/{isin}?branding=true
|
||||
GET /api/report?p={encrypted}&branding=true
|
||||
GET /api/report?alias={id}&branding=true
|
||||
GET /api/report/download?p={encrypted}&branding=true
|
||||
```
|
||||
|
||||
Default: `branding=false` (nessuna modifica comportamentale agli URL esistenti).
|
||||
|
||||
### Comportamento footer
|
||||
|
||||
| `branding` | Footer |
|
||||
|------------|--------|
|
||||
| `false` (default) | Solo numero di pagina centrato, nessuna scritta |
|
||||
| `true` | `"Powered by [Smart Roots](https://www.smart-roots.net)"` a sinistra + numero pagina a destra. "Smart Roots" è un hyperlink PDF cliccabile che punta a `https://www.smart-roots.net` |
|
||||
|
||||
### Implementazione
|
||||
|
||||
- Aggiungere `bool ShowBranding` a un nuovo modello `ReportOptions` (o direttamente a `ReportRequest`)
|
||||
- `ReportController` legge `branding` dalla query string e lo passa a `ReportOrchestrator`
|
||||
- `ReportOrchestrator` passa `ShowBranding` ai renderer aggiungendo `bool ShowBranding` direttamente a `CertificateReportData` (evita di cambiare la firma di `IPdfSectionRenderer.Render`)
|
||||
- Ogni renderer (a partire da `AnagraficaSectionRenderer`) chiama un helper centralizzato `PdfTheme.DrawFooter(g, pageWidth, pageHeight, pageNumber, showBranding)`
|
||||
|
||||
### Footer layout
|
||||
|
||||
```
|
||||
[Solo numero pagina]
|
||||
────────────────────────────────────────────────
|
||||
1
|
||||
|
||||
[Con branding]
|
||||
────────────────────────────────────────────────
|
||||
Powered by [Smart Roots↗] Pagina 1
|
||||
↑ hyperlink → https://www.smart-roots.net
|
||||
```
|
||||
|
||||
- Linea separatrice: `#dddddd` 0.5pt
|
||||
- Testo branding: `"Powered by "` in `Small` 7pt grigio `#666`, seguito da `"Smart Roots"` come `PdfTextWebLink` blu `#1565C0` che punta a `https://www.smart-roots.net`
|
||||
- Numero pagina: `Small` 7pt grigio, allineato a destra
|
||||
|
||||
---
|
||||
|
||||
## 5. File modificati
|
||||
|
||||
| File | Modifica |
|
||||
|------|----------|
|
||||
| `AnagraficaSectionRenderer.cs` | Riscrivere completamente il metodo `Render()` con nuova struttura 3-sezioni |
|
||||
| `PdfTheme.cs` | Ridurre margini/row height, aggiungere `DrawFooter()`, aggiungere colori `AccentBlue`, `NegativeRed`, `PositiveGreen` |
|
||||
| `ReportController.cs` | Leggere parametro `branding` da query string |
|
||||
| `CertificateReportData.cs` (o nuovo `ReportOptions.cs`) | Aggiungere `bool ShowBranding` |
|
||||
| `ReportOrchestrator.cs` | Propagare `ShowBranding` ai renderer |
|
||||
| `IServices.cs` | Aggiornare firma `Render()` se necessario |
|
||||
|
||||
---
|
||||
|
||||
## 6. Fuori scope
|
||||
|
||||
- Nessuna modifica alle altre sezioni (Eventi, Scenario, Grafico)
|
||||
- Nessuna modifica alle stored procedure
|
||||
- Nessuna modifica al `ChartController`
|
||||
- Nessuna aggiunta di nuovi campi al modello `CertificateInfo` — si usano i campi già esistenti riorganizzati
|
||||
Reference in New Issue
Block a user