Browse Source

医保优化

lighter 1 year ago
parent
commit
782c65bb49

+ 2 - 0
src/main/java/thyyxxk/webserver/constants/sidicts/MedType.java

@@ -39,6 +39,8 @@ public enum MedType {
 
     OCCUPATIONAL_INJURY_CLINIC("41", "工伤门诊", "clinic", "al1"),
 
+    INJURY_RECOVER_CLINIC("46", "康复门诊", "clinic", "al2"),
+
     OUTPATIENT_TWO_DISEASES("9901", "门诊两病", "clinic", "am"),
 
     ACCIDENTAL_INJURY_CLINIC("9903", "意外伤害门诊", "clinic", "an"),

+ 4 - 0
src/main/java/thyyxxk/webserver/dao/his/medicalinsurance/SiZyDao.java

@@ -149,6 +149,10 @@ public interface SiZyDao {
                               @Param("ledgerSn") int ledgerSn,
                               @Param("endtime") String endtime);
 
+    @Select("select start_time from yz_act_order with(nolock) where inpatient_no=#{patNo} and admiss_times=#{times} " +
+            "and status_flag > '1' and isnull(group_no, '00')='00' and order_code in ('06026','06053','05973') and status_flag!='6'  ")
+    Date selectActOrderDisDate(@Param("patNo") String patNo, @Param("times") Integer times);
+
     @Select("select psn_no,certno as mdtrtCertNo,certno,mdtrtCertType='02', " +
             "psn_cert_type,psn_type,mdtrt_id,insutype,insuplc_admdvs, " +
             "medfeeSumamt=(select sum(charge_fee) from zy_detail_charge b where b.inpatient_no=a.pat_no " +

+ 11 - 0
src/main/java/thyyxxk/webserver/entity/medicalinsurance/inpatient/PreSetlmt.java

@@ -1,7 +1,11 @@
 package thyyxxk.webserver.entity.medicalinsurance.inpatient;
 
 import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
 
 /**
  * @description: 住院结算/预结算参数
@@ -109,6 +113,13 @@ public class PreSetlmt {
     @JSONField(name = "mdtrtarea_admvs")
     private String mdtrtareaAdmvs;
 
+    /**
+     * 结束时间(出院时间 yyyy-MM-dd HH:mm:ss)
+     * */
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date dscgTime;
+
     /**
      * 额外内容
      * */

+ 5 - 0
src/main/java/thyyxxk/webserver/entity/medicalinsurance/inpatient/ZyPatientInfo.java

@@ -79,6 +79,7 @@ public class ZyPatientInfo {
      * 主任医生
      */
     private String deptDirector;
+    private Boolean stopHere;
 
     public Boolean getDbg() {
         return null != isDbg && isDbg;
@@ -95,4 +96,8 @@ public class ZyPatientInfo {
     public Boolean getMidSetl() {
         return null != midSetl && midSetl;
     }
+
+    public Boolean getStopHere() {
+        return null != stopHere && stopHere;
+    }
 }

+ 11 - 2
src/main/java/thyyxxk/webserver/service/medicalinsurance/SiZyService.java

@@ -262,9 +262,10 @@ public class SiZyService {
         preSetlmt.setAcctUsedFlag(YesOrNo.NO.getCodeStr());
         preSetlmt.setMidSetlFlag(YesOrNo.NO.getCodeStr());
         preSetlmt.setMdtrtareaAdmvs(SiUtil.getInstitutionArea(preSetlmt.getInsuplcAdmdvs()));
+        preSetlmt.setDscgTime(dao.selectActOrderDisDate(p.getInpatientNo(), p.getAdmissTimes()));
 
         JSONObject input = exec.makeTradeHeaderWithInsureArea(SiFunction.HOSPITALIZATION_PRE_SETTLEMENT, preSetlmt.getInsuplcAdmdvs());
-        String ref = JSONObject.toJSONString(preSetlmt);
+        String ref = JSONObject.toJSONStringWithDateFormat(preSetlmt, "yyyy-MM-dd");
         input.getJSONObject("input").put("data", JSONObject.parseObject(ref));
         JSONObject result = exec.executeTrade(input, SiFunction.HOSPITALIZATION_PRE_SETTLEMENT);
         log.info("预结算:\n参数:{},\n结果:{}", input, result);
@@ -468,10 +469,18 @@ public class SiZyService {
             return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "医保中心报错:" + result.getString("message"));
         }
         if (infcode == 0) {
+            if (p.getStopHere()) {
+                return ResultVoUtil.success("出院办理成功。");
+            }
             p.setDismissDate(dscginfo.getEndtime());
             return inpatientSettlement(p);
         }
-        return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, result.getString(ERROR_MESSAGE));
+        String errMsg = result.getString(ERROR_MESSAGE);
+        if (null != errMsg && errMsg.contains("该人员已经是出院状态")) {
+            p.setDismissDate(dscginfo.getEndtime());
+            return inpatientSettlement(p);
+        }
+        return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, errMsg);
     }
 
     public ResultVo<String> revokeDischarge(ZyPatientInfo p) {