// evaluation-cmmi-engine.jsx — Verigo Global: CMMI v2.0 readiness evaluation engine // Target Maturity Level chosen in scope decides which practice areas are assessed. // Exposes window.EVAL_CMMI const { V: GV, MAXW: GMW, FONT: GFT } = window; // Build PA→icon lookup from CMMI_CATS global (loaded first by data file) const CMMI_PA_ICONS = {}; (function(){ CMMI_CATS.forEach(c => c.pas.forEach(p => { CMMI_PA_ICONS[p.code] = c.icon; })); })(); /* ── QUESTION BANK — 20 practice areas × 2 questions each ── */ const CMMI_Q = [ { code:'EST', name:'Estimating', ml2:true, docs:['Estimating & Planning Policy','Project Estimating Procedure'], q:[ ['EST 1.1','Estimates of work product size, effort, and cost are established and recorded.'],['EST 2.1','Estimates are reconciled with actual data and updated throughout the project.'], ]}, { code:'PLAN', name:'Planning', ml2:true, docs:['Estimating & Planning Policy','Project Planning Procedure'], q:[ ['PLAN 1.1','A project plan is established, documenting milestones, resources, and commitments.'],['PLAN 2.2','The plan is maintained and reconciled with available resources.'], ]}, { code:'MC', name:'Monitor and Control', ml2:true, docs:['Project Monitoring & Control Policy','Monitor & Control Procedure'], q:[ ['MC 1.1','Project performance is monitored against the plan at defined intervals.'],['MC 1.2','Corrective actions are taken and managed to closure when actual performance deviates from the plan.'], ]}, { code:'SAM', name:'Supplier Agreement Management', ml2:true, docs:['Supplier Agreement Management Policy','Supplier Evaluation & Agreement Procedure'], q:[ ['SAM 1.1','Formal supplier agreements define requirements, delivery, acceptance, and review criteria.'],['SAM 1.2','Supplier performance is monitored against agreements.'], ]}, { code:'RDM', name:'Requirements Development & Management', ml2:true, docs:['Requirements Management Policy','Requirements Development & Management Procedure'], q:[ ['RDM 1.1','Requirements are elicited, developed, analyzed, and recorded.'],['RDM 1.2','Requirements are traced bidirectionally throughout the project lifecycle.'], ]}, { code:'PQA', name:'Process Quality Assurance', ml2:true, docs:['Process Quality Assurance Policy','Quality Assurance Review Procedure'], q:[ ['PQA 1.1','Adherence of performed processes to applicable plans and standards is objectively evaluated.'],['PQA 2.1','Noncompliance issues are communicated and resolved.'], ]}, { code:'CM', name:'Configuration Management', ml2:true, docs:['Configuration Management Policy','Configuration Management Procedure'], q:[ ['CM 1.1','Configuration items are identified and baselines are established.'],['CM 2.1','Changes to configuration items are tracked and controlled; audits are conducted.'], ]}, { code:'MA', name:'Measurement and Analysis', ml2:true, docs:['Measurement & Analysis Policy','Measurement Data Collection Procedure'], q:[ ['MA 1.1','Measurement objectives and measures are established aligned to information needs.'],['MA 2.1','Measurement data is collected, stored, analyzed, and reported.'], ]}, { code:'GOV', name:'Governance', ml2:true, docs:['Process Management Policy'], q:[ ['GOV 1.1','Senior management commitment to CMMI processes is demonstrated and sustained.'],['GOV 1.2','Policies guide CMMI implementation across the organization.'], ]}, { code:'II', name:'Implementation Infrastructure', ml2:true, docs:['Process Management Policy'], q:[ ['II 1.1','Resources, roles, and repositories needed for process implementation are identified and provided.'],['II 2.1','Process support and guidance is accessible to practitioners.'], ]}, { code:'VV', name:'Verification and Validation', ml2:false, docs:['Verification & Validation Policy'], q:[ ['VV 1.1','Work products selected for verification are reviewed against requirements.'],['VV 2.2','Validation confirms that products meet their intended use in the target environment.'], ]}, { code:'TS', name:'Technical Solution', ml2:false, docs:['Technical Solution Policy'], q:[ ['TS 1.1','Technical solutions are selected and the product is designed to satisfy requirements.'],['TS 2.1','The design is implemented and integrated into a deliverable product or component.'], ]}, { code:'PI', name:'Product Integration', ml2:false, docs:['Process Management Policy'], q:[ ['PI 1.1','Product integration preparation ensures interface compatibility and integration sequences are defined.'],['PI 2.1','Product components are assembled and the integrated product is delivered.'], ]}, { code:'PR', name:'Peer Reviews', ml2:false, docs:['Peer Review Policy','Peer Review Procedure'], q:[ ['PR 1.1','Peer reviews are prepared with checklists, roles, and entry/exit criteria.'],['PR 2.1','Peer review data is analyzed and used to improve the work product and process.'], ]}, { code:'PCM', name:'Process Management', ml2:false, docs:['Process Management Policy'], q:[ ['PCM 1.1',"Organizational process needs are established and process performance baselines are maintained."],['PCM 2.2','The performance of the organization\'s processes is continuously monitored.'], ]}, { code:'OT', name:'Organizational Training', ml2:false, docs:['Process Management Policy'], q:[ ['OT 1.1','Skills needed for assigned roles are identified and training plans are established.'],['OT 2.1','Training effectiveness is assessed and training records are maintained.'], ]}, { code:'DAR', name:'Decision Analysis and Resolution', ml2:false, docs:['Decision Analysis & Resolution Policy'], q:[ ['DAR 1.1','Formal evaluation criteria are established for significant decisions.'],['DAR 2.1','Alternative solutions are evaluated against criteria and decisions are documented.'], ]}, { code:'RSK', name:'Risk and Opportunity Management', ml2:false, docs:['Risk & Opportunity Management Policy','Risk & Opportunity Management Procedure'], q:[ ['RSK 1.1','Risks are identified, categorized, and prioritized.'],['RSK 2.1','Risk mitigation plans are developed, implemented, and monitored.'], ]}, { code:'PAD', name:'Process Asset Development', ml2:false, docs:['Process Management Policy','Process Improvement Proposal Procedure'], q:[ ['PAD 1.1','Organizational process assets are established and maintained in a library.'],['PAD 2.1','Process improvement proposals are gathered, reviewed, and implemented.'], ]}, { code:'MPM', name:'Managing Performance and Measurement', ml2:false, docs:['Measurement & Analysis Policy'], q:[ ['MPM 1.1','Performance baselines and models are established to support quantitative management.'],['MPM 2.1','Performance data is used to manage selected processes quantitatively.'], ]}, { code:'CAR', name:'Causal Analysis and Resolution', ml2:false, docs:['Causal Analysis & Resolution Policy','Causal Analysis & Resolution Procedure'], q:[ ['CAR 1.1','Causes of defects and problems are identified and analyzed.'],['CAR 2.1','Corrective actions are implemented and their effect on process performance is evaluated.'], ]}, ]; const CMMI_ML_LABELS = { ml2:'ML2 · Managed', ml3:'ML3 · Defined', ml45:'ML4/5 · Quantitative' }; function mSectionsForML(ml) { const lv = (ml === 'ml2' || ml === 'ml3' || ml === 'ml45') ? ml : 'ml3'; const grp = CMMI_ML_LABELS[lv]; const list = lv === 'ml2' ? CMMI_Q.filter(p => p.ml2) : CMMI_Q; return list.map(p => ({ code: p.code, theme: p.code + ' · ' + p.name, group: grp, icon: CMMI_PA_ICONS[p.code] || 'layers', docs: p.docs, controls: (CMMI_CATS.find(c=>c.pas.find(pa=>pa.code===p.code))?.pas.find(pa=>pa.code===p.code)?.items.length||3), q: p.q })); } const COPTIONS = [['Not started',0],['Partial',1],['Largely',2],['Fully',3]]; const CBANDS = [ [0,'Initial',GV.orange,'Process activities are ad hoc — start with the ML2 essentials.'], [40,'Developing',GV.orange,'Some practices exist but key ML2 areas have gaps.'], [60,'Managed',GV.purple,'ML2 baseline is largely in place — focus on the remaining gaps.'], [80,'Defined',GV.purple,'Strong posture — formalize remaining practices and evidence for appraisal.'], ]; const cBandFor = pct => { let b=CBANDS[0]; CBANDS.forEach(x=>{ if(pct>=x[0]) b=x; }); return b; }; function mCompute(answers, sections) { const secs = sections || mSectionsForML('ml3'); const themes = secs.map((t,ti)=>{ const max=t.q.length*3; let sum=0; t.q.forEach((_,qi)=>{ sum+=(answers[ti+'-'+qi]||0); }); const pct=Math.round((sum/max)*100); return { theme:t.theme, code:t.code, group:t.group, icon:t.icon, docs:t.docs, controls:t.controls, pct, gaps:Math.round((1-pct/100)*t.controls) }; }); const overall=themes.length?Math.round(themes.reduce((a,t)=>a+t.pct,0)/themes.length):0; const totalControls=secs.reduce((a,t)=>a+t.controls,0); const gaps=themes.reduce((a,t)=>a+t.gaps,0); return { themes, overall, gaps, totalControls, level:(secs[0]&&secs[0].group)||CMMI_ML_LABELS.ml3, band:cBandFor(overall) }; } /* ── SEGMENTED ────────────────────────────────────────────── */ const MSegmented = ({ value, onChange }) => (
For each statement, choose how completely it reflects your organization today. Each maps to a specific CMMI v2.0 practice.
{text}
Answer all {cur.q.length} statements to continue.
}