@ekwo-ai/factur-x

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

Factur-X / ZUGFERD TypeScript中的电子发票:EN 16931 CII XML 从平面发票对象,PDF/A-3嵌入和取出.

中文使用文档
文档目录10 节
  1. 安装
  2. 使用量
  3. 增值税类别
  4. 标识符
  5. 单位
  6. API 密码
  7. 范围和限制
  8. 阅读
  9. 发展
  10. 许可证

@ekwo-ai/事实十

Factur-X / ZUGFERD TypeScript的电子发票.

  • CII XML 从平面发票对象. EN 16931 语义模型,联合国/简化手续中心CII D16B 语法、计划要素顺序、增值税细目规则(BR-S, (中文(简体) ), BR-Z, (中文(简体) ), BR-E, (中文(简体) ), BR-AE, (中文(简体) ), BR-IC, (中文(简体) ), BR-G, (中文(简体) ), BR-O简介 MINIMUM, BASIC WL, BASIC (默认), EN 16931, EXTED.
  • PDF/A-3 嵌入系统. 附以 XML 为 factur-x.xml 与 AFRelationship /Alternative 并用 Factur-X 扩展图谱写入 XMP 包.
  • 提炼. 读取 factur-x.xml, (中文(简体) ), zugferd-invoice.xml 或者说 xrechnung.xml 从任意 PDF 返回.
  • 阅读收到的发票. readCii 财务报告和审定财务报表 readFacturX 打开任意配置文件的 CII 进入相同的平面结果 @ekwo-ai/peppol-ubl 从 UBL 返回 - 见 阅读。 。 。 .
  • 总数你可以信任. 每个类别和税率一个增值税类别,按四舍五入计算增值税 基础、预付款项、参考原始发票的信用证.
  • XML 部分的零依赖性; pdf-lib 仅用于PDF部分(分出入口).

安装

npm install @ekwo-ai/factur-x

使用量

import { generateCiiXml, computeTotals } from '@ekwo-ai/factur-x';
import { embedFacturX, extractFacturX } from '@ekwo-ai/factur-x/pdf';

const invoice = {
  number: 'INV-2026-0042',
  issueDate: '2026-03-31',
  dueDate: '2026-04-30',
  seller: {
    name: 'Exemple Conseil SA',
    vatId: 'BE0123456749',
    legalId: { scheme: '0208', value: '0123456749' },   // Belgian enterprise number
    address: { line1: "Rue de l'Exemple 1", postalCode: '1000', city: 'Bruxelles', country: 'BE' },
  },
  buyer: {
    name: 'Société Fictive SAS',
    vatId: 'FR12345678901',
    legalId: { scheme: '0002', value: '345678901' },    // SIREN
    address: { line1: '10 avenue des Tests', postalCode: '75001', city: 'Paris', country: 'FR' },
  },
  buyerReference: 'SERVICE-EXEC-42',
  lines: [
    { name: 'Consulting days', quantity: 3, unitCode: 'day', unitPrice: 950, vatRate: 0 },
    { name: 'Software licence', quantity: 1, unitPrice: 1200, vatRate: 0 },
  ],
  payment: { iban: 'BE71 0961 2345 6769' },
};

const xml = generateCiiXml(invoice);                       // BASIC profile
const totals = computeTotals(invoice);                     // { lineTotal, taxTotal, grandTotal, duePayable, breakdown }

const pdf = await embedFacturX(visualPdfBytes, xml, { title: 'Invoice INV-2026-0042' });
const back = await extractFacturX(pdf);                    // { filename: 'factur-x.xml', xml }

npm run example 运行 examples/basic.ts 结束到结束.

增值税类别

每一行带一个 vatRate。该类别(BT-151)在不声明时产生: 积极比率 − S; 国内零率 Z;对欧洲联盟另一成员国具有增值税标识的企业的零税率 + K (成员国之间的供应);对那里没有供应的买方) E(欧洲联盟以外) G设置 vatCategory 要覆盖的线上( o)AE 反向电荷, O 不受增值税约束.). 免刑小组 理由文本(BT-120, 以 invoice.exemptionReasonsVATEX 代码 已存在.

标识符

外地示例XML 数据
vatIdBE0123456749, (中文(简体) ), FR12345678901SpecifiedTaxRegistration/ID[@schemeID="VA"]
legalId{ scheme: '0208', value: '0123456749' } (贝), { scheme: '0002', value: '345678901' } (法语)SpecifiedLegalOrganization/ID[@schemeID]
buyerReference法语“服务执行人”代码BuyerReference (BT-10级)
orderReference定购单BuyerOrderReferencedDocument (BT-13级)

单位

unitCode 接受联合国/欧洲经委会建议20的编码HUR, (中文(简体) ), DAY, (中文(简体) ), KWH...)或日常活动 法语、荷兰语、英语或德语(heures, (中文(简体) ), dagen, (中文(简体) ), m², (中文(简体) ), Stück) (中文(简体) ). 未知数值下降 返回到 C62 (单位). 见 UNIT_CODES 财务报告和审定财务报表 toUnitCode。 。 。 .

