PHPackages                             domos/schema - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. domos/schema

ActiveLibrary

domos/schema
============

Not ready for public use. domos/schema is the reference implementation of the domos real estate data schema written in PHP.

1.3.0(7mo ago)0917proprietaryPHPPHP &gt;=8.1

Since Oct 26Pushed 7mo ago2 watchersCompare

[ Source](https://github.com/domos-technologies/schema)[ Packagist](https://packagist.org/packages/domos/schema)[ RSS](/packages/domos-schema/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (10)Dependencies (2)Versions (17)Used By (0)

 [![logo](./docs/assets/domos.svg)](./docs/assets/domos.svg)
 domos/schema
============================================================================

[](#domosschema)

###### © 2024 domos GmbH

[](#-2024-domos-gmbh)

Warning

Not ready for public use yet. API surface is subject to change.

`domos/schema` is the reference implementation of the domos real estate data schema written in PHP.

```
composer install domos/schema
```

Schema Documentation
====================

[](#schema-documentation)

Table of Contents
-----------------

[](#table-of-contents)

1. [Introduction](#introduction)
2. [Core Models](#core-models)
    - [Estate](#estate)
    - [Building](#building)
    - [Rentable](#rentable)
3. [Location Models](#location-models)
    - [Address](#address)
    - [Coordinates](#coordinates)
    - [Location](#location)
4. [Media Models](#media-models)
    - [Image](#image)
    - [Media](#media)
    - [Video](#video)
    - [Scan](#scan)
    - [CameraFeed](#camerafeed)
5. [Financial Models](#financial-models)
    - [Money](#money)
    - [Price](#price)
    - [Availability](#availability)
6. [Web Expose Models](#web-expose-models)
    - [WebExpose](#webexpose)
    - [Block](#block)
7. [Utility Models](#utility-models)
    - [Contact](#contact)
    - [Certifications](#certifications)

Introduction
------------

[](#introduction)

This document provides a comprehensive overview of the real estate data schema implemented in PHP. The schema is designed to represent various aspects of real estate properties, including buildings, rentable spaces, locations, media assets, and web exposures. It uses modern PHP features such as typed properties, enums, and interfaces to create a robust and flexible system for managing real estate data.

Core Models
-----------

[](#core-models)

### Estate

[](#estate)

The `Estate` class is the central model representing a real estate property.

PropertyTypeDescriptionidstringUnique identifierslugstringURL-friendly identifiernamestringName of the estateaddress[Address](#address)Physical address of the estatefeaturesarrayList of features and amenitiesbuildingsarrayList of [Building](#building) objects within the estatetexts[Texts](#texts)Descriptive content about the estatemedia[Media](#media)Images, videos, and 3D scans related to the estatelocation[Location](#location)Geographical location and nearby placescertifications[Certifications](#certifications)Environmental and quality certificationssocial[Social](#social)Social media and contact informationexpose?[WebExpose](#webexpose)Web-based property exposure dataUsage:

```
$estate = new Estate(
    id: '123',
    slug: 'sample-estate',
    name: 'Sample Estate',
    address: new Address(
        street: 'Main St',
        number: '123',
        postal_code: '12345',
        city: 'Sample City',
        country: 'US'
    )
);
$arrayRepresentation = $estate->toArray();
```

### Building

[](#building)

The `Building` class represents a specific building within an estate.

PropertyTypeDescriptionidstringUnique identifiername?stringName of the buildingaddress?[Address](#address)Physical address of the buildingarea?floatTotal area of the building in square metersmedia[Media](#media)Images, videos, and 3D scans related to the buildingfeaturesarrayList of features and amenities specific to the buildingrentablesarrayList of [Rentable](#rentable) spaces within the buildingUsage:

```
$building = new Building(
    id: 'B1',
    name: 'Building 1',
    area: 1000.0,
    media: new Media()
);
$arrayRepresentation = $building->toArray();
```

### Rentable

[](#rentable)

The `Rentable` class represents a space that can be rented or sold within a building.

PropertyTypeDescriptionidstringUnique identifiername?stringName of the rentable spacearea?floatArea of the space in square metersdescription?stringDetailed description of the spacetransaction\_type[TransactionType](#transactiontype)Type of transaction (Rent or Sale)price?[Price](#price)Pricing information for the spaceprice\_per\_m2?[Price](#price)Pricing information per m2 for the spacespacesarrayList of [Space](#space) objects within the rentable areafeaturesarrayList of features and amenities specific to the rentable spacemedia[Rentable\\Media](#rentablemedia)Images, videos, and 3D scans related to the rentable spaceavailability?[Availability](#availability)Availability status of the rentable spaceUsage:

```
$rentable = new Rentable(
    id: 'R1',
    name: 'Office Space 1',
    area: 100.0,
    transaction_type: TransactionType::Rent,
    price: new Price(
        base: new Money(1000.0, Currency::Euro)
    )
);
$arrayRepresentation = $rentable->toArray();
```

Location Models
---------------

[](#location-models)

### Address

[](#address)

The `Address` class represents a physical address.

PropertyTypeDescriptionstreetstringStreet namenumber?stringStreet numberpostal\_code?stringPostal codecity?stringCity namecountry?stringCountry codecoordinates?[Coordinates](#coordinates)Geographical coordinates of the addresslabel?stringCustom label for the addressUsage:

```
$address = new Address(
    street: 'Main St',
    number: '123',
    postal_code: '12345',
    city: 'Sample City',
    country: 'US'
);
$arrayRepresentation = $address->toArray();
```

### Coordinates

[](#coordinates)

The `Coordinates` class represents geographic coordinates.

PropertyTypeDescriptionlatitudefloatLatitude valuelongitudefloatLongitude valueUsage:

```
$coordinates = new Coordinates(
    latitude: 40.7128,
    longitude: -74.0060
);
$arrayRepresentation = $coordinates->toArray();
```

### Location

[](#location)

The `Location` class represents the location of an estate, including nearby places.

PropertyTypeDescriptionplacesarrayList of nearby [Place](#place) objectsUsage:

```
$location = new Location();
$location->places[] = new Place(
    type: Place\Type::from('restaurant'),
    name: 'Sample Restaurant',
    coordinates: new Coordinates(40.7128, -74.0060)
);
$arrayRepresentation = $location->toArray();
```

Media Models
------------

[](#media-models)

### Image

[](#image)

The `Image` class represents an image asset.

PropertyTypeDescriptionsrcstringSource URL of the imagealt?stringAlternative text for accessibilityUsage:

```
$image = new Image();
$image->src = 'https://example.com/image.jpg';
$image->alt = 'Sample Image';
$arrayRepresentation = $image->toArray();
```

### Media

[](#media)

The `Media` class represents a collection of media assets for an estate.

PropertyTypeDescriptionthumbnail?[Image](#image)Thumbnail image for the estategalleryarrayCollection of [Image](#image) objectslogo?[Image](#image)Logo image for the estatevideosarrayCollection of [Video](#video) objectsscansarrayCollection of [Scan](#scan) objectsUsage:

```
$media = new Media();
$media->thumbnail = new Image();
$media->thumbnail->src = 'https://example.com/thumbnail.jpg';
$arrayRepresentation = $media->toArray();
```

### Video

[](#video)

The `Video` class represents a video asset.

PropertyTypeDescriptionid?stringUnique identifier for the videotype[Video\\Type](#videotype)Type of video (e.g., Embed, Direct)thumbnail\_url?stringURL of the video thumbnail imageUsage:

```
$video = new Video(
    type: Video\Type::Embed,
    thumbnail_url: 'https://example.com/video_thumbnail.jpg'
);
$arrayRepresentation = $video->toArray();
```

### Scan

[](#scan)

The `Scan` class represents a 3D scan or virtual tour.

PropertyTypeDescriptionid?stringUnique identifier for the scantype[Scan\\Type](#scantype)Type of scan (e.g., Embed)provider?stringName of the scan providerUsage:

```
$scan = new Scan(
    type: Scan\Type::Embed,
    provider: 'Matterport'
);
$arrayRepresentation = $scan->toArray();
```

### CameraFeed

[](#camerafeed)

The `CameraFeed` class represents a live camera feed.

PropertyTypeDescriptionid?stringUnique identifier for the camera feedtype[CameraFeed\\Type](#camerafeedtype)Type of camera feed (e.g., Embed)provider?stringName of the camera feed providerUsage:

```
$cameraFeed = new CameraFeed(
    type: CameraFeed\Type::Embed,
    provider: 'Sample Provider'
);
$arrayRepresentation = $cameraFeed->toArray();
```

Financial Models
----------------

[](#financial-models)

### Money

[](#money)

The `Money` class represents a monetary value.

PropertyTypeDescriptionamountfloatNumeric amountcurrency[Currency](#currency)Currency of the amountUsage:

```
$money = new Money(
    amount: 1000.0,
    currency: Currency::Euro
);
$arrayRepresentation = $money->toArray();
```

### Price

[](#price)

The `Price` class represents the price of a rentable space.

PropertyTypeDescriptionbase[Money](#money)Base priceextra\_costs?[Money](#money)Additional costsUsage:

```
$price = new Price(
    base: new Money(1000.0, Currency::Euro),
    extra_costs: new Money(100.0, Currency::Euro)
);
$arrayRepresentation = $price->toArray();
```

### Availability

[](#availability)

The `Availability` class represents the availability status of a rentable space.

PropertyTypeDescriptionstatus[Status](#availability)Availability status (Available, AvailableSoon, Unavailable, UnavailableSoon)textstringText description of the availabilitydate?DateTimeInterfaceDate when the space will be availableafterTenantConstructionboolIndicates if the space is available after tenant constructionUsage:

```
$availability = new Availability(
    status: Status::Available,
    text: 'Available immediately',
    date: new DateTimeImmutable('2023-01-01'),
    afterTenantConstruction: false
);
$arrayRepresentation = $availability->toArray();
```

Web Expose Models
-----------------

[](#web-expose-models)

### WebExpose

[](#webexpose)

The `WebExpose` class represents the structure for web-based property exposure.

PropertyTypeDescriptionsidebar\_featuresarrayFeatures to display in the sidebarpool\_featuresarrayFeatures to display in the pool sectionblocksarrayList of content [Block](#block) objectsUsage:

```
$webExpose = new WebExpose();
$webExpose->sidebar_features = ['feature1', 'feature2'];
$webExpose->blocks[] = new TextBlock('Sample text content');
$arrayRepresentation = $webExpose->toArray();
```

### Block

[](#block)

The `Block` class is an abstract base class for various types of content blocks in the web expose.

PropertyTypeDescriptionid?stringUnique identifier for the blocktype[BlockType](#blocktype)Type of the content blockUsage (example with TextBlock):

```
$block = new TextBlock(
    text: 'Sample text content',
    id: 'block1'
);
$arrayRepresentation = $block->toArray();
```

Utility Models
--------------

[](#utility-models)

### Contact

[](#contact)

The `Contact` class represents contact information.

PropertyTypeDescriptionnamestringName of the contactrole?stringRole or position of the contactemail?stringEmail addressphone?stringPhone numbermobile?stringMobile numberavatar?[Image](#image)Avatar image of the contactaddress?[Address](#address)Physical address of the contactUsage:

```
$contact = new Contact(
    name: 'John Doe',
    email: 'john@example.com',
    phone: '+1234567890'
);
$arrayRepresentation = $contact->toArray();
```

### Certifications

[](#certifications)

The `Certifications` class represents various certifications for an estate.

PropertyTypeDescriptiondgnb?[DGNBCertification](#dgnbcertification)DGNB (German Sustainable Building Council) certification levelco2\_neutral?boolIndicates if the estate is CO2 neutralUsage:

```
$certifications = new Certifications();
$certifications->dgnb = DGNBCertification::Gold;
$certifications->co2_neutral = true;
$arrayRepresentation = $certifications->toArray();
```

###  Health Score

40

—

FairBetter than 88% of packages

Maintenance64

Regular maintenance activity

Popularity16

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity60

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~48 days

Recently: every ~9 days

Total

16

Last Release

217d ago

Major Versions

0.1.1 → 1.0.02025-09-01

PHP version history (3 changes)0.0.1PHP &gt;=7.1

0.0.7PHP &gt;=8.0

1.0.0PHP &gt;=8.1

### Community

Maintainers

![](https://www.gravatar.com/avatar/d2bf76147df0106a5165f36918590fba4291d23e4ef77026ccc1e429af98ec4d?d=identicon)[domos](/maintainers/domos)

---

Top Contributors

[![Capevace](https://avatars.githubusercontent.com/u/10093858?v=4)](https://github.com/Capevace "Capevace (46 commits)")

###  Code Quality

TestsPest

### Embed Badge

![Health badge](/badges/domos-schema/health.svg)

```
[![Health](https://phpackages.com/badges/domos-schema/health.svg)](https://phpackages.com/packages/domos-schema)
```

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
