Heat the olive oil in a heavy 4-quart saucepan over low heat. Add the onions and most of the garlic (reserving the 1 tablespoon to add later), and ham, stirring until the onion becomes translucent and the garlic is very fragrant, about 4 - 5 minutes. Do not let the onion or garlic take on any browning.
Add the cubes of bread and stir to coat the bread evenly with oil, about 2 -3 minutes. Add a bit more oil if needed.
Remove the pan from the heat and sprinkle in the paprika. Stir to coat the cubes of bread evenly. Return the pan to the burner and add the chicken stock. Increase the heat to medium and simmer for about 5 minutes. You want the bread to expand but retain its shape. Add the reserved 1 tablespoon of minced garlic and cook another minute or so. Tase and adjust seasoning.
To poach the eggs: Crack one egg into a small ramekin. Make a small well in the simmering soup and carefully pour out the egg into the prepared well. Do not disturb the egg once you pour it out. Repeat with remaining three eggs then cover the saucepan with a tight-fitting lid. Let the eggs poach in the simmering soup undisturbed for about 5 minutes until the whites are set and the yolks reach the desired consistency. (I prefer the yolks to be slightly runny, which when stirred into the soup, creates a velvety texture.)
Carefully ladle the soup into pre-warmed serving bowls, adding the poached egg last so it floats on top. Garnish with parsley and serve immediately.