Skip to content

Estate Model - Complete Field Reference

This page provides complete documentation of the Estate model, which represents a property listing from various sources like Vitec.

Note: For detailed information about shared classes like Address, Image, Showing, etc., see the Shared Classes documentation.

Note: For estate-specific classes like BrokerWithRole, Plot, EstateSize, EstatePrice, and PartOwnership, see the Estate Classes documentation.

Estate Class

The main class representing a real estate property listing. This model is designed to accommodate data from multiple source systems while maintaining a consistent structure.

Core Identification

Property Type Description Example
Heading string? Marketing headline "Lekker 3-roms leilighet i sentrum"
Id string Unique estate identifier (Vitec: estateId) "3221523"
AssignmentNum string? Assignment number / Oppdragsnummer (Vitec: assignmentNum) "110250256"
DepartmentId int? Department ID (Vitec: departmentId) 3005093
ChangedDate DateTime? When this estate data was last changed 2025-10-28T14:39:00Z

Brokers

Property Type Description
BrokersIdWithRoles List<BrokerWithRole>? List of brokers with their roles (Vitec: brokersIdWithRoles)

The BrokerWithRole class contains broker/employee information with role assignments.

Classification & Type

Property Type Description Example Values
EstateBaseType int? Base type of property (Vitec: estateBaseType) 0=NotSet, 1=Detached, 2=Leisure, 3=Business, 4=Project, 5=Plot, 6=Unknown
AssignmentTypeGroup int? Assignment type group (Vitec: assignmentTypeGroup) 0=NotSet, 1=Sale, 2=Rent, 3=LettingService, 4=ProjectSale, etc.
Ownership int? Type of ownership (Vitec: ownership) 0=Owned, 1=Cooperative, 2=Stock, 3=Bond, 4=Condominium

Note: These values are stored as integer enums from the source system (e.g., Vitec). Enum mapping tables are needed to convert these to human-readable strings. See Vitec Enum Mappings.

Status

Property Type Description Example Values
Status int Current status of the listing (Vitec: status) 0=Request, 1=Preparation, 2=ForSale, 3=Sold, 4=Reserved, 5=Archived, 6=Expired, 7=Terminated
SoldDate DateTime? Date when the property was sold 2025-11-15
ExpireDate DateTime? Listing expiry date 2026-04-20

Location

Property Type Description
Address Address? Address information (street, city, postal code, etc.)
GeoCoordinates GeoCoordinates? Geographic coordinates (latitude, longitude)
Matrikkel List<Matrikkel>? Cadastral information - Norwegian property registry data

A property can have multiple cadastral registrations, which is why Matrikkel is a list.

See: - Address documentation - GeoCoordinates documentation - Matrikkel documentation

Property Details

Basic property characteristics directly on the Estate object:

Property Type Description
NoOfRooms int? Total number of rooms (Vitec: noOfRooms)
NoOfBedRooms int? Number of bedrooms (Vitec: noOfBedRooms)
NoOfBathRooms int? Number of bathrooms (Vitec: noOfBathRooms)
Floor int? Which floor the unit is on (Vitec: floor)
ConstructionYear int? Year property was built (Vitec: constructionYear)
Plot Plot? Plot/land information
EstateSize EstateSize? Area measurements (primary room area, gross area, usable area, etc.)

The Plot and EstateSize classes provide detailed information about land and area measurements.

Energy Rating

Property Type Description
EnergyRating EnergyRating? Energy rating information (letter, color code)

See EnergyRating documentation.

Pricing

Property Type Description
EstatePrice EstatePrice? Comprehensive pricing information

The EstatePrice class contains:

  • Asking price (priceSuggestion)
  • Sold price
  • Collective debt (fellesgjeld)
  • Common costs/rent information
  • Transaction costs
  • Total price calculations
  • And many other price-related fields

Ownership Details

Property Type Description
PartOwnership PartOwnership? Part ownership details (Borettslag/housing cooperative information)

The PartOwnership class contains extensive cooperative/condominium information including:

  • Organization details
  • Part/share numbers
  • Board approval requirements
  • Deposit amounts
  • Collective debt information
  • And other cooperative-specific fields

Facilities & Features

Property Type Description
EstateFacilities List<string>? Estate facilities as list of names (Vitec: estateFacilities[].Name)
Facilities List<int>? Facilities as enum values (Vitec: facilities[])

Facilities are stored in two ways:

  • EstateFacilities: Human-readable facility names
  • Facilities: Integer enum values that can be mapped to feature dictionaries

Showings

