XML para Proyectos y Distribuciones

1. Propósito del feed

El feed XML transfiere datos estructurados sobre proyectos inmobiliarios y distribuciones типicas. Su objetivo es permitir que el sistema receptor cree y actualice automáticamente las tarjetas de proyecto, muestre precios, estados, galerías, amenidades, términos de pago, EOI y materiales promocionales de los desarrolladores.

El feed transmite las distribuciones en forma agregada: un registro de distribución describe un layout típico y la cantidad de unidades disponibles de ese tipo. No es una lista de apartamentos, oficinas o lotes específicos.

  • realty-feed: contenedor raíz de todo el feed XML. ID principal: —
  • offers: un proyecto o complejo. ID principal: complex-id
  • layouts: distribución típica dentro de un proyecto. ID principal: id
  • payment_plans: una opción de pago del proyecto. ID principal: id
  • eoi_item: una condición EOI. ID principal: —
  • stock: campaña de marketing, noticia o mensaje promocional del desarrollador. ID principal: —

1.1 Qué es un feed XML

Un feed XML es un archivo estructurado que contiene datos sobre proyectos inmobiliarios y distribuciones típicas. Incluye descripciones, fotos, precios, direcciones, estados, especificaciones, amenidades y otros datos necesarios para mostrar propiedades en el sitio web de una agencia o en un catálogo.

En términos simples, un feed XML es un flujo de datos inmobiliarios que el sistema receptor descarga periódicamente, lee y usa para actualizar automáticamente las tarjetas de propiedad.

Alnair proporciona los datos. El desarrollo del sitio web, del catálogo, la integración con CRM y la lógica de importación están a cargo del cliente o del equipo técnico del cliente.

1.2 Lo que necesita la agencia

Para usar el feed XML, la agencia necesita su propia infraestructura técnica capaz de descargar regularmente el XML, analizar su estructura y actualizar los datos en su sistema.

  • Sitio web o catálogo de propiedades: el lugar donde se mostrarán los proyectos y distribuciones del feed.
  • Equipo técnico o desarrollador: configuración de la descarga, análisis e importación del XML.
  • Analizador XML: lectura de la estructura XML y conversión al modelo interno de datos.
  • Módulo de importación: creación, actualización y desactivación de proyectos y distribuciones.
  • Programador de tareas: ejecución regular de la importación según un horario, por ejemplo mediante cron o scheduler.
  • Registro de errores: monitoreo de valores enum desconocidos, campos vacíos y errores de carga.

1.3 Cómo usa la agencia el feed XML

Un flujo de trabajo típico se ve así:

  1. El sistema de la agencia descarga el XML desde un enlace web personal.
  2. El XML se guarda como una instantánea en bruto para diagnósticos y reprocesamiento.
  3. El analizador lee la estructura realty-feed, offers, layouts y los bloques anidados.
  4. El módulo de importación crea nuevos proyectos y distribuciones o actualiza los existentes.
  5. Los objetos que desaparecen del nuevo feed se marcan como inactivos.
  6. El sitio web de la agencia muestra tarjetas de proyecto, precios, galerías y estados actualizados.

Principales capacidades de integración:

  • Actualizaciones automáticas: los proyectos y distribuciones se actualizan sin intervención manual.
  • Creación de páginas de propiedades: los datos del feed se usan para las tarjetas de proyectos y distribuciones.
  • Precios y estados actualizados: el sitio web recibe las actualizaciones XML según el horario establecido.
  • Filtros y búsqueda: se pueden usar los campos de distrito, precio, tipo de propiedad, número de habitaciones y área para filtrar.
  • Galerías multimedia: se pueden mostrar fotos del proyecto, galerías temáticas e imágenes de distribuciones en la interfaz.

2. Estructura general del XML

<realty-feed>
  <generation-date>2026-06-17T12:06:39+04:00</generation-date>
  <offers>...</offers>
  <offers>...</offers>
