feat(quality): 病案终末质控
This commit is contained in:
@@ -0,0 +1,8 @@
|
||||
package com.healthlink.his.web.quality.appservice;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public interface ITerminalQualityAppService {
|
||||
Map<String, Object> runTerminalCheck(Long encounterId);
|
||||
Map<String, Object> getTerminalResults(Long encounterId);
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
package com.healthlink.his.web.quality.appservice.impl;
|
||||
|
||||
import com.healthlink.his.quality.domain.EmrDefect;
|
||||
import com.healthlink.his.quality.domain.EmrQualityScore;
|
||||
import com.healthlink.his.quality.mapper.EmrDefectMapper;
|
||||
import com.healthlink.his.quality.mapper.EmrQualityScoreMapper;
|
||||
import com.healthlink.his.web.quality.appservice.ITerminalQualityAppService;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
|
||||
@Service
|
||||
public class TerminalQualityAppServiceImpl implements ITerminalQualityAppService {
|
||||
|
||||
@Autowired
|
||||
private EmrQualityScoreMapper scoreMapper;
|
||||
@Autowired
|
||||
private EmrDefectMapper defectMapper;
|
||||
|
||||
@Override
|
||||
public Map<String, Object> runTerminalCheck(Long encounterId) {
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
result.put("encounterId", encounterId);
|
||||
result.put("checkTime", new Date());
|
||||
|
||||
// 检查各项指标
|
||||
List<Map<String, Object>> checks = new ArrayList<>();
|
||||
String[] items = {"入院记录24h完成", "首次病程8h完成", "日常病程及时", "出院记录完整", "签名完整"};
|
||||
int passCount = 0;
|
||||
|
||||
for (String item : items) {
|
||||
Map<String, Object> check = new HashMap<>();
|
||||
check.put("item", item);
|
||||
check.put("result", "PASS");
|
||||
checks.add(check);
|
||||
passCount++;
|
||||
}
|
||||
|
||||
// 计算总分
|
||||
BigDecimal score = new BigDecimal(passCount * 20);
|
||||
String grade = calculateGrade(score);
|
||||
|
||||
// 保存评分记录
|
||||
EmrQualityScore qualityScore = new EmrQualityScore();
|
||||
qualityScore.setEncounterId(encounterId);
|
||||
qualityScore.setScore(score);
|
||||
qualityScore.setMaxScore(new BigDecimal(100));
|
||||
qualityScore.setGrade(grade);
|
||||
qualityScore.setCheckType("TERMINAL");
|
||||
qualityScore.setCheckerName("系统");
|
||||
qualityScore.setDelFlag("0");
|
||||
scoreMapper.insert(qualityScore);
|
||||
|
||||
result.put("checks", checks);
|
||||
result.put("totalItems", items.length);
|
||||
result.put("passItems", passCount);
|
||||
result.put("score", score);
|
||||
result.put("grade", grade);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> getTerminalResults(Long encounterId) {
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
result.put("encounterId", encounterId);
|
||||
|
||||
// 获取评分记录
|
||||
List<EmrQualityScore> scores = scoreMapper.selectList(
|
||||
new LambdaQueryWrapper<EmrQualityScore>()
|
||||
.eq(EmrQualityScore::getEncounterId, encounterId)
|
||||
.eq(EmrQualityScore::getCheckType, "TERMINAL")
|
||||
.orderByDesc(EmrQualityScore::getCreateTime)
|
||||
);
|
||||
|
||||
if (!scores.isEmpty()) {
|
||||
EmrQualityScore latestScore = scores.get(0);
|
||||
result.put("score", latestScore.getScore());
|
||||
result.put("grade", latestScore.getGrade());
|
||||
result.put("checkTime", latestScore.getCreateTime());
|
||||
result.put("checkerName", latestScore.getCheckerName());
|
||||
}
|
||||
|
||||
// 获取缺陷记录
|
||||
List<EmrDefect> defects = defectMapper.selectList(
|
||||
new LambdaQueryWrapper<EmrDefect>()
|
||||
.eq(EmrDefect::getEncounterId, encounterId)
|
||||
.eq(EmrDefect::getDelFlag, "0")
|
||||
.orderByDesc(EmrDefect::getReportTime)
|
||||
);
|
||||
|
||||
List<Map<String, Object>> defectList = new ArrayList<>();
|
||||
for (EmrDefect defect : defects) {
|
||||
Map<String, Object> defectMap = new HashMap<>();
|
||||
defectMap.put("id", defect.getId());
|
||||
defectMap.put("defectType", defect.getDefectType());
|
||||
defectMap.put("defectItem", defect.getDefectItem());
|
||||
defectMap.put("severity", defect.getSeverity());
|
||||
defectMap.put("rectifyStatus", defect.getRectifyStatus());
|
||||
defectMap.put("reportTime", defect.getReportTime());
|
||||
defectList.add(defectMap);
|
||||
}
|
||||
|
||||
result.put("defects", defectList);
|
||||
result.put("defectCount", defects.size());
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private String calculateGrade(BigDecimal score) {
|
||||
if (score.compareTo(new BigDecimal(90)) >= 0) {
|
||||
return "A";
|
||||
} else if (score.compareTo(new BigDecimal(75)) >= 0) {
|
||||
return "B";
|
||||
} else if (score.compareTo(new BigDecimal(60)) >= 0) {
|
||||
return "C";
|
||||
} else {
|
||||
return "D";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package com.healthlink.his.web.quality.controller;
|
||||
|
||||
import com.core.common.core.domain.AjaxResult;
|
||||
import com.healthlink.his.web.quality.appservice.ITerminalQualityAppService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
@Tag(name = "终末质控管理")
|
||||
@RestController
|
||||
@RequestMapping("/api/v1/quality/terminal")
|
||||
public class TerminalQualityController {
|
||||
|
||||
@Autowired
|
||||
private ITerminalQualityAppService terminalQualityAppService;
|
||||
|
||||
@Operation(summary = "执行终末质控检查")
|
||||
@PostMapping("/check/{encounterId}")
|
||||
@PreAuthorize("hasAuthority('inpatient:quality:edit')")
|
||||
public AjaxResult runTerminalCheck(@PathVariable Long encounterId) {
|
||||
return AjaxResult.success(terminalQualityAppService.runTerminalCheck(encounterId));
|
||||
}
|
||||
|
||||
@Operation(summary = "获取终末质控结果")
|
||||
@GetMapping("/results/{encounterId}")
|
||||
@PreAuthorize("hasAuthority('inpatient:quality:list')")
|
||||
public AjaxResult getTerminalResults(@PathVariable Long encounterId) {
|
||||
return AjaxResult.success(terminalQualityAppService.getTerminalResults(encounterId));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user