cqm-models 1.0.3 → 1.1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.eslintrc.json +10 -2
- data/.github/PULL_REQUEST_TEMPLATE.md +0 -4
- data/.rubocop.yml +3 -0
- data/.travis.yml +31 -1
- data/README.md +59 -2
- data/app/assets/javascripts/AdverseEvent.js +16 -7
- data/app/assets/javascripts/AllDataElements.js +6 -6
- data/app/assets/javascripts/AllergyIntolerance.js +16 -7
- data/app/assets/javascripts/AssessmentOrder.js +15 -6
- data/app/assets/javascripts/AssessmentPerformed.js +16 -7
- data/app/assets/javascripts/AssessmentRecommended.js +16 -7
- data/app/assets/javascripts/CareGoal.js +16 -7
- data/app/assets/javascripts/CommunicationPerformed.js +15 -6
- data/app/assets/javascripts/DeviceApplied.js +16 -7
- data/app/assets/javascripts/DeviceOrder.js +16 -7
- data/app/assets/javascripts/DeviceRecommended.js +16 -7
- data/app/assets/javascripts/Diagnosis.js +16 -7
- data/app/assets/javascripts/DiagnosticStudyOrder.js +16 -7
- data/app/assets/javascripts/DiagnosticStudyPerformed.js +16 -7
- data/app/assets/javascripts/DiagnosticStudyRecommended.js +16 -7
- data/app/assets/javascripts/EncounterOrder.js +16 -7
- data/app/assets/javascripts/EncounterPerformed.js +16 -7
- data/app/assets/javascripts/EncounterRecommended.js +16 -7
- data/app/assets/javascripts/FamilyHistory.js +16 -7
- data/app/assets/javascripts/Id.js +7 -3
- data/app/assets/javascripts/ImmunizationAdministered.js +16 -7
- data/app/assets/javascripts/ImmunizationOrder.js +16 -7
- data/app/assets/javascripts/IndividualResult.js +7 -2
- data/app/assets/javascripts/InterventionOrder.js +16 -7
- data/app/assets/javascripts/InterventionPerformed.js +16 -7
- data/app/assets/javascripts/InterventionRecommended.js +16 -7
- data/app/assets/javascripts/LaboratoryTestOrder.js +16 -7
- data/app/assets/javascripts/LaboratoryTestPerformed.js +16 -7
- data/app/assets/javascripts/LaboratoryTestRecommended.js +16 -7
- data/app/assets/javascripts/MedicationActive.js +16 -7
- data/app/assets/javascripts/MedicationAdministered.js +16 -7
- data/app/assets/javascripts/MedicationDischarge.js +16 -7
- data/app/assets/javascripts/MedicationDispensed.js +16 -7
- data/app/assets/javascripts/MedicationOrder.js +16 -7
- data/app/assets/javascripts/Participation.js +15 -6
- data/app/assets/javascripts/PatientCareExperience.js +16 -7
- data/app/assets/javascripts/PatientCharacteristic.js +16 -7
- data/app/assets/javascripts/PatientCharacteristicBirthdate.js +16 -7
- data/app/assets/javascripts/PatientCharacteristicClinicalTrialParticipant.js +16 -7
- data/app/assets/javascripts/PatientCharacteristicEthnicity.js +16 -7
- data/app/assets/javascripts/PatientCharacteristicExpired.js +16 -7
- data/app/assets/javascripts/PatientCharacteristicPayer.js +16 -7
- data/app/assets/javascripts/PatientCharacteristicRace.js +16 -7
- data/app/assets/javascripts/PatientCharacteristicSex.js +16 -7
- data/app/assets/javascripts/PhysicalExamOrder.js +16 -7
- data/app/assets/javascripts/PhysicalExamPerformed.js +16 -7
- data/app/assets/javascripts/PhysicalExamRecommended.js +16 -7
- data/app/assets/javascripts/ProcedureOrder.js +16 -7
- data/app/assets/javascripts/ProcedurePerformed.js +16 -7
- data/app/assets/javascripts/ProcedureRecommended.js +16 -7
- data/app/assets/javascripts/ProviderCareExperience.js +16 -7
- data/app/assets/javascripts/ProviderCharacteristic.js +16 -7
- data/app/assets/javascripts/QDMPatient.js +262 -0
- data/app/assets/javascripts/Result.js +7 -2
- data/app/assets/javascripts/ResultComponent.js +14 -6
- data/app/assets/javascripts/SubstanceAdministered.js +16 -7
- data/app/assets/javascripts/SubstanceOrder.js +16 -7
- data/app/assets/javascripts/SubstanceRecommended.js +16 -7
- data/app/assets/javascripts/Symptom.js +16 -7
- data/app/assets/javascripts/attributes/Component.js +30 -0
- data/app/assets/javascripts/attributes/FacilityLocation.js +30 -0
- data/app/assets/javascripts/basetypes/Any.js +1 -1
- data/app/assets/javascripts/basetypes/Code.js +1 -1
- data/app/assets/javascripts/basetypes/DataElement.js +2 -1
- data/app/assets/javascripts/basetypes/DateTime.js +5 -1
- data/app/assets/javascripts/basetypes/Interval.js +1 -1
- data/app/assets/javascripts/basetypes/Quantity.js +1 -1
- data/app/assets/javascripts/basetypes/Ratio.js +1 -1
- data/app/assets/javascripts/browser.js +3 -0
- data/app/assets/javascripts/cqm/AllCQMModels.js +24 -0
- data/app/assets/javascripts/cqm/CQLLibrary.js +32 -0
- data/app/assets/javascripts/cqm/CQLStatementDependency.js +28 -0
- data/app/assets/javascripts/cqm/Concept.js +17 -0
- data/app/assets/javascripts/cqm/Measure.js +108 -0
- data/app/assets/javascripts/{MeasurePackage.js → cqm/MeasurePackage.js} +9 -3
- data/app/assets/javascripts/cqm/Patient.js +38 -0
- data/app/assets/javascripts/cqm/PopulationSet.js +88 -0
- data/app/assets/javascripts/cqm/Provider.js +44 -0
- data/app/assets/javascripts/cqm/ValueSet.js +26 -0
- data/app/assets/javascripts/index.js +18 -8
- data/app/models/{qdm/tacoma → cqm}/concept.rb +4 -4
- data/app/models/cqm/cql_library.rb +22 -0
- data/app/models/cqm/cql_statement_dependency.rb +24 -0
- data/app/models/cqm/measure.rb +105 -0
- data/app/models/{qdm/tacoma → cqm}/measure_package.rb +2 -2
- data/app/models/cqm/patient.rb +20 -0
- data/app/models/cqm/population_set.rb +86 -0
- data/app/models/cqm/provider.rb +110 -0
- data/app/models/cqm/valueset.rb +15 -0
- data/app/models/hqmfOid_to_datatype_map.json +55 -0
- data/app/models/model_finder.rb +12 -0
- data/app/models/models.rb +18 -6
- data/app/models/qdm/adverse_event.rb +3 -2
- data/app/models/qdm/allergy_intolerance.rb +2 -1
- data/app/models/qdm/assessment_order.rb +1 -0
- data/app/models/qdm/assessment_performed.rb +2 -1
- data/app/models/qdm/assessment_recommended.rb +2 -1
- data/app/models/qdm/attributes/attribute.rb +63 -0
- data/app/models/qdm/{component.rb → attributes/component.rb} +1 -1
- data/app/models/qdm/{facility_location.rb → attributes/facility_location.rb} +1 -1
- data/app/models/qdm/basetypes/data_element.rb +21 -6
- data/app/models/qdm/basetypes/interval.rb +2 -1
- data/app/models/qdm/care_goal.rb +2 -1
- data/app/models/qdm/communication_performed.rb +1 -0
- data/app/models/qdm/device_applied.rb +2 -1
- data/app/models/qdm/device_order.rb +2 -1
- data/app/models/qdm/device_recommended.rb +2 -1
- data/app/models/qdm/diagnosis.rb +2 -1
- data/app/models/qdm/diagnostic_study_order.rb +2 -1
- data/app/models/qdm/diagnostic_study_performed.rb +3 -2
- data/app/models/qdm/diagnostic_study_recommended.rb +2 -1
- data/app/models/qdm/encounter_order.rb +3 -2
- data/app/models/qdm/encounter_performed.rb +2 -1
- data/app/models/qdm/encounter_recommended.rb +3 -2
- data/app/models/qdm/family_history.rb +2 -1
- data/app/models/qdm/immunization_administered.rb +2 -1
- data/app/models/qdm/immunization_order.rb +2 -1
- data/app/models/qdm/intervention_order.rb +2 -1
- data/app/models/qdm/intervention_performed.rb +2 -1
- data/app/models/qdm/intervention_recommended.rb +2 -1
- data/app/models/qdm/laboratory_test_order.rb +2 -1
- data/app/models/qdm/laboratory_test_performed.rb +2 -1
- data/app/models/qdm/laboratory_test_recommended.rb +2 -1
- data/app/models/qdm/medication_active.rb +2 -1
- data/app/models/qdm/medication_administered.rb +2 -1
- data/app/models/qdm/medication_discharge.rb +2 -1
- data/app/models/qdm/medication_dispensed.rb +4 -3
- data/app/models/qdm/medication_order.rb +3 -2
- data/app/models/qdm/participation.rb +1 -0
- data/app/models/qdm/patient.rb +7 -4
- data/app/models/qdm/patient_care_experience.rb +2 -1
- data/app/models/qdm/patient_characteristic.rb +2 -1
- data/app/models/qdm/patient_characteristic_birthdate.rb +2 -1
- data/app/models/qdm/patient_characteristic_clinical_trial_participant.rb +2 -1
- data/app/models/qdm/patient_characteristic_ethnicity.rb +2 -1
- data/app/models/qdm/patient_characteristic_expired.rb +2 -1
- data/app/models/qdm/patient_characteristic_payer.rb +2 -1
- data/app/models/qdm/patient_characteristic_race.rb +2 -1
- data/app/models/qdm/patient_characteristic_sex.rb +2 -1
- data/app/models/qdm/physical_exam_order.rb +2 -1
- data/app/models/qdm/physical_exam_performed.rb +2 -1
- data/app/models/qdm/physical_exam_recommended.rb +2 -1
- data/app/models/qdm/procedure_order.rb +2 -1
- data/app/models/qdm/procedure_performed.rb +2 -1
- data/app/models/qdm/procedure_recommended.rb +2 -1
- data/app/models/qdm/provider_care_experience.rb +2 -1
- data/app/models/qdm/provider_characteristic.rb +2 -1
- data/app/models/qdm/substance_administered.rb +2 -1
- data/app/models/qdm/substance_order.rb +2 -1
- data/app/models/qdm/substance_recommended.rb +2 -1
- data/app/models/qdm/symptom.rb +2 -1
- data/bin/build_cql_execution.sh +8 -0
- data/bin/validate_browser.sh +17 -0
- data/bin/validate_generator.sh +12 -0
- data/cqm-models.gemspec +5 -2
- data/data/oids_qdm_5.4.json +321 -0
- data/data/{oids.json → oids_unversioned.json} +0 -0
- data/dist/browser.js +102937 -0
- data/dist/index.js +36637 -36540
- data/lib/generate_models.rb +89 -93
- data/lib/generate_patients.rb +125 -0
- data/lib/generate_types.rb +64 -0
- data/lib/generators/custom_mongo/model.rb.tt +20 -0
- data/lib/generators/custom_mongo/model_generator.rb +34 -0
- data/notice.md +9 -0
- data/package.json +12 -6
- data/templates/id_template.js.erb +8 -3
- data/templates/index_template.js.erb +18 -8
- data/templates/models_template.rb.erb +20 -4
- data/templates/mongoose_template.js.erb +23 -15
- data/templates/patient_extension.rb.erb +7 -4
- data/templates/patient_template.js.erb +88 -87
- data/yarn.lock +552 -347
- metadata +86 -19
- data/app/assets/javascripts/Component.js +0 -26
- data/app/assets/javascripts/Concept.js +0 -14
- data/app/assets/javascripts/FacilityLocation.js +0 -26
- data/app/assets/javascripts/Measure.js +0 -78
- data/app/assets/javascripts/Patient.js +0 -262
- data/app/assets/javascripts/ValueSet.js +0 -30
- data/app/models/qdm/tacoma/measure.rb +0 -174
- data/app/models/qdm/tacoma/valueset.rb +0 -68
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
const mongoose = require('mongoose/browser');
|
|
2
|
+
const Code = require('./basetypes/Code');
|
|
3
|
+
const Interval = require('./basetypes/Interval');
|
|
4
|
+
const Quantity = require('./basetypes/Quantity');
|
|
5
|
+
const DateTime = require('./basetypes/DateTime');
|
|
6
|
+
const AllDataElements = require('./AllDataElements');
|
|
7
|
+
|
|
8
|
+
const [Schema, Number, String, Mixed] = [
|
|
9
|
+
mongoose.Schema,
|
|
10
|
+
mongoose.Schema.Types.Number,
|
|
11
|
+
mongoose.Schema.Types.String,
|
|
12
|
+
mongoose.Schema.Types.Mixed,
|
|
13
|
+
];
|
|
14
|
+
|
|
15
|
+
const QDMPatientSchema = new Schema({
|
|
16
|
+
birthDatetime: DateTime,
|
|
17
|
+
qdmVersion: { type: String, default: '5.4' },
|
|
18
|
+
|
|
19
|
+
// These are the "data criteria", or QDM datatype elements that exist on a
|
|
20
|
+
// patient.
|
|
21
|
+
dataElements: [],
|
|
22
|
+
// This field is for application specific information only. If both Bonnie
|
|
23
|
+
// Cypress use a common field, it should be made a field on this model,
|
|
24
|
+
// and not put into extendedData.
|
|
25
|
+
extendedData: {
|
|
26
|
+
type: Mixed,
|
|
27
|
+
default: {},
|
|
28
|
+
},
|
|
29
|
+
}, { id: false });
|
|
30
|
+
|
|
31
|
+
// After initialization of a Patient model, initialize every individual data element
|
|
32
|
+
// to its respective Mongoose Model
|
|
33
|
+
QDMPatientSchema.methods.initializeDataElements = function initializeDataElements() {
|
|
34
|
+
let typeStripped;
|
|
35
|
+
const dataElementsInit = [];
|
|
36
|
+
this.dataElements.forEach((element) => {
|
|
37
|
+
typeStripped = element._type.replace(/QDM::/, '');
|
|
38
|
+
dataElementsInit.push(new AllDataElements[typeStripped](element));
|
|
39
|
+
});
|
|
40
|
+
this.set({ dataElements: dataElementsInit });
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
QDMPatientSchema.methods.id = function id() {
|
|
44
|
+
return this._id;
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
// Returns an array of elements that exist on this patient, that
|
|
48
|
+
// match the given HQMF data criteria OID.
|
|
49
|
+
QDMPatientSchema.methods.getByHqmfOid = function getByHqmfOid(hqmfOid) {
|
|
50
|
+
return this.dataElements.filter(element => element.hqmfOid === hqmfOid);
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
// Returns an array of elements that exist on this patient, that
|
|
54
|
+
// match the given QRDA data criteria OID.
|
|
55
|
+
QDMPatientSchema.methods.getByQrdaOid = function getByQrdaOid(qrdaOid) {
|
|
56
|
+
return this.dataElements.filter(element => element.qrdaOid === qrdaOid);
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
// Returns an array of elements that exist on this patient. Optionally
|
|
60
|
+
// takes a qdmCategory, which returns all elements of that QDM qdmCategory.
|
|
61
|
+
// Example: patient.getDataElements({qdmCategory: 'encounters'}) will return
|
|
62
|
+
// all Encounter QDM data types active on the patient.
|
|
63
|
+
QDMPatientSchema.methods.getDataElements = function getDataElements(params) {
|
|
64
|
+
if (params !== undefined && params.qdmCategory !== undefined && params.qdmStatus !== undefined) {
|
|
65
|
+
return this.dataElements.filter(element => (element.qdmCategory === params.qdmCategory) && (element.qdmStatus === params.qdmStatus));
|
|
66
|
+
} else if (params !== undefined && params.qdmCategory !== undefined) {
|
|
67
|
+
return this.dataElements.filter(element => element.qdmCategory === params.qdmCategory);
|
|
68
|
+
}
|
|
69
|
+
return this.dataElements;
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
// Returns an array of dataElements that exist on the patient, queried by
|
|
73
|
+
// QDM profile
|
|
74
|
+
// @param {string} profile - the data criteria requested by the execution engine
|
|
75
|
+
// @param {boolean} isNegated - whether dataElements should be returned based on their negation status
|
|
76
|
+
// @returns {DataElement[]}
|
|
77
|
+
QDMPatientSchema.methods.getByProfile = function getByProfile(profile, isNegated = null) {
|
|
78
|
+
// If isNegated == true, only return data elements with a negationRationale that is not null.
|
|
79
|
+
// If isNegated == false, only return data elements with a null negationRationale.
|
|
80
|
+
// If isNegated == null, return all matching data elements by type, regardless of negationRationale.
|
|
81
|
+
const results = this.dataElements.filter(element => (element._type === `QDM::${profile}` || element._type === profile) && (isNegated === null || !!element.negationRationale === isNegated));
|
|
82
|
+
return results.map((result) => {
|
|
83
|
+
const removedMongooseItems = new AllDataElements[profile](result).toObject({ virtuals: true });
|
|
84
|
+
// toObject() will remove all mongoose functions but also remove the schema methods, so we add them back
|
|
85
|
+
Object.entries(result.schema.methods).forEach(([method_name, method]) => {
|
|
86
|
+
removedMongooseItems[method_name] = method;
|
|
87
|
+
});
|
|
88
|
+
return removedMongooseItems;
|
|
89
|
+
});
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
// This method is called by the CQL execution engine on a CQLPatient when
|
|
93
|
+
// the execution engine wants information on a record. A record could be patient
|
|
94
|
+
// characteristic information about the patient, or it could be data criteria
|
|
95
|
+
// that currently exist on this patient (data criteria you drag on a patient
|
|
96
|
+
// in Bonnie patient builder).
|
|
97
|
+
// @param {String} profile - the data criteria requested by the execution engine
|
|
98
|
+
// @returns {Object}
|
|
99
|
+
QDMPatientSchema.methods.findRecords = function findRecords(profile) {
|
|
100
|
+
let profileStripped;
|
|
101
|
+
if (profile === 'Patient') {
|
|
102
|
+
// Requested generic patient info
|
|
103
|
+
const info = { birthDatetime: this.birthDatetime };
|
|
104
|
+
return [info];
|
|
105
|
+
} else if (/PatientCharacteristic/.test(profile)) {
|
|
106
|
+
// Requested a patient characteristic
|
|
107
|
+
profileStripped = profile.replace(/ *\{[^)]*\} */g, '');
|
|
108
|
+
return this.getByProfile(profileStripped);
|
|
109
|
+
} else if (profile != null) {
|
|
110
|
+
// Requested something else (probably a QDM data type).
|
|
111
|
+
|
|
112
|
+
// Strip model details from request. The requested profile string contains
|
|
113
|
+
// a lot of things we do not need or care about. Example, we might see
|
|
114
|
+
// something like:
|
|
115
|
+
// "{urn:healthit-gov:qdm:v5_0_draft}PatientCharacteristicEthnicity"
|
|
116
|
+
// Where we only care about: "PatientCharacteristicEthnicity".
|
|
117
|
+
profileStripped = profile.replace(/ *\{[^)]*\} */g, '');
|
|
118
|
+
|
|
119
|
+
// Check and handle negation status
|
|
120
|
+
if (/Positive/.test(profileStripped)) {
|
|
121
|
+
profileStripped = profileStripped.replace(/Positive/, '');
|
|
122
|
+
// Since the data criteria is 'Positive', it is not negated.
|
|
123
|
+
return this.getByProfile(profileStripped, false);
|
|
124
|
+
} else if (/Negative/.test(profileStripped)) {
|
|
125
|
+
profileStripped = profileStripped.replace(/Negative/, '');
|
|
126
|
+
// Since the data criteria is 'Negative', it is negated.
|
|
127
|
+
return this.getByProfile(profileStripped, true);
|
|
128
|
+
}
|
|
129
|
+
// No negation status, proceed normally
|
|
130
|
+
return this.getByProfile(profileStripped);
|
|
131
|
+
}
|
|
132
|
+
return [];
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
QDMPatientSchema.methods.adverse_events = function adverse_events() {
|
|
136
|
+
return this.getDataElements({ qdmCategory: 'adverse_event' });
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
QDMPatientSchema.methods.allergies = function allergies() {
|
|
140
|
+
return this.getDataElements({ qdmCategory: 'allergy' });
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
QDMPatientSchema.methods.assessments = function assessments() {
|
|
144
|
+
return this.getDataElements({ qdmCategory: 'assessment' });
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
QDMPatientSchema.methods.care_experiences = function care_experiences() {
|
|
148
|
+
return this.getDataElements({ qdmCategory: 'care_experience' });
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
QDMPatientSchema.methods.care_goals = function care_goals() {
|
|
152
|
+
return this.getDataElements({ qdmCategory: 'care_goal' });
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
QDMPatientSchema.methods.communications = function communications() {
|
|
156
|
+
return this.getDataElements({ qdmCategory: 'communication' });
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
QDMPatientSchema.methods.conditions = function conditions() {
|
|
160
|
+
return this.getDataElements({ qdmCategory: 'condition' });
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
QDMPatientSchema.methods.devices = function devices() {
|
|
164
|
+
return this.getDataElements({ qdmCategory: 'device' });
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
QDMPatientSchema.methods.diagnostic_studies = function diagnostic_studies() {
|
|
168
|
+
return this.getDataElements({ qdmCategory: 'diagnostic_study' });
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
QDMPatientSchema.methods.encounters = function encounters() {
|
|
172
|
+
return this.getDataElements({ qdmCategory: 'encounter' });
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
QDMPatientSchema.methods.family_history = function family_history() {
|
|
176
|
+
return this.getDataElements({ qdmCategory: 'family_history' });
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
QDMPatientSchema.methods.functional_statuses = function functional_statuses() {
|
|
180
|
+
return this.getDataElements({ qdmCategory: 'functional_status' });
|
|
181
|
+
};
|
|
182
|
+
|
|
183
|
+
QDMPatientSchema.methods.immunizations = function immunizations() {
|
|
184
|
+
return this.getDataElements({ qdmCategory: 'immunization' });
|
|
185
|
+
};
|
|
186
|
+
|
|
187
|
+
QDMPatientSchema.methods.interventions = function interventions() {
|
|
188
|
+
return this.getDataElements({ qdmCategory: 'intervention' });
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
QDMPatientSchema.methods.laboratory_tests = function laboratory_tests() {
|
|
192
|
+
return this.getDataElements({ qdmCategory: 'laboratory_test' });
|
|
193
|
+
};
|
|
194
|
+
|
|
195
|
+
QDMPatientSchema.methods.medical_equipment = function medical_equipment() {
|
|
196
|
+
return this.getDataElements({ qdmCategory: 'medical_equipment' });
|
|
197
|
+
};
|
|
198
|
+
|
|
199
|
+
QDMPatientSchema.methods.medications = function medications() {
|
|
200
|
+
return this.getDataElements({ qdmCategory: 'medication' });
|
|
201
|
+
};
|
|
202
|
+
|
|
203
|
+
QDMPatientSchema.methods.patient_characteristics = function patient_characteristics() {
|
|
204
|
+
return this.getDataElements({ qdmCategory: 'patient_characteristic' });
|
|
205
|
+
};
|
|
206
|
+
|
|
207
|
+
QDMPatientSchema.methods.physical_exams = function physical_exams() {
|
|
208
|
+
return this.getDataElements({ qdmCategory: 'physical_exam' });
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
QDMPatientSchema.methods.preferences = function preferences() {
|
|
212
|
+
return this.getDataElements({ qdmCategory: 'preference' });
|
|
213
|
+
};
|
|
214
|
+
|
|
215
|
+
QDMPatientSchema.methods.provider_characteristics = function provider_characteristics() {
|
|
216
|
+
return this.getDataElements({ qdmCategory: 'provider_characteristic' });
|
|
217
|
+
};
|
|
218
|
+
|
|
219
|
+
QDMPatientSchema.methods.procedures = function procedures() {
|
|
220
|
+
return this.getDataElements({ qdmCategory: 'procedure' });
|
|
221
|
+
};
|
|
222
|
+
|
|
223
|
+
QDMPatientSchema.methods.results = function results() {
|
|
224
|
+
return this.getDataElements({ qdmCategory: 'result' });
|
|
225
|
+
};
|
|
226
|
+
|
|
227
|
+
QDMPatientSchema.methods.risk_category_assessments = function risk_category_assessments() {
|
|
228
|
+
return this.getDataElements({ qdmCategory: 'risk_category_assessment' });
|
|
229
|
+
};
|
|
230
|
+
|
|
231
|
+
QDMPatientSchema.methods.social_history = function social_history() {
|
|
232
|
+
return this.getDataElements({ qdmCategory: 'social_history' });
|
|
233
|
+
};
|
|
234
|
+
|
|
235
|
+
QDMPatientSchema.methods.substances = function substances() {
|
|
236
|
+
return this.getDataElements({ qdmCategory: 'substance' });
|
|
237
|
+
};
|
|
238
|
+
|
|
239
|
+
QDMPatientSchema.methods.symptoms = function symptoms() {
|
|
240
|
+
return this.getDataElements({ qdmCategory: 'symptom' });
|
|
241
|
+
};
|
|
242
|
+
|
|
243
|
+
QDMPatientSchema.methods.system_characteristics = function system_characteristics() {
|
|
244
|
+
return this.getDataElements({ qdmCategory: 'system_characteristic' });
|
|
245
|
+
};
|
|
246
|
+
|
|
247
|
+
QDMPatientSchema.methods.transfers = function transfers() {
|
|
248
|
+
return this.getDataElements({ qdmCategory: 'transfer' });
|
|
249
|
+
};
|
|
250
|
+
|
|
251
|
+
QDMPatientSchema.methods.vital_signs = function vital_signs() {
|
|
252
|
+
return this.getDataElements({ qdmCategory: 'vital_sign' });
|
|
253
|
+
};
|
|
254
|
+
|
|
255
|
+
module.exports.QDMPatientSchema = QDMPatientSchema;
|
|
256
|
+
class QDMPatient extends mongoose.Document {
|
|
257
|
+
constructor(object) {
|
|
258
|
+
super(object, QDMPatientSchema);
|
|
259
|
+
this.initializeDataElements();
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
module.exports.QDMPatient = QDMPatient;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const mongoose = require('mongoose');
|
|
1
|
+
const mongoose = require('mongoose/browser');
|
|
2
2
|
|
|
3
3
|
const PlaceholderResultSchema = mongoose.Schema({
|
|
4
4
|
cache_id: String,
|
|
@@ -25,4 +25,9 @@ const PlaceholderResultSchema = mongoose.Schema({
|
|
|
25
25
|
});
|
|
26
26
|
|
|
27
27
|
module.exports.ResultSchema = PlaceholderResultSchema;
|
|
28
|
-
|
|
28
|
+
class PlaceholderResult extends mongoose.Document {
|
|
29
|
+
constructor(object) {
|
|
30
|
+
super(object, PlaceholderResultSchema);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
module.exports.PlaceholderResult = PlaceholderResult;
|
|
@@ -1,13 +1,15 @@
|
|
|
1
|
-
const mongoose = require('mongoose');
|
|
1
|
+
const mongoose = require('mongoose/browser');
|
|
2
|
+
|
|
3
|
+
const { IdSchema } = require('./Id');
|
|
2
4
|
const { DataElementSchema } = require('./basetypes/DataElement');
|
|
3
5
|
const Code = require('./basetypes/Code');
|
|
4
6
|
const Interval = require('./basetypes/Interval');
|
|
5
7
|
const Quantity = require('./basetypes/Quantity');
|
|
6
8
|
const DateTime = require('./basetypes/DateTime');
|
|
7
|
-
|
|
8
|
-
const { FacilityLocationSchema } = require('./FacilityLocation');
|
|
9
|
-
const { IdSchema } = require('./Id');
|
|
10
9
|
const Any = require('./basetypes/Any');
|
|
10
|
+
const { ComponentSchema } = require('./attributes/Component');
|
|
11
|
+
const { FacilityLocationSchema } = require('./attributes/FacilityLocation');
|
|
12
|
+
|
|
11
13
|
|
|
12
14
|
const [Number, String] = [
|
|
13
15
|
mongoose.Schema.Types.Number,
|
|
@@ -17,9 +19,15 @@ const [Number, String] = [
|
|
|
17
19
|
const ResultComponentSchema = DataElementSchema({
|
|
18
20
|
referenceRange: Interval,
|
|
19
21
|
qdmVersion: { type: String, default: '5.4' },
|
|
20
|
-
_type: { type: String, default: 'ResultComponent' },
|
|
22
|
+
_type: { type: String, default: 'QDM::ResultComponent' },
|
|
21
23
|
|
|
22
24
|
});
|
|
23
25
|
|
|
24
26
|
module.exports.ResultComponentSchema = ResultComponentSchema;
|
|
25
|
-
|
|
27
|
+
class ResultComponent extends mongoose.Document {
|
|
28
|
+
constructor(object) {
|
|
29
|
+
super(object, ResultComponentSchema);
|
|
30
|
+
this._type = 'QDM::ResultComponent';
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
module.exports.ResultComponent = ResultComponent;
|
|
@@ -1,13 +1,15 @@
|
|
|
1
|
-
const mongoose = require('mongoose');
|
|
1
|
+
const mongoose = require('mongoose/browser');
|
|
2
|
+
|
|
3
|
+
const { IdSchema } = require('./Id');
|
|
2
4
|
const { DataElementSchema } = require('./basetypes/DataElement');
|
|
3
5
|
const Code = require('./basetypes/Code');
|
|
4
6
|
const Interval = require('./basetypes/Interval');
|
|
5
7
|
const Quantity = require('./basetypes/Quantity');
|
|
6
8
|
const DateTime = require('./basetypes/DateTime');
|
|
7
|
-
const { ComponentSchema } = require('./Component');
|
|
8
|
-
const { FacilityLocationSchema } = require('./FacilityLocation');
|
|
9
|
-
const { IdSchema } = require('./Id');
|
|
10
9
|
const Any = require('./basetypes/Any');
|
|
10
|
+
const { ComponentSchema } = require('./attributes/Component');
|
|
11
|
+
const { FacilityLocationSchema } = require('./attributes/FacilityLocation');
|
|
12
|
+
|
|
11
13
|
|
|
12
14
|
const [Number, String] = [
|
|
13
15
|
mongoose.Schema.Types.Number,
|
|
@@ -21,13 +23,20 @@ const SubstanceAdministeredSchema = DataElementSchema({
|
|
|
21
23
|
frequency: Code,
|
|
22
24
|
route: Code,
|
|
23
25
|
negationRationale: Code,
|
|
24
|
-
|
|
26
|
+
qdmTitle: { type: String, default: 'Substance, Administered' },
|
|
27
|
+
hqmfOid: { type: String, default: '2.16.840.1.113883.10.20.28.4.73' },
|
|
25
28
|
qdmCategory: { type: String, default: 'substance' },
|
|
26
29
|
qdmStatus: { type: String, default: 'administered' },
|
|
27
30
|
qdmVersion: { type: String, default: '5.4' },
|
|
28
|
-
_type: { type: String, default: 'SubstanceAdministered' },
|
|
31
|
+
_type: { type: String, default: 'QDM::SubstanceAdministered' },
|
|
29
32
|
|
|
30
33
|
});
|
|
31
34
|
|
|
32
35
|
module.exports.SubstanceAdministeredSchema = SubstanceAdministeredSchema;
|
|
33
|
-
|
|
36
|
+
class SubstanceAdministered extends mongoose.Document {
|
|
37
|
+
constructor(object) {
|
|
38
|
+
super(object, SubstanceAdministeredSchema);
|
|
39
|
+
this._type = 'QDM::SubstanceAdministered';
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
module.exports.SubstanceAdministered = SubstanceAdministered;
|
|
@@ -1,13 +1,15 @@
|
|
|
1
|
-
const mongoose = require('mongoose');
|
|
1
|
+
const mongoose = require('mongoose/browser');
|
|
2
|
+
|
|
3
|
+
const { IdSchema } = require('./Id');
|
|
2
4
|
const { DataElementSchema } = require('./basetypes/DataElement');
|
|
3
5
|
const Code = require('./basetypes/Code');
|
|
4
6
|
const Interval = require('./basetypes/Interval');
|
|
5
7
|
const Quantity = require('./basetypes/Quantity');
|
|
6
8
|
const DateTime = require('./basetypes/DateTime');
|
|
7
|
-
const { ComponentSchema } = require('./Component');
|
|
8
|
-
const { FacilityLocationSchema } = require('./FacilityLocation');
|
|
9
|
-
const { IdSchema } = require('./Id');
|
|
10
9
|
const Any = require('./basetypes/Any');
|
|
10
|
+
const { ComponentSchema } = require('./attributes/Component');
|
|
11
|
+
const { FacilityLocationSchema } = require('./attributes/FacilityLocation');
|
|
12
|
+
|
|
11
13
|
|
|
12
14
|
const [Number, String] = [
|
|
13
15
|
mongoose.Schema.Types.Number,
|
|
@@ -23,13 +25,20 @@ const SubstanceOrderSchema = DataElementSchema({
|
|
|
23
25
|
refills: Number,
|
|
24
26
|
route: Code,
|
|
25
27
|
negationRationale: Code,
|
|
26
|
-
|
|
28
|
+
qdmTitle: { type: String, default: 'Substance, Order' },
|
|
29
|
+
hqmfOid: { type: String, default: '2.16.840.1.113883.10.20.28.4.77' },
|
|
27
30
|
qdmCategory: { type: String, default: 'substance' },
|
|
28
31
|
qdmStatus: { type: String, default: 'order' },
|
|
29
32
|
qdmVersion: { type: String, default: '5.4' },
|
|
30
|
-
_type: { type: String, default: 'SubstanceOrder' },
|
|
33
|
+
_type: { type: String, default: 'QDM::SubstanceOrder' },
|
|
31
34
|
|
|
32
35
|
});
|
|
33
36
|
|
|
34
37
|
module.exports.SubstanceOrderSchema = SubstanceOrderSchema;
|
|
35
|
-
|
|
38
|
+
class SubstanceOrder extends mongoose.Document {
|
|
39
|
+
constructor(object) {
|
|
40
|
+
super(object, SubstanceOrderSchema);
|
|
41
|
+
this._type = 'QDM::SubstanceOrder';
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
module.exports.SubstanceOrder = SubstanceOrder;
|
|
@@ -1,13 +1,15 @@
|
|
|
1
|
-
const mongoose = require('mongoose');
|
|
1
|
+
const mongoose = require('mongoose/browser');
|
|
2
|
+
|
|
3
|
+
const { IdSchema } = require('./Id');
|
|
2
4
|
const { DataElementSchema } = require('./basetypes/DataElement');
|
|
3
5
|
const Code = require('./basetypes/Code');
|
|
4
6
|
const Interval = require('./basetypes/Interval');
|
|
5
7
|
const Quantity = require('./basetypes/Quantity');
|
|
6
8
|
const DateTime = require('./basetypes/DateTime');
|
|
7
|
-
const { ComponentSchema } = require('./Component');
|
|
8
|
-
const { FacilityLocationSchema } = require('./FacilityLocation');
|
|
9
|
-
const { IdSchema } = require('./Id');
|
|
10
9
|
const Any = require('./basetypes/Any');
|
|
10
|
+
const { ComponentSchema } = require('./attributes/Component');
|
|
11
|
+
const { FacilityLocationSchema } = require('./attributes/FacilityLocation');
|
|
12
|
+
|
|
11
13
|
|
|
12
14
|
const [Number, String] = [
|
|
13
15
|
mongoose.Schema.Types.Number,
|
|
@@ -22,13 +24,20 @@ const SubstanceRecommendedSchema = DataElementSchema({
|
|
|
22
24
|
refills: Number,
|
|
23
25
|
route: Code,
|
|
24
26
|
negationRationale: Code,
|
|
25
|
-
|
|
27
|
+
qdmTitle: { type: String, default: 'Substance, Recommended' },
|
|
28
|
+
hqmfOid: { type: String, default: '2.16.840.1.113883.10.20.28.4.78' },
|
|
26
29
|
qdmCategory: { type: String, default: 'substance' },
|
|
27
30
|
qdmStatus: { type: String, default: 'recommended' },
|
|
28
31
|
qdmVersion: { type: String, default: '5.4' },
|
|
29
|
-
_type: { type: String, default: 'SubstanceRecommended' },
|
|
32
|
+
_type: { type: String, default: 'QDM::SubstanceRecommended' },
|
|
30
33
|
|
|
31
34
|
});
|
|
32
35
|
|
|
33
36
|
module.exports.SubstanceRecommendedSchema = SubstanceRecommendedSchema;
|
|
34
|
-
|
|
37
|
+
class SubstanceRecommended extends mongoose.Document {
|
|
38
|
+
constructor(object) {
|
|
39
|
+
super(object, SubstanceRecommendedSchema);
|
|
40
|
+
this._type = 'QDM::SubstanceRecommended';
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
module.exports.SubstanceRecommended = SubstanceRecommended;
|
|
@@ -1,13 +1,15 @@
|
|
|
1
|
-
const mongoose = require('mongoose');
|
|
1
|
+
const mongoose = require('mongoose/browser');
|
|
2
|
+
|
|
3
|
+
const { IdSchema } = require('./Id');
|
|
2
4
|
const { DataElementSchema } = require('./basetypes/DataElement');
|
|
3
5
|
const Code = require('./basetypes/Code');
|
|
4
6
|
const Interval = require('./basetypes/Interval');
|
|
5
7
|
const Quantity = require('./basetypes/Quantity');
|
|
6
8
|
const DateTime = require('./basetypes/DateTime');
|
|
7
|
-
const { ComponentSchema } = require('./Component');
|
|
8
|
-
const { FacilityLocationSchema } = require('./FacilityLocation');
|
|
9
|
-
const { IdSchema } = require('./Id');
|
|
10
9
|
const Any = require('./basetypes/Any');
|
|
10
|
+
const { ComponentSchema } = require('./attributes/Component');
|
|
11
|
+
const { FacilityLocationSchema } = require('./attributes/FacilityLocation');
|
|
12
|
+
|
|
11
13
|
|
|
12
14
|
const [Number, String] = [
|
|
13
15
|
mongoose.Schema.Types.Number,
|
|
@@ -17,13 +19,20 @@ const [Number, String] = [
|
|
|
17
19
|
const SymptomSchema = DataElementSchema({
|
|
18
20
|
prevalencePeriod: Interval,
|
|
19
21
|
severity: Code,
|
|
20
|
-
|
|
22
|
+
qdmTitle: { type: String, default: 'Symptom' },
|
|
23
|
+
hqmfOid: { type: String, default: '2.16.840.1.113883.10.20.28.4.116' },
|
|
21
24
|
qrdaOid: { type: String, default: '2.16.840.1.113883.10.20.24.3.136' },
|
|
22
25
|
qdmCategory: { type: String, default: 'symptom' },
|
|
23
26
|
qdmVersion: { type: String, default: '5.4' },
|
|
24
|
-
_type: { type: String, default: 'Symptom' },
|
|
27
|
+
_type: { type: String, default: 'QDM::Symptom' },
|
|
25
28
|
|
|
26
29
|
});
|
|
27
30
|
|
|
28
31
|
module.exports.SymptomSchema = SymptomSchema;
|
|
29
|
-
|
|
32
|
+
class Symptom extends mongoose.Document {
|
|
33
|
+
constructor(object) {
|
|
34
|
+
super(object, SymptomSchema);
|
|
35
|
+
this._type = 'QDM::Symptom';
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
module.exports.Symptom = Symptom;
|