UNPKG

medicaid

Version:

Software Development Kit (SDK) to interact with the data.gov Medicaid API

72 lines (61 loc) 3.27 kB
import {convertDatasetToDistributionId, getDatasetByKeyword} from "../metastore.js"; import {getDatastoreQuerySql} from "../sql.js"; import {getAllData, plot, averageValues} from "./plot.js" import {getDatastoreImport} from "../datastore.js"; let distributions; await preImport(); async function getHealthcareQualityData(qualityMeasure){ return await getDatastoreQuerySql(`[SELECT * FROM ${distributions[distributions.length - 1]}][WHERE measure_name === "${qualityMeasure}"]`) } async function getQualityMeasures(){ let measureObjects = await getDatastoreQuerySql(`[SELECT measure_name FROM ${distributions[distributions.length - 1]}]`) return new Set(measureObjects.map(measure => measure["measure_name"])); } async function getRateDefinitions(qualityMeasure){ return new Set((await getHealthcareQualityData(qualityMeasure)).map(x => x["rate_definition"])); } async function getStates(rateDef, qualityMeasure){ let filteredData = (await getHealthcareQualityData(qualityMeasure)).filter(x => x["rate_definition"] === rateDef) return new Set(filteredData.map(x => {return x.state})); } async function getRateBarData(rateDef, qualityMeasure){ let filteredData = (await getHealthcareQualityData(qualityMeasure)).filter(x => x["rate_definition"] === rateDef) let averagedData = averageValues(filteredData.map(x => ({[x.state]: x["state_rate"]}))); return {x: Object.keys(averagedData), y: Object.values(averagedData), name: `2020: ${rateDef}`} } async function getRateTimeSeriesData(states, rateDef) { const rawData = await getAllData(states, "state", distributions, ["ffy", "state_rate", "rate_definition"]); const adjustedData = rawData.flat().filter(x => x["rate_definition"] === rateDef); const av = averageValues(adjustedData.map(x => ({[x["ffy"]]: x["state_rate"]}))); return {x: Object.keys(av), y: Object.values(av), name: states[0]}; } async function plotRateBar(rateDef, qualityMeasure, layout, div){ const data = await getRateBarData(rateDef, qualityMeasure); return plot(data, layout, "bar", div) } async function plotRateTimeSeries(stateList, layout, rateDef, div) { if (stateList === undefined) throw new Error("Please enter valid states."); const states = Array.isArray(stateList) ? stateList : [stateList]; const data = await Promise.all(states.map(state => getRateTimeSeriesData(state, rateDef))); return plot(data, layout, "line", div); } async function getHealthcareMeasuresInfo(){ return getDatastoreImport(distributions[distributions.length - 1]); } async function preImport(){ let datasets = await getDatasetByKeyword("performance rates", false); datasets.sort((a, b) => a.title.localeCompare(b.title)); let ids = await Promise.all(datasets.map(d => convertDatasetToDistributionId(d.identifier))) distributions = ids.slice(2, ids.length) distributions.pop() //2023 dataset has new nomenclature 'ffy' -> 'core_set_year' will need to update the data retrieval methods, but this will fix for now } export { //general getQualityMeasures, getRateDefinitions, getStates, getHealthcareMeasuresInfo, //plotting plotRateBar, plotRateTimeSeries }