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 || "处方撤销错误", }; } }