Currently it deviates on "contains payload elements typically used in IM" and handling of groupchat messages.
It's unclear to me what messages would have IM payloads but are not be type = chat|normal|groupchat. We don't want to carbon type=groupchat that happens to have chatstates for example.
Messages with receipts are currently implicitly covered if they get archived by mod_mam, so an explicit check could be added there. But here too it would be weird to cover type=groupchat.