# Arquitetura

Esta página explica a arquitetura técnica do WCPOS para desenvolvedores e usuários avançados.

## Sistema em Duas Partes[​](#two-part-system "Link direto para Sistema em Duas Partes")

O WCPOS é projetado como um sistema em duas partes:

1. **Plugin PHP:** Hospedado em seu servidor, este é um plugin relativamente pequeno que estende a [API REST do WooCommerce](/pt-BR/reference/wc-rest-api.md).

2. **Cliente JavaScript:** Este roda localmente em seu navegador ou no aplicativo de desktop, e posteriormente nos aplicativos iOS e Android.

Você pode pensar nisso como dois mundos separados:

* O *mundo PHP* é onde a gestão de dados acontece usando WordPress e WooCommerce.
* O *mundo JavaScript* replica sua loja WooCommerce localmente, otimizado para pesquisa rápida e uso offline.

SVG not found

## Sincronização de Dados[​](#data-synchronization "Link direto para Sincronização de Dados")

Os dados são buscados do WooCommerce usando a [API REST do WooCommerce](https://woocommerce.github.io/woocommerce-rest-api-docs/). Isso significa que o POS precisa baixar cada produto, variação, categoria de produto, cliente, taxa de imposto e mais para armazená-los localmente.

Embora isso possa ser demorado inicialmente, uma vez baixados, eles estão disponíveis instantaneamente sem a necessidade de buscar continuamente do servidor.

### O que é Sincronizado?[​](#what-gets-synced "Link direto para O que é Sincronizado?")

* Produtos e variações
* Categorias e tags de produtos
* Clientes
* Taxas de imposto e classes de imposto
* Gateways de pagamento (para o checkout)
* Pedidos (para histórico de pedidos no Pro)

### Estratégia de Sincronização[​](#sync-strategy "Link direto para Estratégia de Sincronização")

O WCPOS usa uma estratégia de sincronização incremental:

1. **Sincronização inicial:** Baixa todos os dados na primeira carga
2. **Atualizações incrementais:** Apenas busca as alterações desde a última sincronização
3. **Sincronização em segundo plano:** Verifica periodicamente por atualizações
4. **Sincronização manual:** O usuário pode acionar uma sincronização a qualquer momento

## Prós e Contras da Arquitetura[​](#architecture-pros-and-cons "Link direto para Prós e Contras da Arquitetura")

| Bom 😊                                                                       | Ruim 😟                                                            |
| ---------------------------------------------------------------------------- | ------------------------------------------------------------------ |
| A pesquisa de dados locais é instantânea                                     | Manter os dados sincronizados é desafiador                         |
| Dados em cache disponíveis offline                                           | Limitado pela API REST do WooCommerce                              |
| Capacidade de criar melhores aplicativos nativos para desktop, iOS e Android | Temas e hooks do WordPress não podem personalizar o aplicativo POS |

## Banco de Dados Local[​](#local-database "Link direto para Banco de Dados Local")

O cliente JavaScript armazena dados no IndexedDB, um banco de dados baseado em navegador. Isso fornece:

* **Persistência:** Os dados sobrevivem a reinicializações do navegador
* **Performance:** Consultas rápidas sem latência de rede
* **Navegação offline:** Dados em cache permanecem acessíveis sem internet

## Arquitetura de Checkout[​](#checkout-architecture "Link direto para Arquitetura de Checkout")

O processo de checkout usa um iframe/webview que carrega a página de Pagamento do Pedido do WooCommerce. Esta abordagem:

* **Aproveita gateways de pagamento existentes:** Qualquer gateway de pagamento do WooCommerce pode funcionar no POS
* **Mantém segurança:** O processamento de pagamentos ocorre através da infraestrutura segura do WooCommerce
* **Reduz complexidade:** Não há necessidade de reimplementar integrações de gateways de pagamento

## Extensões da API[​](#api-extensions "Link direto para Extensões da API")

O plugin PHP estende a API REST do WooCommerce com endpoints adicionais para funcionalidade específica do POS. Veja a [API REST do WooCommerce](/pt-BR/reference/wc-rest-api.md) para detalhes.
