Heat the olive oil in a large saucepan set over medium heat. Add the onion, carrots, celery, salt and pepper. Cook, stirring occasionally, until the onion is translucent and the carrots are beginning to soften, about 5 minutes.
Stir in the ginger, garlic, curry powder, ground coriander and cayenne pepper. Cook for 1 minute.
Add the tomatoes, broth and water. Bring to a boil, then reduce the heat so that the mixture cooks at a lively simmer.
Mash half of the beans with the back of a fork or a potato masher, then stir into the soup. Reserve the remaining beans. Simmer the soup for 20 minutes, stirring occasionally.
Add the remaining beans. Continue to simmer for 10 minutes.
Stir in the coconut milk, lime juice, spinach and parsley.
Taste and adjust seasoning as desired. Serve.