MyConsultationNew-MedOrderTree-API.md 15 KB

医嘱接口文档(医嘱树查询 + 医嘱项检索)

模块:src.InternetHospital.MyConsultationNew / src.OutPatient 接口类:src.InternetHospital.MyConsultationNew.Interface / src.OutPatient.Interface 实现类:src.Doctor.Application / src.OutPatient.MedItem 适用场景:前端展示医嘱选择树(西药大类+子类嵌套 + 检查检验治疗),以及按关键字检索本院可执行医嘱项/医嘱套


一、通用规范

公共入参格式

所有接口统一采用项目标准入参信封:

{
  "params": [{}],
  "pagination": [{"pageSize": 20, "currentPage": 1}],
  "code": "",
  "session": [{}]
}
  • params:业务参数数组,取第 0 个元素作为业务参数对象。
  • code:接口编码(见各接口定义)。
  • session:登录会话信息,提供 language 语言字段。

入参解析方式(项目规范):

set postParams = jsonObj.params.%Get(0)
set session = jsonObj.session.%Get(0)
set postParams.language = session.language

公共出参格式

{
  "errorCode": "0",
  "errorMessage": "成功",
  "result": {}
}
  • errorCode"0" 表示成功,非 "0" 表示失败。
  • errorMessage:错误描述,成功时为「成功」。
  • result:业务数据对象(各接口字段不同,详见下文)。

调试方式

// 接口类(前端入口)
w ##class(src.InternetHospital.MyConsultationNew.Interface).GetMedOrderTree({"params":[{"hospID":"48","searchCode":""}],"session":[{"language":"CH"}]}).%ToJSON()
// 实现类(直接调用)
w ##class(src.Doctor.Application).GetMedOrderTree({"hospID":"48","searchCode":""}).%ToJSON()

二、接口清单

接口编码 方法名 说明
12100052 GetMedOrderTree 医嘱树(西药大类+子类 + 检查检验治疗)查询
03050019 FindMedItem 医嘱项/医嘱套检索(按关键字、科室、权限、库存等过滤)

三、接口详情

3.1 医嘱树查询 GetMedOrderTree

  • 接口编码:12100052
  • 方法src.InternetHospital.MyConsultationNew.Interface.GetMedOrderTree(postObj)
  • 底层src.Doctor.Application.GetMedOrderTree(params)

入参

字段 类型 必填 说明
params[0].hospID String 医院 ID(医院不能为空,否则返回错误码 05210010)
params[0].searchCode String 模糊搜索关键字,仅按 descripts(名称)匹配,大小写不敏感(自动转大写)。为空表示不搜索,返回全量树

入参示例:

{
  "params": [{"hospID": "48", "searchCode": ""}],
  "code": "12100052",
  "session": [{"language": "CH"}]
}

业务规则

  1. 西药分支(集团级,不依赖 hospID)
    • 西药大类:^CBOrderCatDCode='西药' 的记录(有效性规则:未生效或已失效的大类跳过)。
    • 西药子类:遍历 ^CBOrderSubCatI("OrderCat",西药大类ID,...) 索引下所有有效子类,按 Code 定长 2 位分段逐级嵌套:
      • 例:0101010101010101010101010101
      • 父节点 Code = 子节点 Code 去掉末尾 2 位;若父 Code 在有效子类映射中不存在(如 0101 的父 01 不存在),则该节点作为一级节点挂到西药大类下。
    • 子类有效性规则:第 21 位 StartDate 晚于今天,或第 22 位 StopDate 早于今天则跳过。
  2. 检查/检验/治疗分支(依赖 hospID):复用 GetApplicationType 逻辑,返回医院级申请单类型树,节点 type 统一标记为 appType
  3. 模糊搜索(searchCode 非空)
    • 仅按子类 descripts 字段匹配;命中子类后,整条祖先路径(含西药大类)全部保留,非路径上的兄弟节点隐藏。
    • 西药大类自身若 descripts 命中,或存在任一命中的子类,则大类保留。
  4. 西药节点不返回 medCount(与 appType 节点字段不同)。

出参

result.data 为数组,元素分为三类节点:

① 西药大类节点(type=orderCat)

字段 类型 说明
id String 西药大类 ID(实体主键)
code String 大类 Code(值为「西药」)
descripts String 大类名称
descriptsSPCode String 名称拼音码
type String 固定值 orderCat
breadcrumb String 面包屑,值为大类名称
count Integer 子类数量(含嵌套所有层级节点数)
children Array 子类嵌套数组(结构见下)

② 西药子类节点(type=orderSubCat,可多级嵌套于 children 中)

