Pesquisar

Are you looking for test card numbers?

Would you like to contact support?

Point-of-sale icon

Compras isentas de impostos

Aprenda sobre compras isentas de impostos e como suportar estas transações.

O Tax Free Shopping (TFS) permite que seus clientes internacionais obtenham um reembolso do imposto sobre vendas ou do Imposto sobre Valor Agregado (IVA) que você coletou sobre as mercadorias que eles compraram. O suporte a essa funcionalidade gera vendas de clientes internacionais devido à sua conveniência e pode ser um ótimo fluxo de receita para você.

Para oferecer o TFS aos seus cliente, você precisa ter uma Integração da API de Terminais. Com uma opção de aplicação não integrada, o TFS não é possível. Além disso, você precisa colaborar com um provedor de compras isentas de impostos. Esta é uma organização que coleta o imposto sobre vendas, reembolsa os clientes, paga comissão ao comerciante e cuida da papelada junto às autoridades.

Países suportados
O recurso TFS está disponível em: União Europeia, Islândia, Noruega, Cingapura, Suíça e Reino Unido.

Fluxos TFS

Suportamos as seguintes opções de compras isentas de impostos:

O papel da Adyen nos dois fluxos TFS limita-se a transmitir informações entre o terminal e a caixa registradora ou o provedor TFS.

Fluxo de reembolso regular de isenção de impostos

O cliente preenche um formulário isenção de impostos, no aeroporto, o aeroporto leva o formulário para a Alfândega para validação de exportação (um selo alfandegário) e apresenta o formulário carimbado ao provedor TFS para receber o reembolso usando o método de pagamento escolhido. A Adyen suporta essa jornada compartilhando o código do país do emissor e o Número de identificação bancária (BIN) do cartão do cliente com o sistema de caixa registradora. A caixa registradora usa essas informações para notificar sua equipe que um cartão estrangeiro foi detectado e solicita que eles iniciem a discussão com o cliente.

Fluxo de reembolso rápido para isenção de impostos

O cliente recebe o reembolso do imposto sobre vendas do provedor TFS, no cartão usado para pagamento, dentro de 48 horas. (Dependendo do provedor TFS, o atraso também pode ser maior.) Nesse fluxo, o cliente também precisa preencher um formulário e obter um selo alfandegário, porque o fornecedor TFS garante o cartão do cliente. A Adyen suporta essa jornada compartilhando o código do país do emissor e o número BIN com o sistema de caixa registradora e compartilhando o número do cartão do cartão do cliente com o provedor TFS para permitir que ele reembolse o cliente nesse cartão.

Antes de começar

  1. Decida se você deseja oferecer o fluxo de reembolso regular ou rápido (desde que o provedor TFS aprove).

  2. Entre em contato com um provedor TFS para configurar um processo de isenção de impostos. O provedor TFS precisará concordar, porque pagará diretamente aos seus clientes.

  3. Entre em contato com o fornecedor da sua caixa registradora para configurar o software da caixa registradora para suporte ao TFS.

  4. Se você decidiu dar suporte ao fluxo rápido de reembolso, peça ao gerente de sua conta ou com a POS Support Team para configurar uma notificação de envio número do cartão para o <provedor TFS> para você. Com esta notificação, a Adyen informa o seu provedor de TFS sobre o número do cartão do clientes.

Etapa 1: Adquirir detalhes do cartão

