Commit Graph

121 Commits

Author SHA1 Message Date
9a73ae9a1b fix: negative perf color, parallel SP calls in chart controller, sort comment 2026-06-08 18:01:20 +02:00
201b3b39c4 feat: register fund report services in DI (Program.cs) 2026-06-08 17:57:10 +02:00
3e6c5c6dff feat: add FundChartController (/api/chart/fund/{isin})
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-06-08 17:54:45 +02:00
14bc7f772b refactor: extract ResolveIsinAsync helper in FundReportController 2026-06-08 17:53:18 +02:00
b3024f953d feat: add FundReportController (4 endpoint /api/report/fund/) 2026-06-08 17:51:52 +02:00
461cffa442 feat: add FundReportOrchestrator (anagrafica + chart + merge + cache) 2026-06-08 17:49:59 +02:00
5347424e42 feat: add FundChartSectionRenderer (chart PNG wrapped as PDF landscape page) 2026-06-08 17:47:21 +02:00
d26ca9f7bd fix: correct Y-grid to 5 lines, add defensive date sort in GetChartPricesAsync 2026-06-08 17:46:26 +02:00
7dbcb8ab16 feat: add FundSkiaChartRenderer (SkiaSharp price line chart)
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-06-08 17:44:50 +02:00
8e6341d980 feat: add FundAnagraficaRenderer (layout C: title strip + 3 columns)
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-06-08 17:41:48 +02:00
d3c5395c58 fix: add error handling to FindIsinByAliasIdAsync, use NullIfEmpty 2026-06-08 17:39:02 +02:00
bbb7e4207a feat: add FundDataService (sfih_GetOptDettagli + sfih_GetChartPrices) 2026-06-08 17:37:26 +02:00
fa1fc94fd8 feat: add IFundDataService, IFundReportOrchestrator interfaces 2026-06-08 17:35:59 +02:00
8d9f9272f1 style: use string.Empty convention, add SP comments to FundModels 2026-06-08 17:35:25 +02:00
7331142a36 feat: add FundInfo, FundReportData, FundChartPoint models
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-06-08 17:33:31 +02:00
d90212c206 docs: add fund report implementation plan (10 tasks, FundAnagraficaRenderer + FundSkiaChartRenderer + orchestrator)
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-06-08 17:29:41 +02:00
f1825a1b13 docs: add sfih_GetChartPrices SP details to fund report spec
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-06-08 17:20:43 +02:00
86c8c8b3f3 docs: add fund/ETF report design spec (layout C, endpoints, models)
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-06-08 17:10:47 +02:00
457800160e docs: update README with chart v2, natixis param, and latest features
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-06-08 16:10:51 +02:00
c655cdd31e fix: null-safe string reader, chart V2 label collision avoidance
- ChartDataServiceV2: aggiunto helper ToStr() per GetString null-safe su
  colonne nullable (Sottostante, NomeCFT); pattern analogo a ToDecimal
- SkiaChartRendererV2: collision avoidance label margine destro — tutti i
  label (barriere, strike, autocall, end-label serie) raccolti in lista,
  ordinati per Y e distribuiti con spacing minimo 13px (push-down +
  clamp-up) prima del disegno
- CLAUDE.md: documentati i due fix e la root cause cedlab_Chart_UL1
  divide-by-zero su Strike=0 (fix DB: NULLIF(cu.Strike,0))

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-29 10:27:44 +02:00
bb86c6ac20 feat: add Direzione, RendimentoPotenziale, CategoryID to Analisi section
- Sezione Analisi sinistra: aggiunto campo Direzione (dopo Tipo Basket)
- Sezione Analisi destra: aggiunto Rend. Potenziale a Scadenza (dopo Rend. Capitale a Scadenza)
- Rend. Capitale a Scadenza nascosto per CategoryID 1 (Bonus) e 4 (Step Up)
- Aggiunto CategoryID (int) e RendimentoPotenziale (string) a CertificateInfo
- Letti da SP rpt_Master_CFT_ISIN

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-28 17:08:55 +02:00
3c99159bd1 docs: update CLAUDE.md — chart v2 new colors and dual-path save behavior
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-28 14:41:22 +02:00
03dad27414 feat: dual-path save for format=jpg/jpeg with ?save=true
When format=jpg/jpeg and save=true, the chart is now saved to both:
- SavePath/{isin}.jpg  (visible filename)
- SavePathEnc/{alias}.jpg  (encoded filename, if alias exists)

