Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
HTML

<style>
    /* Início estilo banner */
  
    .compositiondani-banner {
      position: relative;
      min-height: 220px;
      border-radius: 5px;
      margin-bottom: 5px;
      overflow: hidden;
    }
  
    .compositiondani-banner-image {
      background-image: url("https://totvscrm.com/wp-content/uploads/2024/04/capa-com-fundo-e-sem-icone-TDN-AZUL2.png");
      background-size: cover;
      min-height: inherit;
      width: 100%;
    }
  
    .compositiondani-banner-overlay {
      min-height: inherit;
      position: absolute;
      top: 0;
      left: 0;
      width: 100%;
      height: 100%;
      border-radius: 5px;
      pointer-events: none;
    }
  
    .compositiondani-banner-logo-container {
      display: flex;
      justify-content: center;
      align-items: center;
      position: absolute;
      top: 50%;
      left: 50%;
      bottom: 0;
      transform: translate(-50%, -50%);
    }
  
    .compositiondani-banner-logo {
      width: 350px;
      height: 180px;
      background-image: url("https://totvscrm.com/wp-content/uploads/2023/08/logo.png");
      background-size: contain;
      background-repeat: no-repeat;
    }
  
    .compositiondani-banner-title {
      margin-bottom: 10px !important;
      padding: 10px !important;
      background: rgba(0, 0, 0, 0.5) !important;
      display: flex !important;
      justify-content: center !important;
      align-items: center !important;
      font-size: 12px !important;
      line-height: 1.3 !important;
      max-height: 133px !important;
      font-family: "Roboto", sans-serif !important;
      -webkit-line-clamp: 3 !important;
      -webkit-box-orient: vertical !important;
      overflow: hidden !important;
      text-overflow: ellipsis !important;
      color: #ffffff !important;
      position: relative !important;
      margin-top: 130px !important;
      border-radius: 10px !important;
    }
  
    .compositiondani-banner-content {
      position: absolute;
      padding: 30px;
      max-width: 60%;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
      z-index: 1;
      color: white;
      text-align: center;
    }
  
    .custom-header h1 {
      font-size: 16px;
      background-color: rgba(0, 0, 0, 0.6);
      padding: 10px;
      border-radius: 5px;
      margin: 0;
    }
  
    .negrito-materialize {
      font-weight: bold;
    }
  
    .custom-margin-justified {
      margin: 0 20px;
      text-align: justify;
    }
      /* Final estilo banner */

      #content.page.view {
    padding-right: 0 !important;
}   /* impedir vermelho no nav */

#breadcrumb-section > nav {
    background-color: initial !important;
    box-shadow: none !important;
}

@media only screen and (min-width: 601px) {
    nav, 
    nav .nav-wrapper i, 
    nav a.sidenav-trigger, 
    nav a.sidenav-trigger i {
        height: auto !important;
        line-height: normal !important;
    }
}
/* final vermelho no nav */
   </style>
  
  <header>
    <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400&display=swap" rel="stylesheet"/>
  
    <div class="compositiondani-banner">
      <div class="compositiondani-banner-image"></div>
      <div class="compositiondani-banner-overlay"></div>
      <div class="compositiondani-banner-logo-container">
        <div class="compositiondani-banner-logo"></div>
      </div>
      <div class="compositiondani-banner-content">
        <h1 class="compositiondani-banner-title"> 
          APRIMORAMENTOS NO GERENCIAMENTO DE EXPIRAÇÃO DE PAGAMENTOS PIX



  </h1>
  </header>
    </div>
  </div>

  <link
  rel="stylesheet"
  href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css"
/>
<link
  href="https://fonts.googleapis.com/icon?family=Material+Icons"
  rel="stylesheet"
/>
<link
  rel="stylesheet"
  href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css"
/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css">
<!-- Inclua o estilo do tema Monokai -->
<link
  rel="stylesheet"
  href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/styles/monokai.min.css"/>
  
<!-- Bootstrap CSS -->
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">

<!-- FontAwesome -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta2/css/all.min.css" />

<link href="https://cdn.jsdelivr.net/npm/@mdi/font/css/materialdesignicons.min.css" rel="stylesheet">


  <style>
  /* ==============================
    =       CONFIGURAÇÕES GERAIS      =
    =============================== */

* {
  font-family: "Roboto", sans-serif;
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

body {
  margin: 0;
  padding: 0;
}

a {
 
  text-decoration: none;
  -webkit-tap-highlight-color: transparent;
}

a:hover {
 
}

li {  font-size: 14px !important;
}

h3 {  font-size: 14px !important;
  font-weight: bold;  

}

h1 {  font-size: 13px !important;
  

}

h2 {  font-size: 15px !important;
  font-weight: bold;  

}

td, th {
    padding: 6px;
}

* p {
    margin-bottom: 0 !important;
}

/* ==============================
      =        ESTILOS DE TÍTULOS       =
      =============================== */

#title-text {
  display: none !important;
}

