For some reason, Java/Kotlin takes 80% as a mandatory criterion. There is a feeling that this is not something derived from experience, but simply based on Pareto’s law. I.e. we do not want full coverage (code quality), but only hunt for an easy target.
In practice, for Kotlin backend code, I would set 92%: this often means full coverage. Technically, 100% is still not particularly possible due to various constructions with null, logs, or unreachable code (when the compiler does not understand that it cannot be reached).
Naturally, no classes need to be excluded. For example, some programmers like to exclude model classes (DTO), but there may also be handwritten methods at some point. At the same time, the utilities usually show 100% coverage there, so it’s unclear why to exclude it.