class TransaksiQueryPlanService:
    def summarize(self, plan_map):
        summary = {}
        for key, details in (plan_map or {}).items():
            entries = [str(item or "") for item in (details or [])]
            joined = " | ".join(entries)
            upper = joined.upper()
            full_scan = "SCAN " in upper and "USING INDEX" not in upper and "USING COVERING INDEX" not in upper
            summary[key] = {
                "details": entries,
                "full_scan": full_scan,
            }
        return summary

    def has_full_scan(self, summary_map):
        for payload in (summary_map or {}).values():
            if bool((payload or {}).get("full_scan")):
                return True
        return False
