File size: 2,198 Bytes
21f1a73
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
"""Input validation utilities."""
from typing import Dict, Any, Tuple
from pydantic import ValidationError
import json


class ValidationResult:
    """Structured validation result."""
    
    def __init__(self, is_valid: bool, errors: list = None, data: Any = None):
        self.is_valid = is_valid
        self.errors = errors or []
        self.data = data
    
    def to_dict(self) -> Dict[str, Any]:
        return {
            "valid": self.is_valid,
            "errors": self.errors,
            "data": self.data
        }


def validate_json_input(input_str: str) -> ValidationResult:
    """Validate that input is valid JSON."""
    try:
        data = json.loads(input_str)
        return ValidationResult(is_valid=True, data=data)
    except json.JSONDecodeError as e:
        return ValidationResult(
            is_valid=False,
            errors=[f"Invalid JSON format: {str(e)}"]
        )
    except Exception as e:
        return ValidationResult(
            is_valid=False,
            errors=[f"Unexpected error: {str(e)}"]
        )


def validate_claim_schema(claim_data: Dict[str, Any], schema_class) -> ValidationResult:
    """Validate claim data against Pydantic schema."""
    try:
        validated = schema_class(**claim_data)
        return ValidationResult(is_valid=True, data=validated.model_dump())
    except ValidationError as e:
        errors = []
        for error in e.errors():
            field = '.'.join(str(x) for x in error['loc'])
            errors.append(f"{field}: {error['msg']}")
        return ValidationResult(is_valid=False, errors=errors)
    except Exception as e:
        return ValidationResult(
            is_valid=False,
            errors=[f"Schema validation failed: {str(e)}"]
        )


def validate_required_fields(data: Dict[str, Any], required_fields: list) -> ValidationResult:
    """Check for required fields."""
    missing = [field for field in required_fields if field not in data or not data[field]]
    
    if missing:
        return ValidationResult(
            is_valid=False,
            errors=[f"Missing required fields: {', '.join(missing)}"]
        )
    return ValidationResult(is_valid=True, data=data)