Cayaqui.MPS.PptExport
0.5.1
dotnet add package Cayaqui.MPS.PptExport --version 0.5.1
NuGet\Install-Package Cayaqui.MPS.PptExport -Version 0.5.1
<PackageReference Include="Cayaqui.MPS.PptExport" Version="0.5.1" />
<PackageVersion Include="Cayaqui.MPS.PptExport" Version="0.5.1" />
<PackageReference Include="Cayaqui.MPS.PptExport" />
paket add Cayaqui.MPS.PptExport --version 0.5.1
#r "nuget: Cayaqui.MPS.PptExport, 0.5.1"
#:package Cayaqui.MPS.PptExport@0.5.1
#addin nuget:?package=Cayaqui.MPS.PptExport&version=0.5.1
#tool nuget:?package=Cayaqui.MPS.PptExport&version=0.5.1
Cayaqui.MPS.PptExport
Genera slides PowerPoint para reportes EVM programáticamente, usando Syncfusion.Presentation. Cada sección implementa IPptSlideSection y agrega uno o más slides a un IPresentation existente.
Distribución propietaria — requiere contrato comercial con Cayaqui. Ver
LICENSE.txt.
Dependencias:
Cayaqui.MPS.ReportModels(DTOs y paleta MPS) + licencia Syncfusion Presentation.
v0.5.0 — CoverSlide: portada corporativa fullscreen
Nueva sección CoverSlide que genera una portada profesional de pantalla completa (720×540 pt) sobre fondo primario oscuro. Diseño: barra superior amber → logos owner (izq) + MPS producto (der) → título / proyecto / fecha → logo Cayaqui footer.
Se activa con PptReportOptions.Logos (nuevo en esta versión):
var logos = new LogoOptions
{
OwnerLogo = new BytesLogo { Bytes = ownerLogoBytes },
MpsLogo = new BytesLogo { Bytes = mpsProductLogoBytes },
MpsCompanyLogo = new BytesLogo { Bytes = cayaquiLogoBytes }
};
var opts = new PptReportOptions { Theme = theme, Logos = logos };
await new PptReport()
.AddCoverSlide() // portada corporativa
.AddEvmKpiStrip(kpis)
.BuildAsync(stream, opts, ct);
v0.4.0 — ReportTheme integrado en PptReportOptions
PptReportOptions ahora expone Theme (tipo ReportTheme de Cayaqui.MPS.ReportModels). Permite compartir el mismo objeto de branding entre los tres formatos de export:
var theme = new ReportTheme
{
ReportTitle = "Monthly Project Report",
ProjectName = "Talara U3 — Expansion",
CompanyName = "Cayaqui S.A.",
PreparedBy = "Project Controls Team",
ReportDate = new DateTime(2026, 4, 30),
ConfidentialityLabel = "CONFIDENCIAL",
PrimaryColorHex = "#0F2044",
AccentColorHex = "#C9961A"
};
// Excel
var excelStream = await excelExporter.ExportAsync(report, new ExcelExportOptions { Theme = theme });
// PowerPoint
var ctx = new PptReportContext(new PptReportOptions { Theme = theme });
await new EvmKpiStripSlide { Snapshot = kpi }.RenderAsync(prs, ctx);
Theme es null por default — comportamiento legacy sin cambios. Los slides existentes no consumen Theme directamente (el branding de slides usa PptReportOptions.HeaderBackgroundColor / AccentColor); Theme está disponible para slides que implementen portada corporativa en versiones futuras.
v0.3.5 — R9C esquema actualizado
R9cTableSlide ahora usa el nuevo esquema R9C: PO / CO / PC / Comprometido / Incurrido / Pagado / Trends / EAC / %Ejec. Requiere Cayaqui.MPS.ReportModels ≥ 0.3.5.
v0.3.4 — Paridad de colores con diseño web
WaterfallSlide: declaraciones de color refactorizadas para usar constantes de EvmChartPalette (WaterfallTotal, WaterfallSubtotal, Earned, Actual, Cyan, Amber). Sin cambio de comportamiento — mismos valores hex. Requiere Cayaqui.MPS.ReportModels ≥ 0.3.4.
v0.3.3 — 6 nuevas slides EPC (24 slides totales)
6 nuevas slides de project controls para ingeniería/procura:
| Slide | Output | Contenido |
|---|---|---|
WbsBudgetTableSlide |
tabla 9 cols | Code / WBS Name (indentado por Level) / BAC / EV / AC / EAC / CV / CPI / % Done. CV verde/rojo; CPI semáforo. |
EngProgressTableSlide |
tabla 8 cols | Code / Title / Discipline / Plan% / Actual% / Deviation / Planned Date / Forecast Date. Deviation coloreada. |
LookaheadTableSlide |
tabla 7 cols | WBS Code / Activity / Responsible / Start / Finish / Status / Comments. Status con coloring. |
EvmControlChartSlide |
line chart | SV (ámbar) y CV (azul) en el tiempo + línea cero de referencia. |
RaciMatrixSlide |
tabla pivot | Actividades × Roles. R=azul, A=púrpura, C=ámbar, I=neutro. |
PoRegisterSlide |
tabla 7 cols | PO# / Supplier / Description / Amount / Status / Issue Date / Delivery Date. |
Requiere Cayaqui.MPS.ReportModels ≥ 0.3.3. Sin breaking changes.
v0.2.0 — 18 slides EVM completos (Fase 1 + Fase 2)
Paridad total con Cayaqui.MPS.ExcelExport v0.6.0 y componentes MPS.Components.Evm.
Fase 1 — mirror ExcelExport (10 slides)
| Slide | Output | Contenido |
|---|---|---|
EvmKpiStripSlide |
tabla 8 cols | CPI/SPI/EV/AC/PV/BAC/EAC/VAC. Semáforo en CPI/SPI. Fila delta (Δ vs período anterior). |
EvmSCurveChartSlide |
line chart | 4 series (PV/EV/AC/Forecast) + stripline BAC horizontal + stripline ControlDate vertical. |
BurndownChartSlide |
line chart | Remaining + Ideal calculado + optional TargetDate stripline. |
PhysicalProgressCurveSlide |
line chart | Baseline/Plan/Actual/Forecast % + optional GoalLine (100%) + ControlDate. |
ProductionCurveSlide |
line chart | Plan/Actual + optional NameplateRate stripline (capacidad de planta). |
MonteCarloHistogramSlide |
column chart | Bins pre-calculados + textbox con N, min, max, P50/P80/P90. |
CashflowChartSlide |
combo dual-axis | Columnas mensuales (Plan/Actual/Forecast, eje primario) + líneas acumuladas (eje secundario). |
R9cTableSlide |
tabla 11 cols | Reporte 9 columnas AACE 80R-13 con variance coloring. |
RiskHeatmapSlide |
tabla grid N×M | Score coloring por celda (semáforo). |
ScheduleVarianceTableSlide |
tabla | Baseline/Current/Forecast + SV días + threshold coloring. |
Fase 2 — secciones nuevas (8 slides)
| Slide | Output | Contenido |
|---|---|---|
ContingencyDrawdownSlide |
line chart | Plan/Actual contingencia restante + optional ControlDate. |
WaterfallSlide |
tabla 3 cols | Cascada: Label + Valor + Acumulado. Colors por WaterfallStepKind (Total=azul, Add=verde, Subtract=rojo, etc.). |
ResourceHistogramSlide |
column stacked | Pivote Period×Category. Una serie coloreada por categoría + optional Capacity line. |
ManagementReserveTrackerSlide |
tabla | Eventos de reserva de gestión, running balance, semáforo inicial/final. |
TornadoChartSlide |
bar horizontal | Low/High deviations por ítem, ordenado de mayor a menor range. |
MilestoneStripSlide |
tabla 5 cols | Hitos con color de fila por MilestoneHealth (OnTime=verde, AtRisk=ámbar, Late=rojo, Done=neutral). |
RiskRegisterTableSlide |
tabla 10 cols | Registro completo con score cell coloring por umbral. |
ChangeOrderLogSlide |
tabla 8 cols | Log de órdenes de cambio con status cell coloring. |
v0.1.0 — Scaffold de infraestructura
Contratos base para el output layer PowerPoint:
| Tipo | Rol |
|---|---|
IPptSlideSection |
Interfaz: RenderAsync(IPresentation, IPptReportContext) |
IPptReportContext |
Acceso a opciones + helper AddSlide(...) |
PptReportContext |
Implementación default inyectable |
PptReportOptions |
Header color, accent color, tipografía, watermark |
MpsColorExtensions.ToPpt() |
MpsColor → IColor de Syncfusion |
ColorParser.ParseHex() |
HTML hex → (R, G, B) byte tuple |
Uso rápido — PptReport fluent builder
// DI registration
services.AddMpsPptExport(licenseKey: builder.Configuration["MPS:PptExportLicenseKey"]);
// Composition — en un handler, service o Blazor page
var report = new PptReport()
.AddEvmKpiStrip(new EvmKpiStripSlide { Snapshot = kpiData })
.AddEvmSCurveChart(new EvmSCurveChartSlide
{
Points = sCurvePoints,
Bac = 20_000_000m,
ControlDate = new DateTime(2026, 4, 30)
})
.AddCashflowChart(new CashflowChartSlide { Points = cashflowPoints })
.AddMilestoneStrip(new MilestoneStripSlide { Milestones = milestones })
.AddChangeOrderLog(new ChangeOrderLogSlide { Items = changeOrders })
.AddWbsBudgetTable(new WbsBudgetTableSlide
{
Title = "Presupuesto WBS",
Rows = wbsRows
})
.AddRaciMatrix(new RaciMatrixSlide
{
Title = "Matriz RACI",
Items = raciEntries
});
// Export (Blazor)
@inject IPptReportExporter PptExporter
@inject IJSRuntime JS
await using var stream = await PptExporter.ExportAsync(report);
var bytes = ((MemoryStream)stream).ToArray();
using var dotnetStream = new DotNetStreamReference(new MemoryStream(bytes));
await JS.InvokeVoidAsync("downloadFileFromStream",
$"reporte-{DateTime.Today:yyyy-MM-dd}.pptx",
dotnetStream);
Uso manual (sin builder)
using var prs = Presentation.Create();
prs.SlideSize.Type = SlideSizeType.Widescreen;
var ctx = new PptReportContext(new PptReportOptions
{
HeaderBackgroundColor = "#1F3864",
AccentColor = "#2E75B6",
WatermarkText = "DRAFT"
});
await new EvmKpiStripSlide { Snapshot = kpiData }.RenderAsync(prs, ctx);
await new EvmSCurveChartSlide { Points = sCurvePoints, Bac = 10_000_000m }.RenderAsync(prs, ctx);
await using var ms = new MemoryStream();
prs.Save(ms);
prs.Close();
Coordenadas de slides
Las medidas en la API de Syncfusion.Presentation se expresan en puntos (pt). Un slide widescreen (16:9) mide 720 × 540 pt internamente en las implementaciones MPS.
| Constante MPS | Valor |
|---|---|
SlideWidthPt |
720 |
SlideHeightPt |
540 |
MarginPt |
24 |
TitleHeightPt |
30 |
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Cayaqui.MPS.Metadata (>= 0.18.0)
- Cayaqui.MPS.ReportModels (>= 0.4.0)
- Cayaqui.MPS.Storage (>= 0.2.0)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.7)
- Syncfusion.Presentation.Net.Core (>= 33.2.3)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
0.5.1 — CoverSlide: logo aspect ratio preserved (FitLogo reads PNG IHDR dims; logos right-aligned and vertically centered). 0.5.0 — CoverSlide fullscreen PPT cover; PptReportOptions.Logos; PptReport.AddCoverSlide(). 0.3.5 — R9cTableSlide: esquema R9C actualizado (Incurrido/Pagado/Trends/EAC). Requiere ReportModels ≥ 0.3.5. 0.3.4 — WaterfallSlide: color declarations refactored to use EvmChartPalette constants (WaterfallTotal, WaterfallSubtotal, Earned, Actual, Cyan, Amber). No behavioral change; guarantees color parity with web design system and ReportModels palette.
0.3.3 — 6 new slides: WbsBudgetTableSlide, EngProgressTableSlide, LookaheadTableSlide, EvmControlChartSlide (SV/CV line chart), RaciMatrixSlide (pivot table), PoRegisterSlide. New PptReport fluent builder with all 24 slide methods.
0.3.2 — Fix: MPS.Licensing.dll incluido en lib/net10.0/ del .nupkg (faltaba en 0.3.0/0.3.1 → 502.5 en IIS).
0.3.1 — Fix: re-publicación de 0.3.0 con binarios correctos. Sin diferencia de API.
0.3.0 — Licensing: AddMpsPptExport acepta licenseKey opcional (ECDSA P-256). Sin clave válida, cada slide generado incluye text box de marca de agua en rojo. PptLicenseState registrado en DI. Sin breaking changes.
0.2.0 — 18 slides EVM: EvmKpiStripSlide, EvmSCurveChartSlide, BurndownChartSlide, PhysicalProgressCurveSlide, ProductionCurveSlide, MonteCarloHistogramSlide, CashflowChartSlide, R9cTableSlide, RiskHeatmapSlide, ScheduleVarianceTableSlide, ContingencyDrawdownSlide, WaterfallSlide, ResourceHistogramSlide, ManagementReserveTrackerSlide, TornadoChartSlide, MilestoneStripSlide, RiskRegisterTableSlide, ChangeOrderLogSlide. 68 tests. Paridad completa con ExcelExport v0.6.0 y MPS.Components.Evm. 0.1.0 — Scaffold: IPptSlideSection, IPptReportContext, PptReportContext, PptReportOptions.