diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/check/controller/CheckTypeController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/check/controller/CheckTypeController.java index 3dd4a911..6ff69a4e 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/check/controller/CheckTypeController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/check/controller/CheckTypeController.java @@ -6,11 +6,14 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.core.common.core.controller.BaseController; import com.core.common.core.domain.AjaxResult; import com.core.common.core.domain.R; +import com.core.common.utils.SecurityUtils; import com.openhis.check.domain.CheckMethod; import com.openhis.check.domain.CheckPackage; +import com.openhis.check.domain.CheckPackageDetail; import com.openhis.check.domain.CheckPart; import com.openhis.check.domain.CheckType; import com.openhis.check.service.ICheckMethodService; +import com.openhis.check.service.ICheckPackageDetailService; import com.openhis.check.service.ICheckPackageService; import com.openhis.check.service.ICheckPartService; import com.openhis.check.service.ICheckTypeService; @@ -33,7 +36,7 @@ import java.util.stream.Collectors; * @updated 2025-11-26 - 增加套餐设置相关接口 */ @RestController -@RequestMapping({"/system/check-type", "/system"}) +@RequestMapping({ "/system/check-type", "/system" }) @Slf4j @AllArgsConstructor public class CheckTypeController extends BaseController { @@ -42,6 +45,7 @@ public class CheckTypeController extends BaseController { private final ICheckMethodService checkMethodService; private final ICheckPartService checkPartService; private final ICheckPackageService checkPackageService; + private final ICheckPackageDetailService checkPackageDetailService; private final ICheckPackageAppService checkPackageAppService; /** @@ -52,15 +56,15 @@ public class CheckTypeController extends BaseController { @RequestParam(defaultValue = "1") Integer pageNo, @RequestParam(defaultValue = "10") Integer pageSize) { - if (pageSize > 10) pageSize = 10; + if (pageSize > 10) + pageSize = 10; // 1. 分页查询父节点(NULL + 0 都算父) Page parentPage = checkTypeService.page( new Page<>(pageNo, pageSize), new QueryWrapper() .and(w -> w.isNull("parent_id").or().eq("parent_id", 0)) - .orderByAsc("id") - ); + .orderByAsc("id")); if (parentPage.getRecords().isEmpty()) { return AjaxResult.success(parentPage); @@ -74,12 +78,10 @@ public class CheckTypeController extends BaseController { // 3. 查询子节点 List children = checkTypeService.list( - new QueryWrapper().in("parent_id", parentIds) - ); + new QueryWrapper().in("parent_id", parentIds)); // 4. 分组 - Map> childMap = - children.stream().collect(Collectors.groupingBy(CheckType::getParentId)); + Map> childMap = children.stream().collect(Collectors.groupingBy(CheckType::getParentId)); // 5. 拼接父 + 子 List result = new ArrayList<>(); @@ -92,34 +94,137 @@ public class CheckTypeController extends BaseController { } // 6. 返回(total 是父节点总数) - Page page = - new Page<>(pageNo, pageSize, parentPage.getTotal()); + Page page = new Page<>(pageNo, pageSize, parentPage.getTotal()); page.setRecords(result); return AjaxResult.success(page); } + /** * 获取检查方法列表 */ - @GetMapping({"/method/list", "/check-method/list"}) + @GetMapping({ "/method/list", "/check-method/list" }) public AjaxResult methodList() { List list = checkMethodService.list(); return AjaxResult.success(list); } - + /** * 获取检查部位列表 */ - @GetMapping({"/part/list", "/check-part/list"}) + @GetMapping({ "/part/list", "/check-part/list" }) public AjaxResult partList() { List list = checkPartService.list(); return AjaxResult.success(list); } + /** + * 根据当前登录用户过滤可见的检查套餐项目(差异化显示) + *

+ * 过滤规则: + * 1. 全院套餐(packageLevel="1"):任何医生可见 + * 2. 科室套餐(packageLevel="2"):仅当前科室医生可见(需传 deptName) + * 3. 个人套餐(packageLevel="3"):仅当前登录用户可见 + *

+ * + * @param deptName 当前登录用户所在科室名称(由前端传入) + * @return 可用套餐列表(含明细检查项目) + */ + @GetMapping({ "/package/filtered", "/check-package/filtered" }) + public AjaxResult getFilteredPackages(@RequestParam(required = false) String deptName) { + // 获取当前登录用户名,用于匹配个人套餐 + String currentUsername; + try { + currentUsername = SecurityUtils.getUsername(); + } catch (Exception e) { + currentUsername = null; + } + + // 查询未停用(isDisabled=0)的全部套餐 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper() + .eq(CheckPackage::getIsDisabled, 0) + .orderByAsc(CheckPackage::getNumber); + List allPackages = checkPackageService.list(wrapper); + + // 按照三级规则筛选出本次登录用户可见的套餐 + final String finalUsername = currentUsername; + final String finalDept = (deptName != null) ? deptName.trim() : ""; + List visiblePackages = allPackages.stream().filter(pkg -> { + String level = pkg.getPackageLevel(); // 1:全院 2:科室 3:个人 + if ("1".equals(level)) { + // 全院套餐 - 所有人可见 + return true; + } else if ("2".equals(level)) { + // 科室套餐 - department 字段包含当前科室 + String dept = pkg.getDepartment(); + return dept != null && !finalDept.isEmpty() && dept.contains(finalDept); + } else if ("3".equals(level)) { + // 个人套餐 - user 字段包含当前账号 + String user = pkg.getUser(); + return user != null && finalUsername != null && user.contains(finalUsername); + } + return false; + }).collect(Collectors.toList()); + + if (visiblePackages.isEmpty()) { + return AjaxResult.success(Collections.emptyList()); + } + + // 批量查明细,拼装返回结构 + List packageIds = visiblePackages.stream().map(CheckPackage::getId).collect(Collectors.toList()); + List details = checkPackageDetailService.list( + new LambdaQueryWrapper().in(CheckPackageDetail::getPackageId, packageIds)); + // 按套餐ID分组明细 + Map> detailMap = details.stream() + .collect(Collectors.groupingBy(CheckPackageDetail::getPackageId)); + + // 构造返回视图:每个套餐是一个分组,下挂若干检查项目 + List> result = visiblePackages.stream().map(pkg -> { + Map group = new LinkedHashMap<>(); + group.put("packageId", pkg.getId()); + group.put("packageName", pkg.getPackageName()); + group.put("packageLevel", pkg.getPackageLevel()); // 1/2/3 + group.put("packageLevelText", parseLevelText(pkg.getPackageLevel())); + group.put("packagePrice", pkg.getPackagePrice()); + group.put("serviceFee", pkg.getServiceFee()); + group.put("packagePriceEnabled", pkg.getPackagePriceEnabled()); + // 明细列表 + List> items = (detailMap.getOrDefault(pkg.getId(), Collections.emptyList())) + .stream().map(d -> { + Map item = new LinkedHashMap<>(); + item.put("id", d.getId()); + item.put("packageId", d.getPackageId()); + item.put("itemCode", d.getItemCode()); + item.put("itemName", d.getItemName()); + item.put("unitPrice", d.getUnitPrice()); // 单价 + item.put("amount", d.getAmount()); // 金额 + item.put("serviceCharge", d.getServiceCharge()); // 服务费 + item.put("quantity", d.getQuantity()); + item.put("orderNum", d.getOrderNum()); + return item; + }).collect(Collectors.toList()); + group.put("items", items); + return group; + }).collect(Collectors.toList()); + + return AjaxResult.success(result); + } + + /** 套餐级别文字映射 */ + private String parseLevelText(String level) { + if ("1".equals(level)) + return "全院"; + if ("2".equals(level)) + return "科室"; + if ("3".equals(level)) + return "个人"; + return "未知"; + } + /** * 获取检查套餐列表(支持分页和筛选) */ - @GetMapping({"/package/list", "/check-package/list"}) + @GetMapping({ "/package/list", "/check-package/list" }) public AjaxResult packageList( @RequestParam(required = false) Integer pageNo, @RequestParam(required = false) Integer pageSize, @@ -131,9 +236,9 @@ public class CheckTypeController extends BaseController { @RequestParam(required = false) String user, @RequestParam(required = false) String startDate, @RequestParam(required = false) String endDate) { - + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - + // 添加筛选条件 if (organization != null && !organization.isEmpty()) { wrapper.eq(CheckPackage::getOrganization, organization); @@ -159,20 +264,20 @@ public class CheckTypeController extends BaseController { if (endDate != null && !endDate.isEmpty()) { wrapper.le(CheckPackage::getMaintainDate, LocalDate.parse(endDate)); } - + // 按更新时间倒序排列 wrapper.orderByDesc(CheckPackage::getUpdateTime); - + // 如果需要分页 if (pageNo != null && pageSize != null) { - com.baomidou.mybatisplus.extension.plugins.pagination.Page page = - new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(pageNo, pageSize); - com.baomidou.mybatisplus.extension.plugins.pagination.Page result = - checkPackageService.page(page, wrapper); + com.baomidou.mybatisplus.extension.plugins.pagination.Page page = new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>( + pageNo, pageSize); + com.baomidou.mybatisplus.extension.plugins.pagination.Page result = checkPackageService + .page(page, wrapper); return AjaxResult.success(result); } else { List list = checkPackageService.list(wrapper); - return AjaxResult.success(list); + return AjaxResult.success(list); } } @@ -203,7 +308,7 @@ public class CheckTypeController extends BaseController { /** * 根据ID获取检查套餐详情 */ - @GetMapping({"/package/{id}", "/check-package/{id}"}) + @GetMapping({ "/package/{id}", "/check-package/{id}" }) public R getCheckPackageById(@PathVariable Long id) { return checkPackageAppService.getCheckPackageById(id); } @@ -211,7 +316,7 @@ public class CheckTypeController extends BaseController { /** * 新增检查套餐 */ - @PostMapping({"/package", "/check-package"}) + @PostMapping({ "/package", "/check-package" }) public R addCheckPackage(@Valid @RequestBody CheckPackageDto checkPackageDto) { return checkPackageAppService.addCheckPackage(checkPackageDto); } @@ -219,7 +324,7 @@ public class CheckTypeController extends BaseController { /** * 更新检查套餐 */ - @PutMapping({"/package", "/check-package"}) + @PutMapping({ "/package", "/check-package" }) public R updateCheckPackage(@Valid @RequestBody CheckPackageDto checkPackageDto) { return checkPackageAppService.updateCheckPackage(checkPackageDto); } @@ -227,7 +332,7 @@ public class CheckTypeController extends BaseController { /** * 删除检查套餐 */ - @DeleteMapping({"/package/{id}", "/check-package/{id}"}) + @DeleteMapping({ "/package/{id}", "/check-package/{id}" }) public R deleteCheckPackage(@PathVariable Long id) { return checkPackageAppService.deleteCheckPackage(id); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/check/controller/ExamApplyController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/check/controller/ExamApplyController.java new file mode 100644 index 00000000..93e95050 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/check/controller/ExamApplyController.java @@ -0,0 +1,478 @@ +package com.openhis.web.check.controller; + +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.core.common.core.controller.BaseController; +import com.core.common.core.domain.AjaxResult; +import com.core.common.core.page.TableDataInfo; +import com.core.common.utils.AssignSeqUtil; +import com.core.common.utils.SecurityUtils; +import com.openhis.administration.domain.ChargeItem; +import com.openhis.administration.service.IChargeItemService; +import com.openhis.check.domain.ExamApply; +import com.openhis.check.domain.ExamApplyItem; +import com.openhis.check.service.IExamApplyItemService; +import com.openhis.check.service.IExamApplyService; +import com.openhis.common.constant.CommonConstants; +import com.openhis.common.enums.AssignSeqEnum; +import com.openhis.common.enums.ChargeItemStatus; +import com.openhis.common.enums.GenerateSource; +import com.openhis.common.enums.RequestStatus; +import com.openhis.web.check.dto.ExamApplyDto; +import com.openhis.web.check.dto.ExamApplyItemDto; +import com.openhis.workflow.domain.ServiceRequest; +import com.openhis.workflow.service.IServiceRequestService; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +import java.util.Date; +import java.util.List; + +/** + * 检查申请主表 Controller + *

+ * 核心职责:检查申请单的增删查,保存时同步写入门诊医嘱表(wor_service_request) + * 和费用项表(adm_charge_item),删除时级联清理,保证业务数据闭环。 + *

+ */ +@RestController +@RequestMapping("/exam/apply") +public class ExamApplyController extends BaseController { + + @Autowired + private IExamApplyService examApplyService; + + @Autowired + private IExamApplyItemService examApplyItemService; + + @Autowired + private IServiceRequestService serviceRequestService; + + @Autowired + private IChargeItemService chargeItemService; + + @Autowired + private AssignSeqUtil assignSeqUtil; + + /** + * 查询检查申请单列表 + */ + @GetMapping("/list") + public TableDataInfo list(ExamApply examApply) { + startPage(); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + if (examApply.getVisitNo() != null) { + wrapper.eq(ExamApply::getVisitNo, examApply.getVisitNo()); + } + wrapper.orderByDesc(ExamApply::getApplyTime); + List list = examApplyService.list(wrapper); + + // 为每条申请单计算总金额 + for (ExamApply apply : list) { + List items = examApplyItemService.list( + new LambdaQueryWrapper() + .eq(ExamApplyItem::getApplyNo, apply.getApplyNo())); + + BigDecimal totalAmount = BigDecimal.ZERO; + + for (ExamApplyItem item : items) { + if (item.getItemFee() != null) { + totalAmount = totalAmount.add(item.getItemFee()); + } + } + + apply.setTotalAmount(totalAmount); + } + + return getDataTable(list); + } + + /** + * 获取申请单详细信息(包含明细) + */ + @GetMapping(value = "/{applyNo}") + public AjaxResult getInfo(@PathVariable("applyNo") String applyNo) { + ExamApply examApply = examApplyService.getById(applyNo); + if (examApply == null) { + return AjaxResult.error("未找到申请单信息"); + } + AjaxResult ajax = AjaxResult.success(); + ajax.put("data", examApply); + + // 挂载项目明细 + List items = examApplyItemService.list( + new LambdaQueryWrapper().eq(ExamApplyItem::getApplyNo, applyNo)); + ajax.put("items", items); + + return ajax; + } + + /** + * 新增检查申请单 + *

+ * 核心级联保存逻辑: + * 1. 生成申请单号,保存 exam_apply 主表 + * 2. 批量保存 exam_apply_item 明细表 + * 3. 为每条明细写入 wor_service_request(门诊医嘱),使检查进入医嘱体系 + * 4. 为每条医嘱写入 adm_charge_item(费用项),使检查费用进入收费系统 + * 5. 回写 exam_apply_item.service_request_id,建立双向关联 + *

+ */ + @PostMapping + @Transactional(rollbackFor = Exception.class) + public AjaxResult add(@RequestBody @Validated ExamApplyDto dto) { + + // ========== 1. 生成申请单号并保存主表 ========== + String dateStr = DateUtil.format(new Date(), "yyyyMMdd"); + String random4 = String.format("%04d", (int) (Math.random() * 10000)); + String applyNo = "EX" + dateStr + random4; + + ExamApply examApply = new ExamApply(); + BeanUtils.copyProperties(dto, examApply); + examApply.setApplyNo(applyNo); + examApply.setApplyTime(LocalDateTime.now()); + examApply.setCreateTime(new Date()); + examApply.setApplyStatus(0); // 0=已开单 + + // 操作员工号取当前登录用户 + try { + examApply.setOperatorId(SecurityUtils.getUsername()); + } catch (Exception e) { + examApply.setOperatorId("system"); + } + examApplyService.save(examApply); + + // ========== 2. 批量保存明细 + 写入门诊医嘱 + 写入费用项 ========== + if (dto.getItems() != null && !dto.getItems().isEmpty()) { + // 获取当前登录用户信息,用于写入医嘱和费用项 + Long currentUserId = null; + Long currentOrgId = null; + Integer tenantId = null; + String currentUsername = "system"; + try { + currentUserId = SecurityUtils.getLoginUser().getPractitionerId(); + currentOrgId = SecurityUtils.getLoginUser().getOrgId(); + tenantId = SecurityUtils.getLoginUser().getTenantId(); + currentUsername = SecurityUtils.getUsername(); + } catch (Exception e) { + // 获取失败时使用默认值 + } + + Date now = new Date(); + int seq = 1; + + for (ExamApplyItemDto itemDto : dto.getItems()) { + // ----- 2a. 保存检查明细 ----- + ExamApplyItem item = new ExamApplyItem(); + BeanUtils.copyProperties(itemDto, item); + item.setApplyNo(applyNo); + item.setItemSeq(seq++); + item.setItemStatus(0); // 同主表状态:已开单 + examApplyItemService.save(item); + + // ----- 2b. 写入门诊医嘱表 wor_service_request ----- + ServiceRequest serviceRequest = new ServiceRequest(); + // 生成唯一服务编码(SR + 日期 + 4位序列) + serviceRequest.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.SERVICE_RES_NO.getPrefix(), 4)); + serviceRequest.setStatusEnum(RequestStatus.DRAFT.getValue()); // 草稿/待发送 + serviceRequest.setIntentEnum(1); // 意图:医嘱 + serviceRequest.setQuantity(BigDecimal.ONE); // 检查默认数量1 + serviceRequest.setUnitCode("次"); // 单位 + + // 通过 basedOnTable + basedOnId 关联回检查申请主表 + serviceRequest.setBasedOnTable("exam_apply"); + serviceRequest.setBasedOnId(examApply.getId()); + + // 检查申请不走诊疗定义,设置为0占位(数据库有NOT NULL约束) + serviceRequest.setActivityId(0L); + + // 患者和就诊信息 —— 使用前端传递的数字型ID + if (dto.getPatientIdNum() != null) { + serviceRequest.setPatientId(dto.getPatientIdNum()); + } + if (dto.getEncounterId() != null) { + serviceRequest.setEncounterId(dto.getEncounterId()); + } + + serviceRequest.setRequesterId(currentUserId); // 开单医生 + serviceRequest.setOrgId(currentOrgId); // 执行科室 + serviceRequest.setAuthoredTime(now); // 签发时间 + serviceRequest.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); // 来源=医生开立 + + // 将项目名称存入 contentJson,使医嘱列表能通过 JSON 字段回显 adviceName + if (itemDto.getItemName() != null) { + serviceRequest + .setContentJson("{\"adviceName\":\"" + itemDto.getItemName().replace("\"", "\\\"") + "\"}"); + } + + // 租户和审计字段 + if (tenantId != null) { + serviceRequest.setTenantId(tenantId); + } + serviceRequest.setCreateBy(currentUsername); + serviceRequest.setCreateTime(now); + + serviceRequestService.save(serviceRequest); + + // ----- 2c. 写入费用项表 adm_charge_item ----- + ChargeItem chargeItem = new ChargeItem(); + chargeItem.setBusNo(AssignSeqEnum.CHARGE_ITEM_NO.getPrefix() + .concat(serviceRequest.getBusNo())); // 费用项编码 = CI + 服务编码 + chargeItem.setStatusEnum(ChargeItemStatus.DRAFT.getValue()); // 草稿状态,待收费 + chargeItem.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); + + // 关联医嘱表 + chargeItem.setServiceTable(CommonConstants.TableName.WOR_SERVICE_REQUEST); + chargeItem.setServiceId(serviceRequest.getId()); + + // 患者和就诊 + if (dto.getPatientIdNum() != null) { + chargeItem.setPatientId(dto.getPatientIdNum()); + } + if (dto.getEncounterId() != null) { + chargeItem.setEncounterId(dto.getEncounterId()); + } + + chargeItem.setEntererId(currentUserId); // 开立人 + chargeItem.setRequestingOrgId(currentOrgId); // 开立科室 + chargeItem.setEnteredDate(now); // 开立时间 + + // 以下字段均有 NOT NULL 约束,检查申请不走定价/账户体系,用0占位 + chargeItem.setDefinitionId(0L); // 费用定价ID + chargeItem.setAccountId(0L); // 关联账户ID + chargeItem.setContextEnum(2); // 类型:2=诊疗 + chargeItem.setProductTable(CommonConstants.TableName.WOR_ACTIVITY_DEFINITION); // 产品来源表 + chargeItem.setProductId(0L); // 产品ID + + // 金额:单价和总价取检查项目费用 + BigDecimal fee = itemDto.getItemFee() != null ? itemDto.getItemFee() : BigDecimal.ZERO; + chargeItem.setQuantityValue(BigDecimal.ONE); // 数量 + chargeItem.setQuantityUnit("次"); // 单位 + chargeItem.setUnitPrice(fee); // 单价 + chargeItem.setTotalPrice(fee); // 总价 = 单价 × 1 + + // 租户和审计字段 + if (tenantId != null) { + chargeItem.setTenantId(tenantId); + } + chargeItem.setCreateBy(currentUsername); + chargeItem.setCreateTime(now); + + chargeItemService.save(chargeItem); + + // ----- 2d. 回写明细表的医嘱关联ID ----- + item.setServiceRequestId(serviceRequest.getId()); + examApplyItemService.updateById(item); + } + } + + return AjaxResult.success("开单成功", applyNo); + } + + /** + * 修改检查申请单 + *

+ * 采用「先删旧关联再重建」策略: + * 1. 更新 exam_apply 主表基本字段 + * 2. 删除旧的明细、医嘱、费用项 + * 3. 用新提交的明细重新创建医嘱和费用项 + *

+ */ + @PutMapping + @Transactional(rollbackFor = Exception.class) + public AjaxResult edit(@RequestBody @Validated ExamApplyDto dto) { + String applyNo = dto.getApplyNo(); + if (applyNo == null || applyNo.isEmpty()) { + return AjaxResult.error("修改时申请单号不能为空"); + } + + // ========== 1. 更新主表基本信息 ========== + ExamApply examApply = examApplyService.getById(applyNo); + if (examApply == null) { + return AjaxResult.error("未找到该申请单"); + } + // 只更新可编辑字段,不覆盖系统字段(applyNo, createTime等) + examApply.setNatureofCost(dto.getNatureofCost()); + examApply.setApplyDeptCode(dto.getApplyDeptCode()); + examApply.setPerformDeptCode(dto.getPerformDeptCode()); + examApply.setApplyDocCode(dto.getApplyDocCode()); + examApply.setClinicDesc(dto.getClinicDesc()); + examApply.setContraindication(dto.getContraindication()); + examApply.setClinicalDiag(dto.getClinicalDiag()); + examApply.setMedicalHistorySummary(dto.getMedicalHistorySummary()); + examApply.setPurposeDesc(dto.getPurposeDesc()); + examApply.setPurposeofInspection(dto.getPurposeofInspection()); + examApply.setInspectionArea(dto.getInspectionArea()); + examApply.setInspectionMethod(dto.getInspectionMethod()); + examApply.setApplyRemark(dto.getApplyRemark()); + examApply.setIsUrgent(dto.getIsUrgent()); + examApplyService.updateById(examApply); + + // ========== 2. 删除旧的明细、医嘱、费用项 ========== + List oldItems = examApplyItemService.list( + new LambdaQueryWrapper().eq(ExamApplyItem::getApplyNo, applyNo)); + for (ExamApplyItem oldItem : oldItems) { + if (oldItem.getServiceRequestId() != null) { + // 删除旧费用项 + chargeItemService.deleteByServiceTableAndId( + CommonConstants.TableName.WOR_SERVICE_REQUEST, + oldItem.getServiceRequestId()); + // 删除旧医嘱 + serviceRequestService.removeById(oldItem.getServiceRequestId()); + } + } + // 删除旧明细 + examApplyItemService.remove( + new LambdaQueryWrapper().eq(ExamApplyItem::getApplyNo, applyNo)); + + // ========== 3. 用新提交的明细重新创建 ========== + if (dto.getItems() != null && !dto.getItems().isEmpty()) { + Long currentUserId = null; + Long currentOrgId = null; + Integer tenantId = null; + String currentUsername = "system"; + try { + currentUserId = SecurityUtils.getLoginUser().getPractitionerId(); + currentOrgId = SecurityUtils.getLoginUser().getOrgId(); + tenantId = SecurityUtils.getLoginUser().getTenantId(); + currentUsername = SecurityUtils.getUsername(); + } catch (Exception e) { + // 获取失败时使用默认值 + } + + Date now = new Date(); + int seq = 1; + + for (ExamApplyItemDto itemDto : dto.getItems()) { + // 保存新明细 + ExamApplyItem item = new ExamApplyItem(); + BeanUtils.copyProperties(itemDto, item); + item.setApplyNo(applyNo); + item.setItemSeq(seq++); + item.setItemStatus(0); + examApplyItemService.save(item); + + // 写入门诊医嘱 + ServiceRequest serviceRequest = new ServiceRequest(); + serviceRequest.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.SERVICE_RES_NO.getPrefix(), 4)); + serviceRequest.setStatusEnum(RequestStatus.DRAFT.getValue()); + serviceRequest.setIntentEnum(1); + serviceRequest.setQuantity(BigDecimal.ONE); + serviceRequest.setUnitCode("次"); + serviceRequest.setBasedOnTable("exam_apply"); + serviceRequest.setBasedOnId(examApply.getId()); + serviceRequest.setActivityId(0L); + + if (dto.getPatientIdNum() != null) { + serviceRequest.setPatientId(dto.getPatientIdNum()); + } + if (dto.getEncounterId() != null) { + serviceRequest.setEncounterId(dto.getEncounterId()); + } + serviceRequest.setRequesterId(currentUserId); + serviceRequest.setOrgId(currentOrgId); + serviceRequest.setAuthoredTime(now); + serviceRequest.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); + + // 将项目名称存入 contentJson,使医嘱列表能通过 JSON 字段回显 adviceName + if (itemDto.getItemName() != null) { + serviceRequest + .setContentJson("{\"adviceName\":\"" + itemDto.getItemName().replace("\"", "\\\"") + "\"}"); + } + + if (tenantId != null) { + serviceRequest.setTenantId(tenantId); + } + serviceRequest.setCreateBy(currentUsername); + serviceRequest.setCreateTime(now); + serviceRequestService.save(serviceRequest); + + // 写入费用项 + ChargeItem chargeItem = new ChargeItem(); + chargeItem.setBusNo(AssignSeqEnum.CHARGE_ITEM_NO.getPrefix() + .concat(serviceRequest.getBusNo())); + chargeItem.setStatusEnum(ChargeItemStatus.DRAFT.getValue()); + chargeItem.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); + chargeItem.setServiceTable(CommonConstants.TableName.WOR_SERVICE_REQUEST); + chargeItem.setServiceId(serviceRequest.getId()); + + if (dto.getPatientIdNum() != null) { + chargeItem.setPatientId(dto.getPatientIdNum()); + } + if (dto.getEncounterId() != null) { + chargeItem.setEncounterId(dto.getEncounterId()); + } + chargeItem.setEntererId(currentUserId); + chargeItem.setRequestingOrgId(currentOrgId); + chargeItem.setEnteredDate(now); + chargeItem.setDefinitionId(0L); + chargeItem.setAccountId(0L); + chargeItem.setContextEnum(2); + chargeItem.setProductTable(CommonConstants.TableName.WOR_ACTIVITY_DEFINITION); + chargeItem.setProductId(0L); + + BigDecimal fee = itemDto.getItemFee() != null ? itemDto.getItemFee() : BigDecimal.ZERO; + chargeItem.setQuantityValue(BigDecimal.ONE); + chargeItem.setQuantityUnit("次"); + chargeItem.setUnitPrice(fee); + chargeItem.setTotalPrice(fee); + + if (tenantId != null) { + chargeItem.setTenantId(tenantId); + } + chargeItem.setCreateBy(currentUsername); + chargeItem.setCreateTime(now); + chargeItemService.save(chargeItem); + + // 回写明细表的医嘱关联ID + item.setServiceRequestId(serviceRequest.getId()); + examApplyItemService.updateById(item); + } + } + + return AjaxResult.success("修改成功", applyNo); + } + + /** + * 删除检查申请单 + *

+ * 级联操作: + * 1. 查询并删除关联的门诊医嘱(wor_service_request)和费用项(adm_charge_item) + * 2. 删除检查明细(exam_apply_item) + * 3. 删除主表(exam_apply) + *

+ */ + @DeleteMapping("/{applyNo}") + @Transactional(rollbackFor = Exception.class) + public AjaxResult remove(@PathVariable String applyNo) { + // 1. 查询该申请单的所有明细,获取关联的医嘱ID + List items = examApplyItemService.list( + new LambdaQueryWrapper().eq(ExamApplyItem::getApplyNo, applyNo)); + + for (ExamApplyItem item : items) { + if (item.getServiceRequestId() != null) { + // 删除费用项(按医嘱表名+医嘱ID定位) + chargeItemService.deleteByServiceTableAndId( + CommonConstants.TableName.WOR_SERVICE_REQUEST, + item.getServiceRequestId()); + // 删除门诊医嘱 + serviceRequestService.removeById(item.getServiceRequestId()); + } + } + + // 2. 删除明细表 + examApplyItemService.remove( + new LambdaQueryWrapper().eq(ExamApplyItem::getApplyNo, applyNo)); + + // 3. 删除主表 + examApplyService.removeById(applyNo); + + return AjaxResult.success("删除/作废成功"); + } +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/check/dto/ExamApplyDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/check/dto/ExamApplyDto.java new file mode 100644 index 00000000..c6390dc7 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/check/dto/ExamApplyDto.java @@ -0,0 +1,97 @@ +package com.openhis.web.check.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.List; + +/** + * 检查申请数据传输对象 + */ +@Data +public class ExamApplyDto implements Serializable { + private static final long serialVersionUID = 1L; + + /** 申请单号 (EXYYYYMMDD####) */ + private String applyNo; + + /** 患者主索引 EMPI */ + private String patientId; + + /** 门诊就诊流水号 */ + private String visitNo; + + /** 申请科室代码 */ + private String applyDeptCode; + + /** 执行科室代码 */ + private String performDeptCode; + + /** 申请医生工号 */ + private String applyDocCode; + + /** 申请时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime applyTime; + + /** 就诊卡号 */ + private String medicalrecordNumber; + + /** 费用性质 */ + private String natureofCost; + + /** 诊断描述 */ + private String clinicDesc; + + /** 禁忌症 */ + private String contraindication; + + /** 病史摘要 */ + private String medicalHistorySummary; + + /** 体格检查 */ + private String purposeofInspection; + + /** 申检部位 */ + private String inspectionArea; + + /** 检查方法 */ + private String inspectionMethod; + + /** 备注 */ + private String applyRemark; + + /** 检查大类代码 */ + private String examTypeCode; + + /** 临床诊断 */ + private String clinicalDiag; + + /** 检查目的 */ + private String purposeDesc; + + /** 加急标志 0 普通 1 加急 */ + private Integer isUrgent; + + /** 妊娠状态 0未知 1未孕 2可能孕 3孕妇 */ + private Integer pregnancyState; + + /** 过敏史 */ + private String allergyDesc; + + /** 申请单状态 0已开单 1已收费 2已预约 3已签到 4部分报告 5已完告 6作废 */ + private Integer applyStatus; + + /** 就诊ID(用于写入门诊医嘱和费用项关联) */ + private Long encounterId; + + /** 患者数字ID(用于写入门诊医嘱和费用项,与 patientId 的 EMPI 字符串不同) */ + private Long patientIdNum; + + /** + * 绑定的明细项目列表 + */ + private List items; +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/check/dto/ExamApplyItemDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/check/dto/ExamApplyItemDto.java new file mode 100644 index 00000000..a063740b --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/check/dto/ExamApplyItemDto.java @@ -0,0 +1,50 @@ +package com.openhis.web.check.dto; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * 检查申请明细项目数据传输对象 + */ +@Data +public class ExamApplyItemDto implements Serializable { + private static final long serialVersionUID = 1L; + + /** 项目代码 (院内收费项目) */ + private String itemCode; + + /** 项目名称 */ + private String itemName; + + /** 国家项目代码 */ + private String nationalItemCode; + + /** 检查部位代码 */ + private String bodyPartCode; + + /** 检查方法代码 */ + private String examMethodCode; + + /** 对比剂药品 */ + private String contrastDrug; + + /** 对比剂剂量 */ + private String contrastDose; + + /** 执行科室代码 */ + private String performDeptCode; + + /** 预约号 */ + private String appointmentNo; + + /** 项目单价 */ + private BigDecimal itemFee; + + /** 行状态 0 已开单 1 已收费 ... */ + private Integer itemStatus; + + /** 检查备注 */ + private String remark; +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/DiseaseManageDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/DiseaseManageDto.java index 63f3b54c..5d064370 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/DiseaseManageDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/DiseaseManageDto.java @@ -40,6 +40,11 @@ public class DiseaseManageDto { private String typeCode; private String typeCode_dictText; + /** 报表类型 */ + @Dict(dictCode = "card_name_code") + private String reportTypeCode; + private String reportTypeCode_dictText; + /** 描述 */ private String description; diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/DiseaseManageUpDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/DiseaseManageUpDto.java index 23bf2f3c..842b7318 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/DiseaseManageUpDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/DiseaseManageUpDto.java @@ -40,6 +40,9 @@ public class DiseaseManageUpDto { /** 类型 */ private String typeCode; + /** 报表类型 */ + private String reportTypeCode; + /** 描述 */ private String description; diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationAdviceAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationAdviceAppMapper.xml index 6b7819fc..bf8fa65f 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationAdviceAppMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationAdviceAppMapper.xml @@ -547,7 +547,7 @@ null AS skin_test_flag, null AS inject_flag, null AS group_id, - T2.NAME AS advice_name, + COALESCE(T2.NAME, CASE WHEN T1.content_json IS NOT NULL AND T1.content_json != '' THEN T1.content_json::json->>'adviceName' ELSE NULL END) AS advice_name, '' AS volume, '' AS lot_number, T1.quantity AS quantity, diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/check/domain/ExamApply.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/check/domain/ExamApply.java new file mode 100644 index 00000000..120d2807 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/check/domain/ExamApply.java @@ -0,0 +1,127 @@ +package com.openhis.check.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.core.common.core.domain.HisBaseEntity; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * 检查申请主表 + *

+ * 继承 {@link HisBaseEntity} 获得: + *

    + *
  • createBy / createTime(INSERT 自动填充)
  • + *
  • updateBy / updateTime(UPDATE 自动填充)
  • + *
  • tenantId(INSERT 自动填充)
  • + *
  • deleteFlag + {@code @TableLogic} 逻辑删除(0=未删,1=已删)
  • + *
+ */ +@Data +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = true) +@TableName(value = "exam_apply", autoResultMap = true) +public class ExamApply extends HisBaseEntity { + + /** 数据库自增ID,用于与门诊医嘱表(wor_service_request.based_on_id)关联 */ + private Long id; + + /** 申请单号 (EXYYYYMMDD####),业务主键 */ + @TableId(type = IdType.INPUT) + private String applyNo; + + /** 患者主索引 EMPI */ + private String patientId; + + /** 门诊就诊流水号 */ + private String visitNo; + + /** 申请科室代码 */ + private String applyDeptCode; + + /** 执行科室代码 */ + private String performDeptCode; + + /** 申请医生工号 */ + private String applyDocCode; + + /** 申请时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime applyTime; + + /** 就诊卡号 */ + private String medicalrecordNumber; + + /** 费用性质(自费医疗/医保报销) */ + private String natureofCost; + + /** 诊断描述 */ + private String clinicDesc; + + /** 禁忌症 */ + private String contraindication; + + /** 病史摘要 */ + private String medicalHistorySummary; + + /** 体格检查 */ + private String purposeofInspection; + + /** 申检部位 */ + private String inspectionArea; + + /** 检查方法 */ + private String inspectionMethod; + + /** 备注 */ + private String applyRemark; + + /** 检查大类代码(如 CT / ECG / GI) */ + private String examTypeCode; + + /** 临床诊断 */ + private String clinicalDiag; + + /** 检查目的 */ + private String purposeDesc; + + /** 加急标志 0=普通 1=加急 */ + private Integer isUrgent; + + /** 妊娠状态 0=未知 1=未孕 2=可能孕 3=孕妇 */ + private Integer pregnancyState; + + /** 过敏史 */ + private String allergyDesc; + + /** + * 申请单状态 + * 0=已开单 1=已收费 2=已预约 3=已签到 4=部分报告 5=已完告 6=作废 + */ + private Integer applyStatus; + + /** 是否已收费 0=否 1=是 */ + private Integer isCharged; + + /** 是否已退费 0=否 1=是 */ + private Integer isRefunded; + + /** 是否已执行 0=否 1=是 */ + private Integer isExecuted; + + /** 操作员工号(向后兼容保留) */ + private String operatorId; + + /** + * 总金额(非数据库字段,由明细项目计算得出) + */ + @TableField(exist = false) + private BigDecimal totalAmount; +} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/check/domain/ExamApplyItem.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/check/domain/ExamApplyItem.java new file mode 100644 index 00000000..e13b8d77 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/check/domain/ExamApplyItem.java @@ -0,0 +1,69 @@ +package com.openhis.check.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * 检查申请明细表 + */ +@Data +@Accessors(chain = true) +@TableName(value = "exam_apply_item", autoResultMap = true) +public class ExamApplyItem implements Serializable { + private static final long serialVersionUID = 1L; + + /** 明细ID */ + @TableId(type = IdType.AUTO) + private Long itemId; + + /** 申请单号 */ + private String applyNo; + + /** 项目序号 */ + private Integer itemSeq; + + /** 项目代码 (院内收费项目) */ + private String itemCode; + + /** 项目名称 */ + private String itemName; + + /** 国家项目代码 */ + private String nationalItemCode; + + /** 检查部位代码 */ + private String bodyPartCode; + + /** 检查方法代码 */ + private String examMethodCode; + + /** 对比剂药品 */ + private String contrastDrug; + + /** 对比剂剂量 */ + private String contrastDose; + + /** 执行科室代码 */ + private String performDeptCode; + + /** 预约号 */ + private String appointmentNo; + + /** 项目单价 */ + private BigDecimal itemFee; + + /** 行状态 0 已开单 1 已收费 ... */ + private Integer itemStatus; + + /** 检查备注 */ + private String remark; + + /** 关联的门诊医嘱ID (wor_service_request.id) */ + private Long serviceRequestId; +} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/check/mapper/ExamApplyItemMapper.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/check/mapper/ExamApplyItemMapper.java new file mode 100644 index 00000000..2a6a64c2 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/check/mapper/ExamApplyItemMapper.java @@ -0,0 +1,10 @@ +package com.openhis.check.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.openhis.check.domain.ExamApplyItem; + +/** + * 检查申请明细表 Mapper 接口 + */ +public interface ExamApplyItemMapper extends BaseMapper { +} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/check/mapper/ExamApplyMapper.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/check/mapper/ExamApplyMapper.java new file mode 100644 index 00000000..5f1e8863 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/check/mapper/ExamApplyMapper.java @@ -0,0 +1,10 @@ +package com.openhis.check.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.openhis.check.domain.ExamApply; + +/** + * 检查申请主表 Mapper 接口 + */ +public interface ExamApplyMapper extends BaseMapper { +} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/check/service/IExamApplyItemService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/check/service/IExamApplyItemService.java new file mode 100644 index 00000000..57f194b4 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/check/service/IExamApplyItemService.java @@ -0,0 +1,10 @@ +package com.openhis.check.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.openhis.check.domain.ExamApplyItem; + +/** + * 检查申请明细表 服务层接口 + */ +public interface IExamApplyItemService extends IService { +} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/check/service/IExamApplyService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/check/service/IExamApplyService.java new file mode 100644 index 00000000..156639a4 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/check/service/IExamApplyService.java @@ -0,0 +1,10 @@ +package com.openhis.check.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.openhis.check.domain.ExamApply; + +/** + * 检查申请主表 服务层接口 + */ +public interface IExamApplyService extends IService { +} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/check/service/impl/ExamApplyItemServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/check/service/impl/ExamApplyItemServiceImpl.java new file mode 100644 index 00000000..5aea71db --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/check/service/impl/ExamApplyItemServiceImpl.java @@ -0,0 +1,15 @@ +package com.openhis.check.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.openhis.check.domain.ExamApplyItem; +import com.openhis.check.mapper.ExamApplyItemMapper; +import com.openhis.check.service.IExamApplyItemService; +import org.springframework.stereotype.Service; + +/** + * 检查申请明细表 服务层实现类 + */ +@Service +public class ExamApplyItemServiceImpl extends ServiceImpl + implements IExamApplyItemService { +} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/check/service/impl/ExamApplyServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/check/service/impl/ExamApplyServiceImpl.java new file mode 100644 index 00000000..76db42ca --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/check/service/impl/ExamApplyServiceImpl.java @@ -0,0 +1,14 @@ +package com.openhis.check.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.openhis.check.domain.ExamApply; +import com.openhis.check.mapper.ExamApplyMapper; +import com.openhis.check.service.IExamApplyService; +import org.springframework.stereotype.Service; + +/** + * 检查申请主表 服务层实现类 + */ +@Service +public class ExamApplyServiceImpl extends ServiceImpl implements IExamApplyService { +} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/clinical/domain/ConditionDefinition.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/clinical/domain/ConditionDefinition.java index fb4f688a..ac3cfa9b 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/clinical/domain/ConditionDefinition.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/clinical/domain/ConditionDefinition.java @@ -45,6 +45,9 @@ public class ConditionDefinition extends HisBaseEntity { /** 类型 */ private String typeCode; + /** 报表类型 */ + private String reportTypeCode; + /** 描述 */ private String description; diff --git a/openhis-ui-vue3/public/help-center/vuepress-theme-vdoing-doc/docs/01.HIS操作手册/03.his使用说明书/HIS使用说明书.md b/openhis-ui-vue3/public/help-center/vuepress-theme-vdoing-doc/docs/01.HIS操作手册/03.his使用说明书/HIS使用说明书.md deleted file mode 100644 index 0fd6f4cd..00000000 --- a/openhis-ui-vue3/public/help-center/vuepress-theme-vdoing-doc/docs/01.HIS操作手册/03.his使用说明书/HIS使用说明书.md +++ /dev/null @@ -1,1060 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - -# **上海经创贺联信息技术有限公司** - -# **信创版HIS管理系统V1.0** - - - - - -## **软件操作说明书** - - - - - - - - - - - - - - - - - - - - - -### **目录** - -[一、 系统管理............................................................................................................. 4](#_Toc198) - -[1.1 角色管理........................................................................................................... 4](#_Toc24868) - -[1.2 科室管理........................................................................................................... 6](#_Toc25148) - -[1.3 用户管理........................................................................................................... 7](#_Toc7816) - -[1.4 基础字典......................................................................................................... 10](#_Toc30807) - -[1.5 菜单管理......................................................................................................... 11](#_Toc5764) - -[1.6 号源(费用)管理................................................................................................ 12](#_Toc29216) - -[1.7 个性化设置...................................................................................................... 13](#_Toc21010) - -[1.8 库房管理......................................................................................................... 15](#_Toc23132) - -[二、 门诊管理........................................................................................................... 17](#_Toc1997) - -[2.1 门诊挂号......................................................................................................... 17](#_Toc12410) - -[2.2门诊退号.......................................................................................................... 21](#_Toc22437) - -[2.3门诊收费.......................................................................................................... 23](#_Toc8702) - -[2.3门诊退费.......................................................................................................... 26](#_Toc22806) - -[2.4门诊日结.......................................................................................................... 27](#_Toc12372) - -[2.5门诊收费记录................................................................................................... 27](#_Toc14390) - -[2.6 门诊收费报表.................................................................................................. 30](#_Toc11823) - -[2.7 挂号查询......................................................................................................... 30](#_Toc16406) - -[2.8 医保对账......................................................................................................... 31](#_Toc6364) - -[2.9门诊划价.......................................................................................................... 32](#_Toc25929) - -[2.10门诊处置........................................................................................................ 33](#_Toc13618) - -[2.11输液记录........................................................................................................ 35](#_Toc14740) - -[2.12皮试记录........................................................................................................ 38](#_Toc21770) - -[2.13电子处方管理................................................................................................. 39](#_Toc14856) - -[三、 医生工作站....................................................................................................... 42](#_Toc4446) - -[3.1 医生角色登录.................................................................................................. 42](#_Toc13086) - -[3.2病历.................................................................................................................. 42](#_Toc26243) - -[3.3诊断.................................................................................................................. 45](#_Toc4754) - -[3.4医嘱.................................................................................................................. 47](#_Toc19231) - -[四、 库房管理........................................................................................................... 56](#_Toc31998) - -[4.1 药房医师角色登录........................................................................................... 56](#_Toc24510) - -[4.2目录管理.......................................................................................................... 56](#_Toc28053) - -[4.3药品目录.......................................................................................................... 57](#_Toc1085) - -[4.4器材目录.......................................................................................................... 59](#_Toc6250) - -[4.5厂商/产地......................................................................................................... 60](#_Toc18789) - -[4.6 采购入库......................................................................................................... 61](#_Toc19487) - -[4.7采购退货.......................................................................................................... 63](#_Toc10337) - -[4.8批量盘点.......................................................................................................... 65](#_Toc13819) - -[4.9采购管理.......................................................................................................... 67](#_Toc30462) - -[4.10库房盘点........................................................................................................ 69](#_Toc17329) - -[4.11领用出库........................................................................................................ 70](#_Toc1749) - -[4.12领用退库........................................................................................................ 71](#_Toc30817) - -[4.13报损管理........................................................................................................ 71](#_Toc3786) - -[4.14库存明细记录................................................................................................. 71](#_Toc30358) - -[4.15门诊发药........................................................................................................ 72](#_Toc14731) - -[4.16门诊退药........................................................................................................ 74](#_Toc20308) - -[4.17库房审批........................................................................................................ 76](#_Toc18669) - -[4.18发药明细........................................................................................................ 77](#_Toc26226) - -[4.19待发药查询..................................................................................................... 78](#_Toc32097) - -[4.20采购入库明细报表.......................................................................................... 78](#_Toc32461) - -[4.21领用出库明细报表.......................................................................................... 78](#_Toc10704) - -[4.22库存商品明细查询报表.................................................................................. 79](#_Toc21790) - -[4.23盘点明细报表................................................................................................. 79](#_Toc24483) - -[4.24采购退货明细报表.......................................................................................... 80](#_Toc9847) - - - - - -# 一、系统管理 - -### 1.1 角色管理 - -这里添加医院所有工作人员的角色,点击新增添加角色,并且为角色添加菜单权限。 - -![image-20260224115045413](~@img/png/HISOperationManual/image-20260224115045413.png) - -![image-20260224115511420](~@img/png/HISOperationManual/image-20260224115511420.png) - -角色建好之后,点击分配用户,为该角色分配使用的角色用户。 - -![image-20260224123009379](~@img/png/HISOperationManual/image-20260224123009379.png) - -![image-20260224123106174](~@img/png/HISOperationManual/image-20260224123106174.png) - -如果系统使用过程中不需要该角色,直接点击该用户后面的删除按钮,对角色进行删除。 - -![image-20260224123210943](~@img/png/HISOperationManual/image-20260224123210943.png) - -如果在使用过程中,需要修改该该角色权限,直接点击该角色后面的修改按钮,对该角色权限进行修改。 - -![image-20260224123338956](~@img/png/HISOperationManual/image-20260224123338956.png) - -### 1.2 科室管理 - -对医院的科室信息进行维护,点击新增按钮,把医院的所有科室信息添加维护进去。 - -![image-20260224124143414](~@img/png/HISOperationManual/image-20260224124143414.png) - -点击新增按钮后,在弹出的界面填写科室的科室名称、医保码、医保名称、科室类型、科室分类、上级科室信息,点击确认按钮即可。 - -![image-20260224124220734](~@img/png/HISOperationManual/image-20260224124220734.png) - -如果科室下面需要有二级科室,点击需要添加科室信息后面的添加下级按钮,在弹出的界面,录入二级科室信息,点击确认即可。 - -![image-20260224124415491](~@img/png/HISOperationManual/image-20260224124415491.png) - -![image-20260224124439023](~@img/png/HISOperationManual/image-20260224124439023.png) - -### 1.3 用户管理 - -点击新增按钮,把医院所有工作人员都维护进去。 - -![image-20260224134451583](~@img/png/HISOperationManual/image-20260224134451583.png) - -添加的时候直接给用户赋予角色,选择科室,设置账户登录名和登录密码,填写医师的医保码等重要信息。 - -![image-20260224134519182](~@img/png/HISOperationManual/image-20260224134519182.png) - - 在系统使用的过程中,如果用户需要修改自己的密码,直接点击用户后面的【重置密码】按钮,完成对密码的修改。 - -![image-20260224134630010](~@img/png/HISOperationManual/image-20260224134630010.png) - -![image-20260224134727876](~@img/png/HISOperationManual/image-20260224134727876.png) - -如果在使用的过程中,需要调整用户的权限,点击用户后面的角色分配按钮,完成对用户权限的修改。 - -![image-20260224134830291](~@img/png/HISOperationManual/image-20260224134830291.png) - -![image-20260224134916254](~@img/png/HISOperationManual/image-20260224134916254.png) - - 如果要删除停用按钮,直接修改用户后面的删除按钮,即可完成对用户的停用操作。 - -![image-20260224134950510](~@img/png/HISOperationManual/image-20260224134950510.png) - -### 1.4 字典管理 - -这里界面显示的字典值编辑修改的,比如单位下拉列表没有自己想要的值,手动添加单位。 - -![image-20260224135156433](~@img/png/HISOperationManual/image-20260224135156433.png)搜索要改的字典字段,以剂量单位为例子,双击查看详细信息。 - -![image-20260224135350946](~@img/png/HISOperationManual/image-20260224135350946.png) - -![image-20260224135407329](~@img/png/HISOperationManual/image-20260224135407329.png) - -点击新增填写信息,点击确定后添加成功。 - -![image-20260224135426755](~@img/png/HISOperationManual/image-20260224135426755.png) - -### 1.5 菜单管理 - -这里控制系统菜单的显示和隐藏,编辑可设置菜单详细信息 - -![image-20260224135546300](~@img/png/HISOperationManual/image-20260224135546300.png) - -![image-20260224135641961](~@img/png/HISOperationManual/image-20260224135641961.png) - -### 1.6 号源(费用)管理 - -这里设置院内医生开放挂号的科室,设置挂号费。 - -![image-20260224141319070](~@img/png/HISOperationManual/image-20260224141319070.png) - -点击添加按钮,在弹出的编辑框界面,添加号源的诊疗项目、服务分类、服务类型、科室以及服务管理等信息,然后点击确认按钮,完成号源的添加 - -![image-20260224141359695](~@img/png/HISOperationManual/image-20260224141359695.png) - -如果在使用的过程中,如果要修改号源信息,直接点击号源后面的编辑按钮,在弹出的号源界面,修改号源信息,点击确认按钮,完成对号源的修改。 - -![image-20260224141430896](~@img/png/HISOperationManual/image-20260224141430896.png) - - - -### 1.7 个性化设置 - -#### 1.7.1医嘱套餐 - -维护医院个人/科室/全院的医嘱套餐。在医嘱套餐界面完成对医嘱套餐信息的维护。 - -![image-20260224142553088](~@img/png/HISOperationManual/image-20260224142553088.png) - -点击新建组套按钮,然后在基本信息里面添加组套名称、组套类型、使用范围,然后在项目列表里面添加项目信息,然后点击【确认】保存组套按钮即可。 - -![image-20260224142741394](~@img/png/HISOperationManual/image-20260224142741394.png) - -如果要删除医嘱里面的组套,选中需要删除的项目,点击【删除】按钮即可。 - -![image-20260224143002659](~@img/png/HISOperationManual/image-20260224143002659.png) - - - -1.7.2耗材诊疗绑定 - -用法绑定 - -点击用法里面的内容,然后在添加绑定项目里面,添加为该用法绑定的项目,医生在开立处方的时候,会根据用法自动带出诊疗费用。 - -![image-20260224143855247](~@img/png/HISOperationManual/image-20260224143855247.png) - -![image-20260224143927617](~@img/png/HISOperationManual/image-20260224143927617.png) - -### 1.8 库房管理 - -医院存放药品和耗材的库房,添加维护到系统中,点击新增,下拉列表选择类型,填写名称,点击确定。 - - - -![image-20260224144521247](~@img/png/HISOperationManual/image-20260224144521247.png) - -![image-20260224144543015](~@img/png/HISOperationManual/image-20260224144543015.png) - -# 二、门诊管理 - -### 2.1 门诊挂号 - - - -![image-20260225103246231](~@img/png/HISOperationManual/image-20260225103246231.png) - -点击门诊挂号,可以在本页面进行挂号,退号,医保挂号可以使用医保卡,电子凭证,自费挂号使用身份证。 - -点击新建按钮,在弹出的新建患者界面,输入患者姓名、性别、联系方式、证件号码、民族、卡类型等信息,点击确认按钮,完成对患者基本信息的添加。 - -![image-20260225103815276](~@img/png/HISOperationManual/image-20260225103815276.png) - - - -患者基本信息添加完成之后,在挂号的界面,选择需要挂号的患者信息,提取患者数据,然后选择病人的费用性质、就诊科室、挂号类型、医生等信息。 - -![image-20260225104527909](~@img/png/HISOperationManual/image-20260225104527909.png) - - 挂号信息添加号之后,点击保存挂号按钮,在弹出的收费界面,选择支付方式和支付金额,点击确认完成挂号收费操作。 - -![image-20260225104651097](~@img/png/HISOperationManual/image-20260225104651097.png) - -挂号费的支付支持多种支付方式,在支付方式中选择之后依次增加,添加支付方式的金额,系统会自动计算每个支付方式的金额,然后点击确认即可。 - -![image-20260225104728794](~@img/png/HISOperationManual/image-20260225104728794.png) - - - -医保挂号,点击电子凭证,患者出示电子医保,扫码挂号,或者选择医保卡,读卡获取患者信息挂号。 - -![image-20260225104822889](~@img/png/HISOperationManual/image-20260225104822889.png) - -医保卡挂号患者,插入医保卡,点击医保卡,读取用户信息,保存挂号。 - -![image-20260225105042983](~@img/png/HISOperationManual/image-20260225105042983.png) - -如果收费员要查询挂号的信息,直接在挂号界面,输入需要查询的挂号患者姓名、或者挂号的开始日期和结束日期,点击查询按钮即可查询所需要的数据。 - -![image-20260225105138110](~@img/png/HISOperationManual/image-20260225105138110.png) - -### 2.2门诊退号 - -![image-20260225112430398](~@img/png/HISOperationManual/image-20260225112430398.png) - -在门诊挂号界面,如果患者需要退号,通过输入患者的姓名,搜索需要退号的患者,点击后面的退号按钮。 - -![image-20260225112418094](~@img/png/HISOperationManual/image-20260225112418094.png) - -在弹出的退费界面,输入退费金额,完成退号操作。 - -![image-20260225112513180](~@img/png/HISOperationManual/image-20260225112513180.png) - - - -退号时注意,就诊状态如果是在诊状态,系统不允许退号,只有状态在待诊状态才允许退号。 - -![image-20260225112618472](~@img/png/HISOperationManual/image-20260225112618472.png) - -### 2.3门诊收费 - -完成对就诊患者的收费操作。 - -![image-20260225113033571](~@img/png/HISOperationManual/image-20260225113033571.png) - -点击左侧患者列表待收费的患者 - -![image-20260225113117588](~@img/png/HISOperationManual/image-20260225113117588.png) - -收费项目里面会自动调出该收费患者的收费信息,勾选所需的收费项目 - -![image-20260225113414940](~@img/png/HISOperationManual/image-20260225113414940.png) - -点击确认收费按钮,在弹出的收费界面,输入收费信息,完成收费结算。 - -![image-20260225113439896](~@img/png/HISOperationManual/image-20260225113439896.png) - -如果是医保患者,直接点击医保卡、电子凭证或身份证,读医保患者信息,同时系统会自动调出患者的收费信息完成医保的结算。 - -![image-20260225113501960](~@img/png/HISOperationManual/image-20260225113501960.png) - -如果患者在挂号时,是自费挂号,结算的时候想用医保结算,患者的费用信息调出之后,直接点击自费转医保按钮,完成自费转医保结算。 - -![image-20260225113528143](~@img/png/HISOperationManual/image-20260225113528143.png) - -如果患者挂号的时候是医保挂号,在结算的时候由于医保原因无法使用医保结算,患者可以使用自费进行结算。调出患者的费用信息,点击医保转自费,完成费用的结算。 - -![image-20260225113550224](~@img/png/HISOperationManual/image-20260225113550224.png) - - - -### 2.3门诊退费 - - ![image-20260225114237730](~@img/png/HISOperationManual/image-20260225114237730.png) - -![image-20260225114304500](~@img/png/HISOperationManual/image-20260225114304500.png) - -医生点退费按钮后,款台刷新页面,点击退费患者列表,选中患者,点击退费,点击确定按钮,退费成功。 - -![image-20260225135500635](~@img/png/HISOperationManual/image-20260225135500635.png) - - - -![image-20260225135606155](~@img/png/HISOperationManual/image-20260225135606155.png) - -### 2.4门诊日结 - -这里查看的信息时按照当前登录收费的款员不同,查看的信息不同,这个功能方便款员对账。 - -![image-20260225135823496](~@img/png/HISOperationManual/image-20260225135823496.png) - -### 2.5门诊收费记录 - - - -![image-20260225141041177](~@img/png/HISOperationManual/image-20260225141041177.png) - -在收费记录界面,可以实现对收费员查询收费患者的结算信息,同时也可以查看收费信息的收费详情、开具电子发票、冲销发票和调阅发票等操作。 - -![image-20260225141103125](~@img/png/HISOperationManual/image-20260225141103125.png) - -点击收费详情按钮,可以查看该收费信息的收费详细信息。 - -![image-20260225141127552](~@img/png/HISOperationManual/image-20260225141127552.png) - -![image-20260225141142196](~@img/png/HISOperationManual/image-20260225141142196.png) - -点击开具电子发票按钮,可以完成对该收费的电子发票(需对接电子发票系统) - -![image-20260225141218597](~@img/png/HISOperationManual/image-20260225141218597.png) - -如果患者开具的发票有问题需要冲销发票,直接点进后面的冲销发票按钮,即可完成对发票的冲正(需对接电子发票系统)。 - -![image-20260225141245142](~@img/png/HISOperationManual/image-20260225141245142.png) - - - -### 2.6 门诊收费报表 - -按照统计类型不同,统计门诊收费详细,自己选择条件筛选。 - -![image-20260225141729022](~@img/png/HISOperationManual/image-20260225141729022.png) - - - -### 2.7 挂号查询 - -按日期、科室、医生筛选查询医院挂号情况 - -![image-20260225142345849](~@img/png/HISOperationManual/image-20260225142345849.png) - - - -### 2.8 医保对账 - -按日期和险种不同,查询和医保的交易明细。 - -![image-20260225142842569](~@img/png/HISOperationManual/image-20260225142842569.png) - -### 2.9门诊划价 - -实现对门诊患者耗材的划价收费操作。 - -![image-20260225142909079](~@img/png/HISOperationManual/image-20260225142909079.png) - -在患者列表里面,双击患者信息,在右侧项目里面,添加划价项目。 - -![image-20260225143006175](~@img/png/HISOperationManual/image-20260225143006175.png) - -然后在弹出的划价界面,点解新增按钮,添加收费项目,添加完成之后,点击签发按钮,将划价收费的信息发送给收费室进行收费。 - -![image-20260225143025289](~@img/png/HISOperationManual/image-20260225143025289.png) - -如果要修改已经划价的收费项目,如果项目已经签发还未进行收费,直接点击签退按钮,将收费信息调回,删除不需要的项目,然后点击签发按钮即可。 - -![image-20260225143113370](~@img/png/HISOperationManual/image-20260225143113370.png) - -### 2.10门诊处置 - -实现对门诊治疗的相关操作,打印瓶签、打印采血条码、打印处方、打印处置单等,对已做项目进行执行。 - -![image-20260225145703869](~@img/png/HISOperationManual/image-20260225145703869.png) - -点击左侧患者列表,调出该患者所要执行的处置项目。 - -![image-20260225152437939](~@img/png/HISOperationManual/image-20260225152437939.png) - -然后点击项目后面的执行按钮,完成对该项目的执行操作。 - -![image-20260225152538152](~@img/png/HISOperationManual/image-20260225152538152.png) - -如果想要查看该项目的执行记录,直接点击该项目后面的执行记录按钮,即可查看该项目的执行历史记录。 - -![image-20260225152556928](~@img/png/HISOperationManual/image-20260225152556928.png) - -### 2.11输液记录 - -对门诊需要输液的患者进行输液执行。 - -![image-20260225160912287](~@img/png/HISOperationManual/image-20260225160912287.png) - -通过输入就诊日期、患者信息、执行状态等信息,查询所需执行的患者。 - -![image-20260225160959267](~@img/png/HISOperationManual/image-20260225160959267.png) - -在患者列表,双击患者信息,可以调出该患者需要执行的输液类医嘱。 - -![image-20260225161015883](~@img/png/HISOperationManual/image-20260225161015883.png) - -勾选所需要的输液药品,点击打印瓶签,完成对输液标签的打印。 - -![image-20260225161031505](~@img/png/HISOperationManual/image-20260225161031505.png) - -如果想要查询患者的医嘱信息,直接点击查看医嘱按钮,可以查看该患者的详细医嘱信息。 - -![image-20260225161113544](~@img/png/HISOperationManual/image-20260225161113544.png) - -如果输液已经执行,想要撤销执行,在执行状态里面选择已完成,点击患者信息,可以调出该患者已经执行的医嘱信息,直接点击撤销按钮,对已执行的输液进行撤回。 - -![image-20260225161134581](~@img/png/HISOperationManual/image-20260225161134581.png) - -### 2.12皮试记录 - -该功能模块完成对门诊患者进行皮试的操作。 - -![image-20260225163423223](~@img/png/HISOperationManual/image-20260225163423223.png) - -通用搜索患者的基本信息,调出该患者需要皮试的药品信息,点击执行操作,然后录入皮试的结果信息,供医生调阅。 - -### 2.13电子处方管理 - -该功能模块是对电子处方进行管理操作。 - -![image-20260225164712821](~@img/png/HISOperationManual/image-20260225164712821.png) - -通过输入订单的开始结束日期或者患者信息进行搜索所需要的数据 - ![image-20260225164729426](~@img/png/HISOperationManual/image-20260225164729426.png) - -点击查看按钮,可以查看该电子处方的详细信息。 - -![image-20260225164742906](~@img/png/HISOperationManual/image-20260225164742906.png) - - - -点击处方上传按钮,可以将电子处方数据进行上传,完成开房的操作。 - -![image-20260225164804833](~@img/png/HISOperationManual/image-20260225164804833.png) - -如果对已经上传的处方进行撤销,直接点击处方后面的处方撤销按钮,对上传的处方进行撤销。 - -![image-20260225164821341](~@img/png/HISOperationManual/image-20260225164821341.png) - -处方已经上传,如果要查看处方的取药信息,点击取药查询按钮,可以查看该电子处方的患者取药信息。 - -![image-20260225164906379](~@img/png/HISOperationManual/image-20260225164906379.png) - -# 三、医生工作站 - -### 3.1 医生角色登录 - -点击门诊医生工作站,门诊医生站,完成对门诊患者的急诊操作。 - -![image-20260226155936354](~@img/png/HISOperationManual/image-20260226155936354.png) - -### 3.2病历 - -在患者队列里面,点击待就诊患者的接诊按钮,进入门诊病历界面、 - -![image-20260226160008815](~@img/png/HISOperationManual/image-20260226160008815.png) - -在病历界面,填写该患者的病历信息。 - -![image-20260226160235451](~@img/png/HISOperationManual/image-20260226160235451.png) - - - -记录患者主诉,其他信息,也可以使用历史病历进行复用 - -![image-20260226160325724](~@img/png/HISOperationManual/image-20260226160325724.png) - -### 3.3诊断 - -病历填写完成后,点击保存后切换诊断页面,根据患者情况下诊断,点击新增诊断 - -![image-20260226160443017](~@img/png/HISOperationManual/image-20260226160443017.png) - -选择诊断类型,慢病备案的患者,医生选择门诊慢病,并导入慢病,诊断会自动从医保局获取患者的备案慢病。其他场景一般选择普通门诊。 - -![image-20260226160532532](~@img/png/HISOperationManual/image-20260226160532532.png) - -多个诊断时,继续新增,一次就诊只有一个主诊断,勾选后面的主诊断就可以,所有诊断新增好后,点击保存诊断按钮,保存诊断后切换到医嘱页面。 - -![image-20260226160631718](~@img/png/HISOperationManual/image-20260226160631718.png) - -同时也可以使用历史诊断,快速开立患者的诊断信息。 - -![image-20260226160735178](~@img/png/HISOperationManual/image-20260226160735178.png) - -也可以使用诊断里面的常用诊断或者诊断模板快速添加诊断 - -![image-20260226160839877](~@img/png/HISOperationManual/image-20260226160839877.png) - -![image-20260226160851269](~@img/png/HISOperationManual/image-20260226160851269.png) - -如果需要开立中医诊断时,点击中医诊断按钮,在弹出的界面,添加中医诊断的证候。 - -![image-20260226163155216](~@img/png/HISOperationManual/image-20260226163155216.png) - -### 3.4医嘱 - -#### 3.4.1开立医嘱 - -在医嘱界面,可以完成对门诊患者的各类医嘱的开立并保存收费。 - -![image-20260226163234751](~@img/png/HISOperationManual/image-20260226163234751.png) - -点击新增按钮,对该患者进行医嘱的开立 - -![image-20260226163323396](~@img/png/HISOperationManual/image-20260226163323396.png) - -如果开立口服类的药品,直接在医嘱里面输入所需要开立的药品,填写药品医嘱信息,计量信息、用药途径、频次、天数、总量。然后点击确认按钮,完成药品的开立。 - -![image-20260226163541828](~@img/png/HISOperationManual/image-20260226163541828.png) - -如果要开立注射类的药品,在医嘱信息里面输入药品,然后输入药品的执行次数、计量信息、用药途径、用药频次、用药天数和总量 - -![image-20260226164745624](~@img/png/HISOperationManual/image-20260226164745624.png) - -如果需要对患者开立检验申请单,直接在项目里面输入所需要的检验信息,填写申请单信息,点击确认按钮,完成申请单开立。 - -![image-20260226164839461](~@img/png/HISOperationManual/image-20260226164839461.png) - -如果需要对患者开立检查项目,直接在医嘱里面开立检查项目,填写检查申请单信息,确认,完成申请单操作。 - -![image-20260226164956670](~@img/png/HISOperationManual/image-20260226164956670.png) - -所有医嘱项目开立好之后,点击保存按钮,完成对门诊患者的医嘱开立操作。 - -![image-20260226165057322](~@img/png/HISOperationManual/image-20260226165057322.png) - -如果开立成组的医嘱,勾选所需要成组的药品,点击组合按钮,完成成组操作。 - -![image-20260226165228916](~@img/png/HISOperationManual/image-20260226165228916.png) - -如果医嘱需要拆组,选择需要拆组的医嘱,点击拆组按钮,完成拆组操作 - - ![image-20260226165259076](~@img/png/HISOperationManual/image-20260226165259076.png) - - - -所有医嘱开立好之后,直接点击签发按钮,完成对患者的医嘱开立,医嘱签发完成后,患者可以去门诊收费处进行缴费。 - -![image-20260226165435564](~@img/png/HISOperationManual/image-20260226165435564.png) - -如果签发的医嘱需要退回修改,可以直接点击撤回按钮,完成对医嘱的撤回操作。 - -![image-20260226165505011](~@img/png/HISOperationManual/image-20260226165505011.png) - - - -如果医生开立多个诊断的处方,直接在诊断处选择处方对应的诊断即可。 - -![image-20260226165531023](~@img/png/HISOperationManual/image-20260226165531023.png) - -#### 3.4.2开立中药 - -如果患者需要开立中药,在中药处方界面,完成对中药医嘱的开立。 - -![image-20260226165706784](~@img/png/HISOperationManual/image-20260226165706784.png) - -在处方界面,选择医嘱的诊断,然后填写医嘱的用药途径、频次、用药天数、付数以及代煎信息。 - -![image-20260226165943714](~@img/png/HISOperationManual/image-20260226165943714.png) - -然后在医嘱信息里面,搜索医嘱药品,填写处方信息,然后保存签发处方,完成对处方的开立 - -![image-20260226170013317](~@img/png/HISOperationManual/image-20260226170013317.png) - -#### 3.4.3开立电子处方 - -如果患者需要开立处方流转的电子处方,在电子处方界面完成对处方流转的开立。 - -![image-20260226170044782](~@img/png/HISOperationManual/image-20260226170044782.png) - -点击新增处方按钮,在弹出的界面,输入处方诊断信息、有效天数以及处方明细,然后点击保存按钮。 - -![image-20260226170101913](~@img/png/HISOperationManual/image-20260226170101913.png) - -电子处方开好之后,点击签发按钮,电子处方流转至药房,药房进行审核。 - -![image-20260226170125128](~@img/png/HISOperationManual/image-20260226170125128.png) - - - -### 3.5开立手术申请 - -门诊医生站开立手术申请单界面,帮助医生完成手术申请单的创建、查看、编辑和取消操作,管理患者手术申请记录。 - -![image-20260226170253160](~@img/png/HISOperationManual/image-20260226170253160.png) - -点击【新增手术申请】按钮,弹出新增手术申请填写界面 - -![image-20260226170742542](~@img/png/HISOperationManual/image-20260226170742542.png) - -已保存的手术申请单可以进行查看、编辑、删除业务操作 - -![image-20260226171333865](~@img/png/HISOperationManual/image-20260226171333865.png) - - - - - - - -# 四、库房管理 - -### 4.1 药房医师角色登录 - -药房有系统管理,库房管理,发药管理,财务管理,报表管理四个权限菜单 - - - -### 4.2目录管理 - -![image-20260227095352235](~@img/png/HISOperationManual/image-20260227095352235.png) - -药房有药品目录,器材目录和厂商产地的查看编辑新增权限 - -### 4.3药品目录 - -药品目录是医院内所有在用药品的集合,需要把药品基础信息核对无误后,一一维护系统中,先对照在保存。点击添加新项目按钮,点击从医保目录导入,按照国药准字或者药品名搜索。 - -![image-20260227095635374](~@img/png/HISOperationManual/image-20260227095635374.png) - -![image-20260227095659255](~@img/png/HISOperationManual/image-20260227095659255.png) - -![image-20260227095802398](~@img/png/HISOperationManual/image-20260227095802398.png) - -搜索完成后点击对照,药品信息就被导入好了,需要填写必填项,售价等信息,基础信息填写完成后点击确定按钮就可以保存了。 - -![image-20260227104617040](~@img/png/HISOperationManual/image-20260227104617040.png) - -有不用的药品可以勾选停用,停用的药品在使用点启用就可以。 - -![image-20260227104720518](~@img/png/HISOperationManual/image-20260227104720518.png) - -可以根据药品名搜索,或者首字母缩查看药品信息。 - -![image-20260227104814740](~@img/png/HISOperationManual/image-20260227104814740.png) - -![image-20260227104852527](~@img/png/HISOperationManual/image-20260227104852527.png) - -### 4.4耗材目录 - - 这里主要维护医院的耗材,点击添加新项目,医保报销范围内的耗材点击从医保目录导入,点击对照,将耗材信息从医保导入,院内自费的项目直接填写信息就可以。 - -![image-20260227160813277](~@img/png/HISOperationManual/image-20260227160813277.png) - -点击【添加新项目】 - -![image-20260227160922986](~@img/png/HISOperationManual/image-20260227160922986.png) - -点击【从医保目录导入】 - -![image-20260227161054338](~@img/png/HISOperationManual/image-20260227161054338.png) - - - -### 4.5供货商管理 - - 药品和耗材的供货商与生产厂家,需要添加到这个目录里,点击添加,填写信息,点确定按钮即保存。 - -![image-20260227161431200](~@img/png/HISOperationManual/image-20260227161431200.png) - -可以通过厂家名称或者缩写进行查询,点击编辑,查看,可以修改和查看详细信息。 - -![image-20260227161527774](~@img/png/HISOperationManual/image-20260227161527774.png) - -![image-20260227161632987](~@img/png/HISOperationManual/image-20260227161632987.png) - -### 4.6 采购入库 - -该功能是对医院药品或耗材进行采购入库的操作。 - -![image-20260227164541472](~@img/png/HISOperationManual/image-20260227164541472.png) - -在采购单界面,填写采购单的经办人、供应商信息以及药品类型和仓库类型 - -![image-20260227164638022](~@img/png/HISOperationManual/image-20260227164638022.png) - -然后在入库单明细里面,点击添加行按钮,在项目里面搜索需要添加的药品信息、采购数量、追溯码、采购价格等信息。 - -![image-20260227164741796](~@img/png/HISOperationManual/image-20260227164741796.png) - -采购单做好之后,点击提交审核按钮,对入库单进行财务审核,审核完成之后,完成采购入库的操作。 - -![image-20260227164848821](~@img/png/HISOperationManual/image-20260227164848821.png) - -### 4.7采购退货 - -改功能是对采购入库的药品或耗材进行退货操作。 - -![image-20260227165147891](~@img/png/HISOperationManual/image-20260227165147891.png) - -在功能界面,填写退货单的经办人、退货的供应商、类型和仓库。 - -![image-20260227165219439](~@img/png/HISOperationManual/image-20260227165219439.png) - -然后在采购退货明细里面,添加需要退货的药品信息。 - -![image-20260227165255995](~@img/png/HISOperationManual/image-20260227165255995.png) - -单据做好之后,点击提交审核,财务审核完成之后,完成对药品退货的操作。 - -![image-20260227170305892](~@img/png/HISOperationManual/image-20260227170305892.png) - -### 4.8批量盘点 - - 该功能是对药房药品进行盘点操作。 - -![image-20260227170420448](~@img/png/HISOperationManual/image-20260227170420448.png) - -输入盘点的仓库类型、盘点的仓库以及盘点的类型 - -![image-20260227170457787](~@img/png/HISOperationManual/image-20260227170457787.png) - -点击生成批量盘点单按钮,添加盘点的药品 - -![image-20260227171525788](~@img/png/HISOperationManual/image-20260227171525788.png) - -盘点单生成之后,录入盘点信息,然后点击提交审核按钮,进行盘点数据的审核,审核完成之后,完成盘盈盘亏的操作。 - -![image-20260227171615683](~@img/png/HISOperationManual/image-20260227171615683.png) - -### 4.9采购管理 - - 该功能是对采购单据的管理操作。 - -![image-20260228090949856](~@img/png/HISOperationManual/image-20260228090949856.png) - -输入单据的信息,可以搜索已完成的单据信息 - -![image-20260228091021747](~@img/png/HISOperationManual/image-20260228091021747.png) - -点击详情,可以查看单据的详细信息。 - -![image-20260228091356710](~@img/png/HISOperationManual/image-20260228091356710.png) - -![image-20260228091434035](~@img/png/HISOperationManual/image-20260228091434035.png) - -点击撤销审批,可以对已审核的单据进行撤销操作。 - -![image-20260228091734914](~@img/png/HISOperationManual/image-20260228091734914.png) - - - -### 4.10库房盘点 - - 盘点功能可以统计库房实际库存,计算盈亏。 - -![image-20260228091853656](~@img/png/HISOperationManual/image-20260228091853656.png) - -盘点药品时,需要扫入所有药品的追溯码,手动输入实盘数量,计算盈亏。 - -![image-20260228093307932](~@img/png/HISOperationManual/image-20260228093307932.png) - - - -![image-20260228093401032](~@img/png/HISOperationManual/image-20260228093401032.png) - -![image-20260228093500533](~@img/png/HISOperationManual/image-20260228093500533.png) - -### 4.11领用出库 - -非药房的科室用药取药,需要填写领用出库的明细,填写好信息后提交审核,审核通过过后领用出库。 - - ![image-20260228094536231](~@img/png/HISOperationManual/image-20260228094536231.png) - -填写领用出库单据相关信息 - -![image-20260228094651168](~@img/png/HISOperationManual/image-20260228094651168.png) - -点击【添加行】按钮,对领用出库药品信息进行填写 - -![image-20260228094912624](~@img/png/HISOperationManual/image-20260228094912624.png) - - - -### 4.12领用退库 - -领用出库的药品或者耗材可以使用领用退库归还给药房或者耗材库。 - -![image-20260228105054670](~@img/png/HISOperationManual/image-20260228105054670.png) - -填写领用退款单据信息 - -![image-20260228110130585](~@img/png/HISOperationManual/image-20260228110130585.png) - -点击【添加行】按钮对退库药品信息进行填写 - -![image-20260228110211054](~@img/png/HISOperationManual/image-20260228110211054.png) - - - - - -### 4.13报损管理 - -药房或者耗材库有过期损毁的药品和耗材,可以使用这个功能记录损毁物品原因明细,确定误区后提交审核。 - -![image-20260228110319962](~@img/png/HISOperationManual/image-20260228110319962.png) - -填写报损管理单据信息 - -![image-20260228111947036](~@img/png/HISOperationManual/image-20260228111947036.png) - -点击【添加行】按钮填写报损药品/耗材信息 - -![image-20260228112234426](~@img/png/HISOperationManual/image-20260228112234426.png) - - - -### 4.14库存明细记录 - -查看库房中药品和耗材的入库明细,在库数量,库存里过期时间,方便查看管理过期物品,过期或者有不使用的药品和耗材可以点击停供。 - -![image-20260228112327067](~@img/png/HISOperationManual/image-20260228112327067.png) - -填写查询条件内容可以对报表进行筛选 - -![image-20260228114153787](~@img/png/HISOperationManual/image-20260228114153787.png) - - - -### 4.15门诊发药 - - 该功能是对门诊患者进行发药操作。 - -![image-20260228114307552](~@img/png/HISOperationManual/image-20260228114307552.png) - -点击患者列表里面待发药的患者,系统会自动调出该患者待发药的药品信息。 - -![image-20260228114449825](~@img/png/HISOperationManual/image-20260228114449825.png) - -然后在选择调配药师,输入药品的追溯码信息 - -![image-20260228114548650](~@img/png/HISOperationManual/image-20260228114548650.png) - -输入药品追溯码/扫码获取追溯码之后,点击发药按钮,完成处方的发药操作。 - -![image-20260228114748450](~@img/png/HISOperationManual/image-20260228114748450.png) - -系统也支持处方的批量发药、批量扫码以及处方打印等操作。 - -![image-20260228114811315](~@img/png/HISOperationManual/image-20260228114811315.png) - -### 4.16门诊退药 - -该功能是对门诊需要退药的患者进行退药操作。 - -![image-20260228144404590](~@img/png/HISOperationManual/image-20260228144404590.png) - -患者经过医生退药申请后,数据传到门诊药房,在患者列表栏,双击需要退药的患者。 - -![image-20260228144541219](~@img/png/HISOperationManual/image-20260228144541219.png) - -然后在退药单界面,输入退药的药品追溯码信息,点击确认退药按钮,完成退药操作。 - -![image-20260228144708368](~@img/png/HISOperationManual/image-20260228144708368.png) - -### 4.17库房审批 - -采购入库,盘点,批量盘点提交审核都在这里审批,点击重置按钮,获得最新的审批记录。 - - ![image-20260228165706462](~@img/png/HISOperationManual/image-20260228165706462.png) - -点击【审核】按钮弹出采购入库单界面 - -![image-20260228165810421](~@img/png/HISOperationManual/image-20260228165810421.png) - -信息核对正确后点击【审批通过】按钮,有问题的直接点击驳回。 - -![image-20260228170004570](~@img/png/HISOperationManual/image-20260228170004570.png) - -### 4.18发药明细 - -这里可以查询详细的发药情况,根据统计类型筛选查看不同的发药统计情况。 - -![image-20260228171057060](~@img/png/HISOperationManual/image-20260228171057060.png) - -填写查询条件可以筛选对应的报表内容 - -![image-20260228171951761](~@img/png/HISOperationManual/image-20260228171951761.png) - -### 4.19待发药查询 - -查询所有未发放的药品,也可以根据药品名和时间进行筛选查询。 - - ![image-20260228173338737](~@img/png/HISOperationManual/image-20260228173338737.png) - -### 4.20采购入库明细报表 - -这里可以查看所有的采购入库明细 - - ![image-20260228173608901](~@img/png/HISOperationManual/image-20260228173608901.png) - -可以根据填写查询条件对采购入库明细进行筛选 - -![image-20260228173923879](~@img/png/HISOperationManual/image-20260228173923879.png) - -点击单据号字段的值可以查看单据详情 - -![image-20260228174046337](~@img/png/HISOperationManual/image-20260228174046337.png) - -![image-20260228174109602](~@img/png/HISOperationManual/image-20260228174109602.png) - -### 4.21领用出库明细报表 - -查看领用出库明细 - - ![image-20260228174222011](~@img/png/HISOperationManual/image-20260228174222011.png) - -填写查询条件可以对领用出库明细报表进行筛选 - -![image-20260228174516785](~@img/png/HISOperationManual/image-20260228174516785.png) - -### 4.22库存商品明细查询报表 - -查看库存商品明细 - -![image-20260303092822553](~@img/png/HISOperationManual/image-20260303092822553.png) - -填写查询条件可以对报表进行筛选 - -![image-20260303092537650](~@img/png/HISOperationManual/image-20260303092537650.png) - -### 4.23盘点明细报表 - -查看采购盘点明细 - -![image-20260303093021953](~@img/png/HISOperationManual/image-20260303093021953.png) - - - -### 4.24采购退货明细报表 - -查看采购退货明细 - -![image-20260303093123310](~@img/png/HISOperationManual/image-20260303093123310.png) - - \ No newline at end of file diff --git a/openhis-ui-vue3/src/views/catalog/disease/index.vue b/openhis-ui-vue3/src/views/catalog/disease/index.vue index a27631c6..2fe18d87 100644 --- a/openhis-ui-vue3/src/views/catalog/disease/index.vue +++ b/openhis-ui-vue3/src/views/catalog/disease/index.vue @@ -132,6 +132,13 @@ prop="typeCode_dictText" :show-overflow-tooltip="true" /> + + + + + + + + + + @@ -308,7 +329,7 @@ import { } from './components/disease'; const { proxy } = getCurrentInstance(); -const { condition_type_code } = proxy.useDict('condition_type_code'); +const { condition_type_code, card_name_code } = proxy.useDict('condition_type_code', 'card_name_code'); const diseaseList = ref([]); const open = ref(false); @@ -448,6 +469,7 @@ function reset() { statusEnum: undefined, sourceEnum: undefined, typeCode: undefined, + reportTypeCode: undefined, description: undefined, ybFlag: undefined, ybNo: undefined, diff --git a/openhis-ui-vue3/src/views/doctorstation/components/api.js b/openhis-ui-vue3/src/views/doctorstation/components/api.js index cdfb77e2..3cc69357 100644 --- a/openhis-ui-vue3/src/views/doctorstation/components/api.js +++ b/openhis-ui-vue3/src/views/doctorstation/components/api.js @@ -948,6 +948,32 @@ export function deleteInspectionApplication(applyNo) { }); } +/** + * 获取检验类型列表(分类) + */ +export function getInspectionTypeList() { + return request({ + url: '/system/inspection-type/list', + method: 'get', + }); +} + +/** + * 获取检验项目列表(从诊疗目录中筛选检验类项目) + * @param {Object} queryParams - 查询参数 + * @param {string} queryParams.searchKey - 搜索关键词 + * @param {number} queryParams.pageNo - 页码 + * @param {number} queryParams.pageSize - 每页数量 + * @param {string} queryParams.categoryCode - 目录类别编码(检验) + */ +export function getInspectionItemList(queryParams) { + return request({ + url: '/data-dictionary/diagnosis-treatment/information-page', + method: 'get', + params: queryParams, + }); +} + // ========== 会诊相关接口 ========== /** * 获取会诊列表 diff --git a/openhis-ui-vue3/src/views/doctorstation/components/examination/examinationApplication.vue b/openhis-ui-vue3/src/views/doctorstation/components/examination/examinationApplication.vue new file mode 100644 index 00000000..fec11bc7 --- /dev/null +++ b/openhis-ui-vue3/src/views/doctorstation/components/examination/examinationApplication.vue @@ -0,0 +1,837 @@ + + + + + diff --git a/openhis-ui-vue3/src/views/doctorstation/components/inspection/inspectionApplication.vue b/openhis-ui-vue3/src/views/doctorstation/components/inspection/inspectionApplication.vue index 504d3e40..9e7ef421 100644 --- a/openhis-ui-vue3/src/views/doctorstation/components/inspection/inspectionApplication.vue +++ b/openhis-ui-vue3/src/views/doctorstation/components/inspection/inspectionApplication.vue @@ -395,7 +395,7 @@ - + @@ -413,6 +413,9 @@ + + +