patientModel = $patientModel; $this->callRecordModel = $callRecord; } public function getMpiModel($idCard) { $mpiIdCard = Gm::encrypt(Config::get('gm.key'),$idCard); $mpiModel = $this->patientModel->getMpi($mpiIdCard); if($mpiModel) { return $mpiModel; } $mpiKey = Handle::makeMpiKey($idCard); $mpi = Handle::makeMpi(); $this->patientModel->saveMpi($mpi, $idCard, $mpiKey); return [ 'MPI' => $mpi, 'ID_CARDNUM' => $idCard, 'MPI_KEY' => $mpiKey ]; } public function handlePATIENT($data, $MEDICAL_INFORMATION) { // 姓名 // 证件类型 // 证件号码 // 性别 // 出生日期 $NAME = $data['NAME']; $ID_CARD_CODE = $data['ID_CARD_CODE']; $ID_CARDNUM = $data['ID_CARDNUM']; $GENDER_CODE = $data['GENDER_CODE']; $BIRTH_DATE = $data['BIRTH_DATE']; $ID_CARD = $this->getID_CARDByCode($ID_CARD_CODE); $GENDER = $this->getGENDERByCode($GENDER_CODE); $MPI_MODEL = $this->getMpiModel($ID_CARDNUM); $MPI_KEY = $MPI_MODEL['MPI_KEY']; $MPI = $MPI_MODEL['MPI']; $PATIENT_CODE = $this->getPATIENT_CODE($MPI_KEY, $MEDICAL_INFORMATION['ORGCODE'], $MEDICAL_INFORMATION['SERIESNUM']); $PATIENT = [ 'NAME' => $NAME, 'PATIENT_CODE' => $PATIENT_CODE, 'ID_CARD_CODE' => $ID_CARD_CODE, 'ID_CARD' => $ID_CARD, 'ID_CARDNUM' => $ID_CARDNUM, 'GENDER_CODE' => $GENDER_CODE, 'GENDER' => $GENDER, 'BIRTH_DATE' => $BIRTH_DATE, 'MPI_KEY' => $MPI_KEY, 'MPI' => $MPI, 'create_time' => $MEDICAL_INFORMATION['ENCOUNTER_DATE'], 'PHONE' => $data['PHONE'], ]; return $PATIENT; } public function handleMEDICAL_INFORMATION($data, $PATIENT) { // 就诊类型 // 就诊卡号 // 就诊号 // 医院主索引 // 就诊时间 // 就诊科室名称 // 主诉 // 年龄 // 机构编码 // 机构名称 // 诊断编码 // 诊断名称 // 接诊医生名称 // 接诊医生编号 $CLASS_CODE = $data['CLASS_CODE']; $ENCOUNTER_CARD_NO = $data['ENCOUNTER_CARD_NO']; $SERIESNUM = $data['SERIESNUM']; $HOS_EMPI = $data['HOS_EMPI'] ?? ''; $ENCOUNTER_DATE = $data['ENCOUNTER_DATE']; $DEPTNAME = $data['DEPTNAME']; $CHIEFCOMPLAINT = $data['CHIEFCOMPLAINT']; $AGE = $data['AGE']; $ORGCODE = $data['ORGCODE']; $ORGNAME = $data['ORGNAME']; $DIAGNOSECODE = $data['DIAGNOSECODE']; $DIAGNOSENAME = $data['DIAGNOSENAME']; $DOCTORNAME = $data['DOCTORNAME']; $DOCTORCODE = $data['DOCTORCODE']; $PATIENT_CODE = $PATIENT['PATIENT_CODE']; $CLASS = $this->getCLASSByCode($CLASS_CODE); $NAME = $PATIENT['NAME']; $GENDER = $PATIENT['GENDER']; $GENDER_CODE = $PATIENT['GENDER_CODE']; $MPI = $PATIENT['MPI']; $MPI_KEY = $PATIENT['MPI_KEY']; $CALL_FLAG = $this->getCALL_FLAG($DOCTORNAME, $ORGNAME, $MPI_KEY); $MEDICAL_INFORMATION = [ 'PATIENT_CODE' => $PATIENT_CODE, 'CLASS_CODE' => $CLASS_CODE, 'ENCOUNTER_CARD_NO' => $ENCOUNTER_CARD_NO, 'SERIESNUM' => $SERIESNUM, 'HOS_EMPI' => $HOS_EMPI, 'ENCOUNTER_DATE' => $ENCOUNTER_DATE, 'DEPTNAME' => $DEPTNAME, 'CHIEFCOMPLAINT' => $CHIEFCOMPLAINT, 'AGE' => $AGE, 'ORGCODE' => $ORGCODE, 'ORGNAME' => $ORGNAME, 'DIAGNOSECODE' => $DIAGNOSECODE, 'DIAGNOSENAME' => $DIAGNOSENAME, 'CLASS' => $CLASS, 'NAME' => $NAME, 'GENDER' => $GENDER, 'GENDER_CODE' => $GENDER_CODE, 'MPI' => $MPI, 'MPI_KEY' => $MPI_KEY, 'DOCTORNAME' => $DOCTORNAME, 'DOCTORCODE' => $DOCTORCODE, 'CALL_FLAG' => $CALL_FLAG, ]; return $MEDICAL_INFORMATION; } public function getCALL_FLAG($DOCTORCODE, $ORGNAME, $MPI_KEY) { // $res = $this->callRecordModel->field('ID') // ->where('DOCTORCODE', '=', $DOCTORCODE) // ->where('ORGNAME', '=', $ORGNAME) // ->where('MPI_KEY', '=', $MPI_KEY) // ->find(); // if($res) { // return 1; // } // return 0; return rand(0, 1); } public function handleEXAM($data, $MEDICAL_INFORMATION) { $EXAM_APPLICATIONS = array(); $EXAM_REPORTS = array(); $MPI = $MEDICAL_INFORMATION['MPI']; $MPI_KEY = $MEDICAL_INFORMATION['MPI_KEY']; $PATIENT_CODE = $MEDICAL_INFORMATION['PATIENT_CODE']; $NAME = $MEDICAL_INFORMATION['NAME']; $SERIESNUM = $MEDICAL_INFORMATION['SERIESNUM']; $GENDER = $MEDICAL_INFORMATION['GENDER']; $GENDER_CODE = $MEDICAL_INFORMATION['GENDER_CODE']; $AGE = $MEDICAL_INFORMATION['AGE']; // foreach($datas as $data) { // 申请单编号/医嘱编号 // 报告单编号 // 检查类型 // 检查项目名称 // 检查项目编码 // 检查部位 // 检查所见/影像所见 // 影像诊断/意见 // 检查结果类别 // 互认范围 // 互认项目编码 // 报告机构 // 报告机构编码 // 报告科室名称 // 报告医生姓名 // 审核医师姓名 // 报告时间 // 检查时间 // 报告单内容 // 互认项目 // REQUESTID // REPORTID // DEVICETYPE_CODE // EXAM_ITEMNAME // EXAM_ITEMNAME_CODE // BODYSITE // OBSERVATIONS_COMMENT // OBSERVATIONS_RESULT // RESULT_STATUS_CODE // HR_RANGE // HR_ITEMNAME_CODE // ORGNAME // ORGCODE // DEPTNAME // PRACTITIONERNAME // AUDITNAME // REPORTTIME // STUDYTIME // REPORT // HR_ITEMNAME $REQUESTID = $data['REQUESTID']; $REPORTID = $data['REPORTID']; $DEVICETYPE_CODE = $data['DEVICETYPE_CODE']; $EXAM_ITEMNAME = $data['EXAM_ITEMNAME']; $EXAM_ITEMNAME_CODE = $data['EXAM_ITEMNAME_CODE']; $BODYSITE = $data['BODYSITE']; // $OBSERVATIONS_COMMENT = $data['OBSERVATIONS_COMMENT']; // $OBSERVATIONS_RESULT = $data['OBSERVATIONS_RESULT']; // $RESULT_STATUS_CODE = $data['RESULT_STATUS_CODE']; // $HR_RANGE = $data['HR_RANGE']; $HR_ITEMNAME_CODE = $data['HR_ITEMNAME_CODE']; $ORGNAME = $MEDICAL_INFORMATION['ORGNAME']; $ORGCODE = $MEDICAL_INFORMATION['ORGCODE']; $DEPTNAME = $MEDICAL_INFORMATION['DEPTNAME']; // $PRACTITIONERNAME = $data['PRACTITIONERNAME']; // $AUDITNAME = $data['AUDITNAME']; // $REPORTTIME = $data['REPORTTIME']; $STUDYTIME = $data['STUDYTIME']; // $REPORT = $data['REPORT']; $HR_ITEMNAME = $data['HR_ITEMNAME']; $RECOG_STATUS = ''; if(!empty($HR_ITEMNAME_CODE) && $HR_ITEMNAME_CODE !='-') { $DICT_DATA = $this->patientModel->getExamDict(['XM_CODE'=>$HR_ITEMNAME_CODE],'XM'); if($DICT_DATA['XM'] == $HR_ITEMNAME) { $RECOG_STATUS = '*'; } } // $RECOG_STATUS = $data['RECOG_STATUS']; $EXAM_APPLICATION_CODE = $this->getEXAM_APPLICATION_CODE($PATIENT_CODE, $REQUESTID); $EXAM_REPORT_CODE = $this->getEXAM_REPORT_CODE($PATIENT_CODE, $REPORTID); // $RESULT_STATUS = $this->getRESULT_STATUSByCode($RESULT_STATUS_CODE); $DEVICETYPE = $this->getDEVICETYPEByCode($DEVICETYPE_CODE); // $RECOG_STATUS = $this->getRECOG_STATUS($RECOG_STATUS_CODE); // $EXAM_APPLICATION = []; $EXAM_REPORT = [ 'MPI' => $MPI, 'MPI_KEY' => $MPI_KEY, 'PATIENT_CODE' => $PATIENT_CODE, 'NAME' => $NAME, 'SERIESNUM' => $SERIESNUM, 'GENDER' => $GENDER, 'GENDER_CODE' => $GENDER_CODE, 'AGE' => $AGE, 'REQUESTID' => $REQUESTID, 'REPORTID' => $REPORTID, 'DEVICETYPE_CODE' => $DEVICETYPE_CODE, 'EXAM_ITEMNAME' => $EXAM_ITEMNAME, 'EXAM_ITEMNAME_CODE' => $EXAM_ITEMNAME_CODE, 'BODYSITE' => $BODYSITE, // 'OBSERVATIONS_COMMENT' => $OBSERVATIONS_COMMENT, // 'OBSERVATIONS_RESULT' => $OBSERVATIONS_RESULT, // 'RESULT_STATUS_CODE' => $RESULT_STATUS_CODE, // 'HR_RANGE' => $HR_RANGE, 'HR_ITEMNAME_CODE' => $HR_ITEMNAME_CODE, 'ORGNAME' => $ORGNAME, 'ORGCODE' => $ORGCODE, 'DEPTNAME' => $DEPTNAME, // 'PRACTITIONERNAME' => $PRACTITIONERNAME, // 'AUDITNAME' => $AUDITNAME, // 'REPORTTIME' => $REPORTTIME, 'STUDYTIME' => $STUDYTIME, // 'REPORT' => $REPORT, 'EXAM_APPLICATION_CODE' => $EXAM_APPLICATION_CODE, 'EXAM_REPORT_CODE' => $EXAM_REPORT_CODE, // 'RESULT_STATUS' => $RESULT_STATUS, 'DEVICETYPE' => $DEVICETYPE, 'HR_ITEMNAME' => $HR_ITEMNAME, 'DOCTORNAME' => $MEDICAL_INFORMATION['DOCTORNAME'], 'DOCTORCODE' => $MEDICAL_INFORMATION['DOCTORCODE'], 'CALL_FLAG' => $MEDICAL_INFORMATION['CALL_FLAG'], 'RECOG_STATUS' => $RECOG_STATUS, // todo 'create_time' => date('Y-m-d H:i:s') ]; // $EXAM_APPLICATIONS[] = $EXAM_APPLICATION; $EXAM_REPORTS[] = $EXAM_REPORT; // } return [ // 'EXAM_APPLICATIONS' => $EXAM_APPLICATIONS, 'EXAM_REPORTS' => $EXAM_REPORTS, ]; } public function handleINSPECT_REPORTS($params, $MEDICAL_INFORMATION) { $data = $params['INSPECT_REPORTS']; $INSPECT_REPORTS = array(); $INSPECT_REPORT_ITEMS = array(); $MPI = $MEDICAL_INFORMATION['MPI']; $MPI_KEY = $MEDICAL_INFORMATION['MPI_KEY']; $PATIENT_CODE = $MEDICAL_INFORMATION['PATIENT_CODE']; $NAME = $MEDICAL_INFORMATION['NAME']; $SERIESNUM = $MEDICAL_INFORMATION['SERIESNUM']; $GENDER = $MEDICAL_INFORMATION['GENDER']; $GENDER_CODE = $MEDICAL_INFORMATION['GENDER_CODE']; $AGE = $MEDICAL_INFORMATION['AGE']; // 报告单编号 // 标本类别 // 检验项目名称 // 检测项目类型 // 报告医生姓名 // 审核医师姓名 // 报告机构 // 报告机构编码 // 报告科室名称 // 报告评语 // 报告时间 // 报告单 // 互认项目编码 // 互认范围 // 互认项目 // REPORTID // SPECIMEN_TYPE // LAB_ITEMNAME // LAB_ITEMNAME_TYPE_CODE // PRACTITIONERNAME // AUDITNAME // ORGNAME // ORGCODE // DEPTNAME // REPORT_COMMENT // REPORTTIME // REPORT // LAB_HR_ITEMNAME_CODE // HR_RANGE // LAB_HR_ITEMNAME // foreach($datas as $data) { $REPORTID = $data['REPORTID']; $SPECIMEN_TYPE = $data['SPECIMEN_TYPE']; $LAB_ITEMNAME = $data['LAB_ITEMNAME']; $LAB_ITEMNAME_TYPE_CODE = $data['LAB_ITEMNAME_TYPE_CODE']; $PRACTITIONERNAME = $data['PRACTITIONERNAME']; $AUDITNAME = $data['AUDITNAME']; $ORGNAME = $MEDICAL_INFORMATION['ORGNAME']; $ORGCODE = $MEDICAL_INFORMATION['ORGCODE']; $DEPTNAME = $MEDICAL_INFORMATION['DEPTNAME']; $REPORT_COMMENT = $data['REPORT_COMMENT']; $REPORTTIME = $data['REPORTTIME']; $REPORT = $data['REPORT']; $LAB_HR_ITEMNAME_CODE = $data['LAB_HR_ITEMNAME_CODE']; $LAB_HR_ITEMNAME = $data['LAB_HR_ITEMNAME']; $RECOG_STATUS = ''; $itemLabDict = $this->patientModel->getItemLab(['BSYBBM'=>$LAB_HR_ITEMNAME_CODE],'ITEMTYPE,XMMC'); if($LAB_HR_ITEMNAME_CODE != '-' && !empty($LAB_HR_ITEMNAME_CODE)) { if(($itemLabDict['XMMC'] ?? '') == $LAB_HR_ITEMNAME) { $RECOG_STATUS = '*'; } } $itemType = $itemLabDict['ITEMTYPE'] ?? ''; // $HR_RANGE = $data['HR_RANGE']; // $SPECIMEN_TYPE = $this->getSPECIMEN_TYPEByCode($SPECIMEN_TYPE_CODE); $LAB_ITEMNAME_TYPE = $this->getLAB_ITEMNAME_TYPEByCode($LAB_ITEMNAME_TYPE_CODE); $INSPECT_REPORT_CODE = $this->getINSPECT_REPORT_CODE($PATIENT_CODE, $REPORTID); // $RECOG_STATUS = $data['RECOG_STATUS']; // $RECOG_STATUS_CODE = $data['RECOG_STATUS_CODE']; // $RECOG_STATUS = $this->getRECOG_STATUS($RECOG_STATUS_CODE); $INSPECT_REPORT = [ 'MPI' => $MPI, 'MPI_KEY' => $MPI_KEY, 'PATIENT_CODE' => $PATIENT_CODE, 'NAME' => $NAME, 'SERIESNUM' => $SERIESNUM, 'GENDER' => $GENDER, 'GENDER_CODE' => $GENDER_CODE, 'AGE' => $AGE, 'REPORTID' => $REPORTID, // 'SPECIMEN_TYPE_CODE' => $SPECIMEN_TYPE_CODE, 'LAB_ITEMNAME' => $LAB_ITEMNAME, 'LAB_ITEMNAME_TYPE_CODE' => $LAB_ITEMNAME_TYPE_CODE, 'LAB_ITEMNAME_TYPE' => $LAB_ITEMNAME_TYPE, 'PRACTITIONERNAME' => $PRACTITIONERNAME, 'AUDITNAME' => $AUDITNAME, 'ORGNAME' => $ORGNAME, 'ORGCODE' => $ORGCODE, 'DEPTNAME' => $DEPTNAME, 'REPORT_COMMENT' => $REPORT_COMMENT, 'REPORTTIME' => $REPORTTIME, 'REPORT' => $REPORT, 'LAB_HR_ITEMNAME_CODE' => $LAB_HR_ITEMNAME_CODE, 'ITEMTYPE'=>$itemType, // 'HR_RANGE' => $HR_RANGE, 'LAB_HR_ITEMNAME' => $LAB_HR_ITEMNAME, 'SPECIMEN_TYPE' => $SPECIMEN_TYPE, 'INSPECT_REPORT_CODE' => $INSPECT_REPORT_CODE, // 'RECOG_STATUS_CODE' => $RECOG_STATUS_CODE, 'RECOG_STATUS' => $RECOG_STATUS, 'DOCTORNAME' => $MEDICAL_INFORMATION['DOCTORNAME'], 'DOCTORCODE' => $MEDICAL_INFORMATION['DOCTORCODE'], 'CALL_FLAG' => $MEDICAL_INFORMATION['CALL_FLAG'], // TODO 'create_time' => $REPORTTIME, ]; $this->handleINSPECT_REPORT_ITEMS($INSPECT_REPORT_ITEMS, $params['INSPECT_REPORT_ITEMS'],[ 'REPORTID' => $REPORTID, 'INSPECT_REPORT_CODE' => $INSPECT_REPORT_CODE, 'ORGCODE' => $ORGCODE, ]); $INSPECT_REPORTS[] = $INSPECT_REPORT; // } return [ 'INSPECT_REPORT_ITEMS' => $INSPECT_REPORT_ITEMS, 'INSPECT_REPORTS' => $INSPECT_REPORTS, ]; } public function handleINSPECT_REPORT_ITEMS(&$INSPECT_REPORT_ITEMS, $datas, $INSPECT_REPORT): void { // 检验细项名称/抗生素 // 检验细项缩写/英文 // *检验细项序号(1-2) // 检验细项测量值(1) // 检验细项结果计量单位(1) // 检验细项结果/微生物鉴定结果 // 药敏结果(2) // 参考值范围(1) // 检测方法(1) // KB*(2) // MIC*(2) // 敏感度(2) // 互认项目编码(1-2) // 互认范围(1-2) // 互认标识(1-2) // 互认项目 // LAB_ITEMDETAILNAME // LAB_ITEMDETAILNAME_EN // LAB_ITEMDETAILNAME_NUMBER // LAB_ITEMDETAILVALUE // LAB_ITEMDETAILSPEC // LAB_ITEMDETAILINTERPRETATION // LAB_ITEMDETAILINTERPRETATION_BIA // LAB_ITEMDETAILRANGE // LAB_METHOD // KB // MIC // LAB_ITEMDETAILINTERPRE // LAB_HR_ITEMDETAILNAME_CODE // HR_RANGE // RECOG_STATUS // LAB_HR_ITEMDETAILNAME $INSPECT_REPORT_CODE = $INSPECT_REPORT['INSPECT_REPORT_CODE']; $REPORTID = $INSPECT_REPORT['REPORTID']; $ORGCODE = $INSPECT_REPORT['ORGCODE']; foreach($datas as $data) { $LAB_ITEMDETAILNAME = $data['LAB_ITEMDETAILNAME']; $LAB_ITEMDETAILNAME_EN = $data['LAB_ITEMDETAILNAME_EN']; $LAB_ITEMDETAILNAME_NUMBER = $data['LAB_ITEMDETAILNAME_NUMBER']; $LAB_ITEMDETAILVALUE = $data['LAB_ITEMDETAILVALUE']; $LAB_ITEMDETAILSPEC = $data['LAB_ITEMDETAILSPEC']; $LAB_ITEMDETAILINTERPRETATION = $data['LAB_ITEMDETAILINTERPRETATION']; $LAB_ITEMDETAILINTERPRETATION_BIA = $data['LAB_ITEMDETAILINTERPRETATION_BIA'] ?? ''; $LAB_ITEMDETAILRANGE = $data['LAB_ITEMDETAILRANGE']; $LAB_METHOD = $data['LAB_METHOD']; $KB = $data['KB']; $MIC = $data['MIC']; $LAB_ITEMDETAILINTERPRE = $data['LAB_ITEMDETAILINTERPRE']; $LAB_HR_ITEMDETAILNAME_CODE = $data['LAB_HR_ITEMDETAILNAME_CODE']; // $HR_RANGE = $data['HR_RANGE']; // $RECOG_STATUS = $data['RECOG_STATUS']; $LAB_HR_ITEMDETAILNAME = $data['LAB_HR_ITEMDETAILNAME']; $RECOG_STATUS = ''; if(!empty($LAB_HR_ITEMDETAILNAME_CODE) && $LAB_HR_ITEMDETAILNAME_CODE != '-') { $DICT_DATA = $this->patientModel->getItemLab(['BSYBBM'=>$LAB_HR_ITEMDETAILNAME_CODE],'XMMC'); if(($DICT_DATA['XMMC'] ?? '') == $LAB_HR_ITEMDETAILNAME) { $RECOG_STATUS = '*'; } } $INSPECT_REPORT_ITEM = [ 'REPORTID' => $REPORTID, 'INSPECT_REPORT_CODE' => $INSPECT_REPORT_CODE, 'ORGCODE' => $ORGCODE, 'LAB_ITEMDETAILNAME' => $LAB_ITEMDETAILNAME, 'LAB_ITEMDETAILNAME_EN' => $LAB_ITEMDETAILNAME_EN, 'LAB_ITEMDETAILNAME_NUMBER' => $LAB_ITEMDETAILNAME_NUMBER, 'LAB_ITEMDETAILVALUE' => $LAB_ITEMDETAILVALUE, 'LAB_ITEMDETAILSPEC' => $LAB_ITEMDETAILSPEC, 'LAB_ITEMDETAILINTERPRETATION' => $LAB_ITEMDETAILINTERPRETATION, 'LAB_ITEMDETAILINTERPRETATION_BIA' => $LAB_ITEMDETAILINTERPRETATION_BIA, 'LAB_ITEMDETAILRANGE' => $LAB_ITEMDETAILRANGE, 'LAB_METHOD' => $LAB_METHOD, 'KB' => $KB, 'MIC' => $MIC, 'LAB_ITEMDETAILINTERPRE' => $LAB_ITEMDETAILINTERPRE, 'LAB_HR_ITEMDETAILNAME_CODE' => $LAB_HR_ITEMDETAILNAME_CODE, // 'HR_RANGE' => $HR_RANGE, 'RECOG_STATUS' => $RECOG_STATUS, 'LAB_HR_ITEMDETAILNAME' => $LAB_HR_ITEMDETAILNAME, ]; $INSPECT_REPORT_ITEMS[] = $INSPECT_REPORT_ITEM; } } public function getINSPECT_REPORT_CODE($PATIENT_CODE, $REPORTID): string { return md5($PATIENT_CODE.$REPORTID); } public function getEXAM_APPLICATION_CODE($PATIENT_CODE, $EXAM_REQUESTID): string { return md5($PATIENT_CODE.$EXAM_REQUESTID); } public function getEXAM_REPORT_CODE($PATIENT_CODE, $REPORTID): string { return md5($PATIENT_CODE.$REPORTID); } public function getPATIENT_CODE($MPI_KEY, $ORGCODE, $SERIESNUM): string { return md5($MPI_KEY.$ORGCODE.$SERIESNUM); } public function getID_CARDByCode($code) { return $this->patientModel->getDictNameByCode($code, '3'); } public function getGENDERByCode($code) { return $this->patientModel->getDictNameByCode($code, '1'); } public function getCLASSByCode($code) { return $this->patientModel->getDictNameByCode($code, '5'); } public function getRESULT_STATUSByCode($code) { return $this->patientModel->getDictNameByCode($code, '11'); } public function getDEVICETYPEByCode($code) { return $this->patientModel->getDictNameByCode($code, '10'); } public function getLAB_ITEMNAME_TYPEByCode($code) { return $this->patientModel->getDictNameByCode($code, '12'); } }