Во-первых, после else пропущен if для проверки другого условия
Во-вторых, parseInt("-10%") будет -10, что при сравнении > 0 даст ложь
В-третьих, parseInt("hit") будет NaN, которое при любом сравнении с чем угодно, в том числе c NaN даст ложь
Правильно проверять примерно так:
if('discount' in data && parseInt(data.discount) < 0) {
//...
} else if(data.hit === 'hit') {
//...
}