Heat oil in a large saucepan over medium-high heat. Add onion and cook until softened, 6-7 minutes. Add garlic and cook 1 minute. Add meat and cook, breaking up with a spoon, until just cooked through, 5 minutes. Add cocoa, chilli powder, cumin, chipotle chilli powder, salt, pepper, and chilli flakes, and cook for 1 minute until fragrant. Add peppers, tomatoes and beans and bring to the boil. Cover, reduce heat, and simmer until most liquid is absorbed, 40-45 minutes.
Divide between 6 bowls and garnish with fresh coriander, onion and sour cream if desired.