프로젝트 및 레이아웃용 XML 피드
1. 피드 목적
XML 피드는 부동산 프로젝트와 대표 평면도에 대한 구조화된 데이터를 전송합니다. 이를 통해 수신 시스템이 프로젝트 카드, 가격, 상태, 갤러리, 편의시설, 결제 조건, EOI, 개발사 제공 마케팅 홍보 자료를 자동으로 생성하고 업데이트할 수 있습니다.
피드는 평면도를 집계 형태로 전송합니다. 하나의 평면도 레코드는 대표 평면도와 해당 타입의 공급 가능 유닛 수를 설명하며, 특정 아파트, 오피스, 또는 부지의 목록은 아닙니다.
- realty-feed: 전체 XML 피드의 루트 컨테이너. 주요 ID: —
- offers: 하나의 프로젝트 또는 단지. 주요 ID: complex-id
- layouts: 프로젝트 내 대표 평면도. 주요 ID: id
- payment_plans: 하나의 프로젝트 결제 옵션. 주요 ID: id
- eoi_item: 하나의 EOI 조건. 주요 ID: —
- stock: 개발사의 마케팅 캠페인, 뉴스 항목, 또는 프로모션 메시지. 주요 ID: —
1.1 XML 피드란 무엇인가
XML 피드는 부동산 프로젝트와 대표 평면도에 대한 데이터를 담은 구조화된 파일입니다. 여기에는 부동산을 에이전시 웹사이트나 카탈로그에 표시하는 데 필요한 설명, 사진, 가격, 주소, 상태, 사양, 편의시설 및 기타 데이터가 포함됩니다.
쉽게 말해, XML 피드는 부동산 데이터 스트림이며 수신 시스템이 이를 정기적으로 다운로드, 읽기, 활용해 부동산 카드를 자동 업데이트합니다.
Alnair는 데이터를 제공합니다. 웹사이트 개발, 카탈로그 개발, CRM 연동, 가져오기 로직은 고객 또는 고객의 기술팀이 담당합니다.
1.2 에이전시에 필요한 사항
XML 피드를 사용하려면 에이전시가 XML을 정기적으로 다운로드하고 구조를 파싱하여 자사 시스템의 데이터를 업데이트할 수 있는 기술 인프라를 갖추고 있어야 합니다.
- 웹사이트 또는 부동산 카탈로그: 피드의 프로젝트와 평면도를 표시할 장소입니다.
- 기술팀 또는 개발자: XML 다운로드, 파싱, 가져오기 설정을 담당합니다.
- XML 파서: XML 구조를 읽고 내부 데이터 모델로 변환합니다.
- 가져오기 모듈: 프로젝트와 평면도를 생성, 업데이트, 비활성화합니다.
- 작업 스케줄러: cron 또는 scheduler 등을 통해 정기 가져오기를 실행합니다.
- 오류 로깅: 알 수 없는 enum 값, 빈 필드, 로딩 오류를 모니터링합니다.
1.3 에이전시의 XML 피드 활용 방식
일반적인 작업 흐름은 다음과 같습니다:
- 에이전시 시스템이 개인 웹 링크에서 XML을 다운로드합니다.
- XML은 진단 및 재처리를 위해 원본 스냅샷으로 저장됩니다.
- 파서는 realty-feed, offers, layouts 구조와 중첩 블록을 읽습니다.
- 가져오기 모듈이 새 프로젝트와 평면도를 생성하거나 기존 항목을 업데이트합니다.
- 새 피드에서 사라진 객체는 비활성으로 표시됩니다.
- 에이전시 웹사이트에는 최신 프로젝트 카드, 가격, 갤러리, 상태가 표시됩니다.
주요 연동 기능:
- 자동 업데이트: 프로젝트와 평면도가 수동 입력 없이 업데이트됩니다.
- 부동산 페이지 생성: 피드 데이터가 프로젝트 및 평면도 카드에 활용됩니다.
- 최신 가격 및 상태: 웹사이트가 일정에 따라 XML 업데이트를 수신합니다.
- 필터 및 검색: 지역, 가격, 부동산 유형, 방 개수, 면적 필터링에 활용할 수 있습니다.
- 미디어 갤러리: 프로젝트 사진, 테마별 갤러리, 평면도 이미지를 인터페이스에 표시할 수 있습니다.
2. 일반 XML 구조
<realty-feed>
<generation-date>2026-06-17T12:06:39+04:00</generation-date>
<offers>...</offers>
<offers>...</offers>
</realty-feed>
- realty-feed: 객체. 루트 피드 블록.
- generation-date: 날짜/시간. XML 생성 일시. 데이터 최신성 확인에 사용합니다.
- offers: 객체[]. 프로젝트 또는 단지 목록. 각 offers 블록에는 프로젝트 데이터와 해당 평면도가 포함됩니다.
2.1 피드 접근 및 다운로드 제한
피드는 개인 웹 링크를 통해 고객에게 제공됩니다. 이 링크는 고객 전용이며 수신 시스템이 XML을 자동 다운로드하는 데 사용됩니다.
개인 링크는 Alnair 계정의 관리자에게 제공됩니다. 관리자는 이 링크를 고객의 기술팀에 전달하여 가져오기 설정을 진행할 수 있습니다.
- 접근 방식: 개인 웹 링크. 고객 전용 XML 피드 URL입니다.
- 링크 확인 위치: Alnair 계정. 링크는 고객 관리자에게 제공됩니다.
- 피드 업데이트 빈도: 4시간마다. XML 데이터는 Alnair 측에서 4시간마다 한 번씩 업데이트됩니다.
- 최소 다운로드 간격: 1시간에 1회 이하. 수신 시스템은 1시간에 한 번보다 더 자주 피드에 접근해서는 안 됩니다.
- 한도 초과 시: 접근 차단. 요청이 너무 잦으면 피드 접근이 일시적으로 차단될 수 있습니다.
권장 연동 방식: cron 또는 scheduler로 예약 다운로드를 설정하고, 마지막으로 받은 XML을 저장하며, 웹사이트 페이지 로드마다 피드를 요청하지 마십시오. 최적의 방식은 새 데이터가 약 4시간마다 나타난다는 점을 고려해 1시간에 1회 이하로 다운로드하는 것입니다.
3. 프로젝트: <offers>
offers는 피드의 핵심 엔티티입니다. 프로젝트 설명, 개발사, 위치, 공사 및 분양 상태, 가격, 미디어, 편의시설, 결제 플랜, EOI, 마케팅 프로모션, 대표 평면도를 포함합니다.
<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: 정수. Alnair 내 고유 프로젝트 ID. upsert용 외부 프로젝트 ID로 사용합니다.
- type: enum. 상위 엔티티 유형: project 또는 compound. 원본 값을 저장하고 최상위 프로젝트로 가져옵니다.
- logo: url. 프로젝트 로고. 브랜딩에 표시하고 커버로는 사용하지 않습니다.
- photo: url. 프로젝트 대표 이미지 / 커버. 커버 이미지와 히어로 이미지로 사용합니다.
- title: localized object. en/ru/ar 프로젝트명. 인터페이스 언어에 따라 표시합니다.
- description: localized HTML. en/ru/ar 프로젝트 설명. 안전하게 렌더링하며 HTML은 CDATA 안에 있습니다.
- price_on_request: 0/1. 가격 숨김 플래그. 1이면 “문의 시 가격 안내”로 표시합니다.
- status: object. 공사 상태. sales_status와 혼동하지 마십시오.
- construction_start_at: 날짜/시간. 공사 시작일. 값이 있으면 표시합니다.
- construction_progress: decimal. 공사 진행률. 백분율로 표시합니다.
- planned_completion_at: 날짜/시간. 예정 준공일. 인도일로 사용합니다.
- predicted_completion_at: 날짜/시간. 예상 준공일. 업데이트된 준공일로 사용할 수 있습니다.
- amenities: object. 프로젝트 편의시설 및 특징. 키 기준으로 매핑합니다.
- developer: object. 프로젝트 개발사. 이름과 로고를 저장합니다.
- city / address: string. 프로젝트 도시와 주소. 위치 데이터에 사용합니다.
- latitude / longitude: decimal. 좌표. 지도에 사용합니다.
- districts: object. 프로젝트 지역. 필터와 프로젝트 카드에 사용합니다.
- album: object. 메인 비분류 프로젝트 갤러리. 일반 갤러리로 표시합니다.
- albums: object. 테마별 프로젝트 갤러리. 제목별로 그룹화합니다.
- for_sale_count: integer. 프로젝트 내 공급 가능 유닛 수. 가용성으로 표시할 수 있습니다.
- price: object. 프로젝트 전체 가격 범위. price_on_request=1이면 숨깁니다.
- br_prices: object[]. 침실 수 또는 카테고리별 가격. 필터와 목록에 사용합니다.
- updated_at: 날짜/시간. 프로젝트 업데이트 일시. 동기화에 사용합니다.
- is_sold_out: 0/1. 완료 매각 플래그. sales_status와 함께 사용합니다.
- payment_plans: object[]. 개발사의 결제 옵션. 결제 옵션으로 표시합니다.
- sales_status: localized object. 프로젝트 분양 상태. 판매 단계 정의에 사용됩니다.
- stocks: object. 개발사의 마케팅 캠페인 및 홍보 메시지. 프로모션 블록으로 표시합니다.
- eoi: object. Expression of Interest. Presale (EOI)일 때만 표시합니다.
- service_charge: object. 관리비. 값이 있으면 표시합니다.
- assignment: decimal. 양도 조건. 비어 있으면 미지정입니다.
- is_limited_publication: 0/1. 게시 제한. 1이면 허가 없이 공개 게시하지 않습니다.
- layouts: object[]. 프로젝트의 대표 평면도. 프로젝트의 하위 엔티티로 가져옵니다.
4. 지역화 필드
지역화 필드는 구조가 동일하며, 태그 안에 영어, 러시아어, 아랍어 값이 전달됩니다.
<title>
<en>Project Name</en>
<ru>Название проекта</ru>
<ar>اسم المشروع</ar>
</title>
- en: 영어 값. 권장 기본값입니다.
- ru: 러시아어 값.
- ar: 아랍어 값.
대체 규칙:
- 인터페이스 언어 값이 있으면 해당 값을 사용합니다.
- 필요한 언어 값이 비어 있으면 en을 사용합니다.
- en이 비어 있으면 ru를 사용합니다.
- ru가 비어 있으면 ar를 사용합니다.
- 모든 값이 비어 있으면 필드를 표시하지 않습니다.
5. 상태
5.1 공사 상태: <status>
공사 상태는 프로젝트의 물리적 진행 상태를 보여줍니다. 분양 가능 여부를 의미하지는 않습니다.
<status>
<key>development_stage_progress</key>
<en>In Progress</en>
<ru>Строится</ru>
<ar>قيد الإنشاء</ar>
</status>
- Scheduled: 프로젝트가 계획 단계입니다.
- In Progress: 공사가 진행 중입니다.
- Ready: 프로젝트가 완료되었습니다.
- Stopped: 공사가 중단되었습니다.
5.2 분양 상태: <sales_status>
분양 상태는 프로젝트의 상업적 단계, 즉 발표, 사전 분양, 런칭, 분양 중, 또는 완판 여부를 보여줍니다.
- Preliminary Info: 초기 프로젝트 정보입니다.
- Announcement: 프로젝트가 발표되었습니다.
- Presale (EOI): EOI 접수 진행 중입니다.
- Launch: 분양이 시작되었습니다.
- On Sale: 구매 가능한 상태입니다.
- Sold Out: 완판되었습니다.
- Pending: 상태 업데이트를 기다리는 중입니다.
6. 개발사 및 위치
이 블록은 개발사 브랜드와 프로젝트의 지리적 위치를 표시하는 데 필요합니다.
<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: localized object. 개발사명.
- developer.logo: url. 개발사 로고.
- city: string. 도시.
- address: string. 주소.
- latitude / longitude: decimal. 지도용 좌표.
- districts.district: string[]. 프로젝트 지역.
7. 가격
7.1 프로젝트 가격: <price>
프로젝트 수준의 가격은 해당 프로젝트 내 공급 가능한 매물의 일반적인 가격 범위를 보여줍니다.
<price>
<min>815462</min>
<max>2089780</max>
<min_usd>222009</min_usd>
<max_usd>568942</max_usd>
<currency>AED</currency>
</price>
- min: decimal. 최소 가격.
- max: decimal. 최대 가격.
- min_usd: decimal. USD 기준 최소 가격.
- max_usd: decimal. USD 기준 최대 가격.
- currency: enum. 기본 통화, 일반적으로 AED입니다.
price_on_request = 1이면 price가 채워져 있어도 정확한 가격은 공개 표시되지 않습니다.
7.2 카테고리별 가격: <br_prices>
br_prices는 침실 수 또는 부동산 유형별로 가격과 면적을 그룹화합니다. 이는 필터와 간단한 프로젝트 카드에 유용합니다.
<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: 스튜디오.
- 1-6: 침실 수.
- villa: 빌라.
- townhouse: 타운하우스.
- n: 해당 없음 / 비주거 카테고리 / 기타.
8. 미디어
피드의 미디어는 여러 유형으로 나뉩니다. 하나의 이미지를 무분별하게 하나의 갤러리로 합치지 마십시오. 각 이미지의 용도를 고려해야 합니다. 한 이미지는 프로젝트 커버, 다른 이미지는 로고, 또 다른 이미지는 프로모션 이미지나 평면도일 수 있습니다.
- logo: offers.logo. 프로젝트 로고. 프로젝트 브랜딩에 표시하고 커버로는 사용하지 않습니다.
- photo: offers.photo. 프로젝트 대표 이미지 / 커버. 카드의 커버 이미지와 프로젝트 페이지의 히어로 이미지로 사용합니다.
- album.image: offers.album.image. 메인 비분류 프로젝트 갤러리. 일반 프로젝트 갤러리에 표시합니다.
- albums.album.images.image: offers.albums.album.images.image. 테마별 프로젝트 갤러리. albums.album.title 기준으로 그룹화합니다.
- developer.logo: offers.developer.logo. 개발사 로고. 개발사 블록에 표시합니다.
- stocks.stock.logo: offers.stocks.stock.logo. 마케팅 캠페인 이미지. 프로모션 블록 안에 표시합니다.
- layouts.album.image: offers.layouts.album.image. 특정 대표 평면도의 갤러리. 평면도 수준에서 표시합니다.
- levels_photos.level_photo.image: offers.layouts.levels_photos.level_photo.image. 층별 평면도 이미지. 평면도로 사용합니다.
<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: 프로젝트 소개 이미지.
- Construction progress: 공사 진행 사진.
- Finishing examples: 마감 예시.
- Infrastructure: 프로젝트 인프라.
- View: 조망 및 주변 환경.
모든 프로젝트에 모든 카테고리가 반드시 있어야 하는 것은 아닙니다. 카테고리 제목이 비어 있으면 이미지를 비분류로 가져오거나 일반 갤러리에 배치할 수 있습니다.
현재 구조에는 별도의 history/story XML 태그가 없습니다. 뉴스, 프로모션 메시지, 프로젝트 마케팅 자료는 stocks를 통해 전달됩니다. 공사 이력은 albums에 해당 카테고리가 있을 경우 Construction progress 카테고리를 사용할 수 있습니다.
9. 편의시설
amenities는 프로젝트의 편의시설과 특징을 설명합니다. 연동 시에는 key를 사용하는 것이 좋으며, 표시에는 지역화된 값을 사용해야 합니다.
<amenities>
<amenity>
<key>project_facilities_gym</key>
<en>Gym</en>
<ru>Тренажёрный зал</ru>
<ar>صالة رياضية</ar>
</amenity>
</amenities>
- amenities: object. 편의시설 컨테이너.
- amenity: object. 하나의 편의시설.
- key: enum. 기술 키.
- en / ru / ar: string. 세 언어의 편의시설명.
projecet_hotel_license 키에는 오타가 있지만, Hotel License로 매핑해야 합니다. 별칭을 지원하여 가져오기가 중단되지 않도록 하는 것이 좋습니다.
10. 마케팅 프로모션: <stocks>
stocks는 개발사의 마케팅 캠페인, 뉴스, 프로모션 메시지입니다. 특별 가격, 할인, 런칭 조건, EOI 공지, 한시적 결제 혜택, 광고 자료 등이 포함될 수 있습니다. 이 블록은 재고 수량을 의미하지 않으며 유닛 가용성을 정의하지 않습니다.
<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: object. 마케팅 메시지 컨테이너.
- stock: object. 하나의 캠페인, 뉴스 항목, 또는 프로모션 공지입니다.
- title: localized object. 프로모션 제목.
- description: localized HTML. 프로모션 설명.
- start_at: 날짜/시간. 시작일.
- end_at: 날짜/시간. 종료일; 비어 있을 수 있습니다.
- logo: url. 프로모션 이미지.
부동산 가용성은 stocks가 아니라 for_sale_count, layouts.sale_units_count, sales_status를 사용해 표시하십시오.
11. EOI
EOI는 Expression of Interest를 의미합니다. 이 블록은 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/empty. 0 = 환불 불가, 1 = 환불 가능, empty = 미지정.
- eoi_items: object. EOI 조건 컨테이너.
- eoi_item: object. 하나의 EOI 조건입니다.
- price: decimal. 고정 EOI 금액.
- percent: decimal. 사용하는 경우 EOI 비율.
- description: localized object. 조건 설명.
- sales_status.en = Presale (EOI)이고 eoi_items가 채워진 경우: EOI를 표시합니다.
- 그 외 sales_status: EOI를 숨깁니다.
12. 관리비 및 양도
<service_charge>
<value>172.22</value>
<unit>sq. m</unit>
<currency>AED</currency>
</service_charge>
<assignment>40.00</assignment>
- service_charge.value: 관리비 금액. 비어 있으면 블록을 표시하지 않습니다.
- service_charge.unit: 계산 단위, 일반적으로 sq. m. 비어 있을 수 있습니다.
- service_charge.currency: 통화, 일반적으로 AED. 비어 있을 수 있습니다.
- assignment: 양도 가능한 비율. 비어 있으면 정보 미지정이며, 제한이 아닙니다.
13. 결제 플랜: <payment_plans>
payment_plans는 개발사의 부동산 결제 옵션을 설명합니다. 한 프로젝트에는 여러 개의 결제 플랜이 있을 수 있습니다. 각 플랜은 예약, 공사, 인도, 인도 후 단계로 나뉩니다. 수수료와 추가 비용은 별도로 전달되므로 총 비율이 100%를 초과할 수 있습니다. 예를 들어 104%는 부동산 가격의 100% + DLD 수수료 4%를 의미할 수 있습니다.
- Basic: id, title, currency. 플랜 식별자, 제목, 통화입니다. title은 enum이 아닌 자유 텍스트입니다.
- Booking: on_booking_percent, on_booking_fix, on_booking_payments_count, on_booking_fees. 예약 단계의 결제 및 수수료입니다.
- Construction: on_construction_percent, on_construction_fix, on_construction_payments_count, on_construction_fees. 공사 중 결제입니다.
- Handover: on_handover_percent, on_handover_fix, on_handover_payments_count, on_handover_fees. 인도 시 결제입니다.
- Post-handover: post_handover_percent, post_handover_fix, on_post_handover_payments_count, on_post_handover_fees. 인도 후 결제입니다.
- ROI: roi_percent, roi_fix, roi_payments_count, roi_fees. ROI 또는 보장수익 스킴용 필드입니다.
- 추가 수수료: additional, additional_percent, additional_fix, additional_fix_m2. DLD Fee 등 추가 비용입니다.
- 기간: period_after_handover, period_after_roi. 반복 결제 주기입니다.
- 총계: price_total, fees_included_total. 플랜 총액 및 포함 수수료입니다.
14. 평면도: <layouts>
layouts는 프로젝트 내 대표 평면도를 설명합니다. 특정 아파트나 오피스가 아니라 집계된 유닛 유형입니다.
- id: 정수. 고유 평면도 ID. 외부 평면도 ID로 사용합니다.
- title: localized object. 평면도명. 인터페이스 언어에 따라 표시합니다.
- project_id: 정수. 상위 프로젝트 ID. offers.complex-id와 연결합니다.
- building_name: localized object. 건물명. 비어 있으면 표시하지 않습니다.
- price_on_request: 0/1. 가격 숨김 플래그. 1이면 가격을 표시하지 않습니다.
- area_min / area_max: object. 면적 범위. m2 및 ft2.
- area_balcony_min / area_balcony_max: object. 발코니 면적 범위. 비어 있을 수 있습니다.
- type: localized object. 부동산 유형. Unit type 참조를 보십시오.
- sale_units_count: integer. 해당 유형의 공급 가능 유닛 수. 부지 목록이 아닙니다.
- album: object. 평면도 갤러리. 평면도 수준에서 표시합니다.
- levels_photos: object. 층별 이미지. 평면도로 사용합니다.
- floors_count: integer. 층 수. 1, 2, 3 등.
- rooms_count: localized object. 방 개수. Rooms count 참조를 보십시오.
- price: object. 평면도 가격 범위. price_on_request=1이면 숨깁니다.
- is_limited_publication: 0/1. 게시 제한. 1이면 공개적으로 숨깁니다.
15. enum 값 참조
- 프로젝트 유형: project, compound.
- 분양 상태: Preliminary Info, Announcement, Presale (EOI), Launch, On Sale, Sold Out, Pending.
- 공사 상태: Scheduled, Ready, Stopped, In Progress.
- 유닛 유형: Apartment, Villa, Townhouse, Duplex, Triplex, Penthouse, Retail, Office, Suite.
- 방 개수: 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.
- 갤러리 카테고리: Project presentation, Construction progress, Finishing examples, Infrastructure, View.
- 통화: AED.
- 관리비 단위: sq. m.
- 불리언 플래그: 0, 1; 일부 필드는 empty도 허용됩니다.
피드에 참조 목록에 없는 값이 포함되어 있어도 가져오기는 실패하면 안 됩니다. 해당 값은 원본 값으로 저장하고, unknown으로 매핑하며, 검토를 위해 로그에 기록해야 합니다.
16. 빈 값
빈 값은 0이 아니라 “미지정”을 의미합니다. 빈 태그는 <field/> 또는 <field></field>처럼 보일 수 있습니다.
- assignment: 양도 조건이 미지정입니다.
- service_charge.value: 관리비가 미지정입니다.
- eoi.is_eoi_return: EOI 환불 가능 여부가 미지정입니다.
- area_balcony_min.m2: 발코니 면적이 미지정입니다.
- description.en: 설명이 없습니다.
17. 표시 규칙
- 가격 숨김: price_on_request = 1. “문의 시 가격 안내”를 표시합니다.
- 가격 표시: price_on_request = 0. 최소/최대 가격을 표시합니다.
- EOI: sales_status.en = Presale (EOI)이고 EOI가 채워진 경우. EOI를 표시합니다.
- EOI 해당 없음: sales_status.en != Presale (EOI). EOI를 숨깁니다.
- 완판: is_sold_out = 1 또는 sales_status.en = Sold Out. “완판”을 표시하거나 목록에서 숨깁니다.
- 게시 제한: is_limited_publication = 1. 공개 게시하지 않습니다.
- assignment 비어 있음: assignment가 비어 있으면. assignment 블록을 표시하지 않습니다.
- 관리비 비어 있음: service_charge.value가 비어 있으면. 관리비를 표시하지 않습니다.
18. 가져오기 규칙
- 프로젝트: complex-id로 검색합니다. 있으면 업데이트하고, 없으면 생성합니다.
- 평면도: layouts.id로 검색합니다. project_id로 프로젝트와 연결합니다.
- 삭제: 새 피드에서 객체가 사라지면 즉시 삭제하지 말고 비활성으로 표시합니다.
- 알 수 없는 enum: 원본 값을 저장하고 unknown으로 매핑한 뒤 로그를 남깁니다.
- 빈 값: 필드별 명시 규칙이 없는 한 0으로 변환하지 않습니다.
19. 권장 데이터 구조
프로젝트 필드 → 소스
- 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.
평면도 필드 → 소스
- 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.