Vitec integrations
Key Observations & Notes
Fields Requiring Enum Mappings
Many Vitec fields use integer enums that need mapping tables:
- status, assignmentType, ownership, estateBaseType
- energyLetter, energyColorCode
- linkType, docType, showingType
- Employee positions, facility types, etc.
Fields Not in Core Model
Several Vitec-specific fields are marked as TBD (To Be Decided):
- Rental-specific fields (for rental properties)
- Internal Vitec statuses (settlement, back office)
- Activities and complex workflow data
- Many borettslag/cooperative-specific legal fields
- Commented out fields in the C# models
Fields mapped to "TBD" indicate that a decision hasn't been made yet about whether to include them in the core model or store them in CustomData.
Implementation Notes
- projectUnits[] represent individual apartments/units and should be created as separate Estate objects that reference the HousingProject via Estate.ProjectId
- Textfields (40+ description fields) should be parsed into DescriptionSections with appropriate titles
- Many numeric enums are stored as integers directly from Vitec - use mapping tables for display
- Fields marked as "TBD" require decisions about whether to add them to the core model or store in CustomData
Estates
Vitec All Estates
The list/summary endpoint for Vitec estates. This gives us basic information, but for full estate details we'll need the detailed endpoint below.
List Endpoint: /{installationId}/Estates
| Vitec Field | Type | Maps To (Destinet) | Notes |
|---|---|---|---|
| estateId | string | Estate.EstateId | Primary identifier |
| changedDate | datetime | Estate.ChangedDate | Last modification timestamp |
| streetAdress | string | Estate.Address.Street | Note: Vitec has typo "Adress" |
| zipCode | string | Estate.Address.ZipCode | |
| city | string | Estate.Address.City | |
| assignmentNum | string | Estate.AssignmentNum | "Oppdragsnummer" |
| estateBaseType | int (enum) | Estate.EstateBaseType | Stored as int enum from Vitec |
| assignmentType | int (enum) | TBD | Stored as int enum in metadata |
| assignmentTypeGroup | int (enum) | Estate.AssignmentTypeGroup | Stored as int enum from Vitec |
| ownership | int (enum) | Estate.Ownership | Stored as int enum from Vitec |
| employeeId | string | Estate.BrokersIdWithRoles (add as primary broker) | Primary broker - add to list with role=1 |
| departmentId | int | Estate.DepartmentId | Reference to Department (as int) |
| status | int (enum) | Estate.Status | Stored as int enum from Vitec |
| primaryArea | number | Estate.EstateSize.PrimaryRoomArea | Primary room area (P-ROM) |
| salesPriceEstimate | number | Estate.EstatePrice.PriceSuggestion | Asking price |
| defaultImageId | string | Find in Estate.Images list, set as first/cover | Reference to image |
| originType | string | TBD | System-specific data |
Vitec Estate by ID
The endpoint for specific Vitec estate. This gives us all details about the estate.
List Endpoint: GET /{installationId}/Estates/{estateId}
| Vitec Field | Type | Maps To (Destinet) | Notes |
|---|---|---|---|
| heading | string | Estate.Heading | Marketing headline |
| estateId | string | Estate.EstateId | Primary identifier |
| assignmentNum | string | Estate.AssignmentNum | "Oppdragsnummer" |
| systemId | string | TBD | Vitec-specific system ID |
| departmentId | int | Estate.DepartmentId | As int for department reference |
| settleDepartmentId | int | TBD | May need for settlement tracking |
| brokersIdWithRoles[].employeeId | string | Estate.BrokersIdWithRoles[].EmployeeId | Add to BrokersIdWithRoles list |
| brokersIdWithRoles[].brokerRole | int (enum) | Estate.BrokersIdWithRoles[].BrokerRole | Role enum (1=primary, 2=secondary, etc.) |
| status | int (enum) | Estate.Status | Stored as int enum from Vitec |
| assignmentType | int (enum) | TBD | Stored as int enum in metadata |
| assignmentTypeGroup | int (enum) | Estate.AssignmentTypeGroup | Stored as int enum from Vitec |
| assignmentTypeId | string | TBD | Reference ID for assignment type |
| ownership | int (enum) | Estate.Ownership | Stored as int enum from Vitec |
| estateTypeExternal | int (enum) | TBD | Stored as int enum in metadata |
| estateBaseType | int (enum) | Estate.EstateBaseType | Stored as int enum from Vitec |
| estatePreferences[] | string | Estate.Details.Features or TBD | Unsure - may be property preferences/tags |
| estateFacilities[].Name | string | Estate.Details.Features | Parse into key-value pairs in Features dictionary |
| showings[].start | datetime | Estate.Showings[].Start | Viewing start time |
| showings[].end | datetime | Estate.Showings[].End | Viewing end time |
| showings[].showingId | string | Estate.Showings[].ShowingId | Unique viewing identifier |
| showingNote | string | Estate.ShowingNote | General note for all viewings, or add to each viewing? |
| noOfRooms | int | Estate.NoOfRooms | Total number of rooms |
| noOfBedRooms | int | Estate.NoOfBedRooms | Number of bedrooms |
| noOfBathRooms | int | Estate.NoOfBathRooms | Number of bathrooms |
| floor | int | Estate.Floor | Which floor the unit is on |
| constructionYear | int | Estate.ConstructionYear | Year property was built |
| energyLetter | int (enum) | Estate.EnergyRating.Rating | Convert to string: A, B, C, etc. Need mapping |
| energyColorCode | int (enum) | Estate.EnergyRating.Color | Convert to string: GREEN, YELLOW, RED. Need mapping |
| rentalCost.perYear | number | TBD | For rental properties - not in core model |
| rentalCost.perMonth | number | TBD | For rental properties - not in core model |
| rentalCost.perWeek | number | TBD | For rental properties - not in core model |
| rentalCost.perDay | number | TBD | For rental properties - not in core model |
| rentalCost.deposit | number | TBD | For rental properties - not in core model |
| rentalCost.includes | string | TBD | For rental properties - not in core model |
| rentalCost.perQuarter | number | TBD | For rental properties - not in core model |
| rentalCost.perSqmPerMonth | number | TBD | For rental properties - not in core model |
| rentalCost.perSqmPerYear | number | TBD | For rental properties - not in core model |
| rentalCost.rentIncludes | string | TBD | For rental properties - not in core model |
| rentalCost.rentGuaranteeAmount | number | TBD | For rental properties - not in core model |
| rentalCost.rentGuaranteeAgreement | string | TBD | For rental properties - not in core model |
| rentalCost.rentTermination | string | TBD | For rental properties - not in core model |
| rentalCost.sublease | string | TBD | For rental properties - not in core model |
| rentalCost.tenantDuties | string | TBD | For rental properties - not in core model |
| rentalTimeSpan.from | datetime | TBD | For rental properties - not in core model |
| rentalTimeSpan.to | datetime | TBD | For rental properties - not in core model |
| availableDate | datetime | TBD | Available/move-in date - could add to core model? |
| plot.owned | bool | Estate.Plot.Owned or TBD | Whether plot is owned vs leased |
| plot.size | number | Estate.Plot.Size | Plot/land area in square meters |
| plot.description | string | Estate.DescriptionSections | Add as section titled "Plot" or "Tomt" |
| partOwnership.partName | string | Estate.PartOwnership.PartName | Borettslag/housing cooperative name |
| partOwnership.partOrgNumber | string | Estate.PartOwnership.PartOrgNumber | Organization number for borettslag |
| partOwnership.partNumber | int | Estate.PartOwnership.PartNumber | Part number in cooperative |
| partOwnership.estateHousingCooperativeStockHousingUnitNumber | int | Estate.PartOwnership.EstateHousingCooperativeStockHousingUnitNumber | Andel number in borettslag |
| partOwnership.partAbout | string | Estate.PartOwnership.PartAbout | About the cooperative/borettslag |
| partOwnership.contactId | string | Estate.PartOwnership.ContactId | Contact for cooperative |
| partOwnership.businessManagerContactId | string | Estate.PartOwnership.BusinessManagerContactId | Business manager (Forretningsfører) |
| partOwnership.preemptive | string | Estate.PartOwnership.Preemptive | Forkjøpsrett info |
| partOwnership.animals | string | Estate.PartOwnership.Animals | Pet policy |
| partOwnership.guaranteeFund | string | Estate.PartOwnership.GuaranteeFund | Garantifond info |
| partOwnership.loanTermsCollectiveDebt | string | Estate.PartOwnership.LoanTermsCollectiveDebt | Loan terms for fellesgjeld |
| partOwnership.accountingBudgeting | string | Estate.PartOwnership.AccountingBudgeting | Accounting/budgeting info |
| partOwnership.amountYearsInstallmentFree | string | Estate.PartOwnership.AmountYearsInstallmentFree | Avdragsfri år |
| partOwnership.boardApproval | string | Estate.PartOwnership.BoardApproval | Styregodkjenning required |
| partOwnership.changeOfOwnershipFee | number | Estate.PartOwnership.ChangeOfOwnershipFee | Eierskiftegebyr |
| partOwnership.deposit | number | Estate.PartOwnership.Deposit | Innskudd |
| partOwnership.estateCorporationPartialBondNumber | number | Estate.PartOwnership.EstateCorporationPartialBondNumber | Boligaksje delnummer |
| partOwnership.estateCorporationPartialDenominatedBond | number | Estate.PartOwnership.EstateCorporationPartialDenominatedBond | Boligaksje pålydende |
| partOwnership.interestGracePeriod | string | Estate.PartOwnership.InterestGracePeriod | Interest grace period info |
| partOwnership.joinCostAfterGracePeriod | string | Estate.PartOwnership.JoinCostAfterGracePeriod | Join cost after grace period |
| partOwnership.jointDebtDescription | string | Estate.PartOwnership.JointDebtDescription | Fellesgjeld description |
| partOwnership.jointDebtInstallment | string | Estate.PartOwnership.JointDebtInstallment | Fellesgjeld installment |
| partOwnership.jointDebtInterest | string | Estate.PartOwnership.JointDebtInterest | Fellesgjeld interest |
| partOwnership.preEmptiveDeadline | datetime | Estate.PartOwnership.PreEmptiveDeadline | Forkjøpsrett deadline |
| partOwnership.preEmptiveFee | number | Estate.PartOwnership.PreEmptiveFee | Forkjøpsrett fee |
| partOwnership.residentCommitments | string | Estate.PartOwnership.ResidentCommitments | Beboerforpliktelser |
| partOwnership.shareJointCapital | number | Estate.Price.ShareCapital | Andel av felleskapital |
| partOwnership.shareJointCapitalDate | datetime | Estate.PartOwnership.ShareJointCapitalDate | Date for felleskapital |
| partOwnership.shareJointDebtToDate | datetime | Estate.PartOwnership.ShareJointDebtToDate | Date for fellesgjeld |
| partOwnership.shareJointDebtYear | number | Estate.EstatePrice.CollectiveDebt | Andel av fellesgjeld per year |
| partOwnership.statutes | string | Estate.PartOwnership.Statutes | Vedtekter info |
| partOwnership.estateJointOwnershipFraction | string | Estate.PartOwnership.EstateJointOwnershipFraction | Sameiebrøk |
| partOwnership.estateHousingCooperativeStockNumber | string | Estate.PartOwnership.EstateHousingCooperativeStockNumber | Andelsnummer in borettslag |
| partOwnership.estateHousingCooperativeNominalStockValue | number | Estate.PartOwnership.EstateHousingCooperativeNominalStockValue | Pålydende for andel |
| estatePrice.priceSuggestion | number | Estate.EstatePrice.PriceSuggestion | Asking/suggested price (Prisantydning) |
| estatePrice.soldPrice | number | Estate.EstatePrice.SoldPrice | Final sold price |
| estatePrice.estimatedValue | number | Estate.EstatePrice.EstimatedValue | Estimated value / takstverdi |
| estatePrice.collectiveDebt | number | Estate.EstatePrice.CollectiveDebt | Fellesgjeld |
| estatePrice.collectiveAssets | number | Estate.EstatePrice.CollectiveAssets | Fellesmidler |
| estatePrice.loanFare | number | TBD | Loan fee - unsure of mapping |
| estatePrice.communityTax | number | Estate.EstatePrice.CommunityTax | Community tax |
| estatePrice.communityTax | number | Estate.EstatePrice.CommunityTax | Community tax |
| estatePrice.salesCostDescription | string | TBD | Description of sales costs |
| estatePrice.rent.rentPrMonth | number | TBD | Could be felleskost or rent? Context dependent |
| estatePrice.rent.rentIncludes | string | TBD | What's included in rent |
| estatePrice.purchaseCostsAmount | number | Estate.EstatePrice.PurchaseCostsAmount | Omkostninger |
| estatePrice.totalPrice | number | Estate.EstatePrice.TotalPrice | Total price with all costs |
| estatePrice.totalPrice | number | Estate.EstatePrice.TotalPrice | Total price with all costs |
| estatePrice.waterRate | number | TBD | Water rate/fee - not in core model |
| estatePrice.waterRateDescription | string | TBD | Water rate description |
| estatePrice.waterRateYear | number | TBD | Year for water rate |
| estatePrice.yearlySocietyTax | number | TBD | Yearly society tax - not in core model |
| estatePrice.yearlyLeaseFee | number | TBD | Festeavgift - for leasehold properties |
| estatePrice.leasingPartyTransportFee | number | TBD | Leasing transport fee - unclear |
| estatePrice.originalAgreementPrice | number | TBD | Original agreement price - for new builds? |
| estatePrice.additionalAgreementOptions | number | TBD | Additional agreement options cost |
| estatePrice.originalExpensesPrice | number | TBD | Original expenses price |
| estatePrice.transportAgreementCosts | number | TBD | Transport agreement costs |
| estatePrice.otherExpenses | string | TBD | Other expenses description |
| estateSize.primaryRoomArea | number | Estate.EstateSize.PRom | P-ROM (Primærrom) area in m² |
| estateSize.primaryRoomAreaDescription | string | TBD | Description of primary room area |
| estateSize.grossArea | number | Estate.EstateSize.Bra | BRA (Bruksareal) - gross floor area |
| estateSize.usableArea | number | Estate.EstateSize.Bra | Usable area in m² |
| links[].linkType | int (enum) | Estate.Links[].Type | Link type - need mapping: video, virtual tour, etc. |
| links[].url | string | Estate.Links[].Url | Link URL |
| links[].text | string | Estate.Links[].Text | Link title/text |
| address.apartmentNumber | string | Estate.Address.PublicApartmentNumber | Apartment/unit number |
| address.streetAdress | string | Estate.Address.Street | Street address (typo in Vitec API) |
| address.zipCode | string | Estate.Address.ZipCode | Postal code |
| address.city | string | Estate.Address.City | City name |
| matrikkel[].knr | int | Estate.Matrikkel[].Knr | Kommunenummer (municipality number) |
| matrikkel[].gnr | int | Estate.Matrikkel[].Gnr | Gårdsnummer (farm number) |
| matrikkel[].bnr | int | Estate.Matrikkel[].Bnr | Bruksnummer (property number) |
| matrikkel[].fnr | int | Estate.Matrikkel[].Fnr | Festenummer (leasehold number) |
| matrikkel[].snr | int | Estate.Matrikkel[].Snr | Seksjonsnummer (section number) |
| matrikkel[].ownPart | string | Estate.Matrikkel[].OwnPart | Eierandel - ownership fraction |
| matrikkel[].coOwnershipType | int (enum) | Estate.Matrikkel[].CoOwnershipType | Stored as int enum from Vitec |
| textFields.* | string | Estate.Description or Estate.DescriptionSections | Text fields vary by property type. Map to sections |
| createdDate | datetime | TBD | Creation date - not ListingDate |
| soldDate | datetime | Estate.SoldDate | Date property was sold |
| commissionAcceptedDate | datetime | TBD | Oppdrag akseptert dato |
| takeOverDate | datetime | TBD | Overtagelsesdato - takeover date |
| contractMeetingDate | datetime | TBD | Kontraktsmøte date |
| expireDate | datetime | Estate.ExpireDate | Listing expiry date |
| finnCode | string | TBD | Finn.no code/ID - not in core model |
| finnPublishDate | datetime | TBD | Finn.no publish date |
| finnExpireDate | datetime | TBD | Finn.no expiry date |
| leasingContractDate | datetime | TBD | Leasing contract date |
| valuationTax.primaryValue | number | Estate.EstatePrice.EstimatedValue | Ligningsverdi (primary) |
| valuationTax.primaryYear | number | TBD | Year for primary assessment value |
| valuationTax.secondaryValue | number | TBD | Secondary assessment value |
| valuationTax.secondaryYear | number | TBD | Year for secondary value |
| valuationTax.comment | string | TBD | Comment about valuation |
| valuationTax.propertyTaxAmount | number | Estate.Price.MunicipalFees or TBD | Eiendomsskatt amount |
| valuationTax.propertyTaxYear | number | TBD | Year for property tax |
| valuationTax.valuationDate | datetime | Estate.Details.AppraisalDate or TBD | Date of valuation/appraisal |
| valuationTax.valuationType | string | TBD | Type of valuation |
| municipality | string | Estate.Address.Municipality | Municipality name |
| municipalityId | string | TBD | Municipality ID/code |
| projectId | string | Estate.ProjectId | Reference to housing project for new builds |
| projectRelation | int (enum) | TBD | Relation type to project - need mapping |
| publicApartmentNumber | string | Estate.Address.PublicApartmentNumber | Public-facing apartment number |
| estateTypeId | string | TBD | Estate type identifier |
| estateType | string | TBD | Estate type name/description |
| longitude | number | Estate.GeoCoordinates.Longitude | Geographic longitude |
| latitude | number | Estate.GeoCoordinates.Latitude | Geographic latitude |
| takeoverComment | string | TBD | Comment about takeover/move-in |
| appraiserContactId | string | TBD | Contact ID for appraiser |
| areaId | string | TBD | Area/region identifier |
| completionCertificateDate | datetime | TBD | Ferdigattest date |
| facilities[] | int (enum) | Estate.Details.Features | Parse enum to feature names, add to Features dict |
| objectFacilities[].Name | string | Estate.Details.Features | Object facilities - add to Features dict |
| landOwnerEstateDocumentDate | datetime | TBD | Land owner document date |
| liveAndManagementDuty | bool | Estate.Details.Features["LiveAndManagementDuty"] | Boplikt og driveplikt |
| managementDuty | bool | Estate.Details.Features["ManagementDuty"] | Driveplikt |
| odel | bool | Estate.Details.Features["Odel"] | Odelsrett |
| ownAssignmentType | string | TBD | Custom assignment type |
| ownAdvertisementType | string | TBD | Custom advertisement type |
| requiresConcession | bool | Estate.Details.Features["RequiresConcession"] | Konsesjonspliktig |
| tag | string | TBD | Tags/labels for estate |
| buildings[].name | string | TBD | Building name - complex structure, not fully in core |
| buildings[].buildingArea[].areaType | int (enum) | TBD | Area type enum - need mapping |
| buildings[].buildingArea[].areaInformation[].floorNumber | int | TBD | Floor number for area |
| buildings[].buildingArea[].areaInformation[].areaSize | number | TBD | Area size by floor |
| buildings[].buildingArea[].areaInformation[].areaDescription | string | TBD | Area description |
| sumArea.bra | number | Estate.EstateSize.Bra | BRA (Bruksareal) - total usable area |
| sumArea.bra | number | Estate.EstateSize.Bra | BRA (Bruksareal) - total usable area |
| sumArea.bra | number | Estate.EstateSize.Bra | BRA (Bruksareal) - total usable area |
| sumArea.braB | number | Estate.EstateSize.BraB | BRA-b (bod) - storage area |
| sumArea.braS | number | Estate.EstateSize.BraS | BRA-s (sekundær) - secondary area |
| sumArea.pRom | number | Estate.EstateSize.PRom | P-ROM (Primærrom) |
| sumArea.tba | number | Estate.EstateSize.Tba | TBA (terrasse/balkong) |
| sumArea.sRom | number | Estate.EstateSize.SRom | S-ROM (Sekundærrom) |
| sumArea.bta | number | Estate.EstateSize.Bta | BTA (Brutto tomteareal) |
| estateSettlementStatusGroup | int (enum) | TBD | Settlement status - internal Vitec status |
| estateBackOfficeStatusGroup | int (enum) | TBD | Back office status - internal Vitec status |
| farm | bool | Estate.Details.Features["Farm"] | Is this a farm property |
| inSettlement | bool | TBD | Is in settlement process |
| lastDocumentChangeDate | datetime | TBD | Last document change |
| lastImageChangeDate | datetime | TBD | Last image change |
| changedDate | datetime | Estate.ChangedDate | Last modification timestamp |
| originTypeId | string | TBD | Origin type identifier |
| originType | string | TBD | Origin type name |
| estateOfDeceased | bool | TBD | Dødsbo - estate of deceased |
| publicProbate | bool | TBD | Offentlig skifte |
Vitec Estate Activity
The endpoint for activities on a specific estate.
List Endpoint: GET /{installationId}/Estates/{estateId}/Activities
| Vitec Field | Type | Maps To (Destinet) | Notes |
|---|---|---|---|
| activities[].start | datetime | TBD | Activity start time - not in core model |
| activities[].end | datetime | TBD | Activity end time - not in core model |
| activities[].type | int (enum) | TBD | Activity type enum - need mapping |
| activities[].name | string | TBD | Activity name/description |
| activities[].performedById | string | TBD | Agent/employee who performed activity |
| activities[].done | bool | TBD | Is activity completed |
| activities[].id | string | TBD | Activity identifier |
Vitec Estate viewing/showing
The endpoint for viewing/showing of specific estate.
List Endpoint: GET /{installationId}/Estates/{estateId}/Showings
| Vitec Field | Type | Maps To (Destinet) | Notes |
|---|---|---|---|
| showings[].start | datetime | Estate.Showings[].Start | Viewing start time |
| showings[].end | datetime | Estate.Showings[].End | Viewing end time |
| showings[].showingId | string | Estate.Showings[].ShowingId | Unique viewing identifier |
| showings[].showingType | int (enum) | Estate.Showings[].Type or TBD | Convert to string: Open House, Private, etc. Need mapping |
| showings[].participantNumber | int | TBD | Current participant count - not in Viewing class |
| showings[].maxParticipantNumber | int | TBD | Max participants allowed - not in Viewing class |
| showings[].slots[].slotId | string | TBD | Time slot ID - booking slots not in core model |
| showings[].slots[].start | datetime | TBD | Slot start time - for time slot booking |
| showings[].slots[].end | datetime | TBD | Slot end time - for time slot booking |
| showings[].slots[].participantCount | int | TBD | Participants in this slot |
| showings[].slots[].participantLimit | int | TBD | Limit for this slot |
| showings[].isCancelled | bool | TBD | Is viewing cancelled - not in Viewing class |
Vitec links
The endpoint for links on a specific estate.
List Endpoint: GET /{installationId}/Estates/{estateId}/GetEstatesLinks
| Vitec Field | Type | Maps To (Destinet) | Notes |
|---|---|---|---|
| links[].linkType | int (enum) | Estate.Links[].Type | Convert to string: Video, VirtualTour, etc. Need mapping |
| links[].url | string | Estate.Links[].Url | Link URL |
| links[].name | string | Estate.Links[].Text | Link title/name |
| links[].deliveryPackageId | string | TBD | Delivery package ID - not in PropertyLink class |
Vitec Estate Images
The endpoint for a list of images on specific estate.
List Endpoint: /{installationId}/Estates/{estateId}/Images
Se also get first image from category: string: /{installationId}/Estates/{estateId}/ImageFromCategory/{categoryName}
| Vitec Field | Type | Maps To (Destinet) | Notes |
|---|---|---|---|
| images[].imageId | string | Estate.Images[].Id | Unique image identifier |
| images[].fileType | int (enum) | Estate.Images[].FileExtension or TBD | Convert enum to extension: jpg, png, etc. Need mapping |
| images[].lastChanged | datetime | TBD | Image last changed date - not in Image class |
| images[].imageDescription | string | Estate.Images[].Caption | Image description/caption |
| images[].imageSequence | int | Estate.Images[].Order | Display order/sequence |
| images[].imageCategoryName | string | Estate.Images[].Category | Category: Facade, Interior, FloorPlan, etc. |
| images[].isArchived | bool | TBD | Is image archived - not in Image class |
Vitec Estate Documents
The endpoint for a list of documents on specific estate.
List Endpoint: /{installationId}/Estates/{estateId}/Documents
Se also get specific document: /{installationId}/Estates/{estateId}/Documents/{documentId}
| Vitec Field | Type | Maps To (Destinet) | Notes |
|---|---|---|---|
| documents[].documentId | string | Estate.Documents[].Id | Unique document identifier |
| documents[].head | string | Estate.Documents[].Title | Document title/heading |
| documents[].extension | string | Estate.Documents[].FileExtension | File extension: pdf, docx, etc. |
| documents[].docType | int (enum) | Estate.Documents[].Type or TBD | Convert to string: FloorPlan, Prospectus, etc. Need mapping |
| documents[].lastChanged | datetime | TBD | Last changed date - not in PropertyDocument class |
| documents[].signStatus | int (enum) | TBD | Document signing status - not in core model |
| documents[].approvalDate | datetime | TBD | Approval date - not in core model |
| documents[].approvedBy | string | TBD | Who approved document - not in core model |
Vitec Project
The endpoint for a project.
List Endpoint: /{installationId}/Estates/{estateId}/Project
| Vitec Field | Type | Maps To (Destinet) | Notes |
|---|---|---|---|
| project.estateId | string | Project.Id | Project identifier |
| project.parentProjectId | string | Project.ParentProjectId | Parent project reference for sub-projects |
| project.sellerId | string | Project.SellerId | Seller/developer ID |
| project.projectName | string | Project.Name | Project name |
| project.assignmentNum | string | TBD | Assignment/reference number |
| project.status | int (enum) | Project.Status | Stored as int enum from Vitec |
| project.departmentId | int | Project.DepartmentId | Department reference (as string) |
| project.employeeId | string | Project.PrimaryAgentId | Primary employee |
| project.p12Garanti | bool | TBD | §12 garanti (5-year guarantee) |
| project.p47Garanti | bool | TBD | §47 garanti (10-year guarantee) |
| project.p12Due | datetime | TBD | §12 due date |
| project.p47Due | datetime | TBD | §47 due date |
| project.p12Belop | number | TBD | §12 amount |
| project.p47Belop | number | TBD | §47 amount |
| project.textFields.miscellaneous | string | Project.DescriptionSections | Add as section: "Miscellaneous" / "Diverse" |
| project.textFields.commonArea | string | Project.DescriptionSections | Add as section: "Common Area" / "Fellesarealer" |
| project.textFields.garageParking | string | Project.DescriptionSections | Add as section: "Garage/Parking" / "Garasje/Parkering" |
| project.textFields.booth | string | Project.DescriptionSections | Add as section: "Storage" / "Bod" |
| project.textFields.completion | string | Project.DescriptionSections | Add as section: "Completion" / "Ferdigstillelse" |
| project.textFields.kitchen | string | Project.DescriptionSections | Add as section: "Kitchen" / "Kjøkken" |
| project.textFields.bath | string | Project.DescriptionSections | Add as section: "Bathroom" / "Bad" |
| project.textFields.recreationalRooms | string | Project.DescriptionSections | Add as section: "Recreational Rooms" / "Oppholdsrom" |
| project.textFields.wardrobe | string | Project.DescriptionSections | Add as section: "Wardrobe" / "Garderobe" |
| project.textFields.construction | string | Project.DescriptionSections | Add as section: "Construction" / "Konstruksjon" |
| project.textFields.facade | string | Project.DescriptionSections | Add as section: "Facade" / "Fasade" |
| project.textFields.roofing | string | Project.DescriptionSections | Add as section: "Roofing" / "Taktekning" |
| project.textFields.balconyTerracePatio | string | Project.DescriptionSections | Add as section: "Balcony/Terrace" / "Balkong/Terrasse" |
| project.textFields.stairs | string | Project.DescriptionSections | Add as section: "Stairs" / "Trapper" |
| project.textFields.elevators | string | Project.DescriptionSections | Add as section: "Elevators" / "Heiser" |
| project.textFields.ventilation | string | Project.DescriptionSections | Add as section: "Ventilation" / "Ventilasjon" |
| project.textFields.sanitary | string | Project.DescriptionSections | Add as section: "Sanitary" / "Sanitær" |
| project.textFields.fireSafety | string | Project.DescriptionSections | Add as section: "Fire Safety" / "Brannsikkerhet" |
| project.textFields.doors | string | Project.DescriptionSections | Add as section: "Doors" / "Dører" |
| project.textFields.surfaces | string | Project.DescriptionSections | Add as section: "Surfaces" / "Overflater" |
| project.textFields.boothSolutions | string | Project.DescriptionSections | Add as section: "Storage Solutions" / "Bodløsninger" |
| project.textFields.garageDoor | string | Project.DescriptionSections | Add as section: "Garage Door" / "Garasjeport" |
| project.textFields.mailboxes | string | Project.DescriptionSections | Add as section: "Mailboxes" / "Postkasser" |
| project.textFields.doorPhone | string | Project.DescriptionSections | Add as section: "Door Phone" / "Porttelefon" |
| project.textFields.cableTvBroadbandTelephone | string | Project.DescriptionSections | Add as section: "Cable TV/Broadband" / "Kabel-TV/Bredbånd" |
| project.textFields.electricalSystem | string | Project.DescriptionSections | Add as section: "Electrical System" / "Elektrisk anlegg" |
| project.textFields.organizationType | string | Project.DescriptionSections | Add as section: "Organization Type" / "Organisasjonsform" |
| project.textFields.stipulatedMonthlyJointCosts | string | Project.DescriptionSections | Add as section: "Monthly Joint Costs" / "Felleskostnader" |
| project.textFields.stipulatedShareJointDebt | string | Project.DescriptionSections | Add as section: "Joint Debt" / "Fellesgjeld" |
| project.textFields.pricing | string | Project.DescriptionSections | Add as section: "Pricing" / "Prising" |
| project.textFields.financing | string | Project.DescriptionSections | Add as section: "Financing" / "Finansiering" |
| project.textFields.saleOfContractPosition | string | Project.DescriptionSections | Add as section: "Sale of Contract Position" / "Videresalg" |
| project.textFields.cancellations | string | Project.DescriptionSections | Add as section: "Cancellations" / "Kansellering" |
| project.textFields.options | string | Project.DescriptionSections | Add as section: "Options" / "Valg/Tilvalg" |
| project.textFields.spaceCalculation | string | Project.DescriptionSections | Add as section: "Space Calculation" / "Arealberegning" |
| project.textFields.paymentConditions | string | Project.DescriptionSections | Add as section: "Payment Conditions" / "Betalingsbetingelser" |
| project.textFields.saleConditions | string | Project.DescriptionSections | Add as section: "Sale Conditions" / "Salgsbetingelser" |
| project.textFields.buyingContract | string | Project.DescriptionSections | Add as section: "Buying Contract" / "Kjøpekontrakt" |
| project.textFields.importantInformation | string | Project.DescriptionSections | Add as section: "Important Information" / "Viktig informasjon" |
| project.textFields.distinctReservations | string | Project.DescriptionSections | Add as section: "Reservations" / "Forbehold" |
| project.textFields.aboutTheProject | string | Project.Description or Project.DescriptionSections | Main project description or as section |
| project.textFields.zoning | string | Project.DescriptionSections | Add as section: "Zoning" / "Regulering" |
| project.textFields.guaranteeDescription | string | Project.DescriptionSections | Add as section: "Guarantee" / "Garanti" |
| project.textFields.distinctReservationsComment | string | Project.DescriptionSections | Add as section: "Reservations Comment" / "Forbehold kommentar" |
| project.textFields.solarConditions | string | Project.DescriptionSections | Add as section: "Solar Conditions" / "Solforhold" |
| project.projectUnits[].estateId | string | Estate.Id (separate collection) | Unit ID - create Estate with HousingProjectId reference |
| project.projectUnits[].priceEstimate | number | Estate.EstatePrice.PriceSuggestion | Unit asking price |
| project.projectUnits[].usableArea | number | Estate.EstateSize.UsableArea | Unit usable area |
| project.projectUnits[].primaryRoomArea | number | Estate.EstateSize.PrimaryRoomArea | Unit primary room area |
| project.projectUnits[].descriptionItemAmountOfRooms | int | Estate.NoOfRooms | Number of rooms in unit |
| project.projectUnits[].floor | int | Estate.Floor | Floor number |
| project.projectUnits[].estateType | string | TBD | Unit type |
| project.projectUnits[].status | int (enum) | Estate.Status | Unit status: Available, Sold, Reserved. Need mapping |
| project.projectUnits[].purchaseCostsAmount | number | Estate.EstatePrice.PurchaseCostsAmount | Purchase costs/omkostninger |
| project.projectUnits[].rentPrMonth | number | TBD | Monthly costs (felleskostnader) |
| project.projectUnits[].collectiveDebt | number | Estate.EstatePrice.CollectiveDebt | Collective debt/fellesgjeld |
| project.projectUnits[].soldPrice | number | Estate.EstatePrice.SoldPrice | Final sold price |
| project.projectUnits[].soldDate | datetime | Estate.SoldDate | Sale date |
| project.projectUnits[].reservedUntil | datetime | TBD | Reservation expiry date |
| project.projectUnits[].apartmentNumber | string | Estate.Address.PublicApartmentNumber | Apartment number |
| project.projectUnits[].totalPrice | number | Estate.EstatePrice.TotalPrice | Total price with costs |
| project.projectUnits[].priceType | int (enum) | TBD | Price type enum - need mapping |
| project.projectUnits[].highlighted | bool | TBD | Featured/highlighted unit |
| project.projectUnits[].assignmentNum | string | Estate.ReferenceNumber | Assignment/reference number |
| project.projectUnits[].grossArea | number | Estate.EstateSize.GrossArea | Gross area/BRA |
| project.projectUnits[].estateTypeId | string | TBD | Estate type identifier |
| project.projectUnits[].usableAreaI | number | Estate.Details.ResidentialUsableArea | Indoor usable area (BRA-i) |
| project.projectUnits[].buildings[].name | string | TBD | Building name for unit |
| project.projectUnits[].buildings[].buildingArea[].areaType | int (enum) | TBD | Area type enum |
| project.projectUnits[].buildings[].buildingArea[].areaInformation[].floorNumber | int | TBD | Floor number for area |
| project.projectUnits[].buildings[].buildingArea[].areaInformation[].areaSize | number | TBD | Area size |
| project.projectUnits[].buildings[].buildingArea[].areaInformation[].areaDescription | string | TBD | Area description |
| project.projectUnits[].sumArea.bra | number | Estate.EstateSize.UsableArea | BRA total |
| project.projectUnits[].sumArea.braI | number | Estate.Details.ResidentialUsableArea | BRA-i (indoor) |
| project.projectUnits[].sumArea.braE | number | Estate.Details.ExteriorUsableArea | BRA-e (exterior) |
| project.projectUnits[].sumArea.braB | number | TBD | BRA-b (storage) |
| project.projectUnits[].sumArea.braS | number | TBD | BRA-s (secondary) |
| project.projectUnits[].sumArea.pRom | number | Estate.EstateSize.PrimaryRoomArea | P-ROM |
| project.projectUnits[].sumArea.tba | number | Estate.Details.TerraceAndBalconyArea | TBA (terrace/balcony) |
| project.projectUnits[].sumArea.sRom | number | TBD | S-ROM (secondary rooms) |
| project.projectUnits[].sumArea.bta | number | TBD | BTA |
| project.projectUnits[].facilities[].Name | string | Estate.Details.Features | Unit facilities |
| project.createdDate | datetime | Project.CreatedDate | Project creation date |
| project.changedDate | datetime | Project.LastModified | Project last modified |
| project.parkingUnits[].name | string | TBD or Estate (separate) | Parking unit name - could be separate Estate or metadata |
| project.parkingUnits[].estateId | string | TBD | Parking unit ID |
| project.parkingUnits[].status | int (enum) | TBD | Parking unit status |
| project.parkingUnits[].type | int (enum) | TBD | Parking type: garage, outdoor, etc. Need mapping |
| project.parkingUnits[].level | int | TBD | Parking level/floor |
| project.parkingUnits[].facilities[] | int (enum) | TBD | Parking facilities |
| project.parkingUnits[].length | number | TBD | Parking space length |
| project.parkingUnits[].width | number | TBD | Parking space width |
| project.parkingUnits[].description | string | TBD | Parking description |
| project.parkingUnits[].price | number | TBD | Parking space price |
| project.parkingUnits[].taxbase | number | TBD | Tax base for parking |
| project.parkingUnits[].estimatedTax | number | TBD | Estimated tax |
| project.parkingUnits[].matrikkel.knr | int | TBD | Cadastral info for parking |
| project.parkingUnits[].matrikkel.gnr | int | TBD | Cadastral info |
| project.parkingUnits[].matrikkel.bnr | int | TBD | Cadastral info |
| project.parkingUnits[].matrikkel.fnr | int | TBD | Cadastral info |
| project.parkingUnits[].matrikkel.snr | int | TBD | Cadastral info |
| project.parkingUnits[].matrikkel.ownPart | string | TBD | Cadastral info |
| project.parkingUnits[].matrikkel.coOwnershipType | int (enum) | TBD | Cadastral info |
| project.parkingUnits[].parkingId | string | TBD | Parking unit identifier |
| project.developersReservationDueDate | datetime | TBD | Developer reservation due date |
| project.developersReservationCompletedDate | datetime | TBD | Completed date |
| project.developersReservations[].type | int (enum) | TBD | Reservation type |
| project.developersReservations[].description | string | TBD | Reservation description |
| project.currentProjectPhase | int (enum) | TBD or Phase.Status | Current phase enum - need mapping |
| project.projectPhasePlanning | string | Project.DescriptionSections or Phase.Description | Planning phase description |
| project.projectPhaseSale | string | Project.DescriptionSections or Phase.Description | Sales phase description |
| project.projectPhaseBuilding | string | Project.DescriptionSections or Phase.Description | Building phase description |
| project.projectPhaseTakeover | string | Project.DescriptionSections or Phase.Description | Takeover phase description |
Departments
Vitec Departments
The endpoint for all departments
List Endpoint: /{installationId}/Departments/GetDepartments
Se also get specific department: /{installationId}/Departments/{departmentId}
| Vitec Field | Type | Maps To (Destinet) | Notes |
|---|---|---|---|
| departments[].departmentId | int (enum) | Department.Id | Convert to string for ID |
| departments[].name | string | Department.Name | Department display name |
| departments[].organisationNumber | string | Department.RegistrationNumber | Organization number |
| departments[].legalName | string | TBD | Legal company name - not in core model |
| departments[].departmentNumber | int | TBD | Internal department number - not in core model |
| departments[].phone | string | Department.Phone | Primary phone number |
| departments[].fax | string | TBD | Fax number - not in core Department model |
| departments[].email | string | Department.Email | Primary email address |
| departments[].streetAddress | string | Department.Address.Street | Street address |
| departments[].postalAddress | string | TBD | Postal address if different - not in core |
| departments[].postalCode | string | Department.Address.ZipCode | Postal code |
| departments[].city | string | Department.Address.City | City name |
| departments[].isRegion | bool | Department.IsRegion | Whether this is a regional office |
| departments[].subDepartments[] | int (enum) | Department.SubDepartments | Sub-departments list |
| departments[].visitPostalCode | string | Department.Address.ZipCode | Visiting address postal code (use in Address if different) |
| departments[].visitCity | string | Department.Address.City | Visiting address city |
| departments[].marketName | string | TBD | Marketing name - not in core model |
| departments[].webPublish | bool | TBD | Whether to publish on web - not in core model |
| departments[].aboutDepartment | string | Department.Description | About/description text |
| departments[].imageTimestamp | datetime | Department.ImageTimestamp | Image last modified timestamp |
| departments[].isAPartOfAFranchise | bool | Department.IsPartOfFranchise | Franchise membership |
Employees
Vitec Employees
The endpoint for all employees
List Endpoint: /{installationId}/Employees
Se also get specific employee: /{installationId}/Departments/{employeeId}
Se also get image of employee: /{installationId}/Departments/{employeeId}/Picture
| Vitec Field | Type | Maps To (Destinet) | Notes |
|---|---|---|---|
| employees[].employeeId | string | Employee.Id | Unique employee identifier |
| employees[].employeeNum | int | TBD | Internal employee number |
| employees[].title | string | Employee.Title | Job title/role |
| employees[].name | string | Employee.Name | Full name |
| employees[].departmentId[] | int[] | Employee.DepartmentIds | Convert to string list of department IDs |
| employees[].mobilePhone | string | Employee.MobilePhone | Mobile phone number |
| employees[].workPhone | string | Employee.WorkPhone | Office/work phone |
| employees[].email | string | Employee.Email | Email address |
| employees[].employeeActive | bool | Employee.IsActive | Whether employee is active |
| employees[].student | bool | TBD | Whether employee is student/trainee |
| employees[].webPublish | bool | TBD | Whether to publish on web |
| employees[].imageTimestamp | datetime | Employee.ImageTimestamp | Image last modified timestamp |
| employees[].changedDate | datetime | Employee.LastModifiedOrigin | Last modified date in origin system |
| employees[].createdDate | datetime | TBD | Creation date |
| employees[].aboutMe | string | Employee.Description | Biography/about text |
| employees[].employeePositions[].type | int (enum) | Employee.Positions[].Type or Employee.IsProjectBroker or Employee.IsRentalBroker | Map to specialized broker flags or store in Positions |
| employees[].employeePositions[].percent | number | Employee.Positions[].Percent | Employment percentage for position |
| employees[].availabilityStatus[].status | int (enum) | TBD | Availability status - not in core model |
| employees[].availabilityStatus[].percent | number | TBD | Availability percentage |
| employees[].availabilityStatus[].fromDate | datetime | TBD | Availability from date |
| employees[].availabilityStatus[].toDate | datetime | TBD | Availability to date |
| employees[].departmentPermissions[].departmentId | int (enum) | TBD | Department permissions - not in core model |
| employees[].departmentPermissions[].departmentPermissionType | int (enum) | TBD | Permission type - not in core model |