Source code for src.dackar.RCA.pm_compliance.currency_checker

"""PMCurrencyChecker — PM interval vs. recurrence (advisory)."""

from __future__ import annotations

from typing import Optional

from .types import JsonDict


[docs] def frequency_concern( pm_interval_days: Optional[float], mean_failure_interval_days: Optional[float], ratio: float = 0.5, ) -> bool: """True when *pm_interval_days* is long relative to mean failure spacing.""" if not pm_interval_days or not mean_failure_interval_days: return False if mean_failure_interval_days <= 0: return False return pm_interval_days > ratio * mean_failure_interval_days
[docs] def mean_interval_from_tskr(kg_context: Optional[JsonDict], fm_id: str) -> Optional[float]: """Best-effort: use recurrence or FM metadata; otherwise None.""" if not kg_context or not fm_id: return None for fm in kg_context.get("failure_modes") or []: if str(fm.get("fm_id")) == str(fm_id): v = fm.get("mean_time_between_events_days") if v is not None: return float(v) return None