# Avaliação do banco de dados **Data da avaliação:** 21 de julho de 2026 **Banco:** `dfimoveis_data/dfimoveis.sqlite3` **Modo:** `mode=ro`, `PRAGMA query_only = ON` **SHA-256 do arquivo principal:** `bfbbdd09e88f76afd917ebd981b848b9321aeb5fc0602f712645d33e1a5ea76c` ## 1. Pergunta O snapshot atualizado sustenta a revisão dos rankings e já permite conclusões de histórico, disponibilidade e liquidez? **Resposta curta:** sustenta a revisão operacional dos rankings, mas ainda não sustenta inferência de liquidez ou preço de transação. O banco contém quatro dias efetivos de observação entre 13 e 21/07/2026, e a maior parte dos novos snapshots é causada por campos textuais contaminados, não por mudança imobiliária real. ## 2. Integridade e esquema - tamanho do arquivo principal: 9.478.144 bytes; - `PRAGMA quick_check`: `ok`; - `PRAGMA foreign_key_check`: nenhuma violação; - codificação: UTF-8; - `journal_mode`: WAL; - 2.314 páginas de 4.096 bytes; - cinco tabelas da aplicação e `sqlite_sequence`; - quatro autoíndices; nenhuma view ou trigger; - esquema físico sem mudança material em relação a `docs/ACTUAL_SCHEMA.md`. O banco foi consultado em transação somente leitura. Não foi usado `immutable=1`, pois este é o arquivo atualizado pelo scraper. ## 3. Universo e cobertura | Unidade | Total | |---|---:| | Execuções registradas | 20 | | Execuções `ok` | 12 | | Execuções `failed` | 8 | | Anúncios acumulados | 161 | | Observações históricas | 562 | | Vínculos anúncio–busca | 161 | | Fotos registradas | 7.363 | | Hashes de foto distintos | 3.455 | | Anúncios inativos | 20 | Cobertura técnica: 13–21/07/2026. Há observações de anúncios em quatro datas, janela insuficiente para sazonalidade ou liquidez. | Região | Acumulados | Ativos | Inativos | |---|---:|---:|---:| | Jardins Mangueiral | 94 | 78 | 16 | | Cruzeiro Novo | 67 | 63 | 4 | A execução 20, em 21/07, processou oito páginas, encontrou 141 URLs, concluiu 141 detalhes sem falha, baixou 572 fotos novas, reutilizou 4.404 e marcou 20 anúncios como inativos. Ausência da busca não comprova venda. ## 4. O que os dados representam - `listings`: identidade de anúncio e estado corrente; - `listing_history`: estados distintos por `content_hash`, não cada observação; - `listing_searches`: vínculo entre anúncio e busca; - `photos`: mídia associada ao anúncio, sem vínculo a um snapshot específico; - `crawl_runs`: execução técnica sem chave direta para os anúncios observados; - imóvel físico provável: não existe como entidade persistida e depende de deduplicação derivada. Há 21 anúncios com um snapshot, 6 com dois, 7 com três e 127 com quatro. Essa distribuição não deve ser interpretada como número de mudanças reais. ## 5. Auditoria das mudanças históricas Foram comparadas as transições consecutivas de `data_json`: | Campo alterado | Transições | |---|---:| | `content_hash` | 401 | | `creci` | 398 | | `advertiser_code` | 66 | | `neighborhood` | 25 | | `description` | 11 | | `price_brl` | 3 | | `address` | 3 | Em 305 transições, somente `creci` e o hash mudaram. Isso indica instabilidade do parser ou conteúdo variável da página. Não há base para tratar 401 transições como mudanças de mercado. Mudanças reais de preço identificadas: - `1173275`: R$ 550.000 para R$ 549.000 em 21/07; - `1348535`: R$ 950.000 para R$ 880.000 em 20/07, mantido em 21/07; - `1372539`: R$ 572.500 para R$ 569.000 em 17/07, mantido depois. Esses valores são preços anunciados, não negociados. ## 6. Qualidade dos campos Nos 161 anúncios: - preço, área e quartos estão preenchidos em todos; - cidade, UF, latitude e longitude estão ausentes em todos; - 150 endereços têm mais de 300 caracteres; - 159 bairros têm mais de 100 caracteres; - permanece um preço de R$ 570 milhões (`1351663`); - permanece uma área de 0,11 m² (`1370918`); - nenhum registro de foto está sem hash ou caminho local no snapshot atual. - a triagem perceptual com Pillow 12.3.0 foi reexecutada nos dois recortes; recuperou os grupos já documentados e não identificou nova duplicação suficientemente sustentada entre os 30 finalistas. O preenchimento não garante validade. Localização e anunciante continuam contaminados. Área não distingue privativa, útil, construída, total, terreno ou ampliação. ## 7. Disponibilidade e quarentena visual Vinte anúncios estão inativos no banco, mas retirada não prova venda. Além disso, dez anúncios ainda ativos exibem indicação explícita na primeira foto: - Cruzeiro: `1263868`; - Mangueiral: `1301400`, `1346017`, `1346231`, `1349519`, `1351729`, `1352943`, `1356197`, `1362968` e `1366801`. Esses registros ficam em quarentena histórica como “vendido visualmente indicado”. O selo é evidência operacional, não prova registral. ## 8. Atualização dos rankings O Mangueiral não recebeu anúncio novo em 21/07. `1356197`, antes em 9º, passou a exibir **VENDIDO** na primeira foto. Depois do feedback pessoal, o funil foi refeito sobre os 78 ativos; `1377683`, `1371718` e `1140317` entraram no Top 5 por aderência inferida. A auditoria integral também identificou `1301400` com selo de vendido na primeira foto e `1369473` como solicitação de compra, não oferta. O Cruzeiro recebeu: - `1381514`: SHCES 301, R$ 690 mil, 4º andar, reforma aparente forte, sem confirmação de elevador ou vaga e com divergência entre 63 e 93 m²; - `1400223`: SHCES 609 D, R$ 495 mil, 2º andar, boa luz e necessidade de reforma ampla. Os dois entraram no Top 15 condicionado. `1375199` saiu por inatividade; `1370891` passou para “quase entrou” pela nova evidência, não por piora comprovada. ## 9. Limitações - um único portal e duas buscas; - janela histórica curta; - 20 inativos sem causa confirmada; - snapshots inflados por campos textuais instáveis; - ausência de entidade de imóvel físico; - localização estruturada não confiável; - área semanticamente inconsistente; - fotos podem conter material genérico e republicações; - planta original, sistemas, ruído e documentação exigem validação externa. Não calcular preço por m² amplo, liquidez ou tendência com este snapshot. ## 10. Reprodução Consultas essenciais, sempre em leitura: ```sql PRAGMA query_only = ON; PRAGMA quick_check; PRAGMA foreign_key_check; SELECT type, name, tbl_name, sql FROM sqlite_master ORDER BY type, name LIMIT 50; SELECT COUNT(*) FROM listings; SELECT COUNT(*) FROM listing_history; SELECT COUNT(*) FROM listing_searches; SELECT COUNT(*) FROM photos; SELECT COUNT(*) FROM crawl_runs; SELECT s.search_url, COUNT(*) AS accumulated, SUM(l.inactive_at IS NULL) AS active, SUM(l.inactive_at IS NOT NULL) AS inactive FROM listing_searches AS s JOIN listings AS l USING (listing_id) GROUP BY s.search_url LIMIT 10; ``` ## 11. Implicação prática O snapshot melhora a triagem operacional, sobretudo ao revelar inativos e dois apartamentos novos. Ele ainda não justifica pressa nem conclusões de mercado. O ganho imediato vem de manter quarentenas visuais, corrigir a geração excessiva de snapshots e validar documentalmente os candidatos antes de visita ou negociação.