from __future__ import annotations from datetime import date from typing import Any TEMPORARY_CONTRIBUTOR_PERMISSIONS = frozenset({"review"}) def contributor_access_status( active_review_dates: list[date], calibration_review_count: int, calibration_passed: bool, maximum_active_days: int = 7, required_calibration_reviews: int = 100, ) -> dict[str, Any]: used_days = len(set(active_review_dates)) independent_review_allowed = ( calibration_passed and calibration_review_count >= required_calibration_reviews and used_days < maximum_active_days ) return { "active_days_used": used_days, "active_days_remaining": max(0, maximum_active_days - used_days), "calibration_complete": calibration_passed and calibration_review_count >= required_calibration_reviews, "independent_review_allowed": independent_review_allowed, "permissions": sorted(TEMPORARY_CONTRIBUTOR_PERMISSIONS), } def assert_contributor_action_allowed(action: str) -> None: if action not in TEMPORARY_CONTRIBUTOR_PERMISSIONS: raise PermissionError(f"Temporary contributors cannot perform action: {action}")