Browse Source

代码迁移

chengyao 4 years ago
parent
commit
08a72ee962

+ 37 - 4
doc/031.20210326v2.0.2/qc_initv2.0.2.sql

@@ -25,6 +25,7 @@ CREATE TABLE `qc_cases_relevance_entry` (
   PRIMARY KEY (`id`)
 ) ENGINE=InnoDB AUTO_INCREMENT=60 DEFAULT CHARSET=utf8 COMMENT='质控关联条目表';
 
+-- ----------------------------
 
 /**
 编码添加
@@ -38,6 +39,11 @@ INSERT INTO `qc_cases_entry` (`id`, `cases_id`, `cases_name`, `mode_id`, `code`,
 INSERT INTO `qc_cases_entry` (`id`, `cases_id`, `cases_name`, `mode_id`, `code`, `name`, `drgs`, `type`, `rule_type`, `dev_type`, `accuracy_type`, `precond`, `order_no`, `remark`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`) VALUES ('3112', '241', '三级查房制度', '4', 'THR03112', '医嘱存在MR,报告单未记录', '2', '1', '0', '1', '3', '', NULL, '', 'N', '2021-04-28 11:16:28', '2021-04-28 11:16:28', '0', '医学人员');
 INSERT INTO `qc_cases_entry` (`id`, `cases_id`, `cases_name`, `mode_id`, `code`, `name`, `drgs`, `type`, `rule_type`, `dev_type`, `accuracy_type`, `precond`, `order_no`, `remark`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`) VALUES ('3111', '248', '围手术期病历讨论', '17', 'OPE03111', '手术病理检查存在手术记录中无病理相关记录', '1', '1', '0', '1', '2', '', NULL, '', 'N', '2021-04-19 11:57:52', '2021-04-19 11:57:52', '0', '医学人员');
 INSERT INTO `qc_cases_entry` (`id`, `cases_id`, `cases_name`, `mode_id`, `code`, `name`, `drgs`, `type`, `rule_type`, `dev_type`, `accuracy_type`, `precond`, `order_no`, `remark`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`) VALUES ('3110', '243', '病案首页', '6', 'FIRP03110', '病案首页未在患者出院院24小时内完成', '1', '1', '0', '1', '1', '', NULL, '', 'N', '2021-04-19 11:57:14', '2021-04-19 11:57:14', '0', '医学人员');
+INSERT INTO `qc_cases_entry` (`id`, `cases_id`, `cases_name`, `mode_id`, `code`, `name`, `drgs`, `type`, `rule_type`, `dev_type`, `accuracy_type`, `precond`, `order_no`, `remark`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`) VALUES ('3118', '283', '病历书写规范', '53', 'MEDI03118', '知情同意书无患方签名或患方签名未授权', '2', '1', '1', '1', '3', '', NULL, '', 'N', '2021-05-18 21:58:57', '2021-05-18 21:58:57', '0', '医学人员');
+INSERT INTO `qc_cases_entry` (`id`, `cases_id`, `cases_name`, `mode_id`, `code`, `name`, `drgs`, `type`, `rule_type`, `dev_type`, `accuracy_type`, `precond`, `order_no`, `remark`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`) VALUES ('3119', '248', '围手术期病历讨论', '17', 'OPE03119', '使用植入物但手术记录或病程记录未记录相关信息', '2', '1', '1', '1', '3', '', NULL, '', 'N', '2021-05-18 22:21:40', '2021-05-18 22:21:40', '0', '医学人员');
+INSERT INTO `qc_cases_entry` (`id`, `cases_id`, `cases_name`, `mode_id`, `code`, `name`, `drgs`, `type`, `rule_type`, `dev_type`, `accuracy_type`, `precond`, `order_no`, `remark`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`) VALUES ('3120', '241', '三级查房制度', '4', 'THR03120', '病程记录未记录恶性肿瘤放射治疗相关信息', '2', '1', '0', '1', '3', '', NULL, '', 'N', '2021-05-12 16:50:11', '2021-05-12 16:50:11', '0', '邵启华');
+
+
 
 /**
 qc_cases_entry_hospital、qc_type_cases_entry 分值确定添加
@@ -54,6 +60,12 @@ INSERT INTO `qc_cases_entry_hospital` ( `is_deleted`, `gmt_create`, `gmt_modifie
 INSERT INTO `qc_cases_entry_hospital` ( `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `cases_entry_id`, `hospital_id`, `score`, `score_run`, `msg`, `is_used`, `is_used_run`, `is_reject`, `remark`) VALUES ( 'N', '2021-04-19 11:57:52', '2021-04-19 11:57:52', '0', '医学人员', '3111', @id, '1.0', '1.0', '手术病理检查存在手术记录中无病理相关记录', '1', '0', '0', '');
 INSERT INTO `qc_cases_entry_hospital` ( `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `cases_entry_id`, `hospital_id`, `score`, `score_run`, `msg`, `is_used`, `is_used_run`, `is_reject`, `remark`) VALUES ( 'N', '2021-04-19 11:57:14', '2021-04-19 11:57:14', '0', '医学人员', '3110', @id, '1.0', '1.0', '病案首页未在患者出院院24小时内完成', '1', '0', '0', '');
 
+INSERT INTO `qc_cases_entry_hospital` ( `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `cases_entry_id`, `hospital_id`, `score`, `score_run`, `msg`, `is_used`, `is_used_run`, `is_reject`, `remark`) VALUES ( 'N', '2021-05-18 21:58:57', '2021-05-18 21:58:57', '0', '医学人员', '3118', @id,  '0.0', '0.0', '知情同意书无患方签名或患方签名未授权', '1', '0', '0', '');
+INSERT INTO `qc_cases_entry_hospital` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `cases_entry_id`, `hospital_id`, `score`, `score_run`, `msg`, `is_used`, `is_used_run`, `is_reject`, `remark`) VALUES ( 'N', '2021-05-18 22:21:40', '2021-05-18 22:21:40', '0', '医学人员', '3119', @id,  '0.0', '0.0', '使用植入物但手术记录或病程记录未记录相关信息', '1', '0', '0', '');
+INSERT INTO `qc_cases_entry_hospital` ( `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `cases_entry_id`, `hospital_id`, `score`, `score_run`, `msg`, `is_used`, `is_used_run`, `is_reject`, `remark`) VALUES ( 'N', '2021-05-12 16:50:11', '2021-05-12 16:50:11', '0', '邵启华', '3120', @id,  '0.0', '0.0', '病程记录未记录恶性肿瘤放射治疗相关信息', '1', '0', '0', '');
+
+
+
 INSERT INTO `qc_type_cases_entry` ( `type_id`, `case_entry_id`, `remark`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`) VALUES ( '65', '3117', NULL, 'N', '2021-04-19 12:47:51', '2021-04-19 12:47:51', '99', '99');
 INSERT INTO `qc_type_cases_entry` ( `type_id`, `case_entry_id`, `remark`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`) VALUES ( '74', '3117', NULL, 'N', '2021-04-19 12:47:51', '2021-04-19 12:47:51', '99', '99');
 INSERT INTO `qc_type_cases_entry` ( `type_id`, `case_entry_id`, `remark`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`) VALUES ( '66', '3117', NULL, 'N', '2021-04-19 12:47:51', '2021-04-19 12:47:51', '99', '99');
@@ -108,6 +120,26 @@ INSERT INTO `qc_type_cases_entry` ( `type_id`, `case_entry_id`, `remark`, `is_de
 INSERT INTO `qc_type_cases_entry` ( `type_id`, `case_entry_id`, `remark`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`) VALUES ( '66', '3107', NULL, 'N', '2021-04-19 11:58:03', '2021-04-19 11:58:03', '98', '98');
 INSERT INTO `qc_type_cases_entry` ( `type_id`, `case_entry_id`, `remark`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`) VALUES ( '74', '3107', NULL, 'N', '2021-04-19 11:58:03', '2021-04-19 11:58:03', '98', '98');
 INSERT INTO `qc_type_cases_entry` ( `type_id`, `case_entry_id`, `remark`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`) VALUES ( '80', '3107', NULL, 'N', '2021-04-19 11:58:03', '2021-04-19 11:58:03', '98', '98');
+INSERT INTO `qc_type_cases_entry` ( `type_id`, `case_entry_id`, `remark`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`) VALUES ( '65', '3120', NULL, 'N', '2021-04-19 12:47:51', '2021-04-19 12:47:51', '99', '99');
+INSERT INTO `qc_type_cases_entry` ( `type_id`, `case_entry_id`, `remark`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`) VALUES ( '74', '3120', NULL, 'N', '2021-04-19 12:47:51', '2021-04-19 12:47:51', '99', '99');
+INSERT INTO `qc_type_cases_entry` ( `type_id`, `case_entry_id`, `remark`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`) VALUES ( '66', '3120', NULL, 'N', '2021-04-19 12:47:51', '2021-04-19 12:47:51', '99', '99');
+INSERT INTO `qc_type_cases_entry` ( `type_id`, `case_entry_id`, `remark`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`) VALUES ( '80', '3120', NULL, 'N', '2021-04-19 12:47:51', '2021-04-19 12:47:51', '99', '99');
+INSERT INTO `qc_type_cases_entry` ( `type_id`, `case_entry_id`, `remark`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`) VALUES ( '109', '3120', NULL, 'N', '2021-04-19 12:47:51', '2021-04-19 12:47:51', '99', '99');
+INSERT INTO `qc_type_cases_entry` ( `type_id`, `case_entry_id`, `remark`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`) VALUES ( '110', '3120', NULL, 'N', '2021-04-19 12:47:51', '2021-04-19 12:47:51', '99', '99');
+
+INSERT INTO `qc_type_cases_entry` ( `type_id`, `case_entry_id`, `remark`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`) VALUES ( '65', '3118', NULL, 'N', '2021-04-19 12:47:51', '2021-04-19 12:47:51', '99', '99');
+INSERT INTO `qc_type_cases_entry` ( `type_id`, `case_entry_id`, `remark`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`) VALUES ( '74', '3118', NULL, 'N', '2021-04-19 12:47:51', '2021-04-19 12:47:51', '99', '99');
+INSERT INTO `qc_type_cases_entry` ( `type_id`, `case_entry_id`, `remark`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`) VALUES ( '66', '3118', NULL, 'N', '2021-04-19 12:47:51', '2021-04-19 12:47:51', '99', '99');
+INSERT INTO `qc_type_cases_entry` ( `type_id`, `case_entry_id`, `remark`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`) VALUES ( '80', '3118', NULL, 'N', '2021-04-19 12:47:51', '2021-04-19 12:47:51', '99', '99');
+INSERT INTO `qc_type_cases_entry` ( `type_id`, `case_entry_id`, `remark`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`) VALUES ( '109', '3118', NULL, 'N', '2021-04-19 12:47:51', '2021-04-19 12:47:51', '99', '99');
+INSERT INTO `qc_type_cases_entry` ( `type_id`, `case_entry_id`, `remark`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`) VALUES ( '110', '3118', NULL, 'N', '2021-04-19 12:47:51', '2021-04-19 12:47:51', '99', '99');
+
+INSERT INTO `qc_type_cases_entry` ( `type_id`, `case_entry_id`, `remark`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`) VALUES ( '65', '3119', NULL, 'N', '2021-04-19 12:47:51', '2021-04-19 12:47:51', '99', '99');
+INSERT INTO `qc_type_cases_entry` ( `type_id`, `case_entry_id`, `remark`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`) VALUES ( '74', '3119', NULL, 'N', '2021-04-19 12:47:51', '2021-04-19 12:47:51', '99', '99');
+INSERT INTO `qc_type_cases_entry` ( `type_id`, `case_entry_id`, `remark`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`) VALUES ( '66', '3119', NULL, 'N', '2021-04-19 12:47:51', '2021-04-19 12:47:51', '99', '99');
+INSERT INTO `qc_type_cases_entry` ( `type_id`, `case_entry_id`, `remark`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`) VALUES ( '80', '3119', NULL, 'N', '2021-04-19 12:47:51', '2021-04-19 12:47:51', '99', '99');
+INSERT INTO `qc_type_cases_entry` ( `type_id`, `case_entry_id`, `remark`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`) VALUES ( '109', '3119', NULL, 'N', '2021-04-19 12:47:51', '2021-04-19 12:47:51', '99', '99');
+INSERT INTO `qc_type_cases_entry` ( `type_id`, `case_entry_id`, `remark`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`) VALUES ( '110', '3119', NULL, 'N', '2021-04-19 12:47:51', '2021-04-19 12:47:51', '99', '99');
 
 
 
@@ -170,6 +202,10 @@ INSERT INTO `qc_cases_relevance_entry` (`type`, `hospital_id`, `cases_name`, `re
 INSERT INTO `qc_cases_relevance_entry` (`type`, `hospital_id`, `cases_name`, `relevance_id`, `name`, `is_deleted`) VALUES ('18', @id,  '指标十八:医师查房记录完成率', '2229', '术后查房没有连续记录3天', 'N');
 INSERT INTO `qc_cases_relevance_entry` (`type`, `hospital_id`, `cases_name`, `relevance_id`, `name`, `is_deleted`) VALUES ('18', @id,  '指标十八:医师查房记录完成率', '2468', '缺少术后首次病程记', 'N');
 INSERT INTO `qc_cases_relevance_entry` (`type`, `hospital_id`, `cases_name`, `relevance_id`, `name`, `is_deleted`) VALUES ('19', @id,  '指标十九:患者抢救记录及时完成率', '2852', '抢救记录未在抢救结束后6小时内完成', 'N');
+INSERT INTO `qc_cases_relevance_entry` (`type`, `hospital_id`, `cases_name`, `relevance_id`, `name`, `is_deleted`) VALUES ('14', @id, '指标十四:恶性肿瘤放射治疗记录符合率', '3120', '病程记录未记录恶性肿瘤放射治疗相关信息', 'N');
+INSERT INTO `qc_cases_relevance_entry` ( `type`, `hospital_id`, `cases_name`, `relevance_id`, `name`, `is_deleted`) VALUES ('22',@id, '指标二十二:不合理复制病历发生率', '2696', '病例特点与现病史内容雷同', 'N');
+INSERT INTO `qc_cases_relevance_entry` ( `type`, `hospital_id`, `cases_name`, `relevance_id`, `name`, `is_deleted`) VALUES ('23',@id, '指标二十三:知情同意书规范签署率', '3118', '知情同意书无患方签名或患方签名未授权', 'N');
+INSERT INTO `qc_cases_relevance_entry` ( `type`, `hospital_id`, `cases_name`, `relevance_id`, `name`, `is_deleted`) VALUES ('16',@id, '指标十六:植入物相关记录符合率', '3119', '使用植入物但手术记录或病程记录未记录相关信息', 'N');
 
 DROP TABLE IF EXISTS `med_management_info`;
 CREATE TABLE `med_management_info` (
@@ -290,12 +326,9 @@ CREATE TABLE `med_index_result` (
   `operation_complete_result` double(5,0) DEFAULT NULL COMMENT '手术相关记录完成率-分母',
   `implants_result` double(5,0) DEFAULT NULL COMMENT '植入物相关记录符合率-分母',
   `blood_result` double(5,0) DEFAULT NULL COMMENT '临床用血相关记录符合率-分母',
-  `ward_round_result` double(5,0) DEFAULT NULL COMMENT '医师查房记录完整率-分母',
   `rescue_result` double(5,0) DEFAULT NULL COMMENT '患者抢救记录及时完成率-分母',
   `sec_file_result` double(5,0) DEFAULT NULL COMMENT '出院患者病历2日归档率-分子',
-  `file_complete_result` double(5,0) DEFAULT NULL COMMENT '出院患者病历归档完整率-分母',
-  `no_copy_result` double(5,0) DEFAULT NULL COMMENT '不合理复制病历发生率-分母',
-  `record_sign_result` double(5,0) DEFAULT NULL COMMENT '知情同意书规范签署率-分母',
+  `file_complete_result` double(5,0) DEFAULT NULL COMMENT '出院患者病历归档完整率-分子',
   `start_date` datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP,
   `end_date` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
   `is_deleted` char(3) DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',

+ 5 - 4
src/main/java/com/diagbot/dto/MedManageParamsDTO.java

@@ -37,10 +37,11 @@ public class MedManageParamsDTO implements Serializable {
     //医嘱状态判别
     private String daStatus;
 
-    /**
-     * 住院科室名称
-     */
-    private String behDeptName;
+    //病历标题
+    private String content;
+
+    //文书内容(blob)
+    private String rec_title;
 
 
 

