@crvouga/mockingbird-service-pharmetika

中文文档
3.11.0发布于 2026/11/11MITTypeScriptES Module构建来源已验证近 30 天下载 2847

Pharmetika复合药提供者门户网站的模拟器:诊所、病人、药物订单验证/EPCS准备/提交/查询、v7取消、药物-模板目录和状态网点.

中文使用文档
文档目录9 节
  1. 安装
  2. 使用量
  3. 路线
  4. 网络呼号
  5. 状态图
  6. 管理员(超过标准合同)
  7. 命名空间
  8. 故意不模拟
  9. API 密码

@crvouga/mockingbird-service-pharmetika (中文(简体) )

本地模拟器。 真正的API合同. 部分 嘲笑鸟。 。 。 .

国家模拟器 法尔梅蒂卡 测试套房的复合药剂供应商门户: 诊所和病人的检查、病人的创造、药物订单验证/EPCS准备/提交/ 检查,v7取消, 药物模式目录, 状态网点药店 邮递员 命令只当测试时才移动( 管理过渡或自动推进路径) 模拟时钟.

  • 行动范围: 支助
  • 供应商不公布具体内容:合同openapi.yaml)是从线上手写的 塑造我们的消费者阅读和写作(pharmetika-fulfillment.adapter.ts, (中文(简体) ), pharmetika-live.client.ts,以及适配器谱中记录的遗体).
  • 成功法则. 每具尸体都带着Pharmetika的 success 旗帜。 仅 true 或者说 1 实值 成功:模拟器回答商业故障(未知病人,提交控制物质, 重复使用的命令 id,...) HTTP 200 带 success: 0 财务报告和审定财务报表 messages: [{message, type}],则 我们的适配器卫兵会反对.

安装

npm install -D @crvouga/mockingbird-service-pharmetika

仅限无害环境管理。 节点 22或 Bun 1.2. 无土生属地. 给它服务 npx mockingbird-pharmetika serve, (中文(简体) ), createServer 从 ./server (节点),或 createRuntime 与 任何获取服务器.

使用量

点 PHARMETIKA_API_URL 在模拟器上给应用程序任何 PHARMETIKA_API_TOKEN (或一针) 与 --api-token) (中文(简体) ). 设定 PHARMETIKA_WEBHOOK_SECRET 在应用程序中传递与 --webhook-secret。 。 。 . PHARMETIKA_PRACTITIONER_IDENTIFIER 可以是任意字符串; PHARMETIKA_CLINIC_NAME=Acme 选择种子诊所.

npx mockingbird-pharmetika serve --port 8801 \
  --webhook-url http://127.0.0.1:3000/prescriptions/webhooks/pharmetika \
  --webhook-secret "$PHARMETIKA_WEBHOOK_SECRET" \
  --auto-advance "2000:data_entry,shipped,completed"
import { createServer } from "@crvouga/mockingbird-service-pharmetika/server"

// Test setup: a local Pharmetika that posts its status webhooks to the app.
const server = await createServer({
  webhooks: { url: "http://127.0.0.1:3000/prescriptions/webhooks/pharmetika", secret: "whsec" },
})
const baseUrl = server.url // the app's PHARMETIKA_API_URL

// Application code: the order it submits to Pharmetika.
const id = "0192f0c8-7a3e-7cc1-9f5d-3b2a1c4d5e6f"
await fetch(`${baseUrl}/api/v5/provider_portal/medication_order/id/${id}/submit`, {
  method: "PUT",
  headers: { "x-pmk-authentication-token": "pmk_test", "content-type": "application/json" },
  body: JSON.stringify({
    clinic_identifier: "clinic-acme-0001",
    medication_order_identifier: id,
    patient: { identification: { patient_id: 1 } },
    medication_requests: [
      { product_identification: { product_identifier: "PMK-ENCLO-25" }, quantity_authorized: 1, sig: "daily" },
    ],
  }),
})

// Test control: move the order the way the pharmacy would; each step posts the status webhook.
const transition = (body: unknown) =>
  fetch(`${baseUrl}/__admin/orders/${id}/transition`, {
    method: "POST",
    headers: { "content-type": "application/json" },
    body: JSON.stringify(body),
  })
