🛡️ Security Scan Report

📁 {{ project_name }} 📅 {{ timestamp }} 🔧 {{ tools|length }} tool{{ 's' if tools|length != 1 }} ⏱️ {{ scan_duration }}
📊 Summary
{{ total_tests }}
Total Checks
{{ total_passed }}
Passed
{{ total_failed }}
Failed
{{ total_warnings }}
Warnings
{{ success_rate }}%
Success Rate
🔧 Per-Tool Results (click to filter)
{% for t in tools %}
{{ t.tool|title }}
{% set rate = (t.passed / t.total * 100) if t.total > 0 else 0 %}
{{ "%.0f"|format(rate) }}%
{% endfor %}
Show All
{% if severity_counts %}
⚠️ Severity Breakdown
{% for sev in ['CRITICAL', 'HIGH', 'MEDIUM', 'LOW', 'INFO'] %} {% if severity_counts.get(sev, 0) > 0 %}
{{ sev }}: {{ severity_counts[sev] }}
{% endif %} {% endfor %}
ALL
{% endif %} {% if findings %}
🔍 Findings ({{ findings|length }})
{% for f in findings %} {% endfor %}
SeverityToolRuleTitleFileResource
{{ f.severity }} {{ f.tool }} {{ f.id }} {{ f.title }} {{ f.file }}{% if f.line %}:{{ f.line }}{% endif %} {{ f.resource }}
{% endif %} {% if trend %}
📈 Trend (vs {{ trend_date }})
{% for row in trend %} {% endfor %}
MetricPreviousCurrentDelta
{{ row.metric }} {{ row.previous }} {{ row.current }} {{ row.symbol }} {{ '%+d'|format(row.delta) }}
{% endif %}