277 lines
8.6 KiB
JavaScript
Raw Normal View History

2026-07-30 16:49:41 +08:00
const dayjs = require("dayjs");
const { decode } = require('iconv-lite');
const request = require("../../request");
// const baseUrl = "http://115.239.161.48:8089"; //his说 8089可能会关闭,用8083
const baseUrl = process.env.CONFIG_HN_HIS_BASE_URL;
const url = `${baseUrl}/getYoucanData/hlw`;
const AppWin = {
line: '线上挂号',
win: '线下挂号',
}
module.exports = async (item) => {
switch (item.type) {
case "updateHisDrug":
return await updateHisDrug(item);
2026-07-30 16:49:41 +08:00
case "getHisCustomer":
return await getHisCustomer(item);
case "addHisCustomer":
return await addHisCustomer(item);
case "hlwuploadprescription":
return await hlwuploadprescription(item);
case "hisTest":
return await hisTest(item);
case "getHisEmployeeInfo":
return await getHisEmployeeInfo(item);
case "ybReviewPrescription":
return await ybReviewPrescription(item);
2026-09-24 18:22:05 +08:00
case "cancelInsuranceRx":
return await cancelInsuranceRx(item);
2026-07-30 16:49:41 +08:00
}
};
async function getHisCustomer(ctx) {
const idCard = typeof ctx.idCard === 'string' ? ctx.idCard.trim() : '';
if (!idCard) {
return { success: false, message: '证件号不能为空' }
}
try {
const params = { type: "getHisCustomer", idCard };
const { data, status_code, message } = await request.main(url, params, "POST");
if (status_code == 200 && !message) {
return {
success: true,
list: data?.patients,
patient: data?.patients?.[0],
tmbxx: Array.isArray(data?.tmbxx) ? data?.tmbxx : [],
message: `[his]查询档案:获取his档案成功`,
};
} else {
return {
success: false,
message: message || "获取失败",
};
}
} catch (err) {
return {
success: false,
message: err.message || "获取失败",
};
}
}
/**
*
* @param {buildType} 建档类型 1.自费建档 2.电子凭证建档 3.线下医保建档
* @returns
*/
async function addHisCustomer(item) {
// let { idCard, name, mobile, address, psnToken, buildType = '1', mdtrt_cert_type, mdtrt_cert_no, card_sn } = item;
try {
const name = typeof item.name === 'string' ? item.name.trim() : '';
const idCard = typeof item.idCard === 'string' ? item.idCard.trim() : '';
const mobile = typeof item.mobile === 'string' ? item.mobile.trim() : '';
const address = typeof item.address === 'string' ? item.address.trim() : '';
const psnToken = typeof item.psnToken === 'string' ? item.psnToken.trim() : '';
const mdtrt_cert_no = typeof item.mdtrt_cert_no === 'string' ? item.mdtrt_cert_no.trim() : '';
2026-10-21 10:54:44 +08:00
const ecToken = typeof item.ecToken === 'string' ? item.ecToken.trim() : '';
2026-07-30 16:49:41 +08:00
const card_sn = typeof item.card_sn === 'string' ? item.card_sn.trim() : '';
2026-10-22 15:30:30 +08:00
const birthday = typeof item.birthday === 'string' ? item.birthday.trim() : '';
const sex = typeof item.sex === 'string' ? item.sex.trim() : '';
2026-10-21 10:54:44 +08:00
if (!name || !mobile) {
2026-10-22 15:30:30 +08:00
return { success: false, message: '姓名、手机号不能为空' }
2026-07-30 16:49:41 +08:00
}
const payload = {
type: 'addHisCustomer',
name,
idCard,
mobile,
address,
buildType: '1', // 1.自费建档 2.电子凭证建档 3.线下医保
};
2026-10-22 15:30:30 +08:00
if (!idCard) {
payload.brdy = birthday;
payload.gend = sex === '男' ? 1 : 2
}
2026-07-30 16:49:41 +08:00
// 电子凭证建档 医保插件授权建档
if (psnToken) {
payload.psnToken = psnToken;
payload.buildType = "2";
// payload.mdtrt_cert_type = '01'
2026-10-21 10:54:44 +08:00
} else if (mdtrt_cert_no) {
2026-07-30 16:49:41 +08:00
payload.mdtrt_cert_type = '03';
payload.mdtrt_cert_no = mdtrt_cert_no;
payload.card_sn = card_sn; //就诊凭证类型为“03”时填写社会保障卡内码
2026-10-21 10:54:44 +08:00
} else if (ecToken) {
payload.buildType = '2';
payload.mdtrt_cert_type = '01';
payload.mdtrt_cert_no = ecToken;
2026-07-30 16:49:41 +08:00
}
const { data, status_code, message } = await request.main(
url,
payload,
"POST"
);
if (status_code == 200 && !message) {
return {
success: true,
list: data?.patients,
tmbxx: Array.isArray(data?.tmbxx) ? data?.tmbxx : [],
message: "获取成功",
};
} else {
return {
success: false,
message: message || "获取失败",
};
}
} catch (err) {
return {
success: false,
message: "获取失败",
};
}
}
// 6.外配处方回写
/**
*
* @param {*} param0
* @returns
*/
async function hlwuploadprescription(item) {
try {
2026-09-04 09:57:39 +08:00
const params = { type: "hlwuploadprescription", data: item.data };
2026-07-30 16:49:41 +08:00
const { code, status_code, message } = await request.main(url, params, "POST");
if (status_code == 200 && code == '1') {
return {
success: true,
message: "[his]处方上传成功",
};
} else {
return {
success: false,
message: `[his]处方上传失败: ${message || '未知错误'}`,
};
}
} catch (err) {
return {
success: false,
message: `[his]处方上传错误: ${err.message || '未知错误'}`,
};
}
}
async function ybReviewPrescription(item) {
try {
2026-09-04 09:57:39 +08:00
const params = { type: "rationalDrugReview", data: item.data };
const { status_code, code, data, message } = await request.main(url, params, "POST");
if (status_code == 200 && code == '1') {
2026-07-30 16:49:41 +08:00
return {
success: true,
2026-09-04 09:57:39 +08:00
message: message,
2026-07-30 16:49:41 +08:00
};
} else {
return {
success: false,
2026-09-04 09:57:39 +08:00
message: message || '查询合理用药结果失败',
2026-07-30 16:49:41 +08:00
};
}
} catch (err) {
return {
success: false,
2026-09-04 09:57:39 +08:00
message: `[his]查询合理用药错误: ${err.message || '未知错误'}`,
2026-07-30 16:49:41 +08:00
};
}
}
async function getHisEmployeeInfo(item) {
const { code } = item;
try {
const testUrl = "http://115.239.161.48:8089";
const url = `${testUrl}/his/hlw/employeeinfo`;
const { data, status_code, message } = await request.main(
url,
{ type: "01", code: code },
"POST"
);
if (status_code == 200 && !message) {
return {
success: true,
data,
message: "获取成功",
}
}
} catch (e) {
return { success: false, message: e?.message }
}
}
async function hisTest() {
// const data = {
// patientId: '10428622',
// orderNo: 'R260530160013084765664',
// tradeNo: '3JHR2605301770353161405592',
// outTradeNo: '3JHR260530160352836640789',
// totalAmount: 78
// }
// const data = { "patientid": "30015424", "registerid": "h202501070833145550001", "orderno": "h202501070833145550001", "doctorcode": "10010", "unitcode": "1005000", "visit_time": "2025-12-04 13:15", "area_code": "330602", "hospid": "108", "icds": [{ "icd_code ": "R51.x00", "icd_name": "头痛", "sort": 1 }], "details": [{ "drug_type": "xy", "drug_groupno": "7X", "drug_group": "", "drug_id": "00110", "drug_serial": "01", "drug_name": "富马酸替诺福韦二吡呋酯片", "drug_spec": "300mg×30片/盒", "drug_pric": "329.41", "drug_cnt": "1", "drug_sumamt": "329.41", "supple_code": "1", "supple_name": "口服", "medc_days": "3", "drug_times": "1", "drug_comm": "", "drug_ma": "", "remark": "", "limit_flag": "0", "usage": "11", "usage_name": "每天一次(qd)", "sin_doscnt": "2.00", "sin_dosunt": "片", "unit": "盒" }] }
// return await syncHisChargeStatus(data);
2026-09-04 09:57:39 +08:00
}
async function updateHisDrug({ data: drugArr }) {
try {
const params = { type: "updateOnlineDrug", data: drugArr };
const { data, status_code, message } = await request.main(url, params, "POST");
if (status_code == 200 && !message) {
return {
success: true,
message: `同步his药品成功`,
};
} else {
return {
success: false,
message: message || "同步his药品失败",
};
}
} catch (err) {
return {
success: false,
message: err.message || "同步his药品错误",
};
}
2026-09-24 18:22:05 +08:00
}
async function cancelInsuranceRx(item) {
const patientId = typeof item.patientId === "string" ? item.patientId.trim() : "";
const orderno = typeof item.orderno === "string" ? item.orderno.trim() : "";
if (!patientId || !orderno) {
return { success: false, message: "医保处方缺少患者编号或处方编号" };
}
try {
const params = { type: "hlwPrescriptionOrderCancel", patientId, orderno };
const { code, status_code, message } = await request.main(url, params, "POST");
if (status_code == 200 && code == "1") {
return {
success: true,
message: `处方撤销成功`,
};
} else {
return {
success: false,
message: message || "处方撤销失败",
};
}
} catch (err) {
return {
success: false,
message: err.message || "处方撤销错误",
};
}
}