Provider Bulk Sync

Mappings

OneKey to Salesforce Mapping

This page describes how IQVIA OneKey fields map to Salesforce objects during Provider Bulk Sync. Use it to understand Individual, Workplace, and Activity field mappings, including transformations and filters.

Everything below is the out-of-the-box mapping that ships with the connector and applies to every record by default. It is a single generic mapping, not per country. To change what is mapped, add code-value translations, or apply per-country rules, see the Extend Connector guide; you make those changes in the mappingTemplates/download files of the OneKey System API, not in the flows.

Individual Mapping

This section shows how OneKey Individual (HCP) records map to Salesforce objects.

A OneKey Individual represents a single healthcare professional. Each record carries the person's profile (name, gender, title, birth year, status) along with related education, languages, NPIs, specialties, business licenses, addresses, phones, and relations to other HCPs. These map to the Salesforce Person Account and its related records, each detailed in the subsections below: Account, PersonEducation, PersonLanguage, HealthcareProvider, HealthcareProviderNpi, CareSpecialty, HealthcareProviderSpecialty, BusinessLicense, ContactPointAddress, ContactPointPhone, and ProviderAffiliation.

Source DWL: individualMapper.dwl. Functions: ind_base_mapping, ind_language_mapping, ind_hcp_mapping, ind_hcp_npi_mapping, ind_person_education_mapping, ind_care_specialty_mapping, ind_healthcare_specialty_mapping, ind_business_license_mapping, ind_address_mapping, ind_relations_mapping.

Account Entity

These fields map OneKey Individual data to the Salesforce Person Account.

Salesforce FieldIQVIA OneKey FieldsTransformationMandatoryTransformation with ExampleFilters
SourceSystemIdentifierindividual.individualEidYesYesExternal upsert key (ExternalFieldValue = okid); e.g. "WFR123"Record skipped entirely if the OneKey ID is empty
LastNameindividual.lastNameNoNoDirect mapping. "Doe" → "Doe"Written only if(!isEmpty(record.lastName))
FirstNameindividual.firstNameNoNoDirect mapping. "John" → "John"Written only if(!isEmpty(record.firstName))
PersonGenderindividual.genderCodeYesNoCode→value translation, Code "GEN": "M"→"Male", "F"→"Female"Written only if(!isEmpty(record.genderCode))
PersonTitleindividual.titleLabelNoNoDirect mapping. "Dr." → "Dr."Written only if(!isEmpty(record.titleLabel))
PersonMobilePhoneindividual.telephones[typeCode=="1",rank==1].callNumberForDisplayNoNoDirect mapping of selected number (default null)filter typeCode=="1" and rank==1 → primary mobile number
PersonHomePhoneindividual.telephones[typeCode=="1",rank==2].callNumberForDisplayNoNoDirect mapping of selected number (default null)filter typeCode=="1" and rank==2 → secondary (home) number
Faxindividual.telephones[typeCode=="2",rank==1].callNumberForDisplayNoNoDirect mapping of selected number (default null)filter typeCode=="2" and rank==1 → primary fax number
PersonBirthdateindividual.birthYearYesNoAppends "-01-01" to the year. "1980" → "1980-01-01"Written only if(!isEmpty(record.birthYear))
IsActiveindividual.statusCodeYesYesBoolean derivation: !(statusCode == INACTIVE_STATUS_CODE). "9" → false; "3" → trueNone
RecordTypeIdconfig sfOrg.personAccountRecordId (not from OneKey)YesYesConstant from config = Person Account record type IDNone

PersonEducation Entity

These fields map education (study-diploma) ADA entries on the Individual to PersonEducation records.

Salesforce FieldIQVIA OneKey FieldsTransformationMandatoryTransformation with ExampleFilters
Identifierindividual.ada[].code (okid + code)YesYesConcatenation okid ++ "_" ++ item.code. "WFR123","MD" → "WFR123_MD"filter listCode=="SD" and !isEmpty(code) → education (study-diploma) ada only; block skipped if none
HealthcareProviderIdHCP reference (okid)YesYesReference link "@{ref_HealthcareProvider_<okid>.id}" → HCP Idper-education item
Nameindividual.ada[].codeCorporateLabel / .codeYesYescodeCorporateLabel default code. e.g. label missing, code "MD" → "MD"per-education item
IdentifierIssuerindividual.ada[].codeLabelNoNoDirect mappingWritten only if(!isEmpty(item.codeLabel))
GraduationDateindividual.ada[].thesisYearNoNoDirect mappingWritten only if(!isEmpty(item.thesisYear))
ProgramNameindividual.ada[].codeCorporateLabel / .codeYesYescodeCorporateLabel default codeper-education item
EducationLevelindividual.ada[].codeNoYesDirect mappingper-education item
IsActiveindividual.ada[]._isDeleted_YesYesBoolean: !(!isEmpty(_isDeleted_) and _isDeleted_). deleted → falseper-education item
Statusderived from education active flagYesYesConditional: active → "Verified" else "Inactive"per-education item

