Я бы порекомендовал набор таблиц базы данных и объединений.
Пример:
- Юрисдикция : список штатов, округов, стран, городов и т. Д.
- Продукт : очевидный
- Магазин : список мест, где вы продаете
- StoreJurisdiction (StoreID, JurisdictionID): список юрисдикций магазина
ответственность за сбор налогов за
- ProductTaxCode (ProductID int, TaxCodeID int): тип продукта для целей налогообложения: базовый, роскошный и т. Д.
- JurisdictionTaxCodeRate (JurisdictionID, TaxCodeID, InterestRate, RateType): для каждой применимой комбинации юрисдикции и Налогового кодекса укажите применяемую ставку налога и тип ставки (составной, простой и т. Д.). ).
Чтобы найти список применяемых налогов, все, что вам нужно, - это ВНУТРЕННЕЕ СОЕДИНЕНИЕ магазина, его юрисдикций, юрисдикция с указанием кодов для этих юрисдикций и налоговых кодов продукта.
Вы можете определить ProductTaxCode как View, чтобы все продукты получали TaxCode по умолчанию, если только не указан специальный. Абстрагируя TaxCode, вы можете иметь одинаковые метаданные о продукте (например, «Продукты питания») для разных регионов. Если в конкретной юрисдикции есть свое собственное определение «еда», вы просто добавляете код для конкретной юрисдикции и применяете его к продуктам по мере необходимости.
Это может потребовать некоторой настройки для покупок через Интернет, оптовых покупок и других ситуаций, когда продажа каким-то образом освобождается от налогов или покупатель несет ответственность за их возврат. Также потребуется настройка для ситуаций, когда местоположение покупателя, а не магазина, определяет ставку налога.
Другие хитрости: например, здесь, в Техасе, у нас выходной день "без налогов", когда государственные и местные налоги не собираются на некоторых классах продуктов, где цена продажи отдельного элемента ниже $ 100. Идея состоит в том, чтобы предоставить детям, отправляющимся в школу на новый год, более дешевые школьные принадлежности, одежду и т.д. Этот вид настройки может быть реализован с помощью таблицы диапазонов дат для каждого JurisdictionTaxCodeRate, выходящего в будущем настолько далеко, насколько это может быть запланировано.