# 🔧 Configuração de Desenvolvimento - Property Model V3

## 📁 Estrutura de Diretórios Target

```
property-model-v3/
├── __dev__/                        # 🚧 CRIAR
│   ├── data/                       # 🚧 CRIAR
│   │   ├── arbo-downloads/         # Dados reais convertidos do Arbo
│   │   ├── fake-data-output/       # Dados fake gerados
│   │   ├── mock-output/            # Mocks para testes
│   │   └── profiling-report.json   # Análise estatística
│   ├── scripts/                    # 🚧 CRIAR
│   │   ├── download-from-arbo.ts   # Baixa e converte do Arbo
│   │   ├── profile-properties.ts   # Faz profiling
│   │   ├── generate-fake-data.ts   # Gera dados fake
│   │   └── generate-mocks.ts       # Gera mocks
│   ├── services/                   # 🚧 CRIAR
│   │   ├── ArboDownloaderService.ts
│   │   ├── ProfilerService.ts
│   │   ├── FakeDataGeneratorService.ts
│   │   └── MockGeneratorService.ts
│   └── tests/                      # 🚧 CRIAR
│       ├── arboDownloaderService.test.ts
│       ├── profilerService.test.ts
│       ├── fakeDataGeneratorService.test.ts
│       └── mockGeneratorService.test.ts
├── docs/                           # ✅ EXISTE
│   ├── REFATORACAO_PROPERTY_MODEL_V3.md
│   ├── CHECKLIST_IMPLEMENTACAO.md
│   └── CONFIGURACAO_DEV.md
├── src/                            # ✅ EXISTE (modificar)
│   ├── data/                       # 🚧 CRIAR
│   │   ├── fake-data/              # Dados fake selecionados
│   │   ├── examples/               # Exemplos reais
│   │   └── profiling/              # Dados de profiling
│   ├── fake-data-generator/        # ✅ EXISTE (modificar)
│   ├── custom-mapper/              # ✅ EXISTE
│   ├── models/                     # ✅ EXISTE
│   └── tests/                      # ✅ EXISTE (modificar)
└── ❌ assets/ (REMOVIDO)
```

## 🔗 Dependências Necessárias

### **package.json alterações**
```json
{
  "dependencies": {
    "@horizon-modules/arbo-crm-integration": "^2.0.1",
    "ramda": "^0.30.0",
    "zod": "^3.25.67"
  },
  "devDependencies": {
    "@types/ramda": "^0.30.0",
    "tsup": "^8.0.0",
    "typescript": "^5.0.0",
    "tsx": "^4.0.0",
    "vitest": "^1.0.0"
  },
  "scripts": {
    "build": "tsup",
    "dev": "tsup --watch",
    "test": "vitest",
    "test:coverage": "vitest --coverage",
    "typecheck": "tsc --noEmit",
    
    // 🚧 NOVOS SCRIPTS DEV
    "dev:download": "tsx __dev__/scripts/download-from-arbo.ts",
    "dev:profile": "tsx __dev__/scripts/profile-properties.ts",
    "dev:fake": "tsx __dev__/scripts/generate-fake-data.ts", 
    "dev:mocks": "tsx __dev__/scripts/generate-mocks.ts",
    "dev:all": "npm run dev:download && npm run dev:profile && npm run dev:fake && npm run dev:mocks",
    "dev:test": "vitest __dev__/tests/ --run"
  },
  "files": [
    "dist",
    "docs"
  ]
}
```

## 🖼️ URLs do Unsplash (Substituindo assets locais)

### **Categorias de Imagens**
```typescript
const UNSPLASH_IMAGES = {
  apartamento: [
    "https://images.unsplash.com/photo-1502672260266-1c1ef2d93688?w=800&q=80",
    "https://images.unsplash.com/photo-1522708323590-d24dbb6b0267?w=800&q=80",
    "https://images.unsplash.com/photo-1560448204-e02f11c3d0e2?w=800&q=80",
    "https://images.unsplash.com/photo-1565183997392-2f6f122e5912?w=800&q=80"
  ],
  casa: [
    "https://images.unsplash.com/photo-1512917774080-9991f1c4c750?w=800&q=80",
    "https://images.unsplash.com/photo-1568605114967-8130f3a36994?w=800&q=80",
    "https://images.unsplash.com/photo-1570129477492-45c003edd2be?w=800&q=80",
    "https://images.unsplash.com/photo-1583608205776-bfd35f0d9f83?w=800&q=80"
  ],
  comercial: [
    "https://images.unsplash.com/photo-1497366216548-37526070297c?w=800&q=80",
    "https://images.unsplash.com/photo-1524758631624-e2822e304c36?w=800&q=80",
    "https://images.unsplash.com/photo-1462826303086-329426d1aef5?w=800&q=80",
    "https://images.unsplash.com/photo-1497366811353-6870744d04b2?w=800&q=80"
  ],
  terreno: [
    "https://images.unsplash.com/photo-1500382017468-9049fed747ef?w=800&q=80",
    "https://images.unsplash.com/photo-1416331108676-a22ccb276e35?w=800&q=80", 
    "https://images.unsplash.com/photo-1564013799919-ab600027ffc6?w=800&q=80",
    "https://images.unsplash.com/photo-1448630360428-65456885c650?w=800&q=80"
  ],
  interior: [
    "https://images.unsplash.com/photo-1556909114-f6e7ad7d3136?w=800&q=80",
    "https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=800&q=80",
    "https://images.unsplash.com/photo-1555041469-a586c61ea9bc?w=800&q=80"
  ]
}
```