API 密码

导出说明
generateCiiXml(invoice, { profile?, businessProcess? })CII XML 字符串.
computeTotals(invoice)增值税细目和文件总额(BT-106.BT-117).
defaultVatCategory, (中文(简体) ), EXEMPTION_REASON_CODES, (中文(简体) ), DEFAULT_EXEMPTION_REASONS增值税帮手.
toUnitCode, (中文(简体) ), UNIT_CODES单位帮手.
buildXmpMetadata, (中文(简体) ), CONFORMANCE_LEVELS, (中文(简体) ), GUIDELINES, (中文(简体) ), DOCUMENT_TYPE_CODES规格的常数.
embedFacturX(pdf, xml, { profile?, title?, creator?, producer?, date? }) (单位:千美元)/pdf(中文(简体) )返回带有 XML 和 PDF/A-3 XMP 包的新 PDF .
extractFacturX(pdf) (单位:千美元)/pdf(中文(简体) ){ filename, xml } 或者说 null。 。 。 .
readCii(xml, { maxBytes?, maxDepth?, maxElements? }){ invoice, violations, profile },参见 阅读。 。 。 .
readFacturX(pdf, options?) (单位:千美元)/pdf(中文(简体) )同样,从PDF读出,与 filename 页:1.
InvoiceFileError, (中文(简体) ), profileOf, (中文(简体) ), checkReceived, (中文(简体) ), isValidIban, (中文(简体) ), CREDIT_NOTE_TYPE_CODES阅读所拒绝的, 和它使用的帮助者.

范围和限制

  • 津贴和费用(BG-20、BG-21、BG-27、BG-28),带折扣的毛额价格 多项分娩尚未模拟.
  • PDF 部分嵌入了数据,宣布 PDF/A-3 并写入一个同意的 XMP 包 文件信息词典; 它不将视觉 PDF 转换为 PDF/A(fonts, 色彩描述文件,输出意图). 由 PDF 提供 @ekwo-ai/invoice-pdf 有它们, VeraPDF 发现没有 失败的 PDF/A-3b 规则已嵌入其中; 用您的工具验证其他 PDF 启动前的平台.
  • 每个简介都写出其计划承认的内容: 标题和总数, BASIC WL 整行文件没有线条,BASIC 线条没有卖方的物品 标识符(BT-155)和项目说明(BT-154),从EN 16931开始。 测试 以 Factur-X 1.09 XSD 验证每个配置文件 .
  • 运行时没有进行验证,而Schematron规则不是由测试运行的. 对FNFE Factur-X验证器或野马项目等验证器进行测试.

阅读

一个供应商以 Factur-X 或 ZUGFERD 身份寄给你的发票变成了普通物品 a 购买稿可以从.

import { readCii, InvoiceFileError } from '@ekwo-ai/factur-x';
import { readFacturX } from '@ekwo-ai/factur-x/pdf';

const { invoice, violations, profile, filename } = await readFacturX(pdfBytes);
profile;                 // 'minimum' | 'basic-wl' | 'basic' | 'en16931' | 'extended' | null
invoice.kind;            // 'invoice' | 'credit_note', from the type code
invoice.totals.payable;  // '648.40', a decimal as text, never a number

const same = readCii(xmlBytesOrText);   // the XML alone, without pdf-lib
  • readCii(input: string | Uint8Array, options?: ReadOptions): ReceivedCiiFile 读取 CII D16B (英语) CrossIndustryInvoice - Factur-X 1.0, ZUGFERD 2.x, CII中的一款XRechnung——并 返回时 { invoice, violations, profile }。 。 。 .
  • readFacturX(pdf: Uint8Array | ArrayBuffer, options?: ReadOptions): Promise<ReceivedFacturX> (单位:千美元)/pdf(中文(简体) ) 查找附在 PDF 上的 XML 并读取它 readCii; 结果 添加 filename 它被附着在下面.
  • profileOf(guideline) 是配置文件一个准则标识符(BT-24)声明。 一个 EN 16931 计算机辅助系统urn:cen.eu:en16931:2017#compliant#…, XRechnung for one)读作: en16931; 此软件包不知道的标识符是 null,以及 invoice.customizationId 保存文件所写的.

