Skip to content

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`);
}

Released under the MIT License.