Reglas de validación
Reglas de calidad que aplicamos a cada propiedad antes de publicarla. Si una regla falla, la propiedad se bloquea, se publica como borrador, o simplemente se registra una advertencia.
Severidades
| Severidad | Efecto |
|---|---|
| BLOCK | La propiedad no se publica. Debe corregir los datos en su CRM para que se publique en el próximo ciclo. |
| DRAFT | Se publica pero en estado borrador (visible solo internamente, no en el marketplace público). |
| WARN | Se publica normalmente. Solo queda un registro de advertencia. |
Cómo se decide
Cuando una propiedad falla varias reglas, la severidad más alta determina el resultado. Todas las reglas que fallan se reportan en el webhook, no solo la primera.
Reglas BLOCK
Estas reglas impiden la publicación. La propiedad no aparece en Spot2 hasta que se corrijan.
| Regla | Condición para pasar |
|---|---|
| Tipo de propiedad | property_type es uno de los 7 valores canónicos y no es residencial. |
| Ubicación | location.city y location.state están presentes y no vacíos. |
| Precio | Al menos uno de price.rent_price o price.sale_price es mayor a 0. |
| Modalidad | La combinación de precios corresponde a una modalidad válida (renta, venta, o ambas). |
| Precio mínimo renta | price.rent_price en MXN ≥ 10,000. |
| Precio mínimo venta | price.sale_price en MXN ≥ 100,000. |
| Superficie mínima | Si surface_m2 > 0, debe ser ≥ 3 m². |
| Máximo de recámaras | Si se envía bedrooms, debe ser ≤ 20. |
| Código postal vacío | location.postal_code no está vacío. |
| Código postal no encontrado | location.postal_code es válido para México. |
| Número exterior | location.ext_number ≤ 6 caracteres. |
| Calle con coordenadas | Si se envían location.latitude y location.longitude, location.street debe estar presente. |
| Área divisible | industrial.min_area_divisible_m2 ≤ industrial.max_area_divisible_m2. Solo aplica a tipos industriales. |
| Agente bloqueado | agent.email y agent.phone no están bloqueados. |
| Altura máxima | industrial.max_height_m ≤ 30 metros. Solo aplica a nave_industrial. |
| Especificaciones de luminarias | Si industrial.luminaries > 0, industrial.luminary_specs debe estar presente. Solo aplica a tipos industriales. |
| Número de piso | Si office.floor_level = 6, office.floor_level_number debe estar presente. Solo aplica a oficina. |
| Rango precio/m² | retail.price_per_sqm_min ≤ retail.price_per_sqm_max. Solo aplica a local. |
| Uso de suelo | terrain.land_use debe estar presente. Solo aplica a terreno. |
Reglas DRAFT
Estas reglas no bloquean la publicación, pero la propiedad queda en estado borrador hasta que se completen los datos.
| Regla | Condición para pasar |
|---|---|
| Fotos | Al menos 1 URL en photos. |
| Coordenadas | location.latitude y location.longitude presentes y no nulas. |
| Contacto | Al menos uno de agent.email o agent.phone presente. |
| Precio por m² (bajo) | El precio/m² está por encima del mínimo estadístico para ese tipo de propiedad y modalidad. |
| Precio por m² (alto) | El precio/m² está por debajo del máximo estadístico para ese tipo de propiedad y modalidad. |
| Superficie baja | surface_m2 por encima del mínimo estadístico para ese tipo de propiedad. |
| Superficie alta | surface_m2 por debajo del máximo estadístico para ese tipo de propiedad. |
Umbrales estadísticos
Los rangos de precio/m² y superficie se calibran según tipo de propiedad (oficina, local, industrial, terreno), modalidad (renta o venta) y sector (individual o complejo). Se ajustan periódicamente con datos del mercado.
Ejemplos de referencia (sujetos a ajuste):
- Oficina en renta: $80 a $3,000 MXN/m².
- Industrial en venta: $5,000 a $40,000 MXN/m².
- Oficina individual: 15 a 10,000 m².
- Terreno individual: 200 a 1,000,000 m².
Reglas WARN
No afectan la publicación. Solo se registran como advertencia.
| Regla | Condición |
|---|---|
| Amenidades | Al menos 1 valor en amenities. |
Rechazo permanente
Si una propiedad falla reglas BLOCK durante 5 ciclos consecutivos sin cambios en los datos, dejamos de intentar publicarla. La propiedad se sigue revalidando en cada ciclo: si corrige los datos en su CRM y updated_at cambia, vuelve a evaluarse y se publica automáticamente.
Mensajes en el webhook
Los mensajes que aparecen en el webhook item_rejected corresponden a la columna "Mensaje" de las tablas anteriores.