Árvore de páginas

Objetivo

Integrar o PDV com cancelas de estacionamento para abono de tickets. No fnal da venda o PDV poderá imprimir o comprovante de abono, esta impressão é opcional.

O parceiro pode configurar uma mensagem, por exemplo, solicitando o número do ticket de estacionamento e realizar todo o processo para liberação da cancela.

O PDV precisa estar com a operação de finalização da venda, na operação de Início da venda e Subtotal da venda não será aplicado, pois a validação de ticket é realizado no final, quando há uma finalização de cupom. 

O campo com número da chave do SAT ou chave da NFC-e, é o campo IdInvoiceKey, que no final da venda será populado e passado para o parceiro.

PARÂMETROTIPOOBRIGATÓRIODESCRIÇÃO
ExecutionstringtrueTipo da execução cetContinue, cetInterrupt, cetFailed
VersionstringtrueVersão da API
TextString ListtrueTexto que será exibido nos cupons impressos no final da compra

Os outros parâmetros são encontrados no Comando Desconto na VendaClique aqui e acesse a documentação.

Informações adicionais sobre o ticket de estacionamento podem ser encontradas no Comando Cupom Desconto na VendaClique aqui e acesse a documentação.

Tags de Impressão

Será possível a utilização de tags de impressão, que poderão ser envidas no Response nos parâmetros “vouchersPrint” e “text”, sendo elas:

  • [ImpExpandidoUmaLinha] – Início da impressão de texto estendido;
  • [ImpFimExpandido] – Fim da impressão de texto estendido;
  • [ImpNegrito] – Fim da impressão em negrito;
  • [ImpFimNegrito] – Início da impressão em negrito;
  • [ImpBarra] – Início da impressão de código de barras;
  • [ImpFimBarra] – Fim da impressão de código de barras.

Response Example

{
"version": 1,
"execution": "cetCompleted",
"vouchersPrint": [
   {
    "text": " RECEBO TICKET ESTACIONAMENTOrnrn N. 12345678901234, liberado até 20 00 horasrn"    
},
{ "text": " RECEBO TICKET ESTACIONAMENTOrnrn N. 12345678901234, liberado até 20 00 horasrn"
} ] }

Exemplo Fluxo de Abono no Ticket de Estacionamento

Início da venda no PDV, foi inserido um produto e teclado Enter. Após todos os produtos inseridos, foi acionada a função para finalização da venda.

Imagem 1 – Tela Pagamento

A API PDV requisitará para o integrador (parceiro) qual ação deverá ser executada, informando o ciclo da operação que ele está “Operation”, a identificação única da operação/documento “ID”, se a ação será executada antes ou após o evento “Event”, qual a versão da API “Version”, informações sobre a venda com “Header”, “ID” e “Total”. Em “ParkingTicket” haverá duas informações opcionais, que são, “ParkingCourtesy” e “ParkingCust”.

ParkingCourtesy trará as informações de cortesia do ticket, por exemplo, se a venda do cliente for acima de R$15,00 ele tem estacionamento livre por 60 minutos, conforme JSON abaixo.
ParkingCust trará as informações de valores do ticket, por exemplo, se o cliente permanecer até
60 minutos o valor do ticket será de R$3,00, conforme JSON abaixo.
Lembrando que essas informações são configuradas pelo sistema do cliente e são OPCIONAIS.

JSON enviado ao parceiro
{
  "Event": "cetAfter",
  "Execution": "cetContinue",
  "ID": "001222001206915",
  "Operation": "cotParkingTicketEndSale",
  "ParkingTicket": {
     "ParkingCourtesy": [
        {
          "MinutesFree": 0,
          "SaleValue": 2.9989999999999998E+001,
          "TariffCode": "1"
        },
        {
          "MinutesFree": 30,
          "SaleValue": 5.9990000000000002E+001,
          "TariffCode": "2"
        },
        {
          "MinutesFree": 150,
          "SaleValue": 1.9999000000000001E+002,
          "TariffCode": "6"
        },
       {
          "MinutesFree": 180,
          "SaleValue": 2.2999000000000001E+002,
          "TariffCode": "7"
        },
        {
           "MinutesFree": 720,
           "SaleValue": 9.9990000000000000E+003,
           "TariffCode": "8"
        }
       ],
    "ParkingCust": [
       {
          "MinutesRate": 15,
          "PeriodCust": 1.0000000000000000E+000
       },
      {
         "MinutesRate": 30,
         "PeriodCust": 0.0000000000000000E+000
       },
       {
          "MinutesRate": 60,
          "PeriodCust": 1.0000000000000000E+001
        },
        {
           "MinutesRate": 120,
           "PeriodCust": 2.0000000000000000E+001
        },
       {
           "MinutesRate": 240,
           "PeriodCust": 2.0000000000000000E+001
        }
      ]
   },
"Pay": null,
"Response": "",
"Sale": {
    "Discount": 0.0000000000000000E+000,
    "DiscountCodes": [],
    "Header": {
         "AccountingDate": "2021-11-12T00:00:00",
         "DateTimeIssue": "2021-11-12T18:01:23",
         "IdDocument": 1206915,

         "CooDocument": 527,
         "IdInvoiceKey": "29211110010000288049657020000004439239121219",
         "IdStore": 1,
         "IdTerminal": 222,
         "IdUser": 2,
         "Identification": [],
         "Status": "sttValid"
      },
    "ID": "001222001206915",
    "Increase": 0.0000000000000000E+000,
    "Items": [],
    "Messages": {
         "Customer": [],
         "User": []
       },
    "PartitionDiscount": [],
    "PartitionIncrease": [],
    "PaymentChange": null,
    "Payments": [],
    "SolidaryChange": null,
    "Total": 1.3949999999999999E+001,
    "VouchersPrint": []
  },
"Version": 1
}


JSON retornado pelo parceiro com uma solicitação de valor

{
  "version": 1,
  "sale": {
      "increase": 0,
      "discount": 0,
      "total": 0,
      "header": null,
      "payments": [],
      "paymentChange": null,
      "solidaryChange": null,
      "items": [],
       "discountCodes": [],
      "messages": {
          "customer": [
                   {
                     "text": "Ganhou 1000 pontos nessa compra\r\n"
                   }
            ],
         "user": [
                  {
                    "text": "Ganhou 100 pontos nessa compra\r\n"
                  }
           ]
        },
     "vouchersPrint": [
           {
             "text": " CUPOM DESCONTO 1\r\n\r\n Cupom de 5% de desconto para \r\npróxima\r\ncompra, aplicado para todos os \r\nprodutos.\r\n\r\n[ImpBarra]1234567890\r\n[ImpFimBarra]\r\n"
           },
          {
            "text": " CUPOM DESCONTO 2\r\n\r\n Cupom de 10% de desconto para \r\npróxima\r\ncompra, aplicado para todos os \r\nprodutos.\r\n\r\n[ImpBarra]1234567890\r\n[ImpFimBarra]\r\n"
          }
        ],
     "partitionIncrease": [],
     "partitionDiscount": [
          {
            "price": 0,
            "partnerCode": 0,
            "promotionCode": 357,
            "discountAmount": 0
          }
        ]
    },
 "pay": null,
 "return": {
     "code": 0
     },
 "execution": "cetContinue",
 "interpret": {
     "commandType": "cctGetValue",
     "messageCommand": null,
     "options": null,
     "value": {
        "title": "Ticket de estacionamento",
        "subtitle": "Informe o número",
        "dataType": "cvtString",
        "size": 0,
        "documentTypes": [
              "cdtCPF",
              "cdtCNPJ"
           ]
       }
  },
 "vouchersPrint": [
     {
        "text": " RECEBO TICKET ESTACIONAMENTO\r\n\r\n N. 12345678901234, liberado até 20:00 horas\r\n"
     },
    {
       "text": " RECEBO TICKET ESTACIONAMENTO\r\n\r\n N. 12345678901234, liberado até 20:00 horas\r\n"
    }
  ]
}

