Я собираюсь поговорить о нью-йоркских налогах и о том, как я реализовал свой код для обработки налогов, собранных через POS и отслеженных в налоговой отчетности. Многие из этих принципов будут применяться ко многим государствам.
Во-первых, существует «налоговая юрисдикция», и угадайте, что это не обязательно означает «округ» или «город», и определенно не «почтовый индекс», однако я уверен, что он всегда включает «штат». Итак, нам нужна таблица базы данных для «налоговой юрисдикции». Эта налоговая юрисдикция необходима для отчетности по налогу с продаж, собранному на NYS-100. Итак, вы должны отслеживать это, чтобы сделать это правильно. Если у меня есть магазин в Рочестере и Буффало, мне нужно отслеживать налог, собираемый как на местном уровне, так и на уровне штата, чтобы правильно обрабатывать квартальную налоговую форму. Таким образом, счет-фактура должен получить идентификатор налоговой юрисдикции.
Например, вот налоговые юрисдикции для Нью-Йорка, это взято из nys-100, налоговой отчетности .pdf, но в действительно полезной форме:
http://embrasse -moi.com / exampleData / new_york_tax_jurisdictions.csv
Нам, сообществу, нужны одни и те же данные для всех 50 штатов.
Так что продажи в магазине относительно легки, у меня есть налог штата и местный налог, который нужно отслеживать. К сожалению, мы должны собирать налоги в зависимости от места назначения в Нью-Йорке, а это значит, что нам необходимо, чтобы все «налоговые юрисдикции» в нашей базе данных были правильными. Разница в налоговых ставках, как правило, не превышает 0,75%, но может увеличиться при рассмотрении исключений, поэтому, чтобы обойти добавление всех ставок местного налога, мы бы рискнули и использовали ставку по умолчанию 4%, если в комиссии взимается аудит более чем вероятно, будет меньше, чем стоимость внедрения и обслуживания полной ставки налога, но это зависит от вашего объема.
Далее цены могут измениться. Таким образом, вам нужна таблица базы данных, чтобы указать дату начала налоговой ставки и для какой налоговой юрисдикции.
Далее, существуют «Льготы», которые соответствуют налоговой категории. Мы продаем одежду, и, как правило, освобождение предоставляется от «одежды и обуви». Таким образом, вам нужна таблица БД для налоговых категорий. Я помещаю идентификатор категории налога по умолчанию в мои категории продуктов, который затем записывает категорию налогов по умолчанию при добавлении новых продуктов.
Теперь вы можете добавить свою налоговую ставку. У меня есть форма, чтобы добавить ставку состояния и сохранить ее в уникальных столбцах в моей таблице tax_rate db для конкретной даты. У меня есть другая форма для добавления локальной ставки, снова помещенная в ту же таблицу tax_rate. Эта ставка специфична для налоговой категории.
Так, например, я добавил ставку 4% для штата Нью-Йорк, начиная с 1-1-1900, применимую ко всем категориям налогов.
Затем я добавил все налоговые юрисдикции, которые я написал по сценарию, извлекая данные из файла выше, снова начальная дата 1-1-1900 со ставками в файле выше. Применимо ко всем категориям.
Затем вам нужно сделать то же самое для категории освобожденных от налогов, 0% для штата и всех местных налоговых юрисдикций.
Затем мы добавляем исключения. Это на самом деле немного проще сейчас, потому что исключение находится на уровне штата с небольшим количеством tax_jurisdictions, которые поддерживают освобождение.
Поэтому я добавил Нью-Йорк, 0%, начиная с апреля 2011 года, для максимальной категории одежды 55 долларов
Затем я добавил Нью-Йорк, 4% начиная с октября 2011 года для категории одежды (это отменяет освобождение)
Затем я добавил Нью-Йорк, 0%, начиная с апреля 2012 года, для максимального значения категории одежды в $ 110.
Теперь я должен сделать это и для каждой местной налоговой юрисдикции, но, как я уже сказал, только немногие из них предложили исключение, но функциональность есть.
НАКОНЕЦ, при отгрузке нужно добраться до налоговой юрисдикции. Это где невозможность происходит, однако для моей системы POS я должен попросить «графство», поскольку это будет наиболее понятным вариантом. В Нью-Йорке ... конечно ... Нью-Йорк является налоговой юрисдикцией округа Бронкс, округа Куинс, округа Бруклин (иногда его называют другим) и других округов, так что вы узнаете, когда кто-то упоминает один из Берроузов, который налоговая юрисдикция - «Нью-Йорк Сити» или добавьте другую таблицу базы данных для поиска округа в налоговой юрисдикции, что, честно говоря, более правильно, и я, вероятно, должен был это сделать.
Таким образом, когда вы затем рассчитываете налог на продукт, вы берете продажную цену, категорию налога на продукт, идентификатор штата и идентификатор налоговой юрисдикции (и дату, предполагая, что это не сейчас). Вы запрашиваете данные о вашей налоговой ставке, перечисляете их по дате, а затем переходите по каждому пункту и находите первый, который работает. И если ничего не найдено, я установил ставку по умолчанию, опять же, если местная налоговая юрисдикция не была введена. Будет много операторов if, чтобы сделать это.