NAME

Quiq::Zugferd - Generiere/Akzeptiere XML einer ZUGFeRD-Rechnung

BASE CLASS

Quiq::Hash

ENVIRONMENT

$ZUGFERD_DIR

Verzeichnis mit den ZUGFeRD XSD-Dateien und dem ZUGFeRD XML-Template. Der Wert dar Variable ist priorisiert gegenüber dem klasseninternen Pfad.

DESCRIPTION

Diese Klasse befindet sich in Entwicklung!

Die Klasse kapselt das ZUGFeRD 2.3(Factur-X Version 1.0.07) XML Profile BASIC sowie ein XML-Template zu diesem Profile, das alle ELemente und Attribute umfasst. Das Template kann als XML (Text) oder als Datenstruktur (Baum) in verschiedenen Varianten (leer, mit Beispielwerten, mit Platzhaltern) genutzt werden.

EXAMPLES

Zeige ZUGFeRD XML und Datenstruktur als Zeichenkette:

$ perl -MQuiq::Zugferd -E 'say Quiq::Zugferd->new->doc' # XML, kommentiert
$ perl -MQuiq::Zugferd -E 'say Quiq::Zugferd->new->doc("tree")'

(Tipp: XML-Ausgabe in Datei speichern und mit Emacs oder vi mit "Syntax Highlighting" lesen)

Zeige das ZUGFeRD XML:

$ perl -MQuiq::Zugferd -E 'say Quiq::Zugferd->new->xml' # ohne Werte
$ perl -MQuiq::Zugferd -E 'say Quiq::Zugferd->new->xml("placeholders")'
$ perl -MQuiq::Zugferd -E 'say Quiq::Zugferd->new->xml("values")'

Zeige das ZUGFeRD XML als Baum:

$ perl -MQuiq::Zugferd -MQuiq::Dumper -E 'say Quiq::Dumper->dump(Quiq::Zugferd->new->tree)'

METHODS

Klassenmethoden

createTemplate() - Erzeuge Template zu ZUGFeRD-Profil

Synopsis

$xml = $class->createTemplate($profile,%opt);

Arguments

$profile

Name des ZUGFeRD-Profils. Mögliche Namen: 'minimum', 'basicwl', 'basic', 'en16931', 'extended'.

Options

-xsdDir => DIR (Default: $ENV{'ZUGFERD_DIR'} || ModuleDir)

Verzeichnis mit den ZUGFeRD Schema-Dateien

Returns

(String) XML-Template

Description

Erzeuge auf Basis der XSD-Dateien des ZUGFeRD-Profils $profile mit XML::Compile::Schema eine XML Template-Datei ohne Werte und liefere das Ergebnis zurück.

ACHTUNG: Die Templates sind nicht umfassend, es gibt Elemente, denen die Unterelemente felen. Suche nach Tags mit dem Muster "/>":

$ perl -MQuiq::Zugferd -E 'say Quiq::Zugferd->createTemplate("minimum")' | grep '/>'
    <ram:GuidelineSpecifiedDocumentContextParameter/>
      <ram:BuyerTradeParty/>
    <ram:ApplicableHeaderTradeDelivery/>

Tipp: Unterschiede zwischen den Profilen lassen sich mit diff(1) ermitteln.

Examples

Profil MINIMUM:

$ perl -MQuiq::Zugferd -E 'say Quiq::Zugferd->createTemplate("minimum")'

Profil BASICWL:

$ perl -MQuiq::Zugferd -E 'say Quiq::Zugferd->createTemplate("basicwl")'

Profil BASIC:

$ perl -MQuiq::Zugferd -E 'say Quiq::Zugferd->createTemplate("basic")'

Profil EN16931:

$ perl -MQuiq::Zugferd -E 'say Quiq::Zugferd->createTemplate("en16931")'

Profil EXTENDED:

$ perl -MQuiq::Zugferd -E 'say Quiq::Zugferd->createTemplate("extended")'

new() - Instantiiere Objekt

Synopsis

$zug = $class->new($profile);

Returns

Object

Description

Instantiiere ein ZUGFeRD-Objekt auf Basis von Profil $profile der Klasse und liefere dieses zurück.

Objektmethoden

parts() - Liefere Abschnitte mit mehreren gleichen Unterabschnitten

Synopsis

@parts | $partA = $zug->parts;

Returns

(Array) Liste von Abschnitten. Im Skalarkontext liefere eine Referenz auf die Liste.

Description

Liefere die Liste der Namen aller Abschnitte, die mehrere gleiche Unterabschnitte haben. Die Namen sind Tagnamen ohne Namespace-Präfix.

doc() - Liefere ZUGFeRD Doku

Synopsis

$str = $zug->doc;
$str = $zug->doc($type);

Arguments

$type (Default: 'xml')

Art der Dokumentation:

'xml'

ZUGFeRD XML mit Beispielwerten und Kommentaren

'tree'

ZUGFeRD Baum mit Beispielwerten

'parts'

Liste der Elemente, mit n-fachen Unterelementen. Wenn keine Kardinalitäten vorhanden sind, ist die Liste leer.

'paths'

Liste der Zugriffspfade im Baum

'cardinality'

Liste der Elemente und ihrer Kardinalitäten. Wenn keine Kardinalitäten und/oder Kommentare vorhanden sind, fehlt die Information in der Ausgabe.

Returns

(String) Doku

Example

ZUGFeRD XML mit Beispielwerten und Kommentaren:

$ perl -MQuiq::Zugferd -E 'print Quiq::Zugferd->new->doc("xml")'

ZUGFeRD Baum mit Beispielwerten:

$ perl -MQuiq::Zugferd -E 'print Quiq::Zugferd->new->doc("tree")'

Zugriffspfade im ZUGFeRD Baum:

$ perl -MQuiq::Zugferd -E 'print Quiq::Zugferd->new->doc("paths")'

Elemente mit n-fachen Unterelementen:

$ perl -MQuiq::Zugferd -E 'print Quiq::Zugferd->new->doc("parts")'

Elemente und ihre Kardinalitäten:

$ perl -MQuiq::Zugferd -E 'print Quiq::Zugferd->new->doc("cardinality")'

tree() - Liefere ZUGFeRD XML Template als Baum

Synopsis

$h = $zug->tree;
$h = $zug->tree($variant);

Arguments

$variant (Default: 'placeholders')
'empty'

Ohne Werte

'placeholders'

Mit Platzhaltern. Identisch zu "empty", wenn keine Platzhalter definiert sind.

'values'

Mit Beispielwerten. Leerstrings statt undef, wenn keine Werte gesetzt sind.

Returns

Baum-Referenz

Description

Wandele das ZUGFeRD XML Template in einen Baum und liefere eine Referenz auf den Wurzelknoten zurück.

treeToXml() - Wandele (ZUGFeRD) Baum nach XML

Synopsis

$xml = $zug->treeToXml($tree,%opt);

Arguments

$tree

(Object) Baum, der nach XML gewandelt wird.

Options

-validate => $bool (Default: 1)

Erzeuge einen validierenden XML-Writer.

Returns

(String) XML

Description

Wandele den Baum nach XML und liefere dieses zurück.

Example

$ perl -MQuiq::Zugferd -E '$zug = Quiq::Zugferd->new("en16931"); $tree = $zug->tree; print $zug->treeToXml($tree)'

xml() - Liefere ZUGFeRD XML Template als Zeichenkette

Synopsis

$xml = $zug->xml;
$xml = $zug->xml($variant);

Arguments

$variant (Default: 'empty')

Variante des XML:

'empty'

Ohne Werte

'placeholders'

Mit Platzhaltern

'values'

Mit Beispielwerten

Returns

(String) XML

VERSION

1.224

AUTHOR

Frank Seitz, http://fseitz.de/

COPYRIGHT

Copyright (C) 2025 Frank Seitz

LICENSE

This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.