await transition({ to: "data_entry" })
await transition({ to: "shipped", tracking_id: "1Z999" })
await transition({ to: "completed" })

await server.close()

路线

所有供应商-门户路线都需要 x-pmk-authentication-token (任何非空相,除非 tokens ; 缺少或拒绝的符号是 401 {success: 0, messages}。 。 。 .

路线行为
GET /api/v5/provider_portal/clinic/clinic_list{success: 1, data: [{identifier, data: {name}}]}种子 Acme 财务报告和审定财务报表 Acme West。 。 。 .
GET /api/v5/provider_portal/provider/patient_list{success: 1, data: [{patient_id, demographics: {first_name, last_name, DOB, email, phone_primary, line_1, postal_code}}]}. 从一个沙盒病人(id 1,"沙盒病人")开始.
POST /api/v5/provider_portal/patient/create_new一个FHIR Patient 加号 clinic_identifier创建时间 : {success: true, patient_id, messages: [{message: "Added Patient!"}]}。与现有病人相同的首名/上名和DOB: {success: 0, duplicate_entry_count, duplicate_entries: [...]} (我们的适配器通过匹配).
PUT …/medication_order/id/{uuid}/validate干跑动。 检查诊所、病人的身份证 product_identifier 以物配主 sig ("请示"). 答复 data: {controlled_substance_list_count, medication_list: [{…entry, medication_order_entry_identifier, controlled, control_level}]}; 预定产品(testosterone为C-III)成套 controlled。 。 。 .
PUT …/medication_order/id/{uuid}EPCS 准备(需要) prepared_by) (中文(简体) ). 将顺序 : pending_prescriber_approval这是 未提交。处方的“标志”,其管理员向 signed。 。 。 .
PUT …/medication_order/id/{uuid}/submit创建顺序于 prescription_entered1. 受控物质被拒绝(success: 0) (中文(简体) ). UUIDv7号案:重新提交同一诊所/病人/产品/数量/西格(我们的适配器再生物) date_issued 和每次尝试的条目标识,所以这些被忽略)答案与第一次一样;在被使用的标识下的不同内容是 409 {success: 0};同一id同时提交的是: 409。 。 。 .
GET …/medication_order/id/{uuid}{success: 1, data: {order_status, medication_order_identifier, electronic_prescription_order_number, data: {order_status, …, ancillary_order_data: {medication_order_status: {workflow_status, tracking_id}}}}}; 未知编号 404.
PUT /api/v7/provider_portal/medication_order/entry/cancel{note, prescriber_order_number: <uuid>} → {success: 1, messages: []} (或不明) success: 0{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}让网友知道.
GET /api/pharmetika/provider_access/profile/medication_templates{success: 1, data: [{template_identifier, medication_display_name, description, map_dose_to_product: {dose: product_identifier}, qty_options, default_sigs, available_states, controlled}]},接受符号,基本(PHARMETIKA_USERNAME/PASSWORD,任意一对,除非 basic )或无证书(除非 anonymousCatalog: false)——我们的委托人三个倒计时.

网络呼号

每个地位员额改为: --webhook-url 有页眉 x-pharmetika-webhook-secret: <secret> (方言平等,作为我们的接受者检查). 身体形状跟随命名空间 webhookVariant,每个球场一个倒下 我们的接收器说:

备选案文体质
workflow_status (默认){event_type, event_data: {electronic_prescription_order_number, medication_order_identifier, medication_order_status: {workflow_status, tracking_id}, tracking_id?, updated_at}}
status{event_type, event_data: {medication_order_identifier, status, tracking_id?}}
flat{medication_order_identifier, medication_order_workflow_status, tracking_id?}

ID两个字段都带有我们的UUIDv7(接收器从它那里得到付款)。 非-2xx的答案是: 重审(即即时取出5 s,5 min,30 min,2 h). GET /__admin/webhooks 清单, GET /__admin/webhooks/events 载荷, POST /__admin/webhooks/flush 运行等待重试, PUT /__admin/webhook-endpoints 每个名称空间接收器.