Primeiro, você precisa fazer uma solicitação de aquisição de cartão para recuperar os dados que a caixa registradora exige para determinar se o cliente é elegível para um reembolso do imposto sobre as vendas .

  1. Faça uma solicitação de aquisição de cartão para um endpoint da API de terminais. Conforme mostrado no exemplo abaixo, você pode usar uma solicitação básica de aquisição de cartão sem especificar um valor.

    {
        "SaleToPOIRequest": {
            "MessageHeader": {
                "ProtocolVersion": "3.0",
                "MessageClass": "Service",
                "MessageCategory": "CardAcquisition",
                "MessageType": "Request",
                "SaleID": "POSSystemID12345",
                "ServiceID": "0207111104",
                "POIID": "MX925-284691408"
            },
            "CardAcquisitionRequest": {
                "SaleData": {
                    "SaleTransactionID": {
                        "TimeStamp": "2019-05-17T14:59:09.000Z",
                        "TransactionID": "933"
                    }
                 },
                "CardAcquisitionTransaction": {}
            }
        }
    }
    String saleID = "YOUR_CASH_REGISTER_ID";
    String serviceID = "YOUR_UNIQUE_ATTEMPT_ID";
    String POIID = "YOUR_TERMINAL_ID";
    String transactionID = "YOUR_UNIQUE_TRANSACTION_ID";
    
    SaleToPOIRequest saleToPOIRequest = new SaleToPOIRequest();
    MessageHeader messageHeader = new MessageHeader();
    messageHeader.setProtocolVersion("3.0");
    messageHeader.setMessageClass( MessageClassType.SERVICE );
    messageHeader.setMessageCategory( MessageCategoryType.CARD_ACQUISITION );
    messageHeader.setMessageType( MessageType.REQUEST );
    messageHeader.setSaleID(saleID);
    messageHeader.setServiceID(serviceID);
    messageHeader.setPOIID(POIID);
    saleToPOIRequest.setMessageHeader(messageHeader);
    
    CardAcquisitionRequest cardAcquisitionRequest = new CardAcquisitionRequest();
    SaleData saleData = new SaleData();
    TransactionIdentification saleTransactionID = new TransactionIdentification();
    saleTransactionID.setTimeStamp(DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar()));
    saleTransactionID.setTransactionID(transactionID);
    saleData.setSaleTransactionID(saleTransactionID);
    cardAcquisitionRequest.setSaleData(saleData);
    
    CardAcquisitionTransaction cardAcquisitionTransaction = new CardAcquisitionTransaction();
    cardAcquisitionRequest.setCardAcquisitionTransaction(cardAcquisitionTransaction);
    saleToPOIRequest.setCardAcquisitionRequest(cardAcquisitionRequest);
    terminalAPIRequest.setSaleToPOIRequest(saleToPOIRequest);

    Na resposta, os dados para determinar a elegibilidade para um reembolso de imposto sobre vendas estão na AdditionalResponse. Você também precisará do POIData mais tarde.

    {
      "SaleToPOIResponse": {
        "CardAcquisitionResponse": {
          "POIData": {
            "POITransactionID": {
              "TimeStamp": "2019-05-17T14:59:08.000Z",
              "TransactionID": "jM6S001558097948000"
            },
          },
          "SaleData": {
            "SaleTransactionID": {
              "TimeStamp": "2019-05-17T14:59:09.000Z",
              "TransactionID": "TxId-2019-05-17T14:59:09+00:00"
            }
          },
          "PaymentInstrumentData": {
            "CardData": {
              "PaymentBrand": "mc",
              "MaskedPan": "541333*****9999",
              "CardCountryCode": "528",
              "SensitiveCardData": {
                "ExpiryDate": "0228"
            },
            "PaymentInstrumentType": "Card"
          },
          "Response": {
            "Result": "Success",
            "AdditionalResponse": {
              "tid": "84691408",
              "transactionType": "GOODS_SERVICES",
              ...
              "cardIssuerCountryId": "528",
              ...
              "cardBin": "541333",
              "posAuthAmountValue": 0
            }
          }
        },
        "MessageHeader": {
          "SaleID": "POSSystemID12345",
          "MessageClass": "Service",
          "MessageCategory": "CardAcquisition",
          "ServiceID": "0207111104",
          "POIID": "MX925-284691408",
          "MessageType": "Response"
        }
      }
    }
  2. Use os seguintes dados da parte AdditionalResponse da resposta para fazer a verificação de elegibilidade:

    • Issuer country code: passe o valor do campo cardIssuerCountryId, por exemplo 528.
    • BIN: passe o valor do campo cardBin, por exemplo 541333.
  3. Manuseie a verificação de elegibilidade localmente na caixa registradora ou através do provedor TFS, conforme discutido com seu provedor TFS e / ou provedor de caixa registradora.

Etapa 2: efetuar um pagamento

Se o cliente for elegível para um reembolso do imposto sobre vendas, faça uma solicitação de pagamento com uma referência à aquisição do cartão. Para um pagamento no fluxo de reembolso regular, é tudo o que você precisa fazer. Para um pagamento no fluxo de reembolso rápido, a solicitação também precisa incluir um sinalizador de isenção de impostos. A bandeira diz para enviar uma mensagem ao seu provedor de TFS para reembolsar o cliente em seu cartão dentro de 48 horas. Lembre-se de que, para que isso funcione, você precisa solicitar antecipadamente à Adyen Enviar número do cartão para o <provedor TFS> para ativar as notificações.

Pagamento no fluxo de reembolso regular

  • Faça uma solicitação de pagamento para um endpoint da API de terminais, especificando adicionalmente:

    • PaymentData objeto que contém dados da aquisição do cartão:

      • CardAcquisitionReference.TimeStamp: O registro de data e hora retornado na resposta POIData.POITransactionID de aquisição do cartão.
      • CardAcquisitionReference.TransactionID: O ID da transação retornado na resposta POIData.POITransactionID de aquisição do cartão.

    O exemplo abaixo mostra como você faria uma solicitação de pagamento no fluxo de reembolso regular.

    {
         "SaleToPOIRequest": {
           "MessageHeader": {
             "ProtocolVersion": "3.0",
             "MessageClass": "Service",
             "MessageCategory": "Payment",
             "MessageType": "Request",
             "SaleID": "POSSystemID12345",
             "ServiceID": "0207111104",
             "POIID": "MX925-284691408"          
           },
           "PaymentRequest": {
             "SaleData": {
               "SaleTransactionID": {
                 "TransactionID": "27908",
                 "TimeStamp": "2019-03-07T10:11:04+00:00"
               }
             },            
             "PaymentTransaction": {
               "AmountsReq": {
                 "Currency": "EUR",
                 "RequestedAmount": 176.99
               }
             },        
             "PaymentData": {
               "CardAcquisitionReference": {
                 "TransactionID": "jM6S001558097948000",
                 "TimeStamp": "2019-05-17T12:59:08.000Z"
               }
             }
           }
         }
       }
    String saleID = "YOUR_CASH_REGISTER_ID";
    String serviceID = "YOUR_UNIQUE_ATTEMPT_ID";
    String POIID = "YOUR_TERMINAL_ID";
    String transactionID = "YOUR_UNIQUE_TRANSACTION_ID";
    
    SaleToPOIRequest saleToPOIRequest = new SaleToPOIRequest();
    MessageHeader messageHeader = new MessageHeader();
    messageHeader.setProtocolVersion("3.0");
    messageHeader.setMessageClass( MessageClassType.SERVICE );
    messageHeader.setMessageCategory( MessageCategoryType.PAYMENT );
    messageHeader.setMessageType( MessageType.REQUEST );
    messageHeader.setSaleID(saleID);
    messageHeader.setServiceID(serviceID);
    messageHeader.setPOIID(POIID);
    saleToPOIRequest.setMessageHeader(messageHeader);
    
    PaymentRequest paymentRequest = new PaymentRequest();
    SaleData saleData = new SaleData();
    TransactionIdentification saleTransactionID = new TransactionIdentification();
    saleTransactionID.setTransactionID(transactionID);
    saleTransactionID.setTimeStamp(DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar()));
    saleData.setSaleTransactionID(saleTransactionID);
    paymentRequest.setSaleData(saleData);
    
    PaymentTransaction paymentTransaction = new PaymentTransaction();
    AmountsReq amountsReq = new AmountsReq();
    amountsReq.setCurrency("EUR");
    amountsReq.setRequestedAmount( BigDecimal.valueOf(176.99) );
    paymentTransaction.setAmountsReq(amountsReq);
    paymentRequest.setPaymentTransaction(paymentTransaction);
    
    PaymentData paymentData = new PaymentData();
    TransactionIdentification cardAcquisitionReference = new TransactionIdentification();
    cardAcquisitionReference.setTransactionID(transactionID);
    cardAcquisitionReference.setTimeStamp(DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar()));
    paymentData.setCardAcquisitionReference(cardAcquisitionReference);
    paymentRequest.setPaymentData(paymentData);
    saleToPOIRequest.setPaymentRequest(paymentRequest);
    terminalAPIRequest.setSaleToPOIRequest(saleToPOIRequest);

