277 lines
8.6 KiB
JavaScript
277 lines
8.6 KiB
JavaScript
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 || "处方撤销错误",
|
||
};
|
||
}
|
||
}
|