Я бы сказал, что идеальная картинка такая:
1. Есть процедура. При ее запуске всегда выполняется п.2 (кроме явного разрешения пропустить проверку, если мы прям уверены, что всё ок).
2. Есть пререквизиты, оформленные в одном месте полным списком. Можно в любой момент запросить валидность запуска процедуры и получить как краткий ответ "можно" / "нельзя" так и расширенный - что именно ок, что именно не ок.
3. Есть Интерфейс пользователя с опциями:
3.1. Кнопка отображается при прохождении п.2.
3.2. Кнопка активная при прохождении п.2.
3.3. Кнопка после нажатия проверяет п.2. Если можно - выполняет п.1, если нельзя - дает расширенный ответ почему нельзя.
3.4. Отдельная кнопка "Проверка" / "Предварительный запуск", выполняет п.2, дает расширенный ответ.
В каждом конкретном случае разработчик в зависимости от процесса / пользователей выбирает нужный вариант Интерфейса.
Плохо что в стандарте есть разные варианты реализации всех 3х пунктов, и на вскидку не припомню ни одной идеальной реализации