CCR Input Mappings

The transforms that convert CCR data into HealthVault types are not simple mappings of one data value onto another. The mappings are context sensitive and depend on both the presence and value of individual elements of the CCR.

The logic behind each transform is described below. In order to improve the readability of those descriptions, observe the following conventions:

  1. Value mappings. Each "Map values" statement is followed by one or more table rows, each of which describes a direct mapping of a specific element in a CCR onto an element in a HealthVault type. Mappings described in adjacent rows should be applied together, and in the sequence indicated. Each row contains the following elements:
    1. CCR. The element in the CCR whose value is used to populate the HealthVault item, or a function (see below) whose return value will be used. Note that the IsConcept functions use the element label groups defined in the "Import Text" columns in HealthVault CCR Vocabularies to identify CCR elements that may use alternate names for a given concept.
    2. HealthVault. The HealthVault item whose value will be set.
    3. Conversion (optional.) The first row specifies the type-id of the relevant HealthVault type. In subsequent rows, it may specify a simple type conversion (such as Boolean), an externally defined conversion (such as the ISO-8601 date standard), or a named conversion defined elsewhere in this document.
  2. Scope. Each line that is not a table row is indented to indicate the scope of loops and conditional elements within the transform logic.
  3. Procedures. Some sections of the transform logic are described as procedure or function calls. Each call referenced in the following mappings is described as pseudocode in HealthVault CCR Input Functions.
  4. Required elements. Some transforms require that specific elements in the input data be present and not empty. Those elements are indicated with bold italic text in the corresponding cells in the mapping tables. If any required values cannot be processed for any reason, the transform will not create the output type.

Date Types

ExactDateTime : date

CCR HealthVault Conversion
ExactDateTime date

Map values:

. y ISO-8601/Y
. m ISO-8601/M
. d ISO-8601/D

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

ExactDateTime : time

CCR HealthVault Conversion
ExactDateTime time

Map values:

. h ISO-8601/h
. m ISO-8601/m
. s ISO-8601/s

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

ExactDateTime : approx-date

CCR HealthVault Conversion
ExactDateTime approx-date

Map values:

. y ISO-8601/Y
. m ISO-8601/M
. d ISO-8601/D

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

ExactDateTime : StructuredApproxDate

CCR HealthVault Conversion
ExactDateTime StructuredApproxDate

Map values:

. ./date ExactDateTime => approx-date
. ./time ExactDateTime => time
. ./tz ISO-8601/TZD

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

ExactDateTime : date-time

CCR HealthVault Conversion
ExactDateTime date-time

Map values:

. ./date ExactDateTime => date
. ./time ExactDateTime => time
. ./tz ISO-8601/TZD

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

DateTimeType : approx-date-time

CCR HealthVault Conversion
DateTimeType approx-date-time

If Exists(./ExactDateTime) Map values:

./ExactDateTime ./structured ExactDateTime => StructuredApproxDate

Else If Exists(./ApproximateDateTime) Map values:

./ApproximateDateTime/Text ./descriptive

Else If Exists(./Age) Map values:

Concat(./Age/Value,./Age/Units/Unit, ' ') ./descriptive

Else Map values:

"Unknown" ./descriptive

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

DateTimeType : approx-date

CCR HealthVault Conversion
DateTimeType approx-date

If Exists(./ExactDateTime) Map values:

./ExactDateTime . ExactDateTime => approx-date

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

DateTimeType : date

CCR HealthVault Conversion
DateTimeType date

If Exists(./ExactDateTime) Map values:

./ExactDateTime . ExactDateTime => date

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

DateTimeType : date-time

CCR HealthVault Conversion
DateTimeType date-time

If Exists(./ExactDateTime) Map values:

./ExactDateTime . ExactDateTime => date-time

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

Coded Types

CodeType : coded-value

CCR HealthVault Conversion
CodeType coded-value

Map values:

./Value ./value
./CodingSystem ./type
./Version ./version

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

CodedDescriptionType : codable-value

CCR HealthVault Conversion
CodedDescriptionType codable-value

If Exists(./Text) Map values:

./Text ./text

If Not Exists(./Text) and If Exists(./Code[1]) Map values:

./Code[1]/Value ./text

Else Map values:

"Unkown" ./text

ForEach(./Code) Map values:

. ./code CodeType => coded-value

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

Measure Types

MeasureType or MeasureGroup : codable-value

CCR HealthVault Conversion
MeasureType or MeasureGroup codable-value

Map values:

./Units/Unit ./text

ForEach(./Units/Code) Map values:

. ./code CodeType => coded-value

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

MeasureType or MeasureGroup : structured-measurement

