File size: 2,054 Bytes
0418a32
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""Loader for compliance rules from all regulatory bodies"""

from .sec_rules import SEC_RULES
from .fca_rules import FCA_RULES
from .eu_rules import EU_RULES

class ComplianceRules:
    def __init__(self):
        self.rules = {
            "US_SEC": SEC_RULES,
            "UK_FCA": FCA_RULES,
            "EU": EU_RULES
        }
    
    def get_all_rules(self):
        """Return all compliance rules"""
        return self.rules
    
    def get_rules_by_region(self, region):
        """Get rules for a specific region"""
        return self.rules.get(region, {})
    
    def get_combined_prohibited_terms(self):
        """Get all prohibited terms across regions"""
        prohibited_terms = set()
        for region_rules in self.rules.values():
            for term_dict in region_rules["prohibited_terms"]:
                prohibited_terms.add(term_dict["term"])
                prohibited_terms.update(term_dict["variations"])
        return list(prohibited_terms)
    
    def get_channel_requirements(self, channel):
        """Get requirements for a specific channel across all regions"""
        requirements = {}
        for region, rules in self.rules.items():
            if "channel_specific_rules" in rules and channel in rules["channel_specific_rules"]:
                requirements[region] = rules["channel_specific_rules"][channel]
        return requirements
    
    def calculate_risk_score(self, violations, warnings, region):
        """Calculate risk score based on violations and warnings"""
        if region not in self.rules:
            return 0
            
        risk_scoring = self.rules[region]["risk_scoring"]
        score = 0
        
        for violation in violations:
            if "disclaimer" in violation.lower():
                score += risk_scoring["missing_disclaimer"]
            elif "prohibited" in violation.lower():
                score += risk_scoring["prohibited_term"]
            else:
                score += risk_scoring["misleading_statement"]
                
        return score