Skip to content

Project Model - Complete Field Reference

This page provides complete documentation of all properties within the Project model.

Note: Project is a master entity representing a new construction project. Individual units reference this project via ProjectId in the Estate model.

Note: For project-specific classes like Phase and Building, see the Project Classes documentation. For shared classes like Address, Image, and DescriptionSection, see the Shared Classes documentation.

Project Class

The main class representing a real estate development project.

Core Identification & System

Property Type Description Example
Id string Unique identifier for the project. "PROJ-2024-001"
Name string Name of the project. "Tribunen"
Origin string? The source system this project data came from. "Vitec"
LastModifiedOrigin DateTime? When this project data was last updated in the origin system. 2025-10-28T14:39:00Z
LastModifiedLocal DateTime? When this project data was last updated locally in Destinet. 2025-10-28T15:30:00Z
CustomData Dictionary<string, object>? System-specific metadata. { "VitecProjectNo": "P1001" }

Project Details

Property Type Description Example
Description string? Description of the overall project. Full text description
Developer string? Developer/builder company name. "Veidekke Entreprenør AS"
DeveloperWebsite string? URL to developer/builder company website. https://www.veidekke.no
Website string? URL to the specific project website. https://www.tribunen.no
TotalUnits int? Total number of units (e.g., apartments, houses) in the project. 120

Timeline and Location

Property Type Description Example
ConstructionStarted bool? Whether construction has officially started. true
ConstructionStartDate DateTime? Start date of construction. 2024-05-01
ExpectedCompletionDate DateTime? Expected completion date for the entire project. 2026-06-30
Address Address? Location/address information for the project.
GeoCoordinates GeoCoordinates? Geographic coordinates for the project.

Internal Structure and Content

Property Type Description
Phases List<Phase>? Construction phases in this project.
Buildings List<Building>? Individual buildings within this project.
DescriptionSections List<DescriptionSection>? Descriptive sections (location, amenities, etc.).
Features Dictionary<string, string>? Project features as key-value pairs.
ExternalPlatformUrls ExternalPlatformUrls? URLs for external platforms where this project is listed.
Images ImageCollection? Marketing images and renderings for the overall project.
Documents DocumentCollection? Project documents (brochures, site plans, legal).

Employee/Department References

Property Type Description Example
DepartmentId string? Reference to the department/office handling this project. "3005093"
PrimaryAgentId string? Reference to the primary contact employee. "3006722"
AdditionalAgentIds List<string>? References to additional employees involved. ["3006723"]

Supporting Classes (Shared)

For complete documentation of shared classes, see the Shared Classes section.

These classes are reusable across multiple model types (Estate, Department, Employee, Project, etc.). They are documented in detail in their own pages.


Phase

Represents a defined stage of construction or sales within the project.

Property Type Description Example
Id string Unique identifier for the phase. "FASE-1"
Name string Display name of the phase. "Phase 1, Trinn 1"
PhaseNumber int? Phase number for ordering. 1
Description string Description of the phase.
ExpectedStartDate DateTime? Expected start date for this phase. 2024-03-01
ExpectedCompletionDate DateTime? Expected completion date for this phase. 2025-12-01
Status string Current status of the phase. "Under Construction", "Sold Out"
TotalUnits int? Total number of units in this phase. 40
AvailableUnits int? Number of units still available for sale in this phase. 15
Images List<Image> Phase-specific images.
Documents List<PropertyDocument> Phase-specific documents.

Building

Represents an individual building structure within the larger project area.

Property Type Description Example
Id string Unique identifier for the building. "BYGG-A"
Name string Display name of the building. "Building A, The Tower"
PhaseId string Reference to the phase this building belongs to. "FASE-1"
Description string Description of the building.
Address Address Specific address for this building.
NumberOfFloors int? Number of floors in the building. 15
TotalUnits int? Total number of units in this building. 30
AvailableUnits int? Number of units still available for sale in this building. 5
NumberOfEntrances int? Number of entrances/stairwells. 2
BuildingType string Building type/category. "Apartment Block", "Townhouse"
Status string Current status of the building. "Under Construction", "Ready for Move-in"
ExpectedCompletionDate DateTime? Expected completion date for this building. 2025-12-01
Images List<Image> Building-specific images.
Documents List<PropertyDocument> Building-specific documents.

Complete Usage Example

This example demonstrates how to populate the Project model, including adding a Phase and a Building.