</realty-feed>

  • realty-feed: objeto. Bloque raíz del feed.
  • generation-date: fecha y hora. Fecha y hora de generación del XML. Se usa para verificar la vigencia de los datos.
  • offers: objeto[]. Lista de proyectos o complejos. Cada bloque offers contiene los datos del proyecto y sus distribuciones.

2.1 Acceso al feed y límites de descarga

El feed se entrega al cliente mediante un enlace web personal. El enlace es único para el cliente y lo utiliza el sistema receptor para descargar automáticamente el XML.

El enlace personal está disponible para el administrador en la cuenta de Alnair. El administrador puede compartir este enlace con el equipo técnico del cliente para configurar la importación.

  • Tipo de acceso: enlace web personal. URL individual del feed XML para el cliente.
  • Dónde obtener el enlace: cuenta de Alnair. El enlace está disponible para el administrador del cliente.
  • Frecuencia de actualización del feed: cada 4 horas. Los datos XML se actualizan del lado de Alnair una vez cada 4 horas.
  • Intervalo mínimo de descarga: no más de una vez por hora. El sistema receptor no debe acceder al feed más de una vez por hora.
  • Límite excedido: bloqueo de acceso. Si las solicitudes son demasiado frecuentes, el acceso al feed puede bloquearse temporalmente.

Logic de integración recomendada: configurar la descarga programada mediante cron o scheduler, guardar el último XML recibido y no solicitar el feed en cada carga de página del sitio web. El modo óptimo es descargar el feed no más de una vez por hora, teniendo en cuenta que los nuevos datos aparecen aproximadamente cada 4 horas.

3. Proyecto: <offers>

offers es la entidad principal del feed. Contiene la descripción del proyecto, el desarrollador, la ubicación, el estado de construcción y ventas, precios, medios, amenidades, planes de pago, EOI, promociones de marketing y distribuciones típicas.

<offers>
  <complex-id>5646</complex-id>
  <type>project</type>
  <logo>https://...</logo>
  <photo>https://...</photo>
  <title>...</title>
  <description>...</description>
  <price_on_request>1</price_on_request>
  <status>...</status>
  <construction_start_at>2025-01-01T00:00:00+04:00</construction_start_at>
  <construction_progress>15</construction_progress>
  <planned_completion_at>2027-12-31T00:00:00+04:00</planned_completion_at>
  <predicted_completion_at>2027-12-31T00:00:00+04:00</predicted_completion_at>
  <amenities>...</amenities>
  <developer>...</developer>
  <city>Dubai</city>
  <address>...</address>
  <latitude>25.000000</latitude>
  <longitude>55.000000</longitude>
  <districts>...</districts>
  <album>...</album>
  <albums>...</albums>
  <constructions_count>1</constructions_count>
  <for_sale_count>10</for_sale_count>
  <price>...</price>
  <br_prices>...</br_prices>
  <updated_at>2026-06-17T10:53:20+04:00</updated_at>
  <is_sold_out>0</is_sold_out>
  <payment_plans>...</payment_plans>
  <sales_status>...</sales_status>
  <stocks>...</stocks>
  <eoi>...</eoi>
  <service_charge>...</service_charge>
  <assignment>...</assignment>
  <is_limited_publication>0</is_limited_publication>
  <layouts>...</layouts>
