91 lines
5.1 KiB
JavaScript
Raw Normal View History

2026-07-27 11:28:33 +08:00
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,
}