The way I understand things is Inbound call at 10 N/mls or earlier; next immediately before joining circuit (so either Downwind or Base join) (If joining downwind I give no further calls, I'm in the circuit so no need to the base and final. Only exception I make is if an aircraft is lined up and I extend downwind I will call turning base, final to update the aircraft lined up.)
Straight in is 10 N/mls or before including straight in intention and the call by 3 N/mls of threshold.