#content > div.page-metadata > div {
    float: none !important;
    line-height: normal !important;
    width: auto !important;
    display: none !important; /* ou outra propriedade de display que você deseja usar */
    margin: 0 !important; /* ou outra propriedade de margin que você deseja usar */
}

#section2 > ol > li:nth-child(2) > p {
    margin-bottom: 0;
}



.wiki-content h1,
.wiki-content h2 {
  font-family: "Roboto", sans-serif !important;
  font-size: 13px!important;
 
}

.wiki-content h1 {
  font-size: 13px !important;
}

.wiki-content h2 {
  font-size: 14px !important;
  color: #42526e !important;
  border-bottom: 2px solid #dfe1e5;
   padding-bottom: 5px;
  font-weight: bold;  
}

.custom-heading,
h3.custom-h3 {
  font-size: 16px;
  color: #42526e;
  margin-bottom: 20px;
}

.custom-h1 {
  color: #feac0e;
}

.explanation h2 {
  font-weight: bold;
}

/* ==============================
      =        ESTILOS DE TEXTO         =
      =============================== */

.wiki-content p {
  font-size: 14px !important;
}

.justificado,
.custom-justified {
  text-align: justify;
  margin: 10px 0;
}

/* ==============================
      =       ESTILOS DE LINKS         =
      =============================== */

.wiki-content a,
.wiki-content a:link,
.wiki-content a:visited,
.wiki-content a:focus,
.wiki-content a:active {
  text-decoration: none;
  color: #42526e;
  font-size: 14px;


}

.wiki-content a:hover {
  color: white;
}

/* ==============================
      =       ESTILOS DE CONTAINER     =
      =============================== */



.custom-content {
  background-color: #f5f5f5;
  padding: 20px;
  border-radius: 8px;
  margin: 0 10px;
  max-width: 100%;
  overflow: hidden;
}

.faq-container {
  max-width: 800px;
  margin: 0 auto;
  padding: 20px;
}

/* ==============================
      =       ESTILOS DE CARDS         =
      =============================== */

.card {
  border: 2px solid #9aa1ad;
  padding: 20px;
    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
  border-radius: 8px;
  background-color: #f4f5f7;
  color: #42526e;
  overflow-x: hidden;
   top: 0;

  
}



/* ==============================
      =       ESTILOS DE TABS          =
      =============================== */

.tabs {
  background-color: #dfe1e5;
}

.tabs .tab a {
  color: rgb(66, 82, 110);
}

.tabs .tab a:hover,
.tabs .tab a.active,
.tabs .tab a:focus.active {
  color: #0897E9;
  background-color: transparent;
}

.tabs .tab a:focus {
  background-color: rgba(8, 151, 233, 0.25);
}

.tabs .tab.disabled a,
.tabs .tab.disabled a:hover {
  color: rgba(16, 148, 184, 0.24);
}

.tabs .indicator {
  background-color: #0897E9;
}

.tab-content {
   gap: 0;
  padding: 10px;
}

.tab-content pre {
  max-width: 100%;
  overflow-x: hidden;
}

/* ==============================
      =        ESTILOS DE ÍCONES        =
      =============================== */

.icon-list,
.icon {
  padding-left: 0;
  list-style-type: none;
}

.icon {
  display: inline-block;
  width: 24px;
  vertical-align: middle;
  margin-right: 45px;
  position: relative;
  left: -25px;
}

.item .label i {
  margin-right: 10px;
}

.label b {
color: #42526e;
}

td th {
color: #42526e;
}

/* ==============================
      =    ESTILOS DE COMPONENTES      =
      =============================== */

.collapsible,
.collapsible-header,
.collapsible-body {
  box-shadow: none !important;
}

.faq-question {
  font-weight: bold;
  margin-bottom: 5px;
}

.faq-answer {
  margin-bottom: 20px;
}





.item {
  display: flex;
  align-items: center;
  padding: 10px;
  border-bottom: 1px solid #eee;
}

.item:last-child {
  border-bottom: none;
}

.item .label {
  flex: 1;
  font-weight: bold;
}

.item .value {
  flex: 1;
  text-align: right;
}
.item {
  border-bottom: 1px solid #e0e0e0;
  padding: 10px 0;
  display: flex;
  justify-content: space-between;
  align-items: center;
}

.item:last-child {
  border-bottom: none;
}

/* Estilos para o label */
.label {
  font-weight: bold;
  display: flex;
  align-items: center;
}

.item .label i {
  margin-right: 10px; /* Adiciona espaço depois dos ícones */
}

