Синхронизируйте сертификаты освобождения от налога с продаж в США с профилем клиента.
Если вы продаёте реселлерам, государственным учреждениям или некоммерческим организациям, у таких покупателей есть сертификаты освобождения, которые освобождают их от налога с продаж в определённых штатах. Zonos хранит эти сертификаты в привязке к профилю клиента, чтобы освобождённый от налога покупатель мог быть распознан при оформлении покупки.
Освобождения фиксируются отдельно по каждой юрисдикции. Клиент, освобождённый от налога в Южной Каролине, не освобождается автоматически в Техасе, поэтому каждый штат, для которого у клиента есть сертификат, представлен отдельной записью со своими датами и номером сертификата.
Освобождения привязываются к уже существующему клиенту, поэтому синхронизация состоит из двух вызовов: сначала создать клиента, затем синхронизировать его сертификаты. Оба вызова используют ваш собственный идентификатор клиента — тот же customerId, который вы используете в других местах Checkout. Zonos никогда не требует хранить внутренний идентификатор.
Освобождения пока не применяются к расчётам landed cost
Уже сейчас вы можете синхронизировать и управлять освобождениями, а записи сохраняются
в профиле клиента. Вычет освобождения из налога в расчёте landed cost появится позже,
поэтому синхронизированное освобождение пока не изменяет налог, который показывается
покупателю. Синхронизация уже сейчас означает, что ваши сертификаты будут готовы к
тому моменту, когда это заработает.
checkoutCustomerUpsert создаёт профиль клиента или обновляет его, если профиль с таким customerId уже существует. В отличие от checkoutCustomerProfileAuthenticate, эта мутация не требует присутствия покупателя, поэтому вы можете заранее подготовить список своих клиентов. Полное описание поведения полей см. в разделе создание или обновление профиля без покупателя.
Поскольку сопоставление происходит по customerId, повторные вызовы обновляют один и тот же профиль, а не создают дубликаты. Эту мутацию безопасно запускать для всего списка клиентов при каждой синхронизации.
Если expiresAt не указан, значит срок действия сертификата не ограничен. Если exemptionReason не указан, по умолчанию используется значение UNSPECIFIED.
Список является исчерпывающим.taxExemptions — это полный набор освобождений клиента, а не список изменений. Любое ранее зарегистрированное освобождение, отсутствующее в списке, будет удалено — именно так отозванный сертификат перестаёт учитываться. Отправка неполного списка незаметно удаляет всё, что в него не включено.
Каждая запись — это освобождение. Нет способа зафиксировать, что клиент где-то не освобождён от налога — см. примечание ниже.
Удаление всех освобождений — это пустой список. Чтобы очистить сертификаты клиента, отправьте его с "taxExemptions": []. Если полностью исключить клиента из payload, его существующие записи останутся без изменений.
Отправляйте только те юрисдикции, в которых клиент освобождён от налога
У Zonos нет записи «не освобождён» — юрисдикция либо есть в списке, либо её там нет.
Если ваша система хранит освобождённые и неосвобождённые юрисдикции вместе,
отфильтруйте только освобождённые перед синхронизацией. Запись о неосвобождённой
юрисдикции неотличима от настоящего сертификата, поэтому она будет принята, а не
отклонена, и клиент будет считаться освобождённым от налога в этом штате.
exemptionReason описывает, почему клиент освобождён от налога. Это поле необязательно и по умолчанию принимает значение UNSPECIFIED, но его стоит указывать — см. ниже.
Значение↕
Применяется к↕
RESALE
Товары, приобретённые для перепродажи, а не для потребления
FEDERAL_GOVERNMENT
Федеральное агентство или ведомство США
STATE_LOCAL_GOVERNMENT
Агентство штата, округ, муниципалитет или школьный округ
TRIBAL_GOVERNMENT
Признанное на федеральном уровне племя или его член
CHARITABLE
Благотворительная некоммерческая организация
RELIGIOUS_ORGANIZATION
Церковь или другая религиозная организация
EDUCATIONAL_ORGANIZATION
Школа или университет
DIRECT_PAY
Покупатель, имеющий разрешение на прямую уплату налога и самостоятельно перечисляющий его
OTHER
Всё остальное, включая иностранных дипломатов, сельскохозяйственное и промышленное производство и прямую почтовую рассылку
UNSPECIFIED
Причина не указана
Причины делятся на две группы, и это различие важно. Причины, основанные на типе организации, — государственные, благотворительные, религиозные, образовательные — освобождают покупателя независимо от того, что он приобретает. Причины, основанные на назначении покупки, прежде всего RESALE, покрывают только соответствующие товары: сертификат перепродажи распространяется на товарные запасы, которые покупатель будет перепродавать, но не на офисную мебель в том же заказе.
Без указания причины Zonos не может отличить эти два типа друг от друга и может освобождать от налога только весь заказ целиком, что сложнее всего обосновать для сертификатов перепродажи. Если большинство ваших освобождений относится к перепродаже, обычно отправлять RESALE в качестве значения по умолчанию и перечислять исключения по отдельности гораздо проще, чем классифицировать каждого клиента.
exemptionReference — это номер, указанный в документах клиента об освобождении от налога. В зависимости от штата и типа освобождения это может быть номер разрешения на перепродажу или продавца, номер сертификата освобождения штата, номер разрешения на прямую уплату или федеральный налоговый идентификатор.
Это поле обязательно для каждой записи. Храните и отправляйте его точно в том виде, в каком оно указано на сертификате — форматы сильно различаются в зависимости от юрисдикции (SR EAA 12-345678, 85-8012345678C-9, 12-3456789), и Zonos сохраняет значение в отправленном виде, только обрезая пробелы по краям. Не меняйте регистр и не удаляйте дефисы и пробелы.
В целях конфиденциальности exemptionReference можно отправить, но оно не
возвращается при обратном чтении освобождений, поскольку может содержать
федеральный налоговый идентификатор.
Записи проверяются по одной. Отклонённая запись отражается в rejected и не приводит к сбою остальной части пакета, а также не затрагивает освобождение, уже зарегистрированное для этой юрисдикции.
Код↕
Причина↕
UNKNOWN_CUSTOMER
Ни один клиент не соответствует customerId. Сначала создайте клиента
UNKNOWN_JURISDICTION
administrativeArea не является распознанным штатом, округом или территорией США
INVALID_DATE_RANGE
expiresAt не позже, чем effectiveAt
MISSING_EXEMPTION_REFERENCE
exemptionReference пусто
DUPLICATE_JURISDICTION
Две записи в одном payload имеют одинаковые страну, регион и дату вступления в силу. Сохраняется первая
Неизвестные клиенты отклоняются, а не создаются, поэтому опечатка в customerId проявляется в ответе, а не приводит к созданию профиля, который никогда не будет соответствовать реальному покупателю.
Проверяются только административные единицы США. Административные единицы других стран принимаются в том виде, в котором были отправлены.
Чтобы удалить все освобождения клиента — например, при закрытии его аккаунта — используйте checkoutCustomerTaxExemptionsDelete. Она возвращает SUCCESS независимо от того, были ли у клиента какие-либо освобождения, поэтому её безопасно вызывать повторно.
Налоговые освобождения
Налоговые освобождения
Синхронизируйте сертификаты освобождения от налога с продаж в США с профилем клиента.
Если вы продаёте реселлерам, государственным учреждениям или некоммерческим организациям, у таких покупателей есть сертификаты освобождения, которые освобождают их от налога с продаж в определённых штатах. Zonos хранит эти сертификаты в привязке к профилю клиента, чтобы освобождённый от налога покупатель мог быть распознан при оформлении покупки.
Освобождения фиксируются отдельно по каждой юрисдикции. Клиент, освобождённый от налога в Южной Каролине, не освобождается автоматически в Техасе, поэтому каждый штат, для которого у клиента есть сертификат, представлен отдельной записью со своими датами и номером сертификата.
Освобождения привязываются к уже существующему клиенту, поэтому синхронизация состоит из двух вызовов: сначала создать клиента, затем синхронизировать его сертификаты. Оба вызова используют ваш собственный идентификатор клиента — тот же
customerId, который вы используете в других местах Checkout. Zonos никогда не требует хранить внутренний идентификатор.Эта функция доступна только для пользовательских интеграций API.
Уже сейчас вы можете синхронизировать и управлять освобождениями, а записи сохраняются в профиле клиента. Вычет освобождения из налога в расчёте landed cost появится позже, поэтому синхронизированное освобождение пока не изменяет налог, который показывается покупателю. Синхронизация уже сейчас означает, что ваши сертификаты будут готовы к тому моменту, когда это заработает.
Создание или обновление клиента
checkoutCustomerUpsertсоздаёт профиль клиента или обновляет его, если профиль с такимcustomerIdуже существует. В отличие отcheckoutCustomerProfileAuthenticate, эта мутация не требует присутствия покупателя, поэтому вы можете заранее подготовить список своих клиентов. Полное описание поведения полей см. в разделе создание или обновление профиля без покупателя.mutation checkoutCustomerUpsert($input: CheckoutCustomerProfileInput!) {checkoutCustomerUpsert(input: $input) {customerIdemailnamephone}}Поскольку сопоставление происходит по
customerId, повторные вызовы обновляют один и тот же профиль, а не создают дубликаты. Эту мутацию безопасно запускать для всего списка клиентов при каждой синхронизации.Синхронизация налоговых освобождений
checkoutCustomerTaxExemptionsSyncпринимает сразу несколько клиентов. Каждая запись полностью заменяет набор освобождений соответствующего клиента.mutation checkoutCustomerTaxExemptionsSync($input: [CheckoutCustomerTaxExemptionSyncInput!]!) {checkoutCustomerTaxExemptionsSync(input: $input) {customerIdaccepted {idcountryCodeadministrativeAreaeffectiveAtexpiresAtexemptionReason}rejected {codemessageadministrativeAreaeffectiveAt}}}Если
expiresAtне указан, значит срок действия сертификата не ограничен. ЕслиexemptionReasonне указан, по умолчанию используется значениеUNSPECIFIED.Как работает синхронизация
Каждую синхронизацию определяют три правила.
Список является исчерпывающим.
taxExemptions— это полный набор освобождений клиента, а не список изменений. Любое ранее зарегистрированное освобождение, отсутствующее в списке, будет удалено — именно так отозванный сертификат перестаёт учитываться. Отправка неполного списка незаметно удаляет всё, что в него не включено.Каждая запись — это освобождение. Нет способа зафиксировать, что клиент где-то не освобождён от налога — см. примечание ниже.
Удаление всех освобождений — это пустой список. Чтобы очистить сертификаты клиента, отправьте его с
"taxExemptions": []. Если полностью исключить клиента из payload, его существующие записи останутся без изменений.У Zonos нет записи «не освобождён» — юрисдикция либо есть в списке, либо её там нет. Если ваша система хранит освобождённые и неосвобождённые юрисдикции вместе, отфильтруйте только освобождённые перед синхронизацией. Запись о неосвобождённой юрисдикции неотличима от настоящего сертификата, поэтому она будет принята, а не отклонена, и клиент будет считаться освобождённым от налога в этом штате.
Причины освобождения
exemptionReasonописывает, почему клиент освобождён от налога. Это поле необязательно и по умолчанию принимает значениеUNSPECIFIED, но его стоит указывать — см. ниже.RESALEFEDERAL_GOVERNMENTSTATE_LOCAL_GOVERNMENTTRIBAL_GOVERNMENTCHARITABLERELIGIOUS_ORGANIZATIONEDUCATIONAL_ORGANIZATIONDIRECT_PAYOTHERUNSPECIFIEDПричины делятся на две группы, и это различие важно. Причины, основанные на типе организации, — государственные, благотворительные, религиозные, образовательные — освобождают покупателя независимо от того, что он приобретает. Причины, основанные на назначении покупки, прежде всего
RESALE, покрывают только соответствующие товары: сертификат перепродажи распространяется на товарные запасы, которые покупатель будет перепродавать, но не на офисную мебель в том же заказе.Без указания причины Zonos не может отличить эти два типа друг от друга и может освобождать от налога только весь заказ целиком, что сложнее всего обосновать для сертификатов перепродажи. Если большинство ваших освобождений относится к перепродаже, обычно отправлять
RESALEв качестве значения по умолчанию и перечислять исключения по отдельности гораздо проще, чем классифицировать каждого клиента.Номер сертификата освобождения
exemptionReference— это номер, указанный в документах клиента об освобождении от налога. В зависимости от штата и типа освобождения это может быть номер разрешения на перепродажу или продавца, номер сертификата освобождения штата, номер разрешения на прямую уплату или федеральный налоговый идентификатор.Это поле обязательно для каждой записи. Храните и отправляйте его точно в том виде, в каком оно указано на сертификате — форматы сильно различаются в зависимости от юрисдикции (
SR EAA 12-345678,85-8012345678C-9,12-3456789), и Zonos сохраняет значение в отправленном виде, только обрезая пробелы по краям. Не меняйте регистр и не удаляйте дефисы и пробелы.В целях конфиденциальности
exemptionReferenceможно отправить, но оно не возвращается при обратном чтении освобождений, поскольку может содержать федеральный налоговый идентификатор.Отклонённые записи
Записи проверяются по одной. Отклонённая запись отражается в
rejectedи не приводит к сбою остальной части пакета, а также не затрагивает освобождение, уже зарегистрированное для этой юрисдикции.UNKNOWN_CUSTOMERcustomerId. Сначала создайте клиентаUNKNOWN_JURISDICTIONadministrativeAreaне является распознанным штатом, округом или территорией СШАINVALID_DATE_RANGEexpiresAtне позже, чемeffectiveAtMISSING_EXEMPTION_REFERENCEexemptionReferenceпустоDUPLICATE_JURISDICTIONНеизвестные клиенты отклоняются, а не создаются, поэтому опечатка в
customerIdпроявляется в ответе, а не приводит к созданию профиля, который никогда не будет соответствовать реальному покупателю.Проверяются только административные единицы США. Административные единицы других стран принимаются в том виде, в котором были отправлены.
Чтение и удаление
Прочитайте освобождения клиента, чтобы убедиться, что синхронизация прошла успешно:
query checkoutCustomerTaxExemptions($customerId: String!) {checkoutCustomerTaxExemptions(customerId: $customerId) {countryCodeadministrativeAreaeffectiveAtexpiresAtexemptionReason}}Чтобы удалить все освобождения клиента — например, при закрытии его аккаунта — используйте
checkoutCustomerTaxExemptionsDelete. Она возвращаетSUCCESSнезависимо от того, были ли у клиента какие-либо освобождения, поэтому её безопасно вызывать повторно.mutation checkoutCustomerTaxExemptionsDelete($customerId: String!) {checkoutCustomerTaxExemptionsDelete(customerId: $customerId)}CheckoutCustomerProfileInput CheckoutCustomerTaxExemptionSyncInput
checkoutCustomerTaxExemptionsDelete checkoutCustomerTaxExemptionsSync checkoutCustomerUpsert
Была ли эта страница полезной?