drafthorse -- Basic ZUGFeRD implementation in Python
====================================================
-.. image:: https://travis-ci.org/pretix/drafthorse.svg?branch=master
- :target: https://travis-ci.org/pretix/drafthorse
+.. image:: https://travis-ci.org/pretix/python-drafthorse.svg?branch=master
+ :target: https://travis-ci.org/pretix/python-drafthorse
-.. image:: https://codecov.io/gh/pretix/drafthorse/branch/master/graph/badge.svg
+.. image:: https://codecov.io/gh/pretix/python-drafthorse/branch/master/graph/badge.svg
:target: https://codecov.io/gh/pretix/drafthorse
.. image:: http://img.shields.io/pypi/v/drafthorse.svg
:target: https://pypi.python.org/pypi/drafthorse
-This is a python implementation to generate the required XML for ZUGFeRD files
+This is a low-level python implementation of the ZUGFeRD XML format. ZUGFeRD is a German
+format for sending digital invoices. ZUGFeRD XML files can are to be attached to a PDF
+file, which can be done using the ``factur-x`` Python library. This library can be used to generate or parse the contents of this XML file.
-Limitations
------------
-
-Currently write-only.
-
-Supported standards:
+By low-level, we mean that this library models the ZUGFeRD data model 1:1 without any further
+abstractions or simplifications. You can set and parse all parameters defined in ZUGFeRD 1.0.
-* ZUGFeRD 1.0
-
-Supported profiles:
-
-* Basic
+All output is validated against the official XSDs, but no validation of profile levels (basic, comfort, extended) is performed.
Usage
-----
-Example:
-
-TBD
+Parsing::
+
+ >>> from drafthorse.models.document import Document
+ >>> samplexml = open("sample.xml", "rb").read()
+ >>> doc = Document.parse(samplexml)
+ >>> str(doc.trade.agreement.seller.name)
+ 'Lieferant GmbH'
+
+Generating::
+
+ >>> from datetime import Date
+ >>> from drafthorse.models.document import Document
+ >>> from drafthorse.models.note import IncludedNote
+
+ >>> doc = Document()
+ >>> doc.context.guideline_parameter.id = "urn:ferd:CrossIndustryDocument:invoice:1p0:comfort"
+ >>> doc.header.id = "RE1337"
+ >>> doc.header.name = "RECHNUNG"
+ >>> doc.header.type_code = "380"
+ >>> doc.header.issue_date_time.value = date.today()
+ >>> doc.header.languages.add("de")
+ >>> note = IncludedNote()
+ >>> note.content.add("Test Node 1")
+ >>> doc.header.notes.add(n)
+ >>> doc.trade.agreement.seller.name = "Lieferant GmbH"
+
+ >>> doc.serialize()
+ b'<?xml version="1.0" encoding="UTF-8"?><rsm:CrossIndustryDocument …'
Development