Reports Guide
The Asenion platform generates compliance reports from the assessments and data captured across your projects. Reports help document governance decisions, demonstrate regulatory compliance, and communicate risk posture to stakeholders.
This guide covers the two primary report types: Assessment Reports and Advanced Template Reports.
Table of Contents
- Overview
- Assessment Reports
- Advanced Template Reports
- Report Template Configuration
- Quick Reference
- Submitting a Report Template
Overview
The platform provides two types of reports:
| Report Type | Purpose | How It Works | Output |
|---|---|---|---|
| Assessment Report | Document a single assessment’s findings, scores, and alignment | Rendered in the browser from assessment data | PDF via browser print or direct download |
| Advanced Template Report | Generate a comprehensive project-level report using a custom Handlebars template | Generated in the background | HTML preview + PDF download |
Assessment Report Advanced Template Report
┌──────────────────┐ ┌──────────────────┐
│ Single assessment │ │ Entire project │
│ Policy-specific │ │ Custom template │
│ Browser-rendered │ │ Server-generated │
│ Instant download │ │ Background job │
└──────────────────┘ └──────────────────┘
Assessment Reports
An assessment report presents the findings of a single assessment (one policy evaluated against one project). It is accessed from the assessment’s detail page via the “Download Report” button.
What Assessment Reports Contain
Assessment reports typically include:
- Cover page — organisation name, project name, policy name, assessment date, completion status
- Assessment summary — completion percentage, overall risk/alignment status
- Policy alignment — alignment score with visual indicator
- Control bundle sections — for each section of the policy:
- Bundle name and alignment status
- Raw score and maximum score
- Individual control questions and answers
- Quantitative metrics (fairness, performance, raw counts) where applicable
- Heat map — visual comparison across control bundles (when the policy includes quantitative controls)
- Reviewer and approver details — who reviewed and approved the assessment, with dates
If the assessment is less than 100% complete, the report displays a “Draft Report” indicator with the current completion percentage.
Policy-Specific Templates
The platform automatically selects a report layout based on the policy attached to the assessment. Some policies have dedicated report templates with specialised formatting, while all others use a default generic layout:
| Template | Description |
|---|---|
| Local Law 144 Bias Audit | NYC Local Law 144 bias audit compliance format with key findings and summary sections |
| ISO 42001 | AI management system standard format with custom bundle renderers per section |
| AI Risk Management | Risk management policy format |
| Default | Generic assessment report layout that works with any policy |
Note: The template is determined automatically by the policy attached to the assessment. You do not need to select a template manually.
Assessment Versioning
Assessments that have versioning enabled allow you to:
- View previous versions — select a version from the dropdown to see the report as it was at that point in time.
- Create new versions — when an assessment is rejected, authorised users (Org Admin, Owner, Project Lead) can create a new version to address feedback.
The version number is included in the downloaded file name (e.g., Org_Project_Policy_Report_2024-01-15_v2.pdf).
Downloading Assessment Reports
Click the “Download Report” button on the assessment report page. Depending on the policy template:
- Local Law 144 Bias Audit — generates a structured PDF directly in the browser using a dedicated PDF template.
- All other policies — uses the browser’s print-to-PDF function, which opens a print dialog. Select “Save as PDF” to download.
The file is named using the pattern: {OrgName}_{ProjectName}_{PolicyName}_Report_{Date}.pdf
Role-Based Visibility
Assessment reports respect control visibility rules. The controls and answers shown in the report depend on:
- The viewing user’s role on the project
- Screening visibility settings
- Organisation-level visibility configuration for the policy
This means different users may see different content in the same assessment report.
Advanced Template Reports
Advanced template reports generate project-level documents using custom Handlebars templates. Unlike assessment reports (which cover a single assessment), advanced reports can pull data from the entire project hierarchy — the project itself, its child projects, and parent projects.
What Advanced Reports Contain
The content of an advanced report is entirely defined by the template. A template can include:
- Project metadata (name, type, description)
- Assessment answers from any policy attached to the project
- Answers from child projects (functional models, candidate models, datasets)
- Answers from parent projects (when generating a report for a child)
- Assignment details (reviewers, approvers, dates)
- Organisation branding (logo in PDF header)
- Any custom layout, tables, or formatting defined in the template’s HTML and CSS
Supported Project Types
Advanced reports can be generated for any project type. The template specifies which project types it applies to:
| Project Type | Description | Data Available |
|---|---|---|
AI_SYSTEM | Top-level AI system project | Own assessments + child functional models, candidate models, datasets |
FUNCTIONAL_MODEL | Functional model within an AI system | Own assessments + parent AI system data + child candidate models, datasets |
MODEL_CANDIDATE | Candidate model within a functional model | Own assessments + parent AI system + parent functional model |
ORGANIZATION | Organisation-level assessment | Own assessments only |
Generating an Advanced Report
- Navigate to the project dashboard.
- Open the “Advanced Reports” section.
- The platform displays all templates applicable to the project’s type.
- Click “Generate” on the desired template.
- The report is generated in the background. A progress indicator shows the job status.
- Once complete, the report becomes available for viewing and download.
Note: Reports are generated asynchronously. You can navigate away and return later — the platform tracks job status per user and project.
Report Output
Each generated report produces two outputs:
- HTML preview — viewable directly in the platform via an embedded viewer.
- PDF download — a formatted PDF document with organisation logo (if configured) and proper page layout.
The PDF file is named using the pattern: ai-system-report-{date}.pdf
Regenerating Reports
Previously generated reports are not automatically updated when assessment data changes. If answers are modified, new assessments are added, or other project data changes, you should regenerate the report to capture the latest data. When you click “Generate” on a template that already has a completed report, the old report is replaced with a new one.
Report Template Configuration
Advanced reports are driven by report templates — configurable documents stored in the platform. Each template defines what data to include, how to structure the output, and which project types it applies to.
Template Structure
A report template has the following fields:
| Field | Type | Required | Description |
|---|---|---|---|
identifier | string | Yes | Unique template identifier (e.g., com.example.org.report.eu-ai-act). |
name | string | Yes | Display name shown in the Advanced Reports list. |
description | string | No | Explanation of what this report covers. |
version | string | Yes | Version string for the template. |
isActive | boolean | No | Whether this template is available for use. Defaults to true. |
applicableProjectTypes | string[] | Yes | Which project types can use this template (e.g., ["AI_SYSTEM", "ORGANIZATION"]). |
policyRequirements | PolicyRequirement[] | Yes | Which policies must exist across the project hierarchy for this template to work. See Policy Requirements. |
templateContent | TemplateContent | Yes | The Handlebars HTML template and optional CSS. See Template Content. |
labels | string[] | No | Tags for categorisation. |
isSystemLevel | boolean | No | If true, the template is available to all organisations. If false, it is scoped to a specific organisation. |
organizationId | string | No | The organisation this template belongs to (when isSystemLevel is false). |
Policy Requirements
The policyRequirements field specifies which policies must be present across the project hierarchy for the template to generate successfully. Requirements are grouped by project type — this includes the main project and its child projects:
applicableProjectTypescontrols which project type triggers the report (e.g., you generate it from an AI System project).policyRequirementscontrols which policies must exist at each level of the hierarchy — the main project and its children — because the report pulls data from all of them.
{
"policyRequirements": [
{
"projectType": "AI_SYSTEM",
"requiredPolicies": [
{ "policyId": "com.example.org.projectinfo" },
{ "policyId": "com.example.org.fairness", "policyVersion": "2.0" }
]
},
{
"projectType": "FUNCTIONAL_MODEL",
"requiredPolicies": [{ "policyId": "com.example.org.modelcard" }]
}
]
}
In the example above, the template requires com.example.org.projectinfo and com.example.org.fairness on the AI System itself, and com.example.org.modelcard on each of its child functional models.
- If a
policyVersionis specified, only that exact version is accepted. - If
policyVersionis omitted, the latest version of the policy is used. - If a required policy is missing, report generation fails with a clear error message listing the missing policies.
Template Content (Handlebars)
The templateContent field contains the HTML template that defines the report’s layout. It uses Handlebars syntax for dynamic content.
{
"templateContent": {
"name": "EU AI Act Compliance Report",
"content": "<html><body><h1></h1><p>Project type: </p>...</body></html>",
"css": ".report-section { margin-bottom: 20px; } ..."
}
}
content— the Handlebars HTML template string.css— optional CSS that is injected into the rendered HTML and PDF.name— a label for the template content.
Data Context
When a template is rendered, the platform builds a data context from the project’s assessments and hierarchy. The template can reference any field in this context using Handlebars expressions.
AI System report data context:
| Field | Type | Description |
|---|---|---|
id | string | Project ID |
name | string | Project name |
projectType | string | e.g., "AI_SYSTEM" |
answerIndex | object | Indexed answers from the project’s assessments (keyed by control identifier) |
assignments | object | Reviewer/approver details: approverData, latestReviewData, effectiveDate, reviewEffectiveDate, author |
policies | array | List of { id, identifier, version, name } for each policy on the project |
controlMetadata | object | Control definitions (keyed by identifier): question, name, answerType |
functionalModels | array | Child functional models, each with their own answerIndex and parentAISystem reference |
candidateModels | array | Child candidate models, each with answerIndex, parentAISystem, and parentFunctionalModel references |
datasets | array | Child datasets, each with answerIndex and parent references |
organizationBranding | object | logoUrl, primaryColor, secondaryColor, backgroundColor |
Organisation report data context:
| Field | Type | Description |
|---|---|---|
id | string | Project ID |
name | string | Organisation project name |
projectType | string | "ORGANIZATION" |
answerIndex | object | Indexed answers from the organisation’s assessments |
assignments | object | Reviewer/approver details |
policies | array | List of policies |
controlMetadata | object | Control definitions |
organizationBranding | object | Organisation branding data |
Note: Functional Model and Candidate Model reports have similar contexts, with additional
parentAISystemandparentFunctionalModelfields providing access to parent project data.
Handlebars Helpers
The platform registers custom Handlebars helpers that simplify accessing assessment data in templates:
| Helper | Syntax | Description |
|---|---|---|
controlV | `` | Returns the answer value for a control. Supports text, choice, score, checkbox, document links, and card-type answers. Returns [Not specified] if the control has no answer. |
controlV (with placeholder) | `` | Same as above but with a custom placeholder. |
hasControl | ... | Returns true if the control has a non-empty answer. Use for conditional sections. |
controlQuestion | `` | Returns the question text (or name) of a control from metadata. |
controlExists | ... | Returns true if the control exists in the policy metadata. |
controlVFromParent | `` | Accesses an answer from a parent project. First argument is "aiSystem" or "functionalModel". |
policyInfo | `` | Returns a field from the first policy (e.g., name, identifier, version). |
formatDate | `` | Formats an epoch millisecond timestamp as a locale date string. |
names | `` | Joins an array of { name } objects into a comma-separated string. |
eq | ... | Equality comparison. |
ne | ... | Not-equal comparison. |
isArray | ... | Checks if a value is an array. |
join | `` | Joins an array with a separator. |
Example template snippet:
Template CSS
Custom CSS can be included in the templateContent.css field. This CSS is injected into the rendered HTML and applied during PDF generation. The platform also applies a base stylesheet that provides standard report formatting (margins, fonts, table styles, page breaks).
Use the page-break CSS class to control pagination in the PDF output:
.new-section {
break-before: page;
}
Template Validation
Templates are validated on creation and update. If your template contains disallowed content, the platform will return a validation error with a description of the issue. Ensure your templates use only standard HTML and CSS — avoid inline JavaScript or external resource loading.
Complete Example
Below is a complete report template configuration for an AI System project. This example demonstrates the key features: policy requirements, Handlebars helpers, iterating over child projects, and conditional sections.
{
"identifier": "com.example.org.report.ai-governance",
"name": "AI Governance Report",
"description": "Comprehensive governance report covering AI system assessments, functional models, and candidate models.",
"version": "1.0",
"isActive": true,
"applicableProjectTypes": ["AI_SYSTEM"],
"policyRequirements": [
{
"projectType": "AI_SYSTEM",
"requiredPolicies": [
{ "policyId": "com.example.org.projectinfo" },
{ "policyId": "com.example.org.riskmanagement" }
]
},
{
"projectType": "FUNCTIONAL_MODEL",
"requiredPolicies": [{ "policyId": "com.example.org.modelcard" }]
},
{
"projectType": "MODEL_CANDIDATE",
"requiredPolicies": [
{
"policyId": "com.example.org.modelvalidation",
"policyVersion": "2.0"
}
]
}
],
"templateContent": {
"name": "AI Governance Report Template",
"content": "<html><head><title> - AI Governance Report</title></head><body><div class=\"report-cover\"><h1>AI Governance Report</h1><p class=\"subtitle\"></p><table class=\"cover-table\"><tr><td>Project Type</td><td></td></tr><tr><td>Organisation</td><td></td></tr><tr><td>Report Date</td><td></td></tr><tr><td>Approved By</td><td></td></tr><tr><td>Reviewed By</td><td></td></tr></table></div><div class=\"section\"><h2>1. Project Overview</h2><p><strong>Project Name:</strong> </p><p><strong>Description:</strong> </p><p><strong>Purpose:</strong> </p><p><strong>Lifecycle Phase:</strong> </p></div><div class=\"section\"><h2>2. Risk Management</h2><p><strong>Risk Classification:</strong> </p><p><strong>Risk Appetite:</strong> </p><h3>Mitigation Measures</h3><p></p></div><div class=\"section new-section\"><h2>3. Functional Models</h2><div class=\"subsection\"><h3></h3><p><strong>Description:</strong> </p><p><strong>Model Type:</strong> </p><p><strong>Training Data:</strong> </p></div></div><div class=\"section new-section\"><h2>4. Candidate Models</h2><div class=\"subsection\"><h3></h3><p><strong>Validation Status:</strong> </p><p><strong>Performance Score:</strong> </p><p><strong>Parent AI System:</strong> </p></div></div><div class=\"section\"><h2>5. Policies</h2><table><thead><tr><th>Policy</th><th>Version</th></tr></thead><tbody><tr><td></td><td></td></tr></tbody></table></div></body></html>",
"css": "body { font-family: 'Segoe UI', Arial, sans-serif; color: #333; line-height: 1.6; } .report-cover { text-align: center; margin-bottom: 40px; padding: 60px 0; } .report-cover h1 { font-size: 28px; color: #1a237e; margin-bottom: 8px; } .subtitle { font-size: 18px; color: #666; margin-bottom: 30px; } .cover-table { margin: 0 auto; border-collapse: collapse; text-align: left; } .cover-table td { padding: 8px 16px; border-bottom: 1px solid #eee; } .cover-table td:first-child { font-weight: 600; color: #555; } .section { margin-bottom: 30px; } .section h2 { color: #1a237e; border-bottom: 2px solid #1a237e; padding-bottom: 6px; font-size: 20px; } .section h3 { color: #333; font-size: 16px; } .subsection { margin-left: 20px; margin-bottom: 20px; padding: 16px; background: #f8f9fa; border-radius: 6px; } table { width: 100%; border-collapse: collapse; margin: 16px 0; } th, td { padding: 10px 14px; text-align: left; border: 1px solid #dee2e6; } th { background: #f1f3f5; font-weight: 600; } .new-section { break-before: page; }"
},
"labels": ["governance", "ai-system"],
"isSystemLevel": false,
"organizationId": "YOUR_ORG_ID"
}
Reading the example above: The
contentfield is a single-line HTML string (JSON requires this). When authoring your template, you can write it as formatted HTML and then minify it into a single line before placing it in the JSON. The same applies tocss.
What this example demonstrates:
| Feature | Where in Example |
|---|---|
| Top-level project data | , |
Assessment answers via controlV | `` |
| Conditional sections | ... |
| Assignment/approval data | , |
| Reviewer names from array | `` |
| Iterating child projects | ... |
| Accessing parent data from child | `` |
| Policy listing | ... |
| Multi-project-type requirements | AI_SYSTEM, FUNCTIONAL_MODEL, MODEL_CANDIDATE each with own policies |
| Version-pinned policy | "policyVersion": "2.0" on com.example.org.modelvalidation |
| Page breaks in CSS | .new-section { break-before: page; } |
Quick Reference
Assessment Reports
| Aspect | Detail |
|---|---|
| Scope | Single assessment (one policy, one project) |
| Access | Assessment detail page → “Download Report” |
| Template selection | Automatic, based on the policy |
| Output format | PDF (browser print or direct download) |
| Versioning | View and download specific assessment versions |
| Visibility | Controlled by user role and visibility settings |
| Draft indicator | Shown when assessment is less than 100% complete |
Advanced Template Reports
| Aspect | Detail |
|---|---|
| Scope | Entire project, including child/parent hierarchy |
| Access | Project dashboard → “Advanced Reports” |
| Template selection | User selects from available templates |
| Output format | HTML preview + PDF download |
| Generation | Background job (asynchronous) |
| Regeneration | Manual — click “Generate” again to capture latest data |
| Template engine | Handlebars (HTML + CSS) |
| PDF engine | Server-side PDF generation with organisation logo |
Report Template Fields
| Field | Type | Required | Description |
|---|---|---|---|
identifier | string | Yes | Unique template identifier |
name | string | Yes | Display name |
description | string | No | Template description |
version | string | Yes | Template version |
isActive | boolean | No | Whether template is enabled |
applicableProjectTypes | string[] | Yes | e.g., ["AI_SYSTEM", "ORGANIZATION"] |
policyRequirements | PolicyRequirement[] | Yes | Required policies per project type |
templateContent | TemplateContent | Yes | Handlebars HTML + optional CSS |
labels | string[] | No | Tags |
isSystemLevel | boolean | No | Available to all orgs if true |
organizationId | string | No | Org scope (when not system-level) |
Submitting a Report Template
To create or update a report template for your organisation:
- Define policy requirements — list the policies that must exist across the project hierarchy (the main project and its children). Group them by project type.
- Write the Handlebars template — use the data context and helpers to build your report layout.
- Add optional CSS — style your report with custom CSS in the
templateContent.cssfield. - Specify applicable project types — choose which project types (AI System, Functional Model, etc.) can use this template.
- Send the template to the Asenion team for review and activation. Alternatively, organisation admins can create templates directly via the platform’s admin interface.
Tip: Start by using
to reference specific assessment answers andto iterate over child projects. Use `` to conditionally show sections only when data is available.