91 lines
5.1 KiB
JavaScript
91 lines
5.1 KiB
JavaScript
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,
|
||
}
|