"""MCP tools — aggregated legal arguments (claim de-duplication).""" from __future__ import annotations import json from uuid import UUID from legal_mcp.services import argument_aggregator, db async def aggregate_claims_to_arguments( case_number: str, force: bool = False, ) -> str: """כינוס פרופוזיציות גולמיות לטיעונים משפטיים מובחנים. Args: case_number: מספר תיק הערר. force: True = למחוק טיעונים קיימים ולחשב מחדש. """ case = await db.get_case_by_number(case_number) if not case: return json.dumps( {"status": "error", "message": f"תיק {case_number} לא נמצא."}, ensure_ascii=False, indent=2, ) case_id = UUID(case["id"]) result = await argument_aggregator.aggregate_claims_to_arguments( case_id, force=force, ) result["case_number"] = case_number return json.dumps(result, ensure_ascii=False, indent=2, default=str) async def get_legal_arguments( case_number: str, party: str = "", ) -> str: """שליפת טיעונים משפטיים מאוגדים לתיק. Args: case_number: מספר תיק הערר. party: סינון לפי צד (appellant/respondent/committee/permit_applicant). ריק = כל הצדדים. """ case = await db.get_case_by_number(case_number) if not case: return json.dumps( {"status": "error", "message": f"תיק {case_number} לא נמצא."}, ensure_ascii=False, indent=2, ) case_id = UUID(case["id"]) args = await argument_aggregator.get_legal_arguments(case_id, party=party) if not args: return json.dumps({ "status": "empty", "case_number": case_number, "message": "לא נמצאו טיעונים מאוגדים. הרץ aggregate_claims_to_arguments תחילה.", "arguments": [], }, ensure_ascii=False, indent=2) # Group by party for nicer display. party_he = { "appellant": "עוררים", "respondent": "משיבים", "committee": "ועדה מקומית", "permit_applicant": "מבקשי היתר", "unknown": "צד לא מזוהה", } by_party: dict[str, list[dict]] = {} for a in args: label = party_he.get(a["party"], a["party"]) by_party.setdefault(label, []).append(a) return json.dumps({ "status": "ok", "case_number": case_number, "total": len(args), "by_party": by_party, }, ensure_ascii=False, indent=2, default=str)