PersonLanguage Entity

These fields map the Individual's preferred language to a PersonLanguage record when a preferred language is present.

Salesforce FieldIQVIA OneKey FieldsTransformationMandatoryTransformation with ExampleFilters
SourceSystemIdentifierindividual.individualEid (okid)NoNoExternal upsert key = okid (direct)Whole block only created if(!isEmpty(individual.preferredLanguageEID))
IndividualIdAccount reference (okid)YesNoReference link "@{ref_Account_<okid>.id}" → Account IdBlock only if preferredLanguageEID not empty
Languageindividual.preferredLanguageEIDYesNoCode→value translation, Code "WLN": "en"→"English"Block only if preferredLanguageEID not empty
Rankconstant 1YesNoConstant value 1 (rank defaulted to 1)Block only if preferredLanguageEID not empty

HealthcareProvider Entity

These fields map the OneKey Individual to the related HealthcareProvider record.

Salesforce FieldIQVIA OneKey FieldsTransformationMandatoryTransformation with ExampleFilters
SourceSystemIdentifierindividual.individualEid (okid)NoYesExternal upsert key = okid (direct)None
AccountIdAccount reference (okid)YesYesReference link "@{ref_Account_<okid>.id}" → Account IdNone
Nameindividual.firstName, individual.lastNameYesNoIf firstName present firstName ++ " " ++ lastName else lastName. "John","Doe" → "John Doe"Written only if(!isEmpty(record.lastName))
SourceSystemModifiedDateindividual.updateDateNoNoDirect mappingWritten only if(!isEmpty(record.updateDate))
ProfessionalTitleindividual.titleCodeYesNoCode→value translation, Code "TIT" via referCodesMapping serviceWritten only if(!isEmpty(record.titleCode))
IsPrivacyLawEnabledrecord.isPrivacyLaw (sibling of individual)NoNoDirect mapping of booleanWritten only if(!isEmpty(isPrivacyLaw))
Statusindividual.statusCodeYesNoCode→value translation, Code "STA": "0"→"Pending", "3"→"Active", "9"→"Inactive"Written only if(!isEmpty(record.statusCode))
IsPrimaryProviderconstant trueYesYesConstant true (default)None
IsActiveindividual.statusCodeYesYesBoolean derivation: !(statusCode == INACTIVE_STATUS_CODE). "9" → falseNone
ProviderTypeindividual.typeCodeYesNoCode→value translation, Code "TYP": "MX"→"Medical Assistant", "P"→"Pharmacist", "D"→"Dentist"Written only if(!isEmpty(record.typeCode))

HealthcareProviderNpi Entity

These fields map the Individual's primary NPI external key to HealthcareProviderNpi.

Salesforce FieldIQVIA OneKey FieldsTransformationMandatoryTransformation with ExampleFilters
SourceSystemIdentifierindividual.externalKeys[].value (okid + value)YesYesConcatenation okid ++ "_" ++ item.value. "IND123","1234567890" → "IND123_1234567890"filter typeCode=="NPI" and number ~= 1 → primary NPI external key only; block skipped if no NPI
AccountIdAccount reference (okid)YesYesReference link "@{ref_Account_<okid>.id}" → Account Idper-NPI item
NpiTypeconstant "Individual" (SALESFORCE_NPI_TYPE)YesYesConstant "Individual"per-NPI item
Nameindividual.externalKeys[].valueNoYesDirect mapping of NPI valueper-NPI item
Npiindividual.externalKeys[].valueYesYesConditional: if record statusCode == INACTIVE → "" else item.value. Active "1234567890" → "1234567890"; inactive → ""per-NPI item; blanked when individual inactive
AccountNpiTypeconstant "Type1" (SALESFORCE_NPI_ACCOUNT_TYPE)YesYesConstant "Type1"per-NPI item
IsActiveindividual.externalKeys[]._isDeleted_ / .statusCodeYesYesBoolean: if _isDeleted_ present !_isDeleted_ else !(statusCode == INACTIVE)per-NPI item

CareSpecialty Entity

These fields upsert CareSpecialty master data from the Individual's specialty ADA codes.

Salesforce FieldIQVIA OneKey FieldsTransformationMandatoryTransformation with ExampleFilters
SpecialtyCodeindividual.ada[].codeYesYesExternal key = item.code (direct; no CodeValues for IND_SP_CODE)filter listCode=="SP" and !isEmpty(code) → specialty ada only. masterData (upserted once)
Nameindividual.ada[].codeCorporateLabel / .codeYesYescodeCorporateLabel default codeper-specialty item
SpecialtyTypeindividual.ada[].codeCorporateLabel / .codeYesYescodeCorporateLabel default codeper-specialty item

