Ideally this would be put into a concern (similar to how we've organized the other model logic).  I don't want to hold up this PR because we've got working and tested code, but can we create a technical debt ticket in the backlog about moving this into a concern/mixin?