Files
ds_scp_task_solution/app/templates/report.html
T
Aherobo Ovie Victor 0e3e22e8cb Initial commit
2025-07-17 22:20:25 +01:00

295 lines
8.4 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document Compliance Report</title>
<style>
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
line-height: 1.6;
color: #333;
max-width: 1200px;
margin: 0 auto;
padding: 20px;
}
.header {
background-color: #f8f9fa;
padding: 20px;
border-radius: 5px;
margin-bottom: 20px;
border-left: 5px solid #007bff;
}
.document-info {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
}
.document-info-left {
flex: 3;
}
.document-info-right {
flex: 1;
text-align: right;
}
.score-container {
font-size: 24px;
font-weight: bold;
color: #28a745;
}
.summary {
background-color: #e9f7ef;
padding: 20px;
border-radius: 5px;
margin-bottom: 30px;
border-left: 5px solid #27ae60;
}
.applied-standards {
margin-top: 1.5rem;
padding: 1rem;
background-color: #f8f9fa;
border-radius: 5px;
border-left: 3px solid #3498db;
}
.applied-standards h3 {
margin-top: 0;
font-size: 1.2rem;
color: #495057;
}
.standards-list {
margin: 0.5rem 0 0 1.5rem;
padding: 0;
}
.standards-list li {
margin-bottom: 0.25rem;
}
.issues-container {
margin-bottom: 30px;
}
.issue {
margin-bottom: 15px;
padding: 15px;
border-radius: 5px;
background-color: #f8f9fa;
border-left: 4px solid #6c757d;
}
.issue.critical {
background-color: #fdedec;
border-left-color: #e74c3c;
}
.issue.major {
background-color: #fef9e7;
border-left-color: #f39c12;
}
.issue.minor {
background-color: #eafaf1;
border-left-color: #2ecc71;
}
.issue.info {
background-color: #ebf5fb;
border-left-color: #3498db;
}
.issue-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 10px;
}
.issue-section {
font-weight: bold;
font-size: 18px;
}
.badge {
display: inline-block;
padding: 5px 10px;
border-radius: 3px;
font-size: 12px;
font-weight: bold;
text-transform: uppercase;
color: white;
}
.badge.critical {
background-color: #e74c3c;
}
.badge.major {
background-color: #f39c12;
}
.badge.minor {
background-color: #2ecc71;
}
.badge.info {
background-color: #3498db;
}
.issue-description {
margin-bottom: 10px;
}
.issue-recommendation {
background-color: #f8f9fa;
padding: 10px;
border-radius: 3px;
margin-top: 10px;
}
.issue-reasoning {
margin-top: 10px;
padding: 10px;
background-color: #ebf5fb;
border-radius: 3px;
}
.issue-references {
margin-top: 10px;
}
.reference-list {
margin-top: 5px;
margin-left: 20px;
font-size: 0.9rem;
}
.stats {
display: flex;
justify-content: space-between;
margin-bottom: 20px;
flex-wrap: wrap;
}
.stat-box {
flex: 1;
min-width: 200px;
background-color: #f8f9fa;
padding: 15px;
border-radius: 5px;
margin: 5px;
text-align: center;
}
.stat-value {
font-size: 24px;
font-weight: bold;
margin-bottom: 5px;
}
.stat-label {
color: #6c757d;
font-size: 14px;
}
.footer {
margin-top: 30px;
text-align: center;
color: #6c757d;
font-size: 14px;
padding-top: 20px;
border-top: 1px solid #dee2e6;
}
@media print {
body {
padding: 0;
font-size: 12px;
}
.issue {
break-inside: avoid;
}
.header, .summary {
break-inside: avoid;
}
}
</style>
</head>
<body>
<div class="header">
<h1>Document Compliance Report</h1>
<div class="document-info">
<div class="document-info-left">
<p><strong>Document:</strong> {{ document_name }}</p>
<p><strong>Generated:</strong> {{ timestamp }}</p>
</div>
<div class="document-info-right">
<div class="score-container">
{{ compliance_score * 100 | round(1) }}%
</div>
<div>Compliance Score</div>
</div>
</div>
</div>
<div class="summary">
<h2>Summary</h2>
<p>{{ summary }}</p>
{% if applied_standards and applied_standards|length > 0 %}
<div class="applied-standards">
<h3>Applied Standards</h3>
<ul class="standards-list">
{% for standard in applied_standards %}
<li>{{ standard }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
</div>
<div class="stats">
<div class="stat-box">
<div class="stat-value" style="color: #e74c3c;">{{ critical_count }}</div>
<div class="stat-label">Critical Issues</div>
</div>
<div class="stat-box">
<div class="stat-value" style="color: #f39c12;">{{ major_count }}</div>
<div class="stat-label">Major Issues</div>
</div>
<div class="stat-box">
<div class="stat-value" style="color: #2ecc71;">{{ minor_count }}</div>
<div class="stat-label">Minor Issues</div>
</div>
<div class="stat-box">
<div class="stat-value" style="color: #3498db;">{{ info_count }}</div>
<div class="stat-label">Info Issues</div>
</div>
</div>
<div class="issues-container">
<h2>Compliance Issues</h2>
{% if issues %}
{% for issue in issues %}
<div class="issue {{ issue.level }}">
<div class="issue-header">
<div class="issue-section">{{ issue.section }}</div>
<span class="badge {{ issue.level }}">{{ issue.level }}</span>
</div>
<div class="issue-description">
{{ issue.description }}
</div>
{% if issue.reasoning %}
<div class="issue-reasoning">
<strong>Reasoning:</strong> {{ issue.reasoning }}
</div>
{% endif %}
{% if issue.standard_references and issue.standard_references|length > 0 %}
<div class="issue-references">
<strong>Standard References:</strong>
<ul class="reference-list">
{% for reference in issue.standard_references %}
<li>{{ reference }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
<div class="issue-recommendation">
<strong>Recommendation:</strong> {{ issue.recommendation }}
</div>
</div>
{% endfor %}
{% else %}
<p>No compliance issues found. Great job!</p>
{% endif %}
</div>
<div class="footer">
<p>Generated by Mini SpecsComply Pro</p>
<p>This report is for informational purposes only and should be reviewed by a qualified professional.</p>
</div>
</body>
</html>