/* ==============================
      =     ESTILOS DE IMAGENS         =
      =============================== */

.imagem-responsiva {
  max-width: 100%;
  height: auto;
}

.custom-header-bg img {
  width: 100%;
  height: auto;
  display: block;
}

/* ==============================
      =     ESTILOS DE VÍDEO           =
      =============================== */

#youtube-video-container iframe {
  width: 100%;
  height: auto;
  display: block;
}

.video-container {
    max-width: 800px;
    margin: 0 auto;
  }

.ytp-cued-thumbnail-overlay-image {
  background-size: cover;
  background-position: center;
  width: 100%;
  height: 100%;
  position: absolute;
}

/* ==============================
      =    OUTROS ESTILOS PERSONALIZADOS =
      =============================== */
.custom-content {
  background-color: #f5f5f5;
  padding: 20px;
  border-radius: 8px;
  margin: 0 10px;
  max-width: 100%;
  overflow: hidden;
}

.custom-heading {
  font-size: 16px;
  color: #42526e;
  margin: 10px 0;
  border-bottom: 2px solid #e0e0e0;
  padding-bottom: 5px;
  font-weight: bold;  
}

#indice {
  border-radius: 5px;
  padding: 20px;
  max-width: 100%;
  overflow: hidden;
}

#indice h2 {
  text-align: center;
  margin-bottom: 16px;
}

#indice ul {
  list-style-type: none;
  padding-left: 0;
}

#indice li {
  padding: 10px;
  border-bottom: 1px solid #eee;
  cursor: pointer;
  transition: background-color 0.1s ease;
}

#indice li:last-child {
  border-bottom: none;
}

#indice li:hover {
  background-color: #0897E9;
  color: white;
}

/* ==============================
  =      ESTILOS DE TABELAS        =
  ============================== */
.custom-grey {
  background-color: #ffffff;
}

.custom-grey th,
.custom-grey td {
  border: 1px solid #086ea8;
  padding: 10px;
  color:#064569
}

.custom-grey tr:nth-child(even) td {
  background-color: #d2e6f1;
}

.custom-grey tr:nth-child(odd) td {
  background-color: #f4f5f7;
}

.custom-grey th {
  color: #fff;
  background-color: #0897E9;
}



.custom-grey td {
  font-size: 13px;
}

.custom-grey tr:nth-child(odd) {
  background-color: #e4e4e6;
}

.custom-grey tr:nth-child(even) {
  background-color: #dfdfdf;
}

.custom-alert-warning {
  background-color: #fdf1dc; /* ou qualquer outra cor que preferir */
  color: #5c4225; /* cor do texto */
  border: 1px solid #d6800f; /* adicionando borda da mesma cor que o ícone */
  padding: 10px; /* adicione padding conforme necessário */
 
}

.custom-alert-warning .fas {
  color: #5c4225; /* cor do ícone no alerta de aviso */
  margin-right: 10px; /* espaço extra entre o ícone e o texto */
}

.custom-alert-danger {
  background-color: #ffe7ec; /* ou qualquer outra cor que preferir */
  color: #9e1d3b; /* cor do texto */
  border: 1px solid #eb7893; /* adicionando borda da mesma cor que o ícone */
  padding: 10px; /* adicione padding conforme necessário */
  
}

.custom-alert-danger .fas {
  color: #f34b72; /* cor do ícone no alerta de perigo */
  margin-right: 10px; /* espaço extra entre o ícone e o texto */
}


.alert-secondary-custom {
    background-color: #d9eefa; /* Cor de fundo do alerta */
    color: #094f77; /* Cor do texto */
    border: 1px solid #094f77; /* adicionando borda da mesma cor que o ícone */
  padding: 10px; /* adicione padding conforme necessário */
}

.alert-secondary-custom .fas {
    color: #0897E9; /* Cor dos ícones FontAwesome */
    margin-right: 10px; /* Espaço extra entre o ícone e o texto */
}

.custom-content ul li {
    list-style-type: disc !important; /* Forçando 'bolinhas' */
    padding-left: 30px; /* Espaçamento para alinhar com o texto se necessário */
    margin-bottom: 10px; /* Espaço entre itens da lista se necessário */
}

/* ========== FIM DO ESTILO ========= */

