Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

qpp-measures-data

Package Overview
Dependencies
Maintainers
1
Versions
271
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

qpp-measures-data - npm Package Compare versions

Comparing version 1.4.0 to 1.5.0

2

package.json
{
"name": "qpp-measures-data",
"version": "1.4.0",
"version": "1.5.0",
"description": "Quality Payment Program Measures Data Repository",

@@ -5,0 +5,0 @@ "repository": {

@@ -36,22 +36,21 @@ const parse = require('csv-parse/lib/sync');

sourced_fields: {
// fields are csv columns indexed starting from 1 (the provided
// spreadsheet has a leftmost blank column)
title: 1,
// fields are csv columns indexed starting from 0
title: 0,
eMeasureId: {
index: 2,
index: 1,
default: null
},
nqfEMeasureId: {
index: 3,
index: 2,
default: null
},
nqfId: {
index: 4,
index: 3,
default: null
},
measureId: 5,
description: 6,
nationalQualityStrategyDomain: 7,
measureId: 4,
description: 5,
nationalQualityStrategyDomain: 6,
measureType: {
index: 8,
index: 7,
mappings: { // there should be no capital letters in the keys below

@@ -70,71 +69,77 @@ 'process': 'process',

},
primarySteward: 9,
metricType: 51,
primarySteward: 8,
metricType: 50,
firstPerformanceYear: {
index: 52,
index: 51,
default: 2017
},
lastPerformanceYear: {
index: 53,
index: 52,
default: null
},
isHighPriority: {
index: 55,
index: 54,
default: false
},
isInverse: {
index: 56,
index: 55,
default: false
},
overallAlgorithm: 60
overallAlgorithm: 59
}
};
// mapping from quality measures csv column numbers to submission method
// mapping from quality measures csv column numbers to submission method array indices
const SUBMISSION_METHODS = {
10: 'claims',
11: 'certifiedSurveyVendor',
12: 'electronicHealthRecord',
13: 'cmsWebInterface',
14: 'administrativeClaims',
15: 'registry'
CSV_COLUMN_START_INDEX: 9,
ORDERED_FIELDS: [
'claims',
'certifiedSurveyVendor',
'electronicHealthRecord',
'cmsWebInterface',
'administrativeClaims',
'registry'
]
};
// mapping from quality measures csv column numbers to measure sets
// mapping from quality measures csv column numbers to measure sets array indices
const MEASURE_SETS = {
16: 'allergyImmunology',
17: 'anesthesiology',
18: 'cardiology',
19: 'electrophysiologyCardiacSpecialist',
20: 'gastroenterology',
21: 'dermatology',
22: 'emergencyMedicine',
23: 'generalPracticeFamilyMedicine',
24: 'internalMedicine',
25: 'obstetricsGynecology',
26: 'ophthalmology',
27: 'orthopedicSurgery',
28: 'otolaryngology',
29: 'pathology',
30: 'pediatrics',
31: 'physicalMedicine',
32: 'plasticSurgery',
33: 'preventiveMedicine',
34: 'neurology',
35: 'mentalBehavioralHealth',
36: 'diagnosticRadiology',
37: 'interventionalRadiology',
38: 'vascularSurgery',
39: 'generalSurgery',
40: 'thoracicSurgery',
41: 'urology',
42: 'generalOncology',
43: 'radiationOncology',
44: 'hospitalists',
45: 'rheumatology',
46: 'nephrology',
47: 'infectiousDisease',
48: 'neurosurgical',
49: 'podiatry',
50: 'dentistry'
CSV_COLUMN_START_INDEX: 15,
ORDERED_FIELDS: [
'allergyImmunology', // 15 (CSV_COLUMN_START_INDEX)
'anesthesiology', // 16
'cardiology', // 17 etc...
'electrophysiologyCardiacSpecialist',
'gastroenterology',
'dermatology',
'emergencyMedicine',
'generalPracticeFamilyMedicine',
'internalMedicine',
'obstetricsGynecology',
'ophthalmology',
'orthopedicSurgery',
'otolaryngology',
'pathology',
'pediatrics',
'physicalMedicine',
'plasticSurgery',
'preventiveMedicine',
'neurology',
'mentalBehavioralHealth',
'diagnosticRadiology',
'interventionalRadiology',
'vascularSurgery',
'generalSurgery',
'thoracicSurgery',
'urology',
'generalOncology',
'radiationOncology',
'hospitalists',
'rheumatology',
'nephrology',
'infectiousDisease',
'neurosurgical',
'podiatry',
'dentistry'
]
};

@@ -161,3 +166,4 @@

// map specific csv input values to their representation in the measures schema
function mapInput(rawInput) {
function mapInput(rawInput, fieldName) {
const stringInput = rawInput.toString();
const input = cleanInput(rawInput);

@@ -173,4 +179,11 @@ if (QUALITY_CSV_CONFIG.truthy_markers.includes(input)) {

} else {
// if csv input isn't one of the special cases above, just return it
return rawInput.trim();
// Excel strips leading zeroes from the measureIds/nqfIds and we restore them here
let finalInput = stringInput.trim();
if (fieldName === 'measureId') {
finalInput = _.padStart(finalInput, 3, '0');
} else if (fieldName === 'nqfId') {
finalInput = _.padStart(finalInput, 4, '0');
}
return finalInput;
}

@@ -180,7 +193,7 @@ }

// used when multiple csv columns map into a single measure field
function getCheckedColumns(row, columnNumberToNameMap) {
function getCheckedColumns(row, columnSet) {
const checkedColumns = [];
_.each(columnNumberToNameMap, (value, key) => {
if (mapInput(row[key]) === true) {
_.each(columnSet.ORDERED_FIELDS, (value, index) => {
if (mapInput(row[columnSet.CSV_COLUMN_START_INDEX + index]) === true) {
checkedColumns.push(value);

@@ -245,3 +258,3 @@ }

const measure = {};
_.each(sourcedFields, (columnObject, measureKey) => {
_.each(sourcedFields, (columnObject, fieldName) => {
if (typeof columnObject === 'number') {

@@ -252,3 +265,3 @@ const input = row[columnObject];

} else if (input !== '') {
measure[measureKey] = mapInput(input);
measure[fieldName] = mapInput(input, fieldName);
}

@@ -261,6 +274,6 @@ } else {

} else {
value = mapInput(row[columnObject.index]);
value = mapInput(row[columnObject.index], fieldName);
}
measure[measureKey] = value || columnObject['default'];
measure[fieldName] = value || columnObject['default'];
}

@@ -283,3 +296,3 @@ });

function importQualityMeasures() {
const qualityCsv = getCsv(qualityMeasuresPath, 2);
const qualityCsv = getCsv(qualityMeasuresPath, 3);
const strataCsv = getCsv(qualityStrataPath, 2);

@@ -286,0 +299,0 @@

@@ -34,3 +34,3 @@ [

{
"title": "Coronary Artery Disease (CAD): Beta-Blocker Therapy � Prior Myocardial Infarction (MI) or Left Ventricular Systolic Dysfunction (LVEF < 40%)",
"title": "Coronary Artery Disease (CAD): Beta-Blocker Therapy - Prior Myocardial Infarction (MI) or Left Ventricular Systolic Dysfunction (LVEF < 40%)",
"eMeasureId": "CMS145v6",

@@ -79,3 +79,3 @@ "nqfEMeasureId": null,

"measureId": "046",
"description": "The percentage of discharges from any inpatient facility (e.g. hospital, skilled nursing facility, or rehabilitation facility) for patients 18 years and older of age seen within 30 days following discharge in the office by the physician, prescribing practitioner, registered nurse, or clinical pharmacist providing on-going care for whom the discharge medication list was reconciled with the current medication list in the outpatient medical record.\r\nThis measure is reported as three rates stratified by age group:\r\n� Submission Criteria 1: 18-64 years of age\r\n� Submission Criteria 2: 65 years and older\r\n� Total Rate: All patients 18 years of age and older",
"description": "The percentage of discharges from any inpatient facility (e.g. hospital, skilled nursing facility, or rehabilitation facility) for patients 18 years and older of age seen within 30 days following discharge in the office by the physician, prescribing practitioner, registered nurse, or clinical pharmacist providing on-going care for whom the discharge medication list was reconciled with the current medication list in the outpatient medical record.\n\nThis measure is reported as three rates stratified by age group: Submission Criteria 1: 18-64 years of age; Submission Criteria 2: 65 years and older; Total Rate: All patients 18 years of age and older",
"nationalQualityStrategyDomain": "Communication and Care Coordination",

@@ -82,0 +82,0 @@ "measureType": "process",

@@ -34,3 +34,3 @@ [

{
"title": "Coronary Artery Disease (CAD): Beta-Blocker Therapy � Prior Myocardial Infarction (MI) or Left Ventricular Systolic Dysfunction (LVEF < 40%)",
"title": "Coronary Artery Disease (CAD): Beta-Blocker Therapy - Prior Myocardial Infarction (MI) or Left Ventricular Systolic Dysfunction (LVEF < 40%)",
"eMeasureId": "CMS145v6",

@@ -79,3 +79,3 @@ "nqfEMeasureId": null,

"measureId": "046",
"description": "The percentage of discharges from any inpatient facility (e.g. hospital, skilled nursing facility, or rehabilitation facility) for patients 18 years and older of age seen within 30 days following discharge in the office by the physician, prescribing practitioner, registered nurse, or clinical pharmacist providing on-going care for whom the discharge medication list was reconciled with the current medication list in the outpatient medical record.\r\nThis measure is reported as three rates stratified by age group:\r\n� Submission Criteria 1: 18-64 years of age\r\n� Submission Criteria 2: 65 years and older\r\n� Total Rate: All patients 18 years of age and older",
"description": "The percentage of discharges from any inpatient facility (e.g. hospital, skilled nursing facility, or rehabilitation facility) for patients 18 years and older of age seen within 30 days following discharge in the office by the physician, prescribing practitioner, registered nurse, or clinical pharmacist providing on-going care for whom the discharge medication list was reconciled with the current medication list in the outpatient medical record.\n\nThis measure is reported as three rates stratified by age group: Submission Criteria 1: 18-64 years of age; Submission Criteria 2: 65 years and older; Total Rate: All patients 18 years of age and older",
"nationalQualityStrategyDomain": "Communication and Care Coordination",

@@ -82,0 +82,0 @@ "measureType": "process",

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc