Preheat the oven to 200C/400F/Gas 6.
Heat a large saucepan over a medium heat and add the oil. Once hot, fry the onions and carrots gently with a pinch of salt for 6-7 minutes, or until the onions are translucent but not browned. Add the garlic and cook for another two minutes.
Add the mince and stir to mix. Cook for 5-6 minutes or until all the raw meat has turned brown. Add the baked beans, tomatoes and stock. Simmer the mixture for 30-40 minutes without a lid to allow the mix to reduce and thicken a little.
Once cooked, pour into a medium sized baking dish about 21x27cm/8x11in. Taste and add salt and pepper as necessary. Leave to cool and then chill in the fridge for 20 minutes - this will prevent the mashed potato sinking into it too much.
Meanwhile boil the potatoes in a saucepan of salted boiling water for 15 minutes until tender. Remove and drain, leaving to steam dry in the colander for 3-4 minutes.
Heat the milk and butter together in the pan you used to cook the potatoes, until the butter is melted. Once the potatoes are dried a little, place back into the saucepan and mash with a potato masher until smooth, mixing well with the butter and milk. Taste and add salt and pepper to taste.
Layer the mashed potato on top of the meat base in the baking dish and bake in the preheated oven to 25-30 minutes, or until bubbling and the potato top is golden-brown.