2 个版本
新版本 0.1.1 | 2024 年 8 月 20 日 |
---|---|
0.1.0 | 2024 年 8 月 11 日 |
2095 在 解析器实现 中
每月下载 107 次
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 文件
进一步阅读
依赖项
~2.5–3.5MB
~62K SLoC