Property Type Description
Showings List<Showing>? Scheduled showings (Vitec: showings)
ShowingNote string? General note for all showings (Vitec: showingNote)

See Showing documentation.

Property Type Description
Links List<PropertyLink>? External links (Vitec: links)
Images ImageCollection? Marketing images for the property
Documents DocumentCollection? Estate documents (brochures, floor plans, etc.)

Important: Images and Documents are fetched from separate API endpoints but are populated into these lists when creating the Estate object.

See: - ExternalPlatformUrls documentation - PropertyLink documentation - Image documentation - Document documentation

Description Sections

Property Type Description
DescriptionSections List<DescriptionSection>? Structured description sections with titles, content, and ordering

Description sections are used to organize property descriptions into structured, titled sections (e.g., "Location", "Interior", "Outdoor Areas"). This replaces the older approach of using a simple dictionary of text fields.

See DescriptionSection documentation.

Project Reference

For properties that are part of a new construction/housing project:

Property Type Description Example
ProjectId string? Reference to housing project (Vitec: projectId) "PROJ-2024-001"

Usage:

// For a new build apartment
estate.ProjectId = "PROJ-2024-001";

// Look up full project details
var project = GetProjectById(estate.ProjectId);

See Project documentation for more information.

System Metadata

Property Type Description
Origin string? Source system this data came from
CustomData Dictionary<string, object>? System-specific metadata that doesn't fit the standard model

The Origin field indicates which system provided the data (e.g., "Vitec"). The CustomData dictionary stores any system-specific fields that don't have a direct mapping to the standard model.


Complete Usage Example

var estate = new Estate
{
    // Core Identification
    Heading = "Lekker 3-roms leilighet i sentrum",
    EstateId = "3221523",
    AssignmentNum = "110250256",
    DepartmentId = 3005093,
    ChangedDate = DateTime.Parse("2025-10-28T14:39:00Z"),

    // Brokers
    BrokersIdWithRoles = new List<BrokerWithRole>
    {
        new BrokerWithRole
        {
            EmployeeId = "3006722",
            BrokerRole = 1  // Primary broker
        }
    },

    // Classification
    EstateBaseType = 1,  // Detached/Residential
    AssignmentTypeGroup = 1,  // Sale
    Ownership = 1,  // Cooperative

    // Status
    Status = 2,  // ForSale
    ExpireDate = DateTime.Parse("2026-04-20"),

    // Location
    Address = new Address
    {
        Street = "Storgata 10",
        PublicApartmentNumber = "H0301",
        LocalAreaName = "Gimle",
        ZipCode = "0155",
        City = "Oslo",
        Municipality = "Oslo",
        County = "Oslo",
        Country = "Norway",
        CountryCode = "NO"
    },

    GeoCoordinates = new GeoCoordinates
    {
        Latitude = 59.9139m,
        Longitude = 10.7522m
    },

    Matrikkel = new List<Matrikkel>
    {
        new Matrikkel
        {
            Knr = 301,  // Municipality number
            Gnr = 45,   // Farm number
            Bnr = 123,  // Property number
            Snr = 7,    // Section number
            OwnPart = "1/1",
            CoOwnershipType = 1
        }
    },

    // Property Details
    NoOfRooms = 3,
    NoOfBedRooms = 2,
    NoOfBathRooms = 1,
    Floor = 3,
    ConstructionYear = 1985,

    Plot = new Plot
    {
        Owned = true,
        Size = 0,  // No plot for apartment
        Description = null
    },

    EstateSize = new EstateSize
    {
        PrimaryRoomArea = 70.0m,
        GrossArea = 95.5m,
        UsableArea = 88.0m
    },

    // Energy Rating
    EnergyRating = new EnergyRating
    {
        EnergyLetter = 3,  // C
        EnergyColorCode = 2,  // Yellow
        Description = "Energy rating C"
    },

    // Pricing
    EstatePrice = new EstatePrice
    {
        PriceSuggestion = 4500000,
        CollectiveDebt = 250000,
        Rent = new RentInfo
        {
            RentPrMonth = 3500
        },
        PurchaseCostsAmount = 25000,
        TotalPrice = 4525000
    },

    // Part Ownership (for cooperative apartments)
    PartOwnership = new PartOwnership
    {
        PartName = "Borettslaget Storgata",
        PartOrgNumber = "987654321",
        PartAbout = "Veletablert borettslag fra 1985...",
        Deposit = 50000,
        ShareJointDebtYear = 250000,
        BoardApproval = "Styregodkjenning kreves"
    },

    // Facilities
    EstateFacilities = new List<string>
    {
        "Balkong",
        "Heis",
        "Peis"
    },

    Facilities = new List<int> { 1, 5, 12 },  // Vitec facility enum values

    // Showings
    ShowingNote = "Velkommen til visning. Møt opp ved oppgang A.",
    Showings = new List<Showing>
    {
        new Showing
        {
            ShowingId = "v001",
            Start = DateTime.Parse("2025-11-05 14:00"),
            End = DateTime.Parse("2025-11-05 15:00")
        }
    },

    // Media & Links
    ExternalPlatformUrls = new ExternalPlatformUrls
    {
        PrimaryUrl = "https://www.proaktiv.no/property/3221523",
        ProspectusUrl = "https://www.proaktiv.no/property/3221523/prospectus",
        PlatformUrls = new Dictionary<string, string>
        {
            ["Finn.no"] = "https://www.finn.no/...",
            ["Hemnet"] = "https://www.hemnet.se/..."
        }
    },

    Links = new List<PropertyLink>
    {
        new PropertyLink
        {
            Id = "link001",
            Text = "Virtual Tour",
            Url = "https://example.com/tour/3221523",
            Type = 1,  // Video/tour type
            IsPublic = true
        }
    },

    // Description Sections
    DescriptionSections = new List<DescriptionSection>
    {
        new DescriptionSection
        {
            GroupName = "BELIGGENHET",
            Title = "Beliggenhet",
            Content = "Leiligheten ligger sentralt i Oslo...",
            Order = 1
        },
        new DescriptionSection
        {
            GroupName = "BESKRIVELSE",
            Title = "Interiør",
            Content = "Moderne kjøkken med hvitevarer...",
            HtmlContent = "<p>Moderne kjøkken med <strong>hvitevarer</strong>...</p>",
            Order = 2
        }
    },

    // Project Reference (for new builds)
    ProjectId = null,  // Not part of a project

    // System Metadata
    Origin = "Vitec",
    CustomData = new Dictionary<string, object>
    {
        ["systemId"] = "VIT-12345",
        ["finnCode"] = "12345678",
        ["lastImageChangeDate"] = DateTime.Parse("2025-10-25")
    }
};

