adpa-enterprise-framework-automation
Version:
Modular, standards-compliant Node.js/TypeScript automation framework for enterprise requirements, project, and data management. Provides CLI and API for BABOK v3, PMBOK 7th Edition, and DMBOK 2.0 (in progress). Production-ready Express.js API with TypeSpe
80 lines • 3.82 kB
JavaScript
/**
* Validate Command Handler
* Validates generated documents against PMBOK standards
*/
import { join } from 'path';
import { writeFile } from 'fs/promises';
import { PMBOKValidator } from '../modules/pmbokValidation/PMBOKValidator.js';
import { DEFAULT_OUTPUT_DIR, COMPLIANCE_REPORT_FILENAME, PROMPT_ADJUSTMENT_REPORT_FILENAME } from '../constants.js';
/**
* Handler for the 'validate' command - validates documents against PMBOK
*/
export async function handleValidateCommand(options = {}) {
const { outputDir = DEFAULT_OUTPUT_DIR, quiet = false } = options;
if (!quiet) {
console.log('🔍 Validating documents against PMBOK standards...');
}
const validator = new PMBOKValidator();
const result = await validator.validatePMBOKCompliance();
if (!quiet) {
console.log('PMBOK Compliance:', result.compliance);
console.log('Critical Findings:', result.findings.critical);
console.log('Warnings:', result.findings.warnings);
console.log('Recommendations:', result.findings.recommendations);
console.log('Document Quality:', result.documentQuality);
}
// Generate and save Markdown compliance report
const mdReport = formatMarkdownReport(result);
const mdReportPath = join(outputDir, COMPLIANCE_REPORT_FILENAME);
await writeFile(mdReportPath, mdReport);
if (!quiet) {
console.log('Markdown compliance report written to:', mdReportPath);
}
// Generate and save prompt adjustment report
const promptReport = generatePromptAdjustmentReport(result);
const promptReportPath = join(outputDir, PROMPT_ADJUSTMENT_REPORT_FILENAME);
await writeFile(promptReportPath, promptReport);
if (!quiet) {
console.log('Prompt adjustment report written to:', promptReportPath);
}
}
/**
* Format validation results as Markdown
*/
function formatMarkdownReport(result) {
return `\n# PMBOK Compliance Report\n\n` +
`**Overall Compliance:** ${result.compliance ? '✅ Compliant' : '❌ Non-compliant'}\n\n` +
`## Critical Findings\n${result.findings.critical.length ? result.findings.critical.map((f) => `- ${f}`).join('\n') : 'None'}\n\n` +
`## Warnings\n${result.findings.warnings.length ? result.findings.warnings.map((f) => `- ${f}`).join('\n') : 'None'}\n\n` +
`## Recommendations\n${result.findings.recommendations.length ? result.findings.recommendations.map((f) => `- ${f}`).join('\n') : 'None'}\n\n` +
`## Document Quality\n${Object.entries(result.documentQuality).map(([doc, quality]) => {
const q = quality;
return `### ${doc}\n- Score: ${q.score}\n- Issues: ${q.issues.join('; ') || 'None'}\n- Strengths: ${q.strengths.join('; ') || 'None'}`;
}).join('\n\n')}`;
}
/**
* Generate prompt adjustment report based on validation results
*/
function generatePromptAdjustmentReport(result) {
const missingElementsByDoc = {};
for (const finding of result.findings.critical) {
const match = finding.match(/^(.+): Missing required PMBOK element '(.+)'/);
if (match) {
const [, doc, element] = match;
if (!missingElementsByDoc[doc])
missingElementsByDoc[doc] = [];
missingElementsByDoc[doc].push(element);
}
}
let promptReport = '\n=== PROMPT ADJUSTMENT REPORT ===\n';
for (const [doc, elements] of Object.entries(missingElementsByDoc)) {
const els = elements;
promptReport += `\nDocument: ${doc}\n`;
els.forEach(el => promptReport += ` - Missing required element: ${el}\n`);
}
if (Object.keys(missingElementsByDoc).length === 0) {
promptReport += 'All required PMBOK elements are present in your documents!\n';
}
return promptReport;
}
//# sourceMappingURL=validate.js.map