bmc_hub/app/services/subscription_agreement.py
2026-08-28 20:49:55 +02:00

29 lines
1.3 KiB
Python

"""Pure agreement status rules shared by API and tests."""
from typing import Any, Dict, List
def agreement_status(subscriptions: List[Dict[str, Any]], changes: List[Dict[str, Any]]) -> str:
change_statuses = {row.get("status") for row in changes}
if change_statuses.intersection({"failed", "partially_applied"}):
return "Kræver handling"
if "pending" in change_statuses or "draft" in change_statuses:
return "Ændring afventer"
if change_statuses.intersection({"approved_scheduled", "applying"}):
return "Planlagt ændring"
statuses = [row.get("status") for row in subscriptions]
if not statuses or all(status in {"cancelled", "expired"} for status in statuses):
return "Afsluttet"
live = [status for status in statuses if status not in {"cancelled", "expired"}]
if live and all(status == "terminating" for status in live):
return "Under opsigelse"
if any(status in {"cancelled", "expired", "terminating"} for status in statuses):
return "Delvist opsagt"
if any(status == "paused" for status in statuses) and any(status == "active" for status in statuses):
return "Delvist pauseret"
if any(status == "active" for status in statuses):
return "Aktiv"
if statuses and all(status == "scheduled" for status in statuses):
return "Planlagt"
return "Kladde"