// Add images (fetched from separate endpoint)
estate.Images.Add(new Image
{
    Id = "4821283",
    OriginalUrl = "https://cdn.example.com/facade.jpg",
    Filename = "facade-main.jpg",
    FileExtension = "jpg",
    Caption = "Fasade",
    AltText = "Moderne bygård med glassbalkong",
    Category = "Facade",
    Order = 1,
    Width = 1920,
    Height = 1080,
    LastModified = DateTime.Parse("2025-10-25")
});

estate.Images.Add(new Image
{
    Id = "4821284",
    OriginalUrl = "https://cdn.example.com/livingroom.jpg",
    Filename = "stue.jpg",
    FileExtension = "jpg",
    Caption = "Stue",
    AltText = "Lys stue med parkett og store vinduer",
    Category = "Interior",
    Order = 2,
    Width = 1920,
    Height = 1080,
    LastModified = DateTime.Parse("2025-10-25")
});

// Add documents (fetched from separate endpoint)
estate.Documents.Add(new PropertyDocument
{
    Id = "doc001",
    Title = "Plantegning 3. etasje",
    Url = "https://cdn.example.com/floorplan.pdf",
    FileName = "plantegning-3etg",
    FileExtension = "pdf",
    Type = 1,  // Floor plan type
    IsPublic = true,
    Order = 1,
    LastModified = DateTime.Parse("2025-10-20")
});

Data Population Flow

When fetching estate data from Vitec (or other systems), the typical flow is:

  1. Fetch base estate: GET /{installationId}/Estates/{estateId}
  2. Fetch images: GET /{installationId}/Estates/{estateId}/Images
  3. Fetch documents: GET /{installationId}/Estates/{estateId}/Documents
  4. Fetch links: GET /{installationId}/Estates/{estateId}/Links
  5. Fetch showings: GET /{installationId}/Estates/{estateId}/Showings
  6. Combine all data into a single Estate object

The Estate object is designed to hold all this data together once fetched, even though it comes from multiple API endpoints.


Classes Referenced by Estate

The following classes are referenced as properties in the Estate class and need to be defined:

Estate-specific classes (defined in estate model):

  • BrokerWithRole - Broker with role assignment
  • Plot - Plot/land information
  • EstateSize - Area measurements
  • EstatePrice - Pricing information
  • PartOwnership - Cooperative/condominium ownership details

Shared classes (reusable across models):


Download

Main Estate Class:

Estate-Specific Classes: