zentraproperty feedv1.0.0-rc.3

lifecycle · identity

Stable identity. Explicit outcomes.

Listing identity, display references, controlled indexes and internal property IDs solve different problems and must never be conflated.

Four identity contracts

provider_id + listing_id

Upsert and withdrawal key

The only external identity. It is stable, provider-scoped, unique in each feed and never reused for another home.

reference

Display reference

An agency-facing label that may change and is not required to be globally unique.

controlled IDs

Canonical catalogue keys

Real zentra database IDs for location, currency, property type and feature values. Labels are diagnostic.

properties.id

Internal ID

Assigned after import. Providers must not send it and importers must not infer it.

Complete-feed lifecycle

  1. Fetch

    Download with bounded timeout, size and TLS policy. Persist a non-secret fingerprint.

  2. Validate

    Reject malformed, schema-invalid or hierarchy-invalid data before any persistence.

  3. Upsert

    Resolve by provider/feed + `listing_id`; changed `updated_at` and content update the canonical DTO.

  4. Reconcile

    Missing IDs become withdrawal candidates. Guardrails stop unexpected mass deletion.

  5. Publish

    Only the successfully validated snapshot becomes active; image jobs remain idempotent.

Status semantics

StatusVisible?Importer action
available / reserved / under_offeryes when `visible=true`upsert and publish intent
sold / rentedpolicy-drivenretain outcome; stop active marketing
withdrawnnoarchive immediately under provider policy
draftnoretain for diagnostics; never publish