Tela apresentada ao operador. 

Imagem 2 – Tela de Pagamento

JSON enviado ao parceiro

{
"version": 1,
"sale": {
"increase": 0,
"discount": 0,
"total": 0,
"header": null,
"payments": [],
"paymentChange": null,
"solidaryChange": null,
"items": [],
"discountCodes": [],
"messages": {
"customer": [
{
"text": "Ganhou 1000 pontos nessa compra\r\n"
}
],
"user": [
{
"text": "Ganhou 100 pontos nessa compra\r\n"
}
]
},
"vouchersPrint": [
{
"text": " CUPOM DESCONTO 1\r\n\r\n Cupom de 5% de desconto para \r\npróxima\r\ncompra, aplicado para todos os \r\nprodutos.\r\n\r\n[ImpBarra]1234567890\r\n[ImpFimBarra]\r\n"
},
{
"text": " CUPOM DESCONTO 2\r\n\r\n Cupom de 10% de desconto para \r\npróxima\r\ncompra, aplicado para todos os \r\nprodutos.\r\n\r\n[ImpBarra]1234567890\r\n[ImpFimBarra]\r\n"
}
],
"partitionIncrease": [],
"partitionDiscount": [
{
"price": 0,
"partnerCode": 0,
"promotionCode": 300,
"discountAmount": 0
}
]
},
"pay": null,
"return": {
"code": 0,
"messageText": "0"
},
"execution": "cetCompleted",
"interpret": null,
"vouchersPrint": [
{
"text": " RECEBO TICKET ESTACIONAMENTO\r\n\r\n N. 12345678901234, liberado até 20:00 horas\r\n"
},
{
"text": " RECEBO TICKET ESTACIONAMENTO\r\n\r\n N. 12345678901234, liberado até 20:00 horas\r\n"
}
]
}

Tela apresentada ao operador. 

Imagem 3 – Tela de Pagamento

JSON retornado pelo parceiro

{
"version": 1,
"sale": {
"increase": 0,
"discount": 0,
"total": 0,
"header": null,
"payments": [],
"paymentChange": null,
"solidaryChange": null,
"items": [],
"discountCodes": [],
"messages": {
"customer": [
{
"text": "Ganhou 1000 pontos nessa compra\r\n"
}
],
"user": [
{
"text": "Ganhou 100 pontos nessa compra\r\n"
}
]
},
"vouchersPrint": [
{
"text": " CUPOM DESCONTO 1\r\n\r\n Cupom de 5% de desconto para \r\npróxima\r\ncompra, aplicado para todos os \r\nprodutos.\r\n\r\n[ImpBarra]1234567890\r\n[ImpFimBarra]\r\n"
},
{
"text": " CUPOM DESCONTO 2\r\n\r\n Cupom de 10% de desconto para \r\npróxima\r\ncompra, aplicado para todos os \r\nprodutos.\r\n\r\n[ImpBarra]1234567890\r\n[ImpFimBarra]\r\n"
}
],
"partitionIncrease": [],
"partitionDiscount": [
{
"price": 0,
"partnerCode": 0,
"promotionCode": 300,
"discountAmount": 0
}
]
},
"pay": null,
"return": {
"code": 0,
"messageText": "0"
},
"execution": "cetCompleted",
"interpret": null,
"vouchersPrint": [
{
"text": " RECEBO TICKET ESTACIONAMENTO\r\n\r\n N. 12345678901234, liberado até 20:00 horas\r\n"
},
{
"text": " RECEBO TICKET ESTACIONAMENTO\r\n\r\n N. 12345678901234, liberado até 20:00 horas\r\n"
}
]
}
Exemplo de texto impresso no cupom.

Imagem 4 – Texto Cupom