Because a store owner could want to implement and use one of the online Europe tax providers (similar to Strike Iron Basic in USA).
"Tax By Country & State" can do that if it's properly configured
You can't leave this feature half baked just because somebody in the future might want to use some online service that doesn't exist yet.
"Tax By Country & State" is too complicated and not targetted at VAT. That's why I wrote the VAT Provider in the first place!!!
We already have (now) a field in the database saying if a specified country is in the EU. We know if the customer is VAT registered or not. We know if we're shipping inside our own country, outside the EU, or to another country within the EU.
Now all we need to finish that calculation off is to know what tax rate to apply to each product.
Using that provider would mean setting up multiple entries for every country in the EU! (One entry for each VAT rate multiplied by the number of countries in the EU). All an EU shop needs is 2 or 3 VAT/tax categories (standard rate, zero rate etc). Once we've established that the customer is subject to VAT we really don't care any more what country they're in. The government of the country the shop is in sets the actual percentage rate, it doesn't matter if I'm shipping to Holland, Belgium or Italy if the customer is subject to VAT he pays the same rate (17.5% or 0% depending on category).
The easiest way to do it is to add a VAT rate/default tax rate field to the Tax Category. As you've taken most of the logic from the VAT Provider and put it into VAT Manager all the VAT Provider has to do is calculate the tax rate for each product.
Of course you could call it something like "Tax By Category provider" and then anybody who wants to be able to have different tax rates for different products can use it. Honestly, this feature is not in Nop. You can have one tax rate for everything, or you can use the complicated country/state provider which kinda defeats the object of writing all this code to simplify things for the end user. We've already established that the customer is subject to VAT, we don't care any more which country he's in.
The provider needn't be much more than:
// Get the tax category for the product:
ProductVariant product = calculateTaxRequest.Item;
if (product == null || product.IsTaxExempt)
return 0;
else if (product.TaxCategory == null)
throw new TaxCategoryNullException();
/* other logic/checks are now in TaxManager, we just don't get called if the order is VAT exempt */
// Get and return the tax rate associated with the tax category:
return product.TaxCategory.DefaultTaxRate;