Well, if your Haunter was at 100 percent and the opponent's Camerupt was lower than that, it clearly isn't ratio. Given your example and Haunter's terrible base HP stat, I am convinced that the Body criterion judges the final absolute HP value of each Pokemon. Furthermore, even though it's GameFAQs, multiple people in the source suggest the same phenomenon.