Skip to main content
Glama
utils.js6.37 kB
/** * Utility functions for Medicaid MCP Server * - SoQL query builder * - Response parsers * - Date formatters */ /** * Build SoQL query parameters */ function buildSoQLQuery(params) { const queryParams = {}; // WHERE clause if (params.where_clause) { queryParams.$where = params.where_clause; } else { // Build WHERE clause from individual filters const conditions = []; if (params.state) { conditions.push(`state='${params.state}'`); } if (params.ndc_code) { conditions.push(`ndc='${params.ndc_code}'`); } if (params.drug_name) { // Case-insensitive search for drug names conditions.push(`ndc_description like '%${params.drug_name}%'`); } if (params.effective_date || params.price_date) { const date = params.effective_date || params.price_date; conditions.push(`effective_date='${date}'`); } if (params.month) { // For enrollment data - month format is typically a column conditions.push(`reporting_month='${params.month}'`); } if (params.year) { conditions.push(`year=${params.year}`); } if (conditions.length > 0) { queryParams.$where = conditions.join(' AND '); } } // SELECT fields if (params.select_fields && params.select_fields.length > 0) { queryParams.$select = params.select_fields.join(','); } // ORDER BY if (params.order_by) { queryParams.$order = params.order_by; } // LIMIT if (params.limit) { queryParams.$limit = params.limit; } else { queryParams.$limit = 100; // Default } // OFFSET if (params.offset) { queryParams.$offset = params.offset; } return queryParams; } /** * Format date range for queries */ function formatDateRange(startDate, endDate) { if (!startDate && !endDate) { return null; } const conditions = []; if (startDate) { conditions.push(`effective_date >= '${startDate}'`); } if (endDate) { conditions.push(`effective_date <= '${endDate}'`); } return conditions.join(' AND '); } /** * Parse enrollment data response * Maps CSV column names to consistent field names */ function parseEnrollmentData(data) { return data.map(record => ({ state: record['State Abbreviation'], state_name: record['State Name'], reporting_period: record['Reporting Period'], // YYYYMM format state_expanded_medicaid: record['State Expanded Medicaid'], total_medicaid_chip_enrollment: parseFloat(record['Total Medicaid and CHIP Enrollment']?.replace(/,/g, '') || 0), total_medicaid_enrollment: parseFloat(record['Total Medicaid Enrollment']?.replace(/,/g, '') || 0), total_chip_enrollment: parseFloat(record['Total CHIP Enrollment']?.replace(/,/g, '') || 0), total_adult_enrollment: parseFloat(record['Total Adult Medicaid Enrollment']?.replace(/,/g, '') || 0), medicaid_chip_child_enrollment: parseFloat(record['Medicaid and CHIP Child Enrollment']?.replace(/,/g, '') || 0) })); } /** * Parse NADAC pricing data response * Maps CSV column names to consistent field names */ function parseNADACData(data) { return data.map(record => ({ ndc: record['NDC'], description: record['NDC Description'], nadac_per_unit: parseFloat(record['NADAC Per Unit']) || 0, pricing_unit: record['Pricing Unit'], pharmacy_type_indicator: record['Pharmacy Type Indicator'], otc: record['OTC'], effective_date: record['Effective Date'], explanation_code: record['Explanation Code'], classification_for_rate_setting: record['Classification for Rate Setting'], corresponding_generic_nadac: record['Corresponding Generic Drug NADAC Per Unit'] ? parseFloat(record['Corresponding Generic Drug NADAC Per Unit']) : null, corresponding_generic_drug_effective_date: record.corresponding_generic_drug_effective_date || null })); } /** * Parse drug rebate data response */ function parseDrugRebateData(data) { return data.map(record => ({ ndc: record.ndc, labeler_name: record.labeler_name, product_name: record.product_name, fda_approval_date: record.fda_approval_date, units_reimbursed: parseFloat(record.units_reimbursed) || 0, number_of_prescriptions: parseFloat(record.number_of_prescriptions) || 0, total_amount_reimbursed: parseFloat(record.total_amount_reimbursed) || 0, medicaid_amount_reimbursed: parseFloat(record.medicaid_amount_reimbursed) || 0, non_medicaid_amount_reimbursed: parseFloat(record.non_medicaid_amount_reimbursed) || 0, quarter: record.quarter, year: record.year })); } /** * Calculate growth rate between two values */ function calculateGrowthRate(current, previous) { if (!previous || previous === 0) { return null; } return ((current - previous) / previous) * 100; } /** * Group data by state for comparisons */ function groupByState(data) { const grouped = {}; data.forEach(record => { const state = record.state || record.stateabbr; if (!grouped[state]) { grouped[state] = []; } grouped[state].push(record); }); return grouped; } /** * Get latest date from dataset */ function getLatestDate() { const today = new Date(); return today.toISOString().split('T')[0]; // YYYY-MM-DD } /** * Get date N months ago */ function getDateMonthsAgo(months) { const date = new Date(); date.setMonth(date.getMonth() - months); return date.toISOString().split('T')[0]; } /** * Validate state code */ function validateStateCode(state) { const validStates = [ 'AL', 'AK', 'AZ', 'AR', 'CA', 'CO', 'CT', 'DE', 'FL', 'GA', 'HI', 'ID', 'IL', 'IN', 'IA', 'KS', 'KY', 'LA', 'ME', 'MD', 'MA', 'MI', 'MN', 'MS', 'MO', 'MT', 'NE', 'NV', 'NH', 'NJ', 'NM', 'NY', 'NC', 'ND', 'OH', 'OK', 'OR', 'PA', 'RI', 'SC', 'SD', 'TN', 'TX', 'UT', 'VT', 'VA', 'WA', 'WV', 'WI', 'WY', 'DC' ]; if (!state) { return false; } return validStates.includes(state.toUpperCase()); } /** * Format response with metadata */ function formatResponse(data, metadata = {}) { return { data, meta: { total_count: data.length, ...metadata } }; } module.exports = { buildSoQLQuery, formatDateRange, parseEnrollmentData, parseNADACData, parseDrugRebateData, calculateGrowthRate, groupByState, getLatestDate, getDateMonthsAgo, validateStateCode, formatResponse };

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/openpharma-org/medicaid-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server