Hospital Adapter Service

医院接口中转平台。第一版输出标准数据字段,不输出 YKT 字段。

技术栈

  • Node.js
  • Express
  • CommonJS
  • dotenv
  • MongoDB
  • esbuild

运行

cd hospital-adapter-service
npm install
npm run dev

默认端口: 8082

测试 gateway 本地启动:

npm run gateway

前置机轻量部署可以不安装 Mongo只安装 Node.js 和 PM2。Mongo 默认关闭,查询接口仍可直接访问医院视图。

运行角色

  • standalone: 单机调试/院内直接部署,标准资源接口和 YKT 兼容接口都由本机查询 HIS。
  • gateway: 中心网关,给 ytk-customer-service 调用,并通过 WebSocket 转发到院内 Agent。
  • edge: 院内 Agent主动连接中心网关只负责访问院内 HIS。

关键配置:

CONFIG_ADAPTER_ROLE=standalone|gateway|edge
CONFIG_GATEWAY_URL=http://中心网关地址
CONFIG_EDGE_ID=zpfb-edge-1
CONFIG_EDGE_HOSPITAL_CODE=zpfb
CONFIG_HOSPITAL_ADAPTER_CORP_MAP={"corpId":"zpfb"}

Windows 前置机部署

本机生成单文件 bundle。建议一个医院一个 env 文件,例如 .env.zpfb.env.gateway:

cd /d C:\code\yk\ykt\hospital-adapter-service
npm install
npm run build -- --env zpfb

构建输出:

dist\bundle.zpfb.js

构建时会把指定 env 文件的变量直接写进 bundle。部署到前置机时只需要复制对应 bundle不需要复制源码目录、node_modules.env 或启动脚本。

如果希望输出文件固定叫 bundle.js:

npm run build -- --env zpfb --out dist\bundle.js
node bundle.js

PM2 启动示例:

pm2 start bundle.js --name hospital-adapter-service

edge bundle 也是同一个构建命令,只是每家医院用自己的 env 文件。比如 .env.zpfb:

CONFIG_ADAPTER_ROLE=edge
CONFIG_GATEWAY_URL=http://中心网关地址
CONFIG_EDGE_ID=zpfb-edge-1
CONFIG_EDGE_HOSPITAL_CODE=zpfb
CONFIG_MONGO_ENABLED=false

然后重新构建:

npm run build -- --env zpfb

把生成的 dist\bundle.zpfb.js 复制到前置机后启动,可以复制时改名为 bundle.js:

pm2 start bundle.js --name hospital-adapter-edge-zpfb

中心 gateway 用自己的 env例如 .env.gateway:

npm run build:gateway

构建输出:

dist\bundle.gateway.js

当前 .env.gateway 用 standalone 模式,前端 HIS 选项会传固定广口 corpId,网关按 corpId 路由到本地 gk adaptergk adapter 再调用现有 dev-jcpt 服务获取原始数据,并由中继平台完成字段映射:

CONFIG_HOSPITAL_ADAPTER_CORP_MAP={"wwa54dfba0b5441ef1":"gk"}
CONFIG_GK_JHIDS_PROXY_URL=https://crm.gykqyy.com/ykt/getYoucanData/gkJhids

如果后续要直接连接嘉和 JHIDS再使用 gkgk-standalone env:

npm run build -- --env gk-standalone --out dist\bundle.gk-standalone.js

也可以直接指定 env 文件路径:

npm run build -- --env-file .env.zpfb --out dist\bundle.zpfb.js

环境变量

  • CONFIG_NODE_PORT: 服务端口
  • CONFIG_MONGO_ENABLED: 是否启用 Mongo默认 false
  • CONFIG_MONGO_OPTIONAL: Mongo 连接失败时是否允许服务继续启动,默认 true
  • CONFIG_MONGO_URI: Mongo 连接串
  • CONFIG_DB_NAME: 平台库名,默认 hospital_adapter
  • CONFIG_DEFAULT_PAGE_SIZE: 默认分页,默认 20
  • CONFIG_MAX_PAGE_SIZE: 最大分页,默认 200
  • CONFIG_HOSPITAL_ADAPTER_TIMEOUT_MS: 上游超时,默认 15000

每家医院可配置:

  • CONFIG_<HOSPITAL>_SOURCE_TYPE: mock | view | http | webservice
  • CONFIG_<HOSPITAL>_BASE_URL: HTTP/WebService 上游地址
  • CONFIG_<HOSPITAL>_DB_TYPE: 视图数据库类型,支持 mssql | oracle | oracle_sqlplus
  • CONFIG_<HOSPITAL>_DB_HOST: 视图数据库地址
  • CONFIG_<HOSPITAL>_DB_PORT: 视图数据库端口SQL Server 默认 1433
  • CONFIG_<HOSPITAL>_DB_NAME: 视图数据库名
  • CONFIG_<HOSPITAL>_DB_USER: 视图数据库用户名
  • CONFIG_<HOSPITAL>_DB_PASSWORD: 视图数据库密码
  • CONFIG_<HOSPITAL>_<RESOURCE>_SOURCE_TYPE: 单资源数据源覆盖
  • CONFIG_<HOSPITAL>_<RESOURCE>_VIEW_NAME: 单资源视图名覆盖
  • CONFIG_<HOSPITAL>_<RESOURCE>_ENDPOINT: 单资源接口路径覆盖
  • CONFIG_<HOSPITAL>_<RESOURCE>_ORDER_BY: view 分页排序字段
  • CONFIG_<HOSPITAL>_<RESOURCE>_DATE_RANGE_FIELD: start_date/end_date 对应的标准日期字段

