DOCS

Isenções fiscais

Sincronize certificados de isenção de imposto sobre vendas dos EUA com um perfil de cliente.

Se você vende para revendedores, órgãos públicos ou organizações sem fins lucrativos, esses compradores possuem certificados de isenção que os isentam do imposto sobre vendas em estados específicos. A Zonos armazena esses certificados junto a um perfil de cliente para que um comprador isento possa ser reconhecido no checkout.

As isenções são registradas por jurisdição. Um cliente isento na Carolina do Sul não é automaticamente isento no Texas, portanto cada estado para o qual o cliente possui um certificado é um registro separado, com suas próprias datas e número de certificado.

As isenções são vinculadas a um cliente já existente, então a sincronização acontece em duas chamadas: criar o cliente e, em seguida, sincronizar seus certificados. Ambas são identificadas pelo seu próprio ID de cliente — o mesmo customerId que você usa em outras partes do Checkout. A Zonos nunca exige que você armazene um ID interno.

Esse recurso está disponível apenas para integrações personalizadas da API.

As isenções ainda não são aplicadas às cotações de landed cost

Você já pode sincronizar e gerenciar isenções hoje, e os registros ficam armazenados no perfil do cliente. A dedução de uma isenção do imposto em um landed cost está por vir, então uma isenção sincronizada ainda não altera o imposto cotado a um comprador. Sincronizar agora significa que seus certificados já estarão prontos quando isso acontecer.

Criar ou atualizar o cliente 

checkoutCustomerUpsert cria um perfil de cliente, ou o atualiza se já existir um para aquele customerId. Ao contrário de checkoutCustomerProfileAuthenticate, isso não exige que o comprador esteja presente, então você pode provisionar sua lista de clientes com antecedência. Consulte criar ou atualizar um perfil sem um comprador para o comportamento completo dos campos.

1mutation checkoutCustomerUpsert($input: CheckoutCustomerProfileInput!) {
2 checkoutCustomerUpsert(input: $input) {
3 customerId
4 email
5 name
6 phone
7 }
8}

Como isso corresponde pelo customerId, chamar essa mutação repetidamente atualiza o mesmo perfil em vez de criar duplicatas. É seguro executar isso em toda a sua lista de clientes a cada sincronização.

Sincronizar isenções fiscais 

checkoutCustomerTaxExemptionsSync aceita vários clientes ao mesmo tempo. Cada entrada substitui o conjunto completo de isenções daquele cliente.

1mutation checkoutCustomerTaxExemptionsSync(
2$input: [CheckoutCustomerTaxExemptionSyncInput!]!
3) {
4 checkoutCustomerTaxExemptionsSync(input: $input) {
5 customerId
6 accepted {
7 id
8 countryCode
9 administrativeArea
10 effectiveAt
11 expiresAt
12 exemptionReason
13 }
14 rejected {
15 code
16 message
17 administrativeArea
18 effectiveAt
19 }
20 }
21}

Um expiresAt omitido significa que o certificado não expira. Um exemptionReason omitido é definido como UNSPECIFIED por padrão.

Como funciona a sincronização 

Três regras regem toda sincronização.

A lista é a fonte da verdade. taxExemptions é o conjunto completo de isenções do cliente, não uma lista de alterações. Qualquer isenção já registrada que esteja ausente da lista é removida — é assim que um certificado retirado deixa de ser honrado. Enviar uma lista parcial remove silenciosamente tudo o que ficou de fora.

Todo registro é uma isenção. Não há como registrar que um cliente não é isento em algum lugar — veja a observação abaixo.

Remover todas as isenções é uma lista vazia. Para limpar os certificados de um cliente, envie-os com "taxExemptions": []. Deixar o cliente de fora do payload por completo mantém seus registros existentes inalterados.

Envie apenas as jurisdições em que o cliente é isento

A Zonos não possui um registro de "não isento" — uma jurisdição está na lista ou não está. Se o seu sistema armazena jurisdições isentas e não isentas juntas, filtre apenas as isentas antes de sincronizar. Um registro não isento é indistinguível de um certificado real, portanto é aceito em vez de rejeitado, e o cliente será tratado como isento naquele estado.

Motivos de isenção 

exemptionReason descreve por que o cliente é isento. É opcional e assume UNSPECIFIED por padrão, mas vale a pena informá-lo — veja abaixo.