pre {
    border-radius: 5px;
    padding: 10px;
    overflow: auto;
  }

  .copy-button {
    background-color: #4CAF50;
    color: white;
    border: none;
    padding: 5px 10px;
    border-radius: 5px;
    cursor: pointer;
  }

  </style>
  

   





  <!-- Tabs e conteúdo das guias -->
  <div class="card">
    <ul class="tabs">
        <li class="tab col s4"><a href="#tab1">DETALHES FUNCIONAIS</a></li>
        <li class="tab col s4"><a href="#tab2">DETALHES TÉCNICOS</a></li>
        <li class="tab col s4"><a href="#tab3">FAQ</a></li>
    </ul>
     <!-- Tab Content -->
 
      <div id="tab1" class="col s12">
        <div class="tab-content">
          <div style="background-color: #f4f5f7; padding: 10px; margin-left: 50px; margin-right: 50px;">
            <section id="section1" style="margin-top: 40px;">
               <!-- Tab 70 conteúdo -->
  <!-- Segundo Card -->

    <!-- Primeiro Card -->
      <!-- Primeiro Card -->
  <div class="card">
    <div class="item">
      <span class="label">
        <table border="1">
          <tr>
              <td><i class="fas fa-tags"></i> <b>Produto:</b></td>
              <td>Automação da Força de Vendas</td>
          </tr>
          <tr>
              <td><i class="fas fa-link"></i> <b>Linha de Produto:</b></td>
              <td>TOTVS CRM</td>
          </tr>
          <tr>
              <td><i class="fas fa-chart-pie"></i> <b>Segmento:</b></td>
              <td>Cross Segmentos</td>
          </tr>
          <tr>
              <td><i class="fas fa-desktop"></i> <b>Módulo:</b></td>
              <td>Venda/PIX</td>
          </tr>
          <tr>
              <td><i class="fas fa-globe"></i> <b>Aplicação:</b></td>
              <td>Web/Mobile</td>
          </tr>
          <tr>
              <td><i class="fas fa-hashtag"></i> <b>Identificador:</b></td>
              <td>
                
                TSFAFSWE-3540  </td>
          </tr>
      </table>
      </span>
    </div>
    </div>
 

      <br>

      <h2 class="custom-heading">
        <i class="fa-solid fa-eye"></i>&nbsp &nbsp VISÃO GERAL
      </h2>
      <p class="justificado">
        A melhoria recente no módulo de pagamento via PIX no TOTVS SFA introduz configurações avançadas para gerenciar a expiração de QR Codes PIX e ações automáticas para pedidos não pagos dentro do prazo estipulado. Este recurso garante que os pagamentos sejam efetuados de maneira segura e dentro do tempo adequado, evitando atrasos e gerenciando de forma eficiente as expectativas dos clientes.

      </p>
<br>

    <h2 class="custom-heading">
      <i class="fa-solid fa-rocket"></i>&nbsp &nbsp OBJETIVO
    </h2>
    <p class="justificado">
      O objetivo desta implementação é otimizar o processo de pagamentos via PIX, proporcionando aos usuários maior controle sobre os prazos de validade dos QR Codes e automação nas ações de follow-up para pedidos expirados. A funcionalidade visa minimizar riscos financeiros e melhorar a experiência de pagamento, assegurando que todas as transações sejam concluídas ou adequadamente gerenciadas.

      </p>

  <!-- ... (seu conteúdo existente) ... -->


