Wiki source code of Management Review Pack

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($riskDocs=$services.query.xwql("from doc.object('Risks.Code.RisksClass') as obj").setLimit(2000).execute())
21 #set($auditDocs=$services.query.xwql("from doc.object('Audits.Code.AuditsClass') as obj").setLimit(2000).execute())
22 #set($findingDocs=$services.query.xwql("from doc.object('Findings.Code.FindingsClass') as obj").setLimit(2000).execute())
23 #set($actionDocs=$services.query.xwql("from doc.object('Corrective Actions.Code.Corrective ActionsClass') as obj").setLimit(2000).execute())
24 #set($treatmentDocs=$services.query.xwql("from doc.object('Risk Treatments.Code.Risk TreatmentsClass') as obj").setLimit(2000).execute())
25 #set($openRisks=0)#set($above=0)#foreach($r in $riskDocs)#set($d=$xwiki.getDocument($r))#set($o=$d.getObject('Risks.Code.RisksClass'))#if($o && $o.getProperty('status').getValue()!='Closed')#set($openRisks=$openRisks+1)#if($o.getProperty('residualScore').getValue() && $o.getProperty('residualScore').getValue() >= $riskAppetite)#set($above=$above+1)#end#end#end
26 #set($openFindings=0)#foreach($r in $findingDocs)#set($d=$xwiki.getDocument($r))#set($o=$d.getObject('Findings.Code.FindingsClass'))#if($o && $o.getProperty('status').getValue()!='Closed')#set($openFindings=$openFindings+1)#end#end
27 #set($openActions=0)#foreach($r in $actionDocs)#set($d=$xwiki.getDocument($r))#set($o=$d.getObject('Corrective Actions.Code.Corrective ActionsClass'))#if($o && $o.getProperty('status').getValue()!='Verified' && $o.getProperty('status').getValue()!='Cancelled')#set($openActions=$openActions+1)#end#end
28 #set($openTreatments=0)#foreach($r in $treatmentDocs)#set($d=$xwiki.getDocument($r))#set($o=$d.getObject('Risk Treatments.Code.Risk TreatmentsClass'))#if($o && $o.getProperty('status').getValue()!='Complete' && $o.getProperty('status').getValue()!='Cancelled')#set($openTreatments=$openTreatments+1)#end#end
29 {{html wiki="true" clean="false"}}
30 <style>.mr-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:10px;margin:15px 0}.mr-card{border:1px solid #d9dfe5;border-radius:7px;padding:12px}.mr-card strong{font-size:1.6em}.mr-section{margin:24px 0}@media print{.noprint{display:none!important}}</style>
31 <div class="box infomessage"><strong>Management review snapshot</strong><br/>Use this as an agenda/evidence aid. Record the meeting, decisions, actions and approvals in your controlled document/record process.</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('ISMS.Dashboard','view')">Dashboard</a></p>
32 <div class="mr-grid"><div class="mr-card"><strong>$openRisks</strong><br/>Open risks</div><div class="mr-card"><strong>$above</strong><br/>Residual risks >= appetite threshold</div><div class="mr-card"><strong>$openTreatments</strong><br/>Open treatments</div><div class="mr-card"><strong>$auditDocs.size()</strong><br/>Audits recorded</div><div class="mr-card"><strong>$openFindings</strong><br/>Open findings</div><div class="mr-card"><strong>$openActions</strong><br/>Open corrective actions</div></div>
33 <div class="mr-section"><h2>Review inputs</h2><ul><li>Status of actions from previous management reviews.</li><li>Changes in internal/external issues, interested parties and information-security requirements.</li><li>Performance and trends: nonconformities/corrective actions, monitoring/measurement, audit results and objectives.</li><li>Feedback from interested parties.</li><li>Risk assessment results and status of risk treatment plans.</li><li>Opportunities for continual improvement.</li></ul></div>
34 <div class="mr-section"><h2>Useful evidence links</h2><p><a href="$xwiki.getURL('ISMS.RiskReport','view')">Risk Report</a> | <a href="$xwiki.getURL('ISMS.SoAReport','view')">Statement of Applicability Report</a> | <a href="$xwiki.getURL('ISMS.DataQuality','view')">Data Quality</a> | <a href="$xwiki.getURL('Audits.WebHome','view')">Audits</a> | <a href="$xwiki.getURL('Corrective Actions.WebHome','view')">Corrective Actions</a></p></div>
35 <div class="mr-section"><h2>Decisions and outputs</h2><p>Capture decisions related to continual improvement opportunities and changes needed to the ISMS, including resources, owners and target dates. Store the approved minutes as a controlled record/evidence item.</p></div>
36 {{/html}}
37 {{/velocity}}