/** * 参数解析和转换模块 * 负责参数字典、数据转换和关键数据提取 */ // 费森透析机 5008S 参数字典 - 根据实际机器数据修正对照 const PARAMETER_DICT = { // 设备信息 (3个) 'TSSRNB': '设备编号', // 8VSAGC00 'DMBLDN': '设备型号', // 5008S 'TSSSWV': '软件版本', // 450 // 超滤参数 (3个) 'DSUFVO': '超滤目标体积(ml)', // 400 'DCUFVO': '累计超滤量(ml)', // 累计值 'DSUFRA': '超滤速率设置(%)', // 设置值 // 治疗时长 (1个) 'DCUFTM': '治疗时长(分钟)', // 240 // 透析液参数 (5个) 'DSDLFW': '透析液流量设置(%)', // 100 'DCDAFL': '透析液流量实际(ml/min)', // 实际值 'DSDITP': '透析液温度设置(℃)', // 385->38.5 'DCNACV': '处方钠浓度(mmol/L)', // 1380->138 'DCENDC': '电导度(mS/cm)', // 18->1.8 // 血液/血流参数 (6个) 'DCBLFL': '血流量(ml/min)', // 240 'DCTVBF': '有效血流量(ml/min)', // 240 'DCPRBV': '透析血容量(ml)', // 2430 'DCRIVO': '累计回血流量(ml)', // 累计值230ml 'DCPLNA': '血浆钠浓度(mmol/L)', // 1370->137 'DCCLMA': '清除率(ml/min)', // 128 // 质量指标 (2个) 'DCEFKT': '即时KT', // KT即时值 'DSTKTV': '设置目标KTV', // KTV目标值 // 电解质参数 (1个) 'DSNABI': '碳酸氢盐(BIC)浓度(mmol/L)', // 315->31.5 // 压力参数 (3个) 'DCARPR': '动脉压(mmHg)', // 45 'DCVEPR': '静脉压(mmHg)', // 65 'DCTMPV': '跨膜压(TMP)(mmHg)', // 20 // 膜型参数 (1个) 'DSFITY': '透析膜型号', // FX80 // 状态参数 (2个) 'DCRDST': '运行状态', 'TSALST': '报警状态', // 0=正常 9=静脉压上限报警 11=动脉压上线报警 12=动脉压下行报警 // 置换参数 (3个) 'DCXESV': '预计置换液目标(L)', // 预期目标 'DCHDRA': '置换速率(ml/h)', // 置换液速率 'DCHDFV': '置换容量(L)' // 置换液容量 }; // 数据值转换规则 - 某些参数需要特殊转换 (9个转换规则) const VALUE_CONVERTERS = { // ÷10 的参数 (7个) 'DCNACV': (val) => val ? (parseInt(val) / 10).toFixed(1) : '-', // 1380 -> 138 'DCPLNA': (val) => val ? (parseInt(val) / 10).toFixed(1) : '-', // 1370 -> 137 'DSDITP': (val) => val ? (parseInt(val) / 10).toFixed(1) : '-', // 385 -> 38.5 'DSNABI': (val) => val ? (parseInt(val) / 10).toFixed(1) : '-', // 315 -> 31.5 'DCENDC': (val) => val ? (parseInt(val) / 10).toFixed(1) : '-', // 18 -> 1.8 'DCEFKT': (val) => val ? (parseInt(val) / 10).toFixed(1) : '-', // KT即时值 'DCXESV': (val) => val ? (parseInt(val) / 10).toFixed(1) : '-', // 预计置换液目标 // ÷100 的参数 (1个) 'DSTKTV': (val) => val ? (parseInt(val) / 100).toFixed(2) : '-', // 130 -> 1.30 // ÷1000 的参数 (1个) 'DCHDFV': (val) => val ? (parseInt(val) / 1000).toFixed(1) : '-' // 置换容量 }; class ParameterParser { /** * 获取参数字典 */ static getParameterDict() { return PARAMETER_DICT; } /** * 获取值转换器 */ static getValueConverters() { return VALUE_CONVERTERS; } /** * 根据参数ID和值进行转换 * @param {string} paramId - 参数ID * @param {string} value - 参数值 */ static convertValue(paramId, value) { if (VALUE_CONVERTERS[paramId]) { return VALUE_CONVERTERS[paramId](value); } return value; } /** * 从XML字符串提取属性 * @param {string} xml - XML字符串 * @param {string} attr - 属性名 */ static extractAttribute(xml, attr) { const regex = new RegExp(`${attr}="([^"]*)"`, 'i'); const match = xml.match(regex); return match ? match[1] : ''; } /** * 从XML字符串提取元素值 * @param {string} xml - XML字符串 * @param {string} tag - 元素标签 */ static extractElement(xml, tag) { const regex = new RegExp(`<${tag}>([^<]*)<\/${tag}>`, 'i'); const match = xml.match(regex); return match ? match[1] : ''; } /** * 从XML提取所有参数 * @param {string} xml - XML字符串 */ static extractAllParameters(xml) { const params = {}; const regex = /([^<]+)<\/Id>([^<]*)<\/Val><\/Prm>/g; let match; while ((match = regex.exec(xml)) !== null) { params[match[1]] = match[2]; } return params; } /** * 从XML提取关键数据 * @param {string} xml - XML字符串 */ static extractKeyData(xml) { const params = this.extractAllParameters(xml); return { deviceModel: params['DMBLDN'] || '-', serialNumber: params['TSSRNB'] || '-', softwareVersion: params['TSSSWV'] || '-', // 超滤参数 (3个) ultraFiltrateTarget: params['DSUFVO'] || '0', ultraFiltrateTotal: params['DCUFVO'] || '0', ultrafiltrateRateSet: params['DSUFRA'] || '0', // 透析液参数 (5个) dialysisFluidFlow: params['DSDLFW'] || '0', dialysisFluidActual: params['DCDAFL'] || '0', dialysisFluidTemp: this.convertValue('DSDITP', params['DSDITP']), sodiumConc: this.convertValue('DCNACV', params['DCNACV']), conductivity: this.convertValue('DCENDC', params['DCENDC']), // 血液/血流参数 (6个) bloodFlow: params['DCBLFL'] || '0', effectiveBloodFlow: params['DCTVBF'] || '0', dialysisBloodVolume: params['DCPRBV'] || '0', returnedBloodVolume: params['DCRIVO'] || '0', plasmaNA: this.convertValue('DCPLNA', params['DCPLNA']), clearanceRate: params['DCCLMA'] || '0', // 质量指标 (2个) instantKT: this.convertValue('DCEFKT', params['DCEFKT']), ktvTarget: this.convertValue('DSTKTV', params['DSTKTV']), // 电解质参数 (1个) bicarbonate: this.convertValue('DSNABI', params['DSNABI']), // 压力参数 (3个) arterialPressure: params['DCARPR'] || '-', venousPressure: params['DCVEPR'] || '-', transmembranePressure: params['DCTMPV'] || '-', // 膜型参数 (1个) dialysisMode: params['DSFITY'] || '-', // 状态参数 (2个) runStatus: params['DCRDST'] || '-', alarmStatus: params['TSALST'] || '-', treatmentDuration: params['DCUFTM'] || '-', // 置换参数 (3个) replacementFluidTarget: this.convertValue('DCXESV', params['DCXESV']), replacementRate: params['DCHDRA'] || '-', replacementVolume: this.convertValue('DCHDFV', params['DCHDFV']) }; } } module.exports = ParameterParser;