Report: {{ recipe_name }} |
Generated: {{ generated_at }} |
{% if metadata and metadata.start_date and metadata.end_date %}
Period: {{ metadata.start_date }} to {{ metadata.end_date }} |
{% endif %}
Scope: {{ scope_label | default('All Folders') }} |
Records: {{ metadata.transformed_count if metadata and metadata.transformed_count else 'N/A' }}
{% if sca_summary %}
Projects
{{ sca_summary.projects | default(0) }}
{% if sca_summary.components | default(0) > 0 %}
Policy Violations
0 %}style="color: #d32f2f;"{% endif %}>{{ sca_summary.violations | default(0) }}
Policy Warnings
0 %}style="color: #f57c00;"{% endif %}>{{ sca_summary.warnings | default(0) }}
Components
{{ sca_summary.components | default(0) }}
{% endif %}
{% if license_kpis and license_kpis.total | default(0) > 0 %}
Copyleft %
20 %}style="color: #d32f2f;"{% endif %}>{{ license_kpis.copyleft_pct | default(0) }}%
Strong Copyleft
0 %}style="color: #d32f2f;"{% endif %}>{{ license_kpis.copyleft_strong | default(0) }}
Permissive
{{ license_kpis.permissive | default(0) }}
No License
0 %}style="color: #f57c00;"{% endif %}>{{ license_kpis.no_license | default(0) }}
{% endif %}
Total Findings
{{ sca_summary.findings | default(0) }}
{% if sca_summary.findings_delta is not none and sca_summary.findings_delta is defined %}
{% if sca_summary.findings_delta > 0 %}▲{% elif sca_summary.findings_delta < 0 %}▼{% else %}▬{% endif %}
{{ sca_summary.findings_delta }}%
{% endif %}
{% endif %}
{% if findings_by_group and findings_by_group.labels | default([]) | length > 0 %}
Findings by {{ group_label | default('Folder') }}
Distribution of security findings across {{ group_label | default('folder') | lower }}s by severity.
{% endif %}
Severity Trends ({{ severity_trends.month_count | default(12) }} Months)
Critical and High severity findings over the report period.
Highest-Risk Products
Projects bucketed by risk score (critical*10 + high*5 + medium*2 + low*0.5).
{% if risk_donut and risk_donut.total_artifacts %}{{ risk_donut.total_artifacts }} total projects.{% endif %}
{% if top_risk_products and top_risk_products | length > 0 %}
| # | Product | Risk Score | KEV | Critical | High | Medium | Low |
{% for p in top_risk_products[:10] %}
| {{ loop.index }} |
{{ p.project }} |
{{ p.risk_score }} |
{% if p.kev|default(0) > 0 %}{{ p.kev }}{% else %}0{% endif %} |
{% if p.critical > 0 %}{{ p.critical }}{% else %}0{% endif %} |
{% if p.high > 0 %}{{ p.high }}{% else %}0{% endif %} |
{% if p.medium > 0 %}{{ p.medium }}{% else %}0{% endif %} |
{{ p.low }} |
{% endfor %}
{% endif %}
{% set has_license_data = license_bar and license_bar.labels | default([]) | length > 0 %}
{% if has_license_data %}
Open Issues by Severity
Distribution of unresolved findings by severity (excluding resolved/triaged).
License Distribution
Software licenses by component count.
{% else %}
Open Issues by Severity
Distribution of unresolved findings by severity (excluding resolved/triaged).
{% endif %}
{% set has_exploit_data = exploit_intel and exploit_intel.data | default([]) | sum > 0 %}
{% if has_exploit_data %}
Exploit Intelligence
Findings with exploit indicators (KEV, known exploits, ransomware, etc.).
Findings by Type
Finding counts categorized by type (CVEs, Crypto, Credentials, etc.).
{% elif findings_by_type and findings_by_type.labels | default([]) | length > 0 %}
Findings by Type
Finding counts categorized by type (CVEs, Crypto, Credentials, etc.).
{% endif %}
{% if finding_age and finding_age.labels | default([]) | length > 0 %}
Finding Age Distribution
Open findings bucketed by days since detection.
{% endif %}
{% if project_table and project_table | length > 0 %}
Project Findings Summary
| Project |
KEV |
Critical |
High |
Medium |
Low |
Total |
{% for row in project_table %}
| {{ row.project }} |
{% if (row.kev|default(0)) > 0 %}{{ row.kev }}{% else %}0{% endif %} |
{% if (row.critical|default(0)) > 0 %}{{ row.critical }}{% else %}0{% endif %} |
{% if (row.high|default(0)) > 0 %}{{ row.high }}{% else %}0{% endif %} |
{% if (row.medium|default(0)) > 0 %}{{ row.medium }}{% else %}0{% endif %} |
{{ row.low }} |
{{ row.total }} |
{% endfor %}
{% endif %}
{% include '_action_buttons.html' %}