</offers>

  • complex-id: entero. ID único del proyecto en Alnair. Úselo como ID externo del proyecto para upsert.
  • type: enum. Tipo de entidad de nivel superior: project o compound. Guarde el valor original e impórtelo como proyecto de nivel superior.
  • logo: url. Logo del proyecto. Muéstrelo en la marca, no como portada.
  • photo: url. Imagen principal del proyecto / portada. Úsela como imagen de portada y hero.
  • title: objeto localizado. Nombre del proyecto en en/ru/ar. Muéstrelo según el idioma de la interfaz.
  • description: HTML localizado. Descripción del proyecto en en/ru/ar. Renderícelo de forma segura; el HTML está dentro de CDATA.
  • price_on_request: 0/1. Indicador de ocultación del precio. Si es 1, muestre “Precio a consultar”.
  • status: objeto. Estado de construcción. No confundir con sales_status.
  • construction_start_at: fecha y hora. Fecha de inicio de la construcción. Muestre si tiene valor.
  • construction_progress: decimal. Porcentaje de avance de la construcción. Muéstrelo como porcentaje.
  • planned_completion_at: fecha y hora. Fecha planificada de finalización del proyecto. Úsela como fecha de entrega.
  • predicted_completion_at: fecha y hora. Fecha prevista de finalización. Puede usarse como fecha de finalización actualizada.
  • amenities: objeto. Amenidades y características del proyecto. Mapear por clave.
  • developer: objeto. Desarrollador del proyecto. Guardar nombre y logo.
  • city / address: cadena. Ciudad y dirección del proyecto. Úselos en los datos de ubicación.
  • latitude / longitude: decimal. Coordenadas. Úselas para el mapa.
  • districts: objeto. Distritos del proyecto. Úselo para filtros y la tarjeta del proyecto.
  • album: objeto. Galería principal del proyecto sin categoría. Muéstrela como galería general.
  • albums: objeto. Galerías temáticas del proyecto. Agrupar por título.
  • for_sale_count: entero. Número de unidades disponibles en el proyecto. Puede mostrarse como disponibilidad.
  • price: objeto. Rango general de precios del proyecto. Ocultar cuando price_on_request=1.
  • br_prices: objeto[]. Precios por número de habitaciones o categoría. Úselos para filtros y listados.
  • updated_at: fecha y hora. Fecha de actualización del proyecto. Úsela para sincronización.
  • is_sold_out: 0/1. Indicador de vendido. Usar junto con sales_status.
  • payment_plans: objeto[]. Opciones de pago del desarrollador. Mostrar como opciones de pago.
  • sales_status: objeto localizado. Estado de ventas del proyecto. Define la etapa comercial.
  • stocks: objeto. Campañas de marketing y mensajes promocionales del desarrollador. Mostrar como bloques promocionales.
  • eoi: objeto. Expression of Interest. Mostrar solo para Presale (EOI).
  • service_charge: objeto. Cargo de servicio. Mostrar si el valor está completo.
  • assignment: decimal. Condición de cesión. Vacío significa no especificado.
  • is_limited_publication: 0/1. Restricción de publicación. Si es 1, no publicar públicamente sin permiso.
  • layouts: objeto[]. Distribuciones típicas del proyecto. Importar como entidades hijas del proyecto.

4. Campos localizados

Los campos localizados tienen la misma estructura: los valores en inglés, ruso y árabe se pasan dentro de la etiqueta.

<title>
  <en>Nombre del proyecto</en>
  <ru>Название проекта</ru>
  <ar>اسم المشروع</ar>
</title>

  • en: valor en inglés. Valor de respaldo recomendado.
  • ru: valor en ruso.
  • ar: valor en árabe.

Regla de respaldo:

  1. Use el idioma de la interfaz si está completo.
  2. Si el idioma requerido está vacío, use en.
  3. Si en está vacío, use ru.
  4. Si ru está vacío, use ar.
  5. Si todos los valores están vacíos, no muestre el campo.

5. Estados

5.1 Estado de construcción: <status>

El estado de construcción muestra el estado físico del proyecto. No indica la disponibilidad de venta.

<status>
  <key>development_stage_progress</key>
  <en>En progreso</en>
  <ru>Строится</ru>
  <ar>قيد الإنشاء</ar>
</status>

  • Scheduled: el proyecto está planificado.
  • In Progress: la construcción está en curso.
  • Ready: el proyecto está terminado.
  • Stopped: la construcción está detenida.

5.2 Estado de ventas: <sales_status>

