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)
    • 西药大类:^CBOrderCatD 中 Code='西药' 的记录(有效性规则:未生效或已失效的大类跳过)。
    • 西药子类:遍历 ^CBOrderSubCatI("OrderCat",西药大类ID,...) 索引下所有有效子类,按 Code 定长 2 位分段逐级嵌套:
      • 例:0101 → 010101 → 01010101 → 0101010101
      • 父节点 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 为对象,含 totalCount 与 data 数组:

字段 类型 说明
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" 捕获)