# Arquitetura do sistema

O software Pinpad Getnet é construído sobre uma arquitetura modular projetada para operar como um periférico de pagamento seguro. Ele processa comandos de forma assíncrona e gerencia os estados da transação de forma centralizada. Um fluxo de interface (UI) gerenciado garante uma experiência de usuário consistente.

## Estrutura interna de software

A arquitetura do aplicativo é formada por módulos especializados que interagem para gerenciar a comunicação, as interfaces de hardware e a lógica de negócio. Esse design assíncrono permite que o sistema mantenha vários comandos em diferentes estágios de execução ao mesmo tempo.

### Módulos principais

* **`SerialCom`**: biblioteca que oferece uma interface unificada para estabelecer a comunicação serial. Ela gerencia a inicialização e a configuração da porta, incluindo **baud rate, data bits, parity e stop bits**.
* **`HandlerCommands` (orquestrador de comandos)**: controlador de lógica central responsável pelo ciclo de vida dos comandos suportados: **Y19, Y02, Y03, Y15, Y06, Y0Q, Y0E, YDL e Y0I**. Cada comando tem sua própria máquina de estados independente.
* **`Transaction`**: centraliza todos os dados e status da transação ativa. Atua como a única fonte de verdade para valores, dados do cartão e estados de erro.
* **`CardReader`**: gerencia as interações físicas com os leitores de cartão (**CHIP, CTLSS, BANDA**). Ele monitora os estados de leitura e monta as tags TLV necessárias para a comunicação com o host.
* **`EmvL3Flow`**: coordena o complexo protocolo EMV. Ele carrega as configurações (AIDs/CAPKs) e coordena a autenticação. Em especial, ele **inicia automaticamente a solicitação de PIN** quando o protocolo do cartão exige.
* **`PinEntryActivity`**: gerencia o teclado seguro para a entrada de PIN pelo usuário. Suporta fluxos de validação online, offline e offline criptografado, conforme acionados pelo `EmvL3Flow`.

![](https://static-devportal-ux.sensedia-eng.com/Pagonxt/staging/documentations/getnet-diagram-2-1772307767262-9yj303fe.png)

## Comportamento do sistema e fluxo de UI

O aplicativo garante a integridade da transação por meio da persistência do processo e de um sistema de navegação gerenciado.

### Serviço em primeiro plano

O aplicativo é executado como um **foreground service** do Android. Isso impede que o sistema operacional encerre o processo durante o uso ativo. Assim, a comunicação serial e a lógica de transação permanecem persistentes em momentos críticos.

### Navegação de UI/UX

A navegação é controlada por uma função `NAV` especializada, que gerencia as telas ativas com base no estado da transação. As principais telas do sistema incluem:

* **IDLE**: o estado base, aguardando uma ação.
* **Aguardando cartão**: pede ao usuário que insira, aproxime ou passe o cartão.
* **Seleção de aplicativo**: usada quando o cartão contém vários Identificadores de Aplicativo (AIDs).
* **Entrada segura**: telas específicas para entrada de PIN, códigos de segurança (CDS) ou verificação dos dígitos do cartão.
* **Processamento**: indica que uma operação está em andamento.
* **Cancelamento / Erro temporário**: telas de feedback para operações que falharam ou foram abortadas.

## Recursos relacionados

Agora que você entende a arquitetura interna e como os módulos interagem, explore o tratamento técnico dos diferentes tipos de cartão e dos protocolos de segurança:

1. [**Tratamento de Cartão e EMV**](https://docs.globalgetnet.com/pt/products/in-store-payments/host-to-host?doc=h2h-card-and-emv-handling\&section=qkgon7kvze04x46w47u75f1n): como o terminal gerencia as tecnologias de leitura, os protocolos EMV e as regras de fallback de tecnologia.
2. [**Modelo de Segurança e PIN**](https://docs.globalgetnet.com/pt/products/in-store-payments/host-to-host?doc=h2h-security-and-pin-model\&section=qkgon7kvze04x46w47u75f1n): os requisitos criptográficos de RSA e DUKPT que garantem a segurança dos dados processados.
3. [**Criptografia do Pinpad**](https://docs.globalgetnet.com/pt/products/in-store-payments/host-to-host?doc=h2h-pinpad-encryption): qual esquema protege cada elemento de dados e como as chaves são selecionadas.