XML-Feed für Projekte und Grundrisse
1. Zweck des Feeds
Der XML-Feed überträgt strukturierte Daten zu Immobilienprojekten und typischen Grundrissen. Er dient dazu, dass das empfangende System automatisch Projektkarten erstellen und aktualisieren sowie Preise, Status, Galerien, Ausstattungen, Zahlungsbedingungen, EOI und Marketing-Promotions der Entwickler anzeigen kann.
Der Feed überträgt Grundrisse in aggregierter Form: Ein Datensatz beschreibt einen typischen Grundriss und die Anzahl der verfügbaren Einheiten dieses Typs. Es handelt sich nicht um eine Liste konkreter Apartments, Büros oder Grundstücke.
- realty-feed: Root-Container des gesamten XML-Feeds. Haupt-ID: —
- offers: ein Projekt oder eine Anlage. Haupt-ID: complex-id
- layouts: typischer Grundriss innerhalb eines Projekts. Haupt-ID: id
- payment_plans: eine Zahlungsoption des Projekts. Haupt-ID: id
- eoi_item: eine EOI-Bedingung. Haupt-ID: —
- stock: Marketingkampagne, Newsbeitrag oder Werbebotschaft des Entwicklers. Haupt-ID: —
1.1 Was ist ein XML-Feed
Ein XML-Feed ist eine strukturierte Datei mit Daten zu Immobilienprojekten und typischen Grundrissen. Sie enthält Beschreibungen, Fotos, Preise, Adressen, Status, Spezifikationen, Ausstattungen und weitere Daten, die für die Darstellung von Immobilien auf einer Agentur-Website oder in einem Katalog benötigt werden.
Einfach gesagt ist ein XML-Feed ein Datenstrom über Immobilien, den das empfangende System regelmäßig herunterlädt, liest und zur automatischen Aktualisierung von Objektkarten nutzt.
Alnair stellt die Daten bereit. Website-Entwicklung, Katalogentwicklung, CRM-Integration und Importlogik werden vom Kunden oder dem technischen Team des Kunden übernommen.
1.2 Was die Agentur benötigt
Um den XML-Feed zu nutzen, benötigt die Agentur eine eigene technische Infrastruktur, die in der Lage ist, das XML regelmäßig herunterzuladen, seine Struktur zu analysieren und Daten im eigenen System zu aktualisieren.
- Website oder Immobilienkatalog: der Ort, an dem Projekte und Grundrisse aus dem Feed angezeigt werden.
- Technisches Team oder Entwickler: Einrichtung von XML-Download, Parsing und Import.
- XML-Parser: Lesen der XML-Struktur und Umwandlung in das interne Datenmodell.
- Importmodul: Erstellen, Aktualisieren und Deaktivieren von Projekten und Grundrissen.
- Task-Scheduler: regelmäßige Importausführung nach Zeitplan, zum Beispiel via Cron oder Scheduler.
- Fehlerprotokollierung: Überwachung unbekannter Enum-Werte, leerer Felder und Ladefehler.
1.3 Wie die Agentur den XML-Feed nutzt
Ein typischer Ablauf sieht wie folgt aus:
- Das Agentursystem lädt das XML über einen persönlichen Weblink herunter.
- Das XML wird als Roh-Snapshot für Diagnosen und erneute Verarbeitung gespeichert.
- Der Parser liest die Struktur realty-feed, offers, layouts und die verschachtelten Blöcke.
- Das Importmodul erstellt neue Projekte und Grundrisse oder aktualisiert bestehende Einträge.
- Objekte, die im neuen Feed fehlen, werden als inaktiv markiert.
- Die Agentur-Website zeigt aktuelle Projektkarten, Preise, Galerien und Status an.
Wichtigste Integrationsmöglichkeiten:
- Automatische Aktualisierungen: Projekte und Grundrisse werden ohne manuellen Aufwand aktualisiert.
- Erstellung von Objektseiten: Feeddaten werden für Projekt- und Grundrisskarten genutzt.
- Aktuelle Preise und Status: Die Website erhält XML-Updates nach Plan.
- Filter und Suche: Felder wie Stadtteil, Preis, Immobilientyp, Zimmeranzahl und Fläche können zum Filtern verwendet werden.
- Mediengalerien: Projektfotos, thematische Galerien und Grundrissbilder können in der Oberfläche angezeigt werden.
2. Allgemeine XML-Struktur
<realty-feed>
<generation-date>2026-06-17T12:06:39+04:00</generation-date>
<offers>...</offers>
<offers>...</offers>
</realty-feed>
- realty-feed: Objekt. Root-Block des Feeds.
- generation-date: Datum/Uhrzeit. Erstellungsdatum und -zeit des XML. Dient zur Prüfung der Aktualität.
- offers: Objekt[]. Liste der Projekte oder Anlagen. Jeder offers-Block enthält Projektdaten und die zugehörigen Grundrisse.
2.1 Feed-Zugriff und Download-Limits
Der Feed wird dem Kunden über einen persönlichen Weblink bereitgestellt. Der Link ist kundenspezifisch und wird vom empfangenden System für den automatischen XML-Download verwendet.
Der persönliche Link ist im Alnair-Konto für den Administrator verfügbar. Der Administrator kann diesen Link an das technische Team des Kunden für die Einrichtung des Imports weitergeben.
- Zugriffsart: persönlicher Weblink. Individuelle XML-Feed-URL für den Kunden.
- Wo der Link zu finden ist: Alnair-Konto. Der Link ist für den Kundenadministrator verfügbar.
- Aktualisierungsfrequenz des Feeds: alle 4 Stunden. Die XML-Daten werden auf der Alnair-Seite einmal alle 4 Stunden aktualisiert.
- Mindest-Downloadintervall: nicht öfter als einmal pro Stunde. Das empfangende System darf den Feed nicht häufiger als einmal pro Stunde abrufen.
- Limit überschritten: Zugriffssperre. Bei zu häufigen Anfragen kann der Feed-Zugriff vorübergehend blockiert werden.
Empfohlene Integrationslogik: geplanten Download per Cron oder Scheduler einrichten, das zuletzt empfangene XML speichern und den Feed nicht bei jedem Seitenaufruf abrufen. Der optimale Modus ist ein Download des Feeds höchstens einmal pro Stunde, wobei zu berücksichtigen ist, dass neue Daten etwa alle 4 Stunden erscheinen.
3. Projekt: <offers>
offers ist die zentrale Entität des Feeds. Sie enthält Projektbeschreibung, Entwickler, Lage, Bau- und Verkaufsstatus, Preise, Medien, Ausstattungen, Zahlungspläne, EOI, Marketingaktionen und typische Grundrisse.
<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: Integer. Eindeutige Projekt-ID in Alnair. Als externe Projekt-ID für Upsert verwenden.
- type: Enum. Entitätstyp der obersten Ebene: project oder compound. Den Rohwert speichern und als Projekt der obersten Ebene importieren.
- logo: URL. Projektlogo. Für Branding anzeigen, nicht als Cover verwenden.
- photo: URL. Hauptbild des Projekts / Cover. Als Cover- und Hero-Bild verwenden.
- title: lokalisiertes Objekt. Projektname in en/ru/ar. Entsprechend der Oberflächensprache anzeigen.
- description: lokalisiertes HTML. Projektbeschreibung in en/ru/ar. Sicher rendern; HTML befindet sich in CDATA.
- price_on_request: 0/1. Preis-Verbergungsflag. Wenn 1, „Preis auf Anfrage“ anzeigen.
- status: Objekt. Baufortschritt. Nicht mit sales_status verwechseln.
- construction_start_at: Datum/Uhrzeit. Baubeginn. Anzeigen, wenn gefüllt.
- construction_progress: Dezimalzahl. Prozentualer Baufortschritt. Als Prozentwert anzeigen.
- planned_completion_at: Datum/Uhrzeit. Geplantes Fertigstellungsdatum. Als Übergabedatum verwenden.
- predicted_completion_at: Datum/Uhrzeit. Voraussichtliches Fertigstellungsdatum. Kann als aktualisiertes Fertigstellungsdatum verwendet werden.
- amenities: Objekt. Ausstattungen und Merkmale des Projekts. Nach Schlüssel zuordnen.
- developer: Objekt. Projektentwickler. Name und Logo speichern.
- city / address: Zeichenkette. Stadt und Adresse des Projekts. Für Standortdaten verwenden.
- latitude / longitude: Dezimalzahl. Koordinaten. Für die Karte verwenden.
- districts: Objekt. Stadtteile des Projekts. Für Filter und Projektkarte verwenden.
- album: Objekt. Hauptgalerie des Projekts ohne Kategorisierung. Als allgemeine Galerie anzeigen.
- albums: Objekt. Thematische Projektgalerien. Nach Titel gruppieren.
- for_sale_count: Integer. Anzahl der verfügbaren Einheiten im Projekt. Kann als Verfügbarkeit angezeigt werden.
- price: Objekt. Allgemeine Preisspanne des Projekts. Ausblenden, wenn price_on_request=1.
- br_prices: Objekt[]. Preise nach Schlafzimmeranzahl oder Kategorie. Für Filter und Listings verwenden.
- updated_at: Datum/Uhrzeit. Aktualisierungsdatum des Projekts. Für die Synchronisierung verwenden.
- is_sold_out: 0/1. Ausverkauft-Flag. Zusammen mit sales_status verwenden.
- payment_plans: Objekt[]. Zahlungsoptionen des Entwicklers. Als Zahlungsoptionen anzeigen.
- sales_status: lokalisiertes Objekt. Verkaufsstatus des Projekts. Definiert die Verkaufsphase.
- stocks: Objekt. Marketingkampagnen und Werbebotschaften des Entwicklers. Als Promo-Blöcke anzeigen.
- eoi: Objekt. Expression of Interest. Nur bei Presale (EOI) anzeigen.
- service_charge: Objekt. Servicegebühr. Anzeigen, wenn ein Wert gefüllt ist.
- assignment: Dezimalzahl. Abtretungsbedingung. Leer bedeutet nicht angegeben.
- is_limited_publication: 0/1. Veröffentlichungsbeschränkung. Wenn 1, nicht ohne Genehmigung öffentlich veröffentlichen.
- layouts: Objekt[]. Typische Grundrisse des Projekts. Als Kind-Entitäten des Projekts importieren.
4. Lokalisierte Felder
Lokalisierte Felder haben dieselbe Struktur: Werte in Englisch, Russisch und Arabisch werden innerhalb des Tags übergeben.
<title>
<en>Project Name</en>
<ru>Название проекта</ru>
<ar>اسم المشروع</ar>
</title>
- en: Englischer Wert. Empfohlener Fallback.
- ru: Russischer Wert.
- ar: Arabischer Wert.
Fallback-Regel:
- Verwenden Sie die Oberflächensprache, wenn sie gefüllt ist.
- Wenn die benötigte Sprache leer ist, verwenden Sie en.
- Wenn en leer ist, verwenden Sie ru.
- Wenn ru leer ist, verwenden Sie ar.
- Wenn alle Werte leer sind, das Feld nicht anzeigen.
5. Status
5.1 Baustatus: <status>
Der Baustatus zeigt den physischen Zustand des Projekts. Er gibt nicht die Verkaufsverfügbarkeit an.
<status>
<key>development_stage_progress</key>
<en>In Progress</en>
<ru>Строится</ru>
<ar>قيد الإنشاء</ar>
</status>
- Scheduled: das Projekt ist geplant.
- In Progress: der Bau ist im Gange.
- Ready: das Projekt ist fertiggestellt.
- Stopped: der Bau ist gestoppt.
5.2 Verkaufsstatus: <sales_status>
Der Verkaufsstatus zeigt die kommerzielle Phase des Projekts: Ankündigung, Vorverkauf, Launch, aktiver Verkauf oder Ausverkauft.
- Preliminary Info: frühe Projektinformationen.
- Announcement: das Projekt wurde angekündigt.
- Presale (EOI): EOI-Erfassung läuft.
- Launch: Verkaufsstart.
- On Sale: das Projekt ist kaufbar.
- Sold Out: das Projekt ist ausverkauft.
- Pending: der Status wartet auf eine Aktualisierung.
6. Entwickler und Lage
Diese Blöcke werden benötigt, um die Entwickler-Marke und die geografische Lage des Projekts anzuzeigen.
<developer>
<title>
<en>Developer Name</en>
<ru>Developer Name</ru>
<ar>Developer Name</ar>
</title>
<logo>https://...</logo>
</developer>
<city>Dubai</city>
<address>Project Address, Dubai</address>
<latitude>25.01809076</latitude>
<longitude>55.13354525</longitude>
<districts>
<district>Jumeirah Village Triangle (JVT)</district>
</districts>
- developer.title: lokalisiertes Objekt. Name des Entwicklers.
- developer.logo: URL. Logo des Entwicklers.
- city: Zeichenkette. Stadt.
- address: Zeichenkette. Adresse.
- latitude / longitude: Dezimalzahl. Koordinaten für die Karte.
- districts.district: Zeichenkette[]. Stadtteile des Projekts.
7. Preise
7.1 Projektpreis: <price>
Der Preis auf Projektebene zeigt die allgemeine Preisspanne der verfügbaren Angebote im Projekt.
<price>
<min>815462</min>
<max>2089780</max>
<min_usd>222009</min_usd>
<max_usd>568942</max_usd>
<currency>AED</currency>
</price>
- min: Dezimalzahl. Mindestpreis.
- max: Dezimalzahl. Höchstpreis.
- min_usd: Dezimalzahl. Mindestpreis in USD.
- max_usd: Dezimalzahl. Höchstpreis in USD.
- currency: Enum. Hauptwährung, normalerweise AED.
Wenn price_on_request = 1, werden die exakten Preise öffentlich nicht angezeigt, auch wenn ein Preis gefüllt ist.
7.2 Preise nach Kategorie: <br_prices>
br_prices gruppiert Preise und Flächen nach Schlafzimmeranzahl oder Immobilientyp. Dies ist nützlich für Filter und kurze Projektkarten.
<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: Studios.
- 1-6: Anzahl der Schlafzimmer.
- villa: Villen.
- townhouse: Reihenhäuser.
- n: nicht zutreffend / nichtwohnbezogene Kategorie / sonstiges.
8. Medien
Die Medien im Feed sind in mehrere Typen unterteilt. Diese sollten nicht ohne Berücksichtigung ihres Zwecks in einer einzigen Galerie zusammengeführt werden: Ein Bild kann das Projekt-Cover sein, ein anderes das Logo, ein weiteres ein Promo-Bild und wieder ein anderes ein Grundriss.
- logo: offers.logo. Projektlogo. Im Projekt-Branding anzeigen; nicht als Cover verwenden.
- photo: offers.photo. Hauptbild des Projekts / Cover. Als Coverbild in der Karte und als Hero-Bild auf der Projektseite verwenden.
- album.image: offers.album.image. Hauptgalerie des Projekts ohne Kategorisierung. In der allgemeinen Projektgalerie anzeigen.
- albums.album.images.image: offers.albums.album.images.image. Thematische Projektgalerie. Nach albums.album.title gruppieren.
- developer.logo: offers.developer.logo. Logo des Entwicklers. Im Entwicklerblock anzeigen.
- stocks.stock.logo: offers.stocks.stock.logo. Bild der Marketingkampagne. Im Promotionsblock anzeigen.
- layouts.album.image: offers.layouts.album.image. Galerie eines bestimmten typischen Grundrisses. Auf Grundrissebene anzeigen.
- levels_photos.level_photo.image: offers.layouts.levels_photos.level_photo.image. Grundrissbild nach Ebene. Als Grundriss verwenden.
<photo>https://...</photo>
<album>
<image>https://...</image>
</album>
<albums>
<album>
<title><en>Infrastructure</en><ru>Инфраструктура</ru><ar>...</ar></title>
<images>
<image>https://...</image>
</images>
</album>
</albums>
- Project presentation: Bilder der Projektpräsentation.
- Construction progress: Fotos des Baufortschritts.
- Finishing examples: Beispiele für die Ausführung.
- Infrastructure: Projektinfrastruktur.
- View: Ausblicke und Umgebung.
Nicht jede Kategorie muss bei jedem Projekt vorhanden sein. Ist der Kategorietitel leer, können Bilder als unkategorisiert importiert oder in der allgemeinen Galerie platziert werden.
Im aktuellen Aufbau gibt es kein separates History/Story-XML-Tag. News, Werbebotschaften und Marketingmaterialien des Projekts werden über stocks übergeben. Für die Bauhistorie kann die Kategorie Construction progress verwendet werden, sofern sie in albums vorhanden ist.
9. Ausstattungen
amenities beschreibt die Ausstattungen und Merkmale des Projekts. Für die Integration ist es besser, key zu verwenden, während lokalisierte Werte für die Anzeige genutzt werden sollten.
<amenities>
<amenity>
<key>project_facilities_gym</key>
<en>Gym</en>
<ru>Тренажёрный зал</ru>
<ar>صالة رياضية</ar>
</amenity>
</amenities>
- amenities: Objekt. Container für Ausstattungen.
- amenity: Objekt. Eine Ausstattung.
- key: Enum. Technischer Schlüssel.
- en / ru / ar: Zeichenkette. Name der Ausstattung in drei Sprachen.
Der Schlüssel projecet_hotel_license enthält einen Tippfehler, muss aber als Hotel License zugeordnet werden. Es wird empfohlen, den Alias zu unterstützen und den Import nicht zu unterbrechen.
10. Marketing-Promotions: <stocks>
stocks sind Marketingkampagnen, News und Werbebotschaften von Entwicklern. Sie können Sonderpreise, Rabatte, Launch-Bedingungen, EOI-Ankündigungen, zeitlich begrenzte Zahlungsangebote und Werbematerialien enthalten. Dieser Block ist kein Lagerbestand und definiert nicht die Verfügbarkeit von Einheiten.
<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: Objekt. Container für Marketingmeldungen.
- stock: Objekt. Eine Kampagne, ein Newsbeitrag oder eine Werbeankündigung.
- title: lokalisiertes Objekt. Titel der Promotion.
- description: lokalisiertes HTML. Beschreibung der Promotion.
- start_at: Datum/Uhrzeit. Startdatum.
- end_at: Datum/Uhrzeit. Enddatum; kann leer sein.
- logo: URL. Bild der Promotion.
Verwenden Sie for_sale_count, layouts.sale_units_count und sales_status für die Verfügbarkeit von Objekten, nicht stocks.
11. EOI
EOI steht für Expression of Interest. Der Block beschreibt vorläufiges Interesse oder Einzahlungsbedingungen für Projekte im Status Presale (EOI).
<eoi>
<is_eoi_return>0</is_eoi_return>
<eoi_items>
<eoi_item>
<price>100000</price>
<percent/>
<description>
<en>EOI amount for 2 Bedrooms</en>
<ru>Сумма EOI для 2-комнатных</ru>
<ar>...</ar>
</description>
</eoi_item>
</eoi_items>
</eoi>
- is_eoi_return: 0/1/leer. 0 = nicht erstattbar, 1 = erstattbar, leer = nicht angegeben.
- eoi_items: Objekt. Container für EOI-Bedingungen.
- eoi_item: Objekt. Eine EOI-Bedingung.
- price: Dezimalzahl. Fester EOI-Betrag.
- percent: Dezimalzahl. EOI-Prozentsatz, falls verwendet.
- description: lokalisiertes Objekt. Beschreibung der Bedingung.
- sales_status.en = Presale (EOI) and eoi_items is filled: EOI anzeigen.
- Any other sales_status: EOI ausblenden.
12. Servicegebühr und Abtretung
<service_charge>
<value>172.22</value>
<unit>sq. m</unit>
<currency>AED</currency>
</service_charge>
<assignment>40.00</assignment>
- service_charge.value: Höhe der Servicegebühr. Wenn leer, Block nicht anzeigen.
- service_charge.unit: Berechnungseinheit, normalerweise sq. m. Kann leer sein.
- service_charge.currency: Währung, normalerweise AED. Kann leer sein.
- assignment: Prozentsatz, ab dem eine Abtretung möglich ist. Leer = Information nicht angegeben, keine Einschränkung.
13. Zahlungspläne: <payment_plans>
payment_plans beschreibt die Zahlungsoptionen für die Immobilie vom Entwickler. Ein Projekt kann mehrere Zahlungspläne haben. Jeder Plan gliedert die Zahlung in Phasen: Reservierung, Bau, Übergabe und Nach Übergabe. Gebühren und Zusatzkosten werden separat übergeben, sodass der Gesamtprozentsatz 100% überschreiten kann. Zum Beispiel können 104% 100% des Immobilienpreises + 4% DLD-Gebühr bedeuten.
- Basic: id, title, currency. Kennung, Titel und Währung des Plans. title ist Freitext, kein Enum.
- Booking: on_booking_percent, on_booking_fix, on_booking_payments_count, on_booking_fees. Zahlungen und Gebühren in der Reservierungsphase.
- Construction: on_construction_percent, on_construction_fix, on_construction_payments_count, on_construction_fees. Zahlungen während des Baus.
- Handover: on_handover_percent, on_handover_fix, on_handover_payments_count, on_handover_fees. Zahlungen bei Übergabe der Immobilie.
- Post-handover: post_handover_percent, post_handover_fix, on_post_handover_payments_count, on_post_handover_fees. Zahlungen nach der Übergabe.
- ROI: roi_percent, roi_fix, roi_payments_count, roi_fees. Felder für ROI- oder Garantieeinkommensmodelle.
- Additional fees: additional, additional_percent, additional_fix, additional_fix_m2. Zusätzliche Zahlungen, zum Beispiel DLD Fee.
- Periods: period_after_handover, period_after_roi. Häufigkeit wiederkehrender Zahlungen.
- Totals: price_total, fees_included_total. Gesamtsummen des Plans und enthaltene Gebühren.
14. Grundrisse: <layouts>
layouts beschreibt einen typischen Grundriss innerhalb eines Projekts. Es handelt sich um einen aggregierten Einheitstyp, nicht um ein konkretes Apartment oder Büro.
- id: Integer. Eindeutige Grundriss-ID. Als externe Grundriss-ID verwenden.
- title: lokalisiertes Objekt. Name des Grundrisses. Entsprechend der Oberflächensprache anzeigen.
- project_id: Integer. ID des übergeordneten Projekts. Mit offers.complex-id verknüpfen.
- building_name: lokalisiertes Objekt. Gebäudename. Nicht anzeigen, wenn leer.
- price_on_request: 0/1. Preis-Verbergungsflag. Wenn 1, Preis nicht anzeigen.
- area_min / area_max: Objekt. Flächenbereich. m2 und ft2.
- area_balcony_min / area_balcony_max: Objekt. Balkonflächenbereich. Kann leer sein.
- type: lokalisiertes Objekt. Immobilientyp. Siehe Referenz zum Einheitstyp.
- sale_units_count: Integer. Anzahl der verfügbaren Einheiten dieses Typs. Keine Liste von Einheiten.
- album: Objekt. Galerie des Grundrisses. Auf Grundrissebene anzeigen.
- levels_photos: Objekt. Bilder nach Ebene. Als Grundrisse verwenden.
- floors_count: Integer. Anzahl der Ebenen. 1, 2, 3 usw.
- rooms_count: lokalisiertes Objekt. Zimmeranzahl. Siehe Referenz zur Zimmeranzahl.
- price: Objekt. Preisspanne des Grundrisses. Ausblenden, wenn price_on_request=1.
- is_limited_publication: 0/1. Veröffentlichungsbeschränkung. Wenn 1, öffentlich ausblenden.
15. Referenzen für Enum-Werte
- Project type: project, compound.
- Sales status: Preliminary Info, Announcement, Presale (EOI), Launch, On Sale, Sold Out, Pending.
- Construction status: Scheduled, Ready, Stopped, In Progress.
- Unit type: Apartment, Villa, Townhouse, Duplex, Triplex, Penthouse, Retail, Office, Suite.
- Rooms count: Studio, 1 BR, 2 BR, 3 BR, 4 BR, 5 BR, 6 BR, 7 BR, 8 BR, NA.
- BR price key: studio, 1, 2, 3, 4, 5, 6, villa, townhouse, n.
- Gallery category: Project presentation, Construction progress, Finishing examples, Infrastructure, View.
- Currency: AED.
- Service charge unit: sq. m.
- Boolean flags: 0, 1; für einige Felder ist ein leerer Wert zulässig.
Wenn der Feed einen Wert enthält, der nicht in der Referenzliste steht, darf der Import nicht fehlschlagen. Der Wert muss als Rohwert gespeichert, als unbekannt zugeordnet und zur Prüfung protokolliert werden.
16. Leere Werte
Ein leerer Wert bedeutet „nicht angegeben“, nicht 0. Leere Tags können wie <field/> oder <field></field> aussehen.
- assignment: Abtretungsbedingung ist nicht angegeben.
- service_charge.value: Servicegebühr ist nicht angegeben.
- eoi.is_eoi_return: Erstattbarkeit der EOI ist nicht angegeben.
- area_balcony_min.m2: Balkonfläche ist nicht angegeben.
- description.en: Beschreibung fehlt.
17. Anzeigeregeln
- Preis ausgeblendet: price_on_request = 1. „Preis auf Anfrage“ anzeigen.
- Preis sichtbar: price_on_request = 0. Preis min/max anzeigen.
- EOI: sales_status.en = Presale (EOI) und EOI ist gefüllt. EOI anzeigen.
- EOI nicht relevant: sales_status.en != Presale (EOI). EOI ausblenden.
- Ausverkauft: is_sold_out = 1 oder sales_status.en = Sold Out. „Ausverkauft“ anzeigen oder aus der Liste ausblenden.
- Eingeschränkte Veröffentlichung: is_limited_publication = 1. Nicht öffentlich veröffentlichen.
- Abtretung leer: assignment leer. Abtretungsblock nicht anzeigen.
- Servicegebühr leer: service_charge.value leer. Servicegebühr nicht anzeigen.
18. Importregeln
- Projekt: nach complex-id suchen; wenn gefunden, aktualisieren; wenn nicht gefunden, erstellen.
- Grundriss: nach layouts.id suchen; über project_id dem Projekt zuordnen.
- Löschung: Wenn ein Objekt im neuen Feed fehlt, statt es sofort zu löschen als inaktiv markieren.
- Unbekanntes Enum: Rohwert speichern, als unbekannt zuordnen und protokollieren.
- Leere Werte: nicht ohne explizite feldspezifische Regel in 0 umwandeln.
19. Empfohlene Datenstruktur
Projektfeld → Quelle
- 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.
Grundrissfeld → Quelle
- 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.