|
@@ -12,6 +12,7 @@ import com.diagbot.entity.*;
|
|
|
import com.diagbot.enums.IsDeleteEnum;
|
|
|
import com.diagbot.exception.CommonErrorCode;
|
|
|
import com.diagbot.exception.CommonException;
|
|
|
+import com.diagbot.service.MedManagementInfoService;
|
|
|
import com.diagbot.service.MedQcresultDetailService;
|
|
|
import com.diagbot.util.*;
|
|
|
import com.diagbot.vo.*;
|
|
@@ -25,7 +26,11 @@ import org.springframework.stereotype.Component;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
import java.math.RoundingMode;
|
|
|
+import java.text.DateFormat;
|
|
|
import java.text.DecimalFormat;
|
|
|
+import java.text.ParseException;
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
+import java.time.Duration;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
import java.util.*;
|
|
@@ -61,6 +66,12 @@ public class ConsoleFacade {
|
|
|
private QcCasesEntryFacade qcCasesEntryFacade;
|
|
|
@Autowired
|
|
|
private LeaveHosStatisticsAggregate leaveHosStatisticsAggregate;
|
|
|
+ @Autowired
|
|
|
+ @Qualifier("medManagementInfoServiceImpl")
|
|
|
+ private MedManagementInfoService medManagementInfoService;
|
|
|
+ @Autowired
|
|
|
+ @Qualifier("medQcresultDetailServiceImpl")
|
|
|
+ private MedQcresultDetailService medQcresultDetailService;
|
|
|
|
|
|
//region-----------------------聚合接口开始-------------------------------
|
|
|
|
|
@@ -2245,6 +2256,102 @@ public class ConsoleFacade {
|
|
|
return behospitalInfoFacade.hmImproveMRPage(qcResultShortPageVO);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 病案管理指标(内页)
|
|
|
+ * @param filterVO
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public MedQualityControlDTO getMedManageIndex(FilterVO filterVO) {
|
|
|
+ MedQualityControlDTO medQualityControlDTO = new MedQualityControlDTO();
|
|
|
+ Map<String, Object> baseIndex = behospitalInfoFacade.getBaseIndex(filterVO);
|
|
|
+ //指标一、二、三、二十七
|
|
|
+ medQualityControlDTO = ManageIndexMethod(medQualityControlDTO, baseIndex, filterVO);
|
|
|
+ filterVO.setFlagStr("0");
|
|
|
+ Map<String, Object> entryCountMap = behospitalInfoFacade.getCountByEntry(filterVO);
|
|
|
+ //指标十七
|
|
|
+ medQualityControlDTO = ruleIndexMethod(filterVO,medQualityControlDTO, baseIndex, entryCountMap);
|
|
|
+ //指标十八
|
|
|
+ filterVO.setFlagStr("1");
|
|
|
+ entryCountMap = behospitalInfoFacade.getCountByEntry(filterVO);
|
|
|
+ medQualityControlDTO = ruleIndexMethod(filterVO,medQualityControlDTO, baseIndex, entryCountMap);
|
|
|
+
|
|
|
+ return medQualityControlDTO;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private MedQualityControlDTO ruleIndexMethod(FilterVO filterVO,MedQualityControlDTO medQualityControlDTO, Map<String, Object> baseIndex, Map<String, Object> entryCountMap){
|
|
|
+ if(filterVO.getFlagStr().equals("0") && entryCountMap.containsKey("WardRoundAmount") && baseIndex.containsKey("thrMouthNum") && entryCountMap.get("WardRoundAmount").toString()!="0"){
|
|
|
+ //指标十七
|
|
|
+ double wardRoundDo = currencyCal(baseIndex.get("thrMouthNum"), entryCountMap.get("WardRoundAmount"));
|
|
|
+ medQualityControlDTO.setWardRoundNum(wardRoundDo);
|
|
|
+ medQualityControlDTO.setWardRoundStr(wardRoundDo+"%");
|
|
|
+
|
|
|
+ };
|
|
|
+ if(filterVO.getFlagStr().equals("1") && entryCountMap.containsKey("rescueNumDe") && entryCountMap.containsKey("rescueAmount") && entryCountMap.get("rescueNumDe").toString()!="0"){
|
|
|
+ //指标十八
|
|
|
+ double rescueDo = currencyCal(entryCountMap.get("rescueNumDe"), entryCountMap.get("rescueAmount"));
|
|
|
+ medQualityControlDTO.setRescueNum(rescueDo);
|
|
|
+ medQualityControlDTO.setRescueStr(rescueDo+"%");
|
|
|
+ }
|
|
|
+ return medQualityControlDTO;
|
|
|
+ }
|
|
|
+
|
|
|
+ private double currencyCal(Object objFir,Object objSec){
|
|
|
+ DecimalFormat df = new DecimalFormat("0.0");
|
|
|
+ double firDouble = Double.parseDouble(objFir.toString()) - Double.parseDouble(objSec.toString());
|
|
|
+ double thrMouthNum = Double.parseDouble(objFir.toString());
|
|
|
+ double retData = Double.parseDouble(df.format(firDouble * 100 / thrMouthNum));
|
|
|
+ return retData;
|
|
|
+ };
|
|
|
+
|
|
|
+
|
|
|
+ private MedQualityControlDTO ManageIndexMethod(MedQualityControlDTO medQualityControlDTO, Map<String, Object> baseIndex,FilterVO filterVO){
|
|
|
+ QueryWrapper<MedManagementInfo> query = new QueryWrapper<>();
|
|
|
+ DecimalFormat df = new DecimalFormat("0.0");
|
|
|
+ query.eq("hospital_id", filterVO.getHospitalId())
|
|
|
+ .eq("is_deleted", IsDeleteEnum.N)
|
|
|
+ //指标1、2、3与是否归档没有直接关系 出院时间在单位时间内即可
|
|
|
+ // .eq("is_placefile", filterVO.getIsPlacefile())
|
|
|
+ .isNotNull("start_date")
|
|
|
+ .isNotNull("end_date")
|
|
|
+ .ge("start_date",filterVO.getStartDate())
|
|
|
+ .le("end_date",filterVO.getEndDate());
|
|
|
+
|
|
|
+ List<MedManagementInfo> list = medManagementInfoService.list(query);
|
|
|
+ //单位时间同期门诊病案管理人员实际工作总月数
|
|
|
+ Double firMouth = list.stream().filter(obj->obj.getPositionId()==0).map(MedManagementInfo::getWorkMouth).reduce(Double::sum).get();
|
|
|
+ //单位时间同期住院病案管理人员实际工作总月数
|
|
|
+ Double secMouth = list.stream().filter(obj->obj.getPositionId()==1).map(MedManagementInfo::getWorkMouth).reduce(Double::sum).get();
|
|
|
+ //单位时间同期病案编码管理人员实际工作总月数
|
|
|
+ Double thrMouth = list.stream().filter(obj->obj.getPositionId()==2).map(MedManagementInfo::getWorkMouth).reduce(Double::sum).get();
|
|
|
+ Double firRecord = 0d;
|
|
|
+
|
|
|
+ //指标一
|
|
|
+ if(secMouth != 0d && secMouth != null && StringUtils.isNotEmpty( baseIndex.get("firMouthNum").toString())){
|
|
|
+ medQualityControlDTO.setManagerMouthNum(Math.ceil(Double.parseDouble(baseIndex.get("firMouthNum").toString())/secMouth));
|
|
|
+ }
|
|
|
+ //指标三
|
|
|
+ if(thrMouth != 0d && thrMouth != null && StringUtils.isNotEmpty( baseIndex.get("firMouthNum").toString())){
|
|
|
+ medQualityControlDTO.setCoderMouthNum(Math.ceil(Double.parseDouble(baseIndex.get("firMouthNum").toString())/thrMouth));
|
|
|
+ }
|
|
|
+
|
|
|
+ if(firMouth != 0d && firMouth != null && StringUtils.isNotEmpty( baseIndex.get("secMouthNum").toString())){
|
|
|
+ //指标二
|
|
|
+ medQualityControlDTO.setSecManagerMouthNum(Math.ceil(Double.parseDouble(baseIndex.get("secMouthNum").toString())/firMouth));
|
|
|
+ }
|
|
|
+
|
|
|
+ //指标二十七 -甲级病历率
|
|
|
+ if(StringUtils.isNotEmpty( baseIndex.get("forMouthNum").toString())){
|
|
|
+ firRecord =Double.parseDouble(baseIndex.get("forMouthNum").toString());
|
|
|
+ }
|
|
|
+ if( firRecord != 0d && StringUtils.isNotEmpty( baseIndex.get("sixMouthNum").toString()) ){
|
|
|
+ double retNum = Double.parseDouble(baseIndex.get("sixMouthNum").toString()) * 100 / firRecord;
|
|
|
+ double firGradeStr = Double.parseDouble(df.format(retNum));
|
|
|
+ medQualityControlDTO.setFirGradeStr(firGradeStr+"%");
|
|
|
+ }
|
|
|
+
|
|
|
+ return medQualityControlDTO;
|
|
|
+ };
|
|
|
|
|
|
/**
|
|
|
* 质控核查质控评分页(内页)
|