Valor↕Aplica-se a↕
RESALEMercadorias compradas para revenda, não para consumo
FEDERAL_GOVERNMENTUma agência ou departamento federal dos EUA
STATE_LOCAL_GOVERNMENTUm órgão estadual, condado, município ou distrito escolar
TRIBAL_GOVERNMENTUma tribo reconhecida federalmente ou membro de uma tribo
CHARITABLEUma organização beneficente sem fins lucrativos
RELIGIOUS_ORGANIZATIONUma igreja ou outra organização religiosa
EDUCATIONAL_ORGANIZATIONUma escola ou universidade
DIRECT_PAYUm comprador que possui uma licença de pagamento direto e remete o imposto por conta própria
OTHERQualquer outro caso, incluindo diplomata estrangeiro, produção agrícola, produção industrial e mala direta
UNSPECIFIEDNenhum motivo informado

Os motivos se dividem em dois grupos, e a diferença importa. Motivos baseados na entidade — governo, beneficência, religião, educação — isentam o comprador independentemente do que ele compra. Motivos baseados no uso, RESALE acima de todos, cobrem apenas as mercadorias qualificadas: um certificado de revenda cobre o estoque que o comprador vai revender, não os móveis de escritório no mesmo pedido.

Sem um motivo, a Zonos não consegue diferenciar os dois casos e só pode isentar pedidos inteiros, o que é mais difícil de justificar para certificados de revenda. Se a maioria das suas isenções for de revenda, enviar RESALE como padrão com exceções listadas individualmente costuma dar muito menos trabalho do que classificar cada cliente.

Referência da isenção 

exemptionReference é o número impresso na documentação de isenção do cliente. Dependendo do estado e do tipo de isenção, pode ser um número de licença de revenda ou de vendedor, um número de certificado de isenção estadual, um número de licença de pagamento direto ou um ID fiscal federal.

Ele é obrigatório em todo registro. Armazene e envie exatamente como aparece no certificado — os formatos variam muito por jurisdição (SR EAA 12-345678, 85-8012345678C-9, 12-3456789), e a Zonos preserva o valor enviado, exceto pela remoção de espaços em branco nas extremidades. Não altere a capitalização nem remova hifens ou espaços.

Por privacidade, exemptionReference pode ser enviado, mas não é retornado ao ler as isenções de volta, já que pode conter um ID fiscal federal.

Registros rejeitados 

Os registros são validados um de cada vez. Um registro rejeitado é reportado em rejected e não reprova o restante do lote, nem altera a isenção já registrada para aquela jurisdição.

Código↕Causa↕
UNKNOWN_CUSTOMERNenhum cliente corresponde ao customerId. Crie o cliente primeiro
UNKNOWN_JURISDICTIONadministrativeArea não é um estado, distrito ou território dos EUA reconhecido
INVALID_DATE_RANGEexpiresAt não é posterior a effectiveAt
MISSING_EXEMPTION_REFERENCEexemptionReference está vazio
DUPLICATE_JURISDICTIONDois registros em um mesmo payload compartilham país, região e data de vigência. O primeiro é mantido

Clientes desconhecidos são rejeitados em vez de criados, então um customerId digitado incorretamente aparece na resposta em vez de criar um perfil que nunca corresponderá a um comprador real.

Apenas regiões administrativas dos EUA são validadas. Subdivisões de outros países são aceitas como enviadas.

Ler de volta e remover 

Leia as isenções de um cliente para confirmar que uma sincronização foi aplicada:

1query checkoutCustomerTaxExemptions($customerId: String!) {
2 checkoutCustomerTaxExemptions(customerId: $customerId) {
3 countryCode
4 administrativeArea
5 effectiveAt
6 expiresAt
7 exemptionReason
8 }
9}

Para remover todas as isenções de um cliente — quando ele encerra a conta, por exemplo — use checkoutCustomerTaxExemptionsDelete. Ela retorna SUCCESS independentemente de o cliente ter ou não alguma isenção, portanto é seguro chamá-la mais de uma vez.

1mutation checkoutCustomerTaxExemptionsDelete($customerId: String!) {
2 checkoutCustomerTaxExemptionsDelete(customerId: $customerId)
3}

Esta página foi útil?