if (box== null) throw new Exeption("Коробки нет на складе");
if (box.ready) throw new Exeption("Коробка уже отсканирована");
Куча if не есть хорошо. Почему бы вам просто не ввести понятие State, создать под него Enum со всеми возможными состояниями и применить шаблон, например,
Strategy . Под каждое конкретное состояние объекта нужно будет написать отдельный обработчик и из метода кидать не Exception, а просто передавать управление в нужный обработчик.
Как альтернативный вариант - посмотрите фреймворки, который позволяют организовать т.н.
Route, может быть вам понравится такая реализация. Если коробка есть на складе - пройти по пути 1, если коробки нет на складе - пройти по пути 2, если с коробки уже считан код - пройти по роуту 3 и т.д. Такая реализация, например, поможет наладить транзакционность из коробки.