Sample message

(who can help translating?)

Die Papierrechnung

Wir wollen hier versuchen, eine alltägliche Papierrechnung im EDIFACT-Format abzubilden.

 
Fahrradhandel Pedal, Wagingerstr. 5, 81549 München
 
 
Huber GmbH
Obstgasse 2
81549 München
 
                                           München, 02.08.99
 
 
Rechnung: 9908001  Ihre Bestellung Nr. O0010001 vom 15.07.99 
 
Pos  Artikel  Beschreibung     Anzahl Einzelpreis Gesamt
1   4711.001  Fahrrad, Damen-    1       750,00   750,00
2   4711.002  Luftpumpe, Stand-  1        19,90    19,90
3   4711.003  Ersatzventil       3         2,50     7,50
                                            ------------
                             Gesamtsumme netto    777,40
                              Umsatzsteuer 16%    124,38
                                                ========
                        zu zahlender Betrag       901,78
 
 
 
Alle Beträge verstehen sich in DEM

Stoffsammlung

Welche Daten befinden sich auf dem Rechnungsformular, die mittels EDIFACT übertragen werden sollen bzw. müssen? Diese Stoffsammlung hilft, die entsprechenden Daten dann in die EDIFACT-Segmente zu füllen.

Absender Fahrradhandel Pedal ID = FHPEDAL*)
Absenderadresse Wagingerstr. 5, 81549 München  
     
Empfänger Huber GmbH ID = HUBERGMBH*)
Empfängeradresse Obstgasse 2, 81549 München  
     
Rechnungsdatum 02.08.99  
Rechnungsnummer 9908001  
Bestellung O0010001  
Bestelldatum 15.07.99  
     
drei Rechnungspositionen mit ArtNr, Text, Anzahl, Einzel- und Gesamtpreis  
     
Nettosumme 777,4  
Steuerprozentsatz 16%  
Steuerbetrag 124,38  
     
Gesamtbetrag 901,78  
Währung der Beträge DEM  

*) So haben die beiden das ausgemacht.

EDIFACT Rahmenbedingungen

Hier stellen wir kurz die EDIFACT bezogenen Rahmenbedinungen fest:

EDIFACT-Standard: UN D93A
Nachricht: INVOIC (Commercial invoice) Rechnung
Dezimalzeichen: , (Komma)

Umsetzen in EDIFACT

Zum besseren Verständnis der folgenden Absätze empfiehlt es sich, sich die Nachrichtenstruktur der INVOIC-Nachricht zurechtzulegen. Zunächst definieren wir den Satz von Trennzeichen, den wir in der Übertragung verwenden wollen.

UNA:+,? '
   ||||||
   |||||+---> Segmentendezeichen
   ||||+----> reserviert, bleibt leer
   |||+-----> Release-Zeichen
   ||+------> Zeichen für's Dezimalkomma
   |+-------> Datenelement-Trennzeichen 
   +--------> Composite-Element-Trennzeichen

Die Nachricht wird in den virtuellen Briefumschlag gesteckt, der allerdings zum Befüllen erst einmal geöffnet werden muss. Hierzu ist das UNB-Segment zu verwenden.

S001 	SYNTAX IDENTIFIER 	 
  	0001 	Syntax identifier 	UNOA
  	0002 	Syntax version number 	2
  	  	 
S002 	INTERCHANGE SENDER 	 
  	0004 	Sender id 		FHPEDAL
  	  	 
S003 	RECIPIENT 	 
  	0010 	Recipient id 		HUBERGMBH
  	  	 
S004 	Date/Time of preparation 	 
  	0017 	Date 			990802 (Tagesdatum)
  	0019 	Time 			1557 (um kurz vor vier)
  	  	 
0020 	Interchange control referenz 	9908021557 - Interne Nummer,
					die Pedal dieser Übertragung verpasst

Daraus läßt sich das UNB-Segment jetzt zusammensetzen:

UNB+UNOA:2+FHPEDAL+HUBERGMBH+990802:1557+9908021557'

Man beachte, dass die derzeitige Version der ISO9735 hier immernoch ein Jahrtausendproblem (S004:0017) hat. Ab Syntax level 4 (hier 2) wird dieses Feld allerdings 8-stellig zu füllen sein.

So, nun gehts los - der Briefumschlag ist offen, jetzt stecke man die Nachricht hinein.

Die Nachricht INVOIC

Zunächst muss man definieren, dass es sich hier um eine Rechnung handeln wird, und dass deren Aufbau gemäß dem o.g. UN-Standard D93A ist.

UNH+INVOIC0001+INVOIC:D:93A:UN'
      +--------------------------> Interne Nummer dieser Rechnung
                                   (ist aber nicht die
                                    Rechnungsnummer)

Die Rechnungsnummer geben wir im nun folgenden BGM-Segment an.

BGM+380+9908001+9'
     |     |    +-----> 9=Original (also kein Duplikat/Kopie)
     |     +----------> Die Rechnungsnummer
     +----------------> 380=Rechnung (zum wiederholten Male;
                                      381=Gutschrift)