This allows the external script to call the API once instead of twice
(no more separate jpg + jpgEnc calls). format=jpgEnc remains unchanged
for backward compatibility.

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-28 12:37:41 +02:00
52bda26a4b fix: calculate current price for non-WorstOf end labels from series data
PriceWorst is only populated by the SP for the WorstOf underlying.
For others, derive current price as (last Performance% / 100) * Strike.

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-28 11:16:46 +02:00
6454420230 feat: add price value to non-WorstOf underlyings end labels
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-28 11:13:56 +02:00
5579915fbc feat: restyle chart v2 colors, end labels and legend
- CTF line: black instead of red
- WorstOf line: red + end label shows "Name (value)" format
- Other underlyings: vivid palette (teal/amber/purple/sky/indigo/orange) instead of grey shades; end label shows name
- Barriera Capitale: brown to avoid confusion with WorstOf red
- PrezzoWorst dashed line: red aligned with WorstOf
- Legend font increased 10→12px
- Legend entry for WorstOf shows "Name (Worst Of)"

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-28 11:10:43 +02:00
336e0eb3b8 chore: remove obsolete ChartServiceHealthCheck and ChartService config (chart now generated internally) 2026-05-27 18:51:27 +02:00
30d33a147a docs: document ?save=true parameter and ChartSettings paths in CLAUDE.md 2026-05-27 18:46:51 +02:00
4611f3c376 feat: add ?save=true param to chart v2 — saves JPEG to disk (ChartSettings paths in appsettings) 2026-05-27 18:45:39 +02:00
1b4e8c2096 docs: update CLAUDE.md with all chart v2 formats (jpg, jpeg, jpgEnc, pdf) and renderer notes 2026-05-27 18:41:14 +02:00
c350b7d3b5 feat: add format=jpgEnc support (filename from rpt_CertificatesChartsAlias SP) 2026-05-27 18:38:52 +02:00
d60296aebd fix: X-axis dates now use month-based intervals (fixes missing dates for short/long date ranges) 2026-05-27 18:24:39 +02:00
a848d21519 fix: hide CTF series when NumPrezziCFT < 30 (same behavior as old DevExpress) 2026-05-27 18:19:19 +02:00
f9a7d7a8d2 feat: add JPEG support to /api/chart/v2 (?format=jpg|jpeg) 2026-05-27 18:06:34 +02:00
9ac3610064 docs: update CLAUDE.md with chart v2 endpoint, SP schema, SKFont gotcha, ToDecimal gotcha 2026-05-27 17:57:16 +02:00
0dd74b0d59 fix: use ToDecimal helper for float/decimal compatibility in cedlab_Chart_UL1 reader (PriceWorst, PriceWorstPerc are float) 2026-05-27 17:37:38 +02:00
679f9e4528 fix: rewrite cedlab_Chart_AllSeriesV2 with correct schema from cedlab_Chart_UL1 (CertificatesUnderlyings.Strike, StartDate=MIN(Prices.Px_date), deleted/sospeso filters) 2026-05-27 17:17:32 +02:00
e4728cf79e fix: revert to cedlab_Chart_UL1 (already has all V2 fields); remove cedlab_Chart_UL2; fix AllSeriesV2 SQL with DailyUL1 logic 2026-05-27 16:35:48 +02:00
a866a2f7d5 fix: use cedlab_Chart_UL2 (new SP, don't modify UL1); add correct SQL scripts with Prices table 2026-05-27 16:28:26 +02:00
44e2098584 feat: add /api/chart/v2/{isin} endpoint and register IChartDataServiceV2
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-27 15:54:23 +02:00
0caccc72d5 feat: add SkiaChartRendererV2 (title, colored series, line labels, bottom legend) 2026-05-27 15:50:05 +02:00
494443ede3 feat: add ChartDataServiceV2 with IChartDataServiceV2 (2-SP approach) 2026-05-27 15:45:15 +02:00
5d67ae3463 feat: add ChartModelsV2 (ChartUlMetadata, ChartSeriesPoint, ChartDataV2) 2026-05-27 15:42:38 +02:00
704d634940 chore: ignore .worktrees/ directory 2026-05-27 15:41:08 +02:00
a3f6d6000c fix: fallback to Categoria when natixis=true but Nome is empty 2026-03-26 14:06:25 +01:00
86bb25ef1e docs: update CLAUDE.md with Memoria field, natixis param, and query params reference table 2026-03-26 12:59:38 +01:00
79b02b39b6 fix: align Memoria em-dash fallback with AnagraficaSectionRenderer 2026-03-26 12:55:40 +01:00
7a3a8114bd feat: rename Memoria Cedola and add natixis support to ExpiredAnagraficaSectionRenderer
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 12:52:48 +01:00
716f191fc5 feat: add Memoria field to Analisi and natixis support to AnagraficaSectionRenderer
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 12:48:51 +01:00
7595530490 feat: propagate showNatixis through orchestrator and cache keys
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 12:46:18 +01:00