HealthcareProviderSpecialty Entity

These fields link the Individual Account to CareSpecialty master records through HealthcareProviderSpecialty.

Salesforce FieldIQVIA OneKey FieldsTransformationMandatoryTransformation with ExampleFilters
SourceSystemIdentifierindividual.ada[].code (okid + code)YesYesConcatenation okid ++ "_" ++ item.codefilter listCode=="SP" and !isEmpty(code); distinctBy ExternalFieldValue → dedupe specialty links
SpecialtyIdCareSpecialty master reference (item.code)YesYesReference link "@{md_CareSpecialty_<code>}" → CareSpecialty Idper-specialty item
AccountIdAccount reference (okid)YesYesReference link "@{ref_Account_<okid>.id}" → Account Idper-specialty item
Nameindividual.ada[].codeCorporateLabel / .codeYesYescodeCorporateLabel default codeper-specialty item
IsActiveindividual.ada[]._isDeleted_YesYesBoolean: !(!isEmpty(_isDeleted_) and _isDeleted_)per-specialty item
Rankindividual.ada[].rankNoNoDirect mappingWritten only if(!isEmpty(item.rank))

BusinessLicense Entity

These fields map accepted OneKey license external keys to BusinessLicense records.

Salesforce FieldIQVIA OneKey FieldsTransformationMandatoryTransformation with ExampleFilters
Identifierindividual.externalKeys[].value (value + okid)YesYesConcatenation item.value ++ "_" ++ okidACCEPTED_LICENSES contains typeCode and !isEmpty(value) → only configured/accepted license types; distinctBy ExternalFieldValue → dedupe
Nameindividual.externalKeys[].valueNoYesDirect mappingper-license item
LicenseNumberindividual.externalKeys[].valueNoYesDirect mappingper-license item
AccountIdAccount reference (okid)YesYesReference link "@{ref_Account_<okid>.id}" → Account Idper-license item
HealthcareProviderIdHCP reference (okid)YesYesReference link "@{ref_HealthcareProvider_<okid>.id}" → HCP Idper-license item
SourceSystemUpdateDateindividual.externalKeys[].updateDateNoNoDirect mappingWritten only if(!isEmpty(item.updateDate))
LicenseClassindividual.externalKeys[].typeCode (+ typeCorporateLabel)YesNoConcatenation: typeCode ++ " - " ++ typeCorporateLabel (label optional). "DEA","State License" → "DEA - State License"Written only if(!isEmpty(item.typeCode))
Statusindividual.externalKeys[].statusCodeYesNoCode→value translation, Code "STA": "0"→"Draft", "3"→"Verified", "9"→"Inactive"Written only if(!isEmpty(item.statusCode))
ContactPointAddressIdindividual.externalKeys[].addresses[rank==1].address.addressEidYesNoReference link "@{ref_ContactPointAddress_<okid>_lic_<addressEid>}.id" → license address IdWritten only if(!isEmpty(item.address) and !isEmpty(addresses filter rank==1))
ComplianceScopeindividual.externalKeys[].typeCodeYesNoCode→value translation, Code "LIC": "DEA"→"Address", "SLN"→"JurisdictionState", "OH_TDDD"→"StateDistributorLicense"Written only if(mapComplianceScope(typeCode)) i.e. typeCode ∈ LICENSES_WITH_COMPLIANCE_SCOPE
IsActiveindividual.externalKeys[]._isDeleted_ / .statusCodeYesYesisActive(item): if _isDeleted_ present !_isDeleted_ else !(statusCode == INACTIVE)per-license item

ContactPointAddress Entity

These fields map Individual addresses (including unmatched license addresses) to ContactPointAddress.

Salesforce FieldIQVIA OneKey FieldsTransformationMandatoryTransformation with ExampleFilters
SourceSystemIdentifierindividual.individualAddresses[].address.addressEid (okid + eid)YesYesConcatenation okid ++ "_" ++ address.addressEidBlock skipped if no addresses. (Also invoked with key "lic" for unmatched license addresses)
ParentIdAccount reference (okid)YesYesReference link "@{ref_Account_<okid>.id}" → Account Idper-address item
Nameindividual.individualAddresses[].address.addressShortLabel / .addressEidYesYesaddressShortLabel default addressEidper-address item
IsPrimaryindividual.individualAddresses[].rank, .typeCodeYesNoBoolean derivation: (rank == 1) and (typeCode == "P")Written only if(!isEmpty(item.rank))
Cityindividual.individualAddresses[].address.postalTownReference.villageLabelNoNoDirect mappingWritten only if(!isEmpty(villageLabel))
StateCodeindividual...postalTownReference.subdivisions[subdivisionType=="SUB.3"][0].longLocalizedLabelNoNoDirect mapping of selected labelfilter subdivisionType=="SUB.3" → state/department subdivision level
PostalCodeindividual.individualAddresses[].address.longPostalCodeNoNoDirect mappingWritten only if(!isEmpty(longPostalCode))
Streetindividual.individualAddresses[].address.addressLongLabelNoNoDirect mappingWritten only if(!isEmpty(addressLongLabel))
Longitudeindividual...address.geocodingAddresses[geoCodingSystemCode=="W"][0].longitudeNoNoDirect mapping of selected valuefilter geoCodingSystemCode=="W" → WGS geocoding system only
Latitudeindividual...address.geocodingAddresses[geoCodingSystemCode=="W"][0].latitudeNoNoDirect mapping of selected valuefilter geoCodingSystemCode=="W" → WGS geocoding system only
CountryCodeindividual...address.postalTownReference.countryNoNoDirect mappingWritten only if(!isEmpty(country))
ContactPointPhoneIdindividual.individualAddresses[].telephones[rank==1]._isDelete_YesNoConditional reference: if _isDelete_ → null else "@{ref_ContactPointPhone_<eid>_<key>_<okid>.id}"Written only if telephones present and (number present or _isDelete_)
IsActiveindividual.individualAddresses[]._isDeleted_YesYesBoolean: !(!isEmpty(_isDeleted_) and _isDeleted_)per-address item

ContactPointPhone Entity

These fields map the primary telephone on each Individual address to ContactPointPhone.

Salesforce FieldIQVIA OneKey FieldsTransformationMandatoryTransformation with ExampleFilters
TelephoneNumberindividual.individualAddresses[].telephones[rank==1].callNumberForDisplayNoNoDirect mapping of selected numberfilter rank==1 → primary phone of the address; record (Method POST) only created if number present
IsPrimaryconstant trueYesNoConstant trueCreated only when a primary telephone number exists

ProviderAffiliation Entity

These fields map Individual relation records to soft ProviderAffiliation links.

Salesforce FieldIQVIA OneKey FieldsTransformationMandatoryTransformation with ExampleFilters
attributesconstant { "type": "ProviderAffiliation" }YesYesConstant Composite-API type marker; stripped from entities, kept in compositeRequests.relationsBlock skipped if no relations
SourceSystemIdentifierindividual.relations[].onekeyEid, .linkCodeYesYesConcatenation okid ++ "_" ++ onekeyEid ++ "_" ++ (linkCode default "0")per-relation item
AccountIdAccount reference (okid)YesYesReference link "@{ref_Account_<okid>.id}" → Account Idper-relation item
RelatedAccountIdindividual.relations[].onekeyEidYesYesReference link "@{ref_RelatedAccount_<onekeyEid>.id}" → related Account Idper-relation item
AffiliationTypeconstant "Soft" (SALESFORCE_SOFT_AFFILIATION_TYPE)YesYesConstant "Soft" (all individual relations treated as soft)per-relation item
Roleindividual.relations[].linkCodeYesYesCode→value translation, Code "TIH" via referCodesMapping serviceper-relation item
EffectiveStartDateindividual.relations[].beginValidDateNoNoDirect mappingWritten only if(!isEmpty(item.beginValidDate))
EffectiveEndDateindividual.relations[].endValidDateNoNoDirect mappingWritten only if(!isEmpty(endValidDate) and year != 9999) → excludes 9999 (open-ended) sentinel
IsPrimaryconstant falseYesYesConstant false (primary relations only arrive via activity)per-relation item
InfluenceTypeconstant "Unidirectional"YesYesConstant "Unidirectional"per-relation item
IsActiveindividual.relations[]._isDeleted_ / .statusCodeYesYesisActive(item): if _isDeleted_ present !_isDeleted_ else !(statusCode == INACTIVE)per-relation item

Workplace Mapping

This section shows how OneKey Workplace (HCO) records map to Salesforce objects.

A OneKey Workplace represents a single healthcare organization, such as a hospital, clinic, or pharmacy. Each record carries the organization's profile (name, type, status, sector, licensed beds) along with related NPIs, specialties, business licenses, addresses, phones, opening hours, and relations to other HCOs. These map to the Salesforce Business Account and its related records, each detailed in the subsections below: Account, HealthcareProvider, HealthcareProviderNpi, CareSpecialty, HealthcareProviderSpecialty, BusinessLicense, ContactPointAddress, ContactPointPhone, ContactPointBestContactTime, and ProviderAffiliation.

Source DWL: workplaceMapper.dwl. Functions: wkp_base_mapping, wkp_hcp_mapping, wkp_hcp_npi_mapping, wkp_care_specialty_mapping, wkp_healthcare_specialty_mapping, wkp_business_license_mapping, wkp_address_mapping, wkp_relations_mapping, wkp_address_open_hour_mapping.

Account Entity

These fields map OneKey Workplace data to the Salesforce Business Account.

Salesforce FieldIQVIA OneKey FieldsTransformationMandatoryTransformation with ExampleFilters
SourceSystemIdentifierworkplace.workplaceEid (Bulk: default workplace.onekeyEid)NoYesDirect mapping of the resolved okid (external upsert key, ExternalFieldValue). "WKP123" → "WKP123". okid resolution applies a Bulk-path default workplace.onekeyEid fallback upstreamRecord skipped entirely if okid empty
Industryworkplace.ada[listCode=='PPA',rank~=1][0].valueNoNoDirect mapping of selected valuefilter listCode=='PPA' and rank ~= 1 → primary sector-1 (PPA) code
Phoneworkplace.telephones[typeCode=="1",rank==1].callNumberForDisplayNoNoDirect mapping of selected number (default null)filter typeCode=="1" and rank==1 → primary fixed line (var named telMobile, mapped to Phone)
Faxworkplace.telephones[typeCode=="2",rank==1].callNumberForDisplayNoNoDirect mapping of selected number (default null)filter typeCode=="2" and rank==1 → primary fax
Nameworkplace.usualNameNoNoDirect mappingWritten only if(!isEmpty(workplace.usualName))
IsActiveworkplace.statusCodeYesYesBoolean derivation: !(statusCode == INACTIVE_STATUS_CODE). "9" → falseNone
RecordTypeIdconfig sfOrg.businessAccountRecordId (not from OneKey)YesYesConstant from config = Business Account record type IDNone

HealthcareProvider Entity

