I would resist converting flood risk directly into a fixed percentage. Building access, parking level, drainage history and insurability could affect two nearby flats differently. Get the concern defined first; otherwise the adjustment gives false precision.
I slightly disagree with treating all rejected offers as useful data. A rejection only tells you something if you understand why it happened. Otherwise buyers may draw the wrong conclusion and raise the next offer unnecessarily. I’d record the price, conditions, timing and any feedback received...
The neighbourhood boundaries are probably doing more work than the broad Johannesburg label suggests. Two flats at similar prices may compete for quite different buyers if their immediate surroundings, access and building condition differ. I’d make the map smaller before drawing conclusions from...