# Arquitetura e validação

PHP puro com PDO MySQL; não exige dependências PHP externas. Interface React compilada, com assets locais. Não há CDN, conexão ao ChatGPT ou licença remota exigida para funcionamento.

As tabelas relacionais guardam planos, empresas, lojas, usuários, vínculos, limites de login e auditoria. Os registros operacionais do ERP ficam num documento JSON por loja em uma coluna LONGTEXT MySQL. Esse desenho facilita instalação e backup, mas esta versão é uma base funcional para pequenos cadastros, não uma arquitetura de ERP de grande escala. O limite operacional é 16 MB por loja. Relatórios SQL analíticos externos exigem processamento do JSON ou evolução para tabelas operacionais normalizadas.

Gravações bloqueiam a linha da loja com SELECT FOR UPDATE e conferem a revisão. Ações são aplicadas no servidor sobre o estado completo e persistidas numa transação. Campos enviados pelo navegador não podem substituir o documento inteiro. A resposta é filtrada de acordo com o perfil. A loja é fixada por um ID no cabeçalho, autorizado a cada requisição, evitando troca acidental de dados entre abas.

Senhas usam bcrypt; não há senha padrão. Login tem limite de tentativas por e-mail/IP e por IP. Sessões têm cookies HttpOnly/SameSite, expiração por inatividade e versão revogável. Formulários e a API exigem CSRF. Cadastro de senha temporária obriga troca no primeiro acesso. SQL usa parâmetros; prefixos e identificadores são validados. A configuração e as sessões ficam fora da raiz pública. O instalador exige chave privada do pacote, HTTPS e bloqueia reinstalação.

Auditoria registra acesso, seleção de loja, alterações de empresas/planos/usuários e operações do ERP, sem senhas ou conteúdo clínico nos detalhes. Não há política automática de retenção dos logs nesta versão; planeje manutenção e backup conforme seu uso.

## Desenvolvimento da interface

Node só é necessário para alterar/recompilar o frontend. O pacote de instalação já vem compilado.

1. npm install
2. npm run typecheck
3. npm run build

O fonte está em frontend/. O build atualiza public/assets/app.js e app.css. Envie os arquivos compilados ao servidor; não envie node_modules.

## Testes

- php tests/domain.php: testes das regras de agenda, pacotes, histórico, clínica, estoque e financeiro.
- tests/http_integration.py: teste HTTP destrutivo limitado a localhost e a uma instalação descartável. Usa Python padrão. Exige APF_TEST_ALLOW_INSTALL=yes, APF_TEST_BASE e parâmetros APF_TEST_DB_HOST/PORT/NAME/USER/PASSWORD. Prepare uma cópia desinstalada e um banco vazio de teste; nunca use produção.

O relatório de validação desta entrega está em VALIDACAO.md. Testes automatizados verificam regras e requisições; não substituem homologação do fluxo real com a equipe nem revisão visual dos navegadores escolhidos.
