Не рассчитывай это. Сохраните это!
HMRC очень суетливы по поводу того, что им платят нужную сумму НДС. Округление расчетов НДС несколько неопределенно указано в руководствах пользователя, и, возможно, возникновение проблемы может быть оставлено на усмотрение будущих исполнителей. Эта проблема устраняется путем сохранения суммы при вводе счета-фактуры / отдельной позиции.
Это кажется пустой тратой памяти и нарушением принципов избыточности, но объем используемой памяти крошечный, и это может спасти много проблем в будущем. Конечно, само собой разумеется, что суммы в валюте (и, возможно, даже ставки НДС с дробной частью) должны храниться как умноженное целое число, чтобы избежать появления ошибок округления двоичного дробного представления.
Центральный тариф хранения
Вы должны абсолютно использовать централизованное хранилище тарифов. Тем не менее, я бы порекомендовал использовать только текущие ставки по умолчанию, используемые при вводе новых счетов. Они могут быть сохранены с датами начала и окончания для автоматического переключения при необходимости. Эти тарифы могут быть сохранены для каждого счета-фактуры (или строки счета-фактуры) вместе с рассчитанными суммами НДС на момент выставления счета-фактуры, чтобы получить абсолютный снимок ситуации на данный момент.
Не забудьте также учесть различные ставки НДС (например, стандартные, сниженные, с нулевой ставкой, без НДС) и возможность торговать с зарегистрированными субъектами НДС в других странах ЕС, где вам может не взиматься НДС. счет, который обычно облагается НДС.
Вы можете получить такую таблицу (пример):
id | Rate name | VAT rate | Start date | End date
---------------------------------------------------
1 | Standard | 1750 | 01/01/1991 | 30/11/2008
2 | Standard | 1500 | 01/12/2008 | 31/12/2009
etc
Приведенная выше таблица является лишь примером. Ставка НДС хранится в виде целого числа «базисных пунктов» (например, сотых долей процентного пункта), но предполагает, что ставка НДС никогда не будет превышать 2 знаков после запятой. Очевидно, вы могли бы расширить это с помощью дополнительного столбца, чтобы решить эту проблему, но, возможно, это будет слишком далеко!