</section>


       
          </section>

          <section id="section2" style="margin-top: 40px;">
            <h2 class="custom-heading"><i class="fa-solid fa-star"></i>&nbsp DETALHES FUNCIONAIS</h2>
                
              <br>
              <ol start="1">
                <ul>
                  <li>
                    <strong>Interface de Configuração</strong>: Essa configuração é acessível na tela de configuração do plugin de pagamento PIX, onde os usuários podem inserir o tempo desejado de expiração para os QR Codes.
                  </li>
                </ul>
              </ol>

              <ol start="2">
                <li>
                  <p><strong>Ações Automáticas após Expiração</strong>:</p>
                  <ul>
                    <li style="list-style-type: disc; margin-left:15px;">
                      <strong>Opções de Ação Pós-Expiração</strong>: Os usuários têm a opção de configurar automaticamente ações específicas que o sistema deve executar quando o QR Code expira sem recebimento do pagamento. As ações disponíveis incluem:
                      <ul>
                        <li style="list-style-type: disc; margin-left:15px;"><strong>Reabrir o Pedido</strong>: Esta opção permite que o pedido seja reaberto para edição ou para a geração de um novo QR Code, mantendo o pedido ativo.</li>
                        <li style="list-style-type: disc; margin-left:15px;"><strong>Cancelar o Pedido</strong>: Com esta configuração, o pedido é automaticamente cancelado, o que pode ser útil em situações onde a intenção é não prosseguir com a venda sem o pagamento confirmado.</li>
                      </ul>
                    </li>
                  </ul>
                </li>
                <li>
                  <p><strong>Exibição do Tempo de Expiração</strong>:</p>
                  <ul>
                    <li style="list-style-type: disc; margin-left:15px;"><strong>Visibilidade do Prazo de Expiração</strong>: Uma vez que o QR Code é gerado, o sistema exibe a data e a hora exatas de expiração em uma nova coluna dentro da interface de listagem de pedidos. Isso proporciona transparência e ajuda os usuários a gerenciar melhor o tempo de pagamento esperado.</li>
                  </ul>
                </li>
              </ol>
                    <img src="https://totvscrm.com/wp-content/uploads/2024/08/MOCKUP-TDN-RELEASE-COMPONENTES13wwa-SFA2-Recuperado.png" alt="Visualização Android" title="Visualização Android" style="width: 80%; height: auto; max-width: 80%; display: block;"> 
                  
                                     </section>

   

                 
              
        
        </section>
         
      
            <section id="section3" style="margin-top: 40px;">
              <h2 class="custom-heading"><i class="fa-solid fa-shoe-prints"></i>&nbsp COMO USAR?</h2>
             
              <ol>
                <li>
                  <p><strong>Acesse as Configurações do Plugin de Pagamento PIX</strong>:</p>
                  <ul>
                    <li style="list-style-type: disc; margin-left:15px;">Vá até <strong>Configuração > Integração > Plugins de Integração</strong>.</li>
                    <li style="list-style-type: disc; margin-left:15px;">Encontre e selecione o plugin relacionado ao <strong>Pagamento PIX</strong>.</li>
                  </ul>
                </li>
                <li>
                  <p><strong>Defina o Tempo de Expiração</strong>:</p>
                  <ul>
                    <li style="list-style-type: disc; margin-left:15px;">Na tela de configuração do plugin, localize o campo para <strong>"Duração máxima da transação PIX antes de expirar"</strong>.</li>
                    <li style="list-style-type: disc; margin-left:15px;">Insira o tempo desejado para a validade do QR Code, em minutos ou horas.</li>
                  </ul>
                </li>
                <li>
                  <p><strong>Configure Ações Automáticas</strong>:</p>
                  <ul>
                    <li style="list-style-type: disc; margin-left:15px;">
                      Determine o que acontecerá quando o QR Code expirar:
                      <ul>
                        <li style="list-style-type: disc; margin-left:15px;"><strong>Reabrir o Pedido</strong>: para permitir edições ou nova geração de QR Code.</li>
                        <li style="list-style-type: disc; margin-left:15px;"><strong>Cancelar o Pedido</strong>: para cancelar automaticamente o pedido expirado.</li>
                      </ul>
                    </li>
                    <li style="list-style-type: disc; margin-left:15px;">Selecione a opção adequada e salve as configurações.</li>
                  </ul>
                </li>
                <li>
                  <p><strong>Teste as Configurações</strong>:</p>
                  <ul>
                    <li style="list-style-type: disc; margin-left:15px;">Após salvar, faça um teste para garantir que tudo está configurado corretamente.</li>
                  </ul>
                </li>
              </ol>


                <video autoplay loop muted style="width: 100%; height: auto; max-width: 100%; display: block;">
                  <source src="https://totvscrm.com/wp-content/uploads/2024/08/Vid-20240808-101130-1.mp4" type="video/mp4">
                </video>
              </p>
              <br>

        </section> 
         
        <section id="section4" style="margin-top: 40px;">
            <h2 class="custom-heading"><i class="fa-solid fa-signs-post"></i> &nbspEXEMPLO PRÁTICO</h2>
                         
            <p>
                
                <br>
                
                <b>Desafio Antigo:</b>
                <p> 
                  Gerenciamento ineficiente de pedidos com pagamento via PIX, onde os QR Codes expiravam sem ações claras para resolução, resultando em pedidos pendentes.
                  </p>
                
                <br>
                
                <b>Solução Atualizada:</b>
                <p>Com as novas configurações, os pedidos com QR Codes expirados são automaticamente gerenciados conforme as regras estabelecidas—reabrindo para nova ação do cliente ou cancelando—eliminando a incerteza e otimizando o fluxo de vendas.</p>
                
                <br>
                
                
                </p>
            </section> 
      
         
          </div>
          </div>
        </div>
   
          
            <!-- Tab 30 fim -->

            <div id="tab2" class="col s12">
              <div class="tab-content">
                <div style="background-color: #f4f5f7; padding: 20px; margin-left: 50px; margin-right: 50px;">
                  <section id="section5" style="margin-top: 40px;">
                  <!-- Primeira coluna do conteúdo da guia 2 -->
                  <h2 class="custom-heading"><i class="fa-solid fa-gear"></i>&nbsp DETALHES TÉCNICOS</h2>
      
                  <ul>
                    <li style="list-style-type: disc; margin-left:15px;">
                      <p>Alterar via Tools opção 3, a tabela PEDIDOPAGAMENTO:</p>
                      <div class="code panel pdl conf-macro output-block" style="border-width: 1px;" data-hasbody="true" data-macro-name="code">
                        <div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;">
                          <b>Alter Table PEDIDOPAGAMENTO</b>
                        </div>
                        <div class="codeContent panelContent pdl">
                          <pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: sql; gutter: false; theme: Confluence" data-theme="Confluence">alter table pedidopagamento add column dataexpiracao timestamp;</pre>
                        </div>
                      </div>
                    </li>
                    <li style="list-style-type: disc; margin-left:15px;">
                      <p>Adicionar na tela do plugin de Pagamento PIX, os campos conforme protótipo abaixo:<br/><br/>
                        <span class="confluence-embedded-file-wrapper confluence-embedded-manual-size">
                          <img class="confluence-embedded-image" draggable="false" height="250" src="/download/attachments/839300596/plugin_novo.png?version=3&modificationDate=1715129138033&api=v2" data-image-src="/download/attachments/839300596/plugin_novo.png?version=3&modificationDate=1715129138033&api=v2" data-unresolved-comment-count="0" data-linked-resource-id="839300634" data-linked-resource-version="3" data-linked-resource-type="attachment" data-linked-resource-default-alias="plugin_novo.png" data-base-url="https://tdn.totvs.com" data-linked-resource-content-type="image/png" data-linked-resource-container-id="839300596" data-linked-resource-container-version="17" alt="">
                        </span>
                      </p>
                      <p><br/></p>
                      <p><br/></p>
                    </li>
                  </ul>
             
                  <div class="code panel pdl conf-macro output-block" style="border-width: 1px;" data-hasbody="true" data-macro-name="code">
                    <div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;">
                      <b>Novos Campos</b>
                    </div>
                    <div class="codeContent panelContent pdl">
                      <pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: xml; gutter: false; theme: Confluence" data-theme="Confluence">
                        Campo "Duração máxima transação PIX antes de expirar"
                          idpluginintegracao: select idpluginintegracao from pluginintegracao where codigo = 'TPI',
                          codigoelemento: TPI,
                          agrupador: 0,
                          sglcampo: TPI_EXPIRATIONDATE
                          valor: {padrão 1440}
                        Campo "Ação automática sobre o pedido quando o serviço de atualização de status identificar que a transação expirou"
                          idpluginintegracao: select idpluginintegracao from pluginintegracao where codigo = 'TPI',
                          codigoelemento: TPI,
                          agrupador: 0,
                          sglcampo: TPI_OPEN
                          valor: {0 ou 1, padrão 1}
                        
                        Campo "Ação automática sobre o pedido quando o serviço de atualização de status identificar que a transação expirou"
                          idpluginintegracao: select idpluginintegracao from pluginintegracao where codigo = 'TPI',
                          codigoelemento: TPI,
                          agrupador: 0,
                          sglcampo: TPI_CANCEL
                          valor: {0 ou 1, padrão 0}
                      </pre>
                    </div>
                  </div>
                  <p><br/></p>
                  <ul>
                    <li style="list-style-type: disc; margin-left:15px;">
                      <strong>Para o campo referente à ação que deve ser executada, somente uma opção pode estar selecionada pelo usuário.</strong><br/><br/>
                    </li>
                    <li style="list-style-type: disc; margin-left:15px;">
                      O valor retornado na tag DATAEXPIRACAO <span style="color: rgb(23,43,77);">deve ser persistido em PEDIDOPAGAMENTO.DATAEXPIRACAO;<br/><br/></span>
                    </li>
                    <li style="list-style-type: disc; margin-left:15px;">
                      Alterar a tela Pagamentos do Pedido, para incluir a nova coluna referente à data para expirar da transação:<br/><br/>
                      <span class="confluence-embedded-file-wrapper confluence-embedded-manual-size">
                        <img class="confluence-embedded-image" draggable="false" height="250" src="/download/attachments/839300596/data_expirar.png?version=1&modificationDate=1715030903243&api=v2" data-image-src="/download/attachments/839300596/data_expirar.png?version=1&modificationDate=1715030903243&api=v2" data-unresolved-comment-count="0" data-linked-resource-id="842269655" data-linked-resource-version="1" data-linked-resource-type="attachment" data-linked-resource-default-alias="data_expirar.png" data-base-url="https://tdn.totvs.com" data-linked-resource-content-type="image/png" data-linked-resource-container-id="839300596" data-linked-resource-container-version="17" alt="">
                      </span><br/><br/>
                      <ul>
                        <li style="list-style-type: disc; margin-left:15px;">
                          <strong>A informação para essa nova coluna virá de PEDIDOPAGAMENTO.DATAEXPIRACAO.</strong>
                        </li>
                      </ul>
                    </li>
                  </ul>
                  <h3 id="MelhoriasnasregrasdenegóciodepedidoscomPIX-INTEGRAÇÃO"><strong>INTEGRAÇÃO</strong></h3>
                  <ul>
                    <li style="list-style-type: disc; margin-left:15px;">
                      Alterar o Job TPIGENERATEPAYMENT para calcular a data e hora para obter a data para expirar da transação PIX;<br/>
                      <ul>
                        <li style="list-style-type: disc; margin-left:15px;">
                          <p>Utilizar o script abaixo para obter a data e hora para expirar da transação:<br/><br/></p>
                          <div class="code panel pdl conf-macro output-block" style="border-width: 1px;" data-hasbody="true" data-macro-name="code">
                            <div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;">
                              <b>Busca Tempo</b>
                            </div>
                            <div class="codeContent panelContent pdl">
                              <pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: sql; gutter: false; theme: Confluence" data-theme="Confluence">
                                SELECT current_timestamp +(SELECT cast(valor as integer) FROM pluginintconfig WHERE sglcampo = 'TPI_EXPIRATIONDATE' AND codigoelemento = 'TPI') * interval '1 minute' AS data_expirar;
                              </pre>
                            </div>
                          </div>
                        </li>
                        <li style="list-style-type: disc; margin-left:15px;">
                          Somar a data e hora do momento em que a transação é gerada com o tempo cadastrado pelo cliente, e incluir dentro do JSON de requisição:<br/><br/><strong>"expirationDate": "YYYY-MM-DD HH:MM:SS"</strong><br/><br/>
                        </li>
                        <li style="list-style-type: disc; margin-left:15px;">
                          O retorno se a data e hora foi aceita pela TPI estará na tag "expiresAt" no JSON de RESPONSE;<br/><br/>
                        </li>
                      </ul>
                    </li>
                    <li style="list-style-type: disc; margin-left:15px;">
                      Adicionar no Job TPIUPDATESTATUS, a validação da ação que deve ser tomada automaticamente quando a transação PIX tiver expirado sem a confirmação do pagamento;<br/><br/>
                      <ul>
                        <li style="list-style-type: disc; margin-left:15px;">
                          <p>Usar o script abaixo para obter qual ação foi cadastrada pelo usuário:<br/><br/></p>
                          <div class="code panel pdl conf-macro output-block" style="border-width: 1px;" data-hasbody="true" data-macro-name="code">
                            <div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;">
                              <b>Busca Ação</b>
                            </div>
                            <div class="codeContent panelContent pdl">
                              <pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: sql; gutter: false; theme: Confluence" data-theme="Confluence">
                                select case when sglcampo ='TPI_OPEN' then valor end as REABRIR, case when sglcampo ='TPI_CANCEL' then valor end as CANCELAR from pluginintconfig p where sglcampo in('TPI_OPEN','TPI_CANCEL')
                              </pre>
                            </div>
                          </div>
                        </li>
                      </ul>
                    </li>
                  </ul>
                    
                    <p><br/></p><ul><li>Se o plugin estiver configurado para REABRIR, pedido cuja transação tenha expirado devem ter a situação alterada para NÃO FINALIZADO - NF;<br/><br/></li><li>Se o plugin estiver configurado para CANCELAR, pedido cuja transação tenha expirado devem ter a situação alterada para CANCELADO - PC;<br/><br/><ul><li><p>Utilizar a consulta abaixo para identificar os pedidos que devem ter a situação atualizada:<br/><br/></p><div class="code panel pdl conf-macro output-block" style="border-width: 1px;" data-hasbody="true" data-macro-name="code"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>Busca Ação</b></div><div class="codeContent panelContent pdl">
                    <pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: sql; gutter: false; theme: Confluence" data-theme="Confluence">SELECT p.idpedido
                    FROM   pedido p
                           INNER JOIN pedidopagamento pp
                                   ON p.idpedido = pp.idpedido
                           INNER JOIN tiposituacaopagamento t
                                   ON t.idtiposituacaopagamento = pp.idtiposituacaopagamento
                           INNER JOIN tiposituacaopedido tp
                                   ON tp.idtiposituacaopedido = p.idtiposituacaopedido
                    WHERE  t.sgltiposituacaopagamento = 'EXP'
                           AND (SELECT Count(idpedido)
                                FROM   pedidopagamento p2
                                       INNER JOIN tiposituacaopagamento t2
                                               ON
                                       t2.idtiposituacaopagamento = p2.idtiposituacaopagamento
                                WHERE  t2.sgltiposituacaopagamento in ('PEND', 'APR')
                                       AND p2.idpedido = p.idpedido) = 0
                           AND p.idnexportadoerp = 0
                           AND tp.sgltiposituacaopedido = 'PP';</pre>
                    </div></div></li></ul></li></ul></li><li>Se não houver uma configuração definida, o comportamento atual deve ser mantido e a situação do pedido não deve ser alterada.<br/><p><br/></p></li></ul></li></ul>
                    
                                    
                            
                        
                   
                    
      <!-- Second Card -->
      
                 
      
      
                    </div>
      
              </div>
          </div> 
       

     
      <!-- Second Card -->

    

    <div id="tab3" class="col s12">
      <div class="tab-content">
        <div style="background-color: #f4f5f7; padding: 20px; margin-left: 50px; margin-right: 50px;">
              <!-- Primeira coluna do conteúdo da guia 2 -->
              <div class="container">
                <h2 class="custom-heading"><i class="fa-solid fa-circle-question"></i> PERGUNTAS FREQUENTES</h2>
                <ul class="collapsible">
                  <li>
                    <div class="collapsible-header"><i class="material-icons">question_answer</i> O que acontece quando o tempo de expiração do QR Code é atingido sem o pagamento ser realizado?
                        </div>
                    <div class="collapsible-body"><span> Dependendo da configuração escolhida, o pedido pode ser automaticamente reaberto para edição e nova tentativa de pagamento, ou cancelado, removendo-o da lista de pedidos ativos.
                      </span></div>
                </li> 
                
                    <!-- Adicione mais perguntas e respostas aqui conforme necessário -->
                  
                       
        

                    <!-- Adicione mais perguntas e respostas aqui conforme necessário -->

                        <!-- Adicione mais perguntas e respostas aqui conforme necessário -->
                </ul>
                
            </div>     </div>

                            <!-- Primeira coluna do conteúdo da guia 2 -->

      


           
    
