Skip to content

Visão geral da arquitetura

O sistema é organizado em camadas, com o fluxo de dados de ponta a ponta:

Fontes → Coleta (Python) → Ingestão (Java) → RabbitMQ → Workers → Postgres → API (Java) → Front (Angular)

Veja os Diagramas para a visão visual.

Camadas

1. Fontes de dados

  • Caixa — lista oficial em CSV (fonte primária): a Caixa disponibiliza a lista completa de imóveis por estado. É a forma oficial e mais estável — preferir sempre o CSV a raspar HTML. Detalhes em Fonte Caixa (CSV).
  • Caixa — página de detalhe (secundária/opcional): só para enriquecer um imóvel (fotos, edital), com coleta educada.
  • Futuras: outros leiloeiros e dados públicos (IBGE, valores de referência).

2. Coleta (Python)

  • Coletor de CSV (primário): baixa o arquivo por UF, faz parsing e envia ao backend.
  • Coletor de detalhe (enriquecimento): consome imoveis.enriquecimento e raspa a página de cada imóvel (2 praças, datas, matrícula, CEP, FGTS/dívidas, fotos, edital) — event-driven e paced (rate limiter). Ver ADR-0010 e Fonte Caixa (detalhe).
  • Scheduler: roda ~1x/dia (o CSV traz a "Data de geração"). Detalhes em Collector (Python).

3. Ingestão (fronteira Python → Java)

O backend Java é o dono do banco/schema. O coletor não escreve direto nas tabelas de negócio; envia via API de ingestão (POST /internal/ingest/...). A ingestão grava o coleta_bruta e publica eventos no RabbitMQ para processamento assíncrono. Ver ADR-0001 e ADR-0005.

4. Mensageria (RabbitMQ)

Desacopla ingestão de processamento: exchange/filas por tipo de trabalho, DLQ para falhas e idempotência por codigo do imóvel. Permite escalar workers e reprocessar do coleta_bruta. Contrato dos eventos em Eventos RabbitMQ.

5. Persistência

  • PostgreSQL + PostGIS (dados, histórico, geo). Schema versionado por Flyway.
  • Object storage (fotos/editais) e Redis (cache de buscas quentes na API REST). Ver Modelo de dados.

6. Processamento & Enriquecimento (workers)

Workers Java consomem os eventos do RabbitMQ e executam normalização, geocoding, motor de custos (ITBI/custas/total) e pré-análise (score); na evolução, IA para resumo de edital. Ver Domínio.

7. Backend / API (Java + Spring Boot)

Expõe busca, filtros, detalhe e cálculo. Regras de negócio, auth, paginação/ordenação. É dono do schema e recebe dados do coletor. Usa Redis para cache de buscas. Ver Backend (Java).

8. Frontend (Angular)

Lista + filtros, mapa, detalhe + análise, favoritos/alertas. Estilização em SASS/SCSS. Servido via Nginx. Ver Frontend (Angular).

Preocupações transversais

  • Observabilidade (métricas/logs/traces) — ver Observabilidade.
  • Segurança/Auth e config/segredos por ambiente.
  • Qualidade (testes e CI/CD) — ver Qualidade.

Estilo arquitetural

  • Backend em arquitetura hexagonal (ports & adapters): domínio puro, infraestrutura nas bordas.
  • API-first (contrato OpenAPI versionado).
  • 12-Factor App (config por env, logs como stream, processos stateless).