Risk Management Examples
Complete examples for risk management workflows.
Risk Dashboard
typescript
import { DeIterateClient } from '@deiterate/sdk';
const client = new DeIterateClient({
apiKey: process.env.DEITERATE_API_KEY!,
organizationId: process.env.DEITERATE_ORG_ID,
});
async function riskDashboard() {
const response = await client.risks.list();
const risks = response.risks;
// Count by severity
const bySeverity = { critical: 0, high: 0, medium: 0, low: 0 };
const byStatus = { active: 0, mitigated: 0, archived: 0 };
for (const risk of risks) {
const sev = (risk.inherentRisk || 'low').toLowerCase();
if (sev in bySeverity) {
bySeverity[sev as keyof typeof bySeverity]++;
}
const status = (risk.status || 'active').toLowerCase();
if (status in byStatus) {
byStatus[status as keyof typeof byStatus]++;
}
}
console.log('=== Risk Dashboard ===\n');
console.log(`Total Risks: ${risks.length}\n`);
console.log('By Severity:');
console.log(` 🔴 Critical: ${bySeverity.critical}`);
console.log(` 🟠 High: ${bySeverity.high}`);
console.log(` 🟡 Medium: ${bySeverity.medium}`);
console.log(` 🟢 Low: ${bySeverity.low}`);
console.log('\nBy Status:');
console.log(` ⚠️ Active: ${byStatus.active}`);
console.log(` ✅ Mitigated: ${byStatus.mitigated}`);
console.log(` 📦 Archived: ${byStatus.archived}`);
}
riskDashboard();Create Risk with Controls
typescript
async function createRiskWithControls() {
// Create a new risk
const risk = await client.risks.create({
riskID: 101,
risk: 'Cloud Service Provider Failure',
description: 'Risk of critical cloud services becoming unavailable',
riskCategory: 'Operational',
businessUnit: 'IT Operations',
inherentRisk: 'High',
residualRisk: 'Medium',
treatRequired: 'Yes',
treatmentPlan: 'Implement multi-cloud strategy and DR procedures',
});
console.log(`Created risk: ${risk.id}`);
// Link controls to the risk
await client.risks.update(risk.id!, {
selectedControls: ['A.17.1.1', 'A.17.1.2', 'A.17.2.1'],
});
console.log('Linked 3 controls to the risk');
return risk;
}Find High-Risk Items
typescript
async function findHighRiskItems() {
const response = await client.risks.list();
const highRisk = response.risks.filter(risk => {
const inherent = risk.inherentRisk?.toLowerCase();
return inherent === 'high' || inherent === 'extreme' || inherent === 'critical';
});
console.log(`High/Critical Risks: ${highRisk.length}\n`);
for (const risk of highRisk) {
console.log(`• ${risk.risk}`);
console.log(` Category: ${risk.riskCategory || 'Uncategorized'}`);
console.log(` Owner: ${risk.riskOwner || 'Unassigned'}`);
console.log(` Inherent: ${risk.inherentRisk} → Residual: ${risk.residualRisk || 'N/A'}`);
console.log();
}
}Risk Review Workflow
typescript
async function reviewRisks() {
const response = await client.risks.list();
const now = new Date();
// Find risks due for review
const dueForReview = response.risks.filter(risk => {
if (!risk.nextReviewDate) return false;
return new Date(risk.nextReviewDate) <= now;
});
console.log(`Risks due for review: ${dueForReview.length}\n`);
for (const risk of dueForReview) {
console.log(`Reviewing: ${risk.risk}`);
// Mark as reviewed
await client.risks.review(risk.id!, 'Quarterly review completed');
console.log(` ✓ Reviewed`);
}
}Export Risks to CSV
typescript
async function exportRisksToCSV() {
const response = await client.risks.list();
const headers = [
'ID', 'Risk', 'Category', 'Owner',
'Inherent Risk', 'Residual Risk', 'Status'
];
const rows = response.risks.map(risk => [
risk.riskID,
risk.risk,
risk.riskCategory,
risk.riskOwner,
risk.inherentRisk,
risk.residualRisk,
risk.status,
]);
const csv = [
headers.join(','),
...rows.map(row => row.map(v => `"${v || ''}"`).join(','))
].join('\n');
// Write to file or return
console.log(csv);
}Sync Risks from External Source
typescript
interface ExternalRisk {
id: string;
name: string;
severity: string;
category: string;
}
async function syncRisksFromExternal(externalRisks: ExternalRisk[]) {
const existing = await client.risks.list();
const existingMap = new Map(
existing.risks.map(r => [r.riskID?.toString(), r])
);
let created = 0;
let updated = 0;
for (const ext of externalRisks) {
const existing = existingMap.get(ext.id);
if (existing) {
await client.risks.update(existing.id!, {
risk: ext.name,
riskCategory: ext.category,
inherentRisk: ext.severity as any,
});
updated++;
} else {
await client.risks.create({
riskID: parseInt(ext.id),
risk: ext.name,
riskCategory: ext.category,
inherentRisk: ext.severity as any,
});
created++;
}
}
console.log(`Sync complete: ${created} created, ${updated} updated`);
}