+ 1 - 21
src/main/java/com/diagbot/entity/MedIndexResult.java

@@ -98,11 +98,6 @@ public class MedIndexResult implements Serializable {
      */
     private Double bloodResult;
 
-    /**
-     * 医师查房记录完整率--分母
-     */
-    private Double wardRoundResult;
-
     /**
      * 患者抢救记录及时完成率--分母
      */
@@ -114,25 +109,10 @@ public class MedIndexResult implements Serializable {
     private Double secFileResult;
 
     /**
-     * 出院患者病历归档完整率--分
+     * 出院患者病历归档完整率--分
      */
     private Double fileCompleteResult;
 
-    /**
-     * 不合理复制病历发生率--分母
-     */
-    private Double noCopyResult;
-
-    /**
-     * 知情同意书规范签署率--分母
-     */
-    private Double recordSignResult;
-
-    /**
-     * 甲级病历率--分母
-     */
-    private Double firRecordResult;
-
     private String startDate;
 
     private String endDate;

+ 11 - 0
src/main/java/com/diagbot/enums/QualityContent.java

@@ -155,6 +155,17 @@ public class QualityContent {
      */
     public static List<String> FOURSTR = Arrays.asList(
             "住院病案管理人员月均负担出院患者病历数", "病案编码人员月均负担出院患者病历数", "门诊病案管理人员月均负担门诊患者病历数");
+
+    // 放疗药物目录
+    public static List<String> radiotherapyDrugList = Arrays.asList(
+            "艾迪注射液", "康艾注射液", "康莱特注射液", "鸦胆子油乳注射液", "榄香烯乳注射液", "香菇多糖", "胎盘多肽注射液", "甘露聚糖肽注射液",
+            "脾多肽注射液", "E巨和粒", "欣粒生", "特尔津", "日达仙注射剂", "益比奥", "特比澳", "胸腺五肽", "古拉定","天晴甘美", "易善复", "己糖神经节苷脂钠",
+            "核糖核酸II", "参芪扶正注射液", "甘露醇注射液", "兰索拉唑", "奥西康", "卡络磺钠注射液", "维生素K1注射液", "氨甲苯酸注射液", "酚磺乙胺注射液",
+            "盐酸甲氧氯普胺注", "甲磺酸托烷司琼注射液", "伊班膦酸钠注射液", "唑来膦酸", "盐酸氨溴索注射液","氨茶碱注射液", "孟鲁司特钠片", "阿托伐他汀钙片",
+            "阿卡波糖片", "盐酸二甲双胍片", "瑞格列奈片", "格列齐特片","拉米夫定片","耐信","益血生胶囊","地榆升白片", "鲨肝醇片", "复方皂矾丸", "加巴喷丁胶囊",
+            "塞来昔布胶囊", "氨酚曲马多片", "盐酸羟考酮缓释片","硫酸吗啡缓释片", "盐酸吗啡片","复方甲氧那明胶囊","醋酸甲地孕酮分散","枸橼酸托瑞米芬片","标准桃金娘油肠溶",
+            "甲氧氯普胺片","多潘立酮片"
+    );
 }
 
 

+ 10 - 5
src/main/java/com/diagbot/facade/BehospitalInfoFacade.java

@@ -320,7 +320,7 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
         List<RecordContentDTO> recordContentDTOList = medicalRecordFacade.getRecordContentFac(recordContentVO);
         String recTitle = "";
         // 解密数据
-        if (encryptFlag) {
+        if (false  && encryptFlag) {
             try {
                 EncrypDES encrypDES = new EncrypDES();
                 for (RecordContentDTO recordContentDTO : recordContentDTOList) {
@@ -602,7 +602,7 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
         );
 
         //知情同意书
-        List<MedicalRecord> recordList = medicalRecordFacade.list(new QueryWrapper<MedicalRecord>()
+    /*    List<MedicalRecord> recordList = medicalRecordFacade.list(new QueryWrapper<MedicalRecord>()
                 .eq("is_deleted", IsDeleteEnum.N.getKey())
                 .eq("behospital_code", analyzeVO.getBehospitalCode())
                 .eq("hospital_id", hospitalId)
@@ -610,7 +610,7 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
                 .orderByAsc("rec_date")
         );
         List<MedicalRecordDTO> medicalRecordDTOList = BeanUtil.listCopyTo(recordList, MedicalRecordDTO.class);
-
+*/
         List<HomeDiagnoseInfo> homePageList = new ArrayList<>();
         List<HomeOperationInfo> homeOperationInfoList = new ArrayList<>();
         if (homePage != null) {
@@ -920,8 +920,8 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
 
         addData("日常病程录", recMap, medrecVoList);
 
-        DataWithKey("知情同意书", medicalRecordDTOList, medrecVoList);
-        //addDataWithInnerKey("知情同意书", recMap, medrecVoList);
+        //DataWithKey("知情同意书", medicalRecordDTOList, medrecVoList);
+        addDataWithInnerKey("知情同意书", recMap, medrecVoList);
         addDataWithInnerKey("谈话告知书", recMap, medrecVoList);
 
         //==============文书====================
@@ -1656,6 +1656,11 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
 
         List<MsgDTO> msgDTOList = getMsg(analyzeVO);
         if (ListUtil.isNotEmpty(msgDTOList)) {
+            msgDTOList.forEach(msgDTO ->{
+                if(StringUtils.isNotEmpty(msgDTO.getInfo())){
+                    msgDTO.setMsg(msgDTO.getMsg()+"("+msgDTO.getInfo().trim()+")");
+                }
+            });
             // 从qc_question_info的cases_entry_ids获取
             Map<String, Object> paramMap = new HashMap<>();
             paramMap.put("hospitalId",  analyzeRunVO.getHospitalId());

+ 257 - 14
src/main/java/com/diagbot/facade/ConsoleFacade.java

@@ -1,5 +1,6 @@
 package com.diagbot.facade;
 
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -542,16 +543,23 @@ public class ConsoleFacade {
                 hashMapArrayList.add(stringStringHashMap);
             }
         }
+        //指标十四 恶性肿瘤放射治疗
+        if (indexName.equals(QualityContent.EXZL_FSZL_FHL)||indexName.equals(QualityContent.QB)) {
+            hashMapArrayList = tumorRadiationMethod(medicalRecordIndicator,hashMapArrayList,triggeringRulesMap);
+        }
 
         //指标十五 手术记录
         if (indexName.equals(QualityContent.SS_XGJL_WCL)||indexName.equals(QualityContent.QB)) {
             hashMapArrayList = operationMethod(medicalRecordIndicator,hashMapArrayList,triggeringRulesMap);
         }
 
+        //指标十六 植入物相关记录符合率
+        if (indexName.equals(QualityContent.ZRW_XGJL_WCL)||indexName.equals(QualityContent.QB)) {
+            hashMapArrayList = implantsMethod(medicalRecordIndicator,hashMapArrayList,triggeringRulesMap);
+        }
 
         //指标十七  临床用血相关记录符合率
         if (indexName.equals(QualityContent.LCYX_XGJL_WCL)||indexName.equals(QualityContent.QB)) {
-            filterVO.setFlagStr("1");
             hashMapArrayList = bloodMethod(hashMapArrayList,medicalRecordIndicator,triggeringRulesMap);
         }
 
@@ -570,9 +578,24 @@ public class ConsoleFacade {
             hashMapArrayList = getfileSecAmount(medicalRecordIndicator,hashMapArrayList, baseIndex);
         }
 
-        //指标二十七
+        //指标二十一 出院患者病历归档完整率
+        if (indexName.equals(QualityContent.CCHZ_GD_WZL)||indexName.equals(QualityContent.QB)) {
+            hashMapArrayList = fileCompleteMethod(medicalRecordIndicator,hashMapArrayList, baseIndex);
+        }
+
+        //指标二十二 不合理复制病历发生率
+        if (indexName.equals(QualityContent.BHL_FZ_FSL)||indexName.equals(QualityContent.QB)) {
+            hashMapArrayList = unreasonedCopyMethod(hashMapArrayList, baseIndex, triggeringRulesMap);
+        }
+
+        //指标二十三 知情同意书规范签署率
+        if (indexName.equals(QualityContent.ZQTYS_GF_QSL)||indexName.equals(QualityContent.QB)) {
+            hashMapArrayList = contentSignMethod(hashMapArrayList, baseIndex, triggeringRulesMap);
+        }
+
+        //指标二十四 甲级率
         if (indexName.equals(QualityContent.JJBLL)||indexName.equals(QualityContent.QB)) {
-            hashMapArrayList = firMethod(indexName,hashMapArrayList,baseIndex);
+            hashMapArrayList = firMethod(hashMapArrayList,baseIndex);
         }
         return hashMapArrayList;
     }
@@ -778,17 +801,37 @@ public class ConsoleFacade {
             Set<String> rescueCode = new CopyOnWriteArraySet<>();
             Set<String> bloodCode = new CopyOnWriteArraySet<>();
         //指标二十七
+        //指标14--恶性肿瘤放射治疗记录符合率
+        Set<String> tumorRadiationSet = tumorRadiationMethods(adviceNum, medIndexResult);
+
+        //指标15 手术记录
+        medIndexResult.setOperationCompleteResult(Double.parseDouble(operationFeeNum+""));
+
+        //指标16--植入物相关记录符合率
+        Set<String> implantsCode = implantsMethods(filterVO, medIndexResult);
+
+        //指标17  临床用血相关记录符合率
+        bloodMethods(doctorAdviceMedManageParams, filterVO,medIndexResult,bloodCode);
 
         //指标18 医师查房记录 查询直接返回 -code需要加载
 
         //指标19 抢救记录
         rescueMethods(doctorAdviceMedManageParams,medIndexResult,rescueCode);
+
         //指标20 出院患者病历2日归档
         getfileSecAmounts(filterVO,medIndexResult);
-        //指标15 手术记录
-        medIndexResult.setOperationCompleteResult(Double.parseDouble(operationFeeNum+""));
-        //指标17  临床用血相关记录符合率
-        bloodMethods(doctorAdviceMedManageParams, filterVO,medIndexResult,bloodCode);
+
+        //指标21 出院患者病历归档完整率
+        fileCompleteMethods(filterVO,medIndexResult);
+
+        //指标22 不合理复制病历发生率 查询直接返回
+
+        //指标23  知情同意书规范签署率 //分子通过规则
+       // contentSignMethods(contentFile,medIndexResult);
+
+        //指标24 甲级率 查询直接返回
+
+
         medIndexResult.setHospitalId(filterVO.getHospitalId());
         medIndexResult.setStartDate(filterVO.getStartDate());
         medIndexResult.setEndDate(filterVO.getEndDate());
@@ -867,34 +910,62 @@ public class ConsoleFacade {
                     medIndexRelevanceFacade.save(medIndexRelevance);
                 }
             }
-            if(operationCode.size()>0&&operationCode!=null) {
+        if(tumorRadiationSet.size()>0 && tumorRadiationSet != null) {
+            medIndexRelevance.setRelevanceType(14);
+            for (String Code : tumorRadiationSet) {
+                medIndexRelevance.setBehospitalCode(Code);
+                medIndexRelevanceFacade.save(medIndexRelevance);
+            }
+        }
+            if(operationCode.size() > 0 && operationCode != null) {
                 medIndexRelevance.setRelevanceType(15);
                 for (String Code : operationCode) {
                     medIndexRelevance.setBehospitalCode(Code);
                     medIndexRelevanceFacade.save(medIndexRelevance);
                 }
             }
-            if(bloodCode.size()>0&&bloodCode!=null) {
+        if(implantsCode.size() > 0 && implantsCode != null) {
+            medIndexRelevance.setRelevanceType(16);
+            for (String Code : implantsCode) {
+                medIndexRelevance.setBehospitalCode(Code);
+                medIndexRelevanceFacade.save(medIndexRelevance);
+            }
+        }
+            if(bloodCode.size() > 0 && bloodCode != null) {
                 medIndexRelevance.setRelevanceType(17);
                 for (String Code : bloodCode) {
                     medIndexRelevance.setBehospitalCode(Code);
                     medIndexRelevanceFacade.save(medIndexRelevance);
                 }
             }
-            if(outHospitalCode.size()>0&&outHospitalCode!=null) {
+            if(outHospitalCode.size() > 0 && outHospitalCode != null) {
                 medIndexRelevance.setRelevanceType(18);
                 for (String Code : outHospitalCode) {
                     medIndexRelevance.setBehospitalCode(Code);
                     medIndexRelevanceFacade.save(medIndexRelevance);
                 }
             }
-            if(rescueCode.size()>0&&rescueCode!=null) {
+            if(rescueCode.size() > 0 && rescueCode != null) {
                 medIndexRelevance.setRelevanceType(19);
                 for (String Code : rescueCode) {
                     medIndexRelevance.setBehospitalCode(Code);
                     medIndexRelevanceFacade.save(medIndexRelevance);
                 }
             }
+        if(outHospitalCode.size() > 0 && outHospitalCode != null) {
+            medIndexRelevance.setRelevanceType(22);
+            for (String Code : outHospitalCode) {
+                medIndexRelevance.setBehospitalCode(Code);
+                medIndexRelevanceFacade.save(medIndexRelevance);
+            }
+        }
+        if(outHospitalCode.size() > 0 && outHospitalCode != null) {
+            medIndexRelevance.setRelevanceType(23);
+            for (String Code : outHospitalCode) {
+                medIndexRelevance.setBehospitalCode(Code);
+                medIndexRelevanceFacade.save(medIndexRelevance);
+            }
+        }
         }
     /**
      * 两数据相除得到百分比
@@ -987,6 +1058,7 @@ public class ConsoleFacade {
         Set<String> bacterialCultureCode = new CopyOnWriteArraySet<>();
         Set<String> antibiosisBehospitalCode = new CopyOnWriteArraySet<>();
         Set<String> chemotherapyMalignantTumorsBehospitalCode = new CopyOnWriteArraySet<>();
+        Set<String> tumorRadiationBehospitalCode = new CopyOnWriteArraySet<>();
         //无首页code
         List<String> behospitalCodeList = adviceVerify(filterVO);
         //首页为肿瘤code
@@ -1107,6 +1179,24 @@ public class ConsoleFacade {
                                     }
                                 }
                             }
+
+                            if (indexName.equals(QualityContent.EXZL_FSZL_FHL) || indexName.equals(QualityContent.QB)) {
+                                if (ListUtil.isNotEmpty(malignancyCodeList)) {
+                                    if (malignancyCodeList.contains(behospitalCode)) {
+                                        if (!tumorRadiationBehospitalCode.contains(behospitalCode)) {
+                                            if (doctorAdviceType.equals(QualityContent.STAT_ORDER) || doctorAdviceType.equals(QualityContent.STANDING_ORDER)) {
+                                                List<String> tumorRadiationDrugList = QualityContent.radiotherapyDrugList;
+                                                for (String tumorRadiationDrug : tumorRadiationDrugList) {
+                                                    if (daItemName.contains(tumorRadiationDrug)) {
+                                                        //医嘱含有放射治疗药物
+                                                        tumorRadiationBehospitalCode.add(behospitalCode);
+                                                    }
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
                         }
                     }
                 }
@@ -1159,6 +1249,11 @@ public class ConsoleFacade {
             }else {
                 mapCode.put("chemotherapyMalignantTumors",null);
             }
+            if(tumorRadiationBehospitalCode!=null && tumorRadiationBehospitalCode.size()>0){
+                mapCode.put("tumorRadiationSecNum",tumorRadiationBehospitalCode);
+            }else {
+                mapCode.put("tumorRadiationSecNum",null);
+            }
             return mapCode;
         }
     }
@@ -3002,6 +3097,49 @@ public class ConsoleFacade {
         return behospitalInfoFacade.hmImproveMRPage(qcResultShortPageVO);
     }
 
+
+    //指标十四 恶性肿瘤放射治疗
+    private List<Map<String, String>> tumorRadiationMethod(Map<String, Double> medManageParams,List<Map<String, String>> retList, Map<String, Long> triggeringRulesMap){
+        LinkedHashMap<String, String> firMap = new LinkedHashMap<>();
+        //接受肿瘤放射治疗的质控病历总数
+        double count = medManageParams.get("tumorRadiationResult");
+        String num = null;
+        if(StringUtils.isNotEmpty(String.valueOf(count)) &&  count != 0d){
+            double tumorRadiationDo = currencyCal(count, triggeringRulesMap.get("tumorRadiationNum"));//triggeringRules(filterVO)
+            num = String.valueOf(tumorRadiationDo);
+            if(tumorRadiationDo<0d){
+                num = null;
+            }
+            firMap.put("num",String.valueOf(count));
+        };
+
+        firMap.put("name","恶性肿瘤放射治疗记录符合率");
+        firMap.put("notCopiedStr",StringUtils.isEmpty(num) ? "0.00%":(num+"%"));
+        retList.add(firMap);
+        return retList;
+    }
+
+    //指标十六 植入物相关记录符合率
+    private List<Map<String, String>> implantsMethod(Map<String, Double> medManageParams,List<Map<String, String>> retList, Map<String, Long> triggeringRulesMap){
+        LinkedHashMap<String, String> firMap = new LinkedHashMap<>();
+        //使用植入物的质控病历总数
+        double count = medManageParams.get("implantsResult");
+        String num = null;
+        if(StringUtils.isNotEmpty(String.valueOf(count)) &&  count != 0d){
+            double implantsDo = currencyCal(count, triggeringRulesMap.get("implantsNum"));//triggeringRules(filterVO)
+            num = String.valueOf(implantsDo);
+            if(implantsDo<0d){
+                num = null;
+            }
+            firMap.put("num",String.valueOf(count));
+        };
+
+        firMap.put("name","植入物相关记录符合率");
+        firMap.put("notCopiedStr",StringUtils.isEmpty(num) ? "0.00%":(num+"%"));
+        retList.add(firMap);
+        return retList;
+    }
+
     //指标十八 抢救记录
     private  List<Map<String, String>> rescueMethod( Map<String, Double> medManageParams, List<Map<String, String>> retList,Map<String, Long> triggeringRulesMap){
         LinkedHashMap<String, String> firMap = new LinkedHashMap<>();
@@ -3041,6 +3179,44 @@ public class ConsoleFacade {
         return retList;
     }
 
+
+    //指标二十二 不合理复制病历发生率
+    private List<Map<String, String>> unreasonedCopyMethod( List<Map<String, String>> retList, Map<String, Object> baseIndex, Map<String, Long> triggeringRulesMap){
+       LinkedHashMap<String, String> firMap = new LinkedHashMap<>();
+       String num = null;
+       if( triggeringRulesMap.containsKey("unreasonedCopyNum") && baseIndex.containsKey("forWorkNum") && !baseIndex.get("forWorkNum").toString().equals("0")){
+           double wardRoundDo = currencyCal(baseIndex.get("forWorkNum"), triggeringRulesMap.get("unreasonedCopyNum"));
+           num = String.valueOf(wardRoundDo);
+           if(wardRoundDo<0d){
+               num = null;
+           }
+           firMap.put("num",baseIndex.get("forWorkNum").toString());
+       };
+       firMap.put("name","不合理复制病历发生率");
+       firMap.put("notCopiedStr",StringUtils.isEmpty(num) ? "0.00%":(num+"%"));
+       retList.add(firMap);
+        return retList;
+        };
+
+
+    //指标二十三 知情同意书规范签署率
+    private List<Map<String, String>> contentSignMethod(List<Map<String, String>> retList, Map<String, Object> baseIndex, Map<String, Long> triggeringRulesMap){
+        LinkedHashMap<String, String> firMap = new LinkedHashMap<>();
+        String num = null;
+        if( triggeringRulesMap.containsKey("InformedNum") && baseIndex.containsKey("forWorkNum") && !baseIndex.get("forWorkNum").toString().equals("0")){
+            double InformedDo = currencyCal(baseIndex.get("forWorkNum"), triggeringRulesMap.get("InformedNum"));
+            num = String.valueOf(InformedDo);
+            if(InformedDo<0d){
+                num = null;
+            }
+            firMap.put("num",baseIndex.get("forWorkNum").toString());
+        }
+        firMap.put("name","知情同意书规范签署率");
+        firMap.put("notCopiedStr",StringUtils.isEmpty(num) ? "0.00%":(num+"%"));
+        retList.add(firMap);
+        return retList;
+    }
+
     //指标十四 手术记录
     private  List<Map<String, String>> operationMethod(Map<String, Double> medManageParams, List<Map<String, String>>retList, Map<String, Long> triggeringRulesMap){
         LinkedHashMap<String, String> firMap = new LinkedHashMap<>();
@@ -3115,6 +3291,25 @@ public class ConsoleFacade {
         return retList;
     };
 
+    //指标21 --出院患者病历归档完整率
+    private  List<Map<String, String>> fileCompleteMethod(Map<String, Double> medManageParams, List<Map<String, String>>retList, Map<String, Object> baseIndex){
+        DecimalFormat df = new DecimalFormat("#0.00");
+        LinkedHashMap<String, String> firMap = new LinkedHashMap<>();
+        double count = medManageParams.get("fileCompleteResult");
+        String num = null;
+        if(StringUtils.isNotEmpty( baseIndex.get("forWorkNum").toString()) && ! baseIndex.get("forWorkNum").toString().equals("0") ){
+            double retNum =count* 100/Double.parseDouble(baseIndex.get("forWorkNum").toString());
+            double firGradeStr = Double.parseDouble(df.format(retNum));
+            num = String.valueOf(firGradeStr);
+            firMap.put("num",baseIndex.get("forWorkNum").toString());
+        }
+
+        firMap.put("name","出院患者病历归档完整率");
+        firMap.put("notCopiedStr",StringUtils.isEmpty(num) ? "0.00%":(num+"%"));
+        retList.add(firMap);
+        return retList;
+    }
+
 
     private List<Map<String, String>> ManageIndexMethod(String indexName,List<Map<String, String>> retList, Map<String, Object> baseIndex, MedIndexFilterVO timeVo){
         QueryWrapper<MedManagementInfo> query = new QueryWrapper<>();
@@ -3195,9 +3390,8 @@ public class ConsoleFacade {
     };
 
 
-    private List<Map<String, String>> firMethod(String indexName,List<Map<String, String>> retList, Map<String, Object> baseIndex){
+    private List<Map<String, String>> firMethod(List<Map<String, String>> retList, Map<String, Object> baseIndex){
         DecimalFormat df = new DecimalFormat("0.00");
-        if(indexName.equals(QualityContent.JJBLL)||indexName.equals(QualityContent.QB)) {
             //指标二十七 -甲级病历率
         LinkedHashMap<String, String> fouMap = new LinkedHashMap<>();
             Double firRecord = 0d;
@@ -3214,7 +3408,6 @@ public class ConsoleFacade {
             fouMap.put("name","甲级病历率");
             fouMap.put("notCopiedStr",StringUtils.isEmpty(num4) ? "0.00%":(num4+"%"));
             retList.add(fouMap);
-        }
         return retList;
     };
 
@@ -3222,6 +3415,17 @@ public class ConsoleFacade {
     /**
      * ==============================后台维护===============================
      */
+    private  Set<String> tumorRadiationMethods( Map<String, Set<String>> adviceNum,MedIndexResult medIndexResult){
+        Set<String> tumorRadiationSecNum = new CopyOnWriteArraySet<>();
+        if(adviceNum.containsKey("tumorRadiationSecNum")&& adviceNum.get("tumorRadiationSecNum") != null && adviceNum.get("tumorRadiationSecNum").size()>0){
+            tumorRadiationSecNum = adviceNum.get("tumorRadiationSecNum");
+            double count = tumorRadiationSecNum.size();
+            if(StringUtils.isNotEmpty(String.valueOf(count)) &&  count != 0d){
+                medIndexResult.setTumorRadiationResult(count);
+            }
+        }
+        return tumorRadiationSecNum;
+    }
     //指标19 抢救记录
     private  void rescueMethods(List<MedManageParamsDTO> medManageParams,MedIndexResult medIndexResult, Set<String> rescueCode){
         List<MedManageParamsDTO> manageList= new ArrayList<>();
@@ -3368,6 +3572,45 @@ public class ConsoleFacade {
         filterVO.setLastEndDate(endTime);
     };
 
+    //指标 16--植入物相关记录符合率
+    private Set<String> implantsMethods(FilterVO filterVO,MedIndexResult medIndexResult){
+        filterVO.setFlagStr("4");
+        List<MedManageParamsDTO> fileLists = behospitalInfoFacade.getMedManageParams(filterVO);
+        Set<String> collect = fileLists.parallelStream().filter(obj -> {
+            String content = obj.getContent();
+            Map contenMap = JSON.parseObject(content, Map.class);
+            return contenMap.containsKey("使用植入性材料") && StringUtils.isNotEmpty(contenMap.get("使用植入性材料").toString())
+                    && "true".equals(contenMap.get("使用植入性材料").toString());
+        }).map(MedManageParamsDTO::getBehospitalCode).collect(Collectors.toSet());
+        double count = collect.size();
+        if(StringUtils.isNotEmpty(String.valueOf(count)) &&  count != 0d){
+            medIndexResult.setImplantsResult(count);
+        }
+        return collect;
+    }
+
+    //指标21 出院患者病历归档完整率
+    private void fileCompleteMethods(FilterVO filterVO,MedIndexResult medIndexResult){
+        filterVO.setFlagStr("3");
+        List<MedManageParamsDTO> fileLists = behospitalInfoFacade.getMedManageParams(filterVO);
+        double count = fileLists.stream().map(MedManageParamsDTO::getBehospitalCode).distinct().count();
+        if(StringUtils.isNotEmpty(String.valueOf(count)) &&  count != 0d){
+            medIndexResult.setFileCompleteResult(count);
+        }
+    }
+
+    //指标23  知情同意书规范签署率
+//    private void contentSignMethods(List<MedManageParamsDTO>fileLists,MedIndexResult medIndexResult){
+//        Set<String> collect = fileLists.parallelStream().filter(obj -> {
+//            String content = obj.getContent();
+//            Map contenMap = JSON.parseObject(content, Map.class);
+//            return contenMap.containsKey("签署") && StringUtils.isNotEmpty(contenMap.get("签署").toString());
+//        }).map(MedManageParamsDTO::getBehospitalCode).collect(Collectors.toSet());
+//        double count = collect.size();
+//        if(StringUtils.isNotEmpty(String.valueOf(count)) &&  count != 0d){
+//            medIndexResult.setRecordSignResult(count);
+//        }
+//    }
 
 
     /**

+ 54 - 1
src/main/resources/mapper/BehospitalInfoMapper.xml

@@ -804,6 +804,10 @@
         f3.da_status AS daStatus,
         f3.doctor_advice_type as doctorAdviceType,
         </if>
+        <if test="flagStr != null and flagStr == 4 ">
+            f5.content as content,
+            f5.rec_title as recTitle,
+        </if>
         f1.hospitalId
         from(
         SELECT DISTINCT
@@ -836,6 +840,19 @@
         AND f1.hospitalId = f3.hospital_id
         AND f1.behospitalCode = f3.behospital_code
         </if>
+        <if test="flagStr != null and flagStr == 3">
+            join  med_qcresult_detail f4
+            on  f4.is_deleted = 'N'
+            AND f1.hospitalId = f4.hospital_id
+            AND f1.behospitalCode = f4.behospital_code
+            AND f4.is_reject = 1
+        </if>
+        <if test="flagStr != null and flagStr == 4">
+            join  str_informed_consent f5
+            on  f5.is_deleted = 'N'
+            AND f1.hospitalId = f5.hospital_id
+            AND f1.behospitalCode = f5.behospital_code
+        </if>
     </select>
 
 
@@ -17736,7 +17753,43 @@
         ELSE
         NULL
         END
-        ) AS 'rescueNum'
+        ) AS 'rescueNum',
+        count(
+        DISTINCT
+        CASE
+        WHEN a.type = 22 THEN
+        a.behospital_code
+        ELSE
+        NULL
+        END
+        ) AS 'unreasonedCopyNum',
+        count(
+        DISTINCT
+        CASE
+        WHEN a.type = 14 THEN
+        a.behospital_code
+        ELSE
+        NULL
+        END
+        ) AS 'tumorRadiationNum',
+        count(
+        DISTINCT
+        CASE
+        WHEN a.type = 16 THEN
+        a.behospital_code
+        ELSE
+        NULL
+        END
+        ) AS 'implantsNum',
+        count(
+        DISTINCT
+        CASE
+        WHEN a.type = 23 THEN
+        a.behospital_code
+        ELSE
+        NULL
+        END
+        ) AS 'InformedNum'
         FROM
         (
         SELECT

+ 3 - 2
src/main/resources/mapper/MedIndexResultMapper.xml

@@ -51,8 +51,9 @@
             COALESCE (sum(a.implants_result), 0) AS 'implants_result',
             COALESCE (sum(a.blood_result), 0) AS 'blood_result',
             COALESCE (sum(a.rescue_result), 0) AS 'rescue_result',
-            COALESCE (sum(a.sec_file_result), 0) AS 'sec_file_result'
-
+            COALESCE (sum(a.sec_file_result), 0) AS 'sec_file_result',
+            COALESCE (sum(a.file_complete_result), 0) AS 'fileCompleteResult',
+            COALESCE (sum(a.tumor_radiation_result), 0) AS 'tumorRadiationResult'
         FROM
             med_index_result a
         WHERE