Das Rechnungsdatum kommt im folgenden DTM-Segment:

DTM+3:19990802:102'
    |     |     +-----> Format CCYYMMDD 
    |     +-----------> Rechnungsdatum 
    +-----------------> Spezifiziert das Datum als Rechnungsdatum

Für die im Standard nachfolgenden Segmente haben wir keine Daten, und wir können sie auch weglassen, da der Standard (C)onditional für diese Segmente ausweist. Erst bei der Segmentgruppe 1 (RFF-DTM) machen wir wieder halt, weil hier die referenzierte Bestellnummer eingetragen werden kann:

RFF+ON:O0010001'
     |     +-----------> Bestellnummer
     +-----------------> ON=Order number - also die Bestellnummer

Zu dieser Segmentgruppe gehört auch das DTM-Segment, in das das Datum der Bestellung eingetragen wird:

DTM+4:19990715:102'
    |     +-----------> Bestelldatum
    +-----------------> Spezifiziert das Datum als Bestelldatum

Nun folgen in der Segmentgruppe 2 (NAD-LOC-FII) die Adressangaben. Zwei solcher Angaben haben wir, die des Senders und die des Empfängers. Also erzeuge man zweimal die Segmentgruppe 2 wobei hier in diesem Beispiel die Folgesegmente/-segmentgruppen (3-5) unterschlagen werden (weil keine Daten).

NAD+SE++Fahrradhandel Pedal++Wagingerstr. 5+München++81549'
    +-----------------> Spezifiziert Verkäufers Adresse

und

NAD+BY++Huber GmbH++Obstgasse 2+München++81549'
    +-----------------> Spezifiziert des Käufers Adresse

So, mittlerweile haben wir so ziemlich alles in den Kopf gepackt, was in den Kopf zu packen wäre. Jetzt können wir mit den Rechnungspositionen beginnen - dazu ist es nötig (und erlaubt), alles bis zur Segmentgruppe 22 (LIN...) zu überspringen. Für die drei Rechnungspositionen werden also drei Wiederholungen der Segmentgruppe 22 nötig. Für die folgenden Segmente werde ich die ausführliche Dokumentation etwas zurücknehmen, da ich denke, das die Segmente selbsterklärend sind:

LIN+1++4711.001'
IMD+F++:::Fahrrad, Damen'
QTY+47:1:PCE'
    |  |  +-----------> Maßeinheit: Stück
    |  +--------------> Anzahl 1
    +-----------------> Spezifiziert die in Rechnung gestellte
                        Anzahl (Quantity)
MOA+66:750'
    |   +-------------> Betrag (Rechnungs-)Position
    +-----------------> Spezifiziert den Betrag als Summe dieser
                        (Rechnungs-)Position
PRI+AAA:750'
     |   +------------> (Netto-)Preis
     +----------------> Spezifiziert Preis als Einzelpreis

LIN+2++4711.002'
IMD+F++:::Luftpumpe, Stand-'
QTY+47:1:PCE'
MOA+66:19,9'
PRI+AAA:19,9'

LIN+3++4711.003'
IMD+F++:::Ersatzventil'
QTY+47:3:PCE'
MOA+66:7,5'
PRI+AAA:2,5'

Damit sind die Detailangaben (sprich Rechnungspositionen) definiert, man kann also jetzt zur Definition der Summensektion übergehen. Dazu wird das Segment UNS verwendet.

UNS+S'
    +-----------> Markiert den Übergang zur (S)ummensektion

Die Segmentgruppe 45 (MOA-SG46) stellt Segmente zur Verfügung, in die Beträge bezüglich der gesamten Rechnung gefüllt werden können. Diese Segmentgruppe nutzt man also um die Rechnungsendbeträge abzubilden.

Zunächst definieren wir den Netto-Gesamtbetrag:

MOA+79:777,4'
    |   +-------------> Gesamtsumme der (Rechnungs-)Positionen
    +-----------------> Spezifiziert den Betrag als Summe der
                        (Rechnungs-)Position

Der Steuerbetrag:

MOA+124:124,38'
     |   +------------> Steuerbetrag
     +----------------> Spezifiziert den Betrag als Steuerbetrag

Und zum Schluß kommt dann noch die Gesamtsumme, der zu zahlende Betrag:

MOA+128:901,78'
     |   +------------> Gesamtbetrag
     +----------------> Spezifiziert den Betrag als den
                        Gesamtbetrag

Was jetzt noch fehlt, ist der Steuerprozentsatz, mit dem die einzelnen Nettobeträge besteuert worden sind. Hierfür wird die unmittelbar folgende Segmentgruppe 47 (TAX-MOA) verwendet:

TAX+7+VAT+++:::16+S'
    |  |        | +--> definiert den Prozentsatz als
    |  |        |      Standardprozentsatz
    |  |        +----> der Prozentsatz
    |  +-------------> Umsatzsteuer (Value Added Tax)
    +----------------> gesetzlich zu erhebende Steuer

