python-stand013 is a Python app and library for parsing, writing, and validation of the STAND013 file format.
The following is a list of python-stand013's existing and planned features.
- Validation
-
ORDERS
purchase orders -
ORDRSP
purchase order responses -
DESADV
delivery notes
-
- Parsing
-
ORDERS
purchase orders -
ORDRSP
purchase order responses -
DESADV
delivery notes
-
- Writing
-
ORDERS
purchase orders -
ORDRSP
purchase order responses -
DESADV
delivery notes
-
python-stand013 requires Python 3.7 or newer. It can be installed from PyPI using e.g. pip:
python3 -m pip install stand013
The stand013
executable can be used to validate ORDERS, ORDRSP, and DESADV
files. The file type to validate is automatically detected.
Example of successful validation:
❯ stand013 validate tests/examples/ordrsp.xml
File: tests/examples/ordrsp.xml
Document type: ORDRSP
XML Schema validation: passed
❯
Example of unrecognized file format:
❯ stand013 validate /etc/passwd
File: /etc/passwd
Document type: Failed to detect
❯
Example of invalid file:
❯ stand013 validate DESADV-failing.xml
File: DESADV-failing.xml
Document type: DESADV
XML Schema validation: failed
failed validating {} with XsdAttributeGroup(['MessageOwner', 'MessageType', 'MessageVersion']):
Reason: missing required attribute 'MessageOwner'
Schema:
<xsd:complexType xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="DeliveryNoteType">
<xsd:sequence>
<xsd:element name="MessageNumber" type="xsd:string" minOccurs="0">
<xsd:annotation>
<xsd:documentation>Unikt nr som identifiserer meldingen innenfor en utveksling</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="MessageTimestamp" type="xsd:dateTime">
<xsd:annotation>
<xsd:documentation>Meldingens dato (YYYY-MM-DDTHH:MM:SS) Sendetidspunkt</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="DeliveryNoteHeader" type="DeliveryNoteHeaderType">
<xsd:annotation>
<xsd:documentation>Pakkseddel hode</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="DeliveryNoteDetails" type="DeliveryNoteDetailsType" maxOccurs="unbounded">
<xsd:annotation>
<xsd:documentation>Pakkseddel detaljer</xsd:documentation>
...
...
</xsd:complexType>
Instance:
<DeliveryNote xmlns="http://www.ean-nor.no/schemas/eannor">
<MessageOwner>GS1NOR</MessageOwner>
<MessageType>DELIVERYNOTE</MessageType>
<MessageVersion>STAND013 v.1.0</MessageVersion>
<MessageTimestamp>2021-05-31T09:49:00</MessageTimestamp>
...
...
</DeliveryNote>
Path: /Interchange/DeliveryNote
❯
TODO: Pending support for parsing and writing STAND013 files.
The bundled XML schemas in src/stand013/schemas/
have been retrieved from
https://stand.no/en/home/downloads/. We're currently including the May 2020
revision of the XML schemas.
We've done the following changes to the XML schemas to make them work for our use case.
-
Commit 7bdb761d378a4ec2922a1ea14048b614e4cd08e1: Fix references to the
STAND013-Components_v1p1.xsd
file. This file is in the same directory as the other schemas, not in../Components/
. This is true both for the Zip file at stand.no and in python-stand013. -
Commit bd9e138ac6275ccabe7ce0907157a3a83d0b5ea1: Renamed
STAND013 DeliveryNote_v1p1.xsd
toSTAND013-DeliveryNote_v1p1.xsd
so that the reference fromSTAND013-DeliveryNote_Interchange_v1p1.xsd
works, and the file name matches the other XML schemas. -
Commit 955dfb86974d78f64d4da1dfdc72b0e27897a2a4: Change type for
ORDERS
'Interchange/Order/OrderHeader/OrderResponse
fromMessageResponseType
(an enum with the valuesAC
,AE
, orNE
) to a newOrderResponseType
enum withZ1
as the only possible value. This matches the format documentation, and is necessary to be able to validate anyORDERS
using the XML schemas. -
Commit d6f6995642f9c60fcf039828a888df16f230f86c: Change required content for the
MessageVersion
element to be exactlySTAND013 v1.0
forORDERS
,ORDRSP
, andDESADV
. This matches the requirement in the field listings in the STAND013 documentation.