# @crvouga/mockingbird-service-pharmetika 中文文档

规范地址：https://npmcn.com/package/%40crvouga/mockingbird-service-pharmetika/

版本：3\.11\.0
npm 元数据更新时间：2026-11-11T02:33:44.048Z
中文译文更新时间：2026-11-11T06:35:29.677Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40crvouga/mockingbird-service-pharmetika
原文对照：https://npmcn.com/package/%40crvouga/mockingbird-service-pharmetika/?lang=original
项目主页：https://github.com/crvouga/mockingbird/tree/main/packages/service/pharmetika#readme
源码仓库：https://github.com/crvouga/mockingbird

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：4.5 MB，18 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：2 个
- 首次发布：2026-09-22T23:56:28.711Z
- 最新版本发布：2026-11-11T02:33:42.969Z
- 近 30 天下载量：2847（2026-10-11 至 2026-11-09，npm 官方下载统计）
- 已发布版本数：41（近 12 个月 41 个）

## 中文简介

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

## 安装

```sh
npm install @crvouga/mockingbird-service-pharmetika
```

也可以使用：`pnpm add @crvouga/mockingbird-service-pharmetika`、`yarn add @crvouga/mockingbird-service-pharmetika`、`bun add @crvouga/mockingbird-service-pharmetika`

## README

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

> 本地模拟器。 真正的API合同. 部分 [嘲笑鸟](https://github.com/crvouga/mockingbird)。 。 。 .

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

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

## 安装

```bash
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` 选择种子诊所.

```bash
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"
```

```ts
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_entered`1\. 受控物质被拒绝(`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_zero` | HTTP 200 带 `success: 0` 和一个消息 |
| `validate_422` | 422个 `{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_keyed` | `clinic_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口. |

部分 [嘲笑鸟](https://github.com/crvouga/mockingbird)。 。 。 .

## 常见问题

### @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 和提交记录判断。