El estado de ventas muestra la etapa comercial del proyecto: anuncio, preventa, lanzamiento, ventas activas o vendido.

  • Preliminary Info: información temprana del proyecto.
  • Announcement: el proyecto ha sido anunciado.
  • Presale (EOI): la recolección de EOI está en curso.
  • Launch: lanzamiento de ventas.
  • On Sale: el proyecto está disponible para compra.
  • Sold Out: el proyecto está vendido.
  • Pending: el estado está pendiente de actualización.

6. Desarrollador y ubicación

Estos bloques se necesitan para mostrar la marca del desarrollador y la ubicación geográfica del proyecto.

<developer>
  <title>
    <en>Nombre del desarrollador</en>
    <ru>Nombre del desarrollador</ru>
    <ar>Nombre del desarrollador</ar>
  </title>
  <logo>https://...</logo>
</developer>
<city>Dubai</city>
<address>Dirección del proyecto, Dubai</address>
<latitude>25.01809076</latitude>
<longitude>55.13354525</longitude>
<districts>
  <district>Jumeirah Village Triangle (JVT)</district>
</districts>

  • developer.title: objeto localizado. Nombre del desarrollador.
  • developer.logo: url. Logo del desarrollador.
  • city: cadena. Ciudad.
  • address: cadena. Dirección.
  • latitude / longitude: decimal. Coordenadas para el mapa.
  • districts.district: cadena[]. Distritos del proyecto.

7. Precios

7.1 Precio del proyecto: <price>

El precio a nivel de proyecto muestra el rango general de precios de las ofertas disponibles en el proyecto.

<price>
  <min>815462</min>
  <max>2089780</max>
  <min_usd>222009</min_usd>
  <max_usd>568942</max_usd>
  <currency>AED</currency>
</price>

  • min: decimal. Precio mínimo.
  • max: decimal. Precio máximo.
  • min_usd: decimal. Precio mínimo en USD.
  • max_usd: decimal. Precio máximo en USD.
  • currency: enum. Moneda principal, normalmente AED.

Si price_on_request = 1, los precios exactos no se muestran públicamente, aunque el precio esté completo.

7.2 Precios por categoría: <br_prices>

br_prices agrupa precios y áreas por número de habitaciones o tipo de propiedad. Esto es útil para filtros y tarjetas cortas de proyecto.

<br_prices>
  <key>1</key>
  <count>7</count>
  <min_price>1070564</min_price>
  <max_price>1289674</max_price>
  <min_price_m2>17204</min_price_m2>
  <max_price_m2>18483</max_price_m2>
  <currency>AED</currency>
  <min_area><m2>57.92</m2><ft2>623.45</ft2></min_area>
  <max_area><m2>74.17</m2><ft2>798.36</ft2></max_area>
</br_prices>

  • studio: estudios.
  • 1-6: número de habitaciones.
  • villa: villas.
  • townhouse: townhouses.
  • n: no aplicable / categoría no residencial / otro.

8. Medios

Los medios en el feed se dividen en varios tipos. No deben mezclarse en una sola galería sin considerar su propósito: una imagen puede ser la portada del proyecto, otra el logo, otra una imagen promocional y otra un plano.

  • logo: offers.logo. Logo del proyecto. Mostrar en la marca del proyecto; no usar como portada.
  • photo: offers.photo. Imagen principal del proyecto / portada. Usar como imagen de portada en la tarjeta y como hero en la página del proyecto.
  • album.image: offers.album.image. Galería principal del proyecto sin categoría. Mostrar en la galería general del proyecto.
  • albums.album.images.image: offers.albums.album.images.image. Galería temática del proyecto. Agrupar por albums.album.title.
  • developer.logo: offers.developer.logo. Logo del desarrollador. Mostrar en el bloque del desarrollador.
  • stocks.stock.logo: offers.stocks.stock.logo. Imagen de campaña de marketing. Mostrar dentro del bloque promocional.
  • layouts.album.image: offers.layouts.album.image. Galería de una distribución típica específica. Mostrar a nivel de distribución.
  • levels_photos.level_photo.image: offers.layouts.levels_photos.level_photo.image. Imagen de la distribución por nivel. Usar como plano.

