VendorCentral Ruby X12 EDI:找到“1~”而不是段标识符

时间:2017-06-08 17:48:10

标签: ruby x12

我是X12 EDI的新手并且有些困惑。最终目标是将数据提取到我们的数据库(或CSV)。

我正在使用Ruby库STUPIDEDI来解析一些X12文件。我没有超越标题中的这个错误。

示例-830-文件:

ISA*00*          *00*          *ZZ*CHEESE         *12*VENDOR ISA     *160321*1828*U*00400*000004970*0*T*>~
GS*PS*CHEESE*2018584966*20160321*1828*4970*X*004010~
ST*830*0001~
BFR*00*Forecast ID**DL*A*20131229*20140323*20140104****MN~
REF*IA*Vendor Code~
N1*DU*CHEESE US*15*1526642~
N1*VN*Vendor Name*92*123456789~
LIN*1*UP*123456789123456*B123456789~
UIT*EA~
FST*0*D*W*20131229~
FST*0*D*W*20140105~
FST*0*D*W*20140112~
FST*0*D*W*20140119~
FST*0*D*W*20140126~
FST*0*D*W*20140202~
FST*0*D*W*20140209~
FST*0*D*W*20140216~
FST*0*D*W*20140223~
FST*0*D*W*20140302~
FST*0*D*W*20140309~
FST*0*D*W*20140316~
FST*0*D*W*20140323~
SE~1~0001~
GE~1~1~
IEA~1~000000001~

代码:

config = Stupidedi::Config.contrib
parser = Stupidedi::Builder::StateMachine.build(config)

input = File.open(file_path_to_example_830)
# Reader.build accepts IO (File), String, and DelegateInput
parser, result = parser.read(Stupidedi::Reader.build(input))

# Raises exception in title
if result.fatal?
  result.explain { |reason| raise reason + " at #{result.position.inspect}" }
end

# Hoping to Print some information
parser.first
  .flatmap { |m| m.find(:GS) }
  .flatmap { |m| m.find(:ST) }
  .tap do |m|
  el(m.find(:N1, "PR"), 2) { |e| puts "Payer: #{e}" }
  el(m.find(:N1, "PE"), 2) { |e| puts "Payee: #{e}" }
end
  .flatmap { |m| m.find(:LX) }
  .flatmap { |m| m.find(:CLP) }
  .flatmap { |m| m.find(:NM1, "QC") }
  .tap { |m| el(m, 3, 4) { |l, f| puts "Patient: #{l}, #{f}" } }

引发错误:

 RuntimeError:
       found "1~" instead of segment identifier at file /Users/foo/Documents/dev/project/public/X12_830_FORECAST/X12_Example_830.txt, line 23, column 4

line 23, column 4的错误点澄清为SE~1~0001~

2 个答案:

答案 0 :(得分:1)

问题是输入文件无效。最后3个细分具有~而不是*作为元素分隔符,因此它将每个元素识别为单独的细分。

这些细分应为:

SE*21*0001~
GE*1*4970~
IEA*1*000004970~

答案 1 :(得分:0)

SE~之后的数字(称为SE01)必须是"包含的段数",在您的情况下,如果我计数良好,则等于 21

尝试SE~21~0001~并告诉我。