状态图

已设定的过渡 workflow_status 逐字记录,所以任何字符串都有效。 那些我们的地图员知道:

工作流动状况我们的地位
completed, (中文(简体) ), shipped-received, (中文(简体) ), delivered已交付
shipped, (中文(简体) ), Completed Orders已运出
cancelled已取消
data_entry*, (中文(简体) ), lab_formulation, (中文(简体) ), contacting_patient, (中文(简体) ), compounding*, (中文(简体) ), filled, (中文(简体) ), dispensed, (中文(简体) ), dispense_checked, (中文(简体) ), dispense_verified, (中文(简体) ), order_reconciliation, (中文(简体) ), shipping, (中文(简体) ), signed, (中文(简体) ), verified, (中文(简体) ), checked, (中文(简体) ), ready, (中文(简体) ), ready-ship, (中文(简体) ), Complete Processing处理
其它东西prescription_entered, (中文(简体) ), pending_prescriber_approval(中文(简体) )提交的

装运或后期状态产生 tracking_id 当未给出时; 跟踪标识促进 提交/处理后运入接收器.

管理员(超过标准合同)

路线效果
POST /__admin/orders/:uuid/transition{to, tracking_id?}:设置工作流程状态并放出webhook.
GET /__admin/orders取名空间的命令(只有身份和状态).
GET /__admin/patients, (中文(简体) ), POST /__admin/patients阅读或播种名册: {patient_id?, clinic_identifier?, demographics: {first_name, last_name, DOB, …}}。 。 。 .
PUT /__admin/templates替换药品模板({templates: [...]}) (中文(简体) ).
GET编号 :PUT /__admin/settings{tokens?, basic?, anonymousCatalog?, webhookVariant?, autoAdvance?: {afterMs, path} | null} 呼叫的命名空间.
POST /__admin/tick应用适当的自动推进步骤(服务仿真器每100毫秒勾出). 等待处方批准的命令从来不自动执行.

错误预设( E)POST /__admin/faults {"preset": "<name>", "count"?: n}· ; GET /__admin/faults/presets:

预设效果
validate_success_zero, (中文(简体) ), submit_success_zero, (中文(简体) ), prepare_success_zero, (中文(简体) ), lookup_success_zeroHTTP 200 带 success: 0 和一个消息
validate_422422个 {success: 0, messages: [{message: "Please provide instructions"}]}
success_boolean成功答案 success: true 改为 1
success_string成功答案 success: "1" (我们的客户端读为失败)
cancel_success_true取消对答 success: true (我们的取消只接受) 1(中文(简体) )
submitted_but_500提交记录顺序, 然后回答 500; 重试重放成功
patient_create_duplicate, (中文(简体) ), patient_create_500创建被拒绝为重复( 命名为病人) , 或失败
clinic_list_keyedclinic_list 答题 data 作为被标识符键入的对象
controlled_count_string, (中文(简体) ), controlled_nested_requests验证的可控物质信号作为字符串计数,或在 data.medication_requests
unauthorized, (中文(简体) ), server_error每通电话401;每通服务商-门户电话500
webhook_duplicate, (中文(简体) ), webhook_reorder, (中文(简体) ), webhook_drop下一个状态的 webhooks 发送错误

命名空间

我们的后端 fetch 无法添加信头,所以可以选择三个方式: x-mockingbird-namespace页:1 /__admin/ns/<name> 前缀在 PHARMETIKA_API_URL,或证书: PUT /__admin/credentials {"credentials": {"<PHARMETIKA_API_TOKEN>": "<namespace>"}} (基本法) 用户名对目录客户端同样有效.

故意不模拟

  • 真正的完成时间和药房的内部排队:除非 autoAdvance 已经设定.
  • EPCS签署本身(两个要素,DEA检查):向 signed 代表着它.
  • Sigs,根据订单,文件和理由整理的人口统计被验证,从未被存储 或重复;只有名册保留人口统计 patient_list 返回.
  • 活目录: 默认模板在活客户端剖析的字段中合成 (没有沙盒记录);通过 templates 或者说 PUT /__admin/templates 以装入已记录行.
  • 复取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取出取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取.

