2026-10-22 15:30:30 +08:00

277 lines
8.6 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 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);
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);
case "cancelInsuranceRx":
return await cancelInsuranceRx(item);
}
};
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() : '';
const ecToken = typeof item.ecToken === 'string' ? item.ecToken.trim() : '';
const card_sn = typeof item.card_sn === 'string' ? item.card_sn.trim() : '';
const birthday = typeof item.birthday === 'string' ? item.birthday.trim() : '';
const sex = typeof item.sex === 'string' ? item.sex.trim() : '';
if (!name || !mobile) {
return { success: false, message: '姓名、手机号不能为空' }
}
const payload = {
type: 'addHisCustomer',
name,
idCard,
mobile,
address,
buildType: '1', // 1.自费建档 2.电子凭证建档 3.线下医保
};
if (!idCard) {
payload.brdy = birthday;
payload.gend = sex === '男' ? 1 : 2
}
// 电子凭证建档 医保插件授权建档
if (psnToken) {
payload.psnToken = psnToken;
payload.buildType = "2";
// payload.mdtrt_cert_type = '01'
} else if (mdtrt_cert_no) {
payload.mdtrt_cert_type = '03';
payload.mdtrt_cert_no = mdtrt_cert_no;
payload.card_sn = card_sn; //就诊凭证类型为“03”时填写社会保障卡内码
} else if (ecToken) {
payload.buildType = '2';
payload.mdtrt_cert_type = '01';
payload.mdtrt_cert_no = ecToken;
}
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 {
const params = { type: "hlwuploadprescription", data: item.data };
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 {
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') {
return {
success: true,
message: message,
};
} else {
return {
success: false,
message: message || '查询合理用药结果失败',
};
}
} catch (err) {
return {
success: false,
message: `[his]查询合理用药错误: ${err.message || '未知错误'}`,
};
}
}
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);
}
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药品错误",
};
}
}
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 || "处方撤销错误",
};
}
}