# @cosyte/x12 中文文档

规范地址：https://npmcn.com/package/%40cosyte/x12/

版本：0\.1\.10
npm 元数据更新时间：2026-11-10T11:54:06.187Z
中文译文更新时间：2026-11-10T20:42:20.952Z
软件包许可：MIT

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

原始 npm 页面：https://www.npmjs.com/package/%40cosyte/x12
原文对照：https://npmcn.com/package/%40cosyte/x12/?lang=original
项目主页：https://docs.cosyte.com/x12
源码仓库：https://github.com/cosyte/x12

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

- 包体积（解压后）：8.1 MB，18 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- Node.js 要求：\>=22\.0\.0
- 运行依赖：0 个
- peer 依赖：fast-check ^4\.0\.0
- 首次发布：2026-07-17T00:33:19.312Z
- 最新版本发布：2026-11-10T11:54:05.838Z
- 近 30 天下载量：9282（2026-10-11 至 2026-11-09，npm 官方下载统计）
- 已发布版本数：29（近 12 个月 29 个）

## 中文简介

以开发者为主的 ASC X12 保健 EDI 解析器,序列器,以及Node.js和TypeScript的构建器:宽放解析, spec-clean on exmit.

## 安装

```sh
npm install @cosyte/x12
```

也可以使用：`pnpm add @cosyte/x12`、`yarn add @cosyte/x12`、`bun add @cosyte/x12`

## README

[![The Cosyte logo on its own white ground: the icon beside the word Cosyte.](https://cosyte.com/tile/cosyte-lockup-tile-on-light-1200x300.png)](https://cosyte.com/)

# @cosyte/x12 (英语)

> 从835、837或271的钞票上读出 桌上没有打开的TR3.

[![npm version](https://img.shields.io/npm/v/@cosyte/x12.svg)](https://www.npmjs.com/package/@cosyte/x12) [![CI](https://img.shields.io/github/actions/workflow/status/cosyte/x12/ci.yml?branch=main&label=CI)](https://github.com/cosyte/x12/actions/workflows/ci.yml) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/cosyte/x12/blob/main/LICENSE) [![Node](https://img.shields.io/badge/node-%3E%3D22.0.0-brightgreen.svg)](https://nodejs.org/)

以开发者为主的 ASC X12 保健 EDI 解析器,序列器,以及Node.js和TypeScript的构建器:宽放解析, spec-clean on exmit.

## 为什么会这样

正确读取 X12 医疗保健交易通常意味着购买TR3 执行指南 对于它,然后手绘元素位置,编译器不会检查。 这个图书馆 移除该步骤 对于一个835的工程师, 一个271的回答, 或者一个837的发送, 和谁需要的金额 完全正确而不是大约正确。 离这里最近的 选项是通用的 EDI 翻译器,该翻译器正确框框但一无所知 关于CLP-04意味着什么, 和一个手卷分解 在片断终止器上, 它的工作直到 第一个交易合伙人派了一个重复分离器 你没有计划。 这都不是:a 零依赖性 TypeScript 库,可以解码保健交易设置为打入的模型, 保持每笔金额的精确小数算术 并报告每个销售商的偏差 一个稳定的代码,而不是失败或猜测.

## 状态

**0.1行线**,发布于 npm 从公共仓库.

在0.1线上,公共API是定居的,并且安全地依赖: 输出的阅读器,建设者, 类型和警告代码是我们保持稳定的表面,警告登记册只会增加 密码 在 1.0 下方,一个破碎的更改会撞出小版本,在更改日志中呼出 移民问题。 在更古老的 0.0 发行时, 刻出精确的版本而不是范围 .

每套交易都按打读和打出两艘飞船,包涵270、271、276, 277和277CA、278项请求和答复、820、834、835、837P、837I和837D、999和TA1,各一份 有两个读取器和一个匹配的域名构建器,两个索赔附件指导45 CFR 162. 2002 通过2028年5月26日及之后的时期:277项提供补充资料的请求 (单位:千美元)`006020X313`和回答它的275(`006020X314`) (中文(简体) ). 那两个人的基地是X12 006020 对结构进行打字,不检查执行指南的用法,因此使用限定词或分块 指南要求按发送方式携带,从未验证; `KNOWN-LIMITATIONS.md` 列出其他内容 他们不开放. `X12_TR3_CONFORMANCE` 是机器可读的答案,用于执行 引导每个源,并且是比此页面更好的源.

未覆盖,而且故意如此:一般不保证字节准确的往返旅行(见 [兼容性](https://npmcn.com/package/%40cosyte/x12/#readme-compatibility)(c) 运输,例如: AS2和SFTP, 前005010修订, 006020 指南,但两个附件指南除外,以及 解码附件所携带的东西都超出了范围.

## 安装

```bash
pnpm add @cosyte/x12
```

`npm install @cosyte/x12` 财务报告和审定财务报表 `yarn add @cosyte/x12` 一样的工作方式.

22号或以后的节点js,测试于22,24和26:发动机地板为: `>=22.0.0`,则没有 运行时间依赖。 一揽子船舶具有无害环境管理和共同司法体系的双重性质,包括两种类型的申报 条件,所以 `import` 财务报告和审定财务报表 `require` 每个人的意志都是为了他们 可选 `@cosyte/x12/arbitraries` 进入点,快速检查发电机 [属性测试自己的代码](https://github.com/cosyte/x12/blob/main/docs-content/property-test-your-code.md), (中文(简体) ), 需求 `fast-check` 安装在旁边;主入口从不加载.

## 使用量

分析835笔汇款建议,并读取钱款:付款总额、索赔 收费/付款/病人-责任分开,差额背后的调整原因。 这个 下面的交换是合成的,有一个编造的付款人、提供者、病人和金额.

```ts
import { parseX12, get835 } from "@cosyte/x12";

const raw = `ISA*00*          *00*          *ZZ*MEDICARE       *ZZ*SUBMITTER      *260601*1200*^*00501*000000001*0*P*:~
GS*HP*MEDICARE*SUBMITTER*20260601*1200*1*X*005010X221A1~
ST*835*0001~
BPR*I*450.00*C*ACH*CCP*01*123456789*DA*987654321*1512345678**01*111111111*DA*222222222*20260601~
TRN*1*0012345*1512345678~
DTM*405*20260601~
N1*PR*MEDICARE PART A~
N3*123 PAYER WAY~
N4*BALTIMORE*MD*21244~
PER*BL*JANE COORDINATOR*TE*5551234567~
N1*PE*SAMPLE CLINIC INC~
N3*456 PROVIDER LN~
N4*CLEVELAND*OH*44113~
REF*TJ*123456789~
LX*1~
CLP*PT-ACCT-001*1*500.00*450.00*50.00*MC*PAYER-CLAIM-001*11*1~
NM1*QC*1*PATIENT*TEST*A***MI*MEMBER001~
NM1*82*2*RENDERING PROVIDER INC*****XX*1234567890~
DTM*232*20260501~
DTM*233*20260501~
SVC*HC:99213*500.00*450.00**1~
DTM*472*20260501~
CAS*PR*1*50.00~
REF*6R*LINE-CTRL-001~
SE*23*0001~
GE*1*1~
IEA*1*000000001~`;

const ix = parseX12(raw);
const tx = ix.groups[0]?.transactions.find((t) => t.st.elements[1] === "835");
if (tx === undefined) throw new Error("no 835 in this interchange");
const remit = get835(ix.delimiters, tx);
if (remit === undefined) throw new Error("not an 835");

// The payment, the claim's split, and who owes the difference and why.
const claim = remit.claims[0];
const adjustment = claim?.serviceLines[0]?.adjustments[0];
console.log("paid", remit.payment.totalActualPayment?.toString(), "by", remit.payment.method);
console.log("claim", claim?.patientControlNumber, "charged", claim?.totalChargeAmount?.toString());
console.log("patient owes", claim?.patientResponsibilityAmount?.toString());
console.log("reason", adjustment?.groupCode, adjustment?.reasonCode, adjustment?.reasonDescription);
console.log("warnings", ix.warnings.length);

// The values printed above, which the test suite asserts on every run:
remit.payment.totalActualPayment?.toString(); // => "450.00"
claim?.totalChargeAmount?.toString(); // => "500.00"
claim?.patientResponsibilityAmount?.toString(); // => "50.00"
adjustment?.groupCode; // => "PR"
adjustment?.reasonCode; // => "1"
adjustment?.reasonDescription; // => "Deductible Amount"
ix.warnings; // => []
```

它印着:

```text
paid 450.00 by ACH
claim PT-ACCT-001 charged 500.00
patient owes 50.00
reason PR 1 Deductible Amount
warnings 0
```

这个 `groupCode` 你告诉我,谁欠这笔钱`PR` 病人的责任, `CO` 合同 义务,等等)。 读取;从不推断.

## API 密码

所有船只都从一个入境点出发,没有次道进口.

-   **读取.** `parseX12` 将交换码解码为模型,每个交易读取器转换为 交易设置为已键入的 `get835`, (中文(简体) ), `get837Claims`, (中文(简体) ), `get270Inquiry`, (中文(简体) ), `get271Eligibility`, (中文(简体) ), `get276StatusInquiry`, (中文(简体) ), `parse999`, (中文(简体) ), `parseTA1`,和其余部分).
-   **释出.** `serializeX12` 财务报告和审定财务报表 `buildInterchange` 是一般路径, 每套交易 拥有阅读器的还有域名构建器(`build835`, (中文(简体) ), `build837P`, (中文(简体) ), `build271`,和其余部分).
-   **错误和警告.** 解析很宽大,而且 **4个** 结构故障是致命的 (单位:千美元)`X12_NO_ISA_HEADER`, (中文(简体) ), `X12_ISA_TOO_SHORT`, (中文(简体) ), `X12_INVALID_DELIMITERS`, (中文(简体) ), `X12_EMPTY_INPUT`) (中文(简体) ). 其他东西都来了 `ix.warnings` 作为稳定代码 位置上下文, 所以容忍 偏差是可见的,而不是沉默的.
-   **钱.** 每个货币、百分比和数量字段解码为 `X12Decimal`,这是 以 BigInt 算术支持字符串, 这个库从不 **`parseFloat`编号** a 电子数据交换数额。 A 类 将发件人空出的位置读取 `undefined` 而不是零,所以“已声明为零”和“已声明为零” 没什么" 读数不同.
-   **相会相会.** `X12_TR3_CONFORMANCE` 说明每个交易集的执行指南 以及该识别特征如何与联邦的参照法相矛盾.
-   **CORE代码组合.** `checkCoreCodeCombination` 回答835调整组, cORE 定义业务情景的 CORE 代码组合表 你叫谁? 您提供表并命名其版本, 没有CORE表船与这个包 a 一个 `unevaluated` 答案是绝不允许张贴.

面向任务的指南包含 [`docs-content/`](https://npmcn.com/package/%40cosyte/x12/docs-content/intro.md),以及 [知识分子](https://npmcn.com/package/%40cosyte/x12/KNOWN-LIMITATIONS.md) 是一份诚实的不逾越信任清单.

### 日期和时间

每个输入的读取器都会逐字显示日期, 因为发送者使用的修饰符加上它的字节 载. `toObject`, (中文(简体) ), `toISO`,以及 `toDate` 是三种读取方法之一,而每一个 `@cosyte/*` parser 输出形状和时区规则相同的三个名称.

```ts
import { toObject, toISO, toDate } from "@cosyte/x12";

// A DTP or DTM date off any typed reader: claim.dates[0], eligibility.dates[0], and so on.
const day = { formatQualifier: "D8", value: "20260601" };

toObject(day); // { year: 2026, month: 6, day: 1 }
toISO(day); // "2026-06-01"

// A calendar day is not an instant. Without a stated offset there is no answer.
toDate(day); // undefined
toDate(day, { assumeOffsetMinutes: 0 })?.toISOString(); // "2026-06-01T00:00:00.000Z"
toDate(day, { assumeOffsetMinutes: -300 })?.toISOString(); // "2026-06-01T05:00:00.000Z"

// A range converts to nothing, because an interval is not a point in time.
const span = { formatQualifier: "RD8", value: "20260601-20260605" };
toISO(span); // undefined
```

**解码格式限定语集为 `D8` 财务报告和审定财务报表 `RD8`没有别的.** 这是两个DTP-02 值 此库已解析并构建 : `D8` 是一个单 `CCYYMMDD` 白天,和 `RD8` 是一个 `CCYYMMDD-CCYYMMDD` 范围。 此对外的修饰符, 一个缺失的, 一个数值的位数不 匹配其修饰符声明的形状,日历上没有的一天全部转换为 `undefined`三个人从不扔, 所以宽大 剖析保持宽大 值您读取.

**`RD8` 转换为 `undefined` 从所有三个,故意.** 间隔不是时间点, 因此,在服务期间或资格期,没有一天可以交还。 递回来 第一端点将是一个静悄悄的错误答案,其外形很正. 自己分割范围 并改变你的意思.

**`toDate` 返回一个瞬间,只当您声明区域.** 没有 X12 日期元素此库 解码带 UTC 偏移,所以 `assumeOffsetMinutes` (在协调世界时以东签署)是唯一的办法 一个到达结果。 没有它,答案是 `undefined`: 主机的时区从不 读取 和 UTC 永远不会被假定, 因为同一个午夜是两个不同的瞬间 边界和在错误区域读取的出生日期是一天.

`toObject` 只返回所报值的组件,其中 `month` 第1至12类比 比 Java 脚本 `Date` 0对11,所以 `Object.keys()` 的精度。 删除 `offsetMinutes` 所剩的被接受 `Temporal.PlainDateTime.from` 和豪华的 `DateTime.fromObject` 没有重命名。 这里两个库都不是依赖; 此软件包仍然有 零的这些.

日期意识代码列表查询, `checkCarcValidity` 财务报告和审定财务报表 `checkRarcValidity`,保持他们自己的 合同和仍然THROW a `X12CodeListError` 在一个文件日期,他们拒绝。 这种分歧是 故意地:他们回答一个打电话者,他询问一个合法性问题,而不能说明当天的情况 这三人读了一张已经很宽大了的文件.

#### 使用一个文件中的两个 @ cosyte 解析器

三个名字都一样 `@cosyte/*` parser,所以导入其中两个意味着别名:

```ts
import { toISO as x12ToISO } from "@cosyte/x12";
import { toISO as hl7ToISO } from "@cosyte/hl7";

x12ToISO({ formatQualifier: "D8", value: "20260601" });
hl7ToISO(someParsedHl7Timestamp);
```

命名空间导入工作也 : `import * as x12 from "@cosyte/x12"`,则 `x12.toISO(day)`。 。 。 .

## 兼容性

-   **005010 HIPAA交易集**用钩子对行业进行修正 交换。 850起、856起、810起、204起、EDIFACT起、AS2起、SFTP起等非卫生保健装置 运输以及前005010年的修订已超出范围.
-   **供应商的偏离成为警告,而不是例外.** 内建配置文件记录 它们所容纳的伴向导偏差; 选择一个绝对不会改变一个相反的偏差 解析和配置文件通过同一公众编写 `defineProfile()` API你已经.
-   **轮回旅行一般不是字节准确的.** `serializeX12` 复制模型上的片段 逐字记录,包括元素粘贴、复合材料和 `?`\- 释放逃跑,但是 **`serialize(parse(s)) === s` 通常没有保障**间换行符 常见的大小写: 区段之间的任何 CR 或 LF 运行都是在剖析时被吸收的, 所以一个相当打印的文件 发射紧凑。 大部分打破来回的构造是沉默的,所以"我的文档没有行 间歇也不够. [知识分子](https://npmcn.com/package/%40cosyte/x12/KNOWN-LIMITATIONS.md) 是犬科动物 列表中选择一个选项.

## 文档

完整的文献资料生活在 [docs.cosyte.com/x12 (英语)](https://docs.cosyte.com/x12),从此构建 存储器 [`docs-content/`](https://github.com/cosyte/x12/tree/main/docs-content)开始 这些页:

-   [快速启动](https://github.com/cosyte/x12/blob/main/docs-content/quickstart.md):读作835 并抽出付款, 每件索赔的钱, 和调整的理由.
-   [80/20套交易](https://github.com/cosyte/x12/blob/main/docs-content/spec-notes-transaction-sets.md)数字 : 每个交易都设置了这个包封面,有它的阅读器和构建器.
-   [十进制货币](https://github.com/cosyte/x12/blob/main/docs-content/spec-notes-money.md)数字 : 为什么每个金额都是 `X12Decimal` 并且从来没有JavaScript号码.
-   [构建和序列化 X12](https://github.com/cosyte/x12/blob/main/docs-content/emit-and-serialize.md)数字 : 发射方,从 `serializeX12` 到域名构建者.
-   [寄出835笔汇款](https://github.com/cosyte/x12/blob/main/docs-content/post-a-remittance.md)数字 : ,第一个向导,一个任务,用于交接的交易.
-   [解决问题](https://github.com/cosyte/x12/blob/main/docs-content/troubleshooting.md)页:1 出错模型,常见症状,以及此套件的分界线都是故意的.

## 支助

问题和想法 [讨论情况](https://github.com/cosyte/.github/discussions),哪个 覆盖每个 Cosyte 仓库 。 臭虫报告 交易伙伴怪怪到 [问题跟踪器](https://github.com/cosyte/x12/issues)与合成复制 从来没有 真正的交换。 该组织 [支助指南](https://github.com/cosyte/.github/blob/main/SUPPORT.md) 还有其他的.

需要建立X12集成系统,还是为您托管和运行? 看我们的 [融合服务](https://cosyte.com/integration-services)。 。 。 .

## 警卫

私下报告脆弱性,如: [安全政策](https://github.com/cosyte/.github/blob/main/SECURITY.md) 描述,从来没有在 公共问题.

## PHI 与安全

X12保健交易携带受保护的保健信息,所以处理你手上的每一个交换 这个图书馆是PHI.

**和你的文件有什么关系.** 它在记忆中解码 而不是其他的。 没有打开套接字, 没有写入磁盘, 没有在运行时获取到任何内容: 已捆绑的代码列表已版本 数据快照,所以更新一个是发布而不是网络呼叫. 承认者 是纯函数,从不自动发送.

**无法诊断的.** 一个警告 `message` 而是对被冻结的登记册进行检索 而不是从你的文档中建起的东西, 并且这个库里的任何警告工厂 都没有价值 参数,所以你的任何元素 都无法达到诊断。 密码和 `position` 说什么和 在哪里;字节留在模型上. `ALL_WARNING_MESSAGES` 被导出,所以您可以断言 .

**一个故意的例外.** `X12ParseError.snippet` 四个结构致命的 是一个界限 输入开始的复制件,因此在真实流量上,它可以携带PHI,并且没有被编辑. 日志 `err.code` 财务报告和审定财务报表 `err.position` 而不是在你的电话网站进行编辑.

**一个附件拒绝打印 .** 将275个载体的每个BDS数据读入 `X12AttachmentData`谁的弦,JSON,和 `util.inspect` 表格中显示其八分数和无 其他; `readOctets()` 是通往八角星的一条路.

**建造者拒绝是一种较弱的地表,是故意的.** A 类 `build*` 拒绝名称控件 数字、数或代码,你通过, 这样你就可以看到什么被拒绝。 碎片是 以出出常数为界,但以出出常数为界,而非去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去 两个附件 建构者是例外, 名称完全没有价值 。 日志 `err.code`没有 `err.message`从 a 建会者.

**你仍然拥有的东西.** 运输、储存、保留、出入控制、审计记录和每个记录 键入您自己的代码。 这个图书馆没有代表你提出HIPAA遵守要求.

## 捐款

错误报告和交易伙伴的怪胎属于 [GitHub 问题](https://github.com/cosyte/x12/issues),如上文支助所说.

欢迎拉动请求。 该组织 [贡献指南](https://github.com/cosyte/.github/blob/main/CONTRIBUTING.md) 财务报告和审定财务报表 [行为守则](https://github.com/cosyte/.github/blob/main/CODE_OF_CONDUCT.md) 在此应用。 A 类 捐款必须明确 `pnpm typecheck`, (中文(简体) ), `pnpm lint`,以及 `pnpm test`,按每本目录 覆盖层,通过PHI交火门`pnpm phi-scan`和传教门 (单位:千美元)`pnpm check:no-emdash`, (中文(简体) ), `pnpm check:no-internal-refs`),并携带一个变换器. 每一个固定 合成:永远不要打开一个带真实病人数据的拉出请求.

## 商标

活性与蓝十字蓝盾是各自所有者的商标. 软体不是 \* 附属于、得到或得到其中任何一方的认可。 贸易伙伴的名字 他们的伴行偏离了内置的轮廓。 见 [贸易](https://github.com/cosyte/x12/blob/main/TRADEMARKS.md)。 。 。 .

## 许可证

MIT,版权 (c) 2026 Cosyte LLC. 见 [自由主义](https://github.com/cosyte/x12/blob/main/LICENSE)。 。 。 .

由 [调和](https://cosyte.com/)。 。 。 .

## 常见问题

### @cosyte/x12 是什么？

以开发者为主的 ASC X12 保健 EDI 解析器,序列器,以及Node\.js和TypeScript的构建器:宽放解析, spec-clean on exmit\.

### 如何安装 @cosyte/x12？

在项目目录运行 npm install @cosyte/x12，或使用 pnpm add / yarn add / bun add。

### @cosyte/x12 支持 TypeScript 吗？

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

### @cosyte/x12 支持 ESM 还是 CommonJS？

同时提供 ES Module 与 CommonJS 入口，import 和 require\(\) 都可以使用，打包工具会自动选择合适的版本。

### @cosyte/x12 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>=22\.0\.0。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @cosyte/x12 可以商用吗？

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

### @cosyte/x12 的下载量有多少？

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

### @cosyte/x12 还在维护吗？

最新版本 0\.1\.10 发布于 2026/11/10（今天）；至今共发布 29 个版本，其中过去 12 个月发布了 29 个；首次发布于 2026/07/17。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