API 密码

导出仁爱说明
PharmetikaAPI类进程模拟器 : fetch(request), (中文(简体) ), reset(), (中文(简体) ), transition(uuid, {to, tracking_id?}), (中文(简体) ), tick(), (中文(简体) ), orders(), (中文(简体) ), webhookBody(order)选项: sqlite, (中文(简体) ), now, (中文(简体) ), namespace, (中文(简体) ), templates, (中文(简体) ), clinics, (中文(简体) ), patients, (中文(简体) ), settings, (中文(简体) ), onWebhook。 。 。 .
createRuntime函数全面服务合同的仿真器(健康、管理、命名空间、证书、预设、网络呼号)。 选项 : webhooks: {url, secret, retryDelaysMs?, fetch?}, (中文(简体) ), settings, (中文(简体) ), templates, (中文(简体) ), clinics, (中文(简体) ), patients, (中文(简体) ), tickMs, (中文(简体) ), clock, (中文(简体) ), seed, (中文(简体) ), adminKey, (中文(简体) ), onLog。 。 。 .
PHARMETIKA_PRESETS对象每个命名的断层预设.
PHARMETIKA_NAMESPACE字符串服务名称, "pharmetika"。 。 。 .
TOKEN_HEADER字符串"x-pmk-authentication-token"。 。 。 .
WEBHOOK_SECRET_HEADER字符串"x-pharmetika-webhook-secret"。 。 。 .
tokenCredential函数请求所携带的证书(portal sorders, else Basic username),用于命名空间映射.
DEFAULT_TEMPLATES, (中文(简体) ), DEFAULT_CLINICS, (中文(简体) ), SANDBOX_PATIENT数值种子目录、诊所和名册病人.
KNOWN_STATUSES, (中文(简体) ), SUBMITTED_STATUS, (中文(简体) ), PENDING_APPROVAL_STATUS数值有记录的工作流程状态 .
document, (中文(简体) ), operationIds, (中文(简体) ), supportedOperationIds数值销售商为OpenAPI合同及其业务代号.
createServer, (中文(简体) ), serveTarget, (中文(简体) ), DEFAULT_PORT (单位:千美元)./server(中文(简体) )节点服务过来 node:http (自动提醒每100米) serve CLI目标; 第8801口.

部分 嘲笑鸟。 。 。 .

版本与发布记录

@crvouga/mockingbird-service-pharmetika 共发布 41 个版本,首次发布于 2026/09/23;过去 12 个月发布了 41 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
3.11.0latest2026/11/11今天
3.10.82026/11/038 天前
3.10.72026/11/038 天前
3.10.62026/11/038 天前
3.10.52026/11/038 天前
3.10.42026/11/038 天前

关于 @crvouga/mockingbird-service-pharmetika 的常见问题

@crvouga/mockingbird-service-pharmetika 是什么?

Pharmetika复合药提供者门户网站的模拟器:诊所、病人、药物订单验证/EPCS准备/提交/查询、v7取消、药物-模板目录和状态网点.

如何安装 @crvouga/mockingbird-service-pharmetika?

在项目目录运行 npm install @crvouga/mockingbird-service-pharmetika,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 mockingbird-pharmetika,可以用 npx mockingbird-pharmetika 直接运行。

@crvouga/mockingbird-service-pharmetika 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@crvouga/mockingbird-service-pharmetika 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@crvouga/mockingbird-service-pharmetika 可以商用吗?

@crvouga/mockingbird-service-pharmetika 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@crvouga/mockingbird-service-pharmetika 的下载量有多少?

根据 npm 官方下载统计,@crvouga/mockingbird-service-pharmetika 在 2026/10/11 – 2026/11/09 这 30 天内被下载 2,847 次,日均约 95 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@crvouga/mockingbird-service-pharmetika 还在维护吗?

最新版本 3.11.0 发布于 2026/11/11(今天);至今共发布 41 个版本,其中过去 12 个月发布了 41 个;首次发布于 2026/09/23。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。