字段 类型 说明
id String 子类 ID
code String 子类 Code(如 0101、010101、01010101 等,定长 2 位分段)
descripts String 子类名称
descriptsSPCode String 名称拼音码
type String 固定值 orderSubCat
breadcrumb String 面包屑,逐级拼接「父名称>>>子名称」
startDate String 生效日期(yyyy-mm-dd),空串表示未设置
stopDate String 失效日期(yyyy-mm-dd),空串表示未设置
children Array 下一级子类数组(无下级则为空数组 []

③ 检查/检验/治疗节点(type=appType)

复用 GetApplicationType 返回的节点结构(type 统一标记为 appType),字段以 GetApplicationType 实现为准。

出参示例

{
  "errorCode": "0",
  "errorMessage": "成功",
  "result": {
    "data": [
      {
        "id": "西药大类ID",
        "code": "西药",
        "descripts": "西药",
        "descriptsSPCode": "XY",
        "type": "orderCat",
        "breadcrumb": "西药",
        "count": 3,
        "children": [
          {
            "id": "子类ID_0101",
            "code": "0101",
            "descripts": "抗感染药物",
            "descriptsSPCode": "KJRYW",
            "type": "orderSubCat",
            "breadcrumb": "西药>>>抗感染药物",
            "startDate": "",
            "stopDate": "",
            "children": [
              {
                "id": "子类ID_010101",
                "code": "010101",
                "descripts": "青霉素类",
                "descriptsSPCode": "QMSL",
                "type": "orderSubCat",
                "breadcrumb": "西药>>>抗感染药物>>>青霉素类",
                "startDate": "",
                "stopDate": "",
                "children": [
                  {
                    "id": "子类ID_01010101",
                    "code": "01010101",
                    "descripts": "天然青霉素",
                    "descriptsSPCode": "TRQMS",
                    "type": "orderSubCat",
                    "breadcrumb": "西药>>>抗感染药物>>>青霉素类>>>天然青霉素",
                    "startDate": "",
                    "stopDate": "",
                    "children": []
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "id": "检查类型ID",
        "type": "appType",
        "descripts": "检查",
        "children": [ { "type": "appType", "descripts": "CT", "children": [] } ]
      }
    ]
  }
}

错误码

errorCode errorMessage 说明
0 成功 正常返回
05210010 医院不能为空 hospID 为空
5002 等 系统错误描述 运行时异常(catch 捕获后返回原始错误信息)

3.2 医嘱项检索 FindMedItem

  • 接口编码:03050019
  • 方法src.OutPatient.Interface.FindMedItem(jsonObj)
  • 底层src.OutPatient.MedItem.FindMedItem(paraStr, pageStr)

入参

字段 类型 必填 说明
params[0].admID String 就诊 ID;为空时不按就诊类型/接收科室校验权限
params[0].searchCode String 模糊搜索关键字,匹配医嘱项代码、名称、别名(含拼音/首字母前缀匹配),大小写不敏感
params[0].logonLocID String 登录科室 ID(用于接收科室权限判断)
params[0].userID String 用户 ID(医生),用于个人级医嘱套/医嘱权限过滤
params[0].groupID String 角色 ID,用于取角色下的医嘱子类权限
params[0].hospID String 医院 ID(为空返回错误码 03050050)
params[0].medCatID String 医嘱大类 ID,预筛子类范围
params[0].medSubCatID String 医嘱子类 ID,预筛子类范围
params[0].cmFlag String 草药标志,Y=仅检索中草药大类,否则排除中草药大类
params[0].herbalFormID String 草药剂型 ID,仅检索该剂型对应的子类
params[0].drugsFlag String 药品标识,Y=仅检索药品类医嘱(orderTypeCode='D')
params[0].judgeFlag String 库存/接收科室判断标志,Y=需判断库存与接收科室;部分页面检索无需判断
params[0].ordType String 医嘱类型,进一步按类型过滤子类
params[0].notOrdSet String 不检索医嘱套标志,Y=不返回医嘱套结果
params[0].language String 语言:CN 中文 / EN 英文(影响 descripts 英文名回退)
pagination[0].pageSize Integer 每页条数,>0 时启用分页
pagination[0].currentPage Integer 当前页,空默认第 1 页
pagination[0].sortColumn String 排序字段
pagination[0].sortOrder String 排序方向

入参示例:

{
  "params": [{
    "admID": "1599898",
    "searchCode": "护理液",
    "logonLocID": "1777",
    "userID": "4924",
    "groupID": "407",
    "hospID": "25",
    "medCatID": "",
    "medSubCatID": "",
    "cmFlag": "",
    "herbalFormID": "",
    "drugsFlag": "",
    "judgeFlag": "Y",
    "ordType": "",
    "notOrdSet": "",
    "language": "CN"
  }],
  "pagination": [{"pageSize": 50, "currentPage": 1, "sortColumn": "", "sortOrder": ""}],
  "code": "03050019",
  "session": [{"userID": "4924", "locID": "1777", "groupID": "407", "hospID": "25", "sessionID": "0YrbAyydeH", "hospCode": "H03", "language": "CN"}]
}

业务规则

  1. 权限过滤:依次按角色(groupID)、就诊类型(admID)、资源类型、医嘱类型(ordType)过滤可开的医嘱子类;无任何权限返回 03050063
  2. 本院校验:医嘱项必须存在本院库存/收费记录(视光产品、药品分别校验)。
  3. 关键字匹配:匹配医嘱项代码(全等优先)、名称(前缀匹配次之)、别名(含拼音码匹配);按匹配优先级(全等>前缀>别名)排序,集采标识排前。
  4. 库存/价格过滤:根据模块配置(ShowStockZeroOrder、ShowPriceZeroOrder、ShowNoRecLocOrder 等)决定是否过滤零库存、零价格、无接收科室的医嘱项。
  5. 医嘱套notOrdSet 非 Y 时检索全院级/科室级/个人级医嘱套(cmFlag=Y 时检索草药医嘱套 HBCMOrderSet)。

出参

result 为对象,含 totalCountdata 数组:

字段 类型 说明
result.totalCount Integer 符合结果的总条数(含医嘱项与医嘱套,分页前)
result.data Array 结果数组,元素分「医嘱项」与「医嘱套」两类(见下)

① 医嘱项节点(来自 GetMedItemObj)

字段 类型 说明
medID String 医嘱项 ID
medDesc String 医嘱项名称(含规格,英文环境回退英文名)
medCode String 医嘱项代码
medSubCatDesc String 医嘱子类名称
medCatDesc String 医嘱大类名称
medPrice String 医嘱项价格(2 位小数)
medVendorDesc String 供应商
medManfDesc String 厂商
recLocDesc String 执行/接收科室描述
medStock String 库存(科室+数量+单位,多科室用 ; 分隔)
resQty String 在途数量
medItemGrade String 医保类型/等级
tradeName String 商品名
price String 计价单位价格(2 位小数)
manfDesc String 生产厂家
uniformPurchFlag String 集采标志(「是」/「否」)
drugUseInfo String 药品用法信息
recLocCode String 接收科室(药房)Code
userCode String 医生 Code

② 医嘱套节点(来自 GetOrdSetObj,cmFlag=Y 时为草药医嘱套)

字段 类型 说明
ordSetID String 医嘱套 ID
medDesc String 医嘱套描述
medCode String 医嘱套代码
medSubCatDesc String 固定值「医嘱套」
medCatDesc String 固定值「医嘱套」
medPrice String
medVendorDesc String
medManfDesc String
recLocDesc String
medStock String
resQty String
orderType String
medItemGrade String

出参示例(节选):

{
  "errorCode": "0",
  "errorMessage": "",
  "time": 0.012,
  "result": {
    "totalCount": 12,
    "data": [
      {
        "medID": "12345",
        "medDesc": "氯化钠注射液(250ml)",
        "medCode": "207.TC00007",
        "medSubCatDesc": "体液电解质调节药",
        "medCatDesc": "西药",
        "medPrice": "12.50",
        "medVendorDesc": "某供应商",
        "medManfDesc": "某厂商",
        "recLocDesc": "住院药房",
        "medStock": "住院药房100瓶",
        "resQty": "住院药房0瓶",
        "medItemGrade": "甲类",
        "tradeName": "",
        "price": "12.50",
        "manfDesc": "某制药厂",
        "uniformPurchFlag": "否",
        "drugUseInfo": "",
        "recLocCode": "LOC01",
        "userCode": "DOC01"
      },
      {
        "ordSetID": "987",
        "medDesc": "普通感冒医嘱套",
        "medCode": "ORDSET001",
        "medSubCatDesc": "医嘱套",
        "medCatDesc": "医嘱套",
        "medPrice": "",
        "medVendorDesc": "",
        "medManfDesc": "",
        "recLocDesc": "",
        "medStock": "",
        "resQty": "",
        "orderType": "",
        "medItemGrade": ""
      }
    ]
  }
}

错误码

errorCode errorMessage 说明
0 成功 正常返回(errorMessage 为空串)
03050050 搜索医嘱项时医院不能为空 hospID 为空
03050063 该医生没有维护录医嘱权限 过滤后无私权子类
5002 等 系统错误描述 运行时异常(方法内 $zt="error" 捕获)