Files
boc/life-weather/state_engine.py
T
Bernt aee0f09db8 landvex: Fixar och tester klara för alla komponenter
- Datafabrik: Dockerfile fix, agentorkestrering fungerar
- Vision: Identify-modell, FAISS, OCR alla testade
- API: Alla 7 integrationstester passerade
- Upplösare: Entitetsupplösning verifierad
2026-07-05 06:41:32 +00:00

78 lines
2.5 KiB
Python

#!/usr/bin/env python3
"""
Reality State Engine
Hanterar objektets livscykel
"""
from enum import Enum
from datetime import datetime
class RealityState(Enum):
NORMAL = "normal"
WATCH = "watch"
WARNING = "warning"
CRITICAL = "critical"
VERIFICATION = "verification"
RESOLVED = "resolved"
class StateEngine:
"""Hanterar state-övergångar"""
def __init__(self):
self.transitions = {
RealityState.NORMAL: [RealityState.WATCH, RealityState.WARNING, RealityState.CRITICAL],
RealityState.WATCH: [RealityState.NORMAL, RealityState.WARNING, RealityState.CRITICAL],
RealityState.WARNING: [RealityState.NORMAL, RealityState.WATCH, RealityState.CRITICAL, RealityState.VERIFICATION],
RealityState.CRITICAL: [RealityState.VERIFICATION, RealityState.WARNING],
RealityState.VERIFICATION: [RealityState.RESOLVED, RealityState.CRITICAL],
RealityState.RESOLVED: [RealityState.NORMAL]
}
def calculate_state(self, risks):
"""Beräkna state baserat på risker"""
if not risks:
return RealityState.NORMAL
severities = [r["severity"] for r in risks]
if "critical" in severities:
return RealityState.CRITICAL
elif "high" in severities:
return RealityState.WARNING
elif "medium" in severities:
return RealityState.WATCH
return RealityState.NORMAL
def can_transition(self, current_state, new_state):
"""Kontrollera om övergång är tillåten"""
return new_state in self.transitions.get(current_state, [])
def transition(self, road_id, current_state, new_state, reason=""):
"""Utför state-övergång"""
if not self.can_transition(current_state, new_state):
return None
return {
"road_id": road_id,
"from_state": current_state.value,
"to_state": new_state.value,
"timestamp": datetime.now().isoformat(),
"reason": reason
}
if __name__ == "__main__":
engine = StateEngine()
# Testa
risks = [{"severity": "critical"}]
state = engine.calculate_state(risks)
print(f"State med critical risk: {state.value}")
risks = [{"severity": "high"}]
state = engine.calculate_state(risks)
print(f"State med high risk: {state.value}")
risks = []
state = engine.calculate_state(risks)
print(f"State utan risker: {state.value}")