<script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script>
<script>
  // Inicialização das tabs
  document.addEventListener("DOMContentLoaded", function () {
    var tabs = document.querySelectorAll(".tabs");
    M.Tabs.init(tabs);
  });
</script>

<script>
  const items = document.querySelectorAll("#indice li");

  items.forEach(item => {
      item.addEventListener('click', (e) => {
          const targetId = e.target.getAttribute('data-target');
          const targetElement = document.getElementById(targetId);
          window.scrollTo({
              top: targetElement.offsetTop - 10,
              behavior: "smooth"
          });
      });
  });
</script>

<script src="https://kit.fontawesome.com/c97d4c197a.js" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script>
 


<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min.js"></script> 

<script>hljs.highlightAll();</script>

<script>
  hljs.highlightAll();

  function copyCode() {
    navigator.clipboard.writeText(document.querySelector('code').innerText)
      .then(() => {
        alert('Código copiado com sucesso!');
      })
      .catch(err => {
        console.error('Erro ao copiar código: ', err);
      });
  }
</script>
  


<script src="scripts.js"></script>

<script>
  document.addEventListener('DOMContentLoaded', function() {
      var elems = document.querySelectorAll('.collapsible');
      var instances = M.Collapsible.init(elems);
  });
</script>

 <!-- ... (conteudo video) ... -->
 <script src="https://www.youtube.com/iframe_api"></script>

 <script>
  var player;
  function onYouTubeIframeAPIReady() {
    player = new YT.Player('player', {
      height: '315',
      width: '560',
      videoId: 'FvsuBOvyyro',
      playerVars: {
        start: 1238, // 20:38 em segundos
        end: 1356   // 22:36 em segundos
      }
    });
  }
