@crvouga/mockingbird-service-careltalk (英语)
本地模拟器。 真正的API合同. 部分 嘲笑鸟。 。 。 .
状态模拟器 关卡外部 API (% 1)/externalapi对于测试套房:客户端登录,
形式定义GetForm)和保存的形式回合(SavePatientForm,表格提交
队列的调用、病人搜索和插入(账户回填)、状态、空位和
任用。 后端需要 careTalk 键在后端, 因此模拟器让一个堆起后端运行
没有β环境的CareTalk路径.
- 行动范围: 支助
- 供应商不公布具体内容:合同
openapi.yaml由手写自 消费者的zod计划和接口(caretalk.types.ts, (中文(简体) ),caretalk-forms.type.ts) (中文(简体) ).
安装
npm install -D @crvouga/mockingbird-service-caretalk
仅限无害环境管理。 节点 22或 Bun 1.2. 无土生属地. 给它服务
npx mockingbird-caretalk serve, (中文(简体) ), createServer 从 ./server (节点),或 createRuntime
与任何获取服务器.
使用量
点 CARETALK_API_URL 在模拟器上(后端验证为 仅限 https放松点
用于回路或使用 TLS 的模拟器前. getFormData 硬码
https://api.caretalkbeta.com (接缝) G-Y1级) (中文(简体) ). CARETALK_USERNAME, (中文(简体) ), CARETALK_PASSWORD 财务报告和审定财务报表
CARETALK_API_KEY 除非 --api-user 编号 : --api-key 钉住他们.
npx mockingbird-caretalk serve --port 8823 --api-user "$CARETALK_USERNAME:$CARETALK_PASSWORD" --api-key "$CARETALK_API_KEY"
import { createServer } from "@crvouga/mockingbird-service-caretalk/server"
// Test setup: the emulator. The application gets CARETALK_API_URL = server.url.
const server = await createServer()
const baseUrl = server.url
// Application code: log in, then read a form with the token.
const login = await fetch(`${baseUrl}/externalapi/Auth/client-login`, {
method: "POST",
headers: { "content-type": "application/json" },
// Any credentials log in unless --api-user pins them.
body: JSON.stringify({ userName: "acme-api", password: crypto.randomUUID() }),
})
const { token } = (await login.json()) as { token: string }
const forms = await fetch(`${baseUrl}/externalapi/Forms/GetForm/health-history`, {
headers: { authorization: `Bearer ${token}` },
})
const [form] = (await forms.json()) as { fullFormDto: { id: number } }[]
// Test control: after the app's form-submission queue runs, assert what reached CareTalk.
const saved = await fetch(`${baseUrl}/__admin/form-submissions`)
const { submissions } = (await saved.json()) as { submissions: unknown[] }
await server.close()
路线
| 路线 | 行为 |
|---|---|
POST /externalapi/Auth/client-login | {userName, password} → {token, expiration}最后一个托肯 tokenTtlSeconds (默认3600,我们的客户端缓存) 在模拟时钟. |
GET /externalapi/Forms/GetForm/{formName} | 姓名或鼻涕,对大小写不敏感: [{formRoundId, patientAppointmentId, submitDate, fullFormDto}]; 未知表单为 []与 PatientId (和 AppointmentId),患者最新保存的圆:选择的答案 isChecked,自由文本响应。 接受登录符号或静态 API 密钥. |
POST /externalapi/Forms/SavePatientForm?patientId=&patientAppointmentId= | 划界案fullFormDto.groups[].groupQuestions[]) (中文(简体) ). 问题ID必须属于形式,回答问题ID(文本问题采取 id: 0 有打出值的),单选题一答;违反为400个"问题细节",未知患者或表404. → {success: true, message}。 。 。 . |
GET /externalapi/Patients/SearchForPatient?FirstName&LastName&zipCode&DateOfBirth | 对大小写不敏感的名称, ZIP, 以及其中任何一个中的日期 YYYY-MM-DD, (中文(简体) ), MM/DD/YYYY,ISO − {isExists: true, eligibleId, programId}; 无匹配 400个 {isExists: false, message} (我们的客户读出400"没有这样的病人"). |
GET /externalapi/States | 51个国家 {id, stateUid, name, abbreviation, …} (UT为45). |
POST /externalapi/Patients | 创建一个病人并回复 CareTalk的全部记录(id, (中文(简体) ), eligibilityId =: id, (中文(简体) ), userState, (中文(简体) ), formattedUserMobile, (中文(简体) ), clientId(中文(简体) ). |
GET /externalapi/PatientAppointments/GetFreeSlots?date&programId&eligibleId | 两名医生的半小时时间为9:00-16:30,减去预定的医生. |
POST /externalapi/PatientAppointments | {doctorId, patientId (the eligible id), from, to} → {id, patientId: null, eligibilityId, appointmentStatus: 1, physicianId};取出或未知槽为400. |
GET /externalapi/PatientAppointments/GetPatientAppointmentsByEligibleId/{id} | 那个病人的预约. |
未校正或已过期的电话是空的 401 与 WWW-Authenticate: Bearer (我们的客户端)
登录一次并重试。 校验错误为 ASP.NET 问题详情
{type, title, status, errors, traceId}。 。 。 .
管理员(超过标准合同)
| 路线 | 效果 |
|---|---|
GET /__admin/form-submissions[?patientId=] | 已保存的回合 : {formRoundId, formId, patientId, patientAppointmentId, submitDate, answers: [{questionId, answerIds, freeAnswerText}]}。 。 。 . |
GET 编号 : POST /__admin/patients | 列出患者,或者直接创建一个(患者POST机构),所以搜索会找到它. |
GET /__admin/forms, (中文(简体) ), PUT /__admin/forms/:id | 列出或添加/替换表格定义(fullFormDto 形状). |
POST /__admin/appointments/:id/status | {appointmentStatus}:更改预约状态代码. |
GET/PUT /__admin/settings | {tokenTtlSeconds?, users?: [{userName, password}], apiKeys?, programId?}。 。 。 . |
错误预设( E)POST /__admin/faults {"preset": "<name>", "count"?: n}: login_failure, (中文(简体) ),
invalid_credentials, (中文(简体) ), token_expired (每项业务适用计数), server_error, (中文(简体) ),
gateway_html, (中文(简体) ), form_not_found, (中文(简体) ), patient_not_found, (中文(简体) ), save_rejected, (中文(简体) ), connection_drop, (中文(简体) ),
slow。 。 。 .
命名空间
x-mockingbird-namespace页:1 /__admin/ns/<name> 前缀在 CARETALK_API_URL符号
携带他们被发给的API用户,所以 PUT /__admin/credentials {"credentials": {"<CARETALK_USERNAME>": "<ns>", "<CARETALK_API_KEY>": "<ns>"}} 运行两种认证样式.
故意不模拟
- CareTalk在表格背后的临床工作流程(审查,工作人员创建的表格回合), 资格档案、保健大猩猩检索、药物和诊断.
- 真正的医生日历:槽被合成;时区被固定到山上.
- 活形式目录:
DEFAULT_FORMS以 CareTalk 形状合成(活平相) 脚本种子模拟器 从β环境的形态代替.
API 密码
| 导出 | 仁爱 | 说明 |
|---|---|---|
CareTalkAPI | 类 | 进程模拟器 : fetch(request), (中文(简体) ), reset(), (中文(简体) ), addPatient(body), (中文(简体) ), slots(date), (中文(简体) ), setAppointmentStatus(id, status), (中文(简体) ), upsertForm(form), (中文(简体) ), rounds(), (中文(简体) ), patients()选项: sqlite, (中文(简体) ), now, (中文(简体) ), namespace, (中文(简体) ), forms, (中文(简体) ), settings。 。 。 . |
createRuntime | 函数 | 全面服务合同的仿真器(保健、管理员、命名空间、证书、预设)。 选项 : forms, (中文(简体) ), settings, (中文(简体) ), clock, (中文(简体) ), seed, (中文(简体) ), adminKey, (中文(简体) ), onLog, (中文(简体) ), sqlite。 。 。 . |
CARETALK_PRESETS | 对象 | 每个命名的断层预设. |
CARETALK_NAMESPACE | 字符串 | 服务名称, "caretalk"。 。 。 . |
DEFAULT_FORMS | 数组 | 种子形式定义(健康史101,AOE问题102). |
DEFAULT_DOCTORS | 数组 | 医生可以免费抽出时间. |
US_STATES | 数组 | 这个 /externalapi/States 作行相会. |
tokenCredential | 函数 | API 用户被发一个令牌,或者静态密钥(如何将证书映射到命名空间). |
normalizeDate | 函数 | YYYY-MM-DD 从ISO, YYYY-MM-DD 或者说 MM/DD/YYYY。 。 。 . |
problem | 函数 | 构建 ASP.NET 问题细节响应. |
document, (中文(简体) ), operationIds, (中文(简体) ), supportedOperationIds | 数值 | OpenAPI合同及其操作代号. |
createServer, (中文(简体) ), serveTarget, (中文(简体) ), DEFAULT_PORT (单位:千美元)./server(中文(简体) ) | 节点 | 服务过来 node:http; 数据 serve CLI目标(--api-user, (中文(简体) ), --api-key; 开口8823. |
部分 嘲笑鸟。 。 。 .