## ⚙️ Configurações dos Serviços

### **ArboDownloaderService Config**
```typescript
interface ArboDownloadConfig {
  startPage: number       // 1
  endPage: number        // 5
  perPage: number        // 50
  outputDir: string      // "__dev__/data/arbo-downloads"
  convertToPropertyModel: boolean // true
  validateWithZod: boolean // true
}
```

### **ProfilerService Config**
```typescript
interface ProfilerConfig {
  inputDir: string              // "__dev__/data/arbo-downloads"
  outputFile: string           // "__dev__/data/profiling-report.json"
  fieldConfigs: {
    [fieldName: string]: {
      maxExamples: number    // Quantos exemplos por campo
    }
  }
  defaultMaxExamples: number   // 10
}
```

### **FakeDataGeneratorService Config**
```typescript
interface FakeDataConfig {
  profilePath: string          // "__dev__/data/profiling-report.json"
  outputDir: string           // "__dev__/data/fake-data-output"
  counts: {
    apartamentos: number      // 25
    casas: number            // 20
    comerciais: number       // 15
    terrenos: number         // 10
  }
  useUnsplash: boolean        // true
  validateWithZod: boolean    // true
}
```

### **MockGeneratorService Config**
```typescript
interface MockConfig {
  profilePath: string          // "__dev__/data/profiling-report.json"
  outputDir: string           // "__dev__/data/mock-output"
  validCount: number          // 10
  problematicCount: number    // 5
  validateWithZod: boolean    // true (só para válidos)
}
```

## 🗂️ Formato dos Dados

### **Profiling Report**
```json
{
  "tipo": ["Casa", "Apartamento", "Terreno", "Comercial"],
  "operacao": [["venda"], ["locacao"], ["venda", "locacao"]],
  "dormitorios": [1, 2, 3, 4, 5],
  "valor_venda": [200000, 350000, 500000, 750000],
  "endereco_cidade": ["São Paulo", "Rio de Janeiro", "Curitiba"],
  "endereco_estado": ["SP", "RJ", "PR"],
  // ... mais campos
}
```

### **PropertyModel Fake Data**
```json
{
  "reference": "FAKE_CASA_001",
  "title": "Casa em Pinheiros - 3 dorms, 150m²",
  "description": "Excelente casa em localização privilegiada...",
  "attributes": {
    "tipo": "Casa",
    "operacao": ["venda"],
    "dormitorios": 3,
    "valor_venda": 850000,
    "endereco_cidade": "São Paulo"
    // ... outros atributos
  },
  "media_assets": {
    "images": [
      {
        "full": "https://images.unsplash.com/photo-1512917774080-9991f1c4c750?w=800&q=80",
        "md": "https://images.unsplash.com/photo-1512917774080-9991f1c4c750?w=640&q=80",
        "sm": "https://images.unsplash.com/photo-1512917774080-9991f1c4c750?w=320&q=80",
        "cover": true
      }
    ],
    "videos": [],
    "virtual_tours": [],
    "documents": []
  },
  "settings": {
    "currency_unit": "BRL",
    "area_unit": "m2",
    "exibir_no_mapa": true
  },
  "updated_at": "2025-07-08T20:30:00.000Z"
}
```

## 🔧 .gitignore Atualizações

```gitignore
# Development data (não commitar dados baixados)
__dev__/data/arbo-downloads/
__dev__/data/fake-data-output/
__dev__/data/mock-output/
__dev__/data/profiling-report.json

# Manter estrutura mas não dados
!__dev__/data/.gitkeep
!__dev__/data/*/
!__dev__/data/*/.gitkeep

# Logs
__dev__/logs/
```

## 🎯 Casos de Uso Principais

### **1. Desenvolvedor quer dados fake para testar**
```bash
# Gerar dados fake rapidamente
npm run dev:fake

# Dados ficam em __dev__/data/fake-data-output/
```

### **2. Desenvolvedor quer dados reais para análise**
```bash
# Baixar dados reais do Arbo e converter
npm run dev:download

# Dados ficam em __dev__/data/arbo-downloads/
```

### **3. Desenvolvedor quer criar mocks para testes**
```bash
# Gerar mocks baseados em profiling
npm run dev:mocks

# Mocks ficam em __dev__/data/mock-output/
```

### **4. Pipeline completo de dados**
```bash
# Executar pipeline completo
npm run dev:all

# 1. Baixa dados do Arbo
# 2. Faz profiling  
# 3. Gera dados fake
# 4. Gera mocks
```

### **5. Testar nova implementação**
```bash
# Rodar testes dos serviços de dev
npm run dev:test

# Todos os testes usam pastas temporárias
```

---

*Configuração atualizada em: 2025-07-08*