Skip to main content

MAPI Overview

MAPI is an API service designed to manage mapping definitions between various data models. Its primary function is to enable the creation, retrieval, and updating of mapping definitions, which are used to transform data between different formats and systems.

Hosted Environments​

Key Features​

  • Stores mapping definitions for converting data between source and target models.
  • Supports mapping of both simple and complex objects.
  • Maintains mappable claim models.
  • Enables creation of definitions for:
    • ConversationHistory-to-Claim (used in Atlas Editor, executed by Tellus or Chatbot)
    • Claim-to-SubmissionEvent (executed by SubmissionAPI)

Main Components​

MAPI​

  • Central repository for mapping definitions.
  • Allows creation and management of mapping rules for different data flows.
  • Supports flexible mapping logic for various business scenarios.

MAPI Consumers and Their Roles​

Atlas Editor​

  • Client application for creating and updating mapping definitions in MAPI.
  • Enables users to define how ConversationHistory is mapped to Claim models.
  • Provides UI for managing mapping logic and models.

Chatbot​

  • Consumes mapping definitions from MAPI to transform ConversationHistory into Claim objects.
  • Adds summary and files as separate properties to dynamic claims.
  • Executes mapping logic defined in MAPI for conversational data.

NServiceBus​

  • Orchestrates data flow by consuming mapping definitions from MAPI.
  • Processes dynamic send data commands and passes mapped data to Submission API.
  • Registers files and summary information as part of the data payload.

Submission API​

  • Receives dynamic claim data from upstream applications.
  • Uses mapping definitions from MAPI to convert source data into SubmissionEvent format.
  • Ensures correct transformation and delivery of data for submission events.

Data Flow Diagram​

Test Data Example​

Test flow with hardcoded FI Pri Property mapping: https://atest.editor.atlas.ifext.biz/board/13a84593-0052-4da7-9ed2-7a76a9c83b1d/ek_property_mapi Below is an example test map for ConversationHistory-to-Claim (FI Private Property) in JSON format:

