# AupetFlow — Instalação

O pacote contém um sistema PHP/MySQL independente. O servidor não precisa de Node, Composer, ChatGPT ou chave de IA. A interface JavaScript já está compilada em public/assets.

## Requisitos

- PHP 8.2 ou superior; a validação desta entrega usou PHP 8.3.
- MySQL 8.0+ ou MariaDB 10.6+; os testes de integração usaram MariaDB 10.11.
- Extensão PDO MySQL, sessões, JSON e as extensões padrão do PHP.
- HTTPS ativo no domínio. HTTP é aceito apenas em localhost para desenvolvimento.
- O processo PHP precisa ler core e gravar em core/config e core/storage.
- A pasta core deve ficar fora da raiz pública do domínio. O instalador verifica essa condição.

## cPanel / hospedagem compartilhada

1. Descompacte o ZIP no computador ou numa pasta privada da hospedagem.
2. No mesmo nível de public_html, envie a pasta core e renomeie para aupetflow-core. Exemplo: /home/conta/aupetflow-core.
3. Envie o CONTEÚDO da pasta public para public_html. Ela deve conter index.php, api.php, install.php, boot.php e assets. Não envie core para dentro de public_html.
4. Se usar um subdomínio com raiz própria, coloque aupetflow-core ao lado da raiz pública desse subdomínio. O boot procura ../core e ../aupetflow-core.
5. No painel MySQL, crie um banco vazio e um usuário. Vincule o usuário ao banco, com permissões para criar e usar as tabelas. Anote os nomes completos, incluindo o prefixo do cPanel.
6. No painel PHP, selecione PHP 8.2+ e habilite pdo_mysql. Ative o SSL do domínio antes de instalar.
7. Abra https://seu-dominio.com/install.php. Todos os requisitos devem ficar marcados.
8. Copie a chave de core/config/chave-instalacao.txt no campo da instalação. O arquivo é privado e é removido automaticamente após uma instalação bem-sucedida.
9. Informe host, porta, banco, usuário e senha. Em muitas hospedagens o host é localhost, mas use o valor informado pelo provedor.
10. Defina seu e-mail e senha master, empresa inicial e primeira loja. Clique em Concluir instalação e entre no sistema.

Não existe senha padrão. O usuário master é criado com os dados que você informar.

## VPS com Apache ou Nginx

1. Envie core e public para /var/www/aupetflow, mantendo as duas pastas lado a lado.
2. Defina a raiz pública do domínio como /var/www/aupetflow/public.
3. Dê ao usuário do PHP permissão de leitura no projeto e escrita somente em core/config e core/storage. Não use permissões 777.
4. Configure PHP-FPM ou Apache com PHP 8.2+, PDO MySQL e HTTPS.
5. Crie um banco vazio e um usuário limitado a esse banco. Abra /install.php e siga o assistente.

Há exemplos de configuração em docs/apache.conf.example e docs/nginx.conf.example. Ajuste domínio, diretórios, certificados e o soquete PHP conforme seu servidor.

Se o HTTPS for terminado em um proxy reverso, a infraestrutura confiável deve informar HTTPS ao PHP. O sistema não confia automaticamente em cabeçalhos X-Forwarded-* enviados por visitantes.

## Primeira configuração

- No painel master, revise os planos de exemplo e seus limites. Os preços são referências editáveis; não geram cobranças.
- A empresa inicial do master usa o plano Rede, sem vencimento. Você pode alterar isso no painel.
- Crie empresas clientes, seus planos, vencimentos, primeira loja e responsáveis.
- O responsável pode cadastrar filiais e funcionários, respeitando os limites do plano.
- Entregue senhas temporárias por um canal privado. A troca é obrigatória no primeiro acesso.
- Entre numa loja e ajuste o estabelecimento, a equipe, serviços e pacotes em Configurações.
- Cadastre os tutores e os pets. Cada loja começa vazia, com um catálogo inicial editável.

## Solução de problemas

- **Pasta privada não encontrada:** core deve estar ao lado da raiz pública, ou aupetflow-core ao lado de public_html. Mantenha o arquivo app/Bootstrap.php dentro dela.
- **Core dentro da raiz pública:** mova a pasta para fora da raiz pública. Não altere a verificação para liberar a instalação.
- **PDO MySQL ausente:** habilite pdo_mysql no painel PHP e selecione a mesma versão usada pelo site.
- **Não foi possível conectar:** confirme host/porta e nomes completos do banco/usuário. O banco precisa existir antes de instalar. Alguns provedores usam um host remoto.
- **Configuração não gravável:** ajuste proprietário/permissões de core/config e core/storage para o processo PHP. Após instalar, mantenha config.php privado e legível pelo PHP.
- **Erro 500 no Apache:** confirme a versão PHP, veja core/storage/logs/php.log e o log da hospedagem. Se o provedor não permitir Options em .htaccess, remova somente a linha Options -Indexes de public/.htaccess e peça o bloqueio de listagem no painel.
- **Acesso da empresa vencido:** entre como master e ajuste a validade do cliente. A suspensão e a expiração são conferidas no servidor.
- **Senha de funcionário perdida:** o responsável redefine uma senha temporária em Lojas e equipe. Sessões anteriores são encerradas.
- **Senha master perdida:** com acesso SSH e PHP CLI, execute php core/tools/reset-master.php seu-email. A nova senha é lida pela entrada padrão, não por argumento. O comando funciona apenas no terminal.
- **Configuração existente e bloqueio ausente:** não execute novamente o instalador nem apague tabelas. Restaure storage/install.lock do backup ou crie esse arquivo de bloqueio após confirmar a configuração existente e as tabelas. O programa recusa reinstalar sobre config.php.

## Backup e atualização

Mantenha backup do banco inteiro, de core/config/config.php e de core/storage. As exportações JSON/CSV do ERP contêm os registros da loja, não todas as contas e senhas do SaaS. Guarde o banco e config.php de forma privada.

Antes de atualizar, faça um backup completo e teste numa cópia. Preserve config.php e storage. Esta entrega tem esquema versão 1; atualizações futuras devem fornecer migrações próprias. Não reutilize install.php para atualizar uma instalação existente.
