"""Create recovery_planner
Generated by Phi-Octopus Eden
2025-11-06 10:39:56.736921
"""

```python
from typing import Dict


class RecoveryPlanner:
    """
    A class to manage limited error recovery for a system.
    
    Attributes:
        errors (Dict[str, int]): A dictionary mapping error types to their recovery attempts count.
    """
    def __init__(self):
        self.errors = {}
    
    def record_error(self, error_type: str) -> None:
        """
        Record an occurrence of the given error type and increment its recovery attempt count.
        
        Args:
            error_type (str): The type of error that occurred.
        """
        if error_type not in self.errors:
            self.errors[error_type] = 0
        self.errors[error_type] += 1
    
    def plan_recovery(self, max_attempts: int) -> Dict[str, int]:
        """
        Plan recovery actions based on the number of attempts for each recorded error type.
        
        Args:
            max_attempts (int): The maximum number of allowed recovery attempts before shutting down a service.
            
        Returns:
            Dict[str, int]: A dictionary mapping error types to their current attempt count, which will be used
                            in planning recovery actions.
        """
        return {error: self.errors[error] for error, self.errors[error] in self.errors.items() if self.errors[error] > max_attempts}
    
    def reset_errors(self) -> None:
        """
        Reset the error records to start fresh after successful recoveries or system restarts.
        """
        self.errors = {}


# Example Usage
if __name__ == "__main__":
    planner = RecoveryPlanner()
    
    # Simulate some errors
    for _ in range(5):
        planner.record_error("NetworkTimeout")
    
    for _ in range(3):
        planner.record_error("DatabaseConnectionLost")
    
    for _ in range(20):
        planner.record_error("UserInputValidationFailed")
    
    max_attempts = 10
    
    # Plan recovery actions
    recovery_plan = planner.plan_recovery(max_attempts)
    print(f"Recovery plan: {recovery_plan}")
    
    # Reset error records
    planner.reset_errors()
```