Description
Disclaimer: I only assume this is segment compression, as defined in the manual
7.1 Exclusion of segments
Conditional segments containing no data shall be omitted
(including their segment tags).
This is what I encountered in the schema, basically a mandatory/conditional sandwich.
SG25 R 99
43 NAD M 1
44 LOC Orts 9 O
SG25 R 99
45 NAD M 1
46 LOC O 9
SG29 C 9
47 RFF M 1
SG25 O 99
48 NAD M 1
SG25 D 99
49 NAD M 1
SG25 D 99
50 NAD M 1
SG25 O 99
51 NAD M 1
SG25 M 99
52 NAD M 1
SG29 C 9
53 RFF M 1
SG25 D 99
54 NAD M 1
SG25 R 99
55 NAD M 1
SG25 R 99
56 NAD M 1
SG26 C 9
57 CTA O 1
58 COM O 9
None of the conditional statements were present in the data I was trying to parse, ended up fixing it using:
"name": "SG25-SENDER",
"min": 1,
"type": "segment_group",
"child_segments": [
{
"name": "NAD",
"min": 1,
"elements": [
{ "name": "cityName", "index": 1 },
{ "name": "provinceCode", "index": 2 },
{ "name": "postalCode", "index": 3 },
{ "name": "countryCode", "index": 4 }
]
},
{ "name": "LOC", "min": 0 }
]
},
{
"name": "SG25-RECEIVER",
"min": 1,
"type": "segment_group",
"child_segments": [
{ "name": "NAD", "min": 1 },
{ "name": "LOC", "min": 0 },
{
"name": "SG29",
"min": 0,
"type": "segment_group",
"child_segments": [{ "name": "RFF", "min": 1 }]
}
]
},
{
"name": "SG25-OTHERS",
"min": 0,
"max": 99,
"type": "segment_group",
"child_segments": [
{
"name": "SG26",
"min": 0,
"type": "segment_group",
"child_segments": [
{ "name": "CTA", "min": 0 },
{ "name": "COM", "min": 0, "max": -1 }
]
},
{ "name": "NAD", "min": 0, "max": -1 },
{ "name": "LOC", "min": 0 },
{
"name": "SG29",
"min": 0,
"type": "segment_group",
"child_segments": [{ "name": "RFF", "min": 1 }]
}
]
},
The message I'm trying to parse
NAD+CZ+46388514++Foo A/S+Foo 2+Foo++Foo+DK'
NAD+CN+46448510++NL01001 Foo Foo Foo:Foo+Foo 6+Foo++Foo+NL'
CTA+CN+AS:NL01001 Foo'
COM+0031765140344:TE'
[email protected]:EM'
NAD+LP+04900000250'
Which basically means, grab the two explicit ones (luckily at top), and do as you wish with the others in whatever order you encounter them. I'm not sure how I would have handled it if I did care about NAD+LP
Also had to use min/max 1 instead of the specified 99, as it only considers NAD, not NAD+FIRSTVALUE when 'collapsing' similar but not same segments.
Basically, the EDI specification has a lot of implicitness which I think is quite hard to easily parse.