#xml #generate #欧洲 #规范 #pdf #级别 #欧盟

bin+lib zugferd

生成符合欧洲电子发票规范的 ZUGFeRD XML

2 个版本

新版本 0.1.1 2024 年 8 月 20 日
0.1.0 2024 年 8 月 11 日

2095解析器实现

Download history 64/week @ 2024-08-05 43/week @ 2024-08-12

每月下载 107

Apache-2.0

52KB
1K SLoC

ZUGFeRD XML 生成器

概述

此软件包生成符合 ZUGFeRD 规范的 XML,可以嵌入 PDF 中以生成符合欧盟规定的电子发票。

[!警告] 此软件包基本上是处于开发中的。

虽然您可以生成最低和基本的 wl 级别 XML,但此软件包更是一个起点和邀请反馈及协作的平台。不打算进行重大更改,但也不是不可能。

安装

添加软件包

cargo add zugferd

导入软件包

use zugferd::{InvoiceBuilder,InvoiceTypeCode,CountryCode,CurrencyCode,SpecificationLevel};

初始化并传递第一条数据

let mut invoice_builder = InvoiceBuilder::new();

invoice_builder.set_business_process("process1")
    .set_invoice_type_code(InvoiceTypeCode::CommercialInvoice)
    .set_invoice_nr("INV-123456")
    .set_date_of_issue(chrono::NaiveDate::from_ymd_opt(2024,08,10).unwrap())
    .set_buyer_reference("BR-7890")
    .set_sellers_name("Seller Corp.")
    .set_sellers_specified_legal_organization("LegalOrg-001")
    .set_sellers_postal_trade_address_country_code(CountryCode::Germany)
    .set_sellers_specified_tax_registration("DE123456789")
    .set_buyers_name("Buyer Inc.")
    .set_buyers_specified_legal_organization("LegalOrg-002")
    .set_buyers_order_specified_document("OD-2024-001")
    .set_invoice_currency_code(CurrencyCode::Euro);

您始终可以检查提供的数据是否足够用于指定的级别。(目前仅支持“最小”级别。)

match invoice_builder.all_fields_are_set(SpecificationLevel::Minimum) {
    Ok(_) => {
        //Carry on
        println!("All fields are set.");
    },
    Err(e) => {
        //Check what is missing
        println!("I want this: {}",e);
    }
}

或者简单地进行

invoice_builder.all_fields_are_set(SpecificationLevel::Minimum)?;

进一步计算数据,例如

let sum_net: f64 = 100.0;
let tax: f64 = sum_net * 19.0 /100.0;
let sum_gross: f64 = sum_net + tax;
let customer_paid_already: f64 = 50.0;

将缺失的数据传递给实例

invoice_builder.set_tax_basis_total_amount(sum_net)
    .set_tax_total_amount(tax)
    .set_grand_total_amount(sum_gross)
    .set_due_payable_amount(sum_gross - customer_paid_already);

生成 XML

let mut xml_string: String = String::new();

match invoice_builder.to_xml_string(SpecificationLevel::Minimum) {
    Ok(string_returned_by_function) => {
        xml_string = string_returned_by_function;
    },
    Err(e) => {
        println!("Something happened at the XML generation: {}",e);
    }
}

println!("Generated ZUGFeRD XML: {}",xml_string);

请查看 main.rs 获取更多示例。

路线图

  • 生成最低级别
  • 生成无线条的基本级别
  • 生成基本级别
  • 生成 EN 16931 级别
  • 生成扩展级别
  • 验证所有级别
  • 解析所有级别
  • 将生成的 XML 嵌入 PDF/A-3 文件

进一步阅读

ZUGFeRD 2.2 规范

依赖项

~2.5–3.5MB
~62K SLoC