SmartRootsSrl 49014c1544 feat: move Barriera/Rimborso Capitale from eventi table to anagrafica analisi
Expired certificate report: removed 'Barriera Capitale' and 'Rimborso Capitale'
columns from the eventi table (9 columns now). Added the same two fields to
the Analisi section on page 1, mapped from LivelloBarriera and CapitalValue.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 11:04:43 +01:00
2026-03-20 17:40:06 +01:00

SmartReports

Generatore di report PDF per certificati finanziari strutturati, sviluppato in ASP.NET Core 8 con libreria Syncfusion PDF (Community License) e SkiaSharp per i grafici.

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
  • 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)
  • Endpoint per PDF inline, download e grafico standalone
  • Supporto Docker

Stack tecnologico

Componente Tecnologia
Framework ASP.NET Core 8
PDF Syncfusion PDF v33 (Community License)
Grafici SkiaSharp
Database SQL Server (Microsoft.Data.SqlClient v5)
Runtime .NET 8

Struttura del report

Certificati in quotazione (Stato = "Quotazione") — 4 sezioni

Sezione Contenuto
1 — Anagrafica Header con Tipologia / Data / Bid / Ask, caratteristiche prodotto, analisi KV, tabella sottostanti
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

Sezione Contenuto
1 — Anagrafica (semplificata) Header con solo Tipologia, caratteristiche con Valore/Data Rimborso, analisi KV, tabella sottostanti (9 colonne, senza Bid/Ask)
2 — Eventi Lista eventi con colonne adattate (Barriera Cedola, Soglia Rimborso, Barriera Capitale, Rimborso Capitale)
3 — Grafico Performance storica dei sottostanti

Il tipo di report viene selezionato automaticamente dall'orchestratore in base al campo Stato restituito dalla SP rpt_Master_CFT_ISIN.

API Endpoints

GET /api/report/by-isin/{ISIN}          → PDF inline
GET /api/report?p={isin_cifrato}        → PDF inline (ISIN cifrato)
GET /api/report?alias={id}             → PDF inline (alias)
GET /api/report/download?p={...}       → PDF come allegato

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".

Avvio locale

# Restore e build
dotnet restore
dotnet build

# Run
dotnet run --project CertReports.Syncfusion
# → https://localhost:{porta}/api/report/by-isin/{ISIN}

Avvio con Docker

docker-compose up --build
# → http://localhost:5080/api/report/by-isin/{ISIN}

Configurazione

File Scopo
appsettings.json Connection string (CertDb), Syncfusion license key, CryptoSettings passphrase, cache TTL
appsettings.Development.json Override per sviluppo locale (non deve contenere ConnectionStrings)

Connection string SQL Server:

"ConnectionStrings": {
  "CertDb": "Data Source=tcp:IP;Initial Catalog=FirstSolutionDB;User Id=...;Password=...;Encrypt=False;"
}

Aggiungere una nuova sezione PDF

  1. Implementare IPdfSectionRenderer
  2. Impostare SectionName e Order
  3. Registrare in Program.cs:
    builder.Services.AddScoped<IPdfSectionRenderer, NuovaSezione>();
    

L'orchestratore la include automaticamente ordinandola per Order.

Tema grafico

Tutto il tema (colori, font, layout, brush/pen) è centralizzato in CertReports.Syncfusion/Helpers/PdfTheme.cs.

Colore Hex Utilizzo
AccentBlue #1565C0 Titoli, header tabelle, valori chiave
NegativeRed #CC0000 Valori negativi
PositiveGreen #2E7D32 Valori positivi

Architettura

HTTP (ISIN) → ReportController → ReportOrchestrator
    ├── CertificateDataService   (SP → anagrafica, sottostanti, eventi, scenario)
    │
    ├── [Stato == "Quotazione"] ──────────────────────────────────────────
    │   ├── AnagraficaSectionRenderer       → PdfDocument (Sezione 1)
    │   ├── EventiSectionRenderer           → PdfDocument (Sezione 2)
    │   ├── ScenarioSectionRenderer         → PdfDocument (Sezione 3, opzionale)
    │   └── ChartSectionRenderer            → PdfDocument (Sezione 4)
    │
    ├── [Stato != "Quotazione"] ─────────────────────────────────────────
    │   ├── ExpiredAnagraficaSectionRenderer → PdfDocument (Sezione 1)
    │   ├── EventiSectionRenderer            → PdfDocument (Sezione 2, colonne adattate)
    │   └── ChartSectionRenderer             → PdfDocument (Sezione 3)
    │
    ├── ChartDataService           (SP → dati grafico)
    ├── SkiaChartRenderer          → PNG in memoria
    └── PdfMergerService           → byte[] → Response

Sviluppato da Smart Roots

Description
No description provided
Readme 338 KiB
Languages
C# 99.3%
Dockerfile 0.7%