diff --git a/docs/sections/allergies.md b/docs/sections/allergies.md index 78cbee72..82c6d1d7 100644 --- a/docs/sections/allergies.md +++ b/docs/sections/allergies.md @@ -3,21 +3,16 @@ ###Object Schema: ``` var Allergies = { - "date": [{cda_date}], - "identifiers": [{cda_id}], - "name": {type: string, required: true}, - "code": {type: string, required: false}, - "severity": {type: string, required: false}, - "status": {type: string, required: false}, - "reaction": [ - { - "code": {type: string, required: true}, - "name": {type: string, required: true}, - "code_system_name": {type: string, required: true}, - "severity": {type: string, required: false}, - } - ] - } + "date": [{cda_date}], + "identifiers": [{cda_id}], + "allergen": {cda_coded_entry}, + "severity": {type: string, required: false}, + "status": {type: string, required: false}, + "reactions": [{ + "reaction": {cda_coded_entry}, + "severity": {type: string, required: false} + }] +} ``` [JSON/XML sample](samples/allergies.md) @@ -43,30 +38,15 @@ var Allergies = { - 1..* - //ClinicalDocument/component/structuredBody/component/section/entry/act/entryRelationship/observation/id -####Allergy.name +####Allergy.allergen - 1..1 -- //ClinicalDocument/component/structuredBody/component/section/entry/act/entryRelationship/observation/participant/participantRole/playingEntity/code@displayName +- //ClinicalDocument/component/structuredBody/component/section/entry/act/entryRelationship/observation/participant/participantRole/playingEntity/code +- Container object for allergen details. - Can be be from RXNORM, UNII, or NDF-RT. - A translation object is possible. - Not supported: nullFlavor. - TODO: Support lookup of values from coding system. -####Allergy.code -- 1..1 -- //ClinicalDocument/component/structuredBody/component/section/entry/act/entryRelationship/observation/participant/participantRole/playingEntity/code@code -- Can be be from RXNORM, UNII, or NDF-RT. -- A translation object is possible. -- Not supported: nullFlavor. -- TODO: Support lookup of values from coding system. - -####Allergy.code_system_name -- 1..1 -- //ClinicalDocument/component/structuredBody/component/section/entry/act/entryRelationship/observation/participant/participantRole/playingEntity/code@codeSystemName -- Can be be RXNORM, UNII, or NDF-RT. -- A translation object is possible. -- Not supported: nullFlavor. -- TODO: Support lookup of values from coding system. - ####Allergy.severity - 0..1 - //ClinicalDocument/component/structuredBody/component/section/entry/act/entryRelationship/observation/entryRelationship/observation/value@displayName @@ -79,29 +59,22 @@ var Allergies = { - OID 2.16.840.1.113883.10.20.22.4.28. - Uses HITSP Problem Status 2.16.840.1.113883.3.88.12.80.68 for lookup. -###Allergy.reaction +###Allergy.reactions - 0..* - //ClinicalDocument/component/structuredBody/component/section/entry/act/entryRelationship/observation/entryRelationship/observation - OID 2.16.840.1.113883.10.20.22.4.9. -###Allergy.reaction.name -- 0..* +###Allergy.reactions.reaction +- 1..1 - //ClinicalDocument/component/structuredBody/component/section/entry/act/entryRelationship/observation/entryRelationship/observation/value@displayName - Should always be codified to SNOMED-CT. - Not supported: nullFlavor. - TODO: Support lookup of values from coding system. -###Allergy.reaction.code -- 0..* -- //ClinicalDocument/component/structuredBody/component/section/entry/act/entryRelationship/observation/entryRelationship/observation/value@code -- Should always be codified to SNOMED-CT. -- Not supported: nullFlavor. -- TODO: Support lookup of values from coding system. +####Allergy.reactions.severity +- 0..1 +- //ClinicalDocument/component/structuredBody/component/section/entry/act/entryRelationship/observation/entryRelationship/observation/value@displayName +- OID 2.16.840.1.113883.10.20.22.4.8. +- Uses Problem Severity 2.16.840.1.113883.3.88.12.3221.6.8 for lookup. -###Allergy.reaction.code_system_name -- 0..* -- //ClinicalDocument/component/structuredBody/component/section/entry/act/entryRelationship/observation/entryRelationship/observation/value@codeSystemName -- Should be always 2.16.840.1.113883.6.96. -- Not supported: nullFlavor. -- TODO: Support lookup of values from coding system. diff --git a/docs/sections/demographics.md b/docs/sections/demographics.md index 3ebe0422..3f98368f 100644 --- a/docs/sections/demographics.md +++ b/docs/sections/demographics.md @@ -10,14 +10,8 @@ var demographics = { "identifiers": [{cda_id}], "marital_status": {type: string, required: false}, "address": [{cda_usr_address}], - "phone": [{ - "number": {type: string, required: true}, - "type": {type: string, required: true} - }], - "email": [{ - "address": {type: string, required: true}, - "type": {type:string, required: true} - }], + "phone": [{cda_phone}], + "email": [{cda_email}], "race_ethnicity": {type:string, required: false}, "religion": {type:string, required: false}, "languages": [ @@ -35,14 +29,8 @@ var demographics = { "name": {cda_name}, "relationship": {type: string, required: false}, "address": [{cda_usr_address}], - "phone": [{ - "number": {type: string, required: true}, - "type": {type: string, required: true} - }], - "email": [{ - "address": {type: string, required: true}, - "type": {type:string, required: true} - }] + "phone": [{cda_phone}], + "email": [{cda_email}] } var cda_usr_address = { @@ -54,14 +42,6 @@ var cda_usr_address = { "postal_code": {type: string, required: false}, "country": {type: string, required: false} } - -var cda_name = { - "prefix": [{type: string, required: false}], - "first": {type: string, required: true}, - "middle": [{type: string, required: false], - "last": {type: string, required: true}, - "suffix": {type: string, required: false} - } ``` [JSON/XML sample](samples/demographics.md) @@ -90,35 +70,6 @@ var cda_name = { * OID: 2.16.840.1.113883.10.20.22.5 * Not supported: Optional "@use" element. -####name.prefix -* 0..1 -* //ClinicalDocument/recordTarget/patientRole/patient/name/prefix -* Not supported: Optional "@qualifier" element. - -####name.first -* 1..1 -* //ClinicalDocument/recordTarget/patientRole/patient/name/given[0] -* Not supported: Optional "@qualifier" element. -* Specification dictates at least one given name required, can be parsed as first. - -####name.middle -* 0..* -* //ClinicalDocument/recordTarget/patientRole/patient/name/given[1-n] -* Specification dictates that any second given name is middle. -* Assumption: any other given names are middle names. -* Not supported: Optional "@qualifier" element. -* May be valuable to concatenate multiple middle-names to single object. - -####name.last -* 1..1 -* //ClinicalDocument/recordTarget/patientRole/patient/name/family -* Not supported: Optional "@qualifier" element. - -####name.suffix -* 0..1 -* //ClinicalDocument/recordTarget/patientRole/patient/name/suffix -* Not supported: Optional "@qualifier" element. - ####dob * 1..1 * //ClinicalDocument/recordTarget/patientRole/patient/birthTime @@ -135,17 +86,6 @@ var cda_name = { * //ClinicalDocument/recordTarget/patientRole/id * Technically, this is required. However, nullFlavor is acceptable. If nullFlavor is found, the identifier should be rejected. -####identifiers.identifier_root -* 1..1 -* //ClinicalDocument/recordTarget/patientRole/id@root -* This can either be an OID, UUID, or UID. -* Can later be enhanced to lookup a subset of the HL7 OID registry and store text name. - -####identifiers.identifier -* 1..1 -* //ClinicalDocument/recordTarget/patientRole/id@extension -* This is the actual identifier. - ####marital_status * 0..1 * //ClinicalDocument/recordTarget/patientRole/patient/maritalStatusCode@code @@ -200,35 +140,11 @@ var cda_name = { * Each record must have at least one phone or email entry. * Each phone record should be checked for 'tel:' lead of value. -####phone.number -* 0..* -* //ClinicalDocument/recordTarget/patientRole/telecom@value -* Should be checked for 'tel:' lead, and parsed as phone if valid. - -####phone.type -* 0..* -* //ClinicalDocument/recordTarget/patientRole/telecom@use -* Should be checked for 'tel:' lead, and parsed as phone if valid. -* Depending on what is in the "@use", this should be "home", "work", "mobile", or "other". -* Other is for "HV", or when @use isn't supplied. - ####email * 0..* * //ClinicalDocument/recordTarget/patientRole/telecom * Each phone record should be checked for 'mailto:' lead of value. -####email.address -* 0..* -* //ClinicalDocument/recordTarget/patientRole/telecom@value -* Should be checked for 'mailto:' lead, and parsed as phone if valid. - -####email.type -* 0..* -* //ClinicalDocument/recordTarget/patientRole/telecom@use -* Should be checked for 'mailto:' lead, and parsed as phone if valid. -* Depending on what is in the "@use", this should be "home", "work", or "other". -* Other is for "HV", "MC", or when @use isn't supplied. Mobile email isn't a thing. - ####race_ethnicity * 0..1 * //ClinicalDocument/recordTarget/patientRole/patient/raceCode@code @@ -286,66 +202,13 @@ var cda_name = { * //ClinicalDocument/recordTarget/patientRole/patient/guardian/telecom * Each phone record should be checked for 'tel:' lead of value. -####guardian.phone.number -* 0..* -* //ClinicalDocument/recordTarget/patientRole/patient/guardian/telecom@value -* Should be checked for 'tel:' lead, and parsed as phone if valid. - -####guardian.phone.type -* 0..* -* //ClinicalDocument/recordTarget/patientRole/patient/guardian/telecom@use -* Should be checked for 'tel:' lead, and parsed as phone if valid. -* Depending on what is in the "@use", this should be "home", "work", "mobile", or "other". -* Other is for "HV", or when @use isn't supplied. - ####guardian.email * 0..* * //ClinicalDocument/recordTarget/patientRole/patient/guardian/telecom * Each phone record should be checked for 'mailto:' lead of value. -####guardian.email.address -* 0..* -* //ClinicalDocument/recordTarget/patientRole/patient/guardian/telecom@value -* Should be checked for 'mailto:' lead, and parsed as phone if valid. - -####guardian.email.type -* 0..* -* //ClinicalDocument/recordTarget/patientRole/patient/guardian/telecom@use -* Should be checked for 'mailto:' lead, and parsed as phone if valid. -* Depending on what is in the "@use", this should be "home", "work", or "other". -* Other is for "HV", "MC", or when @use isn't supplied. Mobile email isn't a thing. - ####guardian.name * 1..1 * //ClinicalDocument/recordTarget/patientRole/patient/guardian/name * OID: 2.16.840.1.113883.10.20.22.5 -* Not supported: Optional "@use" element. - -####guardian.name.prefix -* 0..1 -* //ClinicalDocument/recordTarget/patientRole/patient/guardian/name/prefix -* Not supported: Optional "@qualifier" element. - -####guardian.name.first -* 1..1 -* //ClinicalDocument/recordTarget/patientRole/patient/guardian/name/given[0] -* Not supported: Optional "@qualifier" element. -* Specification dictates at least one given name required, can be parsed as first. - -####guardian.name.middle -* 0..* -* //ClinicalDocument/recordTarget/patientRole/patient/guardian/name/given[1-n] -* Specification dictates that any second given name is middle. -* Assumption: any other given names are middle names. -* Not supported: Optional "@qualifier" element. -* May be valuable to concatenate multiple middle-names to single object. - -####guardian.name.last -* 1..1 -* //ClinicalDocument/recordTarget/patientRole/patient/guardian/name/family -* Not supported: Optional "@qualifier" element. - -####guardian.name.suffix -* 0..1 -* //ClinicalDocument/recordTarget/patientRole/patient/guardian/name/suffix -* Not supported: Optional "@qualifier" element. +* Not supported: Optional "@use" element. \ No newline at end of file diff --git a/docs/sections/encounters.md b/docs/sections/encounters.md index 84541c46..65fa2b3e 100644 --- a/docs/sections/encounters.md +++ b/docs/sections/encounters.md @@ -5,11 +5,9 @@ var Encounters = { "date": [{cda_date}], "identifiers": [{cda_id}], - "name": {type: string, required: true}, - "code": {type: string, required: true}, - "code_system_name": {type:string, required: true}, + "encounter": {cda_coded_entry}, "locations": [[cda_location}], - "findings": [{cda_concept}] + "findings": [{cda_coded_entry}] } ``` @@ -29,30 +27,14 @@ var Encounters = { - 1..* - //ClinicalDocument/component/structuredBody/component/section/entry/encounter/id -####Encounter.name +####Encounter.encounter - 1..1 -- //ClinicalDocument/component/structuredBody/component/section/entry/encounter/code@displayName +- //ClinicalDocument/component/structuredBody/component/section/entry/encounter/code - Must be selected from EncounterTypeCode. - A translation object is possible. - Not supported: nullFlavor. - TODO: Support lookup of values from coding system. -####Encounter.code -- 1..1 -- //ClinicalDocument/component/structuredBody/component/section/entry/encounter/code@code -- Must be selected from EncounterTypeCode. -- A translation object is possible. -- Not supported: nullFlavor. -- TODO: Support lookup of values from coding system. - -####Encounter.code_system_name -- 1..1 -- //ClinicalDocument/component/structuredBody/component/section/entry/encounter/code@codeSystemName -- Can be be RXNORM, UNII, or NDF-RT. -- A translation object is possible. -- Not supported: nullFlavor. -- TODO: Support lookup of values from coding system. - ####Encounter.locations - 0..* - //ClinicalDocument/component/structuredBody/component/section/entry/encounter/participant/participantRole diff --git a/docs/sections/immunizations.md b/docs/sections/immunizations.md index baafcd27..052eaa95 100644 --- a/docs/sections/immunizations.md +++ b/docs/sections/immunizations.md @@ -4,27 +4,16 @@ ``` var Immunizations = { "date": [{cda_date}], - "identifiers": [{cda_id}], + "identifiers": [{cda_id}], "status": {type:string: required: true}, "sequence_number": {type:string, required:false}, "product": { - "name": {type:string, required: true}, - "code": {type:string, required: true}, - "code_system": {type:string, required: true}, - "translations": [{ - "name": {type:string, required: false}, - "code": {type:string, required: false}, - "code_system": {type:string, required: false}, - }], + "product": {cda_coded_entry}, "lot_number": {type:string, required: false}, "manufacturer": {type:string, required: false} }, "administration": { - "route": { - "name": {type: string, required: false}, - "code": {type: string, required: false}, - "code_system": {type: string, required: false} - }, + "route": {cda_coded_entry}, "body_site": {type:string, required: false}, "quantity": { "value": {type:string, required: false}, @@ -35,38 +24,18 @@ "performer": { "name": {cda_name}, "address": {cda_address}, - "phone": [{ - "number": {type: string, required: true}, - "type": {type: string, required: true} - }], - "email": [{ - "address": {type: string, required: true}, - "type": {type:string, required: true} - }], + "phone": [{cda_phone}], + "email": [{cda_email}], "identifiers": [{cda_id}], "organization": [{ "name": {type:string, required: false}, "address": {cda_address}, - "phone": [{ - "number": {type: string, required: true}, - "type": {type: string, required: true} - }], - "email": [{ - "address": {type: string, required: true}, - "type": {type:string, required: true} - }], + "phone": [{cda_phone}], + "email": [{cda_email}], "identifiers": [{cda_id}] }, "refusal_reason": {type:string, required: false} } - - var cda_name = { - "prefix": [{type: string, required: false}], - "first": {type: string, required: true}, - "middle": [{type: string, required: false], - "last": {type: string, required: true}, - "suffix": {type: string, required: false} - } ``` @@ -98,30 +67,19 @@ - /ClinicalDocument/component/structuredBody/component/section/entry/substanceAdministration@negationInd - Combination of mood code and negation can determine status of either 'pending', 'refused', or 'complete'. -####Immunizations.name -- 1..1 -- /ClinicalDocument/component/structuredBody/component/section/entry/substanceAdministration/consumable/manufacturedProduct/manufacturedMaterial/code@displayName -- Using display name, all of these should be coming in as CVX coded, so no need for code system. Might want to normalize them. - -####Immunizations.code -- 1..1 -- /ClinicalDocument/component/structuredBody/component/section/entry/substanceAdministration/consumable/manufacturedProduct/manufacturedMaterial/code@code -- All of these should be coming in as CVX coded, so no need for code system. Might want to normalize them. - ####Immunization.sequence_number - 0..1 - /ClinicalDocument/component/structuredBody/component/section/entry/substanceAdministration/repeatNumber@value - See notes for significance. ####Immunizations.product -- 0..1 -- No direct mapping -- This is a catch all for every non-primary attribute of the product. All elements herein are optional at this point. +- 1..1 +- Container object for product information. -####Immunizations.product.translations -- 0..* -- /ClinicalDocument/component/structuredBody/component/section/entry/substanceAdministration/consumable/manufacturedProduct/manufacturedMaterial/code/translation -- This is a coded set and should be supported as such. Allows for synonyms in the same or other code sets. +####Immuinzations.product.product +- 1..1 +- /ClinicalDocument/component/structuredBody/component/section/entry/substanceAdministration/consumable/manufacturedProduct/manufacturedMaterial/code +- All of these should be coming in as CVX coded, so no need for code system. Might want to normalize them. ####Immunizations.product.lot_number - 0..1 @@ -181,12 +139,10 @@ ####Immunization.performer.phone - 0..* - /ClinicalDocument/component/structuredBody/component/section/entry/substanceAdministration/performer/assignedEntity/telecom -- Need to write a standard address parser for this element, should be used in demographics, etc. as well. ####Immunization.performer.email - 0..* - /ClinicalDocument/component/structuredBody/component/section/entry/substanceAdministration/performer/assignedEntity/telecom -- Need to write a standard address parser for this element, should be used in demographics, etc. as well. ####Immunization.performer.name - 0..1? @@ -207,17 +163,14 @@ ####Immunization.performer.organization.phone - 0..* - /ClinicalDocument/component/structuredBody/component/section/entry/substanceAdministration/performer/assignedEntity/representedOrganization/telecom -- Need to write a standard address parser for this element, should be used in demographics, etc. as well. ####Immunization.performer.organization.email - 0..* - /ClinicalDocument/component/structuredBody/component/section/entry/substanceAdministration/performer/assignedEntity/representedOrganization/telecom -- Need to write a standard address parser for this element, should be used in demographics, etc. as well. ####Immunization.performer.organization.address - 0..* - /ClinicalDocument/component/structuredBody/component/section/entry/substanceAdministration/performer/assignedEntity/representedOrganization/addr -- Need to write a standard address parser for this element, should be used in demographics, etc. as well. ####Immunization.performer.organization.identifiers - 0..* diff --git a/docs/sections/medications.md b/docs/sections/medications.md index fcfd495a..9bf03a67 100644 --- a/docs/sections/medications.md +++ b/docs/sections/medications.md @@ -4,36 +4,16 @@ ``` var Medication = { "date": [{cda_date}], - "identifiers": [{cda_id}], + "identifiers": [{cda_id}], "status": {type:string: required: true}, "sig": {type:string, required:false}, "product": { - "name": {type:string, required: true}, - "code": {type:string, required: true}, - "code_system": {type:string, required: true}, - "translations": [{ - "name": {type:string, required: false}, - "code": {type:string, required: false}, - "code_system": {type:string, required: false}, - }], + "product": {cda_coded_entry}, "identifiers": [{cda_id}] }, "administration": { - "route": { - "name": {type: string, required: false}, - "code": {type: string, required: false}, - "code_system": {type: string, required: false} - }, - "form": { - "name": {type: string, required: false}, - "code": {type: string, required: false}, - "code_system": {type: string, required: false} - }, - "site": { - "name": {type: string, required: false}, - "code": {type: string, required: false}, - "code_system": {type: string, required: false} - }, + "route": {cda_coded_entry}, + "form": {cda_coded_entry}, "dose": { "value": {type: string, required: false}, "unit": {type: string, required: false} @@ -46,18 +26,11 @@ "value": {type: string, required: false}, "unit": {type: string, required: false} }, + "site": {cda_coded_entry} }, "precondition": { - "code": { - "name": {type:string, required: true}, - "code" : {type:string, required: true}, - "code_system": {type:string, required: true}, - }, - "value": { - "name": {type:string, required: true}, - "code" : {type:string, required: true}, - "code_system": {type:string, required: true}, - } + "code": {cda_coded_entry}, + "value": {cda_coded_entry} } } @@ -99,25 +72,9 @@ - /ClinicalDocument/component/structuredBody/component/section/entry/substanceAdministration/consumable/manufacturedProduct - Must be encoded in RxNorm, but translation may be in another language (e.g. SNOMED). -####Medication.product.name +####Medication.product.product - 0..1 - /ClinicalDocument/component/structuredBody/component/section/entry/substanceAdministration/consumable/manufacturedProduct/manufacturedMaterial/code -- Coded name entry from the coded object; can later be standardized via code-set. - -####Medication.product.code -- 1..1 -- /ClinicalDocument/component/structuredBody/component/section/entry/substanceAdministration/consumable/manufacturedProduct/manufacturedMaterial/code -- Code entry from the coded object. - -####Medication.product.code_system -- 1..1 -- /ClinicalDocument/component/structuredBody/component/section/entry/substanceAdministration/consumable/manufacturedProduct/manufacturedMaterial/code -- Code entry from the coded object. - -####Medication.product.translations -- 0..1 -- /ClinicalDocument/component/structuredBody/component/section/entry/substanceAdministration/consumable/manufacturedProduct/manufacturedMaterial/code/translations -- Optional translation element if an additional coding system is used to represent the product. ####Medication.product.identifiers - 0..* @@ -153,14 +110,14 @@ - 0..1 - /ClinicalDocument/component/structuredBody/component/section/entry/substanceAdministration/consumable/substanceAdministration/approachSiteCode -####Medication.administration.precondition +####Medication.precondition - 0..* - /ClinicalDocument/component/structuredBody/component/section/entry/substanceAdministration/consumable/substanceAdministration/precondition -####Medication.administration.precondition.code +####Medication.precondition.code - 0..1 - /ClinicalDocument/component/structuredBody/component/section/entry/substanceAdministration/consumable/substanceAdministration/precondition/code -####Medication.administration.precondition.code +####Medication.precondition.value - 0..1 - /ClinicalDocument/component/structuredBody/component/section/entry/substanceAdministration/consumable/substanceAdministration/precondition/value diff --git a/docs/sections/problems.md b/docs/sections/problems.md index 006b76c0..72fff479 100644 --- a/docs/sections/problems.md +++ b/docs/sections/problems.md @@ -6,9 +6,7 @@ var Problems = { "date": [{cda_date}], "identifiers": [{cda_id}], "negation_indicator": {type: boolean, required: false}, - "name": {type: string, required: true}, - "code": {type: string, required: false}, - "code_system_name": {type: string, required: false}, + "problem": {cda_coded_entry}, "onset_age": {type: string, required: false}, "onset_age_unit": {type: string, required: false}, "status": {type: string, required: false}, @@ -44,25 +42,9 @@ var Problems = { - //ClinicalDocument/component/structuredBody/component/section/entry/act/entryRelationship/observation@negationInd - Should be assumed to be false for safety reasons if not present; true if it is a negation. -####Problem.name +####Problem.problem - 1..1 -- //ClinicalDocument/component/structuredBody/component/section/entry/act/entryRelationship/observation/value@displayName -- Should always be codified to SNOMED-CT. -- A translation object is possible instead of SNOMED, to ICD. -- Not supported: nullFlavor. -- TODO: Support lookup of values from coding system. - -####Problem.code -- 1..1 -- //ClinicalDocument/component/structuredBody/component/section/entry/act/entryRelationship/observation/value@code -- Should always be codified to SNOMED-CT. -- A translation object is possible instead of SNOMED, to ICD. -- Not supported: nullFlavor. -- TODO: Support lookup of values from coding system. - -####Problem.code_system_name -- 1..1 -- //ClinicalDocument/component/structuredBody/component/section/entry/act/entryRelationship/observation/value@codeSystemName +- //ClinicalDocument/component/structuredBody/component/section/entry/act/entryRelationship/observation/value - Should always be codified to SNOMED-CT. - A translation object is possible instead of SNOMED, to ICD. - Not supported: nullFlavor. diff --git a/docs/sections/procedures.md b/docs/sections/procedures.md index e6480fd1..b57d99b4 100644 --- a/docs/sections/procedures.md +++ b/docs/sections/procedures.md @@ -3,18 +3,12 @@ ###Procedures Schema: ``` var Procedures = { - "name": {type:string, require:true}, - "code": {type:string, require:true}, - "code_system_name": {type:string, require: true}, - "proc_type": {type:string, require:true}, + "procedure": {cda_coded_entry}, + "procedure_type": {type:string, require:true}, "status": {type: string, require: true}, "date": [{cda_date}], "identifiers": [{cda_id}], - "bodysite": [{ - "name": {type:string, require:true}, - "code": {type:string, require:true}, - "code_system_name": {type:string, require: true}, - }], + "body_sites": [{cda_coded_entry}], "providers": [{ "address": {cda_address}, "telecom": {cda_telecom}, @@ -38,99 +32,91 @@ var Procedures = { = Required value field is ignored since it did not include valuable data (observation). - Id fields for providers and locations are not recorded. -####Procedure.name +####Procedures.procedure - 1..1 - //ClinicalDocument/component/structuredBody/component/section/entry/procedure/code@displayName - //ClinicalDocument/component/structuredBody/component/section/entry/observation/code@displayName - //ClinicalDocument/component/structuredBody/component/section/entry/act/code@displayName - -####Procedure.code -- Same as name except code@code replaces code@displayName - -####Procedure.code_system_name - Same as name except code@code_system_name replaces code@displayName - Can be LOINC, SNOMED CT, CPT-4, ICD9, ICD10 -####Procedure.proc_type +####Procedures.procedure_type - 1..1 - Not literally in the CCDA specification. - observation, procedure or act. Corresponds to the type of procedure that the name and code comes from. -####Procedure.identifiers -- 1..* -- //ClinicalDocument/component/structuredBody/component/section/entry/procedure/id -- //ClinicalDocument/component/structuredBody/component/section/entry/observation/id -- //ClinicalDocument/component/structuredBody/component/section/entry/act/id - -####Procedure.status +####Procedures.status - 1..1 - //ClinicalDocument/component/structuredBody/component/section/entry/procedure/statusCode - //ClinicalDocument/component/structuredBody/component/section/entry/observation/statusCode - //ClinicalDocument/component/structuredBody/component/section/entry/act/statusCode - Looked up from Act Status 2.16.840.1.113883.11.20.9.22 -####Procedure.date +####Procedures.date - 1..* - //ClinicalDocument/component/structuredBody/component/section/entry/procedure/effectiveDate - //ClinicalDocument/component/structuredBody/component/section/entry/observation/efffectiveDate - //ClinicalDocument/component/structuredBody/component/section/entry/act/effectiveDate -####Procedure.bodySite.name -- 0..1 + +####Procedures.identifiers +- 1..* +- //ClinicalDocument/component/structuredBody/component/section/entry/procedure/id +- //ClinicalDocument/component/structuredBody/component/section/entry/observation/id +- //ClinicalDocument/component/structuredBody/component/section/entry/act/id + + +####Procedures.body_sites +- 0..* - //ClinicalDocument/component/structuredBody/component/section/entry/procedure/targetSiteCode@displayName - //ClinicalDocument/component/structuredBody/component/section/entry/observation/targetSiteCode@displayName - //ClinicalDocument/component/structuredBody/component/section/entry/act/targetSiteCode@displayName - -####Procedure.bodySite.code -- Same as name except targetSiteCode@code replaces targetSiteCode@displayName - -####Procedure.bodySite.code_system_name - Same as name except targetSiteCode@code_system_name replaces targetSiteCode@displayName - Body Site Value Set (2.16.840.1.113883.3.88.12.3221.8.9) -####Procedure.providers +####Procedures.providers - 0..* - //ClinicalDocument/component/structuredBody/component/section/entry/procedure/performer/assignedEntity - //ClinicalDocument/component/structuredBody/component/section/entry/observation/performer/assignedEntity - //ClinicalDocument/component/structuredBody/component/section/entry/act/performer/assignedEntity -####Procedure.providers.address +####Procedures.providers.address - 1..1 - //ClinicalDocument/component/structuredBody/component/section/entry/procedure/performer/assignedEntity/addr - //ClinicalDocument/component/structuredBody/component/section/entry/observation/performer/assignedEntity/addr - //ClinicalDocument/component/structuredBody/component/section/entry/act/performer/assignedEntity/addr -####Procedure.providers.telecom +####Procedures.providers.telecom - 1..1 - //ClinicalDocument/component/structuredBody/component/section/entry/procedure/performer/assignedEntity/telecom - //ClinicalDocument/component/structuredBody/component/section/entry/observation/performer/assignedEntity/telecom - //ClinicalDocument/component/structuredBody/component/section/entry/act/performer/assignedEntity/telecom -####Procedure.providers.organization +####Procedures.providers.organization - 1..1 - //ClinicalDocument/component/structuredBody/component/section/entry/procedure/performer/assignedEntity/representedOrganization - //ClinicalDocument/component/structuredBody/component/section/entry/observation/performer/assignedEntity/representedOrganization - //ClinicalDocument/component/structuredBody/component/section/entry/act/performer/assignedEntity/representedOrganization -####Procedure.providers.organization.name +####Procedures.providers.organization.name - 0..1 - //ClinicalDocument/component/structuredBody/component/section/entry/procedure/performer/assignedEntity/representedOrganization/name - //ClinicalDocument/component/structuredBody/component/section/entry/observation/performer/assignedEntity/representedOrganization/name - //ClinicalDocument/component/structuredBody/component/section/entry/act/performer/assignedEntity/representedOrganization/name -####Procedure.providers.organization.address +####Procedures.providers.organization.address - 0..1 - //ClinicalDocument/component/structuredBody/component/section/entry/procedure/performer/assignedEntity/representedOrganization/addr - //ClinicalDocument/component/structuredBody/component/section/entry/observation/performer/assignedEntity/representedOrganization/addr - //ClinicalDocument/component/structuredBody/component/section/entry/act/performer/assignedEntity/representedOrganization/addr -####Procedure.providers.organization.telecom +####Procedures.providers.organization.telecom - 0..1 - //ClinicalDocument/component/structuredBody/component/section/entry/procedure/performer/assignedEntity/representedOrganization/telecom - //ClinicalDocument/component/structuredBody/component/section/entry/observation/performer/assignedEntity/representedOrganization/telecom - //ClinicalDocument/component/structuredBody/component/section/entry/act/performer/assignedEntity/representedOrganization/telecom -####Procedure.locations +####Procedures.locations - 0..* - //ClinicalDocument/component/structuredBody/component/section/entry/procedure/participant/participantRole - //ClinicalDocument/component/structuredBody/component/section/entry/observation/participant/participantRole diff --git a/docs/sections/results.md b/docs/sections/results.md index f0204447..497e7b5d 100644 --- a/docs/sections/results.md +++ b/docs/sections/results.md @@ -2,10 +2,8 @@ ###Object Schema: ``` -var Result = { - "name": {type: string, required: true}, - "code": {type: string, required: true}, - "code_system_name": {type: string, required: true}, +var result_set = { + result_set: {cda_coded_entry}, "results": [{cda_result}] } @@ -13,9 +11,7 @@ var cda_result = { "date": [{cda_date}], "identifiers": [{cda_id}], "status": {type: string, required: true}, - "name": {type: string, required: true}, - "code": {type: string, required: false}, - "code_system_name": {type: string, required: false}, + "result": {cda_coded_entry}, "value": {type: string, required: false}, "unit": {type: string, required: false}, "reference_range": { @@ -44,84 +40,68 @@ var cda_result = { - Reference Range is poorly designed, but appears to be either in text, or IVL_PQ format, so implementing both. - Reference Range low is technically the only one required if using IVL_PQ. -####Result.date +####Result_set.result_set +- 1..1 +- Coded entry describing type of result set. +- //ClinicalDocument/component/structuredBody/component/section/entry/organizer/code + +####Result_set.results +- 0..* +- Actual result findings. +- //ClinicalDocument/component/structuredBody/component/section/entry/organizer/component + +####Result_set.results.date - 1..2 - //ClinicalDocument/component/structuredBody/component/section/entry/organizer/component/observation/effectiveTime -####Result.identifiers +####Result_set.results.identifiers - 1..* - //ClinicalDocument/component/structuredBody/component/section/entry/organizer/component/observation/id -####Result.status +####Result_set.results.status - 1..1 - //ClinicalDocument/component/structuredBody/component/section/entry/organizer/component/observation/status - Should be looked up from set 2.16.840.1.113883.11.20.9.39 -####Result.name +####Result_set.results.result - 1..1 - //ClinicalDocument/component/structuredBody/component/section/entry/organizer/component/observation/code/displayName - Normalization may re-encode this to standard terminology if coded in a common dataset. - If not present, and not coded, originalText can be taken from below: - //ClinicalDocument/component/structuredBody/component/section/entry/organizer/component/observation/code/originalText -####Result.code -- 0..1 -- //ClinicalDocument/component/structuredBody/component/section/entry/organizer/component/observation/code/code -- Listed as not required to support uncoded or local datasets. - -####Result.code_system_name -- 0..1 -- //ClinicalDocument/component/structuredBody/component/section/entry/organizer/component/observation/code/codeSystemName -- Listed as not required to support uncoded or local datasets. -- If not present, should attempt to lookup OID name from element below: -//ClinicalDocument/component/structuredBody/component/section/entry/organizer/component/observation/code/codeSystem - -####Result.value +####Result_set.results.value - 1..1 - //ClinicalDocument/component/structuredBody/component/section/entry/organizer/component/observation/value@value - Reference 2.28 of CDA spec for PQ style. All I've seen so far. - Optional, but results are largely worthless without it. -####Result.unit +####Result_set.results.unit - 1..1 - //ClinicalDocument/component/structuredBody/component/section/entry/organizer/component/observation/value@unit - Reference 2.28 of CDA spec for PQ style. All I've seen so far. - Optional, but results are largely worthless without it. -####Result.reference_range +####Result_set.results.reference_range - 0..1 - //ClinicalDocument/component/structuredBody/component/section/entry/organizer/component/observation/referenceRange/observationRange -####Result.reference_range.text +####Result_set.results.reference_range.text - 0..1 - //ClinicalDocument/component/structuredBody/component/section/entry/organizer/component/observation/referenceRange/observationRange/text -####Result.reference_range.low_value +####Result_set.results.reference_range.low_value - 0..1 - //ClinicalDocument/component/structuredBody/component/section/entry/organizer/component/observation/referenceRange/observationRange/low@value -####Result.reference_range.low_unit +####Result_set.results.reference_range.low_unit - 0..1 - //ClinicalDocument/component/structuredBody/component/section/entry/organizer/component/observation/referenceRange/observationRange/low@unit -####Result.reference_range.high_value +####Result_set.results.reference_range.high_value - 0..1 - //ClinicalDocument/component/structuredBody/component/section/entry/organizer/component/observation/referenceRange/observationRange/high@value -####Result.reference_range.high_unit +####Result_set.results.reference_range.high_unit - 0..1 - //ClinicalDocument/component/structuredBody/component/section/entry/organizer/component/observation/referenceRange/observationRange/high@unit - -####Result.category.name -- 1..1 -- //ClinicalDocument/component/structuredBody/component/section/entry/organizer/code@displayName -- Can be overwritten based on coding system during normalization. - -####Result.category.code -- 1..1 -- //ClinicalDocument/component/structuredBody/component/section/entry/organizer/code@code - -####Result.category.code_system_name -- 1..1 -- //ClinicalDocument/component/structuredBody/component/section/entry/organizer/code@codeSystemName -- Can be overwritten based on coding system during normalization. diff --git a/docs/sections/shared.md b/docs/sections/shared.md index b1e1e857..ab7b1c24 100644 --- a/docs/sections/shared.md +++ b/docs/sections/shared.md @@ -1,5 +1,20 @@ #Shared Components +## cda_name + +``` + var cda_name = { + "prefix": [{type: string, required: false}], + "first": {type: string, required: true}, + "middle": [{type: string, required: false], + "last": {type: string, required: true}, + "suffix": {type: string, required: false} + } +``` + + + + ## cda_address ``` @@ -46,29 +61,25 @@ var cda_phone = { - @use - From table AdressUse 2.16.840.1.113883.5.1119 -## cda_concept +## cda_email ``` -var cda_concept : { - "name": {type: string, required: true}, - "code": {type: string, required: true}, - "code_system_name": {type:string, required: true} +var cda_email = { + "address": {type: string, required: true}, + "type": {type: string, required: true} } ``` -####name -- 0..1 -- @displayName -- Required but can be found from the code when all table values are known. - -####code +####address - 1..1 -- @code +- @value +- Each email record should be checked for 'mailto:' lead of value. -####code_system_name +####type - 1..1 -- @codeSystemName -- Always normalized from @codeSystem. +- @use +- From table AdressUse 2.16.840.1.113883.5.1119 + ## cda_location @@ -138,3 +149,49 @@ var cda_id = { - 1..1 - @extension +## cda_coded_entry +``` +var coded_entry = "allergen": { + "name": {type: string, required: true}, + "code": {type: string, required: false}, + "code_system": {type: string, required:false}, + "translations": [{ + "name": {type: string, required: true}, + "code": {type: string, required: false}, + "code_system": {type: string, required:false} + }] +} +``` +#### name +- 1..1 +- @displayName +- TODO: Add handlers for lookup if displayName not present. + +#### code +- 0..1 +- @code + +#### code_system +- 0..1 +- @codeSystemName +- TODO: Add OID based code system name lookup. + +#### translations +- 0..* +- /translation +- Optional translations of coded entry. + +#### translations.name +- 1..1 +- @displayName +- TODO: Add handlers for lookup if displayName not present. + +#### translations.code +- 0..1 +- @code + +#### translations.code_system +- 0..1 +- @codeSystemName +- TODO: Add OID based code system name lookup. + diff --git a/docs/sections/socialHistory.md b/docs/sections/socialHistory.md index 437a5ef7..fb85f075 100644 --- a/docs/sections/socialHistory.md +++ b/docs/sections/socialHistory.md @@ -22,13 +22,13 @@ var SocialHistory = { - 1..* - //ClinicalDocument/component/structuredBody/component/section/entry/observation -#### smokingStatuses[].value +#### smokingStatuses.value - 1..1 - //ClinicalDocument/component/structuredBody/component/section/entry/observation/value/@code - normalized to display name from Smoking Status value set (2.16.840.1.113883.11.20.9.38) - all values in Smoking Status value set comes from SNOMED CT. -#### smokingStatuses[].date +#### smokingStatuses.date - 1..1 - //ClinicalDocument/component/structuredBody/component/section/entry/observation/effectiveTime - smoking start and end date's for smoker diff --git a/docs/sections/vitals.md b/docs/sections/vitals.md index 8d296502..fc43ca7a 100644 --- a/docs/sections/vitals.md +++ b/docs/sections/vitals.md @@ -6,9 +6,7 @@ var Vitals = { "date": [{cda_date}], "identifiers": [{cda_id}], "status": {type: string, required: true}, - "name": {type: string, required: true}, - "code": {type: string, required: false}, - "code_system_name": {type: string, required: false}, + "vital": {cda_coded_entry}, "value": {type: string, required: false}, "unit": {type: string, required: false}, "interpretation": {type: string, required: false} @@ -42,25 +40,13 @@ var Vitals = { - //ClinicalDocument/component/structuredBody/component/section/entry/organizer/component/observation/status - Should be looked up from set 2.16.840.1.113883.11.20.9.39 -####Vitals.name +####Vitals.vital - 1..1 - //ClinicalDocument/component/structuredBody/component/section/entry/organizer/component/observation/code/displayName - Normalization may re-encode this to standard terminology if coded in a common dataset. - If not present, and not coded, originalText can be taken from below: - //ClinicalDocument/component/structuredBody/component/section/entry/organizer/component/observation/code/originalText -####Vitals.code -- 0..1 -- //ClinicalDocument/component/structuredBody/component/section/entry/organizer/component/observation/code/code -- Listed as not required to support uncoded or local datasets. - -####Vitals.code_system_name -- 0..1 -- //ClinicalDocument/component/structuredBody/component/section/entry/organizer/component/observation/code/codeSystemName -- Listed as not required to support uncoded or local datasets. -- If not present, should attempt to lookup OID name from element below: -//ClinicalDocument/component/structuredBody/component/section/entry/organizer/component/observation/code/codeSystem - ####Vitals.value - 1..1 - //ClinicalDocument/component/structuredBody/component/section/entry/organizer/component/observation/value@value