Skip to content

Support different EDIFACT "standards" #92

@nerdoc

Description

@nerdoc

I am currently working/trying very hard to support the EDI data I for myself need to use, which is the EDIFACT format used in Austria for medical systems. It's horrible. Standards? we don't need that, we create our own stuff.

But even in the english Wikipedia article about EDIFACT there is an example that looks like this:

 UNA:+.? '
 UNB+IATB:1+6XPPC:ZZ+LHPPC:ZZ+940101:0950+1'
...

With few knowledge you you might have seen that the UNB header has "IATB" in its SyntaxIdentifier field. Which is None of "UNO[A-F]" - like the UNECE published as standard codes for that field.

In Austria, we use "ANSI", "DINA", "IBMA", "UNIX" as values there, basically it is "ANSI". And no, this is not ANSI/X12, it is EDIFACT. But non-standard rules. Even the UNB header has other fields: SENDER, RECEIVER, DATE, TIME are all simple data elements, not a combined one for date/tie, like in the UNECE standard:

UNB+ANSI:1+ME123456+ME654321+230403+0840+1'

does the header look like.

So I have to find a way to support all these different formats.

I suggest to use a dict for Segment.plugins with the tag name, which makes searching for tags easier and faster (as dict keys are indexed/hashed).

Segment.plugins["UNH"] -> list[Segment]

This list has only the few Segment classes that are supported - which may be 10 sometimes, but not 1000+ if we put all classes into one flat list, as we have now.
Each Segment must define a version (which can then be compared to the needed version in SegmentFactoy.create_segment(). And it must provide the supported syntax, like ["ANSI", "UNOA", "UNOB", "UNOC",...], which is sumb too if we'd have to add that to each Segment class.

But in fact, each "standard" has other segments.

@lord-haffi Ideas?

I can not think about another, better way of supporting more versions.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions