|
|
from typing import List, Tuple |
|
|
from app.schemas import AnalyzedClause, RiskFinding |
|
|
|
|
|
|
|
|
|
|
|
RISK_DEFINITIONS = { |
|
|
"UNLIMITED_LIABILITY": {"score": 10, "description": "Clause imposes unlimited liability on the client."}, |
|
|
"ONE_SIDED_TERMINATION": {"score": 8, "description": "Termination rights are unfairly one-sided."}, |
|
|
"UNCLEAR_JURISDICTION": {"score": 6, "description": "Governing law or jurisdiction for disputes is ambiguous."}, |
|
|
"DPDP_NON_COMPLIANCE": {"score": 7, "description": "Data protection clause may not comply with the DPDP Act 2023."} |
|
|
} |
|
|
|
|
|
|
|
|
def calculate_scores(analyzed_clauses: List[AnalyzedClause]) -> Tuple[int, List[RiskFinding]]: |
|
|
""" |
|
|
Calculate the total risk score and return detailed findings. |
|
|
|
|
|
Args: |
|
|
analyzed_clauses: List of analyzed clauses with identified risks |
|
|
|
|
|
Returns: |
|
|
Tuple of (final_risk_score, all_findings) |
|
|
""" |
|
|
|
|
|
total_score = 0 |
|
|
all_findings = [] |
|
|
|
|
|
for clause in analyzed_clauses: |
|
|
for risk in clause.risks: |
|
|
|
|
|
all_findings.append(risk) |
|
|
|
|
|
|
|
|
total_score += risk.score |
|
|
|
|
|
return total_score, all_findings |
|
|
|
|
|
|
|
|
def get_risk_definition(risk_id: str) -> dict: |
|
|
""" |
|
|
Get risk definition by ID. |
|
|
|
|
|
Args: |
|
|
risk_id: The risk identifier |
|
|
|
|
|
Returns: |
|
|
Dictionary with score and description |
|
|
""" |
|
|
return RISK_DEFINITIONS.get(risk_id, {"score": 0, "description": "Unknown risk"}) |
|
|
|