<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[akitasoft-layers-api]]></title><description><![CDATA[<h1>Guia de Configuração — Integração Akita Soft × Layers</h1>
<h2>O que é esta aplicação?</h2>
<p dir="auto">A <code>akitasoft-layers-api</code> é uma API intermediária que conecta o <strong>Akita Soft</strong> à plataforma educacional <strong>Layers</strong>. Ela permite que responsáveis visualizem os registros de entrada e saída dos alunos diretamente no aplicativo da Layers e também recebam notificações sobre as entradas e saídas dos alunos.</p>
<hr />
<h2>Passo 1 — Criar o arquivo de configuração</h2>
<p dir="auto">A aplicação <strong>não armazena configurações sensíveis no WAR</strong>. É necessário criar um arquivo externo no servidor.</p>
<p dir="auto">Crie o arquivo no seguinte caminho (substitua <code>&lt;usuario&gt;</code> pelo usuário do sistema que executa o Tomcat):</p>
<pre><code>/home/&lt;usuario&gt;/.grails/akitasoft-layers-apiConfig/application.yml
</code></pre>
<p dir="auto">Crie os diretórios se necessário:</p>
<pre><code class="language-sh">mkdir -p /home/&lt;usuario&gt;/.grails/akitasoft-layers-apiConfig
</code></pre>
<hr />
<h2>Passo 2 — Preencher o arquivo de configuração</h2>
<p dir="auto">Cole o conteúdo abaixo no arquivo criado e preencha os valores indicados:</p>
<pre><code># Conexão com o banco de dados Oracle (Akita Soft)
dataSource:
  url: jdbc:oracle:thin:@&lt;host&gt;:&lt;porta&gt;:&lt;sid&gt;
  username: '&lt;usuario_banco&gt;'
  password: '&lt;senha_banco&gt;'

# Configurações da integração com a Layers
layers:
  apiUrl: https://api.layers.digital
  secret: '&lt;secret_fornecido_pela_layers&gt;'               # Deve ser gerado no ambiente da Layers e configurado aqui para autenticação
  accessToken: '&lt;token_de_acesso_fornecido_pela_layers&gt;' # Deve ser gerado no ambiente da Layers e configurado aqui para autenticação
  communityId: '&lt;id_da_comunidade_na_layers&gt;'            # Localizado no ambiente da Layers, necessário para associar os acessos à comunidade correta

# Configurações de comportamento da API
api:
  acessos:
    codIntegracao:
      paddingSize: 0      # Largura do zero-padding do alias enviado à Layers (0 = sem padding; ex: 6 transforma "42" em "000042")
    filtro:
      tipoPessoa: ''      # Deixar vazio para não filtrar, ou informar os tipos pessoas que devem ser considerados na busca dos acessos (ex: '1,2,3')
      diasRetroativos: 90 # Quantos dias anteriores de acesso serão retornados para os responsáveis
      minutosRetroativos: 10 # Quantos minutos antes do updatedAfter a consulta de acessos pendentes deve recuar (Fluxo 2)
    job:
      intervaloMinutos: 1  # intervalo em minutos do job de publicação de novos acessos
</code></pre>
<blockquote>
<p dir="auto"><strong>Atenção:</strong> o arquivo deve ser salvo com encoding <strong>UTF-8</strong> e indentação com <strong>espaços</strong> (não use Tab).</p>
</blockquote>
<hr />
<h2>Passo 3 — Configurações no sistema</h2>
<p dir="auto">Antes de ativar a integração, os cadastros nos dois sistemas devem estar alinhados. A API utiliza o campo <code>cod_integracao</code> do Akita Soft como chave de vínculo com o <code>alias</code> do aluno na Layers.</p>
<h3>Akita Soft</h3>
<p dir="auto"><strong>3.1 — Vincular alunos à Layers</strong></p>
<p dir="auto">Para cada aluno que deve ser integrado, o campo <code>cod_integracao</code> na tabela <code>controles_pessoas</code> deve estar preenchido com o <strong>alias do aluno cadastrado na Layers</strong>.</p>
<p dir="auto">Alunos com <code>cod_integracao</code> nulo são ignorados pela integração.</p>
<p dir="auto"><strong>3.2 — Configurar os relógios de acesso</strong></p>
<p dir="auto">A integração considera <strong>somente acessos registrados em relógios marcados como "Saída de empresa"</strong> (campo <code>saida_empresa = 'S'</code> na tabela <code>relogios_acessos</code>). Relógios internos (cancelas entre setores, por exemplo) não devem ter esse campo marcado, pois gerariam registros indevidos para os responsáveis.</p>
<p dir="auto">Verifique quais relógios representam as entradas e saídas do estabelecimento e confirme que apenas eles estão com <code>saida_empresa = 'S'</code>.</p>
<p dir="auto"><strong>3.3 — Tipos de acesso considerados</strong></p>
<p dir="auto">A integração processa acessos dos tipos <strong>Entrada (<code>E</code>)</strong> e <strong>Saída (<code>S</code>)</strong> — ambos são enviados para a Layers, que os exibe como <code>entrance</code> e <code>exit</code>, respectivamente.</p>
<p dir="auto"><strong>3.4 — Status do acesso</strong></p>
<p dir="auto">Somente acessos com <code>status_acesso = 1</code> (sucesso) são considerados. Tentativas negadas ou com erro são ignoradas.</p>
<p dir="auto"><strong>3.5 — Filtro por tipo de pessoa (opcional)</strong></p>
<p dir="auto">Se a instituição utiliza o Akita Soft para controlar o acesso de diferentes perfis (alunos, funcionários, visitantes), é possível limitar a integração a perfis específicos pelo campo <code>tipo_pessoa</code> da tabela <code>acessos_pessoas</code>. Configure os IDs desejados em <code>api.acessos.filtro.tipoPessoa</code> no arquivo de configuração. Deixar em branco integra todos os perfis.</p>
<hr />
<h3>Layers</h3>
<p dir="auto"><strong>3.6 — Cadastrar um identificador no usuário do responsável</strong></p>
<p dir="auto">Cada responsável deve ter um <code>identificador</code> cadastrado no seu usuário da Layers. Esse campo é necessário para que as notificações de acesso sejam entregues corretamente.</p>
<p dir="auto"><strong>3.7 — Cadastrar os alunos como membros</strong></p>
<p dir="auto">Cada aluno deve ser cadastrado na Layers como membro com o <code>ID</code> igual ao valor de <code>cod_integracao</code> do Akita Soft. Sem esse vínculo, os acessos do aluno não serão localizados.</p>
<p dir="auto"><strong>3.8 — Associar os responsáveis</strong></p>
<p dir="auto">Cada responsável deve estar associado ao aluno na Layers com a permissão <strong>"Responsável"</strong> (<code>guardian</code>). Somente usuários com essa permissão receberão as notificações de acesso do aluno.</p>
<hr />
<h2>Fluxo da integração</h2>
<p dir="auto">A integração opera em dois fluxos independentes: um para <strong>consulta de histórico</strong> e outro para <strong>notificações em tempo real</strong>.</p>
<hr />
<h3>Fluxo 1 — Consulta de acessos pelo responsável</h3>
<p dir="auto">Ativado quando o responsável abre a tela de registros de entrada/saída no aplicativo da Layers.</p>
<p dir="auto"><img src="/assets/uploads/files/1779384731840-fluxo_1-resized.png" alt="fluxo_1.png" class="img-responsive img-markdown" /></p>
<p dir="auto"><strong>Filtros aplicados na consulta de acessos:</strong></p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Critério</th>
<th>Valor</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>status_acesso</code></td>
<td><code>1</code> (sucesso)</td>
</tr>
<tr>
<td><code>tipo_acesso</code></td>
<td><code>E</code> (Entrada) ou <code>S</code> (Saída)</td>
</tr>
<tr>
<td><code>relogios_acessos.saida_empresa</code></td>
<td><code>S</code></td>
</tr>
<tr>
<td><code>controles_pessoas.cod_integracao</code></td>
<td>não nulo</td>
</tr>
<tr>
<td><code>data_acesso</code></td>
<td>últimos <code>diasRetroativos</code> dias (padrão: 90, configurável via <code>api.acessos.filtro.diasRetroativos</code>)</td>
</tr>
<tr>
<td><code>tipo_pessoa</code></td>
<td>filtrável via config (opcional)</td>
</tr>
</tbody>
</table>
<hr />
<h3>Fluxo 2 — Notificação em tempo real</h3>
<p dir="auto">Ativado automaticamente pelo job agendado. Quando um novo acesso é registrado no Akita Soft, os responsáveis recebem uma notificação push no aplicativo da Layers.</p>
<p dir="auto"><img src="/assets/uploads/files/1779384893232-fluxo_2-resized.png" alt="fluxo_2.png" class="img-responsive img-markdown" /></p>
]]></description><link>http://insoft-docker1:4567/topic/498/akitasoft-layers-api</link><generator>RSS for Node</generator><lastBuildDate>Fri, 23 Oct 2026 05:33:22 GMT</lastBuildDate><atom:link href="http://insoft-docker1:4567/topic/498.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 19 May 2026 12:07:06 GMT</pubDate><ttl>60</ttl></channel></rss>