I have a very simple view on what the approach to this should be.
1. Keep all business rules in a separate layer outside of application code - whatever you choose that layer to be.
2. Make exceptions to Rule 1 for specific edge cases that are
a) well documented and justified
b) ring-fenced in the code
The discipline of an enforced separation of validation/business rules layer is necessary because it prevents undesirable cohesion between such functionality and other components. Otherwise chances are you will end up in the scenario posited below (it is an excerpt from a Linkedin post by Dave Ziffler).
<quote>
I've been designing and coding applications for 40 years and I can tell you the greatest cost to companies that develop custom software: it is the ongoing maintenance and operational cost of poorly written applications. I see tons of coders coming out of schools with all sorts of computer language skills and UI subsystem knowledge (jQuery, Angular, you name it), but very few of them have the sorts of skills required to build code that is both efficient and comprehensible to others. To create quality code, a programmer needs fundamental organizational skills that predated the computer era and will no doubt postdate it as well: what are the components of the problem, how do you group the components appropriately, how do you model the problem in an elegant and extensible way, etc. Programmers lacking either these fundamental thinking skills or the discipline to use them, which is most programmers, write code that is a labyrinth of unnecessary complexity, redundancy, and confusion, and which is lacking in fundamental integrity (transactional integrity, data integrity, idempotence, etc.). By using enough trial-and-error you can get such code to pass its unit tests on day one, which is enough to make most managers happy. But all of these failures produce huge ongoing operational and maintenance costs that have plagued almost every organization I've ever worked for. I contend that most of the world's software systems would collapse within a week if they were not constantly attended to by an army of tens of thousands of IT staffers, constantly manually compensating for these systems' shortcomings.</quote>