</script>







01. DADOS GERAIS

...

TOTVS CRM Automação da Força de Vendas

...

Linha TOTVS CRM SFA

...

02. ESCOPO FUNCIONAL

  1. Exibição dos campos de Data Transmissão e Hora Transmissão

Atualmente não é possível visualizar a data e hora que o pedido realizado no mobile foi transmitido ( sincronizado) para o servidor, desta forma será necessário acrescentar os campos datatransmissao e horatransmissao com a descrição "Data/hora sincronização:" na aba de complemento do pedido através do módulo de configuração do pedido engine, permitindo assim, a exibição ou não dos campos conforme a necessidade.

03. ESCOPO TÉCNICO

Dentro da tela "Configuração" → "Configuração pedido" → "Complemento" deverá ser adicionado o seguinte campo: 

"Data/hora sincronização:"

Campo: datatransmissao;
Chave da label: Label:standard.pedido.complemento.data.hora.transmissao;
Label: "Data/hora sincronização:";
Permite visualizar: "Sim";
Permite editar: "Não";
Permite Cadastrar: "Não";
Obrigatório: "Não";

O Campo datatransmissao deverá exibir a informação dos campos datatransmissao e horatransmissao concatenados, por exemplo: [datatransmissao] [horatransmissao] ("25/03/2022  16:00:12")

...