CCR HealthVault Conversion
MeasureType or MeasureGroup structured-measurement

If IsNumber(./Value) Map values:

./Value ./value
. ./units MeasureType => codable-value

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

MeasureType or MeasureGroup : general-measurement

CCR HealthVault Conversion
MeasureType or MeasureGroup general-measurement

If Exists(./Value) Map values:

./Value ./display

If IsNumber(./Value)and If Exists(./Units) Map values:

. ./structured MeasureType => structured-measurement

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

MeasureType or MeasureGroup : display-value

CCR HealthVault Conversion
MeasureType or MeasureGroup display-value

Map values:

./Value ./display
./Units/Unit ./display/@units</span>

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

TestResultType : general-measurement

CCR HealthVault Conversion
TestResultType general-measurement

If Exists(./Value) Map values:

./Value ./display

Else If Exists(./Description/Text) Map values:

./Description/Text ./display

Else Map values:

"Unknown" ./display

Map values:

. . MeasureType => structured-measurement

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

Actors

PersonNameType : name

CCR HealthVault Conversion
PersonNameType name

Map values:

PersonNameTypeToString(.) ./full
./Title ./title/text
./Given ./first
./Middle ./middle
./Family ./last
./Suffix ./suffix/text

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

CommunicationType : email

CCR HealthVault Conversion
CommunicationType email

Map values:

./Type/Text ./description
IsConcept(./Priority, "priority-primary") ./is-primary
./Value ./address

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

CommunicationType : phone

CCR HealthVault Conversion
CommunicationType phone

Map values:

./Type/Text ./description
IsConcept(./Priority, "priority-primary") ./is-primary
./Value ./number

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

Actor : address

CCR HealthVault Conversion
Actor address

Map values:

./Type/Text ./description
IsConcept(./Priority, "priority-primary") ./is-primary
./Line1 ./street[1]
./Line2 ./street[2]
./City ./city
./State ./state
./PostalCode ./postcode
./Country ./country

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

Actor : contact

CCR HealthVault Conversion
Actor contact

ForEach(./Address) Map values:

. ./address Actor => address

ForEach(./Telephone) Map values:

. ./phone CommunicationType => phone

ForEach(./EMail) Map values:

. ./email CommunicationType => email

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

Actor : person

CCR HealthVault Conversion
Actor person

If Exists(./Person/Name/CurrentName) Map values:

./Person/Name/CurrentName ./name PersonNameType => name

Else (./Person/Name/BirthName) Map values:

./Person/Name/BirthName ./name PersonNameType => name

If Exists(./Person/Name/DisplayName) Map values:

./Person/Name/DisplayName ./name/full

Map values:

Concat(./Specialty/Text, ";") ./professional-training
./Relation[1] ./type CodedDescriptionType => codable-value
. ./contact Actor => contact

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

Actor : Organization

CCR HealthVault Conversion
Actor Organization

Map values:

./Organization/Name ./name
./Specialty[1] ./type CodedDescriptionType => codable-value
./URL[1]/Value ./website
. ./contact Actor => contact

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

Common

CCRCodedDataObjectType : common

CCR HealthVault Conversion
CCRCodedDataObjectType common

ForEach(./Source) $Sources = Concat($Source, SourceTypeToString(.), "\n\n") Map values:

$Sources ./source

ForEach(./Comments/Comment) $Comments = Concat($Comments, ./Description/Text, "\n\n") ForEach(./References/Reference) $References = Concat($References, ReferenceTypeToString(.), "\n\n") Map values:

Concat($Comments, $References, "[References]\n") ./note
./CCRDataObjectID ./client-thing-id

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

ContinuityOfCareRecord/Body : thing/data-xml

ContinuityOfCareRecord/Body : thing/data-xml

CCR HealthVault Conversion
ContinuityOfCareRecord/Body thing/data-xml

$Payer = ./Payers/Payer ForEach($Payer) Map values:

. ./payer Payer => payer

$Directives = ./AdvanceDirectives/AdvanceDirective ForEach($Directives) Map values:

. ./directive AdvanceDirective => directive

$Problems = ./Problems/Problem ForEach($Problems) Map values:

. ./condition Problem => condition

$FamilyHistories = ./FamilyHistory/FamilyProblemHistory ForEach($FamilyHistories) Map values:

. . FamilyHistoryType => family-history

$Allergies = ./Alerts/Alert[ IsConcept(./Type/Text, "allergy")] ForEach($Allergies) Map values:

. ./allergy Alert => allergy

$Medications = ./Medications/Medication ForEach($Medication) Map values:

. ./medication Medication => medication

