Soak rajma overnight. Next day wash it under fresh water and keep aside.
Put soaked rajma with 6 cups of water in a big pot and boil on medium heat for an hour. (keep checking in between that it does not burn, remove foam from the top in- between)
Meanwhile, chop onions, puree it with a mixer and keep aside. Chop tomatoes, puree it separately and keep aside. Put cashews and milk in the mixer, puree it and keep aside.
Heat oil in a big pan. Add bay leaves, cinnamon, cardamom and crushed garlic. Cook for 30 seconds.
Add pureed onions and 1/4 cup water; cook until the smell of raw onion goes away - approximately 6 to 7 minutes.
Add tomato puree, chili powder, garam masala, coriander powder, cumin powder, amchur and salt. Cook on medium heat for 10 min.
Once rajma is boiled, add (remove the cooked liquid) it together with 1/4 cup water. Cook for 10 min on high flame.
Add cashew paste, ketchup and 1/2 cup water and cook for another 10 min. on medium heat.
Add a knob of butter and cook for 5 minutes on high flame.
Transfer it to a serving bowl and top it with buffalo mozzarella, balsamic cream and green onions. Serve with rice/bread/chapati or naan.
Notes
The idea of pureeing tomato and cashew separately is due to the fact that cashews need to be pureed really fine in a paste while tomato puree should be little thicker consistency. If tomatoes are added to it, then tomato puree will become very watery.