@ cosyte/ synth (英语)
种子可复制 合成保健装置 用于Node.js和TypeScript: spec-clean,从未真实的PHI.
用于节点.js和TypeScript的定型、可种子的合成保健试验装置:HL7 v2、FHIR R4和美国Core、C-CDA、X12、NCPDP和ASTM,通过建筑进行光谱清理,从未进行真正的PHI.
为什么会这样
医疗一体化测试套件需要信息和文件 看起来像什么 发送系统产生, 并且它决不能持有 一个真正的病人的数据。 复制生产样品 并用手擦洗它们 就会冒第二个风险 手写固定装置很少得到第一个 还有 无法将每次运行中的变化作为黄金文件执行.
@cosyte/synth 生成可复制的合成测试 corpora 跨越了六种 Cosyte 格式 (HL7 v2,),
FHIR R4 / US Core, C-CDA, X12, NCPDP,和ASTM). 这是一个 消费者 会 议 日 程 和 议 程
它建造了每个文物 通过剖析器自己的构建器/序列器
(所以每个文物通过解析器重新分出零警告) 并绘制每个标识符,名称,
日期、电话和地址 保证不碰撞合成源这是一个
格式/符合生成器,而不是临床模拟器: 它不模拟疾病发展
(这是Synthea).
状态
0.1行,发布为npm. npm 软件包页面上显示的版本是
即为活;此页面从不重复。 在1.0以下,一个破碎的更改提高了小版本和
changelog说什么坏了。 发电机是 特性完成页:1
种子-PRNG核心、合成-安全供应商和回程操纵; 跨越所有
六种格式页:1ADT编号 :ORU编号 :ORM编号 :SIU编号 :VXU),FHIR R4 / US Core (全临床)
设置 + collection编号 :transaction编号 :document C-CDA R2.1(《公约》+转介说明),X12 005010
837P/I/D, 835, 271), NCPDP (SCRIPT NewRx / RxRxRevewal / RxChange + Telecom B1/B2/B3),和ASTM (E1394)
记录报告 + E1381 框架),每个构建 通过其解析器自己的构建器/序列器· ; 供应商
模式,用于三个最富有的剖面图系统(HL7 v2, C- CDA, ASTM, (中文(简体) ),
(一) 每一发件准确达到预定的发件警告(预定的发件警告合同)
@cosyte/deid 配对循环,一个闭合验证带,可以去除生成的输出
并证明所有人工合成的 PHI 哨兵都被取出.
被推迟(实际上目前已超出范围): 怪异的食谱 FHIR / X12 / 国家CPDP (还有任何怪事)
- 需要私人供应商调查 270国 资格 请求 nCPDP STRIPT 生命周期
答复 (两者都跟踪剖析器的构建者表面); NCPDP STRIPT / ASTM / DICOM 互联网档案馆的存檔,存档日期2013-10-02 取消识别
配对( 无) @cosyte/deid 适配器,或未生成);和 可选 合成 临床内容摄取.
安装
npm install @cosyte/synth @cosyte/hl7 @cosyte/fhir @cosyte/ccda @cosyte/x12 @cosyte/ncpdp @cosyte/astm
节点js22或后期,于22,24和26日进行测试.
@cosyte/hl7, (中文(简体) ), @cosyte/fhir, (中文(简体) ), @cosyte/ccda, (中文(简体) ), @cosyte/x12, (中文(简体) ), @cosyte/ncpdp, (中文(简体) ), @cosyte/astm,以及
@cosyte/deid 为: 可选同伴依赖关系,每个都只需要它的子路径(@cosyte/synth/hl7, (中文(简体) ),
@cosyte/synth/fhir, (中文(简体) ), @cosyte/synth/ccda, (中文(简体) ), @cosyte/synth/x12, (中文(简体) ), @cosyte/synth/ncpdp, (中文(简体) ),
@cosyte/synth/astm,以及 @cosyte/synth/deid: 最后一个负载 @cosyte/deid 加号 五个人
解说成对, @cosyte/hl7, (中文(简体) ), @cosyte/fhir, (中文(简体) ), @cosyte/ccda, (中文(简体) ), @cosyte/x12,以及 @cosyte/ncpdp, (中文(简体) ),
:只安装您生成的固定件。 软件包核心
无第三方运行时间依赖关系。 。 。 .
使用量
下面的每一个值都是由构造合成的. 附有每种格式的指南的全文是: 打开 docs.cosyte.com/synth 页面存档备份,存于互联网档案馆。 。 。 .
生成 spec- clean HL7 v2 消息
HL7 v2 套装封面 ADT (单位:千美元)A01编号 :A04编号 :A08, (中文(简体) ), ORU^R01, (中文(简体) ), ORM^O01, (中文(简体) ), SIU^S12,以及 VXU^V04数字 :
每一个通过 @cosyte/hl7是因为 buildMessage,所以它是 spec-clean 通过建筑.
import { generateAdt, generateOru, generateHl7, hl7Corpus, roundTrip } from "@cosyte/synth/hl7";
// Same seed → byte-identical message, on any machine, any run.
const adt = generateAdt({ seed: 12345, trigger: "A01" });
const oru = generateOru({ seed: 12345 });
// Spec-clean by construction: it round-trips through @cosyte/hl7 with zero warnings.
console.log(roundTrip(adt).specClean); // true
console.log(roundTrip(oru).specClean); // true
// Or generate a reproducible mixed corpus across every family:
const corpus = hl7Corpus({ seed: 42, count: 7 }); // one of each family, cycled
console.log(corpus.artifacts.every((a) => a.warnings.length === 0)); // true, all spec-clean
// Dispatch by kind when the message type is data:
console.log(roundTrip(generateHl7("VXU^V04", 12345)).content.split("\r")[0]); // its MSH segment
生成 spec- clean FHIR R4 / US 核心资源
这个 @cosyte/synth/fhir 子路径构建资源 结束 @cosyte/fhir模型构造器这样
它们通过构造来进行光谱清理: validateResource 和,反对 真实的美国
核心6.1.0简介 (亲亲亲亲亲亲) StructureDefinitions,没有捆绑),符合"美国核心".
诊疗范围包括: Patient (基准+美国核心), Condition, (中文(简体) ), Observation (美国核心实验室)
结果+生命迹象, MedicationRequest, (中文(简体) ), Encounter, (中文(简体) ), DiagnosticReport, (中文(简体) ), Immunization, (中文(简体) ),
AllergyIntolerance, (中文(简体) ), Procedure,以及 Provenance组装成 collection, (中文(简体) ), transaction,或
document Bundle。 。 。 .
也可以请求固定 由美国Core 6.1.0 简介名称。 。 。 . usCoreCoverage() 报告1
指南所出版的每个配置文件的条目, 以及其库名 URL 以及此构建是否生成
(a) 与《公约》有关的规定; generateUsCoreProfile() 返回被覆盖的相片, 否则会被拒绝
生成任何东西。 见 它做和不做。 。 。 .
import { generatePatient, generateBundle, fhirCorpus, roundTrip } from "@cosyte/synth/fhir";
// A US Core Patient: same seed → byte-identical resource, anywhere.
const patient = generatePatient({ seed: 12345, profile: "us-core" });
// Spec-clean by construction: it round-trips through @cosyte/fhir with zero errors, byte-stable.
roundTrip(patient).specClean; // true
// A self-contained Bundle assembling a patient + its clinical spine, wired by urn:uuid references:
const bundle = generateBundle({ seed: 42, type: "transaction" });
// Or a reproducible mixed corpus across the whole spine:
const corpus = fhirCorpus({ seed: 2026, count: 6 });
corpus.artifacts.every((a) => a.warnings.length === 0); // true, all spec-clean
@cosyte/fhir 是一个 可选同伴依赖,仅需要用于 @cosyte/synth/fhir 子路径.
生成 spec- clean C- CDA 文档
这个 @cosyte/synth/ccda 子路径构建合并 CDA R2.1 文档 结束 @cosyte/ccda是因为
buildCcda因此,模板ID、LOINC部分代码和结构化/说明性协议是
建构者自己: 文档回转通过 parseCcda 与 无警告它发出一个
《防治荒漠化公约》 (单位:千美元)generateCcd或一个 转引说明 (单位:千美元)generateReferralNote),各有CCD部分
(问题、过敏、药物、结果、生命迹象、免疫、程序、社会历史)
被重新利用的 干净许可的范例码池里的人.
import { serializeCcda } from "@cosyte/ccda";
import { generateCcd, generateReferralNote, ccdaCorpus, roundTrip } from "@cosyte/synth/ccda";
// Same seed → byte-identical document. The patient name is from the shipped fake-name pool, the MRN
// lives under a synthetic assigning-authority OID, and every date comes from the seeded generator.
const ccd = generateCcd({ seed: 12345 });
serializeCcda(ccd); // spec-clean C-CDA R2.1 XML
// Spec-clean by construction: it round-trips through @cosyte/ccda with zero warnings.
roundTrip(ccd).specClean; // true
roundTrip(generateReferralNote({ seed: 12345 })).specClean; // true
// Or a reproducible mixed corpus (CCD + Referral Note, cycled):
const corpus = ccdaCorpus({ seed: 42, count: 4 });
corpus.artifacts.every((a) => a.warnings.length === 0); // true, all spec-clean
@cosyte/ccda 是一个 可选同伴依赖,仅需要用于 @cosyte/synth/ccda 子路径.
生成 X12 交易
这个 @cosyte/synth/x12 子路径构建 HIPAA 005010 (韩语) 交易 结束 @cosyte/x12域名
建设者 (单位:千美元)build837P/I/D, (中文(简体) ), build835, (中文(简体) ), build271因此,ISA/GS/ST.SE/GE/IEA信封
计算出HL的脊椎,控制号,每个段都是建设者自己的:每笔交易
往返 @cosyte/x12 与 无警告它会发出 837 (简体中文) 专业/机构
/ 牙科索赔 835号 汇款(通过建筑工程核对余额)和 第271条 资格
反应.
import { generate837P, generate835, generate271, x12Corpus, roundTrip } from "@cosyte/synth/x12";
// Same seed → byte-identical EDI. Every subscriber/patient/provider identifier is
// synthetic-by-construction: the provider NPI has a deliberately-INVALID Luhn check digit (so it can
// never be a NPPES-issued NPI), the provider tax id is an SSA never-issued 900-range SSN, member ids
// live under a synthetic assigning authority, and names come from the shipped fake-name pool.
const claim = generate837P({ seed: 12345 });
roundTrip(claim).specClean; // true, re-parses through @cosyte/x12 with zero warnings, byte-stable
roundTrip(generate835({ seed: 7 })).specClean; // true
roundTrip(generate271({ seed: 3 })).specClean; // true
// Or a reproducible mixed corpus (837P/I/D + 835 + 271):
const corpus = x12Corpus({ seed: 42 });
corpus.artifacts.every((a) => a.warnings.length === 0); // true
@cosyte/x12 是一个 可选同伴依赖,仅需要用于 @cosyte/synth/x12 子路径.
推迟: 页:1 270国 资格 请求 (单位:千美元)@cosyte/x12 船舶 build270 在它的0.1行,但是 synth
尚未生成270个)和 供应商-quirk 模式。 。 。 .
生成 NCPDP 消息
这个 @cosyte/synth/ncpdp 子路径构建国家CPDP标准 结束 @cosyte/ncpdp自己弹出
表面,因此,每个信件通过解析器绕行 无警告它会发出 苏格兰
e 规定:generateNewRx 通过 buildNewRx· ; generateRxRenewalRequest 编号 : generateRxChangeRequest
通过解析器键入 ScriptMessage 型号 + serializeScript和 电信 药店索赔
(单位:千美元)generateB1 账单/ generateB2 倒转 / generateB3 通过 buildTelecomRequest) (中文(简体) ).
import {
generateNewRx,
generateB1,
ncpdpCorpus,
scriptRoundTrip,
telecomRoundTrip,
} from "@cosyte/synth/ncpdp";
// Same seed → byte-identical output. NCPDP carries patient AND prescriber identity: the prescriber NPI
// has a deliberately-INVALID Luhn check digit and the prescriber DEA a deliberately-INVALID checksum
// (so neither can denote a real provider); patient/cardholder ids live under a synthetic assigning
// authority, phones are reserved 555-01xx, and names come from the shipped fake-name pool.
scriptRoundTrip(generateNewRx({ seed: 12345 })).specClean; // true, zero warnings, byte-stable
telecomRoundTrip(generateB1({ seed: 777 })).specClean; // true
// Or a reproducible mixed corpus (NewRx + RxRenewal + RxChange + B1 + B2 + B3):
const corpus = ncpdpCorpus({ seed: 42 });
corpus.artifacts.every((a) => a.warnings.length === 0); // true
@cosyte/ncpdp 是一个 可选同伴依赖,仅需要用于 @cosyte/synth/ncpdp 子路径.
推迟: 销售商-quirk模式。 STRIPT覆盖跟踪剖析器的构建者表面:
续订/更改 答复 土地为 @cosyte/ncpdp 增长造行者.
生成 ASTM 信件
这个 @cosyte/synth/astm 子路径构建 ASTM 实验室消息 结束 @cosyte/astm自己弹出
表面数字 : buildAstmMessage 为E1394记录层, composeAstmFrames e1381型机车
层,因此每封信件绕行通过解析器 无警告它释放出
H编号 :P编号 :O编号 :R.../ (中文(简体) )C编号 :L 结果报告 (单位:千美元)generateAstmResult页:1 H编号 :P编号 :O编号 :L 顺序
(单位:千美元)generateAstmOrder页:1 设置 双胞胎generateAstmResultFramed) (中文(简体) ).
import {
generateAstmResult,
generateAstmResultFramed,
astmRoundTrip,
astmFramedRoundTrip,
astmCorpus,
} from "@cosyte/synth/astm";
// Same seed → byte-identical output. The P (patient) record carries the name, birthdate, and the
// practice- and laboratory-assigned patient ids, all synthetic-by-construction: names from the shipped
// fake-name pool, DOB seeded, and the two ids minted independently under a synthetic assigning authority
// (so they stay DISTINCT, exactly as @cosyte/astm keeps them on parse).
astmRoundTrip(generateAstmResult({ seed: 12345 })).specClean; // true, zero warnings, byte-stable
// The E1381-framed twin: the modulo-256 checksum and 0 to 7 frame numbers are computed by @cosyte/astm.
astmFramedRoundTrip(generateAstmResultFramed({ seed: 12345 })).specClean; // true
// Or a reproducible mixed corpus (a result report + an order):
const corpus = astmCorpus({ seed: 42 });
corpus.artifacts.every((a) => a.warnings.length === 0); // true
@cosyte/astm 是一个 可选同伴依赖,仅需要用于 @cosyte/synth/astm 子路径.
生成一个销售商的定点器
光谱清洁固定装置测试,一个解析器读取 对 讯息; 奇特模式 试验它能容忍
现实的销售商偏离了真实的流量, 并表面完全正确的诊断。 这个
奇特词汇 是解析器自己的配置文件系统: 一个怪胎偏离消息 结构 这么说吧
往返 确切的,一个意图,稳定的警告代码 (单位:千美元) 意向预警合同),以及
其中内置 公开 剖析器剖析器声称偏离, 它的下方是整齐的回转
(被压抑,或重新损坏为: PROFILE_QUIRK_APPLIED) (中文(简体) ). 怪怪的从不引入一个真实的价值观:
它会改变形状,永远不出现, 所以合成安全门仍然通过.
Quirks的飞船 三个最富有的简介系统, HL7 v2, C- CDA, 和ASTM数字 :
import { generateHl7Quirk, hl7QuirkRoundTrip } from "@cosyte/synth/hl7";
import { generateCcdaQuirk, ccdaQuirkRoundTrip } from "@cosyte/synth/ccda";
import { generateAstmQuirk, astmQuirkRoundTrip } from "@cosyte/synth/astm";
// A site-defined HL7 v2 Z-segment → exactly UNKNOWN_SEGMENT; the `visage` profile suppresses it.
hl7QuirkRoundTrip(generateHl7Quirk({ seed: 1, quirk: "unknown-zsegment" })).warnings; // ["UNKNOWN_SEGMENT"]
// A deprecated C-CDA LOINC → exactly DEPRECATED_LOINC; `smartScorecard` re-badges it.
ccdaQuirkRoundTrip(generateCcdaQuirk({ seed: 1, quirk: "deprecated-loinc" })).withProfile
?.tolerated; // true
// A non-standard ASTM &Z& escape → exactly ASTM_UNKNOWN_ESCAPE_SEQUENCE; `referenceCorpus` re-badges it.
astmQuirkRoundTrip(generateAstmQuirk({ seed: 1, quirk: "unknown-escape" })).intendedWarningHeld; // true
格式配置系统不支持以稳定方式关闭失败 SYNTH_UNSUPPORTED_QUIRK
诊断,绝不是沉默的错误,其他选择者也一样:一种信息,一种
文档类型、 实体组合条目、 一种 837 变体,一种Bundle类型. 每个都用自己的套装检查
在什么生成之前, 一个未识别的就是致命的 SYNTH_UNSUPPORTED_KIND 而不是一个
错误的标签程序。 每一次拒绝都带有一个代码和一个固定的信息 从被冻结的桌子,并引用
没有你通过。 每一个怪胎都被一个 公开记录 偏差或剖析器
公开 档案,从来不是私人卖主.
推迟: 怪异的食谱 FHIR、X12和NCPDP和任何需要 个人, 供应商属性 到地面上.
与 @cosyte/deid (对接环)
这个 @cosyte/synth/deid 子路径是决定性的 闭路协同验证装置 联 合 国
synth ⇄ deid 双: 它 生成 一件艺术品, 植物 特殊合成 PHI
在医院的哨兵, 删除 它穿过 @cosyte/deid,以及 核实 每个
哨兵从输出中消失(幸存的哨兵是一个硬故障),而临床有效载荷
幸存下来的 (防弹衣).
import {
hl7DeidLoop,
fhirDeidLoop,
x12DeidLoop,
ncpdpTelecomDeidLoop,
ccdaDeidLoop,
summarizeDeidCoverage,
} from "@cosyte/synth/deid";
const r = hl7DeidLoop({ seed: 42, kind: "ORU^R01" });
r.pass; // true
r.survivors; // [], every planted synthetic PHI sentinel was removed
r.clinicalScrubbed; // [], no clinical value was over-scrubbed
const summary = summarizeDeidCoverage([
hl7DeidLoop({ seed: 1 }),
fhirDeidLoop({ seed: 1 }),
x12DeidLoop({ seed: 1, variant: "837P" }),
ncpdpTelecomDeidLoop({ seed: 1, transaction: "B1" }),
ccdaDeidLoop({ seed: 1 }),
]);
summary.allPass; // true, zero survivors, zero over-scrub, per format
这是一个 联合验证手段,而不是独立审计 联 合 国 @cosyte/deid 对抗现实世界
数据:它证明对子在 synth自己的输出。 清除检查是 视网膜:
仅扫描旧 PHI loci 上剩余的已识别值, 所以提供者/ 组织
身份的去识别者合法保留 从未被理解为虚假的幸存者. @cosyte/deid 是一个
可选同伴依赖,只需要这个子路径. 跳过并命名 (单位:千美元)DEID_LOOP_SKIPPED:
全国CPDP 苏格兰 财务报告和审定财务报表 ASTM 系统 (无) @cosyte/deid 适配器)和 迪康 (不由 synth) (中文(简体) ).
绘制合成值
import { createRng, safe, isSyntheticSsn, isItinFormatted, isSyntheticNpi } from "@cosyte/synth";
const rng = createRng(42);
const nationalId = safe.ssn(rng);
isSyntheticSsn(nationalId); // true, always an SSA never-issued SSN
isItinFormatted(nationalId); // false, never a validly formatted IRS ITIN either
isSyntheticNpi(safe.npi(rng)); // true, always a deliberately-invalid-Luhn NPI (never a real NPI)
是什么让它值得信赖
- 逐个合成中,没有代码路径释放出未从保留区域或
已运出假名池(SSA从未发行的SSN,也并非IRS ITINS), NANP
555-01xx电话,RFC 2606/6761example.*rFC 5737/3849 TEST-NET IPs,一种合成分配法 (b) MRN的权威。 一个CI门证明了这一点. 生成的值不能是真实的,也不能是真实的 PHI . - 校对:Soup通过解析器的保守序列器和 直接反馈到:每件文物再展出零警告.
- 决定性手卷出种子的PRNG(
sfc32编号 :splitmix32(三);Math.random被禁绝. 一个种子决定输出, 字节的字节, 在同一解析器版本上, CI 比较这些 横跨22号、24号和26号节点的字节. - 不可改变,生成的文物和
Corpus结果是被冻结的. - 0 第三方运行时间依赖关系,解析器的同伴是第一党 Cosyte 包,
从npm安装用于测试; 双重无害环境管理+CJS,经验证
attw。 。 。 .
文档
全文见 docs.cosyte.com/synth 页面存档备份,存于互联网档案馆数字 :
- 安装,则 快速启动,以及 教程 : 测试您的 HL7 处理生成的固定装置。 。 。 .
- 如何引导 : HL7 v2 数据, (中文(简体) ), FHIR R4和美国核心, (中文(简体) ),
C-CDA (英语), (中文(简体) ), 十进制, (中文(简体) ), 全国CPDP, (中文(简体) ),
ASTM 系统, (中文(简体) ), 供应商怪异, (中文(简体) ),
页:1
@cosyte/deid配对循环, (中文(简体) ), 合成值, (中文(简体) ), 财务报告和审定财务报表 披上金色花纹。 。 。 . - 解释: 如何运作 财务报告和审定财务报表 它做和不做。 。 。 .
- 参考: 致命代码,则 奇克目录,以及 API 参考.
- 解决问题, (中文(简体) ), 测试和质量,以及 业绩。 。 。 .
CHANGELOG.md:每个放出.
支助
提问、错误报告和要求格式或怪异 GitHub 问题。这个包做的每件固定 合成:从不把真正的病人的数据附在一个问题上. 需要建立和测试一体化,或 为你主持和运行? 看我们的 融合服务。 。 。 .
警卫
私下报告一种脆弱性,从不公开,也没有真正的病人数据。 我们 安全政策 说如何. 生成的值 真实的,或现实的, 足够真实的, 是一种弱点: 以这种方式报告.
捐款
何处可问: 打开一个问题 : https://github.com/cosyte/synth/issues (中文(简体) )报告最多 用于种子、 生成器调用以及解析器警告 .
接受非邀约牵引请求. 对于任何改变种子生成的字节,添加 生成器选项, 或移动公共 API, 先打开一个问题, 这样可以商定行为 在您写它之前: 一个映射到不同字节的种子 打破了它上的每一个金色文件. Typo,链接,和测试修正可以直接向拉取请求.
需要什么贡献来澄清,每个都有一个脚本 这个软件包宣布:
| 检查 | 这是什么 |
|---|---|
pnpm typecheck | tsc --noEmit,严格(实例: pnpm test(中文(简体) ) |
pnpm lint | (原始内容存档于2019-09-31). EsLint, at --max-warnings=0 |
pnpm format:check | 高级 |
pnpm phi-scan | 跟踪文件中任何地方都没有患者形状值 |
pnpm test | 包括合成-安全套房 |
pnpm test:coverage | 保险门 |
pnpm build | 无害环境管理和CJS两个组合 |
pnpm attw | 消费者按条件分类的分辨率 |
pnpm run determinism:digest | 每个种子产生的字节,与基线相比 |
pnpm check:no-emdash | 房子的标注规则 |
pnpm check:no-internal-refs | 公众表面没有内部簿记 |
新的行为需要测试 旁边,一个改变 消费者会注意到需要一个改变et
(单位:千美元)pnpm changeset),其摘要成为了更改日志条目. 种子产生的字节变化
在它的变迁中是这样说的.