$Immunizations = ./Immunizations/Immunization ForEach($Immunizations) Map values:

. ./immunization Immunization => immunization

$Results = ./VitalSigns/Result ForEach($Results) Map values:

. . ResultType => Typed things

$Results = ./Results/Result ForEach($Results) If IsConcept(./Description/Text, "result-discharge-summary") or If Exists(./IDs[ IsConcept(./ID, "02ef57a2-a620-425a-8e92-a301542cca54")]) Map values:

. ./discharge-summary ResultType => discharge-summary

Else Map values:

. ./lab-test-results ResultType => lab-test-result

ForEach($Results) Map values:

. . ResultType => Typed Things

$Procedures = ./Procedures/Procedure ForEach($Procedures) Map values:

. ./procedure Procedure => procedure

$Encounters = ./Encounters/Encounter ForEach($Encounters) If IsConcept(./Status/Text, "encounter-pending") Map values:

. ./appointment Encounter => appointment

Else Map values:

. ./encounter Encounter => encounter

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

Payer : payer

CCR HealthVault Conversion
Payer payer type-id = 9366440c-ec81-4b89-b231-308a4c4d70ed

If Exists(./PaymentProvider) Map values:

ActorToString(./PaymentProvider) ./plan-name

Else Map values:

"Unknown" ./plan-name

Map values:

./Type ./coverage-type CodedDescriptionType => codable-value
./IDs[ IsConcept(./Type/Text, "payer-carrier-id")][1]/ID ./carrier-id
./IDs[ IsConcept(./Type/Text, "payer-group-number")][1]/ID ./group-num
./IDs[ IsConcept(./Type/Text, "payer-plan-code")][1]/ID ./plan-code
./IDs[ IsConcept(./Type/Text, "payer-subscriber-number")][1]/ID ./subscriber-id
ActorToString(./Subscriber) ./subscriber-name

$Actor = ResolveActor(./Subscriber) Map values:

$Actor/Person/DateOfBirth ./subscriber-dob DateTimeType => date-time
IsConcept(./Type/Text, "payer-primary-health-insurance") ./is-primary boolean
./DateTime[ IsConcept(./Type/Text, "payer-benefit-stop-date")][1] ./expiration-date DateTimeType => date-time
ResolveActor(./PaymentProvider) ./contact Actor => contact
. ../common CCRCodedDataObjectType => common

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

AdvanceDirective : directive

CCR HealthVault Conversion
AdvanceDirective directive type-id = 822a5e5a-14f1-4d06-b92f-8f3f1b05218f

$DateTime = ./DateTime[ IsConcept(./Type/Text, "directive-start-date")][1] If Exists($DateTime) Map values:

$DateTime ./start-date DateTimeType => approx-date-time

Else Map values:

"Unknown" ./start-date/descriptive

$DateTime = ./DateTime[ IsConcept(./Type/Text, "directive-stop-date")][1] If Exists($DateTime) Map values:

$DateTime ./stop-date DateTimeType => approx-date-time

Else Map values:

"Unknown" ./stop-date/descriptive

Map values:

./Description/Text ./description
Concat(./Type/Text, ./Status/Text, ";") ./additional-instructions
FindActorInSources(./Source, "directive-treating-physician") ./attending-physician Actor => person
./DateTime[ IsConcept(./Type/Text, "directive-verified-treating-physician")][1] ./attending-physician-endorsement DateTimeType => date-time
. ../common CCRCodedDataObjectType => common

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

Problem : condition

CCR HealthVault Conversion
Problem condition type-id = 7ea7a1f9-880b-4bd4-b593-f5660f20eda8

Map values:

./Description ./name CodedDescriptionType => codable-value

If(count(./DateTime)= 1) and If Exists(./DateTime/DateTimeRange) Map values:

./DateTime/DateTimeRange/BeginRange ./onset-date DateTimeType => approx-date-time

Else Map values:

./DateTime[ IsConcept(./Type/Text, "problem-onset-date")][1] ./onset-date DateTimeType => approx-date-time

Map values:

./Status ./status CodedDescriptionType => codable-value

If(count(./DateTime) = 1) and If Exists(./DateTime/DateTimeRange) Map values:

./DateTime/DateTimeRange/EndRange ./stop-date DateTimeType => approx-date-time

Else Map values:

./DateTime[ IsConcept(./Type/Text, "problem-stop-date")][1] ./stop-date DateTimeType => approx-date-time

Map values:

. ../common CCRCodedDataObjectType => common

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

FamilyProblemHistory : family-history

CCR HealthVault Conversion
FamilyProblemHistory family-history type-id = 4a04fcc8-19c1-4d59-a8c7-2031a03f21de

