DIALSTATUS is a function of HANGUPCAUSE.
19 is no answer, not busy,
31 is normal clearing.
480 is the correct status for 19,
You haven’t provided the outgoing leg signalling, so I can’t tell whether 19 is the correct code based on the received status, or are you saying the call wasn’t attempted at all, which would normally indicate a more serious problem than subscriber busy.
app_dial will not set a DIALSTATUS of BUSY unless it has seen at least one cause 17, so I don’t see how you can get 19 and busy, unless another destination was called in parallel and returned busy.