<photo>https://...</photo>
<album>
  <image>https://...</image>
</album>
<albums>
  <album>
    <title><en>Infraestructura</en><ru>Инфраструктура</ru><ar>...</ar></title>
    <images>
      <image>https://...</image>
    </images>
  </album>
</albums>

  • Project presentation: imágenes de presentación del proyecto.
  • Construction progress: fotos del avance de la construcción.
  • Finishing examples: ejemplos de acabados.
  • Infrastructure: infraestructura del proyecto.
  • View: vistas y alrededores.

No todas las categorías deben estar presentes en todos los proyectos. Si el título de la categoría está vacío, las imágenes pueden importarse como sin categoría o colocarse en la galería general.

No existe una etiqueta XML separada para history/story en la estructura actual. Las noticias, mensajes promocionales y materiales de marketing del proyecto se transmiten mediante stocks. Para el historial de construcción, puede usarse la categoría Construction progress si está presente en albums.

9. Amenidades

amenities describe las amenidades y características del proyecto. Para la integración, es mejor usar key, mientras que los valores localizados deben usarse para la visualización.

<amenities>
  <amenity>
    <key>project_facilities_gym</key>
    <en>Gimnasio</en>
    <ru>Тренажёрный зал</ru>
    <ar>صالة رياضية</ar>
  </amenity>
</amenities>

  • amenities: objeto. Contenedor de amenidades.
  • amenity: objeto. Una amenidad.
  • key: enum. Clave técnica.
  • en / ru / ar: cadena. Nombre de la amenidad en tres idiomas.

La clave projecet_hotel_license contiene un error tipográfico, pero debe mapearse como Hotel License. Se recomienda admitir el alias y no romper la importación.

10. Promociones de marketing: <stocks>

stocks son campañas de marketing, noticias y mensajes promocionales de los desarrolladores. Pueden incluir precios especiales, descuentos, condiciones de lanzamiento, anuncios EOI, ofertas temporales de pago y materiales publicitarios. Este bloque no es inventario y no define la disponibilidad de unidades.

<stocks>
  <stock>
    <title>...</title>
    <description>...</description>
    <start_at>2025-06-26T00:00:00+04:00</start_at>
    <end_at/>
    <logo>https://...</logo>
  </stock>
</stocks>

  • stocks: objeto. Contenedor de mensajes de marketing.
  • stock: objeto. Una campaña, noticia o anuncio promocional.
  • title: objeto localizado. Título de la promoción.
  • description: HTML localizado. Descripción de la promoción.
  • start_at: fecha y hora. Fecha de inicio.
  • end_at: fecha y hora. Fecha de finalización; puede estar vacía.
  • logo: url. Imagen de la promoción.

Use for_sale_count, layouts.sale_units_count y sales_status para la disponibilidad de la propiedad, no stocks.

11. EOI

EOI significa Expression of Interest. El bloque describe el interés preliminar o las condiciones de depósito para proyectos en estado Presale (EOI).

<eoi>
  <is_eoi_return>0</is_eoi_return>
  <eoi_items>
    <eoi_item>
      <price>100000</price>
      <percent/>
      <description>
        <en>Importe EOI para 2 Bedrooms</en>
        <ru>Сумма EOI для 2-комнатных</ru>
        <ar>...</ar>
      </description>
    </eoi_item>
  </eoi_items>
</eoi>

  • is_eoi_return: 0/1/vacío. 0 = no reembolsable, 1 = reembolsable, vacío = no especificado.
  • eoi_items: objeto. Contenedor de condiciones EOI.
  • eoi_item: objeto. Una condición EOI.
  • price: decimal. Importe fijo EOI.
  • percent: decimal. Porcentaje EOI, si se usa.
  • description: objeto localizado. Descripción de la condición.
  • sales_status.en = Presale (EOI) y eoi_items está completo: mostrar EOI.
  • Cualquier otro sales_status: ocultar EOI.

