Rinse the beans, then transfer to a pot and just cover with water. Add half as much water again. Bring to the boil, then gently simmer until tender, but not mushy. Season and set aside.
Warm the olive oil until hot, but not smoking. Add the onion, celery, carrot, chard (stalks only), garlic, chilli and bay leaves. Season generously, then fry for 20 minutes, stirring every so often, until lightly caramelised.
Meanwhile, cut the tomatoes in half and discard the seeds. Squeeze over a bowl to release the juice. Set aside.
Add the parsley and oregano (or marjoram), basil and celery leaves, then fry for another 5 minutes. Add the tomatoes with their liquid, and break them up with a spoon. Cook for about 20 minutes over a low heat. The tomato liquid should be absorbed by the other vegetables.
Add the beans and their cooking liquid. Simmer over a low heat for about 20 minutes, or until the soup comes together. Stir in the chard leaves and simmer for a couple more minutes. Adjust the seasoning.
Cover the soup with bread. Pour just enough boiling water over it all to moisten the bread. Generously drizzle with oil and remove the pot from the heat.
Set aside for 10 minutes, then stir to combine. It should be thick and delicious. Season again, if needed. Drizzle with oil, then serve.