UNPKG

@horizon-modules/arbo-crm-integration

Version:

Integração CRM Arbo para conversion de dados imobiliários para property-model-v3

343 lines (279 loc) 8.82 kB
# @horizon-modules/arbo-crm-integration Integração completa com o CRM Arbo 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 Arbo CRM: - **Download automático** de imóveis da API Arbo - **Conversão** de dados Arbo 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/arbo-crm-integration # ou pnpm add @horizon-modules/arbo-crm-integration ``` ## 🚀 Uso Rápido (v2.0.4+) ### ✅ Uso Mais Simples (Recomendado) ```typescript // ESM (TypeScript/Módulos modernos) import { ArboDownloader } from '@horizon-modules/arbo-crm-integration' // CommonJS (JavaScript tradicional) const { ArboDownloader } = require('@horizon-modules/arbo-crm-integration') // 🎯 Configuração mínima - baseUrl é OPCIONAL! const downloader = new ArboDownloader({ token: 'seu_token_arbo', outputDir: './data/imoveis' // baseUrl: automático (https://app-integracao.arboimoveis.com/api) }) // Download simples const result = await downloader.downloadPages({ startPage: 1, endPage: 5, perPage: 50 }) ``` ### 🔧 Configuração Completa (Opcional) ```typescript import { ArboDownloader, ArboApiClient, ProfilerService, convertArboToPropertyV3, testMocks, fakeData } from '@horizon-modules/arbo-crm-integration' // Configuração com baseUrl customizado (opcional) const downloader = new ArboDownloader({ token: 'seu_token_arbo', outputDir: './data/imoveis', baseUrl: 'https://app-integracao.arboimoveis.com/api' // Opcional }) const result = await downloader.downloadPages({ startPage: 1, endPage: 5, perPage: 50 }) // 2. Upload para sua API await downloader.uploadToApi({ endpoint: 'https://sua-api.com/imoveis', headers: { 'Authorization': 'Bearer seu_token' } }) // 3. Conversão manual const imovelArbo = await new ArboApiClient({ token }).getImovel(123) const propertyV3 = convertArboToPropertyV3(imovelArbo) // 4. Profiling de dados const profiler = new ProfilerService({ inputDir: './data', outputDir: './output', fieldConfigs: { 'categoria': { maxExamples: 5 }, 'end_bairro': { maxExamples: 20 } } }) const profile = await profiler.profile() console.log(profile.categoria) // ['Casa', 'Apartamento', ...] ``` ## 🛠️ API ### ArboDownloader **Principais métodos:** - `downloadPage(page, perPage)` - 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 ArboDownloaderConfig { token: string // Token da API Arbo (obrigatório) outputDir: string // Pasta onde salvar arquivos (obrigatório) baseUrl?: string // URL base da API (OPCIONAL - padrão: https://app-integracao.arboimoveis.com/api) } ``` ### 🆕 Melhorias na v2.0.4 ✅ **baseUrl agora é opcional** - usa valor padrão automaticamente ✅ **Compatibilidade ESM/CommonJS** - funciona com import e require ✅ **Melhor documentação** - exemplos mais claros ✅ **Exports corrigidos** - melhor suporte TypeScript ### ArboApiClient **Principais métodos:** - `getImoveis(page?, perPage?)` - Lista imóveis - `getImovel(id)` - Busca imóvel específico - `searchImoveis(params, page?, perPage?)` - Busca com filtros - `getAllPages(perPage?)` - Baixa todas as páginas ### 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/arbo-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 ``` ## 🔧 Configuração via .env ```bash # === ARBO API === ARBO_TOKEN=seu_token_arbo ARBO_START_PAGE=1 ARBO_END_PAGE=10 ARBO_PER_PAGE=50 # === 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/arbo-imports ``` ## 📁 Estrutura de Dados ### Entrada (Arbo) ```json { "ref_id": 3015393, "codigo": "SO0001_TB", "titulo": "Sobrado à venda 2 Quadras do lago", "categoria": "Sobrado", "finalidade": "Venda", "ativo": true, "publicado": true, "valor_venda": 510000, "qtd_quartos": 3, "qtd_banheiro": 2, "qtd_suites": 1, "qtd_vagas": 2, "area_total": 100, "area_privativa": 98.25, "end_bairro": "Oficinas", "end_cidade": "Ponta Grossa", "end_estado": "PR", "end_cep": "84036140", "fotos": [ { "url": "https://static.arboimoveis.com.br/SO0001_TB/sobrado_1683719500639.jpeg", "ordem": 0, "principal": true, "marcadagua_url": "https://...", "sizes": { "medium": "https://...640x480/...", "small": "https://...320x240/..." } } ], "corretor": { "codigo": 908223, "nome": "Fabiano Garbuio", "telefones": ["42998000149"] } } ``` ### Saída (PropertyV3) ```json { "reference": "SO0001_TB", "title": "Sobrado à venda 2 Quadras do lago", "description": "Residencial com seis sobrados, todos independentes...", "media_assets": { "images": [ { "full": "https://static.arboimoveis.com.br/SO0001_TB/sobrado_1683719500639.jpeg", "md": "https://static.arboimoveis.com.br/SO0001_TB/640x480/sobrado_1683719500639.jpeg", "sm": "https://static.arboimoveis.com.br/SO0001_TB/320x240/sobrado_1683719500639.jpeg", "cover": true } ], "videos": [{"embed_url": "https://youtu.be/96d17X77UZo"}] }, "attributes": { "operacao": ["Venda"], "valor_venda": 510000, "area_total": 100, "area_util": 98.25, "dormitorios": 3, "suites": 1, "banheiros": 2, "vagas": 2, "tipo": "Sobrado", "finalidade": "Residencial", "endereco_cep": "84036140", "endereco_estado": "PR", "endereco_cidade": "Ponta Grossa", "endereco_bairro": "Oficinas", "endereco_logradouro": "Rua Mathias de Albuquerque", "endereco_numero": 179, "mobiliado": false, "financiavel": true }, "settings": { "currency_unit": "BRL", "area_unit": "m2", "exibir_no_mapa": true } } ``` ### Profiling ```json { "categoria": ["Casa", "Apartamento", "Terreno"], "corretor.nome": ["João Silva", "Maria Santos"], "corretor.telefones": ["11999999999", "21888888888"], "fotos.url": ["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 ``` ## 🎯 Casos de Uso ### 1. Sincronização Automática Script diário para manter seu sistema atualizado com dados do Arbo. ### 2. Migração de Dados Conversão em lote de propriedades existentes do Arbo 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. ## 📝 Licença MIT ## 🤝 Contribuição Este é um pacote interno da Horizon Labs. Para suporte, abra uma issue no repositório principal.