health-data-standards 3.6.1 → 3.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +7 -2
- data/Rakefile +2 -1
- data/lib/health-data-standards.rb +22 -1
- data/lib/health-data-standards/export/cat_1.rb +25 -6
- data/lib/health-data-standards/export/cat_1_r2.rb +8 -2
- data/lib/health-data-standards/export/cat_3.rb +8 -7
- data/lib/health-data-standards/export/exceptions.rb +13 -0
- data/lib/health-data-standards/export/helper/cat1_view_helper.rb +17 -11
- data/lib/health-data-standards/export/helper/html_view_helper.rb +13 -7
- data/lib/health-data-standards/export/helper/scooped_view_helper.rb +68 -25
- data/lib/health-data-standards/export/html.rb +9 -4
- data/lib/health-data-standards/export/qrda/entry_template_resolver.rb +29 -11
- data/lib/health-data-standards/export/qrda/hqmf-qrda-oids.json +89 -5
- data/lib/health-data-standards/export/rendering_context.rb +2 -2
- data/lib/health-data-standards/export/template_helper.rb +7 -2
- data/lib/health-data-standards/export/view_helper.rb +107 -39
- data/lib/health-data-standards/import/bulk_record_importer.rb +8 -5
- data/lib/health-data-standards/import/bundle/importer.rb +21 -14
- data/lib/health-data-standards/import/c32/care_goal_importer.rb +1 -1
- data/lib/health-data-standards/import/c32/immunization_importer.rb +1 -1
- data/lib/health-data-standards/import/cat1/clinical_trial_participant_importer.rb +20 -0
- data/lib/health-data-standards/import/cat1/device_order_importer.rb +20 -0
- data/lib/health-data-standards/import/cat1/diagnosis_active_importer.rb +4 -9
- data/lib/health-data-standards/import/cat1/diagnosis_importer.rb +15 -0
- data/lib/health-data-standards/import/cat1/diagnosis_inactive_importer.rb +1 -1
- data/lib/health-data-standards/import/cat1/diagnostic_study_order_importer.rb +6 -0
- data/lib/health-data-standards/import/cat1/encounter_order_act_importer.rb +19 -0
- data/lib/health-data-standards/import/cat1/encounter_performed_act_importer.rb +19 -0
- data/lib/health-data-standards/import/cat1/encounter_performed_importer.rb +16 -0
- data/lib/health-data-standards/import/cat1/immunization_administered_importer.rb +14 -0
- data/lib/health-data-standards/import/cat1/medication_dispensed_act_importer.rb +18 -0
- data/lib/health-data-standards/import/cat1/patient_importer.rb +44 -17
- data/lib/health-data-standards/import/cat1/procedure_order_importer.rb +4 -4
- data/lib/health-data-standards/import/cat1/procedure_performed_importer.rb +1 -0
- data/lib/health-data-standards/import/cat1/transfer_from_act_importer.rb +18 -0
- data/lib/health-data-standards/import/cat1/transfer_from_importer.rb +24 -0
- data/lib/health-data-standards/import/cat1/transfer_to_act_importer.rb +18 -0
- data/lib/health-data-standards/import/cat1/transfer_to_importer.rb +23 -0
- data/lib/health-data-standards/import/cda/allergy_importer.rb +1 -1
- data/lib/health-data-standards/import/cda/communication_importer.rb +55 -0
- data/lib/health-data-standards/import/cda/condition_importer.rb +17 -1
- data/lib/health-data-standards/import/cda/encounter_importer.rb +23 -21
- data/lib/health-data-standards/import/cda/medical_equipment_importer.rb +1 -0
- data/lib/health-data-standards/import/cda/medication_importer.rb +14 -4
- data/lib/health-data-standards/import/cda/procedure_importer.rb +4 -4
- data/lib/health-data-standards/import/cda/result_importer.rb +1 -1
- data/lib/health-data-standards/import/cda/section_importer.rb +59 -18
- data/lib/health-data-standards/models/assessment.rb +3 -0
- data/lib/health-data-standards/models/care_experience.rb +2 -0
- data/lib/health-data-standards/models/care_goal.rb +4 -0
- data/lib/health-data-standards/models/communication.rb +3 -0
- data/lib/health-data-standards/models/condition.rb +12 -9
- data/lib/health-data-standards/models/cqm/bundle.rb +2 -1
- data/lib/health-data-standards/models/cqm/measure.rb +2 -1
- data/lib/health-data-standards/models/cqm/patient_cache.rb +7 -3
- data/lib/health-data-standards/models/cqm/query_cache.rb +2 -0
- data/lib/health-data-standards/models/encounter.rb +14 -1
- data/lib/health-data-standards/models/encounter_principal_diagnosis.rb +36 -0
- data/lib/health-data-standards/models/entry.rb +5 -1
- data/lib/health-data-standards/models/family_history.rb +4 -0
- data/lib/health-data-standards/models/immunization.rb +1 -0
- data/lib/health-data-standards/models/lab_result.rb +10 -1
- data/lib/health-data-standards/models/medical_equipment.rb +2 -1
- data/lib/health-data-standards/models/medication.rb +19 -2
- data/lib/health-data-standards/models/patient_preference.rb +5 -0
- data/lib/health-data-standards/models/procedure.rb +16 -3
- data/lib/health-data-standards/models/provider.rb +17 -1
- data/lib/health-data-standards/models/provider_preference.rb +5 -0
- data/lib/health-data-standards/models/record.rb +8 -9
- data/lib/health-data-standards/models/reference.rb +1 -1
- data/lib/health-data-standards/models/svs/value_set.rb +28 -10
- data/lib/health-data-standards/models/transfer.rb +6 -1
- data/lib/health-data-standards/tasks/bundle.rake +5 -3
- data/lib/health-data-standards/util/hqmf_template_helper.rb +20 -14
- data/lib/health-data-standards/util/hqmfr2_template_oid_map.json +382 -0
- data/lib/health-data-standards/util/nlm_helper.rb +14 -0
- data/lib/health-data-standards/util/vs_api.rb +72 -54
- data/lib/health-data-standards/validate/measure_validator.rb +8 -3
- data/lib/health-data-standards/validate/performance_rate_validator.rb +1 -1
- data/lib/health-data-standards/validate/qrda_qdm_template_validator.rb +253 -0
- data/lib/health-data-standards/validate/reported_result_extractor.rb +5 -1
- data/lib/health-data-standards/validate/schematron_validator.rb +6 -0
- data/lib/health-data-standards/validate/validators.rb +49 -1
- data/lib/hqmf-generator/document.xml.erb +6 -5
- data/lib/hqmf-generator/field.xml.erb +1 -0
- data/lib/hqmf-generator/hqmf-generator.rb +85 -41
- data/lib/hqmf-generator/subset.xml.erb +15 -0
- data/lib/hqmf-generator/temporal_relationship.xml.erb +8 -3
- data/lib/hqmf-generator/temporal_relationship_attribute.xml.erb +10 -0
- data/lib/hqmf-generator/value.xml.erb +2 -2
- data/lib/hqmf-model/data_criteria.json +88 -17
- data/lib/hqmf-model/data_criteria.rb +144 -72
- data/lib/hqmf-model/population_criteria.rb +20 -18
- data/lib/hqmf-model/precondition.rb +6 -3
- data/lib/hqmf-model/types.rb +1 -1
- data/lib/hqmf-parser.rb +9 -0
- data/lib/hqmf-parser/1.0/utilities.rb +1 -1
- data/lib/hqmf-parser/2.0/data_criteria.rb +293 -319
- data/lib/hqmf-parser/2.0/data_criteria_helpers/dc_base_extract.rb +80 -0
- data/lib/hqmf-parser/2.0/data_criteria_helpers/dc_definition_from_template_or_type_extract.rb +201 -0
- data/lib/hqmf-parser/2.0/data_criteria_helpers/dc_post_processing.rb +85 -0
- data/lib/hqmf-parser/2.0/data_criteria_helpers/dc_specific_occurrences_and_source_data_criteria_extract.rb +117 -0
- data/lib/hqmf-parser/2.0/document.rb +246 -222
- data/lib/hqmf-parser/2.0/document_helpers/doc_population_helper.rb +175 -0
- data/lib/hqmf-parser/2.0/document_helpers/doc_utilities.rb +131 -0
- data/lib/hqmf-parser/2.0/field_value_helper.rb +251 -0
- data/lib/hqmf-parser/2.0/population_criteria.rb +101 -32
- data/lib/hqmf-parser/2.0/precondition.rb +61 -35
- data/lib/hqmf-parser/2.0/source_data_criteria_helper.rb +112 -0
- data/lib/hqmf-parser/2.0/types.rb +253 -73
- data/lib/hqmf-parser/2.0/utilities.rb +27 -12
- data/lib/hqmf-parser/2.0/value_set_helper.rb +101 -0
- data/lib/hqmf-parser/converter/pass1/data_criteria_converter.rb +6 -1
- data/lib/hqmf-parser/converter/pass1/population_criteria_converter.rb +34 -30
- data/lib/hqmf-parser/parser.rb +5 -5
- data/resources/schematron/qrda/cat_1/{CDAR2_QRDA_I_R1_D3_2015MAY_Schematron.sch → HL7_CDAR2_QRDA_Category_I_2_12_16.sch} +4692 -4675
- data/resources/schematron/qrda/cat_1_r3_1/HL7 QRDA Category I STU 3.1.sch +3573 -0
- data/resources/schematron/qrda/cat_1_r3_1/HL7 QRDA Category III STU 1.1.sch +464 -0
- data/resources/schematron/qrda/cat_1_r3_1/QRDA Category I STU Release 3.1.sch +5394 -0
- data/resources/schematron/qrda/cat_1_r3_1/voc.xml +1229 -0
- data/resources/schematron/qrda/cat_1_r4/HL7 QRDA Category I STU 4.sch +3526 -0
- data/resources/schematron/qrda/cat_1_r4/voc.xml +1186 -0
- data/resources/schematron/qrda/cat_3_r1_1/HL7 QRDA Category III STU 1.1.sch +528 -0
- data/resources/schematron/qrda/cat_3_r1_1/voc.xml +8 -0
- data/resources/schematron/qrda/cat_3_r2/HL7 QRDA Category III STU 2.sch +677 -0
- data/resources/schematron/qrda/cat_3_r2/voc.xml +1186 -0
- data/resources/schematron/qrda/cat_3_r2_1/HL7 QRDA Category III STU 2.1.sch +678 -0
- data/resources/schematron/qrda/cat_3_r2_1/voc.xml +1186 -0
- data/templates/c32/_medical_equipment.c32.erb +1 -1
- data/templates/c32/_vital_signs.c32.erb +1 -1
- data/templates/cat1/{_2.16.840.1.113883.10.20.22.4.85.cat1.erb → r2/_2.16.840.1.113883.10.20.22.4.85.cat1.erb} +1 -1
- data/templates/cat1/{_2.16.840.1.113883.10.20.24.3.1.cat1.erb → r2/_2.16.840.1.113883.10.20.24.3.1.cat1.erb} +3 -3
- data/templates/cat1/{_2.16.840.1.113883.10.20.24.3.101.cat1.erb → r2/_2.16.840.1.113883.10.20.24.3.101.cat1.erb} +1 -1
- data/templates/cat1/{_2.16.840.1.113883.10.20.24.3.103.cat1.erb → r2/_2.16.840.1.113883.10.20.24.3.103.cat1.erb} +9 -5
- data/templates/cat1/{_2.16.840.1.113883.10.20.24.3.105.cat1.erb → r2/_2.16.840.1.113883.10.20.24.3.105.cat1.erb} +18 -10
- data/templates/cat1/r2/_2.16.840.1.113883.10.20.24.3.11.cat1.erb +88 -0
- data/templates/cat1/r2/_2.16.840.1.113883.10.20.24.3.12.cat1.erb +50 -0
- data/templates/cat1/r2/_2.16.840.1.113883.10.20.24.3.13.cat1.erb +54 -0
- data/templates/cat1/r2/_2.16.840.1.113883.10.20.24.3.135.cat1.erb +70 -0
- data/templates/cat1/r2/_2.16.840.1.113883.10.20.24.3.136.cat1.erb +52 -0
- data/templates/cat1/{_2.16.840.1.113883.10.20.24.3.14.cat1.erb → r2/_2.16.840.1.113883.10.20.24.3.14.cat1.erb} +24 -6
- data/templates/cat1/r2/_2.16.840.1.113883.10.20.24.3.140.cat1.erb +39 -0
- data/templates/cat1/r2/_2.16.840.1.113883.10.20.24.3.17.cat1.erb +23 -0
- data/templates/cat1/r2/_2.16.840.1.113883.10.20.24.3.18.cat1.erb +25 -0
- data/templates/cat1/r2/_2.16.840.1.113883.10.20.24.3.2.cat1.erb +29 -0
- data/templates/cat1/{_2.16.840.1.113883.10.20.24.3.20.cat1.erb → r2/_2.16.840.1.113883.10.20.24.3.20.cat1.erb} +4 -4
- data/templates/cat1/r2/_2.16.840.1.113883.10.20.24.3.22.cat1.erb +22 -0
- data/templates/cat1/r2/_2.16.840.1.113883.10.20.24.3.23.cat1.erb +114 -0
- data/templates/cat1/r2/_2.16.840.1.113883.10.20.24.3.26.cat1.erb +20 -0
- data/templates/cat1/{_2.16.840.1.113883.10.20.24.3.28.cat1.erb → r2/_2.16.840.1.113883.10.20.24.3.28.cat1.erb} +2 -2
- data/templates/cat1/r2/_2.16.840.1.113883.10.20.24.3.3.cat1.erb +25 -0
- data/templates/cat1/r2/_2.16.840.1.113883.10.20.24.3.31.cat1.erb +23 -0
- data/templates/cat1/r2/_2.16.840.1.113883.10.20.24.3.32.cat1.erb +20 -0
- data/templates/cat1/{_2.16.840.1.113883.10.20.24.3.34.cat1.erb → r2/_2.16.840.1.113883.10.20.24.3.34.cat1.erb} +6 -6
- data/templates/cat1/r2/_2.16.840.1.113883.10.20.24.3.37.cat1.erb +22 -0
- data/templates/cat1/r2/_2.16.840.1.113883.10.20.24.3.38.cat1.erb +20 -0
- data/templates/cat1/r2/_2.16.840.1.113883.10.20.24.3.4.cat1.erb +29 -0
- data/templates/cat1/{_2.16.840.1.113883.10.20.24.3.40.cat1.erb → r2/_2.16.840.1.113883.10.20.24.3.40.cat1.erb} +3 -3
- data/templates/cat1/r2/_2.16.840.1.113883.10.20.24.3.41.cat1.erb +46 -0
- data/templates/cat1/r2/_2.16.840.1.113883.10.20.24.3.42.cat1.erb +38 -0
- data/templates/cat1/r2/_2.16.840.1.113883.10.20.24.3.43.cat1.erb +24 -0
- data/templates/cat1/r2/_2.16.840.1.113883.10.20.24.3.44.cat1.erb +25 -0
- data/templates/cat1/r2/_2.16.840.1.113883.10.20.24.3.45.cat1.erb +26 -0
- data/templates/cat1/r2/_2.16.840.1.113883.10.20.24.3.46.cat1.erb +30 -0
- data/templates/cat1/r2/_2.16.840.1.113883.10.20.24.3.47.cat1.erb +47 -0
- data/templates/cat1/r2/_2.16.840.1.113883.10.20.24.3.51.cat1.erb +14 -0
- data/templates/cat1/r2/_2.16.840.1.113883.10.20.24.3.54.cat1.erb +32 -0
- data/templates/cat1/{_2.16.840.1.113883.10.20.24.3.55.cat1.erb → r2/_2.16.840.1.113883.10.20.24.3.55.cat1.erb} +0 -0
- data/templates/cat1/r2/_2.16.840.1.113883.10.20.24.3.57.cat1.erb +23 -0
- data/templates/cat1/r2/_2.16.840.1.113883.10.20.24.3.59.cat1.erb +22 -0
- data/templates/cat1/r2/_2.16.840.1.113883.10.20.24.3.62.cat1.erb +36 -0
- data/templates/cat1/r2/_2.16.840.1.113883.10.20.24.3.63.cat1.erb +21 -0
- data/templates/cat1/r2/_2.16.840.1.113883.10.20.24.3.64.cat1.erb +52 -0
- data/templates/cat1/{_2.16.840.1.113883.10.20.24.3.66.cat1.erb → r2/_2.16.840.1.113883.10.20.24.3.66.cat1.erb} +6 -6
- data/templates/cat1/r2/_2.16.840.1.113883.10.20.24.3.69.cat1.erb +23 -0
- data/templates/cat1/r2/_2.16.840.1.113883.10.20.24.3.7.cat1.erb +33 -0
- data/templates/cat1/{_2.16.840.1.113883.10.20.24.3.76.cat1.erb → r2/_2.16.840.1.113883.10.20.24.3.76.cat1.erb} +5 -3
- data/templates/cat1/r2/_2.16.840.1.113883.10.20.24.3.81.cat1.erb +23 -0
- data/templates/cat1/r2/_2.16.840.1.113883.10.20.24.3.82.cat1.erb +23 -0
- data/templates/cat1/r2/_2.16.840.1.113883.10.20.24.3.9.cat1.erb +64 -0
- data/templates/cat1/r2/_2.16.840.1.113883.10.20.28.3.6.cat1.erb +17 -0
- data/templates/cat1/{_address.cat1.erb → r2/_address.cat1.erb} +0 -0
- data/templates/cat1/{_author.cat1.erb → r2/_author.cat1.erb} +0 -0
- data/templates/cat1/r2/_fulfills.cat1.erb +14 -0
- data/templates/cat1/{_id.cat1.erb → r2/_id.cat1.erb} +0 -0
- data/templates/cat1/{_measures.cat1.erb → r2/_measures.cat1.erb} +1 -1
- data/templates/cat1/{_medication_details.cat1.erb → r2/_medication_details.cat1.erb} +3 -2
- data/templates/cat1/r2/_medication_dispense.cat1.erb +22 -0
- data/templates/cat1/{_ordinality.cat1.erb → r2/_ordinality.cat1.erb} +0 -0
- data/templates/cat1/{_organization.cat1.erb → r2/_organization.cat1.erb} +0 -0
- data/templates/cat1/{_patient_data.cat1.erb → r2/_patient_data.cat1.erb} +4 -1
- data/templates/cat1/r2/_patient_data_r3_1.cat1.erb +17 -0
- data/templates/cat1/r2/_providers.cat1.erb +76 -0
- data/templates/cat1/r2/_reason.cat1.erb +45 -0
- data/templates/cat1/{_record_target.cat1.erb → r2/_record_target.cat1.erb} +3 -0
- data/templates/cat1/r2/_reporting_parameters.cat1.erb +31 -0
- data/templates/cat1/{_result_value.cat1.erb → r2/_result_value.cat1.erb} +1 -1
- data/templates/cat1/{_telecom.cat1.erb → r2/_telecom.cat1.erb} +0 -0
- data/templates/cat1/{show.cat1.erb → r2/show.cat1.erb} +52 -5
- data/templates/cat1/r3/_2.16.840.1.113883.10.20.24.3.1.cat1.erb +14 -0
- data/templates/cat1/r3/_2.16.840.1.113883.10.20.24.3.103.cat1.erb +17 -0
- data/templates/cat1/r3/_2.16.840.1.113883.10.20.24.3.105.cat1.erb +68 -0
- data/templates/cat1/r3/_2.16.840.1.113883.10.20.24.3.11.cat1.erb +58 -0
- data/templates/cat1/{_2.16.840.1.113883.10.20.24.3.12.cat1.erb → r3/_2.16.840.1.113883.10.20.24.3.12.cat1.erb} +4 -5
- data/templates/cat1/r3/_2.16.840.1.113883.10.20.24.3.13.cat1.erb +39 -0
- data/templates/cat1/r3/_2.16.840.1.113883.10.20.24.3.14.cat1.erb +39 -0
- data/templates/cat1/r3/_2.16.840.1.113883.10.20.24.3.17.cat1.erb +23 -0
- data/templates/cat1/r3/_2.16.840.1.113883.10.20.24.3.18.cat1.erb +25 -0
- data/templates/cat1/r3/_2.16.840.1.113883.10.20.24.3.2.cat1.erb +29 -0
- data/templates/cat1/{_2.16.840.1.113883.10.20.24.3.22.cat1.erb → r3/_2.16.840.1.113883.10.20.24.3.22.cat1.erb} +6 -5
- data/templates/cat1/{_2.16.840.1.113883.10.20.24.3.23.cat1.erb → r3/_2.16.840.1.113883.10.20.24.3.23.cat1.erb} +26 -30
- data/templates/cat1/r3/_2.16.840.1.113883.10.20.24.3.26.cat1.erb +20 -0
- data/templates/cat1/r3/_2.16.840.1.113883.10.20.24.3.3.cat1.erb +25 -0
- data/templates/cat1/r3/_2.16.840.1.113883.10.20.24.3.31.cat1.erb +23 -0
- data/templates/cat1/{_2.16.840.1.113883.10.20.24.3.32.cat1.erb → r3/_2.16.840.1.113883.10.20.24.3.32.cat1.erb} +4 -4
- data/templates/cat1/r3/_2.16.840.1.113883.10.20.24.3.37.cat1.erb +22 -0
- data/templates/cat1/{_2.16.840.1.113883.10.20.24.3.38.cat1.erb → r3/_2.16.840.1.113883.10.20.24.3.38.cat1.erb} +3 -3
- data/templates/cat1/r3/_2.16.840.1.113883.10.20.24.3.4.cat1.erb +29 -0
- data/templates/cat1/{_2.16.840.1.113883.10.20.24.3.41.cat1.erb → r3/_2.16.840.1.113883.10.20.24.3.41.cat1.erb} +8 -10
- data/templates/cat1/r3/_2.16.840.1.113883.10.20.24.3.42.cat1.erb +38 -0
- data/templates/cat1/r3/_2.16.840.1.113883.10.20.24.3.43.cat1.erb +24 -0
- data/templates/cat1/r3/_2.16.840.1.113883.10.20.24.3.44.cat1.erb +25 -0
- data/templates/cat1/{_2.16.840.1.113883.10.20.24.3.45.cat1.erb → r3/_2.16.840.1.113883.10.20.24.3.45.cat1.erb} +5 -5
- data/templates/cat1/r3/_2.16.840.1.113883.10.20.24.3.46.cat1.erb +30 -0
- data/templates/cat1/r3/_2.16.840.1.113883.10.20.24.3.47.cat1.erb +47 -0
- data/templates/cat1/r3/_2.16.840.1.113883.10.20.24.3.51.cat1.erb +14 -0
- data/templates/cat1/{_2.16.840.1.113883.10.20.24.3.54.cat1.erb → r3/_2.16.840.1.113883.10.20.24.3.54.cat1.erb} +4 -4
- data/templates/cat1/r3/_2.16.840.1.113883.10.20.24.3.55.cat1.erb +18 -0
- data/templates/cat1/r3/_2.16.840.1.113883.10.20.24.3.57.cat1.erb +23 -0
- data/templates/cat1/r3/_2.16.840.1.113883.10.20.24.3.59.cat1.erb +22 -0
- data/templates/cat1/r3/_2.16.840.1.113883.10.20.24.3.62.cat1.erb +36 -0
- data/templates/cat1/{_2.16.840.1.113883.10.20.24.3.63.cat1.erb → r3/_2.16.840.1.113883.10.20.24.3.63.cat1.erb} +6 -8
- data/templates/cat1/r3/_2.16.840.1.113883.10.20.24.3.64.cat1.erb +51 -0
- data/templates/cat1/r3/_2.16.840.1.113883.10.20.24.3.69.cat1.erb +23 -0
- data/templates/cat1/r3/_2.16.840.1.113883.10.20.24.3.7.cat1.erb +33 -0
- data/templates/cat1/r3/_2.16.840.1.113883.10.20.24.3.76.cat1.erb +19 -0
- data/templates/cat1/r3/_2.16.840.1.113883.10.20.24.3.81.cat1.erb +24 -0
- data/templates/cat1/r3/_2.16.840.1.113883.10.20.24.3.82.cat1.erb +24 -0
- data/templates/cat1/r3/_2.16.840.1.113883.10.20.24.3.9.cat1.erb +57 -0
- data/templates/cat1/r3/_address.cat1.erb +9 -0
- data/templates/{cat3/_author.cat3.erb → cat1/r3/_author.cat1.erb} +0 -0
- data/templates/cat1/{_fulfills.cat1.erb → r3/_fulfills.cat1.erb} +0 -0
- data/templates/{cat3/_id.cat3.erb → cat1/r3/_id.cat1.erb} +0 -0
- data/templates/cat1/r3/_measures.cat1.erb +93 -0
- data/templates/cat1/r3/_medication_details.cat1.erb +16 -0
- data/templates/cat1/{_medication_dispense.cat1.erb → r3/_medication_dispense.cat1.erb} +3 -3
- data/templates/cat1/r3/_ordinality.cat1.erb +10 -0
- data/templates/cat1/r3/_organization.cat1.erb +9 -0
- data/templates/cat1/r3/_patient_data.cat1.erb +17 -0
- data/templates/cat1/r3/_providers.cat1.erb +76 -0
- data/templates/cat1/r3/_reason.cat1.erb +34 -0
- data/templates/cat1/r3/_record_target.cat1.erb +56 -0
- data/templates/cat1/r3/_reporting_parameters.cat1.erb +31 -0
- data/templates/cat1/r3/_result_value.cat1.erb +28 -0
- data/templates/{cat3/_telecom.cat3.erb → cat1/r3/_telecom.cat1.erb} +0 -0
- data/templates/cat1/r3/show.cat1.erb +183 -0
- data/templates/cat1/r3_1/_2.16.840.1.113883.10.20.24.3.1.cat1.erb +14 -0
- data/templates/cat1/r3_1/_2.16.840.1.113883.10.20.24.3.103.cat1.erb +17 -0
- data/templates/cat1/r3_1/_2.16.840.1.113883.10.20.24.3.105.cat1.erb +68 -0
- data/templates/cat1/r3_1/_2.16.840.1.113883.10.20.24.3.12.cat1.erb +53 -0
- data/templates/cat1/r3_1/_2.16.840.1.113883.10.20.24.3.135.cat1.erb +71 -0
- data/templates/cat1/r3_1/_2.16.840.1.113883.10.20.24.3.136.cat1.erb +52 -0
- data/templates/cat1/r3_1/_2.16.840.1.113883.10.20.24.3.140.cat1.erb +39 -0
- data/templates/cat1/r3_1/_2.16.840.1.113883.10.20.24.3.17.cat1.erb +23 -0
- data/templates/cat1/{_2.16.840.1.113883.10.20.24.3.18.cat1.erb → r3_1/_2.16.840.1.113883.10.20.24.3.18.cat1.erb} +3 -3
- data/templates/cat1/{_2.16.840.1.113883.10.20.24.3.2.cat1.erb → r3_1/_2.16.840.1.113883.10.20.24.3.2.cat1.erb} +2 -2
- data/templates/cat1/r3_1/_2.16.840.1.113883.10.20.24.3.22.cat1.erb +30 -0
- data/templates/cat1/r3_1/_2.16.840.1.113883.10.20.24.3.23.cat1.erb +116 -0
- data/templates/cat1/{_2.16.840.1.113883.10.20.24.3.26.cat1.erb → r3_1/_2.16.840.1.113883.10.20.24.3.26.cat1.erb} +4 -2
- data/templates/cat1/{_2.16.840.1.113883.10.20.24.3.3.cat1.erb → r3_1/_2.16.840.1.113883.10.20.24.3.3.cat1.erb} +2 -2
- data/templates/cat1/r3_1/_2.16.840.1.113883.10.20.24.3.31.cat1.erb +24 -0
- data/templates/cat1/r3_1/_2.16.840.1.113883.10.20.24.3.32.cat1.erb +21 -0
- data/templates/cat1/r3_1/_2.16.840.1.113883.10.20.24.3.37.cat1.erb +22 -0
- data/templates/cat1/r3_1/_2.16.840.1.113883.10.20.24.3.38.cat1.erb +21 -0
- data/templates/cat1/{_2.16.840.1.113883.10.20.24.3.4.cat1.erb → r3_1/_2.16.840.1.113883.10.20.24.3.4.cat1.erb} +2 -2
- data/templates/cat1/r3_1/_2.16.840.1.113883.10.20.24.3.41.cat1.erb +45 -0
- data/templates/cat1/{_2.16.840.1.113883.10.20.24.3.42.cat1.erb → r3_1/_2.16.840.1.113883.10.20.24.3.42.cat1.erb} +4 -4
- data/templates/cat1/{_2.16.840.1.113883.10.20.24.3.43.cat1.erb → r3_1/_2.16.840.1.113883.10.20.24.3.43.cat1.erb} +3 -3
- data/templates/cat1/{_2.16.840.1.113883.10.20.24.3.44.cat1.erb → r3_1/_2.16.840.1.113883.10.20.24.3.44.cat1.erb} +3 -3
- data/templates/cat1/r3_1/_2.16.840.1.113883.10.20.24.3.45.cat1.erb +35 -0
- data/templates/cat1/{_2.16.840.1.113883.10.20.24.3.46.cat1.erb → r3_1/_2.16.840.1.113883.10.20.24.3.46.cat1.erb} +4 -4
- data/templates/cat1/r3_1/_2.16.840.1.113883.10.20.24.3.47.cat1.erb +47 -0
- data/templates/cat1/r3_1/_2.16.840.1.113883.10.20.24.3.51.cat1.erb +14 -0
- data/templates/cat1/r3_1/_2.16.840.1.113883.10.20.24.3.54.cat1.erb +32 -0
- data/templates/cat1/r3_1/_2.16.840.1.113883.10.20.24.3.55.cat1.erb +18 -0
- data/templates/cat1/{_2.16.840.1.113883.10.20.24.3.57.cat1.erb → r3_1/_2.16.840.1.113883.10.20.24.3.57.cat1.erb} +3 -3
- data/templates/cat1/r3_1/_2.16.840.1.113883.10.20.24.3.59.cat1.erb +22 -0
- data/templates/cat1/{_2.16.840.1.113883.10.20.24.3.62.cat1.erb → r3_1/_2.16.840.1.113883.10.20.24.3.62.cat1.erb} +5 -5
- data/templates/cat1/r3_1/_2.16.840.1.113883.10.20.24.3.63.cat1.erb +21 -0
- data/templates/cat1/{_2.16.840.1.113883.10.20.24.3.64.cat1.erb → r3_1/_2.16.840.1.113883.10.20.24.3.64.cat1.erb} +7 -7
- data/templates/cat1/{_2.16.840.1.113883.10.20.24.3.69.cat1.erb → r3_1/_2.16.840.1.113883.10.20.24.3.69.cat1.erb} +2 -2
- data/templates/cat1/{_2.16.840.1.113883.10.20.24.3.7.cat1.erb → r3_1/_2.16.840.1.113883.10.20.24.3.7.cat1.erb} +12 -9
- data/templates/cat1/r3_1/_2.16.840.1.113883.10.20.24.3.81.cat1.erb +33 -0
- data/templates/cat1/r3_1/_2.16.840.1.113883.10.20.24.3.82.cat1.erb +33 -0
- data/templates/cat1/r3_1/_2.16.840.1.113883.10.20.24.3.9.cat1.erb +41 -0
- data/templates/cat1/r3_1/_2.16.840.1.113883.10.20.28.3.6.cat1.erb +17 -0
- data/templates/cat1/r3_1/_address.cat1.erb +9 -0
- data/templates/cat1/r3_1/_author.cat1.erb +28 -0
- data/templates/cat1/r3_1/_fulfills.cat1.erb +14 -0
- data/templates/cat1/r3_1/_id.cat1.erb +1 -0
- data/templates/cat1/r3_1/_measures.cat1.erb +93 -0
- data/templates/cat1/r3_1/_medication_details.cat1.erb +16 -0
- data/templates/cat1/r3_1/_medication_dispense.cat1.erb +22 -0
- data/templates/cat1/r3_1/_ordinality.cat1.erb +10 -0
- data/templates/cat1/r3_1/_organization.cat1.erb +9 -0
- data/templates/cat1/r3_1/_patient_data.cat1.erb +17 -0
- data/templates/cat1/r3_1/_providers.cat1.erb +76 -0
- data/templates/cat1/r3_1/_reason.cat1.erb +34 -0
- data/templates/cat1/r3_1/_record_target.cat1.erb +56 -0
- data/templates/cat1/r3_1/_reporting_parameters.cat1.erb +31 -0
- data/templates/cat1/r3_1/_result_value.cat1.erb +28 -0
- data/templates/cat1/r3_1/_telecom.cat1.erb +1 -0
- data/templates/cat1/r3_1/show.cat1.erb +183 -0
- data/templates/cat1/r4/_2.16.840.1.113883.10.20.24.3.1.cat1.erb +14 -0
- data/templates/cat1/r4/_2.16.840.1.113883.10.20.24.3.103.cat1.erb +17 -0
- data/templates/cat1/r4/_2.16.840.1.113883.10.20.24.3.105.cat1.erb +68 -0
- data/templates/cat1/r4/_2.16.840.1.113883.10.20.24.3.12.cat1.erb +53 -0
- data/templates/cat1/r4/_2.16.840.1.113883.10.20.24.3.135.cat1.erb +75 -0
- data/templates/cat1/r4/_2.16.840.1.113883.10.20.24.3.136.cat1.erb +52 -0
- data/templates/cat1/r4/_2.16.840.1.113883.10.20.24.3.140.cat1.erb +39 -0
- data/templates/cat1/{_2.16.840.1.113883.10.20.24.3.59.cat1.erb → r4/_2.16.840.1.113883.10.20.24.3.144.cat1.erb} +6 -6
- data/templates/cat1/r4/_2.16.840.1.113883.10.20.24.3.145.cat1.erb +24 -0
- data/templates/cat1/r4/_2.16.840.1.113883.10.20.24.3.17.cat1.erb +23 -0
- data/templates/cat1/r4/_2.16.840.1.113883.10.20.24.3.18.cat1.erb +25 -0
- data/templates/cat1/r4/_2.16.840.1.113883.10.20.24.3.2.cat1.erb +29 -0
- data/templates/cat1/r4/_2.16.840.1.113883.10.20.24.3.22.cat1.erb +30 -0
- data/templates/cat1/r4/_2.16.840.1.113883.10.20.24.3.23.cat1.erb +116 -0
- data/templates/cat1/r4/_2.16.840.1.113883.10.20.24.3.3.cat1.erb +25 -0
- data/templates/cat1/r4/_2.16.840.1.113883.10.20.24.3.31.cat1.erb +24 -0
- data/templates/cat1/r4/_2.16.840.1.113883.10.20.24.3.32.cat1.erb +21 -0
- data/templates/cat1/r4/_2.16.840.1.113883.10.20.24.3.37.cat1.erb +22 -0
- data/templates/cat1/r4/_2.16.840.1.113883.10.20.24.3.38.cat1.erb +21 -0
- data/templates/cat1/r4/_2.16.840.1.113883.10.20.24.3.4.cat1.erb +29 -0
- data/templates/cat1/r4/_2.16.840.1.113883.10.20.24.3.41.cat1.erb +45 -0
- data/templates/cat1/r4/_2.16.840.1.113883.10.20.24.3.42.cat1.erb +38 -0
- data/templates/cat1/r4/_2.16.840.1.113883.10.20.24.3.43.cat1.erb +24 -0
- data/templates/cat1/r4/_2.16.840.1.113883.10.20.24.3.44.cat1.erb +25 -0
- data/templates/cat1/r4/_2.16.840.1.113883.10.20.24.3.45.cat1.erb +35 -0
- data/templates/cat1/r4/_2.16.840.1.113883.10.20.24.3.46.cat1.erb +30 -0
- data/templates/cat1/r4/_2.16.840.1.113883.10.20.24.3.47.cat1.erb +47 -0
- data/templates/cat1/r4/_2.16.840.1.113883.10.20.24.3.51.cat1.erb +14 -0
- data/templates/cat1/r4/_2.16.840.1.113883.10.20.24.3.54.cat1.erb +32 -0
- data/templates/cat1/r4/_2.16.840.1.113883.10.20.24.3.55.cat1.erb +18 -0
- data/templates/cat1/r4/_2.16.840.1.113883.10.20.24.3.57.cat1.erb +23 -0
- data/templates/cat1/r4/_2.16.840.1.113883.10.20.24.3.59.cat1.erb +22 -0
- data/templates/cat1/r4/_2.16.840.1.113883.10.20.24.3.62.cat1.erb +36 -0
- data/templates/cat1/r4/_2.16.840.1.113883.10.20.24.3.63.cat1.erb +21 -0
- data/templates/cat1/r4/_2.16.840.1.113883.10.20.24.3.64.cat1.erb +52 -0
- data/templates/cat1/r4/_2.16.840.1.113883.10.20.24.3.7.cat1.erb +33 -0
- data/templates/cat1/r4/_2.16.840.1.113883.10.20.24.3.81.cat1.erb +33 -0
- data/templates/cat1/r4/_2.16.840.1.113883.10.20.24.3.82.cat1.erb +33 -0
- data/templates/cat1/r4/_2.16.840.1.113883.10.20.24.3.9.cat1.erb +41 -0
- data/templates/cat1/r4/_2.16.840.1.113883.10.20.28.3.6.cat1.erb +17 -0
- data/templates/cat1/r4/_address.cat1.erb +7 -0
- data/templates/cat1/r4/_author.cat1.erb +28 -0
- data/templates/cat1/r4/_fulfills.cat1.erb +14 -0
- data/templates/cat1/r4/_id.cat1.erb +1 -0
- data/templates/cat1/r4/_measures.cat1.erb +93 -0
- data/templates/cat1/r4/_medication_details.cat1.erb +16 -0
- data/templates/cat1/r4/_medication_dispense.cat1.erb +22 -0
- data/templates/cat1/r4/_ordinality.cat1.erb +10 -0
- data/templates/cat1/r4/_organization.cat1.erb +9 -0
- data/templates/cat1/r4/_patient_data.cat1.erb +17 -0
- data/templates/cat1/r4/_providers.cat1.erb +76 -0
- data/templates/cat1/r4/_reason.cat1.erb +34 -0
- data/templates/cat1/r4/_record_target.cat1.erb +54 -0
- data/templates/cat1/r4/_reporting_parameters.cat1.erb +31 -0
- data/templates/cat1/r4/_result_value.cat1.erb +28 -0
- data/templates/cat1/r4/_telecom.cat1.erb +1 -0
- data/templates/cat1/r4/show.cat1.erb +192 -0
- data/templates/cat3/{_address.cat3.erb → r1/_address.cat3.erb} +0 -0
- data/templates/cat3/r1/_author.cat3.erb +28 -0
- data/templates/cat3/{_continuous_variable_value.cat3.erb → r1/_continuous_variable_value.cat3.erb} +0 -0
- data/templates/cat3/r1/_id.cat3.erb +1 -0
- data/templates/cat3/{_measure_data.cat3.erb → r1/_measure_data.cat3.erb} +7 -6
- data/templates/cat3/{_organization.cat3.erb → r1/_organization.cat3.erb} +0 -0
- data/templates/cat3/{_performance_rate.cat3.erb → r1/_performance_rate.cat3.erb} +1 -3
- data/templates/cat3/{_providers.cat3.erb → r1/_providers.cat3.erb} +0 -0
- data/templates/cat3/{_reporting_parameters.cat3.erb → r1/_reporting_parameters.cat3.erb} +0 -0
- data/templates/cat3/{_supplemental_data.cat3.erb → r1/_supplemental_data.cat3.erb} +2 -0
- data/templates/cat3/r1/_telecom.cat3.erb +1 -0
- data/templates/cat3/{show.cat3.erb → r1/show.cat3.erb} +5 -5
- data/templates/cat3/r1_1/_address.cat3.erb +9 -0
- data/templates/cat3/r1_1/_author.cat3.erb +28 -0
- data/templates/cat3/r1_1/_continuous_variable_value.cat3.erb +20 -0
- data/templates/cat3/r1_1/_id.cat3.erb +1 -0
- data/templates/cat3/r1_1/_measure_data.cat3.erb +136 -0
- data/templates/cat3/r1_1/_organization.cat3.erb +6 -0
- data/templates/cat3/r1_1/_performance_rate.cat3.erb +18 -0
- data/templates/{cat1/_providers.cat1.erb → cat3/r1_1/_providers.cat3.erb} +18 -18
- data/templates/{cat1/_reporting_parameters.cat1.erb → cat3/r1_1/_reporting_parameters.cat3.erb} +5 -1
- data/templates/cat3/r1_1/_supplemental_data.cat3.erb +38 -0
- data/templates/cat3/r1_1/_telecom.cat3.erb +1 -0
- data/templates/cat3/r1_1/show.cat3.erb +150 -0
- data/templates/cat3/r2/_address.cat3.erb +9 -0
- data/templates/cat3/r2/_author.cat3.erb +28 -0
- data/templates/cat3/r2/_continuous_variable_value.cat3.erb +20 -0
- data/templates/cat3/r2/_id.cat3.erb +1 -0
- data/templates/cat3/r2/_measure_data.cat3.erb +136 -0
- data/templates/cat3/r2/_organization.cat3.erb +6 -0
- data/templates/cat3/r2/_performance_rate.cat3.erb +19 -0
- data/templates/cat3/r2/_providers.cat3.erb +57 -0
- data/templates/cat3/r2/_reporting_parameters.cat3.erb +29 -0
- data/templates/cat3/r2/_supplemental_data.cat3.erb +38 -0
- data/templates/cat3/r2/_telecom.cat3.erb +1 -0
- data/templates/cat3/r2/show.cat3.erb +150 -0
- data/templates/cat3/r2_1/_address.cat3.erb +9 -0
- data/templates/cat3/r2_1/_author.cat3.erb +28 -0
- data/templates/cat3/r2_1/_continuous_variable_value.cat3.erb +20 -0
- data/templates/cat3/r2_1/_id.cat3.erb +1 -0
- data/templates/cat3/r2_1/_measure_data.cat3.erb +136 -0
- data/templates/cat3/r2_1/_organization.cat3.erb +6 -0
- data/templates/cat3/r2_1/_performance_rate.cat3.erb +19 -0
- data/templates/cat3/r2_1/_providers.cat3.erb +57 -0
- data/templates/cat3/r2_1/_reporting_parameters.cat3.erb +20 -0
- data/templates/cat3/r2_1/_reporting_parameters_act.cat3.erb +10 -0
- data/templates/cat3/r2_1/_supplemental_data.cat3.erb +38 -0
- data/templates/cat3/r2_1/_telecom.cat3.erb +1 -0
- data/templates/cat3/r2_1/show.cat3.erb +153 -0
- data/templates/ccda/_medical_equipment.ccda.erb +1 -1
- data/templates/ccda/_social_history.ccda.erb +2 -2
- data/templates/ccda/_vital_signs.ccda.erb +1 -1
- data/templates/html/_entries_by_section.html.erb +1 -1
- metadata +425 -153
- data/lib/health-data-standards/import/cat1/procedure_importer.rb +0 -42
- data/templates/cat1/_2.16.840.1.113883.10.20.24.3.11.cat1.erb +0 -55
- data/templates/cat1/_2.16.840.1.113883.10.20.24.3.13.cat1.erb +0 -38
- data/templates/cat1/_2.16.840.1.113883.10.20.24.3.17.cat1.erb +0 -22
- data/templates/cat1/_2.16.840.1.113883.10.20.24.3.31.cat1.erb +0 -22
- data/templates/cat1/_2.16.840.1.113883.10.20.24.3.37.cat1.erb +0 -20
- data/templates/cat1/_2.16.840.1.113883.10.20.24.3.47.cat1.erb +0 -27
- data/templates/cat1/_2.16.840.1.113883.10.20.24.3.51.cat1.erb +0 -13
- data/templates/cat1/_reason.cat1.erb +0 -23
@@ -9,14 +9,19 @@ module HealthDataStandards
|
|
9
9
|
@code_map = nil
|
10
10
|
end
|
11
11
|
|
12
|
-
|
13
|
-
|
12
|
+
# For environments where value sets are scoped, say by measure, they can be passed in
|
13
|
+
def export(patient, measures=[], scoped_value_sets = nil)
|
14
|
+
if scoped_value_sets
|
15
|
+
@code_map = self.build_code_map(scoped_value_sets) # Don't cache if value sets are passed in
|
16
|
+
else
|
17
|
+
@code_map ||= self.build_code_map
|
18
|
+
end
|
14
19
|
@rendering_context.render(:template => 'show', :locals => {:patient => patient, :code_map => @code_map, :measures => measures})
|
15
20
|
end
|
16
21
|
|
17
|
-
def build_code_map
|
22
|
+
def build_code_map(scoped_value_sets = nil)
|
18
23
|
super_code_map = {}
|
19
|
-
val_set_array = HealthDataStandards::SVS::ValueSet.all.to_a
|
24
|
+
val_set_array = (scoped_value_sets || HealthDataStandards::SVS::ValueSet.all).to_a
|
20
25
|
val_set_array.each do |valset|
|
21
26
|
valset.concepts.each do |concept|
|
22
27
|
super_code_map[concept.code_system_name] ||= {}
|
@@ -5,7 +5,7 @@ module HealthDataStandards
|
|
5
5
|
def hqmf_qrda_oid_map
|
6
6
|
if @hqmf_qrda_oid_map.blank?
|
7
7
|
template_id_file = File.expand_path('../hqmf-qrda-oids.json', __FILE__)
|
8
|
-
@hqmf_qrda_oid_map = JSON.parse(File.read(template_id_file))
|
8
|
+
@hqmf_qrda_oid_map = JSON.parse(File.read(template_id_file))
|
9
9
|
end
|
10
10
|
@hqmf_qrda_oid_map
|
11
11
|
end
|
@@ -14,36 +14,54 @@ module HealthDataStandards
|
|
14
14
|
hqmf_qrda_oid_map.any? {|map_tuple| map_tuple['qrda_oid'] == oid}
|
15
15
|
end
|
16
16
|
|
17
|
-
def qrda_oid_for_hqmf_oid(hqmf_oid, vs_oid = nil)
|
17
|
+
def qrda_oid_for_hqmf_oid(hqmf_oid, vs_oid = nil, qrda_version = nil)
|
18
18
|
|
19
19
|
if (vs_oid && hqmf_oid == '2.16.840.1.113883.3.560.1.1001')
|
20
|
-
qrda_oid_for_hqmf_patient_characteristic(vs_oid)
|
20
|
+
qrda_oid_for_hqmf_patient_characteristic(vs_oid, qrda_version)
|
21
21
|
else
|
22
22
|
oid_tuple = hqmf_qrda_oid_map.find {|map_tuple| map_tuple['hqmf_oid'] == hqmf_oid }
|
23
23
|
if oid_tuple.nil?
|
24
|
-
|
24
|
+
if hqmf_oid.nil?
|
25
|
+
raise "This may be due to a discrepency between QDM 4.2 and QRDA R3. "\
|
26
|
+
"Expected cases for this error include: "\
|
27
|
+
"Diagnosis, Family History, Symptom, Immunization data types, "\
|
28
|
+
"and Encounter Performed attributes for Diagnosis and Principal Diagnosis."
|
29
|
+
else
|
30
|
+
raise "No QRDA template available for OID #{hqmf_oid}: #{__FILE__} line #{__LINE__}"
|
31
|
+
end
|
25
32
|
end
|
26
|
-
oid_tuple['qrda_oid']
|
33
|
+
"#{oid_tuple['qrda_oid']}"
|
27
34
|
end
|
28
35
|
|
29
36
|
end
|
30
37
|
|
31
38
|
# given a value set oid for a patient characteristic, return the qrda oid for the correct characteristic
|
32
|
-
def qrda_oid_for_hqmf_patient_characteristic(vs_oid)
|
39
|
+
def qrda_oid_for_hqmf_patient_characteristic(vs_oid, qrda_version = nil)
|
33
40
|
# This is a special case. This HQMF OID maps to more than one QRDA OID.
|
34
41
|
# So we need to try to figure out what template we should use based on the
|
35
42
|
# content of the entry
|
36
|
-
|
43
|
+
case vs_oid
|
44
|
+
when '2.16.840.1.113883.3.526.3.1279'
|
37
45
|
# Patient Characteristic Observation Assertion template for
|
38
46
|
# Patient Characteristic: ECOG Performance Status-Poor
|
39
47
|
'2.16.840.1.113883.10.20.24.3.103'
|
40
|
-
|
48
|
+
when '2.16.840.1.113883.3.117.1.7.1.402', '2.16.840.1.113883.3.117.1.7.1.403',
|
49
|
+
'2.16.840.1.113883.3.117.1.7.1.287', '2.16.840.1.113883.3.117.1.7.1.307'
|
41
50
|
# Patient Charasteristic Gestational Age
|
42
51
|
'2.16.840.1.113883.10.20.24.3.101'
|
43
|
-
|
52
|
+
when '2.16.840.1.113883.3.526.3.1189', '2.16.840.1.113883.3.526.3.1170', '2.16.840.1.113883.3.600.2390'
|
44
53
|
# Patient Characteristic Tobacco User/Non-User
|
45
|
-
|
54
|
+
case qrda_version
|
55
|
+
when 'r3_1', 'r3'
|
56
|
+
'2.16.840.1.113883.10.20.24.3.103'
|
57
|
+
else
|
58
|
+
'2.16.840.1.113883.10.20.22.4.85'
|
59
|
+
end
|
60
|
+
else
|
61
|
+
# return generic pc observation template for anything not specificly mapped to its own template
|
62
|
+
'2.16.840.1.113883.10.20.24.3.103'
|
46
63
|
end
|
64
|
+
|
47
65
|
end
|
48
66
|
|
49
67
|
alias :partial_for :qrda_oid_for_hqmf_oid
|
@@ -52,4 +70,4 @@ module HealthDataStandards
|
|
52
70
|
end
|
53
71
|
end
|
54
72
|
end
|
55
|
-
end
|
73
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
[
|
2
|
-
{
|
2
|
+
{
|
3
3
|
"hqmf_name": "Care Goal",
|
4
4
|
"hqmf_oid": "2.16.840.1.113883.3.560.1.9",
|
5
5
|
"qrda_name": "Care Goal",
|
@@ -101,6 +101,12 @@
|
|
101
101
|
"qrda_name": "Diagnostic Study Order",
|
102
102
|
"qrda_oid": "2.16.840.1.113883.10.20.24.3.17"
|
103
103
|
},
|
104
|
+
{
|
105
|
+
"hqmf_name": "Diagnostic Study, Order not done",
|
106
|
+
"hqmf_oid": "2.16.840.1.113883.3.560.1.140",
|
107
|
+
"qrda_name": "Diagnostic Study Order",
|
108
|
+
"qrda_oid": "2.16.840.1.113883.10.20.24.3.17"
|
109
|
+
},
|
104
110
|
{
|
105
111
|
"hqmf_name": "Diagnostic Study, Performed",
|
106
112
|
"hqmf_oid": "2.16.840.1.113883.3.560.1.3",
|
@@ -109,7 +115,7 @@
|
|
109
115
|
},
|
110
116
|
{
|
111
117
|
"hqmf_name": "Diagnostic Study, Recommended",
|
112
|
-
"hqmf_oid": "2.16.840.1.113883.
|
118
|
+
"hqmf_oid": "2.16.840.1.113883.10.20.28.3.24",
|
113
119
|
"qrda_name": "Diagnostic Study Recommended",
|
114
120
|
"qrda_oid": "2.16.840.1.113883.10.20.24.3.19"
|
115
121
|
},
|
@@ -179,6 +185,24 @@
|
|
179
185
|
"qrda_name": "Functional Status Result",
|
180
186
|
"qrda_oid": "2.16.840.1.113883.10.20.24.3.28"
|
181
187
|
},
|
188
|
+
{
|
189
|
+
"hqmf_name": "Immunization Administered",
|
190
|
+
"hqmf_oid": "2.16.840.1.113883.10.20.28.3.112",
|
191
|
+
"qrda_name": "Immunization Administered",
|
192
|
+
"qrda_oid": "2.16.840.1.113883.10.20.24.3.140"
|
193
|
+
},
|
194
|
+
{
|
195
|
+
"hqmf_name": "Immunization, Allergy",
|
196
|
+
"hqmf_oid": "2.16.840.1.113883.10.20.28.3.114",
|
197
|
+
"qrda_name": "Medication Allergy",
|
198
|
+
"qrda_oid": "2.16.840.1.113883.10.20.24.3.44"
|
199
|
+
},
|
200
|
+
{
|
201
|
+
"hqmf_name": "Immunization, Intolerance",
|
202
|
+
"hqmf_oid": "2.16.840.1.113883.10.20.28.3.115",
|
203
|
+
"qrda_name": "Medication Intolerance",
|
204
|
+
"qrda_oid": "2.16.840.1.113883.10.20.24.3.46"
|
205
|
+
},
|
182
206
|
{
|
183
207
|
"hqmf_name": "Incision Datetime (attribute)",
|
184
208
|
"hqmf_oid": "2.16.840.1.113883.3.560.1.1007",
|
@@ -203,6 +227,12 @@
|
|
203
227
|
"qrda_name": "Intervention Order",
|
204
228
|
"qrda_oid": "2.16.840.1.113883.10.20.24.3.31"
|
205
229
|
},
|
230
|
+
{
|
231
|
+
"hqmf_name": "Intervention, Order not done",
|
232
|
+
"hqmf_oid": "2.16.840.1.113883.3.560.1.145",
|
233
|
+
"qrda_name": "Intervention Order",
|
234
|
+
"qrda_oid": "2.16.840.1.113883.10.20.24.3.31"
|
235
|
+
},
|
206
236
|
{
|
207
237
|
"hqmf_name": "Intervention, Performed",
|
208
238
|
"hqmf_oid": "2.16.840.1.113883.3.560.1.46",
|
@@ -239,6 +269,12 @@
|
|
239
269
|
"qrda_name": "Laboratory Test Order",
|
240
270
|
"qrda_oid": "2.16.840.1.113883.10.20.24.3.37"
|
241
271
|
},
|
272
|
+
{
|
273
|
+
"hqmf_name": "Laboratory Test, Order not done",
|
274
|
+
"hqmf_oid": "2.16.840.1.113883.3.560.1.150",
|
275
|
+
"qrda_name": "Laboratory Test Order",
|
276
|
+
"qrda_oid": "2.16.840.1.113883.10.20.24.3.37"
|
277
|
+
},
|
242
278
|
{
|
243
279
|
"hqmf_name": "Laboratory Test, Performed",
|
244
280
|
"hqmf_oid": "2.16.840.1.113883.3.560.1.5",
|
@@ -330,19 +366,25 @@
|
|
330
366
|
"qrda_oid": "2.16.840.1.113883.10.20.24.3.55"
|
331
367
|
},
|
332
368
|
{
|
333
|
-
"hqmf_name": "Patient
|
369
|
+
"hqmf_name": "Patient Characteristic, ECOG Performance Status Poor",
|
334
370
|
"hqmf_oid": "2.16.840.1.113883.3.560.1.1001",
|
335
371
|
"qrda_name": "Patient Characteristic Observation Assertion",
|
336
372
|
"qrda_oid": "2.16.840.1.113883.10.20.24.3.103"
|
337
373
|
},
|
338
374
|
{
|
339
|
-
"hqmf_name": "Patient
|
375
|
+
"hqmf_name": "Patient Characteristic, Clinical Trial Participant",
|
376
|
+
"hqmf_oid": "2.16.840.1.113883.10.20.28.3.6",
|
377
|
+
"qrda_name": "Patient Characteristic Clinical Trial Participant",
|
378
|
+
"qrda_oid": "2.16.840.1.113883.10.20.24.3.51"
|
379
|
+
},
|
380
|
+
{
|
381
|
+
"hqmf_name": "Patient Characteristic, Estimated Date of Conception",
|
340
382
|
"hqmf_oid": "2.16.840.1.113883.3.560.1.1001",
|
341
383
|
"qrda_name": "Patient Characteristic Estimated Date of Conception",
|
342
384
|
"qrda_oid": "2.16.840.1.113883.10.20.24.3.102"
|
343
385
|
},
|
344
386
|
{
|
345
|
-
"hqmf_name": "Patient
|
387
|
+
"hqmf_name": "Patient Characteristic, Tobacco user and Non-User",
|
346
388
|
"hqmf_oid": "2.16.840.1.113883.3.560.1.1001",
|
347
389
|
"qrda_name": "Tobacco Use",
|
348
390
|
"qrda_oid": "2.16.840.1.113883.10.20.22.4.85"
|
@@ -557,6 +599,12 @@
|
|
557
599
|
"qrda_name": "Diagnostic Study Performed",
|
558
600
|
"qrda_oid": "2.16.840.1.113883.10.20.24.3.18"
|
559
601
|
},
|
602
|
+
{
|
603
|
+
"hqmf_name": "Discharge Medication, not Performed",
|
604
|
+
"hqmf_oid": "2.16.840.1.113883.3.560.1.200",
|
605
|
+
"qrda_name": "Discharge Medication - Active Medication",
|
606
|
+
"qrda_oid": "2.16.840.1.113883.10.20.24.3.105"
|
607
|
+
},
|
560
608
|
{
|
561
609
|
"hqmf_name": "Procedure, not Performed",
|
562
610
|
"hqmf_oid": "2.16.840.1.113883.3.560.1.106",
|
@@ -593,6 +641,12 @@
|
|
593
641
|
"qrda_name": "Device Applied",
|
594
642
|
"qrda_oid": "2.16.840.1.113883.10.20.24.3.7"
|
595
643
|
},
|
644
|
+
{
|
645
|
+
"hqmf_name": "Device, Order not done",
|
646
|
+
"hqmf_oid": "2.16.840.1.113883.3.560.1.137",
|
647
|
+
"qrda_name": "Device Order",
|
648
|
+
"qrda_oid": "2.16.840.1.113883.10.20.24.3.9"
|
649
|
+
},
|
596
650
|
{
|
597
651
|
"hqmf_name": "Procedure, Order not done",
|
598
652
|
"hqmf_oid": "2.16.840.1.113883.3.560.1.162",
|
@@ -634,5 +688,35 @@
|
|
634
688
|
"hqmf_oid": "2.16.840.1.113883.3.560.1.157",
|
635
689
|
"qrda_name": "Physical Exam Performed",
|
636
690
|
"qrda_oid": "2.16.840.1.113883.10.20.24.3.59"
|
691
|
+
},
|
692
|
+
{
|
693
|
+
"hqmf_name": "Diagnosis",
|
694
|
+
"hqmf_oid": "2.16.840.1.113883.10.20.28.3.110",
|
695
|
+
"qrda_name": "Diagnosis",
|
696
|
+
"qrda_oid": "2.16.840.1.113883.10.20.24.3.135"
|
697
|
+
},
|
698
|
+
{
|
699
|
+
"hqmf_name": "Family History",
|
700
|
+
"hqmf_oid": "2.16.840.1.113883.10.20.28.3.111",
|
701
|
+
"qrda_name": "Family History",
|
702
|
+
"qrda_oid": "2.16.840.1.113883.10.20.24.3.12"
|
703
|
+
},
|
704
|
+
{
|
705
|
+
"hqmf_name": "Symptom",
|
706
|
+
"hqmf_oid": "2.16.840.1.113883.10.20.28.3.116",
|
707
|
+
"qrda_name": "Symptom",
|
708
|
+
"qrda_oid": "2.16.840.1.113883.10.20.24.3.136"
|
709
|
+
},
|
710
|
+
{
|
711
|
+
"hqmf_name": "Assessment, Performed",
|
712
|
+
"hqmf_oid": "2.16.840.1.113883.10.20.28.3.117",
|
713
|
+
"qrda_name": "Assessment Performed",
|
714
|
+
"qrda_oid": "2.16.840.1.113883.10.20.24.3.144"
|
715
|
+
},
|
716
|
+
{
|
717
|
+
"hqmf_name": "Assessment, Recommended",
|
718
|
+
"hqmf_oid": "2.16.840.1.113883.10.20.28.3.118",
|
719
|
+
"qrda_name": "Assessment Recommended",
|
720
|
+
"qrda_oid": "2.16.840.1.113883.10.20.24.3.145"
|
637
721
|
}
|
638
722
|
]
|
@@ -10,10 +10,11 @@ module HealthDataStandards
|
|
10
10
|
# provide a different directory if you want to use this class
|
11
11
|
# outside of the HDS gem
|
12
12
|
class TemplateHelper
|
13
|
-
def initialize(template_format, template_subdir = nil, template_directory = nil)
|
13
|
+
def initialize(template_format, template_subdir = nil, template_directory = nil, qrda_version = nil)
|
14
14
|
@template_format = template_format
|
15
15
|
@template_directory = template_directory
|
16
16
|
@template_subdir = template_subdir
|
17
|
+
@qrda_version = qrda_version
|
17
18
|
@template_cache = {}
|
18
19
|
end
|
19
20
|
|
@@ -42,8 +43,12 @@ module HealthDataStandards
|
|
42
43
|
protected
|
43
44
|
|
44
45
|
def cache_template(template_name)
|
46
|
+
subdir = @qrda_version
|
47
|
+
|
45
48
|
entry = @template_cache[template_name] || {mtime:-1, erb:nil}
|
46
|
-
|
49
|
+
template_dir = template_root
|
50
|
+
template_dir = File.join(template_root, subdir) if subdir
|
51
|
+
filename = File.join(template_dir, "#{template_name}.#{@template_format}.erb")
|
47
52
|
mtime = File.mtime(filename).to_i
|
48
53
|
if mtime > entry[:mtime]
|
49
54
|
src = File.read(filename)
|
@@ -5,9 +5,40 @@ module HealthDataStandards
|
|
5
5
|
options['tag_name'] ||= 'code'
|
6
6
|
options['attribute'] ||= :codes
|
7
7
|
options['exclude_null_flavor'] ||= false
|
8
|
+
# allowing wild card matching of any code system for generic templates
|
9
|
+
# valueset filtering should filter out a decent code
|
10
|
+
# TODO: Can we add nil? logic to the function? Make it so that we don't have to include the preferred_code_sets['*'] if we want all?
|
11
|
+
pcs = if options['preferred_code_sets'] && options['preferred_code_sets'].index("*")
|
12
|
+
# all of the code_systems that we know about
|
13
|
+
HealthDataStandards::Util::CodeSystemHelper::CODE_SYSTEMS.values | HealthDataStandards::Util::CodeSystemHelper::CODE_SYSTEM_ALIASES.keys
|
14
|
+
else
|
15
|
+
options['preferred_code_sets']
|
16
|
+
end
|
17
|
+
create_code_string(entry, entry.preferred_code(pcs, options['attribute'], options['value_set_map']), options)
|
18
|
+
end
|
19
|
+
|
20
|
+
def create_code_string(entry, preferred_code, options={})
|
21
|
+
|
22
|
+
code_string = create_code_display_string(entry, preferred_code, options)
|
23
|
+
|
24
|
+
unless entry['negationInd'] == true
|
25
|
+
code_string += "<originalText>#{ERB::Util.html_escape entry.description}</originalText>" if entry.respond_to?(:description)
|
26
|
+
|
27
|
+
code_string += create_laterality_code_string(entry, options) if options["laterality"]
|
28
|
+
|
29
|
+
code_string += create_translations_code_string(entry, options) if options["attribute"] == :codes && entry.respond_to?(:translation_codes)
|
30
|
+
|
31
|
+
code_string += "</#{options['tag_name']}>"
|
32
|
+
end
|
33
|
+
|
34
|
+
code_string
|
35
|
+
end
|
36
|
+
|
37
|
+
def create_code_display_string(entry, preferred_code, options={})
|
8
38
|
code_string = nil
|
9
|
-
|
10
|
-
|
39
|
+
if entry['negationInd'] == true
|
40
|
+
code_string = "<#{options['tag_name']} nullFlavor=\"NA\" #{options['extra_content']}/>"
|
41
|
+
elsif preferred_code
|
11
42
|
code_system_oid = HealthDataStandards::Util::CodeSystemHelper.oid_for_code_system(preferred_code['code_set'])
|
12
43
|
code_string = "<#{options['tag_name']} code=\"#{preferred_code['code']}\" codeSystem=\"#{code_system_oid}\" #{options['extra_content']}>"
|
13
44
|
else
|
@@ -15,20 +46,23 @@ module HealthDataStandards
|
|
15
46
|
code_string += "nullFlavor=\"UNK\" " unless options["exclude_null_flavor"]
|
16
47
|
code_string += "#{options['extra_content']}>"
|
17
48
|
end
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
49
|
+
code_string
|
50
|
+
end
|
51
|
+
|
52
|
+
def create_laterality_code_string(entry, options={})
|
53
|
+
code_string = "\n<!-- QDM Attribute: Laterality -->\n<qualifier>\n<name code='182353008' codeSystem='2.16.840.1.113883.6.96' displayName='Side' />\n"
|
54
|
+
code_string += "<value xsi:type='CD' code='#{options['laterality']['code']}' displayName='#{options['laterality']['title']}' sdtc:valueSet='#{oid_for_code(entry.laterality,field_oids['LATERALITY'])}'
|
55
|
+
codeSystem='#{HealthDataStandards::Util::CodeSystemHelper.oid_for_code_system(options['laterality']['code_system'])}'/>\n</qualifier>\n"
|
56
|
+
end
|
57
|
+
|
58
|
+
def create_translations_code_string(entry, options={})
|
59
|
+
code_string = ''
|
60
|
+
entry.translation_codes(options['preferred_code_sets'], options['value_set_map']).each do |translation|
|
61
|
+
code_string += "<translation code=\"#{translation['code']}\" codeSystem=\"#{HealthDataStandards::Util::CodeSystemHelper.oid_for_code_system(translation['code_set'])}\"/>\n"
|
26
62
|
end
|
27
|
-
|
28
|
-
code_string += "</#{options['tag_name']}>"
|
29
63
|
code_string
|
30
64
|
end
|
31
|
-
|
65
|
+
|
32
66
|
def status_code_for(entry)
|
33
67
|
case entry.status.to_s.downcase
|
34
68
|
when 'active'
|
@@ -43,7 +77,7 @@ module HealthDataStandards
|
|
43
77
|
def fulfillment_quantity(codes, fulfillmentHistory, dose)
|
44
78
|
if (codes["RxNorm"].present?)
|
45
79
|
doses = (fulfillmentHistory.quantity_dispensed['value'].to_f / dose['value'].to_f ).to_i
|
46
|
-
return "value='#{doses}'"
|
80
|
+
return "value='#{doses}' unit='1'"
|
47
81
|
else
|
48
82
|
return "value='#{fulfillmentHistory.quantity_dispensed['value']}' unit='#{fulfillmentHistory.quantity_dispensed['unit']}'"
|
49
83
|
end
|
@@ -58,10 +92,36 @@ module HealthDataStandards
|
|
58
92
|
end
|
59
93
|
|
60
94
|
def dose_quantity(codes, dose)
|
61
|
-
if (codes["RxNorm"].present?)
|
62
|
-
|
95
|
+
if (codes["RxNorm"].present? || codes["CVX"].present?)
|
96
|
+
if dose['unit'].present?
|
97
|
+
return "value='1' unit='#{ucum_for_dose_quantity(dose['unit'])}'"
|
98
|
+
else
|
99
|
+
return "value='1'"
|
100
|
+
end
|
101
|
+
else
|
102
|
+
return "value='#{dose['scalar']}' unit='#{dose['units']}'"
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
def ucum_for_dose_quantity(unit)
|
107
|
+
case unit
|
108
|
+
when 'capsule(s)'
|
109
|
+
'{Capsule}'
|
110
|
+
when 'tablet(s)'
|
111
|
+
'{tbl}'
|
63
112
|
else
|
64
|
-
|
113
|
+
unit
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
def ucum_for_dose_quantity(unit)
|
118
|
+
case unit
|
119
|
+
when 'capsule(s)'
|
120
|
+
'{Capsule}'
|
121
|
+
when 'tablet(s)'
|
122
|
+
'{tbl}'
|
123
|
+
else
|
124
|
+
unit
|
65
125
|
end
|
66
126
|
end
|
67
127
|
|
@@ -92,30 +152,12 @@ module HealthDataStandards
|
|
92
152
|
|
93
153
|
if (codes.is_a? Hash)
|
94
154
|
clean_hash = {}
|
95
|
-
|
155
|
+
|
96
156
|
if codes['codeSystem']
|
97
|
-
|
98
|
-
clean_hash[codes['codeSystem']] = codes['code'] + " (#{codes['title']})"
|
99
|
-
else
|
100
|
-
clean_hash[codes['codeSystem']] = codes['code']
|
101
|
-
end
|
157
|
+
clean_hash[codes['codeSystem']] = clean_hash_code_system(codes)
|
102
158
|
elsif codes['_id']
|
103
159
|
codes.keys.reject {|key| ['_id'].include? key}.each do |hashkey|
|
104
|
-
|
105
|
-
if value.nil?
|
106
|
-
clean_hash[hashkey.titleize] = 'none'
|
107
|
-
elsif value.is_a? Hash
|
108
|
-
hash_result = convert_field_to_hash(hashkey, value)
|
109
|
-
if hash_result.is_a? Hash
|
110
|
-
clean_hash[hashkey.titleize] = hash_result.map {|key, value| "#{key}: #{value}"}.join(' ')
|
111
|
-
else
|
112
|
-
clean_hash[hashkey.titleize] = hash_result
|
113
|
-
end
|
114
|
-
elsif value.is_a? Array
|
115
|
-
clean_hash[hashkey.titleize] = value.join(', ')
|
116
|
-
else
|
117
|
-
clean_hash[hashkey.titleize] = convert_field_to_hash(hashkey, value)
|
118
|
-
end
|
160
|
+
clean_hash[hashkey.titleize] = clean_hash_id(codes, hashkey)
|
119
161
|
end
|
120
162
|
elsif codes['scalar']
|
121
163
|
return "#{codes['scalar']} #{codes['units']}"
|
@@ -139,7 +181,33 @@ module HealthDataStandards
|
|
139
181
|
end
|
140
182
|
end
|
141
183
|
|
184
|
+
def clean_hash_code_system(codes)
|
185
|
+
if codes['title']
|
186
|
+
return codes['code'] + " (#{codes['title']})"
|
187
|
+
else
|
188
|
+
return codes['code']
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
def clean_hash_id(codes, hashkey)
|
193
|
+
value = codes[hashkey]
|
194
|
+
if value.nil?
|
195
|
+
return 'none'
|
196
|
+
elsif value.is_a? Hash
|
197
|
+
hash_result = convert_field_to_hash(hashkey, value)
|
198
|
+
if hash_result.is_a? Hash
|
199
|
+
return hash_result.map {|key, value| "#{key}: #{value}"}.join(' ')
|
200
|
+
else
|
201
|
+
return hash_result
|
202
|
+
end
|
203
|
+
elsif value.is_a? Array
|
204
|
+
return value.join(', ')
|
205
|
+
else
|
206
|
+
return convert_field_to_hash(hashkey, value)
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
142
210
|
|
143
211
|
end
|
144
212
|
end
|
145
|
-
end
|
213
|
+
end
|