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

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

  1. Navigate to the project dashboard.
  2. Open the “Advanced Reports” section.
  3. The platform displays all templates applicable to the project’s type.
  4. Click “Generate” on the desired template.
  5. The report is generated in the background. A progress indicator shows the job status.
  6. 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:

  • applicableProjectTypes controls which project type triggers the report (e.g., you generate it from an AI System project).
  • policyRequirements controls 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 policyVersion is specified, only that exact version is accepted.
  • If policyVersion is 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 parentAISystem and parentFunctionalModel fields 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:

<h1></h1>
<p><strong>Project Type:</strong> </p>

<h2>Assessment Summary</h2>
<p><strong>Approved by:</strong> </p>
<p><strong>Approval date:</strong> </p>
<p><strong>Reviewed by:</strong> </p>

<h2>Project Information</h2>
<table>
  <tr>
    <td>Organisation Name</td>
    <td></td>
  </tr>
  <tr>
    <td>Project Description</td>
    <td></td>
  </tr>
</table>


  <h2>Lifecycle Phase</h2>
  <p></p>



  <h2>Functional Model: </h2>
  <p></p>

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 content field 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 to css.

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:

  1. Define policy requirements — list the policies that must exist across the project hierarchy (the main project and its children). Group them by project type.
  2. Write the Handlebars template — use the data context and helpers to build your report layout.
  3. Add optional CSS — style your report with custom CSS in the templateContent.css field.
  4. Specify applicable project types — choose which project types (AI System, Functional Model, etc.) can use this template.
  5. 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 and to iterate over child projects. Use `` to conditionally show sections only when data is available.