模块: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 | 医嘱项/医嘱套检索(按关键字、科室、权限、库存等过滤) |
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"}]
}
^CBOrderCatD 中 Code='西药' 的记录(有效性规则:未生效或已失效的大类跳过)。^CBOrderSubCatI("OrderCat",西药大类ID,...) 索引下所有有效子类,按 Code 定长 2 位分段逐级嵌套:
0101 → 010101 → 01010101 → 01010101010101 的父 01 不存在),则该节点作为一级节点挂到西药大类下。GetApplicationType 逻辑,返回医院级申请单类型树,节点 type 统一标记为 appType。descripts 字段匹配;命中子类后,整条祖先路径(含西药大类)全部保留,非路径上的兄弟节点隐藏。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 捕获后返回原始错误信息) |
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"}]
}
03050063。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" 捕获) |