Modèle de données

Référence complète du schéma de données TS-Immo — toutes les entités, types et énumérations.

Le modèle de données TS-Immo est conçu pour couvrir les besoins des marchés immobiliers francophones, anglophones et européens. Toutes les entités sont identifiées par des UUID v4 et les dates sont au format ISO 8601.

Property

L'entité centrale de la plateforme. Représente un bien immobilier avec toutes ses caractéristiques.

ChampTypeRequisDescription
idstring (UUID)Identifiant unique UUID v4
titlestringTitre de l'annonce
descriptionstringDescription longue du bien
typePropertyTypeType de transaction (sale, rent…)
statusPropertyStatusStatut de publication
pricenumberPrix en unités de la devise
currencystring (ISO 4217)Code devise ISO 4217 (EUR, CAD, CHF…)
surfacenumber (m²)Surface habitable en m²
bedroomsnumberNombre de chambres
bathroomsnumberNombre de salles de bain
addressAddressAdresse structurée
mediaMediaItem[]Photos, vidéos et documents
featuresstring[]Équipements et caractéristiques (balcon, parking…)
agentAgentAgent immobilier responsable
createdAtISO 8601 dateDate de création
updatedAtISO 8601 dateDate de dernière modification
// Exemple Property complet
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "title": "Appartement lumineux 3 pièces - Paris 11e",
  "description": "Bel appartement rénové avec vue sur cour calme...",
  "type": "sale",
  "status": "active",
  "price": 385000,
  "currency": "EUR",
  "surface": 72.5,
  "bedrooms": 2,
  "bathrooms": 1,
  "address": {
    "street": "12 rue de la Roquette",
    "city": "Paris",
    "postalCode": "75011",
    "country": "FR",
    "lat": 48.8566,
    "lng": 2.3790
  },
  "media": [
    {
      "id": "media-001",
      "url": "https://cdn.ts-immo.org/props/photo1.jpg",
      "type": "image",
      "isPrimary": true,
      "order": 1
    }
  ],
  "features": ["balcony", "parking", "elevator", "cellar"],
  "agent": {
    "id": "agent-42",
    "name": "Marie Dupont",
    "email": "m.dupont@agence.fr",
    "phone": "+33 6 12 34 56 78"
  },
  "createdAt": "2024-01-15T10:30:00Z",
  "updatedAt": "2024-03-07T14:00:00Z"
}

PropertyType

Énumération des types de transaction / catégorie de bien :

type PropertyType =
  | 'sale'        // Vente
  | 'rent'        // Location
  | 'seasonal'    // Location saisonnière
  | 'commercial'  // Commercial
  | 'land'        // Terrain
  | 'parking';    // Parking / Garage

PropertyStatus

type PropertyStatus =
  | 'active'      // En ligne, disponible
  | 'pending'     // En attente de validation
  | 'sold'        // Vendu
  | 'rented'      // Loué
  | 'withdrawn'   // Retiré du marché
  | 'draft';      // Brouillon

Address

ChampTypeRequisDescription
streetstringNuméro et nom de rue
citystringVille
postalCodestringCode postal
statestringRégion / département
countrystring (ISO 3166)Code pays ISO 3166-1 alpha-2
latnumberLatitude GPS
lngnumberLongitude GPS

MediaItem

ChampTypeRequisDescription
idstringIdentifiant du média
urlstring (URL)URL publique du fichier
type'image' | 'video' | 'doc'image | video | doc
isPrimarybooleanPhoto principale de l'annonce
ordernumberOrdre d'affichage
altstringTexte alternatif (accessibilité)

Agent

ChampTypeRequisDescription
idstringIdentifiant de l'agent
namestringNom complet
emailstringAdresse email
phonestringNuméro de téléphone
agencystringNom de l'agence
avatarstring (URL)URL de la photo de profil

PaginatedResponse<T>

Toutes les listes retournent un objet paginé avec les métadonnées de navigation :

{
  "data": Property[],
  "meta": {
    "total": 248,
    "page": 1,
    "perPage": 20,
    "totalPages": 13,
    "hasNextPage": true,
    "hasPrevPage": false
  }
}