# Arquitetura de Datas - 3 Camadas

## 1. CRM (origem)
```
published_at  → primeira publicação no CRM
updated_at    → última republicação no CRM
```

## 2. Horizon Base (modelo canônico)
```
source_published_at  ← published_at do CRM
source_updated_at    ← updated_at do CRM
```

## 3. Web App/API (Prisma)
```
created_at       → @default(now()) autogerado
updated_at       → @updatedAt autogerado
first_synced_at  → data da PRIMEIRA sincronização (persistente)
```

## Quando usar cada campo

### Para SINCRONIZAÇÃO
```typescript
// Comparar se imóvel precisa atualizar:
if (imovel.source_updated_at > ultimaSincronizacao) {
  // Atualizar
}
```
✅ Usa data EXATA do CRM

### Para ORDENAÇÃO (quando CRM não tem data)
```typescript
// Ordenar por mais antigos:
ORDER BY first_synced_at ASC
```
✅ Persiste mesmo com delete+recreate

### Controle interno
- `created_at` e `updated_at` do Prisma = apenas audit trail
- NÃO usar para lógica de negócio

## Implementação first_synced_at

```typescript
// Primeira sincronização:
first_synced_at: first_synced_at || new Date()

// Próximas sincronizações (manter original):
first_synced_at: imovel_existente.first_synced_at
```

## Mudanças v3.12.5

### Horizon Base - REMOVIDO:
- ❌ `updated_at`
- ❌ `created_at`
- ❌ `published_at`

### Horizon Base - ADICIONADO:
- ✅ `source_published_at` (opcional)
- ✅ `source_updated_at` (opcional)

### Publisher - Espera receber do CRM:
- `published_at` → mapeia para `source_published_at`
- `updated_at` → mapeia para `source_updated_at`