Damit ist alles gesagt, was bezüglich der Rechnung zu sagen war. Schließen wir also die Nachricht ab. Hierzu ist das Segment UNT zu verwenden. Dieses Segment dient als interne Kontrollinstanz:

UNT+28+INVOIC0001'
     |   +------------> Interne Nachrichtennummer. Muß mit der
     |                  Nummer im UNH-Segment übereinstimmen
     +----------------> Anzahl der Segmente in der Nachricht -
                        einschließlich dem UNH- und diesem
                        UNT-Segment

Als allerletzter Schritt ist nun noch der Briefumschlag zuzumachen. Hierfür generiert man das UNZ-Segment:

UNZ+1+9908021557'
     |   +------------> Interne Übertragungsnummer.
     |                  Muß mit der Nummer im UNB-Segment
     |                  übereinstimmen
     +----------------> Anzahl der Nachrichten in dieser
                        Übertragung

Unkommentierte Version der EDIFACT-Übertragung

Läßt man nun die Kommentare bei dem einzelnen Segmenten weg, erhält man die Übertragung als reine EDIFACT-Übertragung:

UNA:+,? '
UNB+UNOA:2+FHPEDAL+HUBERGMBH+990802:1557+9908021557'
UNH+INVOIC0001+INVOIC:D:93A:UN'
BGM+380+9908001+9'
DTM+3:19990802:102'
RFF+ON:O0010001'
DTM+4:19999715:102'
NAD+SE++Fahrradhandel Pedal++Wagingerstr. 5+München++81549'
NAD+BY++Huber GmbH++Obstgasse 2+München++81549'
LIN+1++4711.001'
IMD+F++:::Fahrrad, Damen'
QTY+47:1:PCE'
MOA+66:750'
PRI+AAA:750'
LIN+2++4711.002'
IMD+F++:::Luftpumpe, Stand-'
QTY+47:1:PCE'
MOA+66:19,9'
PRI+AAA:19,9'
LIN+3++4711.003'
IMD+F++:::Ersatzventil'
QTY+47:3:PCE'
MOA+66:7,5'
PRI+AAA:2,5'
UNS+S'
MOA+79:777,4'
MOA+124:124,38'
MOA+128:901,78'
TAX+7+VAT+++:::16+S'
UNT+28+INVOIC0001'
UNZ+1+9908021557'

Es gibt keinerlei Aussagen darüber, ob die Segmente jeweils in einer Zeile stehen sollen oder wie lang eine EDIFACT-Zeile maximal lang sein könnte. EDIFACT ist ein Streamformat in dem die Zeilenendezeichen (CR und LF) sowie überflüssige Leerzeichen ignoriert wird. Demzufolge können wir ohne eine Standardverletzung zu begehen die Übertragung auf 50 Zeichen pro Zeile limitieren und die Segmente fortlaufend aneinanderhängen:

UNA:+,? 'UNB+UNOA:2+FHPEDAL+HUBERGMBH+990802:1557+
9908021557'UNH+INVOIC0001+INVOIC:D:93A:UN'BGM+380+
9908001+9'DTM+3:19990802:102'RFF+ON:O0010001'DTM+4
:19999715:102'NAD+SE++Fahrradhandel Pedal++Waginge
rstr. 5+München++81549'NAD+BY++Huber GmbH++Obstgas
se 2+München++81549'LIN+1++4711.001'IMD+F++:::Fahr
rad, Damen'QTY+47:1:PCE'MOA+66:750'PRI+AAA:750'LIN
+2++4711.002'IMD+F++:::Luftpumpe, Stand-'QTY+47:1:
PCE'MOA+66:19,9'PRI+AAA:19,9'LIN+3++4711.003'IMD+F
++:::Ersatzventil'QTY+47:3:PCE'MOA+66:7,5'PRI+AAA:
2,5'UNS+S'MOA+79:777,4'MOA+124:124,38'MOA+128:901,
78'TAX+7+VAT+++:::16+S'UNT+28+INVOIC0001'UNZ+1+990
8021557'

Fehler in der Nachricht

Währungsangaben

Es fehlen in der Nachricht sämtliche Währungsangaben. Gemäß UN/EDIFACT-Standard ist dies auch korrekt, weil im Falle der Abwesenheit von Währungsangaben die jeweilige Landeshauptwährung anzunehmen ist. Somit wäre das Fehlen der Währungen eigentlich kein Fehler. Dies ist jedoch mehr als zweideutig, sodass hier dringend die Angabe der Währungen empfohlen sei. Dies kann jeweils in den MOA-Segmenten geschehen - oder wie in dieser Message in einem allgemeinen CUX-Segment (Segmentgruppe 7 CUX-DTM).

Bankverbindung

Herr Huber weiß anhand der Nachricht nicht, wohin er den geforderten Betrag überweisen soll. Man füge also zu Beginn der Nachricht (also im Kopfteil) ein FII-Segment ein, in dem die Bankverbindung der Pedaler angegeben ist.