@dataclass
class Decision:
result: str
policy_id: str
reason: str
risk_level: str # Added from rule
confidence: float # Calculated during match
modifications: dict | None = None
approvers: list[str] | None = None
class PolicyDecisionPoint:
def __init__(self, policy_store: PolicyStore):
self.policies = policy_store
def evaluate(self, action: Action) -> Decision:
for rule in self.policies.get_rules():
# Calculate match confidence (e.g., semantic similarity or regex strength)
match_score = self.calculate_confidence(rule, action)
if match_score > rule.threshold:
return Decision(
result=rule.action,
policy_id=rule.id,
reason=rule.reason,
risk_level=rule.risk_level,
confidence=match_score,
modifications=rule.modifications,
approvers=rule.approvers
)
# Default allow if no rules match
return Decision(result="ALLOW", confidence=1.0, risk_level="LOW")