Возможно, этот ответ слишком тривиален / очевиден для вас, но я просто подумал, как бы решить что-то подобное в моем текущем существующем проекте, который является приложением Zend Framework. Я думал о фильтрах и валидаторах, которые использует ZF. Я предполагаю, что у вас есть конечное число возможных входных объектов, конечное число условий / ограничений и конечное число действий. В этом случае вы должны сначала создать экземпляр объекта и запустить его в цепочке условий (валидаторов), если все условия выполнены, вы запускаете объект против actionChain. Здесь я, вероятно, должен был бы внедрить какую-то систему приоритетов действий, поскольку некоторые действия должны выполняться раньше других. Например, «отправить уведомление», а затем «удалить» рассматриваемый объект. Так что в ZF я бы создал собственный валидатор для каждого условия / ограничения. Я не верю, что система Outlook очень интеллектуальная, а это значит, что я не считаю валидаторы очень общими.
В БД может быть таблица для фактических правил, одна для условий и одна для действий. Тогда может быть две таблицы «многие ко многим», связывающие правило со всеми необходимыми условиями и действиями.