/EdifactParser

A parser for a UN/EDIFACT file in PHP

Primary LanguagePHPOtherNOASSERTION

EDIFACT Parser

Scrutinizer Code Quality Type Coverage CI Minimum PHP Version

EDIFACT stands for Electronic Data Interchange For Administration, Commerce, and Transport.

This repository contains a parser for any EDIFACT file to extract the values from any segment defined in an EDIFACT formatted file.

Ok, but... What is EDIFACT?

Format of an EDIFACT file

  • Each line of the file consists of a set of data that belongs to a specific segment of a message.

  • A segment is defined by a tag. Following the rest of the data that belongs to that segment. More about segments here.

  • A message is a list of segments. Usually, all segments between the UNH and UNT segments compound a message.

  • A transaction is the list of messages that belongs to a file.

Installation

composer require chemaclass/edifact-parser

Contribute

You are more than welcome to contribute reporting issues, sharing ideas, or contributing with your Pull Requests.

Basic examples

You can see a full example of printing segments.

You can see a full example of extracting data.

<?php declare(strict_types=1);

use EdifactParser\EdifactParser;
use EdifactParser\Segments\NADNameAddress;

$fileContent = <<<EDI
UNA:+.? '
UNB+UNOC:3+9457386:30+73130012:30+19101:118+8+MPM 2.19+1424'
UNH+1+IFTMIN:S:93A:UN:PN001'
TDT+20'
NAD+CZ+0410106314:160:Z12++Company Centre+c/o Carrier AB+City1++12345+DE'
NAD+CN+++Person Name+Street Nr 2+City2++12345+DE'
... etc
UNT+18+1'
UNZ+2+8'
EDI;

$messages = EdifactParser::createWithDefaultSegments()->parse($fileContent);
$firstMessage = reset($messages);
$cnNadSegment = $firstMessage->segmentByTagAndSubId(NADNameAddress::class, 'CN');
$personName = $cnNadSegment->rawValues()[4]; // 'Person Name'