外形为UBL读取器. invoice 是一个 ReceivedInvoice类型 readUbl 联 合 国 @ekwo-ai/peppol-ubl 返回:每个字段将其命名为 EN 16931 商业术语 持有,而一个商业术语在同一领域,无论所携带的语法如何——测试 套接字读出一张用两种语法写成的发票,从两者得到相同的对象. 这个 两种砖块不互相依赖;它们持有文件的字节取字节副本 定义形状、检查、 XML 读取器和小数,并进行测试保存 一样. syntax 说哪个读了.

无事被重算,无事被默认. 一个图是文件写的文本, 选中为小数; 缺少的元素是 null - MINIMUM或BASIC WL文件没有 和没有线总, 回来这样。 EN 16931(BR-CO-10至 BR-CO-17在精确小数下进行核对,并在 violationsCII 特定 调查结果也存在: invalid_iban (单位:千美元) IBANID 谁的支票数字失败,仍然 以书面形式返回, invalid_attachment, (中文(简体) ), unsupported_date_format (a) 日期 102以外的格式,返回为 null) (中文(简体) ). CII曾经写过一些东西 文档,UBL按付款方式写——付款参考(BT-83)和 直接借项授权(BT-89)——按各种支付方式退还.

什么不是发票 扔一个 InvoiceFileError 带有 code代码: UBL 读取器malformed_xml, (中文(简体) ), unsupported_encoding, (中文(简体) ), doctype_forbidden, (中文(简体) ), undefined_entity, (中文(简体) ), too_large, (中文(简体) ), too_deep, (中文(简体) ), too_many_elements, (中文(简体) ), not_an_invoice, (中文(简体) ), missing_element, (中文(简体) ), invalid_value),加 (中文(简体) ) not_a_pdf 财务报告和审定财务报表 no_embedded_invoice 从 readFacturX除MINIMUM和BASIC WL简介外,需要一条线。 没有生的 xML 解析器或 pdf-lib 逃脱。 XML由严格阅读者阅读 软件包本身:没有DOCTYPE,因此没有实体扩展,只有UTF-8,大小,深度和 元素限制.

限制.

  • PDF 打开时 pdf-lib,已经是 /pdf 切入点 : 附件可见于 EmbeddedFiles 目录名称树, 在一个下 名称。 仅可从页注释、 和 加密 PDF 和过滤器中的流 pdf-lib 不解码不读:它们 以上面的代码之一拒绝, 永远不要读错。 XMP 元数据不读: profile 来自 XML .
  • ZUGFERD 1.0 (英语:CrossIndustryDocument,另一个命名空间)作为 not_an_invoice。 。 。 .
  • 超过EN 16931的ExTEND要素(若干交付,线路分结构.)不是 读取。 CII计划或Schematron计划是无法验证的.

发展

npm install
npm run typecheck
npm test
npm run build

许可证

麻省理工学院 埃克沃·艾尔

版本与发布记录

@ekwo-ai/factur-x 共发布 32 个版本,首次发布于 2026/09/19;过去 12 个月发布了 32 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.25.2latest2026/11/13今天
0.25.02026/11/076 天前
0.24.12026/11/058 天前
0.24.02026/10/2816 天前
0.23.02026/10/2816 天前
0.22.02026/10/2816 天前

关于 @ekwo-ai/factur-x 的常见问题

@ekwo-ai/factur-x 是什么?

Factur-X / ZUGFERD TypeScript中的电子发票:EN 16931 CII XML 从平面发票对象,PDF/A-3嵌入和取出.

如何安装 @ekwo-ai/factur-x?

在项目目录运行 npm install @ekwo-ai/factur-x,或使用 pnpm add / yarn add / bun add。

@ekwo-ai/factur-x 支持 TypeScript 吗?

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

@ekwo-ai/factur-x 支持 ESM 还是 CommonJS?

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

@ekwo-ai/factur-x 需要什么版本的 Node.js?

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

@ekwo-ai/factur-x 可以商用吗?

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

@ekwo-ai/factur-x 的下载量有多少?

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

@ekwo-ai/factur-x 还在维护吗?

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