12. Cargo de servicio y cesión

<service_charge>
  <value>172.22</value>
  <unit>sq. m</unit>
  <currency>AED</currency>
</service_charge>
<assignment>40.00</assignment>

  • service_charge.value: importe del cargo de servicio. Si está vacío, no mostrar el bloque.
  • service_charge.unit: unidad de cálculo, normalmente sq. m. Puede estar vacía.
  • service_charge.currency: moneda, normalmente AED. Puede estar vacía.
  • assignment: porcentaje a partir del cual es posible la cesión. Vacío = información no especificada, no una restricción.

13. Planes de pago: <payment_plans>

payment_plans describe las opciones de pago de la propiedad ofrecidas por el desarrollador. Un proyecto puede tener varios planes de pago. Cada plan desglosa el pago por etapas: reserva, construcción, entrega y post-entrega. Las tasas y cargos adicionales se envían por separado, por lo que el porcentaje total puede superar 100%. Por ejemplo, 104% puede significar 100% del precio de la propiedad + 4% de tasa DLD.

  • Basic: id, title, currency. Identificador del plan, título y moneda. title es texto libre, no un enum.
  • Booking: on_booking_percent, on_booking_fix, on_booking_payments_count, on_booking_fees. Pagos y tasas en la etapa de reserva.
  • Construction: on_construction_percent, on_construction_fix, on_construction_payments_count, on_construction_fees. Pagos durante la construcción.
  • Handover: on_handover_percent, on_handover_fix, on_handover_payments_count, on_handover_fees. Pagos en la entrega de la propiedad.
  • Post-handover: post_handover_percent, post_handover_fix, on_post_handover_payments_count, on_post_handover_fees. Pagos después de la entrega.
  • ROI: roi_percent, roi_fix, roi_payments_count, roi_fees. Campos para ROI o esquemas de ingresos garantizados.
  • Additional fees: additional, additional_percent, additional_fix, additional_fix_m2. Pagos adicionales, por ejemplo DLD Fee.
  • Periods: period_after_handover, period_after_roi. Frecuencia de pagos recurrentes.
  • Totals: price_total, fees_included_total. Importes totales del plan y tasas incluidas.

14. Distribuciones: <layouts>

layouts describe una distribución típica dentro de un proyecto. Es un tipo de unidad agregado, no un apartamento u oficina específico.

  • id: entero. ID único de la distribución. Úselo como ID externo de la distribución.
  • title: objeto localizado. Nombre de la distribución. Muéstrelo según el idioma de la interfaz.
  • project_id: entero. ID del proyecto padre. Vincular con offers.complex-id.
  • building_name: objeto localizado. Nombre del edificio. No mostrar si está vacío.
  • price_on_request: 0/1. Indicador de ocultación del precio. Si es 1, no mostrar el precio.
  • area_min / area_max: objeto. Rango de área. m2 y ft2.
  • area_balcony_min / area_balcony_max: objeto. Rango de área del balcón. Puede estar vacío.
  • type: objeto localizado. Tipo de propiedad. Ver referencia de tipo de unidad.
  • sale_units_count: entero. Número de unidades disponibles de este tipo. No es una lista de lotes.
  • album: objeto. Galería de la distribución. Mostrar a nivel de distribución.
  • levels_photos: objeto. Imágenes por nivel. Usar como planos.
  • floors_count: entero. Número de niveles. 1, 2, 3, etc.
  • rooms_count: objeto localizado. Número de habitaciones. Ver referencia de número de habitaciones.
  • price: objeto. Rango de precio de la distribución. Ocultar cuando price_on_request=1.
  • is_limited_publication: 0/1. Restricción de publicación. Si es 1, ocultar públicamente.

