@horizon-modules/jetimob-crm-integration
Version:
Integração CRM Jetimob para conversão de dados imobiliários para property-model-v3
349 lines (283 loc) • 9.06 kB
Markdown
# @horizon-modules/jetimob-crm-integration
Integração completa com o CRM Jetimob para sincronização e conversão de dados imobiliários para o formato PropertyModelV3.
## 🏠 O que faz
Este pacote oferece uma solução completa para integrar sistemas imobiliários com a API do Jetimob CRM:
- **Download automático** de imóveis da API Jetimob
- **Conversão** de dados Jetimob para PropertyModelV3
- **Upload** para sua API própria
- **Profiling** genérico de datasets JSON
- **Dados de teste** para desenvolvimento
## 📦 Instalação
```bash
npm install @horizon-modules/jetimob-crm-integration
# ou
pnpm add @horizon-modules/jetimob-crm-integration
```
## 🚀 Uso Rápido
### ✅ Uso Mais Simples (Recomendado)
```typescript
// ESM (TypeScript/Módulos modernos)
import { JetimobDownloader } from '@horizon-modules/jetimob-crm-integration'
// CommonJS (JavaScript tradicional)
const { JetimobDownloader } = require('@horizon-modules/jetimob-crm-integration')
// 🎯 Configuração mínima - baseUrl é OPCIONAL!
const downloader = new JetimobDownloader({
webserviceKey: 'sua_webservice_key_jetimob',
outputDir: './data/imoveis'
// baseUrl: automático (https://api.jetimob.com)
})
// Download simples
const result = await downloader.downloadPages({
startPage: 1,
endPage: 5,
pageSize: 100
})
```
### 🔧 Configuração Completa (Opcional)
```typescript
import {
JetimobDownloader,
JetimobApiClient,
ProfilerService,
convertJetimobToPropertyV3,
testMocks,
fakeData
} from '@horizon-modules/jetimob-crm-integration'
// Configuração com baseUrl customizado (opcional)
const downloader = new JetimobDownloader({
webserviceKey: 'sua_webservice_key_jetimob',
outputDir: './data/imoveis',
baseUrl: 'https://api.jetimob.com' // Opcional
})
const result = await downloader.downloadPages({
startPage: 1,
endPage: 5,
pageSize: 100
})
// 2. Upload para sua API
await downloader.uploadToApi({
endpoint: 'https://sua-api.com/imoveis',
headers: { 'Authorization': 'Bearer seu_token' }
})
// 3. Conversão manual
const imovelJetimob = await new JetimobApiClient({ webserviceKey }).getImovel(123)
const propertyV3 = convertJetimobToPropertyV3(imovelJetimob)
// 4. Profiling de dados
const profiler = new ProfilerService({
inputDir: './data',
outputDir: './output',
fieldConfigs: {
'tipo': { maxExamples: 5 },
'endereco_bairro': { maxExamples: 20 }
}
})
const profile = await profiler.profile()
console.log(profile.tipo) // ['Residencial', 'Comercial', ...]
```
## 🛠️ API
### JetimobDownloader
**Principais métodos:**
- `downloadPage(page, pageSize)` - Baixa uma página específica
- `downloadPages(options)` - Baixa múltiplas páginas
- `uploadToApi(config)` - Envia dados para sua API
- `downloadAndUpload(downloadOpts, uploadOpts)` - Operação completa
**Configuração:**
```typescript
interface JetimobDownloaderConfig {
webserviceKey: string // Webservice Key da API Jetimob (obrigatório)
outputDir: string // Pasta onde salvar arquivos (obrigatório)
baseUrl?: string // URL base da API (OPCIONAL - padrão: https://api.jetimob.com)
}
```
### JetimobApiClient
**Principais métodos:**
- `getImoveis(page?, pageSize?)` - Lista imóveis
- `getImovel(id)` - Busca imóvel específico
- `testConnection()` - Testa conexão com a API
### ProfilerService
Ferramenta genérica para análise de datasets JSON:
```typescript
const profiler = new ProfilerService({
inputDir: './dados', // Pasta com arquivos JSON
outputDir: './saida', // Onde salvar o relatório
fieldConfigs: {
campo1: { maxExamples: 5 }, // Máximo 5 exemplos
campo2: { maxExamples: 10 } // Máximo 10 exemplos
},
defaultMaxExamples: 3 // Padrão para outros campos
})
const resultado = await profiler.profile()
// Resultado: { campo1: [valores únicos], campo2: [...] }
```
**Características:**
- ✅ **Genérico** - funciona com qualquer estrutura JSON
- ✅ **Arrays concatenados** - junta valores de arrays de vários objetos
- ✅ **Objetos aninhados** - preserva hierarquia (`corretor.nome`)
- ✅ **Ordem alfabética** - campos organizados automaticamente
- ✅ **Configurável** - controle de quantos exemplos por campo
### Dados de Teste
```typescript
import { testMocks, fakeData } from '@horizon-modules/jetimob-crm-integration'
// Mocks para testes
const validData = testMocks.validos // Dados válidos para testes
const problematicData = testMocks.problematicos // Casos edge
// Dados falsos para desenvolvimento
const apartments = fakeData.apartamentos
const houses = fakeData.casas
const commercial = fakeData.comerciais
const land = fakeData.terrenos
const coberturas = fakeData.coberturas
```
## 🔧 Configuração via .env
```bash
# === JETIMOB API ===
JETIMOB_WEBSERVICE_KEY=sua_webservice_key_jetimob
JETIMOB_START_PAGE=1
JETIMOB_END_PAGE=10
JETIMOB_PAGE_SIZE=100
# === SUA API ===
API_ENDPOINT=https://sua-api.com/imoveis
API_TOKEN=seu_bearer_token
API_BATCH_SIZE=10
# === OPERAÇÃO ===
OPERATION_MODE=download-and-upload # download-only | upload-only | download-and-upload
DATA_DIR=./data/jetimob-imports
```
## 📁 Estrutura de Dados
### Entrada (Jetimob)
```json
{
"codigo": "427",
"contrato": "Compra",
"tipo": "Residencial",
"subtipo": "Cobertura",
"titulo_anuncio": "Cobertura com 4 dormitórios à venda",
"observacoes": "Imponente cobertura duplex com vista panorâmica...",
"valor_venda": 2500000,
"valor_venda_visivel": true,
"dormitorios": 4,
"suites": 3,
"banheiros": 5,
"garagens": 3,
"area_total": 350,
"area_privativa": 320,
"endereco_estado": "Rio Grande do Sul",
"endereco_cidade": "Torres",
"endereco_bairro": "Centro",
"endereco_logradouro": "Rua XV de Novembro",
"endereco_numero": "250",
"endereco_cep": "95560000",
"latitude": "-29.334722",
"longitude": "-49.727500",
"situacao": "Desocupado",
"destaque": "Sem destaque",
"imagens": [
{
"link": "https://s01.jetimgs.com/427_1.jpg",
"titulo": "Sala de estar",
"link_thumb": "https://s01.jetimgs.com/427_1_thumb.jpg"
}
]
}
```
### Saída (PropertyV3)
```json
{
"reference": "427",
"title": "Cobertura com 4 dormitórios à venda",
"description": "Imponente cobertura duplex com vista panorâmica...",
"media_assets": {
"images": [
{
"full": "https://s01.jetimgs.com/427_1.jpg",
"md": "https://s01.jetimgs.com/427_1_thumb.jpg",
"sm": "https://s01.jetimgs.com/427_1_thumb.jpg",
"cover": true
}
]
},
"attributes": {
"operacao": ["Compra"],
"tipo": "Residencial",
"subtipo": "Cobertura",
"valor_venda": 2500000,
"area_total": 350,
"area_util": 320,
"dormitorios": 4,
"suites": 3,
"banheiros": 5,
"vagas": 3,
"endereco_cep": "95560000",
"endereco_estado": "Rio Grande do Sul",
"endereco_cidade": "Torres",
"endereco_bairro": "Centro",
"endereco_logradouro": "Rua XV de Novembro",
"endereco_numero": "250",
"latitude": -29.334722,
"longitude": -49.727500,
"situacao": "Desocupado",
"destaque": false
},
"settings": {
"currency_unit": "BRL",
"area_unit": "m2",
"distance_unit": "meters",
"exibir_no_mapa": true
}
}
```
### Profiling
```json
{
"tipo": ["Residencial", "Comercial", "Rural"],
"subtipo": ["Casa", "Apartamento", "Cobertura", "Terreno"],
"endereco_cidade": ["Torres", "Capão da Canoa", "Xangri-lá"],
"imagens.link": ["foto1.jpg", "foto2.jpg", "foto3.jpg"]
}
```
## 🧪 Desenvolvimento
```bash
# Instalar dependências
pnpm install
# Build
pnpm build
# Testes
pnpm test
# Typecheck
pnpm typecheck
```
### Scripts de Desenvolvimento
```bash
# Download de propriedades reais
node __dev__/scripts/download-properties.js
# Profiling dos dados baixados
node __dev__/scripts/profile-properties.js
# Gerar dados falsos
pnpm tsx __dev__/scripts/generate-fake-data.ts
# Gerar mocks para testes
pnpm tsx __dev__/scripts/generate-mocks.ts
# Converter downloads para PropertyV3
pnpm convert:downloads
```
## 🎯 Casos de Uso
### 1. Sincronização Automática
Script diário para manter seu sistema atualizado com dados do Jetimob.
### 2. Migração de Dados
Conversão em lote de propriedades existentes do Jetimob para seu formato.
### 3. Análise de Dados
Profiling para entender estrutura e qualidade dos dados imobiliários.
### 4. Desenvolvimento
Dados falsos e mocks para testes e desenvolvimento local.
## 🔑 Autenticação Jetimob
A API Jetimob utiliza **apenas a Webservice Key** na URL:
- ✅ **Webservice Key**: Incluída na URL do endpoint (obrigatória)
- ❌ **Headers de autenticação**: Não são necessários
- ❌ **Bearer tokens**: Não são utilizados
```javascript
// URL de exemplo
https://api.jetimob.com/webservice/{WEBSERVICE_KEY}/imoveis?v=4&page=1&pageSize=100
```
## 📝 Licença
MIT
## 🤝 Contribuição
Este é um pacote interno da Horizon Labs. Para suporte, abra uma issue no repositório principal.