G>3) Хотим чтобы счета при конструировании были существующими. G>Стоит ли в данном случае изнутри БЛ кидать ArgumentException? Нужно ли в таком случае выдавать 400 клиенту? Или это уже 500 ошибка?
Если ошибка в бухгалтерии, то это уже не ArgumentException, а лучше бросать специализированное исключение. И тогда это уже 400, а не 500.
ArgumentException подходит только для самых простых проверок, типа должен прийти емейл, а неожиданно пришёл какой-то мусор. Такие неожиданные исключения можно трактовать наравне с аналогичными исключениями из третьесторонних библиотек и выдавать пользователю 500.