These fields map the OneKey Workplace to the related HealthcareProvider record (the HCO's HealthcareFacility view).

Salesforce FieldIQVIA OneKey FieldsTransformationMandatoryTransformation with ExampleFilters
SourceSystemIdentifierworkplace.workplaceEid (okid)NoYesExternal upsert key = okid (direct)None
AccountIdAccount reference (okid)YesYesReference link "@{ref_Account_<okid>.id}" → Account IdNone
SourceSystemModifiedDateworkplace.updateDateNoNoDirect mappingWritten only if(!isEmpty(workplace.updateDate))
Statusworkplace.statusCodeYesNoCode→value translation, Code "STA": "0"→"Pending", "3"→"Active", "9"→"Inactive"Written only if(!isEmpty(workplace.statusCode))
TotalLicensedBedsworkplace.bedFacts[type=="TO",subType=="LIC_BED"][0].bedNumberNoNoDirect mapping of selected bed numberfilter type=="TO" and subType=="LIC_BED" → licensed-bed total fact
OperatingCountryCodeworkplace.workplaceAddresses[typeCode=='P',rank!=1][0].address.postalTownReference.countryNoNoDirect mapping of selected countryfilter typeCode=='P' and rank != 1 → non-primary postal address country
SourceSystemconstant "OneKey"YesYesConstant "OneKey"None
Nameworkplace.usualNameNoNoDirect mapping (HCP.Name)Written only if(!isEmpty(workplace.usualName))
IsPrimaryProviderconstant trueYesYesConstant true (default)None
IsActiveworkplace.statusCodeYesYesBoolean derivation: !(statusCode == INACTIVE_STATUS_CODE)None
ProviderTypeworkplace.typeCodeYesNoCode→value translation, Code "TET": "22"→"Hospital", "39"→"Pharmacy", "30"→"Laboratory"Written only if(!isEmpty(workplace.typeCode))
ProviderClassworkplace.activityLocationCodeYesNoCode→value translation, Code "LEX": "H"→"Hospital", "F"→"Pharmacy", "O"→"Laboratory"Written only if(!isEmpty(workplace.activityLocationCode))

HealthcareProviderNpi Entity

These fields map the Workplace's primary NPI external key to HealthcareProviderNpi.

Salesforce FieldIQVIA OneKey FieldsTransformationMandatoryTransformation with ExampleFilters
SourceSystemIdentifierworkplace.externalKeys[].value (okid + value)YesYesConcatenation okid ++ "_" ++ item.valuefilter typeCode=="NPI" and number ~= 1 → primary NPI key; block skipped if no NPI
AccountIdAccount reference (okid)YesYesReference link "@{ref_Account_<okid>.id}" → Account Idper-NPI item
NpiTypeconstant "Organization" (SALESFORCE_NPI_TYPE)YesYesConstant "Organization"per-NPI item
Nameworkplace.externalKeys[].valueNoYesDirect mapping of NPI valueper-NPI item
Npiworkplace.externalKeys[].valueYesYesConditional: if record statusCode == INACTIVE → "" else item.valueper-NPI item; blanked when workplace inactive
AccountNpiTypeconstant "Type2" (SALESFORCE_NPI_ACCOUNT_TYPE)YesYesConstant "Type2"per-NPI item
IsActiveworkplace.externalKeys[]._isDeleted_ / .statusCodeYesYesisActive(item): if _isDeleted_ present !_isDeleted_ else !(statusCode == INACTIVE)per-NPI item

CareSpecialty Entity

These fields upsert CareSpecialty master data from the Workplace's specialty ADA codes.

Salesforce FieldIQVIA OneKey FieldsTransformationMandatoryTransformation with ExampleFilters
SpecialtyCodeworkplace.ada[].codeNoYesExternal key = item.code (direct; no CodeValues for WKP_SP_CODE)filter listCode=="SP" and !isEmpty(code) → specialty ada only. masterData
Nameworkplace.ada[].codeCorporateLabel / .codeYesYescodeCorporateLabel default codeper-specialty item
SpecialtyTypeworkplace.ada[].codeCorporateLabel / .codeYesYescodeCorporateLabel default codeper-specialty item

HealthcareProviderSpecialty Entity

These fields link the Workplace Account to CareSpecialty master records through HealthcareProviderSpecialty.

Salesforce FieldIQVIA OneKey FieldsTransformationMandatoryTransformation with ExampleFilters
SourceSystemIdentifierworkplace.ada[].code (okid + code)YesYesConcatenation okid ++ "_" ++ item.codefilter listCode=="SP" and !isEmpty(code); distinctBy ExternalFieldValue → dedupe
SpecialtyIdCareSpecialty master reference (item.code)YesYesReference link "@{md_CareSpecialty_<code>}" → CareSpecialty Idper-specialty item
AccountIdAccount reference (okid)YesYesReference link "@{ref_Account_<okid>.id}" → Account Idper-specialty item
Nameworkplace.ada[].codeCorporateLabel / .codeYesYescodeCorporateLabel default codeper-specialty item
IsActiveworkplace.ada[]._isDeleted_YesYesBoolean: !(!isEmpty(_isDeleted_) and _isDeleted_)per-specialty item
Rankworkplace.ada[].rankNoNoDirect mappingWritten only if(!isEmpty(item.rank))

BusinessLicense Entity

These fields map accepted OneKey Workplace license external keys to BusinessLicense records.

Salesforce FieldIQVIA OneKey FieldsTransformationMandatoryTransformation with ExampleFilters
Identifierworkplace.externalKeys[].value (value + okid)YesYesConcatenation item.value ++ "_" ++ okidACCEPTED_LICENSES contains typeCode and !isEmpty(value) → accepted license types only; distinctBy ExternalFieldValue → dedupe
Nameworkplace.externalKeys[].valueNoYesDirect mappingper-license item
LicenseNumberworkplace.externalKeys[].valueNoYesDirect mappingper-license item
LicenseClassworkplace.externalKeys[].typeCode (+ typeCorporateLabel)YesNoConcatenation typeCode ++ " - " ++ typeCorporateLabel (label optional)Written only if(!isEmpty(item.typeCode))
Statusworkplace.externalKeys[].statusCodeYesNoCode→value translation, Code "STA": "0"→"Pending", "3"→"Active", "9"→"Inactive"Written only if(!isEmpty(item.statusCode))
AccountIdAccount reference (okid)YesYesReference link "@{ref_Account_<okid>.id}" → Account Idper-license item
PeriodStartworkplace.externalKeys[].issuedDateNoNoDirect mappingWritten only if(!isEmpty(item.issuedDate))
PeriodEndworkplace.externalKeys[].expirationDateYesNoConditional: if == "4000-12-31T23:59:59Z" → "4000-12-31T00:00:00Z" else passthroughWritten only if(!isEmpty(item.expirationDate)) → normalises OneKey "never expires" sentinel
Issuerworkplace.externalKeys[].entityNameNoNoDirect mappingWritten only if(!isEmpty(item.entityName))
ContactPointAddressIdworkplace.externalKeys[].addresses[rank~=1][0].address.addressEidYesNoReference link "@{ref_ContactPointAddress_<okid>_lic_<addressEid>.id}" → license address IdWritten only if(!isEmpty(item.address) and addresses[rank~=1] present)
ComplianceScopeworkplace.externalKeys[].typeCodeYesNoCode→value translation, Code "LIC": "DEA"→"Address", "SLN"→"JurisdictionState", "OH_TDDD"→"StateDistributorLicense"Written only if(mapComplianceScope(typeCode)) i.e. typeCode ∈ LICENSES_WITH_COMPLIANCE_SCOPE
IsActiveworkplace.externalKeys[]._isDeleted_ / .statusCodeYesYesisActive(item) booleanper-license item

ContactPointAddress Entity

These fields map Workplace addresses (including unmatched license addresses) to ContactPointAddress.

Salesforce FieldIQVIA OneKey FieldsTransformationMandatoryTransformation with ExampleFilters
SourceSystemIdentifierworkplace.workplaceAddresses[].address.addressEid (okid + eid)YesYesConcatenation okid ++ "_" ++ address.addressEidBlock skipped if no addresses. (Also invoked with key "lic" for unmatched license addresses)
Nameworkplace.workplaceAddresses[].address.addressShortLabel / .addressEidYesYesaddressShortLabel default addressEidper-address item
ParentIdAccount reference (okid)YesYesReference link "@{ref_Account_<okid>.id}" → Account Idper-address item
IsPrimaryworkplace.workplaceAddresses[].typeCode, .rankYesYesBoolean derivation: (typeCode == "P" and rank == 1) (always written, unlike Individual)per-address item
Cityworkplace.workplaceAddresses[].address.postalTownReference.villageLabelNoNoDirect mappingWritten only if(!isEmpty(villageLabel))
StateCodeworkplace...postalTownReference.subdivisions[subdivisionType=='SUB.3'][0].longLocalizedLabelNoNoDirect mapping of selected labelfilter subdivisionType=='SUB.3' → state/department subdivision level
PostalCodeworkplace.workplaceAddresses[].address.longPostalCodeNoNoDirect mappingWritten only if(!isEmpty(longPostalCode))
Streetworkplace.workplaceAddresses[].address.addressLongLabelNoNoDirect mappingWritten only if(!isEmpty(addressLongLabel))
Longitudeworkplace...address.geocodingAddresses[geoCodingSystemCode=="W"][0].longitudeNoNoDirect mapping of selected valuefilter geoCodingSystemCode=="W" → WGS geocoding system
Latitudeworkplace...address.geocodingAddresses[geoCodingSystemCode=="W"][0].latitudeNoNoDirect mapping of selected valuefilter geoCodingSystemCode=="W" → WGS geocoding system
CountryCodeworkplace...address.postalTownReference.countryNoNoDirect mappingWritten only if(!isEmpty(country))
ContactPointPhoneIdworkplace.workplaceAddresses[].telephones[rank==1]._isDelete_YesNoConditional reference: if _isDelete_ → null else "@{ref_ContactPointPhone_<eid>_<key>_<okid>.id}"Written only if telephones present and (number present or _isDelete_)
IsActiveworkplace.workplaceAddresses[]._isDeleted_YesYesBoolean: !(!isEmpty(_isDeleted_) and _isDeleted_)per-address item

ContactPointPhone Entity

These fields map the primary telephone on each Workplace address to ContactPointPhone.

Salesforce FieldIQVIA OneKey FieldsTransformationMandatoryTransformation with ExampleFilters
TelephoneNumberworkplace.workplaceAddresses[].telephones[rank==1].callNumberForDisplayNoNoDirect mapping of selected numberfilter rank==1 → primary phone of the address; record (Method POST) only created if number present
IsPrimaryconstant trueYesNoConstant trueCreated only when a primary telephone number exists

ContactPointBestContactTime Entity

These fields map Workplace opening hours across each address to ContactPointBestContactTime.

Salesforce FieldIQVIA OneKey FieldsTransformationMandatoryTransformation with ExampleFilters
SourceSystemIdentifierworkplace.openingHours[] + workplaceAddresses[].address.addressEidYesYesConcatenation okid ++ "_" ++ (addressEid ++ daySlotRank ++ weekDay ++ timeSlotRank)Cross-product of each address x each opening-hour; addresses validated to have address.addressEid
Nameworkplace.openingHours[].weekDayLabel, workplaceAddresses[].address.addressShortLabelYesNoSubstring + concat: weekDayLabel[0 to 2] ++ "-" ++ (addressShortLabel default uniqueId). "Monday" → "Mon-<label>"Written only if(!isEmpty(weekDayLabel)) and record not deleted
ContactPointReferenceIdContactPointAddress reference (addressEid)YesYesReference link "@{ref_ContactPointAddress_<okid>_<key>_<addressEid>.id}" → address Idnon-deleted records
FromTimeworkplace.openingHours[].openingTimeYesNogetTime() reformats to HH:mm. "0900" → "09:00"; "2400" → "00:00". See note below for full logic.Written only if(!isEmpty(openingTime)) and record not deleted
ToTimeworkplace.openingHours[].closingTimeYesNogetTime() reformats to HH:mm (same logic as FromTime). "1730" → "17:30"Written only if(!isEmpty(closingTime)) and record not deleted
DayOfWeekworkplace.openingHours[].weekDayLabelYesNocapitalize(). "monday" → "Monday"Written only if(!isEmpty(weekDayLabel)) and record not deleted
IsActiveworkplace.openingHours[]._isDeleted_YesYestrue when not deleted; if _isDeleted_ the record collapses to only IsActive: falseper opening-hour item

Note on FromTime / ToTime: getTime() left-pads the input to 4 digits, splits into HH and MM, and reformats to HH:mm. If minutes are >= 60 it rolls minutes into hours; "2400" normalises to "00:00". Any unparseable input falls through to "unexpectedFormat".

ProviderAffiliation Entity

These fields map Workplace relation records to ProviderAffiliation, with hierarchy-driven Hard/Soft classification.

Salesforce FieldIQVIA OneKey FieldsTransformationMandatoryTransformation with ExampleFilters
attributesconstant { "type": "ProviderAffiliation" }YesYesConstant Composite-API type marker; stripped from entities, kept in compositeRequests.relationsBlock skipped if no relations
SourceSystemIdentifierworkplace.relations[].onekeyEid, .linkCodeYesYesConcatenation okid ++ "_" ++ onekeyEid ++ "_" ++ (linkCode default "0")per-relation item
AccountIdAccount reference (okid)YesYesReference link "@{ref_Account_<okid>.id}" → Account Idper-relation item
RelatedAccountIdworkplace.relations[].onekeyEidYesYesReference link "@{ref_RelatedAccount_<onekeyEid>.id}" → related Account Idper-relation item
AffiliationTypeworkplace.relations[].linkCode, record.countryYesYesConditional: isHierarchyType(linkCode,country) → "Hard" else "Soft"Hierarchy link-codes from config onekey.download.workplaceHierarchy.<country> (else .default)
Roleworkplace.relations[].linkCodeYesYesCode→value translation, Code "TIH" via referCodesMapping serviceper-relation item
EffectiveStartDateworkplace.relations[].beginValidDateNoNoDirect mappingWritten only if(!isEmpty(item.beginValidDate))
EffectiveEndDateworkplace.relations[].endValidDateNoNoDirect mappingWritten only if(!isEmpty(endValidDate) and year != 9999) → excludes 9999 sentinel
IsPrimaryconstant falseYesYesConstant false (hard-coded)per-relation item
IsParentworkplace.relations[].isParentNoNoDirect mappingWritten only when sendParentFlag is true (Search-Download path; false for Bulk)
InfluenceTypeconstant "Unidirectional"YesYesConstant "Unidirectional"per-relation item
IsActiveworkplace.relations[]._isDeleted_ / .statusCodeYesYesisActive(item) booleanper-relation item

Activity Mapping

This section shows how OneKey Activity records map to ProviderAffiliation (the HCP to Workplace activity link).

Source DWL: activityMapper.dwl. Functions: activity_base_mapping. okid = activity.activityEid (Bulk: default record.onekeyEid).

ProviderAffiliation Entity

These fields map the Activity (HCP to Workplace link) to a hard ProviderAffiliation record.

Salesforce FieldIQVIA OneKey FieldsTransformationMandatoryTransformation with ExampleFilters
attributesconstant { "type": "ProviderAffiliation" }YesYesConstant Composite-API type marker; stripped from entities ($ - "ACT_AFFILIATION_ATTRIBUTES"), kept in compositeRequests.payloadNone
SourceSystemIdentifieractivity.activityEid (Bulk: default record.onekeyEid)NoYesDirect mapping of the resolved okid (ACT_AFFILIATION_ID). "ACT123" → "ACT123". okid resolution applies a Bulk-path default record.onekeyEid fallback upstreamRecord skipped entirely if okid empty
AccountIdactivity.individualEidYesYesReference link "@{ref_RelatedAccount_<individualEid>.id}" → individual's Account IdNone
RelatedAccountIdactivity.workplaceEidYesYesReference link "@{ref_RelatedAccount_<workplaceEid>.id}" → workplace's Account IdNone
AffiliationTypeconstant "Hard"YesYesConstant "Hard" (activity affiliations hard-coded to Hard)None
Roleactivity.ada[listCode=="TIH"][0].codeYesYesRole derived from ada then Code→value translation, Code "TIH" via referCodesMapping. null when no role resolvedfilter listCode=="TIH" → title-in-hierarchy role code; role is null when activity.ada is not an Array OR when no ada entry has listCode=="TIH" (empty filter selected by [0])
EffectiveStartDateactivity.activityStartDateNoNoDirect mappingWritten only if(!isEmpty(activity.activityStartDate))
EffectiveEndDateactivity.activityEndDateNoNoDirect mappingWritten only if(!isEmpty(activityEndDate) and year != 9999) → excludes 9999 sentinel
IsPrimaryactivity.isMainActivityNoNoDirect mapping of booleanWritten only if(!isEmpty(activity.isMainActivity))
InfluenceTypeconstant "Unidirectional"YesYesConstant "Unidirectional"None
IsActiveactivity.statusCodeYesYesBoolean derivation: !(statusCode == INACTIVE_STATUS_CODE). "9" → falseNone
TypeApplication
OrganizationMuleSoft
Published by
MuleSoft Organization
Published onOct 7, 2026
Asset overview
Industries CloudHealthLife Sciences
Custom fields

Asset versions for 1.0.x

Asset versions
VersionActions
1.0.9
1.0.4
1.0.2
1.0.1
1.0.0