I don't think there is any documentation that you can find and read specially since "ban score" is not part of the protocol (it is not part of consensus rules), it is what bitcoin core defines and uses internally to prevent abuse and can change.
You'll have to read the source code to understand the details of it. As far as I can tell it is all happening in the
net_processing.cpp file by making calls to the
Misbehaving() method and passing a value as the "points" to add to the misbehaving point of the peer (that is the ban score). As long as the total point doesn't surpass the threshold (default=100) the connection will remain open otherwise it will be terminated.
Some examples of the "unacceptable" behavior that would disconnect a peer is sending an invalid
block or
block header or
transaction which would ban the peer.
Other times where the peer would be given a "yellow card" instead of being banned are when they break some other "soft" rules like
sending more headers in a headers message as they should, or when they
send you a block that you don't have the parent to.