{
"map": {
"Source": "ConversationHistory",
"Target": "Claim",
"Version": "v1",
"ValueMaps": {
"CustomerServiceLanguage": null,
"ConversationId": null,
"SubmissionChannel": null,
"CompensationClaimedElsewhere": "[compensationClaimedElsewhereElsewhere]"
},
"ObjectMaps": {
"Reporter": {
"Source": "Reporter",
"Target": "ReporterTarget",
"Version": "v1",
"ValueMaps": {
"SocialSecurityNumber": "[ReportedPolicyHolderPersonId]",
"Firstname": "[ReportedPolicyHolderFirstName]",
"Surname": "[ReportedPolicyHolderLastName]",
"PhoneNumber": "[ReportedPolicyHolderPhoneNumber]",
"Email": "[ReportedPolicyHolderEmailAddress]",
"StreetAddress": "[ReportedPolicyHolderStreetAddress]",
"PostCode": "[ReportedPolicyHolderPostalCode]",
"City": "[ReporterCity]",
"Country": "[ReportedPolicyHolderCountry]"
},
"ObjectMaps": {},
"ListMaps": {}
},
"Incident": {
"Source": "Incident",
"Target": "IncidentTarget",
"Version": "v1",
"ValueMaps": {
"Type": "[IncidentIncidentType]",
"HasHappenedWhileTraveling": "[IncidentIsTravel]",
"Date": "[IncidentIncidentDate]",
"Description": "[IncidentCircumstanceDescr]",
"PoliceReport": "[PoliceReportID]",
"AreContactAndInsuranceInformationTransferToPartnerAllowed": "true",
"HappenedAtHome": "[IncidentHomeOrNot]",
"FireReason": "[FireReason]",
"LeakageReason": "[LeakageReason]",
"LeakageObject": "[LeakageObject]",
"StormReason": "[StormReason]",
"BreakageObject": "[BrakageObject]",
"BreakageReason": "[BreakageReason]",
"BreakageAnimalType": "[BreakageAnimalType]",
"WhenDidTravelStart": "[IncidentTravelStartDate]"
},
"ObjectMaps": {
"Address": {
"Source": "Address",
"Target": "AddressTarget",
"Version": "v1",
"ValueMaps": {
"Country": "[IncidentCountryCode]",
"MunicipalityCode": "[IncidentMunicipalityCode]",
"MunicipalityName": "[IncidentMunicipality.text]",
"Street": "[IncidentIncidentPlace]",
"City": "[IncidentMunicipalityCode]",
"PostalCode": "[IncidentIncidentPostalCode.code]",
"Description": "[IncidentCircumstanceDescr]"
},
"ObjectMaps": {
"GeoLocation": {
"Source": "GeoLocation",
"Target": "GeoLocationTarget",
"Version": "v1",
"ValueMaps": {
"Longitude": null,
"Latitude": null
},
"ObjectMaps": {},
"ListMaps": {}
}
},
"ListMaps": {}
},
"Theft": {
"Source": "Theft",
"Target": "TheftTarget",
"Version": "v1",
"ValueMaps": {
"LastSeen": "[IncidentTheftDateLastSeen]",
"LastSeenLocationDescription": "[IncidentTheftPlaceLastSeenDescr]",
"WhenNoticed": "[IncidentTheftDateNoticed]"
},
"ObjectMaps": {},
"ListMaps": {}
}
},
"ListMaps": {}
},
"PolicyHolder": {
"Source": "PolicyHolder",
"Target": "PolicyHolderTarget",
"Version": "v1",
"ValueMaps": {
"SocialSecurityNumber": "[ReportedPolicyHolderPersonId]",
"Country": "[ReportedPolicyHolderCountry]",
"Firstname": "[ReportedPolicyHolderFirstName]",
"Surname": "[ReportedPolicyHolderLastName]",
"Address": "[ReportedPolicyHolderStreetAddress]",
"PostCode": "[ReportedPolicyHolderPostalCode]",
"City": "[ReportedPolicyHolderCity]",
"Phone": "[ReportedPolicyHolderPhoneNumber]",
"Email": "[ReportedPolicyHolderEmailAddress]"
},
"ObjectMaps": {},
"ListMaps": {}
},
"SelectedPolicy": {
"Source": "SelectedPolicy",
"Target": "SelectedPolicyTarget",
"Version": "v1",
"ValueMaps": {
"PolicyNumber": null,
"InsuredObjectId": null,
"PolicySystem": null,
"InsuredObjectType": null,
"CoverType": null
},
"ObjectMaps": {},
"ListMaps": {}
},
"AdditionalData": {
"Source": "AdditionalData",
"Target": "AdditionalDataTarget",
"Version": "v1",
"ValueMaps": {},
"ObjectMaps": {},
"ListMaps": {}
}
},
"ListMaps": {
"Claimants": {
"SourcePath": null,
"ValueExpression": null,
"ItemMapping": {
"Source": "ClaimantsItem",
"Target": "ClaimantsTarget",
"Version": "v1",
"ValueMaps": {
"SocialSecurityNumber": "[CompensationBeneficiaryPersonId]",
"Country": "Finland",
"Firstname": "[CompensationBeneficiaryFirstName]",
"Surname": "[CompensationBeneficiaryLastName]",
"Address": "[CompensationBeneficiaryStreetAddress]",
"PostCode": "[CompensationBeneficiaryPostalCode]",
"City": "[CompensationBeneficiaryCity]",
"MunicipalityCode": null,
"MunicipalityName": null,
"Phone": "[CompensationBeneficiaryPhoneNumber]",
"Email": "[CompensationBeneficiaryEmailAddress]",
"BankAccountNumber": "[CompensationBankAccountNumber.Iban]"
},
"ObjectMaps": {},
"ListMaps": {}
}
},
"LossObjects": {
"SourcePath": "ItemList",
"ValueExpression": null,
"ItemMapping": {
"Source": "LossObjectsItem",
"Target": "LossObjectsTarget",
"Version": "v1",
"ValueMaps": {
"ClaimObjectType": "IncidentLossObjectsObjectType",
"Make": "IncidentLossObjectsBrand",
"Model": "IncidentLossObjectsModel",
"Description": "IncidentLossObjectsDeviceDescription",
"Age": "IncidentLossObjectsYearOfPurchace",
"IsScreenDamaged": "IncidentLossObjectsIsScreenDamaged",
"HasFoodBeenDamaged": "IncidentLossObjectsObjectTypeFood",
"OtherItemDamaged": "IncidentLossObjectsOtherModel",
"HasBeenPurchasedAsUsed": "IncidentLossUsedPhone",
"UsedPhonePurchaseLocation": "UsedPhonePurchaseLocation",
"BuildingType": "BuildingType",
"BuildingObjectType": "ObjectType",
"Quantity": "IncidentLossObjectsQuantity",
"CustomerReportingOrder": null,
"IsLeased": "LeasingOrEmployment"
},
"ObjectMaps": {
"Owner": {
"Source": "Owner",
"Target": "OwnerTarget",
"Version": "v1",
"ValueMaps": {
"Name": "IncidentLossObjectsOwnerName",
"Type": "IncidentLossObjectsOwner",
"IsSameHouseHold": "IncidentLossObjectsOwnerIsSameHousehold",
"PersonId": "ItemOwnerSSN"
},
"ObjectMaps": {},
"ListMaps": {}
},
"PriceAsNew": {
"Source": "PriceAsNew",
"Target": "PriceAsNewTarget",
"Version": "v1",
"ValueMaps": {
"Amount": "IncidentLossObjectsNewPurchaseValue",
"Currency": null
},
"ObjectMaps": {},
"ListMaps": {}
},
"Repair": {
"Source": "Repair",
"Target": "RepairTarget",
"Version": "v1",
"ValueMaps": {
"Type": "IncidentLossObjectsRepairCostEstimatedOnType"
},
"ObjectMaps": {
"Cost": {
"Source": "Cost",
"Target": "CostTarget",
"Version": "v1",
"ValueMaps": {
"Amount": "IncidentLossObjectsRepairCosts",
"Currency": null
},
"ObjectMaps": {},
"ListMaps": {}
}
},
"ListMaps": {}
},
"PurchasePriceAsUsed": {
"Source": "PurchasePriceAsUsed",
"Target": "PurchasePriceAsUsedTarget",
"Version": "v1",
"ValueMaps": {
"Amount": "IncidentLossObjectsNewPurchaseValueFood",
"Currency": null
},
"ObjectMaps": {},
"ListMaps": {}
}
},
"ListMaps": {
"DamagedParts": {
"SourcePath": null,
"ValueExpression": null,
"ItemMapping": null
},
"StolenParts": {
"SourcePath": null,
"ValueExpression": null,
"ItemMapping": null
}
}
}
}
}
}
}

Possible workflow​

  1. Create model in MAPI models (via PR) see detailed workflow
  2. Generate MAPI definition for history-to-model using MAPI API endpoint
  3. Create MAPI definition for model-to-submission event using MAPI API endpoint
  4. Update the history-to-model map with history item references using Atlas editor
  5. Submit your claim to orchestrator.

Infrastructure​

  • Defined using Terraform.
  • Includes PR validation, CI, and CD pipelines managed in Azure DevOps.

Future ideas​

Daisy chaining mappings​

DaisyChaining