Remarks: If there are multiple family members, then HealthVault will create a seperate family-history object for each of them containing all of the associated conditions. If there are only problems, then HealthVault will create a single family-history object containing all of the problems. If Exists(./FamilyMember) ForEach(./FamilyMember) $Actor = ResolveActor(./ActorID) Map values:

./ActorRole ./family-history/relative/relationship CodedDescriptionType => codable-value
$Actor ./family-history/relative/relative-name Actor => person
$Actor/Person/DateOfBirth ./family-history/relative/date-of-birth DateTimeType => approx-date

ForEach(./Problem) Map values:

./Description ./family-history/condition/name CodedDescriptionType => codable-value

$OnsetDate = ./Episodes/Episode[ IsConcept(./DateTime, "problem-onset-date")][1] If Exists($OnsetDate) Map values:

$OnsetDate ./family-history/condition/onset-date DateTimeType => approx-date

Else Map values:

../DateTime[ IsConcept(./DateTime, "problem-onset-date")[1] ./family-history/condition/onset-date DateTimeType => approx-date

Map values:

Concat(./Episodes/Frequency/Value, ./Episodes/Frequency/Units/Unit, " ") ./family-history/condition/occurrence/text
./Episodes/Frequency/Code[1] ./family-history/condition/occurrence/code CodeType => coded-value

Map values:

. ./common CCRCodedDataObjectType => common

Else If Exsits(./Problem) ForEach(./Problem) Map values:

./Description ./family-history/condition/name CodedDescriptionType => codable-value

$OnsetDate = ./Episodes/Episode[ IsConcept(./DateTime, "problem-onset-date")][1] If Exists($OnsetDate) Map values:

$onsetDate ./family-history/condition/onset-date DateTimeType => approx-date

Else Map values:

../DateTime[ IsConcept(./DateTime, "problem-onset-date")[1] ./family-history/condition/onset-date DateTimeType => approx-date

Map values:

Concat(./Episodes/Frequency/Value, ./Episodes/Frequency/Units/Unit, ' ') ./family-history/condition/occurrence/text
./Episodes/Frequency/Code[1] ./family-history/condition/occurrence/code CodeType => coded-value

Map values:

. ./family-history/common CCRCodedDataObjectType => common

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

Alert : allergy

CCR HealthVault Conversion
Alert allergy type-id = 52bf9104-2c5e-4f1f-a66d-552ebcc53df7

$Product = ./Agent/Products/Product[1] $EnvAgent = ./Agent/EnvironmentalAgents/EnvironmentalAgent[1] If Exists(./Description) Map values:

./Description ./name CodedDescriptionType => codable-value

Else If Exists($Product) Map values:

$Product/ProductName ./name CodedDescriptionType => codable-value

Else If Exists($EnvAgent) Map values:

$EnvAgent/Description ./name

If Exists(./Reaction) Map values:

./Reaction[1]/Description ./reaction CodedDescriptionType => codable-value

If(count(./DateTime) = 1) and If Exists(./DateTime/DateTimeRange) Map values:

./DateTime[1]/DateTimeRange/BeginRange ./first-observed DateTimeType => approx-date-time

Else Map values:

./DateTime[ IsConcept(./Type/Text, "allergy-start-date")][1] ./first-observed DateTimeType => approx-date-time

If Exists($Product) Map values:

$Product/Type ./allergen-type CodedDescriptionType => codable-value
$Product/Description ./allergen-code CodedDescriptionType => codable-value

Else If Exists($EnvAgent) Map values:

$EnvAgent/Type ./allergen-type CodedDescriptionType => codable-value
$EnvAgent/Description ./allergen-code CodedDescriptionType => codable-value

Map values:

. ../common CCRCodedDataObjectType => common

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

Medication : medication

CCR HealthVault Conversion
Medication medication type-id =30cafccc-047d-4288-94ef-643571f7919d

$Product = ./Product[1] $Direction = ./Product[1]/Directions[1]/Direction[1] If Exists($Product) If Exists($Product/BrandName) Map values:

$Product/BrandName ./name CodedDescriptionType => codable-value
$Product/ProductName ./generic-name CodedDescriptionType => codable-value

Else Map values:

$Product/ProductName ./name CodedDescriptionType => codable-value

Map values:

$Direction/Dose[1] ./dose MeasureType => general-measurement
$Product/Strength[1] ./strength MeasureType => general-measurement
$Direction/Frequency[1] ./frequency MeasureType => general-measurement
$Direction/Route[1] ./route CodedDescriptionType => codable-value

If Exists($Direction/Indication[1]/Description) Map values:

$Direction/Indication[1]/Description ./indication CodedDescriptionType => codable-value

Else If Exists($Direction/Indication[1]/InternalCCRLink) $Problem = ResolveLink($Direction/Indication[1]/InternalCCRLink) Map values:

$Problem/Description ./indication CodedDescriptionType => codable-value

Map values:

./DateTime[ IsConcept(./Type/Text, "medication-start-date")][1] ./date-started DateTimeType => approx-date-time
./DateTime[ IsConcept(./Type/Text, "medication-stop-date")][1] ./date-discontinued DateTimeType => approx-date-time
. ./prescription Medication => prescription
. ../common CCRCodedDataObjectType => common

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

Medication : prescription

CCR HealthVault Conversion
Medication prescription

$Actor = FindActorInSources(./Source, "medication-prescribing-clinician") If Exists($Actor) Map values:

$Actor ./prescribed-by Actor => person

Else Map values:

"Unknown" ./prescribed-by/name/full

Map values:

./DateTime[ IsConcept(./Type/Text, "medication-prescription-date")][1] ./date-prescribed DateTimeType => approx-date-time
./Quantity[1] ./amount-prescribed MeasureType => general-measurement
./Refills/Refill[1]/Number[1] ./refills
./PatientInstructions/Instruction[1] ./instructions CodedDescriptionType => codable-value

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

Immunization : immunization

CCR HealthVault Conversion
Immunization immunization type-id = cd3587b5-b6e1-4565-ab3b-1c3ad45eb04f

$Product = ./Product[1] If Exists($Product) Map values:

$Product/ProductName ./name CodedDescriptionType => codable-value
./DateTime[ IsConcept(./Type/Text, "immunization-date")][1] ./administration-date DateTimeType => approx-date-time
ActorToString($Product/Manufacturer) ./manufacturer/text
./IDs[ IsConcept(./Type/Text, "immunization-lot-number")][1]/ID ./lot
./Directions[1]/Direction[1]/Route[1] ./route CodedDescriptionType => codable-value
./SeriesNumber ./sequence
./Directions[1]/Direction[1]/Site[1] ./anatomic-surface CodedDescriptionType => codable-value
./Reaction/Description/Text ./adverse-event
./Consent/Description/Text ./consent
. ../common CCRCodedDataObjectType => common

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

ResultType : Typed Things

CCR HealthVault Conversion
ResultType Typed Things

Map values:

. ./blood-pressure ResultType => blood-pressure
. ./cholesterol-profile ResultType => cholesterol-profile
. ./peak-flow ResultType => peak-flow
. ./exercise ResultType => exercise
./Test[ IsConcept(./Description/Text, "height")] ./height TestType => height
./Test[ IsConcept(./Description/Text, "weight")] ./weight TestType => weight
./Test[ IsConcept(./Description/Text, "blood-glucose")] ./blood-glucose TestType => blood-glucose
./Test[ IsConcept(./Description, "blood-oxygen-saturation")] ./blood-oxygen-saturation TestType => blood-oxygen-saturation

If IsConcept(./Type, "radiology-lab-results") or IsConcept(./Description, "radiology-lab-results") ForEach(./Test) Map values:

./Test ./radiology-lab-results TestType => radiology-lab-results

Remarks: If a Result is in the CCR under VitalSigns and cannot be imported into any of the above types, then HealthVault will fall back to the following generic vital-signs mapping. Map values:

. ./vital-signs ResultType => vital-signs

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

ResultType : vital-signs

CCR HealthVault Conversion
ResultType vital-signs type-id = 73822612-C15F-4B49-9E65-6AF369E55C65

$DateTime = GetDateTime(., "result-collection-date") If Exists($DateTime/ExactDateTime) Map values:

./DateTime ./when DateTimeType => date-time
ForEach(./Test) ./vital-signs-results

Map values:

./Description ./title CodedDescriptionType => codable-value

If IsNumber(./TestResult/Value) Map values:

./TestResult/Value ./value string => double
./TestResult ./unit MeasureType => codable-value

Else If Exists(./TestResult/Value) Map values:

Concat(./TestResult/Value, ./TestResult/Units/Unit, " ") ./text-value

Else Map values:

./TestResult/Description/Text ./text-value string => string

Map values:

./Flag[1] ./flag CodedDescriptionType => codable-value

Map values:

. ../common CCRCodedDataObjectType => common

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

ResultType : blood-pressure

CCR HealthVault Conversion
ResultType blood-pressure type-id = ca3c57f4-f4c1-4e15-be67-0a3caf5414ed

$DateTime = GetDateTime(., "result-collection-date") $Systolic = ./Test[IsConcept(./Description/Text, "blood-pressure-systolic")][1] $Diastolic = ./Test[IsConcept(./Description/Text, "blood-pressure-diastolic")][1] $Pulse = ./Test[IsConcept(./Description/Text, "blood-pressure-pulse")][1] If Exists($DateTime/ExactDateTime and $Diastolic and $Systolic) Map values:

$DateTime ./when DateTimeType => date-time
$Systolic/TestResult/Value ./systolic string => integer
$Diastolic/TestResult/Value ./diastolic string => integer
$Pulse/TestResult/Value ./pulse string => integer
. ../common CCRCodedDataObjectType => common

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

ResultType : cholesterol-profile

CCR HealthVault Conversion
ResultType cholesterol-profile type-id = 796C186F-B874-471c-8468-3EEFF73BF66E

$DateTime = GetDateTime(., "result-collection-date") $LDL = ./Test[IsConcept(./Description/Text, "cholesterol-ldl")][1] $HDL = ./Test[IsConcept(./Description/Text, "cholesterol-hdl")][1] $Total = ./Test[IsConcept(./Description/Text, "cholesterol-total")][1] $Trig = ./Test[IsConcept(./Description/Text, "cholesterol-triglycerides")][1] If Exists($DateTime/ExactDateTime and ($LDL or $HDL or $Total or $Trig)) Map values:

$DateTime ./when DateTimeType => date
$LDL/TestResult/Value ./ldl string => integer
$HDL/TestResult/Value ./hdl string => integer
$Total/TestResult/Value ./total-cholesterol string => integer
$Trig/TestResult/Value ./triglyceride string => integer
. ../common CCRCodedDataObjectType => common

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

ResultType : peak-flow

CCR HealthVault Conversion
ResultType peak-flow type-id = 5d8419af-90f0-4875-a370-0f881c18f6b3

$DateTime = GetDateTime(., "result-collection-date") $PEF = ./Test[ IsConcept(./Description/Text, "pef")][1] $FEV1 = ./Test[IsConcept(./Description/Text, "fev1")][1] $FEV6 = ./Test[ IsConcept(./Description/Text, "fev6")][1] If Exists($DateTime/ExactDateTime and ($PEF or $FEV1 or $FEV6)) Map values:

$DateTime ./when DateTimeType => approx-date-time

If IsPositiveDouble($PEF/TestResult/Value) and IsConcept($PEF/TestResult/Units/Unit, "liters-per-second") Map values:

$PEF/TestResult/Value ./pef/liters-per-second
$PEF/TestResult ./pef/display MeasureGroup => display-value

If IsPositiveDouble($FEV1/TestResult/Value) and IsConcept($FEV1/TestResult/Units/Unit, "liters") Map values:

$FEV1/TestResult/Value ./fev1/liters
$FEV1/TestResult ./fev1/display MeasureGroup => display-value

If IsPositiveDouble($FEV6/TestResult/Value) and IsConcept($FEV6/TestResult/Units/Unit, "liters") Map values:

$FEV6/TestResult/Value ./fev6/liters
$FEV6/TestResult ./fev6/display MeasureGroup => display-value

Map values:

. ../common CCRCodedDataObjectType => common

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

ResultType : exercise

CCR HealthVault Conversion
ResultType exercise type-id = 85a21ddb-db20-4c65-8d30-33c899ccf612

$DateTime = GetDateTime(., "result-collection-date") $Distance = ./Test[ IsConcept(./Description/Text, "exercise-distance")][1] $Duration = ./Test[IsConcept(./Description/Text, "exercise-duration")][1] $Details = ./Test[ IsConcept(./Description/Text, "exercise-details")] If Exists($DateTime/ExactDateTime and ($Distance or $Duration or $Details) and ./Description) Map values:

$DateTime ./when DateTimeType => approx-date-time
./Description ./activity CodedDescriptionType => codable-value
ConvertToMeters($Distance/TestResult/Value, $Distance/TestResult/Units/Unit) ./distance/m
$Distance/TestResult ./distance/display MeasureGroup => display-value
ConvertToMinutes($Duration/TestResult/Value, $Duration/TestResult/Units/Unit) ./duration

ForEach($Details) Map values:

./Description/Code[1] ./detail/name CodeType => coded-value
./TestResult ./detail/value MeasureGroup => structured-measurement

Map values:

. ../common CCRCodedDataObjectType => common

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

ResultType : discharge-summary

CCR HealthVault Conversion
ResultType discharge-summary type-id = 02ef57a2-a620-425a-8e92-a301542cca54

$DateTime = GetDateTime(.,"discharge-summary-create-date") If Exists($DateTime/ExactDateTime) Map values:

$DateTime ./when DateTimeType => date-time
./Description ./type CodedDescriptionType => codable-value

Remarks: For discharge summaries that are sent as Results, HealthVault will use the value of first associated comment that matches the discharge-summary-comment concept as the content of the discharge summary. Map values:

ResolveComment("discharge-summary-comment") ./text
FindActorInSources(./Source, "discharge-summary-primary-provider") ./primary-provider Actor => person
./DateTime[ IsConcept(./Type/Text, "discharge-summary-primary-endorsement")][1] ./primary-provider-endorsement DateTimeType => date-time
FindActorInSources(./Source, "discharge-summary-secondary-provider") ./secondary-provider Actor => person
./DateTime[ IsConcept(./Type/Text, "discharge-summary-secondary-endorsement")][1] ./secondary-provider-endorsement DateTimeType => date-time
./DateTime[ IsConcept(./Type/Text, "discharge-summary-discharge-date")][1] ./discharge-date-time DateTimeType => approx-date-time
FindActorInSources(./Source, "discharge-summary-principal-procedure-physician") ./principal-procedure-physician Actor => person
. ../common CCRCodedDataObjectType => common

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

TestType : height

CCR HealthVault Conversion
TestType height type-id = 40750a6a-89b2-455c-bd8d-b420a4cb500b

$DateTime = GetDateTime(.., "result-collection-date") If Exists($DateTime/ExactDateTime)) Map values:

$DateTime ./when DateTimeType => date-time
ConvertToMeters(./TestResult/Value, ./TestResult/Units/Unit) ./value/m
./TestResult ./value/display MeasureGroup => display-value
.. ../common CCRCodedDataObjectType => common

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

TestType : weight

CCR HealthVault Conversion
TestType weight type-id = 3d34d87e-7fc1-4153-800f-f56592cb0d17

$DateTime = GetDateTime(.., "result-collection-date") If Exists($DateTime/ExactDateTime) Map values:

$DateTime ./when DateTimeType => date-time
ConvertToKilograms(./TestResult/Value, ./TestResult/Units/Unit) ./value/kg
./TestResult ./value/display MeasureGroup => display-value
.. ../common CCRCodedDataObjectType => common

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

TestType : blood-glucose

CCR HealthVault Conversion
TestType blood-glucose type-id = 879e7c04-4e8a-4707-9ad3-b054df467ce4

$DateTime = GetDateTime(.., "result-collection-date") If Exists($DateTime/ExactDateTime) Map values:

$DateTime ./when DateTimeType => date-time
./Description ./glucose-measurement-type CodedDescriptionType => codable-value
ConvertToMilliMolesPerLiter(./TestResult/Value, ./TestResult/Units/Unit) ./value/mmoLPerl
./TestResult ./value/display MeasureType => display-value
.. ../common CCRCodedDataObjectType => common

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

TestType : radiology-lab-results

CCR HealthVault Conversion
TestType radiology-lab-results type-id = e4911bd3-61bf-4e10-ae78-9c574b888b8f

$DateTime = GetDateTime(.., "result-collection-date") If Exists($DateTime/ExactDateTime) Map values:

$DateTime ./when DateTimeType => date-time
./Description/Text ./title

$Value = Concat(./TestResult/Value, ./TestResult/Units/Unit, " ") Map values:

Concat($Value, ./TestResult/Description/Text, "&#xA;&#xA") ./result-text
.. ../common CCRCodedDataObjectType => common

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

TestType : blood-oxygen-saturation

CCR HealthVault Conversion
TestType blood-oxygen-saturation type-id = 3a54f95f-03d8-4f62-815f-f691fc94a500

$DateTime = GetDateTime(.., "result-collection-date") If Exists($DateTime/ExactDateTime) Map values:

$DateTime ./when DateTimeType => date-time

If IsPercentage(./TestResult/Value) Map values:

./TestResult/Value ./value

Map values:

./Method ./measurement-method CodedDescriptionType => codable-value
./Flag[1] ./measurement-flags CodedDescriptionType => codable-value
.. ../common CCRCodedDataObjectType => common

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

ResultType : lab-test-results

CCR HealthVault Conversion
ResultType lab-test-results type-id = 5800eab5-a8c2-482a-a4d6-f1db25ae08c3

Map values:

GetDateTime(./, "result-collection-date") ./when DateTimeType => approx-date-time

If Exists(./Description) Map values:

./Description ./lab-group/group-name CodedDescriptionType => codable-value

Else If Exists(./Type) Map values:

./Type ./lab-group/group-name CodedDescriptionType => codable-value

Map values:

./Status ./lab-group/status CodedDescriptionType => codable-value

ForEach(./Test) Map values:

. ./lab-group/results TestType => lab-test-result-type

Map values:

FindActorInSource(./Source, "result-ordering-provider") ./ordered-by Actor => Organization
. ../common CCRCodedDataObjectType => common

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

TestType : lab-test-result-type

CCR HealthVault Conversion
TestType lab-test-result-type

Map values:

./DateTime[1] ./when DateTimeType => approx-date-time
./Description/Text ./name
../Result/Substance ./substance CodedDescriptionType => codable-value
./Method[1] ./collection-method CodedDescriptionType => codable-value
./Description ./clinical-code CodedDescriptionType => codable-value
. ./value TestType => lab-test-result-value-type
./Status ./status CodedDescriptionType => codable-value

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

TestType : lab-test-result-value-type

CCR HealthVault Conversion
TestType lab-test-result-value-type

Map values:

./TestResult ./measurement TestResultType => general-measurement

ForEach(./NormalResult/Normal) If Exists(./Value) If Exists(./Units) Map values:

. ./ranges/type MeasureGroup => codable-value

Else Map values:

"Unknown" ./ranges/type/text

Map values:

./Value ./ranges/text number => string

If IsNumber(./Value) Map values:

./Value ./ranges/value/minimum-range
./Value ./ranges/value/maximum-range

ForEach(./Flag) Map values:

. ./flag CodedDescriptionType => codable-value

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

Procedure : procedure

CCR HealthVault Conversion
Procedure procedure type-id = df4db479-a1ba-42a2-8714-2b083b88150f

If(count(./DateTime) = 1) and If Exists(./DateTime/DateTimeRange) Map values:

./DateTime/DateTimeRange/BeginRange ./when DateTimeType => approx-date-time

Else Map values:

./DateTime[ IsConcept(./Type/Text, "procedure-date")][1] ./when DateTimeType => approx-date-time

Map values:

./Description ./name CodedDescriptionType => codable-value
./Site[1] ./anatomic-location CodedDescriptionType => codable-value
ResolveActorInRole(./Practitioners/Practitioner, "procedure-primary-provider") ./primary-provider Actor => person
ResolveActorInRole(./Practitioners/Practitioner, "procedure-secondary-provider") ./secondary-provider Actor => person
. ../common CCRCodedDataObjectType => common

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

Encounter : encounter

CCR HealthVault Conversion
Encounter encounter type-id = 464083cc-13de-4f3e-a189-da8e47d5651b

Map values:

GetDateTime(., "encounter-date") ./when DateTimeType => date-time
./Type ./type CodedDescriptionType => codable-value
./Description/Text ./reason
./Duration[1]/DateTime/DateTimeRange/BeginRange ./duration/start-date DateTimeType => approx-date-time
./Duration[1]/DateTime/DateTimeRange/EndRange ./duration/end-date DateTimeType => approx-date-time
ResolveActor(./Locations/Location[1]/Actor/ActorID) ./facility Actor => Organization

ForEach(./Practitioners/Practitioner) $Practitioners = Concat($Practitioners, ., "\n\n") Map values:

. ../common CCRCodedDataObjectType => common

Remarks: Practioners are appended to the content that is already in the note field. Map values:

$Practitioners ../common/note

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.

Encounter : appointment

CCR HealthVault Conversion
Encounter appointment type-id = 4b18aeb6-5f01-444c-8c70-dbf13a2f510b

$DateTime = GetDateTime(.,"appointment-date") If Exists($DateTime/ExactDateTime) Map values:

$DateTime ./when DateTimeType => date-time
./Duration[1]/DateTime/DateTimeRange/BeginRange ./duration/start-date DateTimeType => approx-date-time
./Duration[1]/DateTime/DateTimeRange/EndRange ./duration/end-date DateTimeType => approx-date-time
./Description ./service CodedDescriptionType => codable-value

$Practitioner = ResolveActor(./Practitioners/Practitioner[1]/ActorID) If Exists($Practitioner/Person) Map values:

$Practitioner ./clinic Actor => Person

Else Map values:

"Unknown" ./clinic/name/full

$Location = ResolveActor(./Locations/Location[1]/Actor/ActorID) If Exists($Location) Map values:

$Location/Organization/Name ./clinic/organization

Map values:

./Status ./status
./Type ./care-class CodedDescriptionType => codable-value
. ../common CCRCodedDataObjectType => common

Note: Elements listed in bold italic text are required by the HealthVault mapping transform. If any required values cannot be processed, the transform will not create the type.