# Arquitetura do sistema

O módulo é uma **biblioteca ISNAPP** (padrão de extensão do ERP) composta por três arquivos e integrada a múltiplos bancos MySQL.

![Arquitetura em camadas: apresentação, lógica PHP e múltiplos bancos MySQL.](https://kb.illimitar.pro/uploads/images/gallery/2026-06/embedded-image-knhkbliz.png)

Figura 6 — Arquitetura em camadas: apresentação, lógica PHP e múltiplos bancos MySQL.

## Bancos de dados envolvidos

<table id="bkmrk-vari%C3%A1vel-php-nome-do"><tbody><tr><th>Variável PHP</th><th>Nome do banco</th><th>Uso</th></tr><tr><td>`$banco`</td><td>Dinâmico (tenant)</td><td>Pedidos, itens, entidades, recebimentos</td></tr><tr><td>`$bancoRelatorio`</td><td>`{banco}_relatorio`</td><td>Tabela `log` com ponteiro de última execução</td></tr><tr><td>`$bancoIntegrador`</td><td>`{banco}_integrador`</td><td>Stage de integração LX (`stage_pedido_lx`)</td></tr><tr><td>`$bancoMasterRelatorio`</td><td>`franquia_osklen_relatorio`</td><td>Tabela de destino `franquia_1beat` (compartilhada)</td></tr></tbody></table>

<div class="caixa-simples" id="bkmrk-para-entender-sem-ja">**Para entender sem jargão:** o sistema lê informações de três "pastas" diferentes no banco de dados e grava o resultado organizado em uma "pasta central" que o OneBeat consulta.</div>## Tabelas de origem (leitura)

<table id="bkmrk-tabela-banco-papel-m"><tbody><tr><th>Tabela</th><th>Banco</th><th>Papel</th></tr><tr><td>`movimentacao`</td><td>{banco}</td><td>Cabeçalho dos pedidos e recebimentos</td></tr><tr><td>`movimentacao_detalhe`</td><td>{banco}</td><td>Itens (produtos) de cada movimentação</td></tr><tr><td>`movimentacao_movimentacao`</td><td>{banco}</td><td>Vínculo pai-filho (pedido → recebimento)</td></tr><tr><td>`entidade`</td><td>{banco}</td><td>Dados da filial (loja)</td></tr><tr><td>`juridica`</td><td>{banco}</td><td>CNPJ da filial</td></tr><tr><td>`stage_pedido_lx`</td><td>{banco}\_integrador</td><td>Integração com sistema LX (LEFT JOIN)</td></tr><tr><td>`log`</td><td>{banco}\_relatorio</td><td>Controle de ponteiro (`procedure = 'franquia_1beat'`)</td></tr></tbody></table>

## Classe principal

**Classe:** `onebeat_pedidos_faturados` extends `util`

**Token:** `6b5b2af8-ab25-4135-9551-b3cb3e055f1a`

**CoreVersion:** 3

**Métodos públicos principais:**

<div class="caixa-tecnica" id="bkmrk-index%28%29-%E2%80%94-exibe-visu">- `index()` — exibe visual.html
- `run()` — execução principal (sincronização)
- `verificaGetLock()` — controle de concorrência
- `getPonteiroExecucao()` — última data processada
- `getPedidoUltimaVerificacao()` — data do pedido mais recente
- `getPedidosRecebidos()` — INSERT/UPDATE na tabela destino
- `removePedidosStatus()` — limpeza de registros desativados
- `atualizaPonteiroExecucao()` — grava novo ponteiro

</div>## Mecanismo de lock (concorrência)

Para evitar que duas execuções rodem ao mesmo tempo, o módulo usa um **arquivo de lock** no diretório temporário do sistema operacional:

`/tmp/{banco}.onebeat_pedidos_faturados_run.lock`

<div class="caixa-tecnica" id="bkmrk-usa-flock%28lock_ex-%7C-">Usa `flock(LOCK_EX | LOCK_NB)` — lock exclusivo não-bloqueante. Se outro processo já estiver rodando, lança exceção: *"Ja tem outro processo em execucao, aguarde o termino"*. O lock é liberado no bloco `finally` via `__releaseLock()`.</div>