var project = new Project
{
    // Core Identification and Details
    Id = "PROJ-2024-001",
    Name = "The Waterfront Residences",
    Origin = "Vitec",
    LastModifiedOrigin = DateTime.Parse("2025-10-28T14:39:00Z"),
    LastModifiedLocal = DateTime.Parse("2025-10-28T15:30:00Z"),

    // Project Details
    Description = "A modern residential complex with stunning waterfront views...",
    Developer = "Nordic Build Corp",
    DeveloperWebsite = "https://www.nordicbuild.no",
    Website = "https://www.waterfrontresidences.no",
    TotalUnits = 75,

    // Timeline
    ConstructionStarted = true,
    ConstructionStartDate = DateTime.Parse("2024-05-01"),
    ExpectedCompletionDate = DateTime.Parse("2026-06-30"),

    // Location
    Address = new Address
    {
        Street = "Havnepromenaden 10",
        ZipCode = "0252",
        City = "Oslo",
        Municipality = "Oslo",
        County = "Oslo",
        Country = "Norway",
        CountryCode = "NO"
    },

    GeoCoordinates = new GeoCoordinates
    {
        Latitude = 59.9072m,
        Longitude = 10.7567m
    },

    // Content
    Features = new Dictionary<string, string>
    {
        ["Elevator"] = "Yes",
        ["Underground Parking"] = "Yes",
        ["Balcony"] = "Standard in all units",
        ["Storage"] = "Included"
    },

    // External URLs
    ExternalPlatformUrls = new ExternalPlatformUrls
    {
        PrimaryUrl = "https://www.waterfrontresidences.no",
        InterestRegistrationUrl = "https://www.waterfrontresidences.no/register",
        PlatformUrls = new Dictionary<string, string>
        {
            ["Finn.no"] = "https://www.finn.no/project/..."
        }
    },

    // Responsible Department and Employees
    DepartmentId = "3005093",
    PrimaryAgentId = "3006722",
    AdditionalAgentIds = new List<string> { "3006723" },

    // System Metadata
    CustomData = new Dictionary<string, object>
    {
        { "InternalProjectCode", "WF-OSL24" }
    }
};

// 1. Define a Phase
var phaseOne = new Phase
{
    Id = "FASE-1",
    Name = "Phase One: The Tower",
    PhaseNumber = 1,
    Description = "The first phase includes the main tower building...",
    Status = "Under Construction",
    TotalUnits = 45,
    AvailableUnits = 10,
    ExpectedStartDate = DateTime.Parse("2024-03-01"),
    ExpectedCompletionDate = DateTime.Parse("2025-12-01")
};

// Add phase images
phaseOne.Images = new ImageCollection();
phaseOne.Images.Add(new Image
{
    Id = "phase1-render",
    OriginalUrl = "https://cdn.project.com/phase1-render.jpg",
    Filename = "phase1-render.jpg",
    FileExtension = "jpg",
    Caption = "Phase 1 architectural rendering",
    AltText = "3D rendering of the tower building",
    Category = "Rendering",
    Order = 1,
    Width = 1920,
    Height = 1080
});

// 2. Define a Building
var buildingA = new Building
{
    Id = "BYGG-A",
    Name = "The A-Block",
    PhaseId = phaseOne.Id, // Link to Phase
    Description = "Modern apartment block with panoramic views...",
    BuildingType = "Apartment Block",
    Status = "Under Construction",
    TotalUnits = 30,
    AvailableUnits = 5,
    NumberOfFloors = 10,
    NumberOfEntrances = 2,
    ExpectedCompletionDate = DateTime.Parse("2025-12-01"),

    Address = new Address
    {
        Street = "Havnepromenaden 10A",
        ZipCode = "0252",
        City = "Oslo"
    }
};

// Add Documents to the Building
buildingA.Documents = new DocumentCollection();
buildingA.Documents.Add(new PropertyDocument
{
    Id = "doc-a-plan",
    Title = "Building A Floor Plans",
    Url = "https://cdn.project.com/building-a-plans.pdf",
    FileName = "building-a-plans",
    FileExtension = "pdf",
    Type = 1,  // Floor plan type
    IsPublic = true,
    Order = 1
});

// 3. Add the Phase and Building to the Project
project.Phases = new List<Phase> { phaseOne };
project.Buildings = new List<Building> { buildingA };

// Add project-level images
project.Images = new ImageCollection();
project.Images.Add(new Image
{
    Id = "project-aerial",
    OriginalUrl = "https://cdn.project.com/aerial-view.jpg",
    Filename = "aerial-view.jpg",
    FileExtension = "jpg",
    Caption = "Aerial view of the entire project area",
    AltText = "Aerial photograph showing project location",
    Category = "Project Overview",
    Order = 1,
    Width = 2400,
    Height = 1600
});

// Add description sections
project.DescriptionSections = new List<DescriptionSection>();
project.DescriptionSections.Add(new DescriptionSection
{
    GroupName = "LOCATION",
    Title = "Prime Waterfront Location",
    Content = "Located in the heart of Oslo's vibrant waterfront...",
    Order = 1
});

project.DescriptionSections.Add(new DescriptionSection
{
    GroupName = "AMENITIES",
    Title = "Premium Facilities",
    Content = "Residents enjoy access to a state-of-the-art gym...",
    Order = 2
});

Working with Project Data

Example: Finding Projects by Department

// Get all projects for a specific department
var departmentProjects = projects.Where(p => p.DepartmentId == "3005093");

// Get projects with construction started
var activeProjects = projects.Where(p => p.ConstructionStarted);

// Get projects with available units
var projectsWithAvailability = projects.Where(p =>
    p.Phases.Any(phase => phase.AvailableUnits > 0) ||
    p.Buildings.Any(building => building.AvailableUnits > 0)
);
// Get all estates/units in this project
var projectUnits = estates.Where(e => e.ProjectId == project.Id);

// Get the department handling this project
var projectDepartment = departments.FirstOrDefault(d => d.Id == project.DepartmentId);

// Get the primary contact employee
var primaryContact = employees.FirstOrDefault(e => e.Id == project.PrimaryAgentId);

Download