Indeed when I tried with https://brouter.de/brouter-web/ here it also tried to cross the road where there's no crossing but I customised the routing profile (increasing path_preference from 0 to 20) and then it avoided crossing at the non-crossing instead re-routing me along the mapped footpaths and through the designated crossing.

So essentially I think this issue is best addressed in your routing engine profile and it's not really an issue with how the data is mapped in my view.