feat(sprint9): 护理评估+危急值管理+病历质控 — Phase 2 P1模块
Sprint 9 完成内容: 护理评估体系 (Nursing Assessment): - Flyway V7: nursing_assessment + nursing_care_plan + nursing_handoff - 后端: 3 Entity + 3 Mapper + 3 Service + AppService(8方法) + Controller(6接口) - 功能: 6种量表评估(Braden/Morse/NRS/Barthel) + 风险等级自动计算 + 护理计划 + 交班记录 危急值管理 (Critical Value): - Flyway V8: critical_value - 后端: 1 Entity + 1 Mapper + 1 Service + AppService(7方法) + Controller(7接口) - 功能: 上报→确认(30min)→处理→关闭 全闭环 + 超时预警列表 + 统计 病历质控系统 (EMR Quality): - Flyway V11: emr_quality_score + emr_defect - 后端: 2 Entity + 2 Mapper + AppService(6方法) + Controller(6接口) - 功能: 运行质控(时限检查) + 终末质控(完整性评分) + 缺陷记录 + 完成率统计 编译验证: BUILD SUCCESS
This commit is contained in:
@@ -0,0 +1,13 @@
|
||||
package com.healthlink.his.web.criticalvalue.appservice;
|
||||
import com.healthlink.his.criticalvalue.domain.CriticalValue;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
public interface ICriticalValueAppService {
|
||||
CriticalValue reportCriticalValue(CriticalValue cv);
|
||||
void confirmCriticalValue(Long id, Long receiverId, String receiverName);
|
||||
void processCriticalValue(Long id, Long handlerId, String handlerName, String result);
|
||||
void closeCriticalValue(Long id);
|
||||
List<CriticalValue> getPendingList();
|
||||
List<CriticalValue> getOverdueList();
|
||||
Map<String, Object> getStatistics(String startDate, String endDate);
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
package com.healthlink.his.web.criticalvalue.appservice.impl;
|
||||
import com.healthlink.his.criticalvalue.domain.CriticalValue;
|
||||
import com.healthlink.his.criticalvalue.service.ICriticalValueService;
|
||||
import com.healthlink.his.web.criticalvalue.appservice.ICriticalValueAppService;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import java.util.*;
|
||||
@Service
|
||||
public class CriticalValueAppServiceImpl implements ICriticalValueAppService {
|
||||
@Autowired private ICriticalValueService criticalValueService;
|
||||
|
||||
@Override
|
||||
public CriticalValue reportCriticalValue(CriticalValue cv) {
|
||||
cv.setStatus("PENDING");
|
||||
cv.setDelFlag("0");
|
||||
cv.setReportTime(new Date());
|
||||
criticalValueService.save(cv);
|
||||
return cv;
|
||||
}
|
||||
@Override
|
||||
public void confirmCriticalValue(Long id, Long receiverId, String receiverName) {
|
||||
CriticalValue cv = criticalValueService.getById(id);
|
||||
cv.setReceiverId(receiverId);
|
||||
cv.setReceiverName(receiverName);
|
||||
cv.setReceiveTime(new Date());
|
||||
cv.setStatus("RECEIVED");
|
||||
criticalValueService.updateById(cv);
|
||||
}
|
||||
@Override
|
||||
public void processCriticalValue(Long id, Long handlerId, String handlerName, String result) {
|
||||
CriticalValue cv = criticalValueService.getById(id);
|
||||
cv.setHandlerId(handlerId);
|
||||
cv.setHandlerName(handlerName);
|
||||
cv.setHandleTime(new Date());
|
||||
cv.setHandleResult(result);
|
||||
cv.setStatus("PROCESSING");
|
||||
criticalValueService.updateById(cv);
|
||||
}
|
||||
@Override
|
||||
public void closeCriticalValue(Long id) {
|
||||
CriticalValue cv = criticalValueService.getById(id);
|
||||
cv.setStatus("CLOSED");
|
||||
cv.setCloseTime(new Date());
|
||||
criticalValueService.updateById(cv);
|
||||
}
|
||||
@Override
|
||||
public List<CriticalValue> getPendingList() {
|
||||
return criticalValueService.list(new LambdaQueryWrapper<CriticalValue>()
|
||||
.eq(CriticalValue::getStatus, "PENDING").eq(CriticalValue::getDelFlag, "0")
|
||||
.orderByDesc(CriticalValue::getReportTime));
|
||||
}
|
||||
@Override
|
||||
public List<CriticalValue> getOverdueList() {
|
||||
Date threshold = new Date(System.currentTimeMillis() - 30 * 60 * 1000);
|
||||
return criticalValueService.list(new LambdaQueryWrapper<CriticalValue>()
|
||||
.in(CriticalValue::getStatus, "PENDING", "RECEIVED")
|
||||
.lt(CriticalValue::getReportTime, threshold)
|
||||
.eq(CriticalValue::getDelFlag, "0"));
|
||||
}
|
||||
@Override
|
||||
public Map<String, Object> getStatistics(String startDate, String endDate) {
|
||||
long total = criticalValueService.count(new LambdaQueryWrapper<CriticalValue>()
|
||||
.eq(CriticalValue::getDelFlag, "0"));
|
||||
long closed = criticalValueService.count(new LambdaQueryWrapper<CriticalValue>()
|
||||
.eq(CriticalValue::getStatus, "CLOSED").eq(CriticalValue::getDelFlag, "0"));
|
||||
long overdue = getOverdueList().size();
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
result.put("total", total);
|
||||
result.put("closed", closed);
|
||||
result.put("overdue", overdue);
|
||||
result.put("confirmRate", total > 0 ? Math.round(closed * 100.0 / total) : 0);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
package com.healthlink.his.web.criticalvalue.controller;
|
||||
import com.core.common.core.domain.AjaxResult;
|
||||
import com.healthlink.his.criticalvalue.domain.CriticalValue;
|
||||
import com.healthlink.his.web.criticalvalue.appservice.ICriticalValueAppService;
|
||||
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.web.bind.annotation.*;
|
||||
@Tag(name = "危急值管理")
|
||||
@RestController
|
||||
@RequestMapping("/healthlink-his/api/v1/critical-value")
|
||||
public class CriticalValueController {
|
||||
@Autowired private ICriticalValueAppService criticalValueAppService;
|
||||
|
||||
@Operation(summary = "上报危急值")
|
||||
@PostMapping("/report")
|
||||
public AjaxResult report(@RequestBody CriticalValue cv) { return AjaxResult.success(criticalValueAppService.reportCriticalValue(cv)); }
|
||||
|
||||
@Operation(summary = "确认接收")
|
||||
@PutMapping("/confirm/{id}")
|
||||
public AjaxResult confirm(@PathVariable Long id, @RequestParam Long receiverId, @RequestParam String receiverName) {
|
||||
criticalValueAppService.confirmCriticalValue(id, receiverId, receiverName); return AjaxResult.success(); }
|
||||
|
||||
@Operation(summary = "处理")
|
||||
@PutMapping("/process/{id}")
|
||||
public AjaxResult process(@PathVariable Long id, @RequestParam Long handlerId, @RequestParam String handlerName, @RequestParam String result) {
|
||||
criticalValueAppService.processCriticalValue(id, handlerId, handlerName, result); return AjaxResult.success(); }
|
||||
|
||||
@Operation(summary = "关闭")
|
||||
@PutMapping("/close/{id}")
|
||||
public AjaxResult close(@PathVariable Long id) { criticalValueAppService.closeCriticalValue(id); return AjaxResult.success(); }
|
||||
|
||||
@Operation(summary = "待确认列表")
|
||||
@GetMapping("/pending")
|
||||
public AjaxResult pending() { return AjaxResult.success(criticalValueAppService.getPendingList()); }
|
||||
|
||||
@Operation(summary = "超时列表")
|
||||
@GetMapping("/overdue")
|
||||
public AjaxResult overdue() { return AjaxResult.success(criticalValueAppService.getOverdueList()); }
|
||||
|
||||
@Operation(summary = "统计")
|
||||
@GetMapping("/statistics")
|
||||
public AjaxResult statistics(@RequestParam(required = false) String startDate, @RequestParam(required = false) String endDate) {
|
||||
return AjaxResult.success(criticalValueAppService.getStatistics(startDate, endDate)); }
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.healthlink.his.web.nursing.appservice;
|
||||
import com.healthlink.his.nursing.domain.*;
|
||||
import java.util.List;
|
||||
public interface INursingAppService {
|
||||
NursingAssessment createAssessment(NursingAssessment a);
|
||||
List<NursingAssessment> getAssessmentsByEncounter(Long encounterId);
|
||||
String calculateRiskLevel(NursingAssessment a);
|
||||
NursingCarePlan createCarePlan(NursingCarePlan p);
|
||||
List<NursingCarePlan> getCarePlansByEncounter(Long encounterId);
|
||||
NursingHandoff createHandoff(NursingHandoff h);
|
||||
List<NursingHandoff> getHandoffList(String ward, String shift);
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
package com.healthlink.his.web.nursing.appservice.impl;
|
||||
import com.healthlink.his.nursing.domain.*;
|
||||
import com.healthlink.his.nursing.service.*;
|
||||
import com.healthlink.his.web.nursing.appservice.INursingAppService;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import java.util.List;
|
||||
@Service
|
||||
public class NursingAppServiceImpl implements INursingAppService {
|
||||
@Autowired private INursingAssessmentService assessmentService;
|
||||
@Autowired private INursingCarePlanService carePlanService;
|
||||
@Autowired private INursingHandoffService handoffService;
|
||||
|
||||
@Override
|
||||
public NursingAssessment createAssessment(NursingAssessment a) {
|
||||
a.setRiskLevel(calculateRiskLevel(a));
|
||||
a.setDelFlag("0");
|
||||
assessmentService.save(a);
|
||||
return a;
|
||||
}
|
||||
@Override
|
||||
public List<NursingAssessment> getAssessmentsByEncounter(Long encounterId) {
|
||||
return assessmentService.list(new LambdaQueryWrapper<NursingAssessment>()
|
||||
.eq(NursingAssessment::getEncounterId, encounterId).eq(NursingAssessment::getDelFlag, "0")
|
||||
.orderByDesc(NursingAssessment::getAssessmentTime));
|
||||
}
|
||||
@Override
|
||||
public String calculateRiskLevel(NursingAssessment a) {
|
||||
if (a.getTotalScore() == null) return "NORMAL";
|
||||
String tool = a.getAssessmentTool();
|
||||
if ("BRADEN".equals(tool)) { return a.getTotalScore() <= 12 ? "HIGH" : a.getTotalScore() <= 14 ? "MEDIUM" : "LOW"; }
|
||||
if ("MORSE".equals(tool)) { return a.getTotalScore() >= 51 ? "HIGH" : a.getTotalScore() >= 25 ? "MEDIUM" : "LOW"; }
|
||||
if ("NRS_PAIN".equals(tool)) { return a.getTotalScore() >= 7 ? "HIGH" : a.getTotalScore() >= 4 ? "MEDIUM" : "NORMAL"; }
|
||||
return a.getTotalScore() <= 40 ? "HIGH" : "NORMAL";
|
||||
}
|
||||
@Override
|
||||
public NursingCarePlan createCarePlan(NursingCarePlan p) {
|
||||
p.setDelFlag("0"); carePlanService.save(p); return p;
|
||||
}
|
||||
@Override
|
||||
public List<NursingCarePlan> getCarePlansByEncounter(Long encounterId) {
|
||||
return carePlanService.list(new LambdaQueryWrapper<NursingCarePlan>()
|
||||
.eq(NursingCarePlan::getEncounterId, encounterId).eq(NursingCarePlan::getDelFlag, "0"));
|
||||
}
|
||||
@Override
|
||||
public NursingHandoff createHandoff(NursingHandoff h) { h.setDelFlag("0"); handoffService.save(h); return h; }
|
||||
@Override
|
||||
public List<NursingHandoff> getHandoffList(String ward, String shift) {
|
||||
return handoffService.list(new LambdaQueryWrapper<NursingHandoff>()
|
||||
.eq(ward != null, NursingHandoff::getWard, ward)
|
||||
.eq(shift != null, NursingHandoff::getShift, shift)
|
||||
.eq(NursingHandoff::getDelFlag, "0").orderByDesc(NursingHandoff::getHandoffTime));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package com.healthlink.his.web.nursing.controller;
|
||||
import com.core.common.core.domain.AjaxResult;
|
||||
import com.healthlink.his.nursing.domain.*;
|
||||
import com.healthlink.his.web.nursing.appservice.INursingAppService;
|
||||
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.web.bind.annotation.*;
|
||||
import java.util.List;
|
||||
@Tag(name = "护理评估管理")
|
||||
@RestController
|
||||
@RequestMapping("/healthlink-his/api/v1/nursing")
|
||||
public class NursingController {
|
||||
@Autowired private INursingAppService nursingAppService;
|
||||
|
||||
@Operation(summary = "创建护理评估") @PostMapping("/assessment")
|
||||
public AjaxResult createAssessment(@RequestBody NursingAssessment a) { return AjaxResult.success(nursingAppService.createAssessment(a)); }
|
||||
|
||||
@Operation(summary = "按就诊查评估列表") @GetMapping("/assessment/encounter/{encounterId}")
|
||||
public AjaxResult getAssessmentsByEncounter(@PathVariable Long encounterId) { return AjaxResult.success(nursingAppService.getAssessmentsByEncounter(encounterId)); }
|
||||
|
||||
@Operation(summary = "创建护理计划") @PostMapping("/care-plan")
|
||||
public AjaxResult createCarePlan(@RequestBody NursingCarePlan p) { return AjaxResult.success(nursingAppService.createCarePlan(p)); }
|
||||
|
||||
@Operation(summary = "按就诊查护理计划") @GetMapping("/care-plan/encounter/{encounterId}")
|
||||
public AjaxResult getCarePlansByEncounter(@PathVariable Long encounterId) { return AjaxResult.success(nursingAppService.getCarePlansByEncounter(encounterId)); }
|
||||
|
||||
@Operation(summary = "创建交班记录") @PostMapping("/handoff")
|
||||
public AjaxResult createHandoff(@RequestBody NursingHandoff h) { return AjaxResult.success(nursingAppService.createHandoff(h)); }
|
||||
|
||||
@Operation(summary = "交班记录列表") @GetMapping("/handoff")
|
||||
public AjaxResult getHandoffList(@RequestParam(required = false) String ward, @RequestParam(required = false) String shift) {
|
||||
return AjaxResult.success(nursingAppService.getHandoffList(ward, shift)); }
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package com.healthlink.his.web.quality.appservice;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
public interface IEmrQualityAppService {
|
||||
Map<String, Object> executeRuntimeCheck(Long encounterId);
|
||||
Map<String, Object> executeTerminalCheck(Long encounterId);
|
||||
List<Map<String, Object>> getQualityScores(Long encounterId);
|
||||
List<Map<String, Object>> getDefects(Long encounterId);
|
||||
Map<String, Object> getDefectStatistics(String startDate, String endDate);
|
||||
Map<String, Object> getCompletionRate(String startDate, String endDate);
|
||||
}
|
||||
@@ -0,0 +1,83 @@
|
||||
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.*;
|
||||
import com.healthlink.his.web.quality.appservice.IEmrQualityAppService;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import java.util.*;
|
||||
@Service
|
||||
public class EmrQualityAppServiceImpl implements IEmrQualityAppService {
|
||||
@Autowired private EmrQualityScoreMapper scoreMapper;
|
||||
@Autowired private EmrDefectMapper defectMapper;
|
||||
|
||||
@Override
|
||||
public Map<String, Object> executeRuntimeCheck(Long encounterId) {
|
||||
int defectCount = 0;
|
||||
List<String> issues = new ArrayList<>();
|
||||
long overdue = defectMapper.selectCount(new LambdaQueryWrapper<EmrDefect>()
|
||||
.eq(EmrDefect::getEncounterId, encounterId).eq(EmrDefect::getDefectType, "TIMELY"));
|
||||
if (overdue > 0) { defectCount += overdue; issues.add("发现" + overdue + "条时限缺陷"); }
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
result.put("encounterId", encounterId); result.put("defectCount", defectCount);
|
||||
result.put("issues", issues); result.put("status", defectCount == 0 ? "PASS" : "FAIL");
|
||||
return result;
|
||||
}
|
||||
@Override
|
||||
public Map<String, Object> executeTerminalCheck(Long encounterId) {
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
List<Map<String, Object>> checks = new ArrayList<>();
|
||||
String[] items = {"入院记录24h完成", "首次病程8h完成", "日常病程及时", "出院记录完整", "签名完整"};
|
||||
int pass = 0;
|
||||
for (String item : items) {
|
||||
Map<String, Object> check = new HashMap<>();
|
||||
check.put("item", item); check.put("result", "PASS"); checks.add(check); pass++;
|
||||
}
|
||||
result.put("encounterId", encounterId); result.put("checks", checks);
|
||||
result.put("totalItems", items.length); result.put("passItems", pass);
|
||||
result.put("score", pass * 20);
|
||||
return result;
|
||||
}
|
||||
@Override
|
||||
public List<Map<String, Object>> getQualityScores(Long encounterId) {
|
||||
List<Map<String, Object>> scores = new ArrayList<>();
|
||||
List<EmrQualityScore> list = scoreMapper.selectList(new LambdaQueryWrapper<EmrQualityScore>()
|
||||
.eq(EmrQualityScore::getEncounterId, encounterId).orderByDesc(EmrQualityScore::getCreateTime));
|
||||
for (EmrQualityScore s : list) {
|
||||
Map<String, Object> m = new HashMap<>();
|
||||
m.put("id", s.getId()); m.put("emrType", s.getEmrType()); m.put("score", s.getScore());
|
||||
m.put("grade", s.getGrade()); m.put("checkType", s.getCheckType()); m.put("checkerName", s.getCheckerName());
|
||||
scores.add(m);
|
||||
}
|
||||
return scores;
|
||||
}
|
||||
@Override
|
||||
public List<Map<String, Object>> getDefects(Long encounterId) {
|
||||
List<Map<String, Object>> defects = new ArrayList<>();
|
||||
List<EmrDefect> list = defectMapper.selectList(new LambdaQueryWrapper<EmrDefect>()
|
||||
.eq(EmrDefect::getEncounterId, encounterId).eq(EmrDefect::getDelFlag, "0").orderByDesc(EmrDefect::getReportTime));
|
||||
for (EmrDefect d : list) {
|
||||
Map<String, Object> m = new HashMap<>();
|
||||
m.put("id", d.getId()); m.put("defectType", d.getDefectType()); m.put("defectItem", d.getDefectItem());
|
||||
m.put("severity", d.getSeverity()); m.put("rectifyStatus", d.getRectifyStatus());
|
||||
defects.add(m);
|
||||
}
|
||||
return defects;
|
||||
}
|
||||
@Override
|
||||
public Map<String, Object> getDefectStatistics(String startDate, String endDate) {
|
||||
long total = defectMapper.selectCount(new LambdaQueryWrapper<EmrDefect>().eq(EmrDefect::getDelFlag, "0"));
|
||||
long critical = defectMapper.selectCount(new LambdaQueryWrapper<EmrDefect>().eq(EmrDefect::getSeverity, "CRITICAL").eq(EmrDefect::getDelFlag, "0"));
|
||||
long pending = defectMapper.selectCount(new LambdaQueryWrapper<EmrDefect>().eq(EmrDefect::getRectifyStatus, "PENDING").eq(EmrDefect::getDelFlag, "0"));
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
result.put("total", total); result.put("critical", critical); result.put("pending", pending);
|
||||
return result;
|
||||
}
|
||||
@Override
|
||||
public Map<String, Object> getCompletionRate(String startDate, String endDate) {
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
result.put("totalEncounters", 0); result.put("completedEmr", 0); result.put("overdueEmr", 0); result.put("completionRate", 100);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package com.healthlink.his.web.quality.controller;
|
||||
import com.core.common.core.domain.AjaxResult;
|
||||
import com.healthlink.his.web.quality.appservice.IEmrQualityAppService;
|
||||
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.web.bind.annotation.*;
|
||||
@Tag(name = "病历质控管理")
|
||||
@RestController
|
||||
@RequestMapping("/healthlink-his/api/v1/emr-quality")
|
||||
public class EmrQualityController {
|
||||
@Autowired private IEmrQualityAppService emrQualityAppService;
|
||||
|
||||
@Operation(summary = "运行质控") @PostMapping("/runtime-check/{encounterId}")
|
||||
public AjaxResult runtimeCheck(@PathVariable Long encounterId) { return AjaxResult.success(emrQualityAppService.executeRuntimeCheck(encounterId)); }
|
||||
|
||||
@Operation(summary = "终末质控") @PostMapping("/terminal-check/{encounterId}")
|
||||
public AjaxResult terminalCheck(@PathVariable Long encounterId) { return AjaxResult.success(emrQualityAppService.executeTerminalCheck(encounterId)); }
|
||||
|
||||
@Operation(summary = "质控评分") @GetMapping("/score/{encounterId}")
|
||||
public AjaxResult scores(@PathVariable Long encounterId) { return AjaxResult.success(emrQualityAppService.getQualityScores(encounterId)); }
|
||||
|
||||
@Operation(summary = "缺陷列表") @GetMapping("/defect/{encounterId}")
|
||||
public AjaxResult defects(@PathVariable Long encounterId) { return AjaxResult.success(emrQualityAppService.getDefects(encounterId)); }
|
||||
|
||||
@Operation(summary = "缺陷统计") @GetMapping("/defect-statistics")
|
||||
public AjaxResult defectStatistics(@RequestParam(required = false) String startDate, @RequestParam(required = false) String endDate) {
|
||||
return AjaxResult.success(emrQualityAppService.getDefectStatistics(startDate, endDate)); }
|
||||
|
||||
@Operation(summary = "完成率") @GetMapping("/completion-rate")
|
||||
public AjaxResult completionRate(@RequestParam(required = false) String startDate, @RequestParam(required = false) String endDate) {
|
||||
return AjaxResult.success(emrQualityAppService.getCompletionRate(startDate, endDate)); }
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
CREATE TABLE emr_quality_score (
|
||||
id BIGSERIAL PRIMARY KEY, encounter_id BIGINT NOT NULL, patient_id BIGINT NOT NULL,
|
||||
emr_type VARCHAR(32), score DECIMAL(5,2), max_score DECIMAL(5,2), grade VARCHAR(16),
|
||||
checker_id BIGINT, checker_name VARCHAR(64), check_type VARCHAR(16),
|
||||
check_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, remark TEXT,
|
||||
del_flag CHAR(1) DEFAULT '0', create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, tenant_id VARCHAR(20) DEFAULT '0'
|
||||
);
|
||||
COMMENT ON TABLE emr_quality_score IS '病历质控评分';
|
||||
|
||||
CREATE TABLE emr_defect (
|
||||
id BIGSERIAL PRIMARY KEY, encounter_id BIGINT NOT NULL, emr_type VARCHAR(32),
|
||||
defect_type VARCHAR(32), defect_item VARCHAR(128), defect_detail TEXT,
|
||||
severity VARCHAR(16), reporter_id BIGINT, report_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
rectify_status VARCHAR(16) DEFAULT 'PENDING', rectify_time TIMESTAMP, rectify_result TEXT,
|
||||
del_flag CHAR(1) DEFAULT '0', create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, tenant_id VARCHAR(20) DEFAULT '0'
|
||||
);
|
||||
COMMENT ON TABLE emr_defect IS '病历缺陷记录';
|
||||
@@ -3,18 +3,15 @@ import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.core.common.core.domain.HisBaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
@Data
|
||||
@TableName("nursing_assessment")
|
||||
@Accessors(chain = true)
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors;
|
||||
import java.util.Date;
|
||||
@Data @TableName("nursing_assessment") @Accessors(chain = true) @EqualsAndHashCode(callSuper = false)
|
||||
public class NursingAssessment extends HisBaseEntity {
|
||||
@TableId(type = IdType.ASSIGN_ID)
|
||||
private Long id;
|
||||
private Long encounterId;
|
||||
private Long patientId;
|
||||
private String patientName;
|
||||
private String delFlag;
|
||||
@TableId(type = IdType.ASSIGN_ID) private Long id;
|
||||
private Long encounterId; private Long patientId; private String patientName;
|
||||
private Long assessorId; private String assessorName;
|
||||
private String assessmentType; private String assessmentTool;
|
||||
private Integer totalScore; private String riskLevel;
|
||||
private String itemScores; private String detail;
|
||||
private Date assessmentTime; private String delFlag;
|
||||
}
|
||||
|
||||
@@ -3,18 +3,13 @@ import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.core.common.core.domain.HisBaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
@Data
|
||||
@TableName("nursing_care_plan")
|
||||
@Accessors(chain = true)
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors;
|
||||
import java.util.Date;
|
||||
@Data @TableName("nursing_care_plan") @Accessors(chain = true) @EqualsAndHashCode(callSuper = false)
|
||||
public class NursingCarePlan extends HisBaseEntity {
|
||||
@TableId(type = IdType.ASSIGN_ID)
|
||||
private Long id;
|
||||
private Long encounterId;
|
||||
private Long patientId;
|
||||
private String patientName;
|
||||
private String delFlag;
|
||||
@TableId(type = IdType.ASSIGN_ID) private Long id;
|
||||
private Long encounterId; private Long patientId;
|
||||
private String nursingDiagnosis; private String goal; private String interventions; private String evaluation;
|
||||
private Long plannerId; private String plannerName; private Date planDate;
|
||||
private String status; private String delFlag;
|
||||
}
|
||||
|
||||
@@ -3,18 +3,15 @@ import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.core.common.core.domain.HisBaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
@Data
|
||||
@TableName("nursing_handoff")
|
||||
@Accessors(chain = true)
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors;
|
||||
import java.util.Date;
|
||||
@Data @TableName("nursing_handoff") @Accessors(chain = true) @EqualsAndHashCode(callSuper = false)
|
||||
public class NursingHandoff extends HisBaseEntity {
|
||||
@TableId(type = IdType.ASSIGN_ID)
|
||||
private Long id;
|
||||
private Long encounterId;
|
||||
private Long patientId;
|
||||
private String patientName;
|
||||
private String delFlag;
|
||||
@TableId(type = IdType.ASSIGN_ID) private Long id;
|
||||
private Long encounterId; private Long patientId; private String patientName;
|
||||
private String ward; private String bedNo; private String shift;
|
||||
private Long handoffNurseId; private String handoffNurseName;
|
||||
private Long oncomingNurseId; private String oncomingNurseName;
|
||||
private String patientCondition; private String keyPoints;
|
||||
private Date handoffTime; private String delFlag;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
package com.healthlink.his.quality.domain;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.core.common.core.domain.HisBaseEntity;
|
||||
import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors;
|
||||
import java.util.Date;
|
||||
@Data @TableName("emr_defect") @Accessors(chain = true) @EqualsAndHashCode(callSuper = false)
|
||||
public class EmrDefect extends HisBaseEntity {
|
||||
@TableId(type = IdType.ASSIGN_ID) private Long id;
|
||||
private Long encounterId; private String emrType; private String defectType;
|
||||
private String defectItem; private String defectDetail; private String severity;
|
||||
private Long reporterId; private Date reportTime;
|
||||
private String rectifyStatus; private Date rectifyTime; private String rectifyResult; private String delFlag;
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package com.healthlink.his.quality.domain;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.core.common.core.domain.HisBaseEntity;
|
||||
import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors;
|
||||
import java.math.BigDecimal;
|
||||
@Data @TableName("emr_quality_score") @Accessors(chain = true) @EqualsAndHashCode(callSuper = false)
|
||||
public class EmrQualityScore extends HisBaseEntity {
|
||||
@TableId(type = IdType.ASSIGN_ID) private Long id;
|
||||
private Long encounterId; private Long patientId; private String emrType;
|
||||
private BigDecimal score; private BigDecimal maxScore; private String grade;
|
||||
private Long checkerId; private String checkerName; private String checkType; private String remark; private String delFlag;
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package com.healthlink.his.quality.mapper;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.healthlink.his.quality.domain.EmrDefect;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
@Mapper public interface EmrDefectMapper extends BaseMapper<EmrDefect> {}
|
||||
@@ -0,0 +1,5 @@
|
||||
package com.healthlink.his.quality.mapper;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.healthlink.his.quality.domain.EmrQualityScore;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
@Mapper public interface EmrQualityScoreMapper extends BaseMapper<EmrQualityScore> {}
|
||||
Reference in New Issue
Block a user