Реализация стратегии налога с продаж для счетов - PullRequest
5 голосов
/ 07 декабря 2010

Здесь, в Южной Африке, у нас есть налог на добавленную стоимость (НДС), который в значительной степени идентичен налогу с продаж и в настоящее время установлен на уровне 14%, но может измениться в любое время.

Мне нужно включить НДС всчета (которые являются неизменяемыми), состоящие из нескольких строк счетов .Каждая строка ссылается на Product с логическим свойством IsTaxable, и почти все продукты облагаются налогом.

Я не хочу хранить цены до вычета налогов в базе данных, потому что это только усложняет задачуЧтобы прочитать реальную цену, которую покупатель собирается заплатить, и везде, где я показываю эти цены, я должен не забыть добавить налог.И когда ставка НДС действительно меняется, для этого конкретного бизнеса нежелательно, чтобы все цены изменялись автоматически.

Поэтому я считаю, что обратный расчет налога - это путь, который, вероятно, не редкость.Общая сумма счета-фактуры представляет собой сумму всех итоговых строк строки счета-фактуры, которая включает любые скидки по строке и должна включать налоги.Следовательно, сама сумма счета-фактуры не включает налоги:

TaxTotal = InvoiceTotal / (1 + TaxRate),

, где InvoiceTotal не включает налоги и TaxRate == 0.14

Поскольку счета-фактуры не могут быть изменены после их выдачи (они являются неизменяемыми),Должен ли я:

  1. Хранить одну сумму Tax в моей таблице Invoices, которая не изменяется?Или ...
  2. Сохранять сумму налога для каждой строки счета-фактуры и рассчитывать общую сумму налога-фактуры при каждом отображении счета-фактуры?

Вариант 2 кажется более безопасным с точки зрения администратора баз данных-после того, как если счет-фактура когда-либо изменяется вручную, то налог будет рассчитан правильно, , но , если счет-фактура уже был выставлен, это по-прежнему вызывает проблему несоответствия.Если я остановлюсь на варианте 1, то не смогу отобразить налог для отдельной позиции, но это упростит управление суммой налога и проведение совокупных вычислений, хотя при этом когда-либо изменится несоответствие.

Я не могусделайте и то и другое, поскольку это будет дублировать данные.

  • Какой правильный путь?Или обратный расчет налогов - действительно плохая идея?

Ответы [ 3 ]

4 голосов
/ 07 декабря 2010

Сохраните значение предналога в базе данных, вы также можете сохранить значение налога и использовать его для большинства случаев использования.

Эта большая проблема, на которую я рассчитываю, - это правила округления НДС в счетах.(по крайней мере, в Великобритании) очень строгие, и ваш обратный расчет не поможет вам сделать это правильно.

Кроме того, вам нужно хранить позицию налога по элементам, так как драконы НДС будут ожидать, что вы вернете точноналог уплачивается, если товар возвращается.Вам действительно нужно ознакомиться с местными правилами налогообложения продаж, прежде чем начать.

Мой опыт показывает, что вы можете перетаскивать угли, если ваши расчеты заканчиваются всего за копейки, и, если выпрошедшая аудит вы должны быть в состоянии показать, как вы пришли к показателю НДС, поэтому не сохраняя ничего, что использовалось в ваших расчетах, поймает вас.

1 голос
/ 07 декабря 2010

Я полностью согласен с Джеймсом Андерсоном! В Германии правила расчета НДС такие же строгие, как в Великобритании.

Мы должны накапливать чистую стоимость в процентах от НДС (у нас есть три типа: 0, 7 и 19 процентов), округленных до двух цифр. По этой округленной стоимости мы должны рассчитать НДС. НДС должен быть округлен до двух цифр и должен быть указан в счете.

Но тем не менее вы можете хранить цены, включая налоги. Это зависит от того, останутся ли чистые цены или конечные цены неизменными при повышении налога. В Германии обычно чистые цены B2B остаются неизменными, но конечные цены B2C остаются неизменными - это зависит.

Вы можете рассчитать это так:

with cPriceIncludingVAT as (
    select  InvoiceNo, VATPercentage,
            PriceIncludingVAT = cast(sum(amount * price) as decimal(12,2))
    from    InvoiceLines inner join VAT on VAT.VATID=InvoiceLines.VATID
    group by InvoiceNo, VATPercentage
),
cVATcalculated as (
    select  InvoiceNo, VATPercentage, PriceIncludingVAT,
            VAT = cast(PriceIncludingVAT * VATPercentage / 
                         (1+VATPercentage) as decimal(12,2))
    from    cVATcalculated
)
select    InvoiceNo, VATPercentage, PriceIncludingVAT, VAT,
          NetPrice = PriceIncludingVAT - VAT
from      cVATcalculated;

Если вы сохраните это как представление, вы сможете точно перепечатать динамически рассчитанное значение НДС. При наличии системы бухгалтерского учета вы можете (и должны) экспортировать точно такие же данные, которые вы напечатали. Обычно вы должны сохранять такие значения как значения полей в базе данных - но я понимаю, что вы хотите использовать более динамичный подход ...

0 голосов
/ 07 декабря 2010

Другие ответы хороши, но, как отмечает idevlop, почти наверняка в будущем вы начнете получать разные ставки для разных категорий продуктов.Добавление этой возможности заранее сэкономит вам массу душевных страданий.Был там, сделал это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...