广医口腔嘉和模块固定医院编码为 gk。gateway 路由到该模块时配置:

CONFIG_HOSPITAL_ADAPTER_CORP_MAP={"wwa54dfba0b5441ef1":"gk"}

测试环境前端可通过 HIS 选项传固定广口 corpId,网关仍按 corpId 路由:

CONFIG_HOSPITAL_ADAPTER_CORP_MAP={"wwa54dfba0b5441ef1":"gk"}

gk 模块使用嘉和 JHIDS 配置:

CONFIG_GK_JHIDS_PROXY_URL=
CONFIG_GK_JHIDS_DATA_QUERY_URL=
CONFIG_GK_JHIDS_TOKEN_URL=
CONFIG_GK_JHIDS_CLIENT_ID=
CONFIG_GK_JHIDS_CLIENT_SECRET=
CONFIG_GK_JHIDS_SYS_CODE=GKDW
CONFIG_GK_JHIDS_PAGE_SIZE=1000
CONFIG_GK_JHIDS_TIMEOUT_MS=15000
CONFIG_GK_JHIDS_TLS_REJECT_UNAUTHORIZED=true

测试环境使用现有 dev-jcpt 服务时,只需要配置 CONFIG_GK_JHIDS_PROXY_URL;中继平台会请求 dev-jcpt 的 queryJhidsData 原始能力,再执行本地 gk 字段映射。

兼容旧变量名 CONFIG_JHIDS_*,但新部署建议使用 CONFIG_GK_JHIDS_*

查询接口

curl -X POST "http://127.0.0.1:8082/api/zpfb/patient/query" \
  -H "Content-Type: application/json" \
  -d '{"id_num":"110101199001011234","page":1,"pageSize":20}'

YKT HIS 兼容入口:

curl -X POST "http://127.0.0.1:8082/api/ykt/customerHisSync" \
  -H "Content-Type: application/json" \
  -d '{"hospitalCode":"zpfb","type":"getHisCustomerArchive","idCard":"身份证号"}'

返回:

{
  "success": true,
  "message": "获取成功",
  "list": []
}

响应:

{
  "status": "success",
  "message": "查询成功",
  "data": [],
  "page": 1,
  "pageSize": 20,
  "total": 0
}

ytk-customer-service 接入

主服务保持旧 HIS 分支不变,新医院通过环境变量映射到本平台:

CONFIG_HOSPITAL_ADAPTER_GATEWAY_URL=http://127.0.0.1:8082

主服务收到 customerHisSync 后,如果未命中旧 HIS 分支,会转发到本平台的 /api/ykt/customerHisSync。本平台返回 YKT 兼容格式 { success, message, list }

资源

  • patient
  • outpatientRecord
  • orderInfo
  • pacsInfo
  • lisInfo
  • lisDetail

通用 View 数据源

view 数据源用于快速接入医院提供的数据库视图。每家医院在 adapter 配置里声明资源启停、视图名、排序字段和字段映射;查询仍然通过 HTTP 接口进入本服务。

邹平妇保示例:

CONFIG_ZPFB_SOURCE_TYPE=view
CONFIG_ZPFB_DB_TYPE=oracle_sqlplus
CONFIG_ZPFB_DB_HOST=<db-host>
CONFIG_ZPFB_DB_PORT=1521
CONFIG_ZPFB_DB_NAME=<db-name>
CONFIG_ZPFB_DB_USER=<db-user>
CONFIG_ZPFB_DB_PASSWORD=<deploy-secret>
CONFIG_ZPFB_DB_ORACLE_CONNECT_MODE=service
CONFIG_ZPFB_DB_SQLPLUS_PATH=<sqlplus-path>
CONFIG_ZPFB_DB_SQLPLUS_ENCODING=gbk

前置机 CMD 临时启动示例仅用于未打包时排查。正常单文件部署时,相关变量应写入本机 .env.production 后重新 npm run build

set CONFIG_NODE_PORT=8082
set CONFIG_MONGO_ENABLED=false
node index.js

邹平第一版默认只启用:

  • patient -> v_youcan_patient
  • outpatientRecord -> v_youcan_outpatient_record

如果医院视图字段不是标准字段,在对应 adapter 的 fieldMapping 中配置 标准字段 -> 视图字段。密码只放部署环境变量,不提交到代码。

同步标准快照

curl -X POST "http://127.0.0.1:8082/api/his/sync" \
  -H "Content-Type: application/json" \
  -d '{"hospitalCode":"zpfb","resource":"patient","maxPages":1,"pageSize":200}'

标准快照写入平台 Mongo 的 standard-snapshot,不写入 YKT 的 admin.member 等主业务集合。

如果 CONFIG_MONGO_ENABLED=false,同步标准快照接口会返回 MONGO_DISABLED;普通查询接口不受影响。

Description
No description provided
Readme 108 KiB
Languages
JavaScript 100%