from enum import Enum, IntEnum, auto
[docs]class AlarmType(Enum):
LOW_PRESSURE = auto() # low airway pressure alarm
HIGH_PRESSURE = auto() # high airway pressure alarm
LOW_VTE = auto() # low VTE
HIGH_VTE = auto()
LOW_PEEP = auto()
HIGH_PEEP = auto()
LOW_O2 = auto()
HIGH_O2 = auto()
OBSTRUCTION = auto()
LEAK = auto()
SENSORS_STUCK = auto()
BAD_SENSOR_READINGS = auto()
MISSED_HEARTBEAT = auto()
@property
def human_name(self) -> str:
"""Replace ``.name`` underscores with spaces"""
return self.name.replace('_', ' ')
[docs]class AlarmSeverity(IntEnum):
HIGH = 3
MEDIUM = 2
LOW = 1
OFF = 0
TECHNICAL = -1
from pvp.alarm import condition
from pvp.alarm import AlarmType, AlarmSeverity
from pvp.alarm.rule import Alarm_Rule
from pvp.alarm.alarm import Alarm
from pvp.alarm.alarm_manager import Alarm_Manager
from pvp.common.values import ValueName, VALUES
from collections import OrderedDict as odict
ALARM_RULES = odict({
AlarmType.LOW_PRESSURE: Alarm_Rule(
name = AlarmType.LOW_PRESSURE,
latch = False,
conditions = (
(
AlarmSeverity.LOW,
condition.ValueCondition(
value_name=ValueName.PIP,
limit=VALUES[ValueName.PIP]['safe_range'][0],
mode='min',
depends={
'value_name': ValueName.PIP,
'value_attr': 'value',
'condition_attr': 'limit',
'transform': lambda x : x-(x*0.10)
}
)
),
(
AlarmSeverity.MEDIUM,
condition.ValueCondition(
value_name=ValueName.PIP,
limit=VALUES[ValueName.PIP]['safe_range'][0]- \
VALUES[ValueName.PIP]['safe_range'][0]*0.15,
depends={
'value_name': ValueName.PIP,
'value_attr': 'value',
'condition_attr': 'limit',
'transform': lambda x: x - (x * 0.15)
},
mode='min'
) + \
condition.CycleAlarmSeverityCondition(
alarm_type = AlarmType.LOW_PRESSURE,
severity = AlarmSeverity.LOW,
n_cycles = 2
)
)
)
),
AlarmType.HIGH_PRESSURE: Alarm_Rule(
name = AlarmType.HIGH_PRESSURE,
latch = True,
conditions = (
(
AlarmSeverity.HIGH,
condition.ValueCondition(
value_name=ValueName.PRESSURE,
limit=VALUES[ValueName.PIP]['safe_range'][1],
mode='max',
depends={
'value_name': ValueName.PIP,
'value_attr': 'value',
'condition_attr': 'limit',
'transform': lambda x : x+(x*0.15)
}
)
),
)
),
AlarmType.LOW_VTE: Alarm_Rule(
name = AlarmType.LOW_VTE,
latch = False,
conditions = (
(
AlarmSeverity.LOW,
condition.ValueCondition(
value_name=ValueName.VTE,
limit=VALUES[ValueName.VTE]['safe_range'][0],
mode='min',
depends={
'value_name': ValueName.VTE,
'value_attr': 'value',
'condition_attr': 'limit',
'transform': lambda x : x-(x*0.15)
}
)
),
(
AlarmSeverity.MEDIUM,
condition.ValueCondition(
value_name=ValueName.VTE,
limit=VALUES[ValueName.VTE]['safe_range'][0]- \
VALUES[ValueName.VTE]['safe_range'][0]*0.15,
mode='min',
depends={
'value_name': ValueName.VTE,
'value_attr': 'value',
'condition_attr': 'limit',
'transform': lambda x : x-(x*0.25)
}
) + \
condition.CycleAlarmSeverityCondition(
alarm_type = AlarmType.LOW_VTE,
severity = AlarmSeverity.LOW,
n_cycles = 2
)
)
)
),
AlarmType.HIGH_VTE: Alarm_Rule(
name = AlarmType.HIGH_VTE,
latch = False,
conditions = (
(
AlarmSeverity.LOW,
condition.ValueCondition(
value_name=ValueName.VTE,
limit=VALUES[ValueName.VTE]['safe_range'][1],
mode='max',
depends={
'value_name': ValueName.VTE,
'value_attr': 'value',
'condition_attr': 'limit',
'transform': lambda x : x+(x*0.15)
}
)
),
(
AlarmSeverity.MEDIUM,
condition.ValueCondition(
value_name=ValueName.VTE,
limit=VALUES[ValueName.VTE]['safe_range'][1]+ \
VALUES[ValueName.VTE]['safe_range'][1]*0.15,
mode='max',
depends={
'value_name': ValueName.VTE,
'value_attr': 'value',
'condition_attr': 'limit',
'transform': lambda x : x+(x*0.25)
}
) + \
condition.CycleAlarmSeverityCondition(
alarm_type = AlarmType.HIGH_VTE,
severity = AlarmSeverity.LOW,
n_cycles = 2
)
)
)
),
AlarmType.LOW_PEEP: Alarm_Rule(
name = AlarmType.LOW_PEEP,
latch = False,
conditions = (
(
AlarmSeverity.MEDIUM,
condition.ValueCondition(
value_name=ValueName.PEEP,
limit=VALUES[ValueName.PEEP]['safe_range'][0],
mode='min',
depends= {
'value_name': ValueName.PEEP,
'value_attr': 'value',
'condition_attr': 'limit',
'transform': lambda x : x-(x*0.15)
}
)
),
)
),
AlarmType.HIGH_PEEP: Alarm_Rule(
name = AlarmType.HIGH_PEEP,
latch = False,
conditions = (
(
AlarmSeverity.MEDIUM,
condition.ValueCondition(
value_name=ValueName.PEEP,
limit=VALUES[ValueName.PEEP]['safe_range'][1],
mode='max',
depends={
'value_name': ValueName.PEEP,
'value_attr': 'value',
'condition_attr': 'limit',
'transform': lambda x: x + (x * 0.15)
}
)
),
)
),
AlarmType.LOW_O2: Alarm_Rule(
name=AlarmType.LOW_O2,
latch=False,
conditions=(
(
AlarmSeverity.MEDIUM,
condition.ValueCondition(
value_name=ValueName.FIO2,
limit=VALUES[ValueName.FIO2]['safe_range'][0],
mode='min'
)
),
)
),
AlarmType.HIGH_O2: Alarm_Rule(
name=AlarmType.HIGH_O2,
latch=False,
conditions=(
(
AlarmSeverity.MEDIUM,
condition.ValueCondition(
value_name=ValueName.FIO2,
limit=VALUES[ValueName.FIO2]['safe_range'][1],
mode='max'
)
),
)
),
})
"""
Definitions of all :class:`.Alarm_Rule` s used by the :class:`.Alarm_Manager`
See definitions `here <_modules/pvp/alarm.html>`_
"""