用于解析、生成和管理EN16931发票格式的Python3包

en16931的Python项目详细描述


https://travis-ci.org/invinet/python-en16931.svg?branch=masterhttps://codecov.io/gh/invinet/python-en16931/branch/master/graph/badge.svg

python 3包,用于读取、写入和管理新的EN16931 Invoice format

这个European Standard建立了电子发票核心元素的语义数据模型。语义模型仅包括电子发票所需的基本信息元素,以确保法律(包括财政)合规性,并实现跨境、跨部门和国内贸易的互操作性。

功能

此库允许您:

  1. 将EN16931格式的XML反序列化为Python发票对象。
  2. 将python发票对象序列化为有效的xml表示形式。
  3. 使用validex验证发票。
  4. 将发票导入B2BRouter

用法

您可以从XML文件导入发票:

>>>fromen16931importInvoice>>>invoice=Invoice.from_xml('en16931/tests/files/invoice.xml')

并使用api访问其内部值和实体:

>>>invoice.issue_datedatetime.datetime(2018,6,11,0,0)>>>invoice.seller_party<en16931.entity.Entityat0x7f2b7c12b860>>>>invoice.buyer_party<en16931.entity.Entityat0x7f2b7c0fd160>>>>invoice.unique_taxes{TaxS:0.21,TaxS:0.1}>>>invoice.lines[<en16931.invoice_line.InvoiceLineat0x7f2b7c0fd400>,<en16931.invoice_line.InvoiceLineat0x7f2b7c0fd518>,<en16931.invoice_line.InvoiceLineat0x7f2b7c0fd748>]>>>invoice.tax_exclusive_amount87.00>>>invoice.tax_amount()16.62>>>invoice.tax_inclusive_amount103.62>>>invoice.payable_amount103.62

如果导入XML文件,则不计算所有相关数量;我们 使用xml上定义的那些。你可以检查 通过调用相关方法来匹配导入的数量:

>>>assertinvoice.tax_exclusive_amount==invoice.subtotal()True>>>assertinvoice.tax_inclusive_amount==invoice.total()True>>>assertinvoice.payable_amount==invoice.total()True

或者您也可以一步一步地创建发票:

>>>fromen16931importInvoice>>>invoice=Invoice(invoice_id="2018-01",currency="EUR")>>>seller=Entity(name="Acme Inc.",tax_scheme="VAT",...tax_scheme_id="ES34626691F",country="ES",...party_legal_entity_id="ES34626691F",...registration_name="Acme INc.",mail="acme@acme.io",...endpoint="ES76281415Y",endpoint_scheme="ES:VAT",...address="easy street",postalzone="08080",...city="Barcelona")>>>buyer=Entity(name="Corp Inc.",tax_scheme="VAT",...tax_scheme_id="ES76281415Y",country="ES",...party_legal_entity_id="ES76281415Y",...registration_name="Corp INc.",mail="corp@corp.io",...endpoint="ES76281415Y",endpoint_scheme="ES:VAT",...address="busy street",postalzone="08080",...city="Barcelona")>>>invoice.buyer_party=buyer>>>invoice.seller_party=seller>>>invoice.due_date="2018-09-11">>>invoice.issue_date="2018-06-11">>># lines>>>il1=InvoiceLine(quantity=11,unit_code="EA",price=2,...item_name='test 1',currency="EUR",...tax_percent=0.21,tax_category="S")>>>il2=InvoiceLine(quantity=2,unit_code="EA",price=25,...item_name='test 2',currency="EUR",...tax_percent=0.21,tax_category="S")>>>il3=InvoiceLine(quantity=5,unit_code="EA",price=3,...item_name='test 3',currency="EUR",...tax_percent=0.1,tax_category="S")>>>invoice.add_lines_from([il1,il2,il3])

并将其序列化为xml:

>>># As a string>>>xml=invoice.to_xml()>>># Or save it directly to a file>>>invoice.save('example_invoice.xml')

限制

这是概念实现的证明,并不是所有定义的特性 执行EN16931标准。但这很容易,在某些情况下 琐碎,实现它们。未实现的主要功能有:

  • 不支持CreditNotes。
  • 不支持文件附件。
  • 不支持传递信息。
  • 仅支持全球收费和折扣。行折扣和 不支持收费。
  • 其他可能有用的属性(例如invoiceperiod、buyerreference, orderreference、billingreference、contractdocumentreference等) 未实现。

如果需要实现特定功能,请参见以下部分 对于功能请求。

错误和功能请求

请报告您发现的任何错误here。 或者,更好的是,将存储库转移到GitHub 并创建一个pull请求(pr)。我们欢迎所有的变化,无论大小。

许可证

在apache许可证2.0版下发布(请参见license.txt)。

Copyright (C) 2018 Invinet Sistemes

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
如何在java中模拟按键?   尽管元素存在,但HtmlUnit中的java ElementNotFoundException   在Java中,长双精度并发写入不是原子的吗?   java如何在另一个对象数组中打印对象的int值?   java在显示或更改视图后执行一些代码   java JFR:读取时发生OutOfMemoryError。jfr文件   java Android助手检查是否购买   java这种设计模式的好处是什么?   Weblogic 10.3中针对托管服务器的java部署问题   java如何获取字符串。在编译时投诉的格式   声明字符串数组时发生java错误   java JPA在多个并行线程中从表中删除时发生死锁   java Android:在按钮动画之后启动活动   java并发与JMS主题在春季   使用Lucene spatial search/DateRangePrefixTree进行java日期范围查询?   java可选接口问题   JavaDbUnit没有在每个方法之后清洗和插入数据库,所以测试不是独立的   java在IAIK PKCS11包装器中一对私钥和证书如何匹配?