Pagamento no fluxo de reembolso rápido

  • Faça uma solicitação de pagamento para um endpoint da API de terminais com um corpo a PaymentRequest que também tenha:

    • SaleData.SaleToAcquirerData: taxfree.indicator=true. Esse sinalizador nos diz para enviar uma mensagem ao seu provedor TFS para reembolsar o cliente em seu cartão.
    • PaymentData objeto que contém dados da aquisição do cartão:

      • CardAcquisitionReference.TimeStamp: registro de data e hora retornado na resposta POIData.POITransactionID de aquisição do cartão.
      • CardAcquisitionReference.TransactionID: O ID da transação retornado na reposta POIData.POITransactionID de aquisição do cartão.

    O exemplo abaixo mostra como você faria uma solicitação de pagamento no fluxo de reembolso rápido.

    {
         "SaleToPOIRequest": {
           "MessageHeader": {
             "ProtocolVersion": "3.0",
             "MessageClass": "Service",
             "MessageCategory": "Payment",
             "MessageType": "Request",
             "SaleID": "POSSystemID12345",
             "ServiceID": "0207111104",
             "POIID": "MX925-284691408"          
           },
           "PaymentRequest": {
             "SaleData": {
               "SaleToAcquirerData": "taxfree.indicator=true",
               "SaleTransactionID": {
                 "TransactionID": "27908",
                 "TimeStamp": "2019-03-07T10:11:04+00:00"
               }            
             },
             "PaymentTransaction": {
               "AmountsReq": {
                 "Currency": "EUR",
                 "RequestedAmount": 176.99
               }
             },        
             "PaymentData": {
               "CardAcquisitionReference": {
                 "TransactionID": "jM6S001558097948000",
                 "TimeStamp": "2019-05-17T12:59:08.000Z"
               }
             }
           }
         }
       }
    String saleID = "YOUR_CASH_REGISTER_ID";
    String serviceID = "YOUR_UNIQUE_ATTEMPT_ID";
    String POIID = "YOUR_TERMINAL_ID";
    String transactionID = "YOUR_UNIQUE_TRANSACTION_ID";
    
    SaleToPOIRequest saleToPOIRequest = new SaleToPOIRequest();
    MessageHeader messageHeader = new MessageHeader();
    messageHeader.setProtocolVersion("3.0");
    messageHeader.setMessageClass( MessageClassType.SERVICE );
    messageHeader.setMessageCategory( MessageCategoryType.PAYMENT );
    messageHeader.setMessageType( MessageType.REQUEST );
    messageHeader.setSaleID(saleID);
    messageHeader.setServiceID(serviceID);
    messageHeader.setPOIID(POIID);
    saleToPOIRequest.setMessageHeader(messageHeader);
    
    PaymentRequest paymentRequest = new PaymentRequest();
    SaleData saleData = new SaleData();
    saleData.setSaleToAcquirerData("TaxFreeIndicator=True");
    TransactionIdentification saleTransactionID = new TransactionIdentification();
    saleTransactionID.setTransactionID(transactionID);
    saleTransactionID.setTimeStamp(DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar()));
    saleData.setSaleTransactionID(saleTransactionID);
    paymentRequest.setSaleData(saleData);
    
    PaymentTransaction paymentTransaction = new PaymentTransaction();
    AmountsReq amountsReq = new AmountsReq();
    amountsReq.setCurrency("EUR");
    amountsReq.setRequestedAmount( BigDecimal.valueOf(176.99) );
    paymentTransaction.setAmountsReq(amountsReq);
    paymentRequest.setPaymentTransaction(paymentTransaction);
    
    PaymentData paymentData = new PaymentData();
    TransactionIdentification cardAcquisitionReference = new TransactionIdentification();
    cardAcquisitionReference.setTransactionID(transactionID);
    cardAcquisitionReference.setTimeStamp(DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar()));
    paymentData.setCardAcquisitionReference(cardAcquisitionReference);
    paymentRequest.setPaymentData(paymentData);
    saleToPOIRequest.setPaymentRequest(paymentRequest);
    terminalAPIRequest.setSaleToPOIRequest(saleToPOIRequest);

    A solicitação é roteada para o terminal, para que o cliente conclua a transação. O restante do fluxo do TFS (preenchendo o formulário Isenção de impostos, etc.) está fora do escopo da transação de pagamento.

Veja também