ANSI ASC X12标准学习指南

EDI标准
把数据进行编码的方法,提供:
语法规则
数据组织定义
编辑规则与使用规约
公开发行的文档
------------------------------
ANSI: American National Standard Institute
ANSI ASC X12:  ANSI Accredited Standards Committee X12, 也简称ANSI X12,或者干脆说X12
其下属很多子委员会致力于商务事务的电子化交换
------------------------------
X12手册中有啥
Transaction Set Tables
Segment Directory
Data Element Dictionary
Cdoe Sources
Interactive Control Structure
------------------------------
Transaction Set
就是一个独立的业务文档,好比说PO(Purchase Order)。每个都使用独立的3为数字标示。例如
PO 850; Invoice 810, Ship Notice 856
------------------------------
Structure
每个Transaction Set都分为3部分,每个部分就是一个Segment,这些分段就是结构。每个结构的内容在X12的标准文档中都有表定义他的内容。
三个分段分别是:Header, Detail, Summary
每个Transaction Set都有规定表与之对应,其中包括了这种业务集合中可以使用的分段和这些分段的使用位置和顺序
------------------------------
Transaction的具体结构
开始和结束
开始,TS Header (ST)段
结束,TS Trailer (SE)段
以上二者,在3层结构的850里面最常见。
Unique 段
很多TS中紧接着ST之后第一个段是唯一的,好比PO850的是BEG,Price/Sales Catalog 832的是BCT,856 Ship Notice的是BSN
指定TS段的必须性
每个段落可以根据需求来指定是否是必须的、可选的、或者是有条件出现的:
Mandatory:在TS必须至少出现一次
Optional:可以没有,需要就用了
Floating:在ST和SE之间随意出现
段落属性
MAX USE:段落在一个Transaction中其位置上可以最多重复出现的次数。
Loops:TS中一个特定的segment组(多个segment的合集)是如何重复出现的
loop本身是可选的,但是如果一旦一个loop中的segment被使用了,那么这个loop中的第一个segment就成了mandatory。
而loop中,如果不是第一个segment的必须性被设定为Mandatory(好比说第3个),那么只有在使用loop的时候它才是必填的,否则不强制。
loop可以嵌套。
Loop,本身就是一个段落组领头的,实际上,是定义在具体的结构表里面的,其中Postion ID是Loop,段落ID就是这个loop领头的名字,它的Loop Rep属性就指明了它可以循环多少次。
对比一般段落的结构:Postion No,Seg ID, Usage(M O F),Max Use
Loop的段落结构:Pos No., Seg ID, Loop Rep
另外,Loop组的结束以一个空行为标志。
==============================
Segment 结构
Segment定义:逻辑上关联的Data Elements的集合,他们的顺序是固定的,且已经定义好的。
Segment包括:
数据元素的长度
数据元素Seperator或者Delimiter
Segment结束符
例子:
PER*BD*JOHN J. SMITH*TE*21455511212(n/1)
其中*是分隔符
PER是Segment ID,和其他分隔符分割开始的都是数据元素
最后的括号和其中的内容是结束符
例子中使用(n/1)只是为了说明而已,实际上使用的结束符是不可显字符。这种字符也不可能在数据元素的内容中被使用。
用来承载数据的Segment (Data Segment)的结构是由其数据元素属性决定的:
M数据元素必须包含数据
O或者Relational(X)数据元素可有可无,看具体需求
数据元素本身必须在segment中占有一席之地,如果可选的元素没有又出现,也要用相应的分隔符来表及其位置(就是两个分割符之间什么都不写)
有关系条件大的时候(X指明),那么语法注记就定义了关系。元素ID关系前缀和其意义:
P paired or multiple(成对出现或者多个),如果关系中一个元素出现了,那么其他所有的必须出现
R Required,关系条件中的元素至少出现一个
E Exclusion,最多出现一个关系条件中的东东
C Conditional,如果条件中的第一个元素出现,那么其他所有的必须也出现
L List Conditional,如果条件中第一个元素出现,那么剩余的元素至少出现一个
对于消息结尾都是有一个独一无二的Data Segment Terminator标记的。对于Optional or Relational的数据元素,当他们不包含数据,且出现在数据段落结尾的时候,就无需多余的数据分隔符来执政期位置数据位置
好比说:
N1*BY*DON'S DISTRIBUTEION***(n/1),最后的那些个*就是不需要的,都可以去掉,写成N1*BY*DON'S DISTRIBUTEION(n/1)
------------------------------
数据段落的类型
一个数据段落类型,实际上都是以图表的格式标示的,好比:
N1 * N101 98 Entity ID Code M ID 2/2* N102 93 Name X AN 1/35*N103 66 ID Code Qualifier X ID 1/2*N104 67 ID Code X AN 2/17 NL
说明一下, N1是这里的数据段落标识符,表明这个段落的开始,实际中可能有多种,这里只是个例子
N101就是当前数据元素在数据段落中的编号,N1 中的01号,其他的以此类推
98 就是数据字典编号
Entitiy ID Code,还有其他对应位置上的什么Name啊,ID COde Qualifier等都是数据元素的title
之后的M X什么的就是上文书说道的数据元素属性(必须性)
其后的ID和AN等标示数据元素类型(N, B, R, AN, ID, DT, TM)
之后的那个分数,好比说1/2就标示其长度
最后的那个NL就是这个Data Segment的结束符,可以看到跟前面的元素之间没有分隔符,说明是个比较特殊的东东。
另外,在语法主机中,可以查找到相应的内容。
==============================
X12中的验证符(Qualifier)与值(value)
验证符,通常都是ID字段(编码化的值)。例如PER段落,其中PER3和PER04都表示联系某人的方法。例如,验证符(365)就是一个编码,使用下面的值:
BN Bepper Number
FX Facimile
TE Telephone
TL Telex
TM Telemail
EM Email
CP Cell Phone
这种验证符就可以用来验证到底其后面的值是那种通讯方式了,好比说:
PER*CR*JOHN J.JOHNSON*TE*2145551212
这里TE就指明了后面是电话
-----------------------------
数据元素类型
先说长度 01/04,表示1-4位字符的长度
Numeric,仅含有数字,可以带有正负号,N表示这种类型,其后的数字标示小数位。例如N0,就标示整数。N2,表示小数点后面带两位小数(此时123,实际表示1.23,是正确的值,相对的1.23反倒是不正确的值)
Decimal,只有数字字符和小数点,和负号。例如1.00,.123,-1.234,123等都是正确的,小数点不计入长度
String,字符串类型,包含空格
Date,以YYMMDD或者CCYYMMDD形式定义,分为8位和6位
例如2010.2.21,8位的酒味20100221,6位的就是100221
Time,时间类型,HHMMSSd(d表示24小时制),最少4位HHMM,最多6位HHMMSS,可以为秒的位置指定组大的长度十分位。
Binary,范围从00000000到11111111的8位二进制数。其类型长度本身没有最大限制(结合前面意味着是8的整数倍长度)。
ID,如果X12维护了ID代码表,那么数据元素就依照其ID值,在数据元素字典中有定义。反之,则依赖于X12手册的俘虏。ID code的类型有:
Dunn & Bradstreet Codes
Bureau of Census Codes
Medical Codes
Government(tax traffic armed services) codes
Airport codes
Pharmaceuticals Codes
Telecommunications Codes
Petroleum Codes
-----------------------------
复合结构
所谓Composite Data Element Structure就是一个Segment中还有信息单元。基本上就是一个数据元素又被子分隔符给分割了。这种组建也有M O X这种出现限定。
数据元素与语义Note相关联,通过这种语义note来提供重要的附加信息,而不关注数据元素的使用方式。这种关联通过在出现限定词后面加上/Z来表示此数据元素带有语义注记。
举例,一个C003(Composite Medical Procedure Identifier):
REF       ELE.ID  NAME  ATTRIBUTES
01          235      Product/Service ID Qualifier  M          ID        2/2
02          234      Product/Service ID   M         AN      1/48
03        1339      Procedure Modifier   O/Z       AN        2/2
04        1339      Procedure Modifier   O/Z       AN        2/2
05        1339      Procedure Modifier   O/Z       AN        2/2
06        1339      Procedure Modifier   O/Z       AN        2/2
07          352      Description   O/Z       AN      1/80
SEMANTIC NOTES
03    C003-03   modifies the value in C003-02
04    C003-04   modifies the value in C003-02
05    C003-05   modifies the value in C003-02
06    C003-06   modifies the value in C003-02
07    C003-07   is the description of the procedure indentified in C003-02
解释一下,上面Ref对应01-07,是参考号,ELE.ID是编号,Name就不说了,后面三列分别表示出现限定,数据段落类型和长度
下面的语义注记则表示对应到谁上面,前面的03,与REF上的03对应,其他以此类推。
==============================
封装过程(Envelope Process)
三步:
1。依照X12标准格式建立文档
2。依照X12标准添加到电子信封中
3。传送电子文件
-------------------------------
信封结构(Envelope Structure)
对于每个消息在封装时有三层:
1。 Transaction Set
2。 Functional Group
3。 Interchange
Interchange最外层,包含n个Functional Group,Functional Group包含了n个Transaction Set,Transaction Set就是最内层的。
其中Transactional Set通过ST SE标志开始和结束,Functional Group则通过GS和GE标志起止,Interchange则是ISA和IEA。
-------------------------------
Transaction Set的封装
TS总是有ST和SE段落标志其开始和结束,、
其中ST段落3个字段,前两个必须,后一个可选:
Transaction Set ID (3位数字,相当于类型,好比说850)
Control Number
Implementation Convention reference 004020之后的版本有效
SE段落有两个数据元素:
TS所包含的Segment的数量
Control Number(内容同ST必须一致,否则说明不是同一个TS,例如ST中的是1001,那么SE中的必然也是1001)
-------------------------------
Functional Group 的封装
Functional Group的用意在于将一组类型相似的TS在同一个传输中分配到一个组里面。
这里所谓类型相似依照与X12的版本不同会有变化。
FG的封装有GS和GE标志其开始和结束,对于GS有:
FG Set ID
文档的格式与版本,日期时间戳号等
其中FG Set ID,相当于FG的类型,两位字母表示,例如PO,SH FA等
Control(控制字段)与TS一样都是通过数字提供数据完整性的功能
格式和版本,就是说X12要用到什么样的版本,例如X则表示格式,004010则表示X12要被使用的版本。
-------------------------------
FG的次级寻址(sub Addressing)
实际上一个X12文档通过ISA中的内容来寻址,但是实际上发送到公司之后,公司的程序会对其进行内部处理拆分等,这些拆分出来的内容需要被发送给不同的人员,这就是使用次级寻址的原因。
这种次级寻址的编号都在GS元素里面好比说GS02,GS03等等元素
-------------------------------
最外层Interchange的封装
Interchange通过ISA和IEA来标识其开始和结束.
ISA本身是定长字段,ISA和IEA中部分共有的内容:
结构化的邮箱地址(发送和接收方)
Interchange控制号
Interchange内部FG的数量
日期时间戳(与FG类似,但是不含世纪)
Interchange的版本
ISA段落中数据元素所使用的分隔符,次级分隔符和段落结束符
==============================
组级别的FA
所谓Functional Acknowledgements是为了让文档能够提供“end to end”的共识。
说白了,就是接收方给传输方的一个反馈,一边发送方知道自己的内容在接收方来看,收到哪一个步骤了。这种反馈只能针对Functional Group和Transaction Set进行。
如过接收方接收到的是Functional Group,那么就分别返回AK1和AK9,如果是Transaction Set那么就返回AK2和AK5。这种顺序与接到的文档的FG和TS的开始和结束段落嵌套关系一直,否则,就是出错了呗。
接收的状态有如下几种:
Accepted
Rejected
Accepted With Errors
Partially Accepted
对于错误的反馈,通过:
AK3表示segment的错误
AK4表示数据元素的错误
==============================
ANSI Wrap-up
最后要记住的事情:
X12标准是有ANSI ASC X12委员会开发的用来给北美地区的EDI标准
标准的TS都是有segment组成的,其中包含了其可以出现的次数以及loop的信息
segment都是数据元素的集合,简单构成的或者组合的,按照预定义的顺序。顺序就是data segment表中所描述的。
数据元素通常都是由助记符和值组成的,复杂的数据元素则是由更多的数据元素通过次级元素分隔符组成的。
封装中有三层:ts,fg和Interchange。他们都通过系统控制号和segment/transaction/group的数量来保持数据的完整性。

原文地址:https://www.cnblogs.com/wallis0922/p/2208882.html