Wiki source code of Risk Report

Last modified by Lee Pedley on 2026/09/21 21:59

Hide last authors
Lee Pedley 1.1 1 {{velocity}}
2 #set ($settingsDoc = $xwiki.getDocument('ISMS.Settings'))
3 #set ($settings = $settingsDoc.getObject('ISMS.Code.SettingsClass'))
4 #set ($riskLowMax = 4)
5 #set ($riskMediumMax = 9)
6 #set ($riskHighMax = 14)
7 #set ($riskAppetite = 15)
8 #set ($reviewHorizon = 30)
9 #set ($evidenceHorizon = 30)
10 #set ($documentHorizon = 30)
11 #if ($settings)
12 #if ($settings.getProperty('riskLowMax').getValue()) #set ($riskLowMax = $settings.getProperty('riskLowMax').getValue()) #end
13 #if ($settings.getProperty('riskMediumMax').getValue()) #set ($riskMediumMax = $settings.getProperty('riskMediumMax').getValue()) #end
14 #if ($settings.getProperty('riskHighMax').getValue()) #set ($riskHighMax = $settings.getProperty('riskHighMax').getValue()) #end
15 #if ($settings.getProperty('riskAppetiteThreshold').getValue()) #set ($riskAppetite = $settings.getProperty('riskAppetiteThreshold').getValue()) #end
16 #if ($settings.getProperty('reviewHorizonDays').getValue()) #set ($reviewHorizon = $settings.getProperty('reviewHorizonDays').getValue()) #end
17 #if ($settings.getProperty('evidenceHorizonDays').getValue()) #set ($evidenceHorizon = $settings.getProperty('evidenceHorizonDays').getValue()) #end
18 #if ($settings.getProperty('documentHorizonDays').getValue()) #set ($documentHorizon = $settings.getProperty('documentHorizonDays').getValue()) #end
19 #end
20 #set($docs=$services.query.xwql("from doc.object('Risks.Code.RisksClass') as obj").setLimit(2000).execute())
21 #set($open=0)#set($above=0)#set($unassessed=0)
22 #foreach($ref in $docs)#set($d=$xwiki.getDocument($ref))#set($o=$d.getObject('Risks.Code.RisksClass'))#if($o)#set($st=$o.getProperty('status').getValue())#if($st!='Closed')#set($open=$open+1)#end#set($rs=$o.getProperty('residualScore').getValue())#if(!$rs)#set($unassessed=$unassessed+1)#elseif($st!='Closed' && $rs >= $riskAppetite)#set($above=$above+1)#end#end#end
23 {{html wiki="true" clean="false"}}
24 <style>.report-kpis{display:flex;flex-wrap:wrap;gap:10px;margin:14px 0 20px}.report-kpi{border:1px solid #d9dfe5;border-radius:7px;padding:12px 16px;min-width:160px}.report-kpi strong{font-size:1.6em}.report-table{border-collapse:collapse;width:100%}.report-table th,.report-table td{border-bottom:1px solid #dfe4e8;padding:8px;text-align:left;vertical-align:top}@media print{.noprint{display:none!important}}</style>
25 <div class="box infomessage"><strong>Risk report</strong><br/>Risk bands and residual-risk review threshold are read from [[ISMS Settings>>ISMS.Settings]].</div><p class="noprint"><button class="btn btn-default" onclick="window.print();return false">Print / Save as PDF</button> <a class="btn btn-default" href="$xwiki.getURL('Risks.WebHome','view')">Open Risks</a></p>
26 <div class="report-kpis"><div class="report-kpi"><strong>$docs.size()</strong><br/>Total risks</div><div class="report-kpi"><strong>$open</strong><br/>Open / active</div><div class="report-kpi"><strong>$above</strong><br/>Residual score at/above review threshold ($riskAppetite)</div><div class="report-kpi"><strong>$unassessed</strong><br/>No residual score</div></div>
27 #if($docs.isEmpty())<div class="box infomessage">No risk records exist yet.</div>#else<table class="report-table"><thead><tr><th>Risk ID</th><th>Risk</th><th>Owner</th><th>Inherent</th><th>Residual</th><th>Residual Rating</th><th>Decision</th><th>Target</th><th>Status</th></tr></thead><tbody>
28 #foreach($ref in $docs)#set($d=$xwiki.getDocument($ref))#set($o=$d.getObject('Risks.Code.RisksClass'))#if($o)#set($rs=$o.getProperty('residualScore').getValue())<tr><td>$escapetool.xml($o.getProperty('riskId').getValue())</td><td><a href="$xwiki.getURL($ref,'view')">$escapetool.xml($d.displayTitle)</a></td><td>$escapetool.xml($o.getProperty('owner').getValue())</td><td>$escapetool.xml($o.getProperty('inherentScore').getValue())</td><td>$escapetool.xml($rs)</td><td>#if(!$rs)Not assessed#elseif($rs <= $riskLowMax)Low#elseif($rs <= $riskMediumMax)Moderate#elseif($rs <= $riskHighMax)High#else Critical#end</td><td>$escapetool.xml($o.getProperty('treatmentDecision').getValue())</td><td>#set($td=$o.getProperty('targetDate').getValue())#if($td)$xwiki.formatDate($td)#end</td><td>$escapetool.xml($o.getProperty('status').getValue())</td></tr>#end#end
29 </tbody></table>#end
30 {{/html}}
31 {{/velocity}}