15. Referencias de valores enum

  • Tipo de proyecto: project, compound.
  • Estado de ventas: Preliminary Info, Announcement, Presale (EOI), Launch, On Sale, Sold Out, Pending.
  • Estado de construcción: Scheduled, Ready, Stopped, In Progress.
  • Tipo de unidad: Apartment, Villa, Townhouse, Duplex, Triplex, Penthouse, Retail, Office, Suite.
  • Número de habitaciones: Studio, 1 BR, 2 BR, 3 BR, 4 BR, 5 BR, 6 BR, 7 BR, 8 BR, NA.
  • Clave de precio BR: studio, 1, 2, 3, 4, 5, 6, villa, townhouse, n.
  • Categoría de galería: Presentación del proyecto, Avance de la construcción, Ejemplos de acabados, Infraestructura, Vista.
  • Moneda: AED.
  • Unidad de cargo de servicio: sq. m.
  • Banderas booleanas: 0, 1; se permite vacío en algunos campos.

Si el feed contiene un valor que no está en la lista de referencia, la importación no debe fallar. El valor debe guardarse como valor bruto, mapearse como desconocido y registrarse para revisión.

16. Valores vacíos

Un valor vacío significa “no especificado”, no 0. Las etiquetas vacías pueden verse como <field/> o <field></field>.

  • assignment: la condición de cesión no está especificada.
  • service_charge.value: el cargo de servicio no está especificado.
  • eoi.is_eoi_return: la reembolsabilidad del EOI no está especificada.
  • area_balcony_min.m2: el área del balcón no está especificada.
  • description.en: falta la descripción.

17. Reglas de visualización

  • Precio oculto: price_on_request = 1. Mostrar “Precio a consultar”.
  • Precio visible: price_on_request = 0. Mostrar precio min/max.
  • EOI: sales_status.en = Presale (EOI) y EOI está completo. Mostrar EOI.
  • EOI no relevante: sales_status.en != Presale (EOI). Ocultar EOI.
  • Vendido: is_sold_out = 1 o sales_status.en = Sold Out. Mostrar “Vendido” u ocultar del listado.
  • Publicación limitada: is_limited_publication = 1. No publicar públicamente.
  • Assignment vacío: assignment vacío. No mostrar el bloque de assignment.
  • Cargo de servicio vacío: service_charge.value vacío. No mostrar cargo de servicio.

18. Reglas de importación

  • Proyecto: buscar por complex-id; si se encuentra, actualizar; si no, crear.
  • Distribución: buscar por layouts.id; vincular al proyecto mediante project_id.
  • Eliminación: si un objeto desaparece del nuevo feed, marcarlo como inactivo en lugar de eliminarlo inmediatamente.
  • Enum desconocido: guardar el valor bruto, mapearlo como desconocido y registrar.
  • Valores vacíos: no convertir a 0 sin una regla explícita específica del campo.

Campo del proyecto → Origen

  • external_project_id: complex-id.
  • raw_offer_type: type.
  • title_*: title.
  • description_*: description.
  • developer_name: developer.title.
  • developer_logo_url: developer.logo.
  • city/address/coordinates: city, address, latitude, longitude.
  • districts: districts.district.
  • construction_status: status.en.
  • sales_status: sales_status.en.
  • price_min / price_max: price.
  • price_on_request: price_on_request.
  • galleries: photo, album, albums.
  • payment_plans: payment_plans.
  • eoi: eoi.
  • stocks: stocks.
  • source_updated_at: updated_at.

Campo de la distribución → Origen

  • external_layout_id: layouts.id.
  • external_project_id: layouts.project_id.
  • title_*: layouts.title.
  • building_name_*: building_name.
  • unit_type: type.en.
  • rooms_count: rooms_count.en.
  • sale_units_count: sale_units_count.
  • area_min / area_max: area_min, area_max.
  • balcony_min / balcony_max: area_balcony_min, area_balcony_max.
  • floors_count: floors_count.
  • price_min / price_max: price.
  • layout_gallery: album.
  • levels_photos: levels_photos.
  • is_limited_publication: is_limited_publication.