stupidedi 1.2.2 → 1.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +15 -3
  3. data/bin/edi-pp +3 -6
  4. data/lib/stupidedi/builder/builder_dsl.rb +4 -0
  5. data/lib/stupidedi/builder/generation.rb +2 -2
  6. data/lib/stupidedi/builder/states/abstract_state.rb +4 -4
  7. data/lib/stupidedi/config.rb +2 -0
  8. data/lib/stupidedi/contrib/003010/guides.rb +1 -1
  9. data/lib/stupidedi/contrib/003010/guides/PC860.rb +7 -2
  10. data/lib/stupidedi/contrib/003010/guides/PS830.rb +198 -0
  11. data/lib/stupidedi/contrib/003010/guides/RA820.rb +7 -0
  12. data/lib/stupidedi/contrib/003010/transaction_set_defs.rb +3 -0
  13. data/lib/stupidedi/contrib/003010/transaction_set_defs/PC860.rb +1 -1
  14. data/lib/stupidedi/contrib/003010/transaction_set_defs/PS830.rb +56 -0
  15. data/lib/stupidedi/contrib/003040/guides/WA142.rb +1 -0
  16. data/lib/stupidedi/contrib/004010/guides/PO850.rb +27 -1
  17. data/lib/stupidedi/contrib/004010/transaction_set_defs.rb +3 -0
  18. data/lib/stupidedi/contrib/004010/transaction_set_defs/PO850.rb +9 -1
  19. data/lib/stupidedi/contrib/004010/transaction_set_defs/SC832.rb +44 -0
  20. data/lib/stupidedi/schema/segment_def.rb +9 -1
  21. data/lib/stupidedi/schema/syntax_note.rb +0 -4
  22. data/lib/stupidedi/version.rb +1 -1
  23. data/lib/stupidedi/versions/functional_groups/002001/element_defs.rb +1 -1
  24. data/lib/stupidedi/versions/functional_groups/002001/element_types/identifier_val.rb +6 -6
  25. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/MEA.rb +8 -9
  26. data/lib/stupidedi/versions/functional_groups/003010/element_defs.rb +57 -1
  27. data/lib/stupidedi/versions/functional_groups/003010/segment_defs.rb +14 -0
  28. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/BFR.rb +40 -0
  29. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/BPS.rb +8 -1
  30. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/CTT.rb +2 -2
  31. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/FOB.rb +2 -0
  32. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/FST.rb +31 -0
  33. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/MEA.rb +8 -9
  34. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/N1.rb +3 -9
  35. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/SDP.rb +21 -0
  36. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/SHP.rb +22 -0
  37. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/TD5.rb +3 -0
  38. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/UIT.rb +20 -0
  39. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/MEA.rb +8 -9
  40. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/PRR.rb +2 -0
  41. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/SSS.rb +2 -0
  42. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/MEA.rb +8 -9
  43. data/lib/stupidedi/versions/functional_groups/004010/element_defs.rb +14 -7
  44. data/lib/stupidedi/versions/functional_groups/004010/segment_defs.rb +9 -0
  45. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/BCT.rb +19 -0
  46. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/BFR.rb +1 -0
  47. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/CTP.rb +36 -0
  48. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/SCH.rb +28 -0
  49. data/lib/stupidedi/versions/functional_groups/005010/element_defs.rb +1 -1
  50. data/lib/stupidedi/versions/interchanges/00200/element_defs.rb +2 -2
  51. data/lib/stupidedi/versions/interchanges/00200/segment_defs/ISA.rb +2 -2
  52. data/lib/stupidedi/versions/interchanges/00300/segment_defs/ISA.rb +2 -2
  53. data/lib/stupidedi/zipper/abstract_cursor.rb +4 -4
  54. data/spec/examples/integration/generating.example +10 -0
  55. data/spec/examples/stupidedi/reader/token_reader.example +1 -1
  56. data/spec/fixtures/SC832/1-good.txt +22 -0
  57. data/spec/fixtures/SC832/2-good.txt +1067 -0
  58. metadata +16 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9ff1d8f6beea22666b9a2951803ffa317f1e4751
4
- data.tar.gz: 93a7f43ad7423f24bb1ea303b332adab7137d24b
3
+ metadata.gz: 2093ddba04d861a92064a74df14c6c950f29b54d
4
+ data.tar.gz: d94a09d05a3d2f5c21cec4309e4cb3f72124ad6d
5
5
  SHA512:
6
- metadata.gz: 4154b4e91f33438c147ee2be6c1839a783b16d34e123a8e8e04bee574908f2646ce459afad0a23c4630213a43c329a8c24e05a5fab1a801094485c3749a2915b
7
- data.tar.gz: ce31dfd096d0b953289c0b56fa0ea08f158e1d143a219a9366ee34075ac856e3fb8020bfd793f7b9bebd1f48476ae3420bef328e178dc5d60b2141568d8164c3
6
+ metadata.gz: e9ed1ef8bc67776276b6ce099d7e721ed9eb61d0e75e6a265ef58dc291e131172b5129ffe2715d5d2dd7a58034a920e8172da523be8da0e42042e2fec4d1ce01
7
+ data.tar.gz: 36ab7df0ead50f68f75b063ad41566013e3cc6cc3b23ca533a951c1b86f35358732b76e36a84d09d6a791e6707a443ed2521985d102e95e261165fe6cbda5cdf
data/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  # Stupidedi
2
- [![Build Status](https://secure.travis-ci.org/kputnam/stupidedi.png?branch=master)](http://travis-ci.org/kputnam/stupidedi) [![Dependency Status](https://gemnasium.com/irobayna/stupidedi.svg)](https://gemnasium.com/irobayna/stupidedi) [![GitHub version](https://badge.fury.io/gh/kputnam%2Fstupidedi.svg)](http://badge.fury.io/gh/kputnam%2Fstupidedi) [![Code Climate](https://codeclimate.com/github/kputnam/stupidedi.png)](https://codeclimate.com/github/kputnam/stupidedi)
2
+ [![Build Status](https://secure.travis-ci.org/kputnam/stupidedi.png?branch=master)](http://travis-ci.org/kputnam/stupidedi) [![Dependency Status](https://gemnasium.com/irobayna/stupidedi.svg)](https://gemnasium.com/irobayna/stupidedi) [![GitHub version](https://badge.fury.io/gh/kputnam%2Fstupidedi.svg)](http://badge.fury.io/gh/kputnam%2Fstupidedi) [![Code Climate](https://codeclimate.com/github/kputnam/stupidedi.png)](https://codeclimate.com/github/kputnam/stupidedi) [![Inline docs](http://inch-ci.org/github/kputnam/stupidedi.png?branch=master)](http://inch-ci.org/github/kputnam/stupidedi)
3
3
 
4
4
  ![Screenshot](https://raw.github.com/kputnam/stupidedi/master/doc/images/edi-pp.png)
5
5
 
@@ -18,6 +18,18 @@ notices, and health care claims. It is similar to XML in some ways,
18
18
  but precedes it by about 15 years; so if you think XML sucks, you
19
19
  will love to hate EDI.
20
20
 
21
+ ### Beware / Help Wanted
22
+
23
+ Stupidedi monkey patches some classes in the Ruby standard library. These
24
+ are listed in `lib/ruby`. Rails users and other ActiveSupport users have
25
+ reported problems caused by these patches, since they are unintentionally
26
+ incompatible.
27
+
28
+ There is a pull request ([72](https://github.com/kputnam/stupidedi/pull/72))
29
+ which should solve these. Please test the `refinements` branch and provide
30
+ feedback -- it imposes a requirement of Ruby 2.1+, but should otherwise be
31
+ a seemless change.
32
+
21
33
  ## What problem does it solve?
22
34
 
23
35
  Transaction set specifications can be enormous, boring, and vague.
@@ -232,7 +244,7 @@ Perform validation on a file
232
244
  require "stupidedi"
233
245
 
234
246
  # You can customize this to delegate to your own grammar definitions, if needed.
235
- config = Stupidedi::Config.default
247
+ config = Stupidedi::Config.hipaa
236
248
 
237
249
  b = Stupidedi::Builder::BuilderDsl.build(config)
238
250
 
@@ -301,7 +313,7 @@ end
301
313
  ```ruby
302
314
  require "stupidedi"
303
315
 
304
- config = Stupidedi::Config.default
316
+ config = Stupidedi::Config.hipaa
305
317
  parser = Stupidedi::Builder::StateMachine.build(config)
306
318
 
307
319
  input = if RUBY_VERSION > "1.8"
data/bin/edi-pp CHANGED
@@ -8,10 +8,7 @@ GC.disable
8
8
  # This will be auto-enabled when $stdout.tty?, but -C forces color output
9
9
  require "term/ansicolor" if ARGV.delete("-C")
10
10
 
11
- # config = Stupidedi::Config.default
12
- # config = Stupidedi::Config.contrib
13
- config = Stupidedi::Config.hipaa
14
-
11
+ config = Stupidedi::Config.contrib(Stupidedi::Config.hipaa(Stupidedi::Config.default))
15
12
  parser = Stupidedi::Builder::StateMachine.build(config)
16
13
  start = Time.now
17
14
  nondet = ARGV.delete('-N')
@@ -31,7 +28,7 @@ stop = Time.now
31
28
 
32
29
  parser.zipper.map{|z| pp z.root.node }.explain do
33
30
  # Multiple parse trees (non-deterministic state)
34
- unless nondet
31
+ unless nondet
35
32
  puts "Non-deterministic state"
36
33
  else
37
34
  puts "Non-deterministic states (#{parser.active.length}):"
@@ -49,7 +46,7 @@ begin
49
46
  a = parser.first
50
47
  b = parser.last
51
48
 
52
- a.flatmap{|a| b.flatmap{|b| a.distance(b) }}.
49
+ a.flatmap{|a1| b.flatmap{|b1| a1.distance(b1) }}.
53
50
  tap{|d| puts "#{d + 1} segments" }
54
51
  end
55
52
 
@@ -24,6 +24,10 @@ module Stupidedi
24
24
  Reader::SegmentDict.empty)
25
25
  end
26
26
 
27
+ def respond_to_missing?(name, include_private = false)
28
+ SEGMENT_ID =~ name.to_s || super
29
+ end
30
+
27
31
  def strict?
28
32
  @strict
29
33
  end
@@ -9,9 +9,9 @@ module Stupidedi
9
9
  reader = reader.read_segment
10
10
 
11
11
  while reader.defined?
12
- reader = reader.flatmap do |segment_tok, reader|
12
+ reader = reader.flatmap do |segment_tok, reader1|
13
13
  machine, reader =
14
- machine.insert(segment_tok, reader)
14
+ machine.insert(segment_tok, reader1)
15
15
 
16
16
  reader.read_segment
17
17
  end
@@ -86,8 +86,8 @@ module Stupidedi
86
86
  if element_use.simple?
87
87
  if element_use.repeatable?
88
88
  element_toks = element_tok.element_toks
89
- element_vals = element_toks.map do |element_tok|
90
- mksimple(designator, element_use, element_tok)
89
+ element_vals = element_toks.map do |element_tok1|
90
+ mksimple(designator, element_use, element_tok1)
91
91
  end
92
92
 
93
93
  mkrepeated(designator, element_use, element_vals)
@@ -97,8 +97,8 @@ module Stupidedi
97
97
  else
98
98
  if element_use.repeatable?
99
99
  element_toks = element_tok.element_toks
100
- element_vals = element_toks.map do |element_tok|
101
- mkcomposite(designator, element_use, element_tok)
100
+ element_vals = element_toks.map do |element_tok1|
101
+ mkcomposite(designator, element_use, element_tok1)
102
102
  end
103
103
 
104
104
  mkrepeated(designator, element_use, element_vals)
@@ -126,6 +126,7 @@ module Stupidedi
126
126
  x.register("004010", "SH", "856") { Stupidedi::Contrib::FortyTen::TransactionSetDefs::SH856 }
127
127
  x.register("004010", "SQ", "866") { Stupidedi::Contrib::FortyTen::TransactionSetDefs::SQ866 }
128
128
  x.register("004010", "FA", "997") { Stupidedi::Contrib::FortyTen::TransactionSetDefs::FA997 }
129
+ x.register("004010", "SC", "832") { Stupidedi::Contrib::FortyTen::TransactionSetDefs::SC832 }
129
130
 
130
131
  x.register("002001", "SH", "856") { Stupidedi::Contrib::TwoThousandOne::TransactionSetDefs::SH856 }
131
132
  x.register("002001", "PO", "830") { Stupidedi::Contrib::TwoThousandOne::TransactionSetDefs::PO830 }
@@ -134,6 +135,7 @@ module Stupidedi
134
135
  x.register("003010", "RA", "820") { Stupidedi::Contrib::ThirtyTen::TransactionSetDefs::RA820 }
135
136
  x.register("003010", "PO", "850") { Stupidedi::Contrib::ThirtyTen::TransactionSetDefs::PO850 }
136
137
  x.register("003010", "PC", "860") { Stupidedi::Contrib::ThirtyTen::TransactionSetDefs::PC860 }
138
+ x.register("003010", "PS", "830") { Stupidedi::Contrib::ThirtyTen::TransactionSetDefs::PS830 }
137
139
 
138
140
  x.register("003040", "WA", "142") { Stupidedi::Contrib::ThirtyForty::TransactionSetDefs::WA142 }
139
141
 
@@ -14,7 +14,7 @@ module Stupidedi
14
14
  autoload :RA820, "stupidedi/contrib/003010/guides/RA820"
15
15
  autoload :PO850, "stupidedi/contrib/003010/guides/PO850"
16
16
  autoload :PC860, "stupidedi/contrib/003010/guides/PC860"
17
-
17
+ autoload :PS830, "stupidedi/contrib/003010/guides/PS830"
18
18
  end
19
19
  end
20
20
  end
@@ -40,6 +40,8 @@ module Stupidedi
40
40
  b::Element(e::Required, "Shipment Method of Payment", b::Values("DE")),
41
41
  b::Element(e::Situational, "Location Qualifier", b::Values("AC")),
42
42
  b::Element(e::Situational, "Description"),
43
+ b::Element(e::NotUsed, "Unknown"),
44
+ b::Element(e::NotUsed, "Unknown"),
43
45
  b::Element(e::Situational, "Location Qualifier"),
44
46
  b::Element(e::Situational, "Description - Postal Code")),
45
47
 
@@ -66,6 +68,9 @@ module Stupidedi
66
68
 
67
69
  b::Segment(240, s::TD5, "Carrier Details (Routing Sequence/Transit Time)",
68
70
  r::Situational, d::RepeatCount.bounded(2),
71
+ b::Element(e::NotUsed, "Unknown"),
72
+ b::Element(e::NotUsed, "Unknown"),
73
+ b::Element(e::NotUsed, "Unknown"),
69
74
  b::Element(e::Required, "Transportation Method/Type Code", b::Values("A","AE","M","PG","R","RR","SE","SS")),
70
75
  b::Element(e::Required, "Routing - Carrier's Name")),
71
76
 
@@ -98,9 +103,9 @@ module Stupidedi
98
103
  r::Situational, d::RepeatCount.bounded(1000),
99
104
  b::Element(e::Required, "Free-Form Message Text"))),
100
105
 
101
- d::LoopDef.build("N1", d::RepeatCount.bounded(200),
106
+ d::LoopDef.build("N1", d::RepeatCount.bounded(1),
102
107
  b::Segment(300, s::N1, "Name",
103
- r::Situational, d::RepeatCount.bounded(1),
108
+ r::Situational, d::RepeatCount.bounded(2),
104
109
  b::Element(e::Required, "Entity Identifier Code", b::Values("BT","MP")),
105
110
  b::Element(e::Situational, "Name")),
106
111
 
@@ -0,0 +1,198 @@
1
+ module Stupidedi
2
+ module Contrib
3
+ module ThirtyTen
4
+ module Guides
5
+
6
+ b = GuideBuilder
7
+ d = Schema
8
+ r = SegmentReqs
9
+ e = ElementReqs
10
+ s = Versions::FunctionalGroups::ThirtyTen::SegmentDefs
11
+ # s = Versions::FunctionalGroups::FortyTen::SegmentDefs
12
+ t = Contrib::ThirtyTen::TransactionSetDefs
13
+ #t = Contrib::FortyTen::TransactionSetDefs
14
+ #
15
+ # 830 Planning Schedule with Release Capability
16
+ #
17
+ PS830 = b.build(t::PS830,
18
+ d::TableDef.header("Header",
19
+ b::Segment(10, s:: ST, "Transaction Set Header",
20
+ r::Required, d::RepeatCount.bounded(1),
21
+ b::Element(e::Required, "Transaction Set Identifier Code", b::Values("830")),
22
+ b::Element(e::Required, "Transaction Set Control Number")),
23
+ b::Segment(20, s::BFR, "Beginning Segment for Planning Schedule",
24
+ r::Required, d::RepeatCount.bounded(1),
25
+ b::Element(e::Required, "Transaction Set Purpose Code", b::Values("00")),
26
+ b::Element(e::Situational, "Reference Number NNA Release Period"),
27
+ b::Element(e::Situational, "Release Number"),
28
+ b::Element(e::Required, "Schedule Type Qualifier", b::Values("DL")),
29
+ b::Element(e::Required, "Schedule Quantity Qualifier", b::Values("A")),
30
+ b::Element(e::Required, "Date - Beginning Date"),
31
+ b::Element(e::Required, "Date - Ending Date"),
32
+ b::Element(e::Required, "Date - Release Create Date"))),
33
+
34
+ d::TableDef.header("Detail",
35
+ d::LoopDef.build("N1 - LOOP1", d::RepeatCount.bounded(200),
36
+ b::Segment(90, s:: N1, "Name - Nissan Analyst",
37
+ r::Situational, d::RepeatCount.bounded(1),
38
+ b::Element(e::Required, "Entity Identifier Code", b::Values("MI")),
39
+ b::Element(e::Situational, "Identification Code Qualifier", b::Values("Nissan")),
40
+ b::Element(e::Situational, "Identification Code Qualifier"),
41
+ b::Element(e::Situational, "Identification Code - Supplier Code")),
42
+ b::Segment( 140, s::PER, "Administrative Communications Contact - Nissan Release Sr Analyst",
43
+ r::Situational, d::RepeatCount.bounded(3),
44
+ b::Element(e::Required, "Contact Function Code", b::Values("OD")),
45
+ b::Element(e::Situational, "Name - PER02"),
46
+ b::Element(e::Situational, "Communication Number Qualifier", b::Values("TE")),
47
+ b::Element(e::Situational, "Communication Number"),
48
+ b::Element(e::NotUsed, "PER05"),
49
+ b::Element(e::NotUsed, "PER06"),
50
+ b::Element(e::NotUsed, "PER07"),
51
+ b::Element(e::NotUsed, "PER08"),
52
+ b::Element(e::NotUsed, "PER09"))),
53
+
54
+ d::LoopDef.build("LIN", d::RepeatCount.bounded(10000),
55
+ b::Segment( 010, s::LIN, "Item Identification",
56
+ r::Required, d::RepeatCount.bounded(1),
57
+ b::Element(e::NotUsed, "LIN01"),
58
+ b::Element(e::Required, "Product/Service ID Qualifier - LIN02", b::Values("VP")),
59
+ b::Element(e::Required, "Product/Service ID - NNA Part Number"),
60
+ b::Element(e::Situational, "Product/Service ID Qualifier - LIN04", b::Values("PO")),
61
+ b::Element(e::Situational, "Product/Service ID - NNA PO Number"),
62
+ b::Element(e::NotUsed, "LIN06"),
63
+ b::Element(e::NotUsed, "LIN07"),
64
+ b::Element(e::NotUsed, "LIN08"),
65
+ b::Element(e::NotUsed, "LIN09"),
66
+ b::Element(e::NotUsed, "LIN10"),
67
+ b::Element(e::NotUsed, "LIN11"),
68
+ b::Element(e::NotUsed, "LIN12"),
69
+ b::Element(e::NotUsed, "LIN13"),
70
+ b::Element(e::NotUsed, "LIN14"),
71
+ b::Element(e::NotUsed, "LIN15"),
72
+ b::Element(e::NotUsed, "LIN16"),
73
+ b::Element(e::NotUsed, "LIN17"),
74
+ b::Element(e::NotUsed, "LIN18"),
75
+ b::Element(e::NotUsed, "LIN19"),
76
+ b::Element(e::NotUsed, "LIN20"),
77
+ b::Element(e::NotUsed, "LIN21"),
78
+ b::Element(e::NotUsed, "LIN22"),
79
+ b::Element(e::NotUsed, "LIN23"),
80
+ b::Element(e::NotUsed, "LIN24"),
81
+ b::Element(e::NotUsed, "LIN25"),
82
+ b::Element(e::NotUsed, "LIN26"),
83
+ b::Element(e::NotUsed, "LIN27"),
84
+ b::Element(e::NotUsed, "LIN28"),
85
+ b::Element(e::NotUsed, "LIN29"),
86
+ b::Element(e::NotUsed, "LIN30"),
87
+ b::Element(e::NotUsed, "LIN31")),
88
+ b::Segment( 020, s::UIT, "Unit of Measure",
89
+ r::Required, d::RepeatCount.bounded(1),
90
+ b::Element(e::Required, "Unit or Basis for Measurement Code", b::Values("LB"))),
91
+ b::Segment( 80, s::PID, "Product/Item Description",
92
+ r::Situational, d::RepeatCount.bounded(1000),
93
+ b::Element(e::Required, "Item Description Type", b::Values("F")),
94
+ b::Element(e::Situational, "Product/Process Characteristic Code", b::Values("9B")),
95
+ b::Element(e::NotUsed, "PID03"),
96
+ b::Element(e::NotUsed, "PID04"),
97
+ b::Element(e::Situational, "Description - Part Description")),
98
+ b::Segment(90, s:: N1, "Name - Nissan Analyst",
99
+ r::Situational, d::RepeatCount.bounded(1),
100
+ b::Element(e::Required, "Entity Identifier Code", b::Values("MI")),
101
+ b::Element(e::Situational, "Identification Code Qualifier", b::Values("Nissan")),
102
+ b::Element(e::Situational, "Identification Code Qualifier"),
103
+ b::Element(e::Situational, "Identification Code - Supplier Code")),
104
+ b::Segment( 290, s::SDP, "Ship/Delivery Pattern",
105
+ r::Required, d::RepeatCount.bounded(1),
106
+ b::Element(e::Required, "Ship/Delivery or Calendar Pattern Code", b::Values("Y")),
107
+ b::Element(e::Required, "Ship/Delivery Pattern Time Code", b::Values("Y"))),
108
+
109
+ # d::LoopDef.build("NTE", d::RepeatCount.bounded(260),
110
+ # b::Segment(400, s::NTE, "Note/Special Instruction",
111
+ # r::Situational, d::RepeatCount.bounded(1),
112
+ # b::Element(e::Situational, "Note Reference Code", b::Values("GEN", "LIN")),
113
+ # b::Element(e::Situational, "Free Form Text"))),
114
+ b::Segment( 300, s::FST, "Forecast Schedule",
115
+ r::Situational, d::RepeatCount.bounded(1),
116
+ b::Element(e::Required, "Quantity"),
117
+ b::Element(e::Required, "Forecast Qualifier", b::Values("C","D")),
118
+ b::Element(e::Required, "Forecast Timing Qualifier", b::Values("D")),
119
+ b::Element(e::Required, "Date - Scheduled Usage Date"),
120
+ b::Element(e::NotUsed, "FST05"),
121
+ b::Element(e::Situational, "Date/Time Qualifier", b::Values("002")),
122
+ b::Element(e::Situational, "Time - Delivery Requested Time"),
123
+ b::Element(e::Situational, "Reference Number Qualifier", b::Values("DO")),
124
+ b::Element(e::Situational, "Reference Number - Customer Assigned Order Number")),
125
+
126
+ # d::LoopDef.build("SHP", d::RepeatCount.bounded(1),
127
+ # b::Segment( 301, s::FST, "Forecast Schedule - LAST",
128
+ # r::Situational, d::RepeatCount.bounded(1),
129
+ # b::Element(e::Required, "Quantity"),
130
+ # b::Element(e::Required, "Forecast Qualifier", b::Values("C","D")),
131
+ # b::Element(e::Required, "Forecast Timing Qualifier", b::Values("D")),
132
+ # b::Element(e::Required, "Date - Scheduled Usage Date"),
133
+ # b::Element(e::NotUsed, "FST05"),
134
+ # b::Element(e::Situational, "Date/Time Qualifier", b::Values("002")),
135
+ # b::Element(e::Situational, "Time - Delivery Requested Time"),
136
+ # b::Element(e::Situational, "Reference Number Qualifier", b::Values("DO")),
137
+ # b::Element(e::Situational, "Reference Number - Customer Assigned Order Number")),
138
+ # b::Segment(470, s::SHP, "Shipped/Received Information",
139
+ # r::Situational, d::RepeatCount.bounded(1),
140
+ # b::Element(e::Situational, "Quantity Qualifier", b::Values("02")),
141
+ # b::Element(e::Situational, "Quantity"),
142
+ # b::Element(e::Situational, "Date/Time Qualifier", b::Values("011")),
143
+ # b::Element(e::Situational, "Date"))),
144
+
145
+ b::Segment(390, s::MAN, "Marks and Numbers",
146
+ r::Situational, d::RepeatCount.bounded(10),
147
+ b::Element(e::Required, "Marks and Numbers Qualifier", b::Values("PB")),
148
+ b::Element(e::Required, "Marks and Numbers")))),
149
+
150
+ # d::LoopDef.build("FST", d::RepeatCount.bounded(1),
151
+ # b::Segment( 301, s::FST, "Forecast Schedule - LAST",
152
+ # r::Situational, d::RepeatCount.bounded(1),
153
+ # b::Element(e::Required, "Quantity"),
154
+ # b::Element(e::Required, "Forecast Qualifier", b::Values("C","D")),
155
+ # b::Element(e::Required, "Forecast Timing Qualifier", b::Values("D")),
156
+ # b::Element(e::Required, "Date - Scheduled Usage Date"),
157
+ # b::Element(e::NotUsed, "FST05"),
158
+ # b::Element(e::Situational, "Date/Time Qualifier", b::Values("002")),
159
+ # b::Element(e::Situational, "Time - Delivery Requested Time"),
160
+ # b::Element(e::Situational, "Reference Number Qualifier", b::Values("DO")),
161
+ # b::Element(e::Situational, "Reference Number - Customer Assigned Order Number")),
162
+ # b::Segment(470, s::SHP, "Shipped/Received Information",
163
+ # r::Situational, d::RepeatCount.bounded(1),
164
+ # b::Element(e::Situational, "Quantity Qualifier", b::Values("02")),
165
+ # b::Element(e::Situational, "Quantity"),
166
+ # b::Element(e::Situational, "Date/Time Qualifier", b::Values("011")),
167
+ # b::Element(e::Situational, "Date")))),
168
+
169
+ d::TableDef.header("Summary",
170
+ # b::Segment( 301, s::FST, "Forecast Schedule - LAST",
171
+ # r::Required, d::RepeatCount.bounded(1),
172
+ # b::Element(e::Required, "Quantity"),
173
+ # b::Element(e::Required, "Forecast Qualifier", b::Values("C","D")),
174
+ # b::Element(e::Required, "Forecast Timing Qualifier", b::Values("D")),
175
+ # b::Element(e::Required, "Date - Scheduled Usage Date"),
176
+ # b::Element(e::NotUsed, "FST05"),
177
+ # b::Element(e::Situational, "Date/Time Qualifier", b::Values("002")),
178
+ # b::Element(e::Situational, "Time - Delivery Requested Time"),
179
+ # b::Element(e::Situational, "Reference Number Qualifier", b::Values("DO")),
180
+ # b::Element(e::Situational, "Reference Number - Customer Assigned Order Number")),
181
+ b::Segment(010, s::CTT, "Transaction Totals",
182
+ r::Required, d::RepeatCount.bounded(1),
183
+ b::Element(e::Required, "Number of Line Items"),
184
+ b::Element(e::Situational, "Hash Total"),
185
+ b::Element(e::NotUsed, "CTT03"),
186
+ b::Element(e::NotUsed, "CTT04"),
187
+ b::Element(e::NotUsed, "CTT05"),
188
+ b::Element(e::NotUsed, "CTT06"),
189
+ b::Element(e::NotUsed, "CTT07")),
190
+ b::Segment(020, s:: SE, "Transaction Set Trailer",
191
+ r::Required, d::RepeatCount.bounded(1),
192
+ b::Element(e::Required, "Number of Included Segments"),
193
+ b::Element(e::Required, "Transaction Set Control Number"))))
194
+
195
+ end
196
+ end
197
+ end
198
+ end
@@ -24,6 +24,13 @@ module Stupidedi
24
24
  b::Element(e::Required, "Payment Method Code", b::Values("PBC")),
25
25
  b::Element(e::Required, "Monetary Amount"),
26
26
  b::Element(e::Required, "Transaction Handling Code", b::Values("I")),
27
+ b::Element(e::NotUsed, "Unknown")),
28
+ b::Element(e::NotUsed, "Unknown")),
29
+ b::Element(e::NotUsed, "Unknown")),
30
+ b::Element(e::NotUsed, "Unknown")),
31
+ b::Element(e::NotUsed, "Unknown")),
32
+ b::Element(e::NotUsed, "Unknown")),
33
+ b::Element(e::NotUsed, "Unknown")),
27
34
  b::Element(e::Situational, "Account Number - Supplier Number"),
28
35
  b::Element(e::Situational, "Effective Entry Date - Issue Date")),
29
36
  b::Segment(50, s::REF, "Reference Numbers",
@@ -15,6 +15,9 @@ module Stupidedi
15
15
  autoload :PC860, # Purchase Order Change
16
16
  "stupidedi/contrib/003010/transaction_set_defs/PC860"
17
17
 
18
+ autoload :PS830, # Planning Schedule with Release Capability
19
+ "stupidedi/contrib/003010/transaction_set_defs/PS830"
20
+
18
21
  end
19
22
  end
20
23
  end
@@ -21,7 +21,7 @@ module Stupidedi
21
21
  s::MSG.use( 290, r::Optional, d::RepeatCount.bounded(1000))),
22
22
 
23
23
  d::LoopDef.build("N1", d::RepeatCount.bounded(1),
24
- s:: N1.use( 300, r::Optional, d::RepeatCount.bounded(1)),
24
+ s:: N1.use( 300, r::Optional, d::RepeatCount.bounded(2)),
25
25
  s:: N2.use( 310, r::Optional, d::RepeatCount.bounded(1)),
26
26
  s:: N3.use( 320, r::Optional, d::RepeatCount.bounded(1)),
27
27
  s:: N4.use( 330, r::Optional, d::RepeatCount.bounded(1)))),
@@ -0,0 +1,56 @@
1
+ module Stupidedi
2
+ module Contrib
3
+ module ThirtyTen
4
+ module TransactionSetDefs
5
+ d = Schema
6
+ r = SegmentReqs
7
+ s = SegmentDefs
8
+
9
+ PS830 = d::TransactionSetDef.build("PS", "830", "Planning Schedule with Release Capability",
10
+
11
+ d::TableDef.header("Table 1 - Header",
12
+ s:: ST.use( 10, r::Mandatory, d::RepeatCount.bounded(1)),
13
+ s::BFR.use( 20, r::Mandatory, d::RepeatCount.bounded(1)),
14
+
15
+ d::LoopDef.build("N1", d::RepeatCount.bounded(200),
16
+ s:: N1.use( 90, r::Optional, d::RepeatCount.bounded(1)),
17
+ s::PER.use( 140, r::Optional, d::RepeatCount.bounded(3)))),
18
+
19
+ d::TableDef.detail("Table 2 - Detail",
20
+ d::LoopDef.build("LIN", d::RepeatCount.bounded(10000),
21
+ s::LIN.use( 010, r::Mandatory, d::RepeatCount.bounded(1)),
22
+ s::UIT.use( 020, r::Mandatory, d::RepeatCount.bounded(1)),
23
+ s::PID.use( 80, r::Optional, d::RepeatCount.bounded(1)),
24
+ s:: N1.use( 90, r::Optional, d::RepeatCount.bounded(1)),
25
+ s::MAN.use( 280, r::Optional, d::RepeatCount.bounded(10)),
26
+
27
+ # d::LoopDef.build("FST", d::RepeatCount.bounded(10000),
28
+ # s::FST.use( 410, r::Optional, d::RepeatCount.bounded(1)),
29
+ # s::NTE.use( 400, r::Optional, d::RepeatCount.bounded(100))),
30
+
31
+ d::LoopDef.build("SDP", d::RepeatCount.bounded(260),
32
+ s::SDP.use( 290, r::Optional, d::RepeatCount.bounded(1)),
33
+ # d::LoopDef.build("NTE", d::RepeatCount.unbounded,
34
+ # s::NTE.use( 400, r::Optional, d::RepeatCount.unbounded)),
35
+ s::FST.use( 410, r::Optional, d::RepeatCount.unbounded)),
36
+
37
+ d::LoopDef.build("SHP", d::RepeatCount.bounded(25),
38
+ s::SHP.use( 480, r::Optional, d::RepeatCount.bounded(1)),
39
+ s::REF.use( 460, r::Optional, d::RepeatCount.bounded(5))))),
40
+
41
+ # s::MAN.use( 390, r::Optional, d::RepeatCount.bounded(10)))),
42
+
43
+ # d::LoopDef.build("FST", d::RepeatCount.bounded(1),
44
+ # # s::FST.use( 301, r::Optional, d::RepeatCount.bounded(1)),
45
+ # s::SHP.use( 470, r::Optional, d::RepeatCount.bounded(1)))),
46
+
47
+ d::TableDef.summary("Table 3 - Summary",
48
+ # s::FST.use(301, r::Mandatory, d::RepeatCount.bounded(1)),
49
+ s::CTT.use(010, r::Mandatory, d::RepeatCount.bounded(1)),
50
+ s:: SE.use(020, r::Mandatory, d::RepeatCount.bounded(1))))
51
+
52
+
53
+ end
54
+ end
55
+ end
56
+ end