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 |