2026-07-27 11:28:33 +08:00

91 lines
5.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const frequencyList = require('./frequency.js');
const usageList = require('./usage.js');
const unitList = require('./unit');
const categoryList = require('./drug-category');
const dosageUnitList = require('./dosageUnit.js');
const validator = require('../../utils/validator.js')
const drugFieldDict = [
{ name: '药品名称', field: 'name', required: true, verify: (val, label) => validator.verifyString(val, label, 1) },
{ name: '药品规格', field: 'specification', required: true, verify: (val, label) => validator.verifyString(val, label, 1) },
{ name: '包装单位', field: 'unit', required: true, verify: (val, label) => validator.verifyListItem(val, unitList, true, label) },
{ name: '包装量', field: 'package_amount', verify: (val, label) => validateNumber(val, label, 2) },
{ name: '生产厂家', field: 'manufacturer', verify: (val, label) => validator.verifyString(val, label) },
{ name: '商品条形码', field: 'barcode', verify: (val, label) => validator.verifyString(val, label) },
{ name: '医保编码', field: 'insurance_code', required: true, verify: (val, label) => validator.verifyString(val, label, 1) },
{ name: 'ERP编码', field: 'his_drug_code', verify: (val, label) => validator.verifyString(val, label) },
{ name: '药品分类', field: 'category', verify: (val, label) => validator.verifyListItem(val, categoryList, false, label) },
{ name: '药品拼音码', field: 'pinyin_code', verify: (val, label) => validator.verifyString(val, label) },
{ name: '药库货品ID', field: 'product_id', verify: (val, label) => validateNumber(val, label) },
{ name: '通用名', field: 'generic_name', verify: (val, label) => validator.verifyString(val, label) },
{ name: '通用名拼音码', field: 'generic_pinyin', verify: (val, label) => validator.verifyString(val, label) },
// 仅在线药品库使用:管理分类(处方药 / OTC与剂型
{ name: '管理分类', field: 'manage_category', verify: (val, label) => validator.verifyString(val, label) },
{ name: '剂型', field: 'dosage_form', verify: (val, label) => validator.verifyString(val, label) },
{ name: '适用人群', field: 'apply_people', verify: (val, label) => validator.verifyListItem(val, ['通用', '男', '女', '儿童'], false, label) },
{ name: '单次标准剂量', field: 'dosage', verify: (val, label) => validateNumber(val, label, 2) },
{ name: '剂量单位', field: 'dosage_unit', verify: (val, label) => validator.verifyListItem(val, dosageUnitList, false, label) },
{ name: '给药标准频次', field: 'frequency', verify: (val, label) => validator.verifyListItem(val, frequencyList.map(i => i.name), false, label) },
{ name: '给药标准方式', field: 'administration_method', verify: (val, label) => validator.verifyListItem(val, usageList.map(i => i.name), false, label) },
{ name: '用药标准天数', field: 'days', verify: (val, label) => validateNumber(val, label) },
{ name: '发药标准数量', field: 'recommended_quantity', verify: (val, label) => validateNumber(val, label) },
{ name: '用药证明', field: 'medication_proof_desc', verify: (val, label) => validator.verifyString(val, label, 0, 500) },
{ name: '使用限制说明', field: 'usage_restriction_desc', verify: (val, label) => validator.verifyString(val, label, 0, 500) },
{ name: '适用性别', field: 'suitableGender', verify: (val, label) => validator.verifyListItem(val, ['common', 'male', 'female'], false, label) },
{ name: '适用儿童', field: 'suitableChild', verify: (val, label) => validator.verifyListItem(val, [true, false], false, label) },
{
name: '重复用药标识', field: 'repeatTag', verify: (val, label) => {
if (val === '' || val === undefined) return [true, []];
if (Array.isArray(val) && val.every(i => i > 0 && Number.isInteger(i))) return [true, val];
return [false, `${label}格式错误`]
}
},
]
function validateNumber(val, label, len = 0, required = false) {
if (!val && val !== 0 && !required) return [true, ''];
return validator.verifyNumber(val, label, len)
}
function getDrugList(arr, verifyEveryField = true, extraInfo = {}) {
return arr.map(drug => {
const res = drugFieldDict.reduce((obj, item) => {
const key = item.field;
if (!verifyEveryField && !(key in drug)) {
return obj
}
const val = typeof drug[key] === 'string' ? drug[key].trim() : drug[key];
const [pass, res] = item.verify(val, item.name);
if (pass) {
obj[item.field] = res;
} else {
obj[item.field] = val;
obj.msgs.push(res)
}
return obj
}, { msgs: [] })
if ('product_id' in res) {
res.product_id_str = res.product_id.toString();
}
if ('frequency' in res) {
res.freq = res.frequency;
}
return { ...res, ...extraInfo }
})
}
function getDrugFromChineseKeyObj(data) {
const rowData = {};
Object.keys(data).forEach(key => {
rowData[key.trim()] = data[key];
})
return drugFieldDict.reduce((obj, item) => {
obj[item.field] = rowData[item.name] ?? '';
return obj;
}, {});
}
module.exports = {
getDrugList,
getDrugFromChineseKeyObj,
}