Assessor_2.0/src/domain/policy-comparison-dispositi...

15 lines
954 B
TypeScript

import type { PolicyEvaluationResult } from './policy-evaluation';
/** Read-time reporting contract; persisted evaluator evidence remains unchanged. */
export function policyComparisonDisposition(result: PolicyEvaluationResult): 'misconfigured' | 'not-configured' | undefined {
const { baseline, actual, relation } = result.comparator;
if (result.baselineState !== 'explicit-recommendation' || !baseline || baseline.kind === 'none'
|| (baseline.kind === 'text' && !baseline.value.trim())
|| result.diagnosticCodes.includes('policy-evaluation-baseline-consensus-conflict')
|| result.classification !== 'confirmed_configured_deviation'
|| !['different', 'weaker'].includes(relation)) return undefined;
if (result.customerState === 'missing' && (!actual || actual.kind === 'none')) return 'not-configured';
if (result.customerState === 'configured' && actual && actual.kind !== 'none') return 'misconfigured';
return undefined;
}