# Correção de Timezone para Brasil - Integrações ERP

## Problema Identificado

O horário de início e fim das integrações não estava correto para o timezone do Brasil (Brasília - `America/Sao_Paulo`).

**Sintomas:**
- Integração agendada para horário diferente do executado
- Timestamps registrados em UTC ao invés de horário de Brasília
- Desincronização entre horários exibidos na interface e logs do banco de dados

## Causa Raiz

Havia duas camadas de configuração de timezone não inicializadas:

1. **PHP**: Sem `date_default_timezone_set()` - usava timezone padrão do servidor
2. **PostgreSQL**: Sem `SET TIMEZONE` - usava UTC por padrão

Quando o código PHP gerava `DateTime` ou usava `date()`, e o SQL usava `NOW()`, os horários divergiam.

## Solução Implementada

### 1. Arquivo: [app/config/db.php](../app/config/db.php)

Adicionada configuração de timezone do PHP e PostgreSQL na conexão principal:

```php
<?php
// Define timezone do PHP para o Brasil (Brasília)
date_default_timezone_set('America/Sao_Paulo');

// ... código de conexão ...

try {
    $pdo = new PDO("pgsql:host=$host;port=$port;dbname=$dbname", $user, $password);
    // ... attributos ...
    
    // Define timezone da sessão PostgreSQL para São Paulo
    $pdo->exec("SET TIMEZONE = 'America/Sao_Paulo'");
} catch (PDOException $e) {
    die('Erro na conexão: ' . $e->getMessage());
}
```

### 2. Arquivo: [app/config/config_db.php](../app/config/config_db.php)

Atualizado o gerador de configuração para criar `db.php` com timezone correto quando o usuário salva as configurações via formulário.

### 3. Arquivo: [app/config/dbintegracoes.php](../app/config/dbintegracoes.php)

Adicionada configuração de timezone também nas conexões de integrações ERP externas:

```php
public static function connect($cdintegracao, $pdo_principal) {
    // ... conexão ...
    
    try {
      $pdo = new PDO($dsn, $config['usuario'], $config['senha_encrypted']);
      // ... attributos ...
      
      // Configurar timezone para Brasil na sessão do ERP também
      try {
        if ($config['tipo_banco'] === 'pgsql') {
          $pdo->exec("SET TIMEZONE = 'America/Sao_Paulo'");
        }
      } catch (Exception $e) {
        // Se não conseguir, continua normalmente
      }
      
      self::$connections[$cdintegracao] = $pdo;
      return $pdo;
    }
}
```

## Impacto das Mudanças

### ✅ Benefícios

1. **Sincronização correta de horários**: Todos os timestamps agora seguem `America/Sao_Paulo`
2. **Agendamentos precisos**: Cron jobs executam na hora correta
3. **Logs consistentes**: `dtsinc_inicio`, `dtsinc_fim` e outros timestamps em horário BR
4. **Compatibilidade PHP/SQL**: `date()`, `DateTime` e `NOW()` retornam mesmo valor

### 📋 Arquivos Modificados

- `app/config/db.php` - ✅ Configuração principal
- `app/config/config_db.php` - ✅ Gerador de config
- `app/config/dbintegracoes.php` - ✅ Conexões ERP

## Como Verificar

1. **No PostgreSQL (linha de comando):**
   ```sql
   SELECT NOW();
   SHOW TIMEZONE;
   ```
   Deve retornar horário de Brasília

2. **No PHP (verificação rápida):**
   ```php
   echo date('Y-m-d H:i:s');
   echo date_default_timezone_get(); // America/Sao_Paulo
   ```

3. **Nas integrações:**
   - Verifique a coluna `ultima_sincronizacao` em `back.integracao`
   - Verifique `dtsinc_inicio` e `dtsinc_fim` em `back.integracao_sincronizacao`
   - Todos devem estar em horário de Brasília (UTC-3)

## Próximos Passos (Opcional)

Se você precisar de mais refinamento:

1. **Adicionar timezone no `config.php`** (configuração global):
   ```php
   date_default_timezone_set('America/Sao_Paulo');
   ```

2. **Documentar em .env** (se usar variáveis de ambiente):
   ```
   APP_TIMEZONE=America/Sao_Paulo
   DB_TIMEZONE=America/Sao_Paulo
   ```

3. **Testar agendamentos cron** com `schedule_cron` configurado

## Nota Importante

A configuração `SET TIMEZONE = 'America/Sao_Paulo'` no PostgreSQL **não muda dados já armazenados**, apenas novos registros e consultas futuras. Se houver dados históricos incorretos, será necessário uma migration para corrigir os timestamps antigos.

---

**Data da correção:** 23 de Janeiro de 2026  
**Timezone configurado:** America/Sao_Paulo (UTC-3)
