File Coverage

blib/lib/Business/EDI/Composite.pm
Criterion Covered Total %
statement 45 78 57.6
branch 13 38 34.2
condition n/a
subroutine 9 14 64.2
pod 4 10 40.0
total 71 140 50.7


line stmt bran cond sub pod time code
1             package Business::EDI::Composite;
2              
3 15     15   98 use base 'Business::EDI';
  15         30  
  15         1639  
4              
5 15     15   92 use strict; use warnings;
  15     15   32  
  15         654  
  15         89  
  15         30  
  15         437  
6 15     15   76 use Carp;
  15         27  
  15         540750  
7              
8             my $VERSION = 0.03;
9             my $debug;
10              
11             my $guts = {
12              
13             # These are from the EDI SYNTAX specs
14             'S001' => { label => 'SYNTAX IDENTIFIER', desc => 'SYNTAX IDENTIFIER', parts => {
15             '0001' => { pos => '010', def => 'a4' },
16             '0002' => { pos => '020', def => 'an1' },
17             '0080' => { pos => '030', def => 'an..6' },
18             '0133' => { pos => '040', def => 'an..3' },
19             '0076' => { pos => '050', def => 'an2' },
20             }},
21             'S002' => { label => 'INTERCHANGE SENDER', desc => 'INTERCHANGE SENDER', parts => {
22             '0004' => { pos => '010', def => 'an..35' },
23             '0007' => { pos => '020', def => 'an..4' },
24             '0008' => { pos => '030', def => 'an..35' },
25             '0042' => { pos => '040', def => 'an..35' },
26             }},
27             'S003' => { label => 'INTERCHANGE RECIPIENT', desc => 'INTERCHANGE RECIPIENT', parts => {
28             '0010' => { pos => '010', def => 'an..35' },
29             '0007' => { pos => '020', def => 'an..4' },
30             '0014' => { pos => '030', def => 'an..35' },
31             '0046' => { pos => '040', def => 'an..35' },
32             }},
33             'S004' => { label => 'DATE AND TIME OF PREPARATION', desc => 'DATE AND TIME OF PREPARATION', parts => {
34             '0017' => { pos => '010', def => 'n8' },
35             '0019' => { pos => '020', def => 'n4' },
36             }},
37             'S005' => { label => 'RECIPIENT REFERENCE/PASSWORD DETAILS', desc => 'RECIPIENT REFERENCE/PASSWORD DETAILS', parts => {
38             '0022' => { pos => '010', def => 'an..14' },
39             '0025' => { pos => '020', def => 'an2' },
40             }},
41             'S006' => { label => 'APPLICATION SENDER IDENTIFICATION', desc => 'APPLICATION SENDER IDENTIFICATION', parts => {
42             '0040' => { pos => '010', def => 'an..35' },
43             '0007' => { pos => '020', def => 'an..4' },
44             }},
45             'S007' => { label => 'APPLICATION RECIPIENT IDENTIFICATION', desc => 'APPLICATION RECIPIENT IDENTIFICATION', parts => {
46             '0044' => { pos => '010', def => 'an..35' },
47             '0007' => { pos => '020', def => 'an..4' },
48             }},
49             'S008' => { label => 'MESSAGE VERSION', desc => 'MESSAGE VERSION', parts => {
50             '0052' => { pos => '010', def => 'an..3' },
51             '0054' => { pos => '020', def => 'an..3' },
52             '0057' => { pos => '030', def => 'an..6' },
53             }},
54             'S009' => { label => 'MESSAGE IDENTIFIER', desc => 'MESSAGE IDENTIFIER', parts => {
55             '0065' => { pos => '010', def => 'an..6' },
56             '0052' => { pos => '020', def => 'an..3' },
57             '0054' => { pos => '030', def => 'an..3' },
58             '0051' => { pos => '040', def => 'an..3' },
59             '0057' => { pos => '050', def => 'an..6' },
60             '0110' => { pos => '060', def => 'an..6' },
61             '0113' => { pos => '070', def => 'an..6' },
62             }},
63             'S010' => { label => 'STATUS OF THE TRANSFER', desc => 'STATUS OF THE TRANSFER', parts => {
64             '0070' => { pos => '010', def => 'n..2' },
65             '0073' => { pos => '020', def => 'a1' },
66             }},
67             'S011' => { label => 'DATA ELEMENT IDENTIFICATION', desc => 'DATA ELEMENT IDENTIFICATION', parts => {
68             '0098' => { pos => '010', def => 'n..3' },
69             '0104' => { pos => '020', def => 'n..3' },
70             '0136' => { pos => '030', def => 'n..6' },
71             }},
72             'S016' => { label => 'MESSAGE SUBSET IDENTIFICATION', desc => 'MESSAGE SUBSET IDENTIFICATION', parts => {
73             '0115' => { pos => '010', def => 'an..14' },
74             '0116' => { pos => '020', def => 'an..3' },
75             '0118' => { pos => '030', def => 'an..3' },
76             '0051' => { pos => '040', def => 'an..3' },
77             }},
78             'S017' => { label => 'MESSAGE IMPLEMENTATION GUIDELINE IDENTIFICATION', desc => 'MESSAGE IMPLEMENTATION GUIDELINE IDENTIFICATION', parts => {
79             '0121' => { pos => '010', def => 'an..14' },
80             '0122' => { pos => '020', def => 'an..3' },
81             '0124' => { pos => '030', def => 'an..3' },
82             '0051' => { pos => '040', def => 'an..3' },
83             }},
84             'S018' => { label => 'SCENARIO IDENTIFICATION', desc => 'SCENARIO IDENTIFICATION', parts => {
85             '0127' => { pos => '010', def => 'an..14' },
86             '0128' => { pos => '020', def => 'an..3' },
87             '0130' => { pos => '030', def => 'an..3' },
88             '0051' => { pos => '040', def => 'an..3' },
89             }},
90             'S020' => { label => 'REFERENCE IDENTIFICATION', desc => 'REFERENCE IDENTIFICATION', parts => {
91             '0813' => { pos => '010', def => 'an..3' },
92             '0802' => { pos => '020', def => 'an..35' },
93             }},
94             'S021' => { label => 'OBJECT TYPE IDENTIFICATION', desc => 'OBJECT TYPE IDENTIFICATION', parts => {
95             '0805' => { pos => '010', def => 'an..3' },
96             '0809' => { pos => '020', def => 'an..256' },
97             '0808' => { pos => '030', def => 'an..256' },
98             '0051' => { pos => '040', def => 'an..3' },
99             }},
100             'S022' => { label => 'STATUS OF THE OBJECT', desc => 'STATUS OF THE OBJECT', parts => {
101             '0810' => { pos => '010', def => 'n..18' },
102             '0814' => { pos => '020', def => 'n..3' },
103             '0070' => { pos => '030', def => 'n..2' },
104             '0073' => { pos => '040', def => 'a1' },
105             }},
106             'S300' => { label => 'DATE AND/OR TIME OF INITIATION', desc => 'DATE AND/OR TIME OF INITIATION', parts => {
107             '0338' => { pos => '010', def => 'n..8' },
108             '0314' => { pos => '020', def => 'an..15' },
109             '0336' => { pos => '030', def => 'n4' },
110             }},
111             'S301' => { label => 'STATUS OF TRANSFER - INTERACTIVE', desc => 'STATUS OF TRANSFER - INTERACTIVE', parts => {
112             '0320' => { pos => '010', def => 'n..6' },
113             '0323' => { pos => '020', def => 'a1' },
114             '0325' => { pos => '030', def => 'a1' },
115             }},
116             'S302' => { label => 'DIALOGUE REFERENCE', desc => 'DIALOGUE REFERENCE', parts => {
117             '0300' => { pos => '010', def => 'an..35' },
118             '0303' => { pos => '020', def => 'an..35' },
119             '0051' => { pos => '030', def => 'an..3' },
120             '0304' => { pos => '040', def => 'an..35' },
121             }},
122             'S303' => { label => 'TRANSACTION REFERENCE', desc => 'TRANSACTION REFERENCE', parts => {
123             '0306' => { pos => '010', def => 'an..35' },
124             '0303' => { pos => '020', def => 'an..35' },
125             '0051' => { pos => '030', def => 'an..3' },
126             }},
127             'S305' => { label => 'DIALOGUE IDENTIFICATION', desc => 'DIALOGUE IDENTIFICATION', parts => {
128             '0311' => { pos => '010', def => 'an..14' },
129             '0342' => { pos => '020', def => 'an..3' },
130             '0344' => { pos => '030', def => 'an..3' },
131             '0051' => { pos => '040', def => 'an..3' },
132             }},
133             'S306' => { label => 'INTERACTIVE MESSAGE IDENTIFIER', desc => 'INTERACTIVE MESSAGE IDENTIFIER', parts => {
134             '0065' => { pos => '010', def => 'an..6' },
135             '0052' => { pos => '020', def => 'an..3' },
136             '0054' => { pos => '030', def => 'an..3' },
137             '0113' => { pos => '040', def => 'an..6' },
138             '0051' => { pos => '050', def => 'an..3' },
139             '0057' => { pos => '060', def => 'an..6' },
140             }},
141             'S307' => { label => 'STATUS INFORMATION', desc => 'STATUS INFORMATION', parts => {
142             '0333' => { pos => '010', def => 'an..3' },
143             '0332' => { pos => '020', def => 'an..70' },
144             '0335' => { pos => '030', def => 'an..3' },
145             }},
146             'S500' => { label => 'SECURITY IDENTIFICATION DETAILS', desc => 'SECURITY IDENTIFICATION DETAILS', parts => {
147             '0577' => { pos => '010', def => 'an..3' },
148             '0538' => { pos => '020', def => 'an..35' },
149             '0511' => { pos => '030', def => 'an..1024' },
150             '0513' => { pos => '040', def => 'an..3' },
151             '0515' => { pos => '050', def => 'an..3' },
152             '0586' => { pos => '060', def => 'an..35' },
153             '0586' => { pos => '070', def => 'an..35' },
154             '0586' => { pos => '080', def => 'an..35' },
155             }},
156             'S501' => { label => 'SECURITY DATE AND TIME', desc => 'SECURITY DATE AND TIME', parts => {
157             '0517' => { pos => '010', def => 'an..3' },
158             '0338' => { pos => '020', def => 'n..8' },
159             '0314' => { pos => '030', def => 'an..15' },
160             '0336' => { pos => '040', def => 'n4' },
161             }},
162             'S502' => { label => 'SECURITY ALGORITHM', desc => 'SECURITY ALGORITHM', parts => {
163             '0523' => { pos => '010', def => 'an..3' },
164             '0525' => { pos => '020', def => 'an..3' },
165             '0533' => { pos => '030', def => 'an..3' },
166             '0527' => { pos => '040', def => 'an..3' },
167             '0529' => { pos => '050', def => 'an..3' },
168             '0591' => { pos => '060', def => 'an..3' },
169             '0601' => { pos => '070', def => 'an..3' },
170             }},
171             'S503' => { label => 'ALGORITHM PARAMETER', desc => 'ALGORITHM PARAMETER', parts => {
172             '0531' => { pos => '010', def => 'an..3' },
173             '0554' => { pos => '020', def => 'an..512' },
174             }},
175             'S504' => { label => 'LIST PARAMETER', desc => 'LIST PARAMETER', parts => {
176             '0575' => { pos => '010', def => 'an..3' },
177             '0558' => { pos => '020', def => 'an..70' },
178             }},
179             'S505' => { label => 'SERVICE CHARACTER FOR SIGNATURE', desc => 'SERVICE CHARACTER FOR SIGNATURE', parts => {
180             '0551' => { pos => '010', def => 'an..3' },
181             '0548' => { pos => '020', def => 'an..4' },
182             }},
183             'S508' => { label => 'VALIDATION RESULT', desc => 'VALIDATION RESULT', parts => {
184             '0563' => { pos => '010', def => 'an..3' },
185             '0560' => { pos => '020', def => 'an..1024' },
186             }},
187              
188              
189             # The rest are from regular EDI specs
190              
191             'C001' => { label => 'TRANSPORT MEANS', desc => 'Code and/or name identifying the type of means of transport.', parts =>{
192             8179 => { pos => '010', def => 'an..8' , },
193             1131 => { pos => '020', def => 'an..17', },
194             3055 => { pos => '030', def => 'an..3' , },
195             8178 => { pos => '040', def => 'an..17', },
196             }},
197             'C002' => { label => 'DOCUMENT/MESSAGE NAME', desc => 'Identification of a type of document/message by code or name. Code preferred.', parts =>{
198             1001 => { pos => '010', def => 'an..3' , },
199             1131 => { pos => '020', def => 'an..17', },
200             3055 => { pos => '030', def => 'an..3' , },
201             1000 => { pos => '040', def => 'an..35', },
202             }},
203             'C004' => { label => 'EVENT CATEGORY', desc => 'To specify the event category.', parts =>{
204             9637 => { pos => '010', def => 'an..3' , },
205             1131 => { pos => '020', def => 'an..17', },
206             3055 => { pos => '030', def => 'an..3' , },
207             9636 => { pos => '040', def => 'an..70', },
208             }},
209             'C008' => { label => 'MONETARY AMOUNT FUNCTION DETAIL', desc => 'To provide the detail of a monetary amount function.', parts =>{
210             5105 => { pos => '010', def => 'an..17', },
211             1131 => { pos => '020', def => 'an..17', },
212             3055 => { pos => '030', def => 'an..3' , },
213             5104 => { pos => '040', def => 'an..70', },
214             }},
215             'C009' => { label => 'INFORMATION CATEGORY', desc => 'To specify the category of information.', parts =>{
216             9615 => { pos => '010', def => 'an..3' , },
217             1131 => { pos => '020', def => 'an..17', },
218             3055 => { pos => '030', def => 'an..3' , },
219             9614 => { pos => '040', def => 'an..70', },
220             }},
221             'C010' => { label => 'INFORMATION TYPE', desc => 'To specify the type of information.', parts =>{
222             4473 => { pos => '010', def => 'an..4' , },
223             1131 => { pos => '020', def => 'an..17', },
224             3055 => { pos => '030', def => 'an..3' , },
225             4472 => { pos => '040', def => 'an..35', },
226             }},
227             'C011' => { label => 'INFORMATION DETAIL', desc => 'To provide the information details.', parts =>{
228             9617 => { pos => '010', def => 'an..17', },
229             1131 => { pos => '020', def => 'an..17', },
230             3055 => { pos => '030', def => 'an..3' , },
231             9616 => { pos => '040', def => 'an..256', },
232             }},
233             'C012' => { label => 'PROCESSING INDICATOR', desc => 'Identification of the processing indicator.', parts =>{
234             7365 => { pos => '010', def => 'an..3' , },
235             1131 => { pos => '020', def => 'an..17', },
236             3055 => { pos => '030', def => 'an..3' , },
237             7364 => { pos => '040', def => 'an..35', },
238             }},
239             'C019' => { label => 'PAYMENT TERMS', desc => 'Terms of payment information.', parts =>{
240             4277 => { pos => '010', def => 'an..17', },
241             1131 => { pos => '020', def => 'an..17', },
242             3055 => { pos => '030', def => 'an..3' , },
243             4276 => { pos => '040', def => 'an..35', },
244             }},
245             'C030' => { label => 'EVENT TYPE', desc => 'To specify the type of event.', parts =>{
246             9171 => { pos => '010', def => 'an..3' , },
247             1131 => { pos => '020', def => 'an..17', },
248             3055 => { pos => '030', def => 'an..3' , },
249             9170 => { pos => '040', def => 'an..70', },
250             }},
251             'C040' => { label => 'CARRIER', desc => 'Identification of a carrier by code and/or by name. Code preferred.', parts =>{
252             3127 => { pos => '010', def => 'an..17', },
253             1131 => { pos => '020', def => 'an..17', },
254             3055 => { pos => '030', def => 'an..3' , },
255             3126 => { pos => '040', def => 'an..35', },
256             }},
257             'C042' => { label => 'NATIONALITY DETAILS', desc => 'To specify a nationality.', parts =>{
258             3293 => { pos => '010', def => 'an..3' , },
259             1131 => { pos => '020', def => 'an..17', },
260             3055 => { pos => '030', def => 'an..3' , },
261             3292 => { pos => '040', def => 'a..35' , },
262             }},
263             'C045' => { label => 'BILL LEVEL IDENTIFICATION', desc => 'A sequenced collection of facetted codes used for multiple indexing purposes.', parts =>{
264             7436 => { pos => '010', def => 'an..17', },
265             7438 => { pos => '020', def => 'an..17', },
266             7440 => { pos => '030', def => 'an..17', },
267             7442 => { pos => '040', def => 'an..17', },
268             7444 => { pos => '050', def => 'an..17', },
269             7446 => { pos => '060', def => 'an..17', },
270             }},
271             'C049' => { label => 'REMUNERATION TYPE IDENTIFICATION', desc => 'Identification of the type of a remuneration.', parts =>{
272             5315 => { pos => '010', def => 'an..3' , },
273             1131 => { pos => '020', def => 'an..17', },
274             3055 => { pos => '030', def => 'an..3' , },
275             5314 => { pos => '040', def => 'an..35', },
276             5314 => { pos => '050', def => 'an..35', },
277             }},
278             'C056' => { label => 'CONTACT DETAILS', desc => 'Code and/or name of a contact such as a department or employee. Code preferred.', parts =>{
279             3413 => { pos => '010', def => 'an..17', },
280             3412 => { pos => '020', def => 'an..256', },
281             }},
282             'C058' => { label => 'NAME AND ADDRESS', desc => 'Unstructured name and address: one to five lines.', parts =>{
283             3124 => { pos => '010', def => 'an..35', mandatory => 1, },
284             3124 => { pos => '020', def => 'an..35', },
285             3124 => { pos => '030', def => 'an..35', },
286             3124 => { pos => '040', def => 'an..35', },
287             3124 => { pos => '050', def => 'an..35', },
288             }},
289             'C059' => { label => 'STREET', desc => 'Street address and/or PO Box number in a structured address: one to four lines.', parts =>{
290             3042 => { pos => '010', def => 'an..35', mandatory => 1, },
291             3042 => { pos => '020', def => 'an..35', },
292             3042 => { pos => '030', def => 'an..35', },
293             3042 => { pos => '040', def => 'an..35', },
294             }},
295             'C063' => { label => 'EVENT IDENTIFICATION', desc => 'To identify an event.', parts =>{
296             9173 => { pos => '010', def => 'an..35', },
297             1131 => { pos => '020', def => 'an..17', },
298             3055 => { pos => '030', def => 'an..3' , },
299             9172 => { pos => '040', def => 'an..256', },
300             }},
301             'C076' => { label => 'COMMUNICATION CONTACT', desc => 'Communication number of a department or employee in a specified channel.', parts =>{
302             3148 => { pos => '010', def => 'an..512', mandatory => 1, },
303             3155 => { pos => '020', def => 'an..3' , mandatory => 1, },
304             }},
305             'C077' => { label => 'FILE IDENTIFICATION', desc => 'To identify a file.', parts =>{
306             1508 => { pos => '010', def => 'an..35', },
307             7008 => { pos => '020', def => 'an..256', },
308             }},
309             'C078' => { label => 'ACCOUNT HOLDER IDENTIFICATION', desc => 'Identification of an account holder by account number and/or account holder name in one or two lines. Number preferred.', parts =>{
310             3194 => { pos => '010', def => 'an..35', },
311             3192 => { pos => '020', def => 'an..35', },
312             3192 => { pos => '030', def => 'an..35', },
313             6345 => { pos => '040', def => 'an..3' , },
314             }},
315             'C079' => { label => 'COMPUTER ENVIRONMENT IDENTIFICATION', desc => 'To identify parts of a computer environment.', parts =>{
316             1511 => { pos => '010', def => 'an..3' , },
317             1131 => { pos => '020', def => 'an..17', },
318             3055 => { pos => '030', def => 'an..3' , },
319             1510 => { pos => '040', def => 'an..35', },
320             1056 => { pos => '050', def => 'an..9' , },
321             1058 => { pos => '060', def => 'an..9' , },
322             7402 => { pos => '070', def => 'an..35', },
323             }},
324             'C080' => { label => 'PARTY NAME', desc => 'Identification of a transaction party by name, one to five lines. Party name may be formatted.', parts =>{
325             3036 => { pos => '010', def => 'an..70', mandatory => 1, },
326             3036 => { pos => '020', def => 'an..70', },
327             3036 => { pos => '030', def => 'an..70', },
328             3036 => { pos => '040', def => 'an..70', },
329             3036 => { pos => '050', def => 'an..70', },
330             3045 => { pos => '060', def => 'an..3' , },
331             }},
332             'C082' => { label => 'PARTY IDENTIFICATION DETAILS', desc => 'Identification of a transaction party by code.', parts =>{
333             3039 => { pos => '010', def => 'an..35', mandatory => 1, },
334             1131 => { pos => '020', def => 'an..17', },
335             3055 => { pos => '030', def => 'an..3' , },
336             }},
337             'C085' => { label => 'MARITAL STATUS DETAILS', desc => 'To specify the marital status of a person.', parts =>{
338             3479 => { pos => '010', def => 'an..3' , },
339             1131 => { pos => '020', def => 'an..17', },
340             3055 => { pos => '030', def => 'an..3' , },
341             3478 => { pos => '040', def => 'an..35', },
342             }},
343             'C088' => { label => 'INSTITUTION IDENTIFICATION', desc => 'Identification of a financial institution by code branch number, or name and name of place. Code or branch number preferred.', parts =>{
344             3433 => { pos => '010', def => 'an..11', },
345             1131 => { pos => '020', def => 'an..17', },
346             3055 => { pos => '030', def => 'an..3' , },
347             3434 => { pos => '040', def => 'an..17', },
348             1131 => { pos => '050', def => 'an..17', },
349             3055 => { pos => '060', def => 'an..3' , },
350             3432 => { pos => '070', def => 'an..70', },
351             3436 => { pos => '080', def => 'an..70', },
352             }},
353             'C090' => { label => 'ADDRESS DETAILS', desc => 'To specify the details of an address.', parts =>{
354             3477 => { pos => '010', def => 'an..3' , mandatory => 1, },
355             3286 => { pos => '020', def => 'an..70', mandatory => 1, },
356             3286 => { pos => '030', def => 'an..70', },
357             3286 => { pos => '040', def => 'an..70', },
358             3286 => { pos => '050', def => 'an..70', },
359             3286 => { pos => '060', def => 'an..70', },
360             }},
361             'C099' => { label => 'FILE DETAILS', desc => 'To define details relevant to a file.', parts =>{
362             1516 => { pos => '010', def => 'an..17', mandatory => 1, },
363             1056 => { pos => '020', def => 'an..9' , },
364             1503 => { pos => '030', def => 'an..3' , },
365             1502 => { pos => '040', def => 'an..35', },
366             }},
367             'C100' => { label => 'TERMS OF DELIVERY OR TRANSPORT', desc => 'Terms of delivery or transport code from a specified source.', parts =>{
368             4053 => { pos => '010', def => 'an..3' , },
369             1131 => { pos => '020', def => 'an..17', },
370             3055 => { pos => '030', def => 'an..3' , },
371             4052 => { pos => '040', def => 'an..70', },
372             4052 => { pos => '050', def => 'an..70', },
373             }},
374             'C101' => { label => 'RELIGION DETAILS', desc => 'To specify the religion of a person.', parts =>{
375             3483 => { pos => '010', def => 'an..3' , },
376             1131 => { pos => '020', def => 'an..17', },
377             3055 => { pos => '030', def => 'an..3' , },
378             3482 => { pos => '040', def => 'an..35', },
379             }},
380             'C106' => { label => 'DOCUMENT/MESSAGE IDENTIFICATION', desc => 'Identification of a document/message by its number and eventually its version or revision.', parts =>{
381             1004 => { pos => '010', def => 'an..70', },
382             1056 => { pos => '020', def => 'an..9' , },
383             1060 => { pos => '030', def => 'an..6' , },
384             }},
385             'C107' => { label => 'TEXT REFERENCE', desc => 'Coded reference to a standard text and its source.', parts =>{
386             4441 => { pos => '010', def => 'an..17', mandatory => 1, },
387             1131 => { pos => '020', def => 'an..17', },
388             3055 => { pos => '030', def => 'an..3' , },
389             }},
390             'C108' => { label => 'TEXT LITERAL', desc => 'Free text; one to five lines.', parts =>{
391             4440 => { pos => '010', def => 'an..512', mandatory => 1, },
392             4440 => { pos => '020', def => 'an..512', },
393             4440 => { pos => '030', def => 'an..512', },
394             4440 => { pos => '040', def => 'an..512', },
395             4440 => { pos => '050', def => 'an..512', },
396             }},
397             'C128' => { label => 'RATE DETAILS', desc => 'Rate per unit and rate basis.', parts =>{
398             5419 => { pos => '010', def => 'an..3' , mandatory => 1, },
399             5420 => { pos => '020', def => 'n..15' , mandatory => 1, },
400             5284 => { pos => '030', def => 'n..9' , },
401             6411 => { pos => '040', def => 'an..8' , },
402             }},
403             'C138' => { label => 'PRICE MULTIPLIER INFORMATION', desc => 'Price multiplier and its identification.', parts =>{
404             5394 => { pos => '010', def => 'n..12' , mandatory => 1, },
405             5393 => { pos => '020', def => 'an..3' , },
406             }},
407             'C174' => { label => 'VALUE/RANGE', desc => 'Measurement value and relevant minimum and maximum values of the measurement range.', parts =>{
408             6411 => { pos => '010', def => 'an..8' , mandatory => 1, },
409             6314 => { pos => '020', def => 'an..18', },
410             6162 => { pos => '030', def => 'n..18' , },
411             6152 => { pos => '040', def => 'n..18' , },
412             6432 => { pos => '050', def => 'n..2' , },
413             }},
414             'C186' => { label => 'QUANTITY DETAILS', desc => 'Quantity information in a transaction, qualified when relevant.', parts =>{
415             6063 => { pos => '010', def => 'an..3' , mandatory => 1, },
416             6060 => { pos => '020', def => 'an..35', mandatory => 1, },
417             6411 => { pos => '030', def => 'an..8' , },
418             }},
419             'C200' => { label => 'CHARGE', desc => 'Identification of a charge by code and/or by name.', parts =>{
420             8023 => { pos => '010', def => 'an..17', },
421             1131 => { pos => '020', def => 'an..17', },
422             3055 => { pos => '030', def => 'an..3' , },
423             8022 => { pos => '040', def => 'an..26', },
424             4237 => { pos => '050', def => 'an..3' , },
425             7140 => { pos => '060', def => 'an..35', },
426             }},
427             'C202' => { label => 'PACKAGE TYPE', desc => 'Type of package by name or by code from a specified source.', parts =>{
428             7065 => { pos => '010', def => 'an..17', },
429             1131 => { pos => '020', def => 'an..17', },
430             3055 => { pos => '030', def => 'an..3' , },
431             7064 => { pos => '040', def => 'an..35', },
432             }},
433             'C203' => { label => 'RATE/TARIFF CLASS', desc => 'Identification of the applicable rate/tariff class.', parts =>{
434             5243 => { pos => '010', def => 'an..9' , mandatory => 1, },
435             1131 => { pos => '020', def => 'an..17', },
436             3055 => { pos => '030', def => 'an..3' , },
437             5242 => { pos => '040', def => 'an..35', },
438             5275 => { pos => '050', def => 'an..6' , },
439             1131 => { pos => '060', def => 'an..17', },
440             3055 => { pos => '070', def => 'an..3' , },
441             5275 => { pos => '080', def => 'an..6' , },
442             1131 => { pos => '090', def => 'an..17', },
443             3055 => { pos => '100', def => 'an..3' , },
444             }},
445             'C205' => { label => 'HAZARD CODE', desc => 'The identification of the dangerous goods in code.', parts =>{
446             8351 => { pos => '010', def => 'an..7' , mandatory => 1, },
447             8078 => { pos => '020', def => 'an..7' , },
448             8092 => { pos => '030', def => 'an..10', },
449             }},
450             'C206' => { label => 'IDENTIFICATION NUMBER', desc => 'The identification of an object.', parts =>{
451             7402 => { pos => '010', def => 'an..35', mandatory => 1, },
452             7405 => { pos => '020', def => 'an..3' , },
453             4405 => { pos => '030', def => 'an..3' , },
454             }},
455             'C208' => { label => 'IDENTITY NUMBER RANGE', desc => 'Goods item identification numbers, start and end of consecutively numbered range.', parts =>{
456             7402 => { pos => '010', def => 'an..35', mandatory => 1, },
457             7402 => { pos => '020', def => 'an..35', },
458             }},
459             'C210' => { label => 'MARKS & LABELS', desc => 'Shipping marks on packages in free text; one to ten lines.', parts =>{
460             7102 => { pos => '010', def => 'an..35', mandatory => 1, },
461             7102 => { pos => '020', def => 'an..35', },
462             7102 => { pos => '030', def => 'an..35', },
463             7102 => { pos => '040', def => 'an..35', },
464             7102 => { pos => '050', def => 'an..35', },
465             7102 => { pos => '060', def => 'an..35', },
466             7102 => { pos => '070', def => 'an..35', },
467             7102 => { pos => '080', def => 'an..35', },
468             7102 => { pos => '090', def => 'an..35', },
469             7102 => { pos => '100', def => 'an..35', },
470             }},
471             'C211' => { label => 'DIMENSIONS', desc => 'Specification of the dimensions of a transportable unit.', parts =>{
472             6411 => { pos => '010', def => 'an..8' , mandatory => 1, },
473             6168 => { pos => '020', def => 'n..15' , },
474             6140 => { pos => '030', def => 'n..15' , },
475             6008 => { pos => '040', def => 'n..15' , },
476             }},
477             'C212' => { label => 'ITEM NUMBER IDENTIFICATION', desc => 'Goods identification for a specified source.', parts =>{
478             7140 => { pos => '010', def => 'an..35', },
479             7143 => { pos => '020', def => 'an..3' , },
480             1131 => { pos => '030', def => 'an..17', },
481             3055 => { pos => '040', def => 'an..3' , },
482             }},
483             'C213' => { label => 'NUMBER AND TYPE OF PACKAGES', desc => 'Number and type of individual parts of a shipment.', parts =>{
484             7224 => { pos => '010', def => 'n..8' , },
485             7065 => { pos => '020', def => 'an..17', },
486             1131 => { pos => '030', def => 'an..17', },
487             3055 => { pos => '040', def => 'an..3' , },
488             7064 => { pos => '050', def => 'an..35', },
489             7233 => { pos => '060', def => 'an..3' , },
490             }},
491             'C214' => { label => 'SPECIAL SERVICES IDENTIFICATION', desc => 'Identification of a special service by a code from a specified source or by description.', parts =>{
492             7161 => { pos => '010', def => 'an..3' , },
493             1131 => { pos => '020', def => 'an..17', },
494             3055 => { pos => '030', def => 'an..3' , },
495             7160 => { pos => '040', def => 'an..35', },
496             7160 => { pos => '050', def => 'an..35', },
497             }},
498             'C215' => { label => 'SEAL ISSUER', desc => 'Identification of the issuer of a seal on equipment either by code or by name.', parts =>{
499             9303 => { pos => '010', def => 'an..3' , },
500             1131 => { pos => '020', def => 'an..17', },
501             3055 => { pos => '030', def => 'an..3' , },
502             9302 => { pos => '040', def => 'an..35', },
503             }},
504             'C218' => { label => 'HAZARDOUS MATERIAL', desc => 'To specify a hazardous material.', parts =>{
505             7419 => { pos => '010', def => 'an..7' , },
506             1131 => { pos => '020', def => 'an..17', },
507             3055 => { pos => '030', def => 'an..3' , },
508             7418 => { pos => '040', def => 'an..35', },
509             }},
510             'C219' => { label => 'MOVEMENT TYPE', desc => 'Description of type of service for movement of cargo.', parts =>{
511             8335 => { pos => '010', def => 'an..3' , },
512             8334 => { pos => '020', def => 'an..35', },
513             }},
514             'C220' => { label => 'MODE OF TRANSPORT', desc => 'Method of transport code or name. Code preferred.', parts =>{
515             8067 => { pos => '010', def => 'an..3' , },
516             8066 => { pos => '020', def => 'an..17', },
517             }},
518             'C222' => { label => 'TRANSPORT IDENTIFICATION', desc => 'Code and/or name identifying the means of transport.', parts =>{
519             8213 => { pos => '010', def => 'an..35', },
520             1131 => { pos => '020', def => 'an..17', },
521             3055 => { pos => '030', def => 'an..3' , },
522             8212 => { pos => '040', def => 'an..70', },
523             8453 => { pos => '050', def => 'an..3' , },
524             }},
525             'C223' => { label => 'DANGEROUS GOODS SHIPMENT FLASHPOINT', desc => 'Temperature at which a vapor can be ignited as per ISO 1523/73.', parts =>{
526             7106 => { pos => '010', def => 'n3' , },
527             6411 => { pos => '020', def => 'an..8' , },
528             }},
529             'C224' => { label => 'EQUIPMENT SIZE AND TYPE', desc => 'Code and or name identifying size and type of equipment. Code preferred.', parts =>{
530             8155 => { pos => '010', def => 'an..10', },
531             1131 => { pos => '020', def => 'an..17', },
532             3055 => { pos => '030', def => 'an..3' , },
533             8154 => { pos => '040', def => 'an..35', },
534             }},
535             'C229' => { label => 'CHARGE CATEGORY', desc => 'Identification of a category or a zone of charges.', parts =>{
536             5237 => { pos => '010', def => 'an..3' , mandatory => 1, },
537             1131 => { pos => '020', def => 'an..17', },
538             3055 => { pos => '030', def => 'an..3' , },
539             }},
540             'C231' => { label => 'METHOD OF PAYMENT', desc => 'Code identifying the method of payment.', parts =>{
541             4215 => { pos => '010', def => 'an..3' , mandatory => 1, },
542             1131 => { pos => '020', def => 'an..17', },
543             3055 => { pos => '030', def => 'an..3' , },
544             }},
545             'C232' => { label => 'GOVERNMENT ACTION', desc => 'Function: To indicate the requirement for a specific governmental action and/or procedure or which specific procedure is valid for a specific part of the transport and cross-border transactions. (Note the red portion as change in the segment description.).', parts =>{
546             9415 => { pos => '010', def => 'an..3' , },
547             9411 => { pos => '020', def => 'an..3' , },
548             9417 => { pos => '030', def => 'an..3' , },
549             9353 => { pos => '040', def => 'an..3' , },
550             }},
551             'C233' => { label => 'SERVICE', desc => 'To identify a service (which may constitute an additional component to a basic contract).', parts =>{
552             7273 => { pos => '010', def => 'an..3' , mandatory => 1, },
553             1131 => { pos => '020', def => 'an..17', },
554             3055 => { pos => '030', def => 'an..3' , },
555             7273 => { pos => '040', def => 'an..3' , },
556             1131 => { pos => '050', def => 'an..17', },
557             3055 => { pos => '060', def => 'an..3' , },
558             }},
559             'C234' => { label => 'UNDG INFORMATION', desc => 'Information on dangerous goods, taken from the United Nations Dangerous Goods classification.', parts =>{
560             7124 => { pos => '010', def => 'n4' , },
561             7088 => { pos => '020', def => 'an..8' , },
562             }},
563             'C235' => { label => 'HAZARD IDENTIFICATION PLACARD DETAILS', desc => 'These numbers appear on the hazard identification placard required on the means of transport.', parts =>{
564             8158 => { pos => '010', def => 'an..4' , },
565             8186 => { pos => '020', def => 'an4' , },
566             }},
567             'C236' => { label => 'DANGEROUS GOODS LABEL', desc => 'Markings identifying the type of hazardous goods and similar information.', parts =>{
568             8246 => { pos => '010', def => 'an..4' , },
569             8246 => { pos => '020', def => 'an..4' , },
570             8246 => { pos => '030', def => 'an..4' , },
571             8246 => { pos => '040', def => 'an..4' , },
572             }},
573             'C237' => { label => 'EQUIPMENT IDENTIFICATION', desc => 'Marks (letters/numbers) identifying equipment.', parts =>{
574             8260 => { pos => '010', def => 'an..17', },
575             1131 => { pos => '020', def => 'an..17', },
576             3055 => { pos => '030', def => 'an..3' , },
577             3207 => { pos => '040', def => 'an..3' , },
578             }},
579             'C239' => { label => 'TEMPERATURE SETTING', desc => 'The temperature under which the goods are (to be) stored or shipped.', parts =>{
580             6246 => { pos => '010', def => 'n..15' , },
581             6411 => { pos => '020', def => 'an..8' , },
582             }},
583             'C240' => { label => 'CHARACTERISTIC DESCRIPTION', desc => 'To provide a description of a characteristic.', parts =>{
584             7037 => { pos => '010', def => 'an..17', mandatory => 1, },
585             1131 => { pos => '020', def => 'an..17', },
586             3055 => { pos => '030', def => 'an..3' , },
587             7036 => { pos => '040', def => 'an..35', },
588             7036 => { pos => '050', def => 'an..35', },
589             }},
590             'C241' => { label => 'DUTY/TAX/FEE TYPE', desc => 'Code and/or name identifying duty, tax or fee.', parts =>{
591             5153 => { pos => '010', def => 'an..3' , },
592             1131 => { pos => '020', def => 'an..17', },
593             3055 => { pos => '030', def => 'an..3' , },
594             5152 => { pos => '040', def => 'an..35', },
595             }},
596             'C242' => { label => 'PROCESS TYPE AND DESCRIPTION', desc => 'Identification of process type and description.', parts =>{
597             7187 => { pos => '010', def => 'an..17', mandatory => 1, },
598             1131 => { pos => '020', def => 'an..17', },
599             3055 => { pos => '030', def => 'an..3' , },
600             7186 => { pos => '040', def => 'an..35', },
601             7186 => { pos => '050', def => 'an..35', },
602             }},
603             'C243' => { label => 'DUTY/TAX/FEE DETAIL', desc => 'Rate of duty/tax/fee applicable to commodities or of tax applicable to services.', parts =>{
604             5279 => { pos => '010', def => 'an..7' , },
605             1131 => { pos => '020', def => 'an..17', },
606             3055 => { pos => '030', def => 'an..3' , },
607             5278 => { pos => '040', def => 'an..17', },
608             5273 => { pos => '050', def => 'an..12', },
609             1131 => { pos => '060', def => 'an..17', },
610             3055 => { pos => '070', def => 'an..3' , },
611             }},
612             'C244' => { label => 'TEST METHOD', desc => 'Specification of the test method employed.', parts =>{
613             4415 => { pos => '010', def => 'an..17', },
614             1131 => { pos => '020', def => 'an..17', },
615             3055 => { pos => '030', def => 'an..3' , },
616             4416 => { pos => '040', def => 'an..70', },
617             }},
618             'C246' => { label => 'CUSTOMS IDENTITY CODES', desc => 'Specification of goods in terms of customs identity.', parts =>{
619             7361 => { pos => '010', def => 'an..18', mandatory => 1, },
620             1131 => { pos => '020', def => 'an..17', },
621             3055 => { pos => '030', def => 'an..3' , },
622             }},
623             'C250' => { label => 'USAGE', desc => 'Code or name describing usage.', parts =>{
624             7521 => { pos => '010', def => 'an..3' , },
625             1131 => { pos => '020', def => 'an..17', },
626             3055 => { pos => '030', def => 'an..3' , },
627             7522 => { pos => '040', def => 'an..256', },
628             }},
629             'C270' => { label => 'CONTROL', desc => 'Control total for checking integrity of a message or part of a message.', parts =>{
630             6069 => { pos => '010', def => 'an..3' , mandatory => 1, },
631             6066 => { pos => '020', def => 'n..18' , mandatory => 1, },
632             6411 => { pos => '030', def => 'an..8' , },
633             }},
634             'C272' => { label => 'ITEM CHARACTERISTIC', desc => 'To provide the characteristic of the item being described.', parts =>{
635             7081 => { pos => '010', def => 'an..3' , },
636             1131 => { pos => '020', def => 'an..17', },
637             3055 => { pos => '030', def => 'an..3' , },
638             }},
639             'C273' => { label => 'ITEM DESCRIPTION', desc => 'Description of an item.', parts =>{
640             7009 => { pos => '010', def => 'an..17', },
641             1131 => { pos => '020', def => 'an..17', },
642             3055 => { pos => '030', def => 'an..3' , },
643             7008 => { pos => '040', def => 'an..256', },
644             7008 => { pos => '050', def => 'an..256', },
645             3453 => { pos => '060', def => 'an..3' , },
646             }},
647             'C279' => { label => 'QUANTITY DIFFERENCE INFORMATION', desc => 'Information on quantity difference.', parts =>{
648             6064 => { pos => '010', def => 'n..15' , mandatory => 1, },
649             6063 => { pos => '020', def => 'an..3' , },
650             }},
651             'C280' => { label => 'RANGE', desc => 'Range minimum and maximum limits.', parts =>{
652             6411 => { pos => '010', def => 'an..8' , mandatory => 1, },
653             6162 => { pos => '020', def => 'n..18' , },
654             6152 => { pos => '030', def => 'n..18' , },
655             }},
656             'C286' => { label => 'SEQUENCE INFORMATION', desc => 'Identification of a sequence and source for sequencing.', parts =>{
657             1050 => { pos => '010', def => 'an..10', mandatory => 1, },
658             1159 => { pos => '020', def => 'an..3' , },
659             1131 => { pos => '030', def => 'an..17', },
660             3055 => { pos => '040', def => 'an..3' , },
661             }},
662             'C288' => { label => 'PRODUCT GROUP', desc => 'To give product group information.', parts =>{
663             5389 => { pos => '010', def => 'an..25', },
664             1131 => { pos => '020', def => 'an..17', },
665             3055 => { pos => '030', def => 'an..3' , },
666             5388 => { pos => '040', def => 'an..35', },
667             }},
668             'C289' => { label => 'TUNNEL RESTRICTION', desc => 'To specify a restriction for transport through tunnels.', parts =>{
669             8461 => { pos => '010', def => 'an..6' , },
670             1131 => { pos => '020', def => 'an..17', },
671             3055 => { pos => '030', def => 'an..3' , },
672             }},
673             'C329' => { label => 'PATTERN DESCRIPTION', desc => 'Shipment, delivery or production interval pattern and timing.', parts =>{
674             2013 => { pos => '010', def => 'an..3' , },
675             2015 => { pos => '020', def => 'an..3' , },
676             2017 => { pos => '030', def => 'an..3' , },
677             }},
678             'C330' => { label => 'INSURANCE COVER TYPE', desc => 'To provide the insurance cover type.', parts =>{
679             4497 => { pos => '010', def => 'an..3' , mandatory => 1, },
680             1131 => { pos => '020', def => 'an..17', },
681             3055 => { pos => '030', def => 'an..3' , },
682             }},
683             'C331' => { label => 'INSURANCE COVER DETAILS', desc => 'To provide the insurance cover details.', parts =>{
684             4495 => { pos => '010', def => 'an..17', },
685             1131 => { pos => '020', def => 'an..17', },
686             3055 => { pos => '030', def => 'an..3' , },
687             4494 => { pos => '040', def => 'an..35', },
688             4494 => { pos => '050', def => 'an..35', },
689             }},
690             'C332' => { label => 'SALES CHANNEL IDENTIFICATION', desc => 'Identification of sales channel for marketing data, sales, forecast, planning...', parts =>{
691             3496 => { pos => '010', def => 'an..17', mandatory => 1, },
692             1131 => { pos => '020', def => 'an..17', },
693             3055 => { pos => '030', def => 'an..3' , },
694             }},
695             'C333' => { label => 'INFORMATION REQUEST', desc => 'To specify the information requested in a responding message.', parts =>{
696             4511 => { pos => '010', def => 'an..3' , },
697             1131 => { pos => '020', def => 'an..17', },
698             3055 => { pos => '030', def => 'an..3' , },
699             4510 => { pos => '040', def => 'an..35', },
700             }},
701             'C401' => { label => 'EXCESS TRANSPORTATION INFORMATION', desc => 'To provide details of reason for, and responsibility for, use of transportation other than normally utilized.', parts =>{
702             8457 => { pos => '010', def => 'an..3' , mandatory => 1, },
703             8459 => { pos => '020', def => 'an..3' , mandatory => 1, },
704             7130 => { pos => '030', def => 'an..17', },
705             }},
706             'C402' => { label => 'PACKAGE TYPE IDENTIFICATION', desc => 'Identification of the form in which goods are described.', parts =>{
707             7077 => { pos => '010', def => 'an..3' , mandatory => 1, },
708             7064 => { pos => '020', def => 'an..35', mandatory => 1, },
709             7143 => { pos => '030', def => 'an..3' , },
710             7064 => { pos => '040', def => 'an..35', },
711             7143 => { pos => '050', def => 'an..3' , },
712             }},
713             'C501' => { label => 'PERCENTAGE DETAILS', desc => 'Percentage relating to a specified basis.', parts =>{
714             5245 => { pos => '010', def => 'an..3' , mandatory => 1, },
715             5482 => { pos => '020', def => 'n..10' , },
716             5249 => { pos => '030', def => 'an..3' , },
717             1131 => { pos => '040', def => 'an..17', },
718             3055 => { pos => '050', def => 'an..3' , },
719             }},
720             'C502' => { label => 'MEASUREMENT DETAILS', desc => 'Identification of measurement type.', parts =>{
721             6313 => { pos => '010', def => 'an..3' , },
722             6321 => { pos => '020', def => 'an..3' , },
723             6155 => { pos => '030', def => 'an..17', },
724             6154 => { pos => '040', def => 'an..70', },
725             }},
726             'C503' => { label => 'DOCUMENT/MESSAGE DETAILS', desc => 'Identification of document/message by number, status, source and/or language.', parts =>{
727             1004 => { pos => '010', def => 'an..70', },
728             1373 => { pos => '020', def => 'an..3' , },
729             1366 => { pos => '030', def => 'an..70', },
730             3453 => { pos => '040', def => 'an..3' , },
731             1056 => { pos => '050', def => 'an..9' , },
732             1060 => { pos => '060', def => 'an..6' , },
733             }},
734             'C504' => { label => 'CURRENCY DETAILS', desc => 'The usage to which a currency relates.', parts =>{
735             6347 => { pos => '010', def => 'an..3' , mandatory => 1, },
736             6345 => { pos => '020', def => 'an..3' , },
737             6343 => { pos => '030', def => 'an..3' , },
738             6348 => { pos => '040', def => 'n..4' , },
739             }},
740             'C506' => { label => 'REFERENCE', desc => 'Identification of a reference.', parts =>{
741             1153 => { pos => '010', def => 'an..3' , mandatory => 1, },
742             1154 => { pos => '020', def => 'an..70', },
743             1156 => { pos => '030', def => 'an..6' , },
744             1056 => { pos => '040', def => 'an..9' , },
745             1060 => { pos => '050', def => 'an..6' , },
746             }},
747             'C507' => { label => 'DATE/TIME/PERIOD', desc => 'Date and/or time, or period relevant to the specified date/time/period type.', parts =>{
748             2005 => { pos => '010', def => 'an..3' , mandatory => 1, },
749             2380 => { pos => '020', def => 'an..35', },
750             2379 => { pos => '030', def => 'an..3' , },
751             }},
752             'C508' => { label => 'LANGUAGE DETAILS', desc => 'To identify a language.', parts =>{
753             3453 => { pos => '010', def => 'an..3' , },
754             3452 => { pos => '020', def => 'an..35', },
755             }},
756             'C509' => { label => 'PRICE INFORMATION', desc => 'Identification of price type, price and related details.', parts =>{
757             5125 => { pos => '010', def => 'an..3' , mandatory => 1, },
758             5118 => { pos => '020', def => 'n..15' , },
759             5375 => { pos => '030', def => 'an..3' , },
760             5387 => { pos => '040', def => 'an..3' , },
761             5284 => { pos => '050', def => 'n..9' , },
762             6411 => { pos => '060', def => 'an..8' , },
763             }},
764             'C512' => { label => 'SIZE DETAILS', desc => 'Information about the number of observations.', parts =>{
765             6173 => { pos => '010', def => 'an..3' , },
766             6174 => { pos => '020', def => 'n..15' , },
767             }},
768             'C514' => { label => 'SAMPLE LOCATION DETAILS', desc => 'Identification of location within the specimen, from which the sample was taken.', parts =>{
769             3237 => { pos => '010', def => 'an..3' , },
770             3236 => { pos => '020', def => 'an..35', },
771             }},
772             'C515' => { label => 'TEST REASON', desc => 'To identify the reason for the test as specified.', parts =>{
773             4425 => { pos => '010', def => 'an..17', },
774             1131 => { pos => '020', def => 'an..17', },
775             3055 => { pos => '030', def => 'an..3' , },
776             4424 => { pos => '040', def => 'an..35', },
777             }},
778             'C516' => { label => 'MONETARY AMOUNT', desc => 'Amount of goods or services stated as a monetary amount in a specified currency.', parts =>{
779             5025 => { pos => '010', def => 'an..3' , mandatory => 1, },
780             5004 => { pos => '020', def => 'n..35' , },
781             6345 => { pos => '030', def => 'an..3' , },
782             6343 => { pos => '040', def => 'an..3' , },
783             4405 => { pos => '050', def => 'an..3' , },
784             }},
785             'C517' => { label => 'LOCATION IDENTIFICATION', desc => 'Identification of a location by code or name.', parts =>{
786             3225 => { pos => '010', def => 'an..35', },
787             1131 => { pos => '020', def => 'an..17', },
788             3055 => { pos => '030', def => 'an..3' , },
789             3224 => { pos => '040', def => 'an..256', },
790             }},
791             'C519' => { label => 'RELATED LOCATION ONE IDENTIFICATION', desc => 'Identification the first related location by code or name.', parts =>{
792             3223 => { pos => '010', def => 'an..35', },
793             1131 => { pos => '020', def => 'an..17', },
794             3055 => { pos => '030', def => 'an..3' , },
795             3222 => { pos => '040', def => 'an..70', },
796             }},
797             'C521' => { label => 'BUSINESS FUNCTION', desc => 'To specify a business reason.', parts =>{
798             4027 => { pos => '010', def => 'an..3' , mandatory => 1, },
799             4025 => { pos => '020', def => 'an..3' , mandatory => 1, },
800             1131 => { pos => '030', def => 'an..17', },
801             3055 => { pos => '040', def => 'an..3' , },
802             4022 => { pos => '050', def => 'an..70', },
803             }},
804             'C522' => { label => 'INSTRUCTION', desc => 'To specify an instruction.', parts =>{
805             4403 => { pos => '010', def => 'an..3' , mandatory => 1, },
806             4401 => { pos => '020', def => 'an..3' , },
807             1131 => { pos => '030', def => 'an..17', },
808             3055 => { pos => '040', def => 'an..3' , },
809             4400 => { pos => '050', def => 'an..35', },
810             }},
811             'C523' => { label => 'NUMBER OF UNIT DETAILS', desc => 'Identification of number of units and its purpose.', parts =>{
812             6350 => { pos => '010', def => 'n..15' , },
813             6353 => { pos => '020', def => 'an..3' , },
814             }},
815             'C524' => { label => 'HANDLING INSTRUCTIONS', desc => 'Instruction for the handling of goods, products or articles in shipment, storage etc.', parts =>{
816             4079 => { pos => '010', def => 'an..3' , },
817             1131 => { pos => '020', def => 'an..17', },
818             3055 => { pos => '030', def => 'an..3' , },
819             4078 => { pos => '040', def => 'an..512', },
820             }},
821             'C525' => { label => 'PURPOSE OF CONVEYANCE CALL', desc => 'Description of the purpose of the call of the conveyance.', parts =>{
822             8025 => { pos => '010', def => 'an..3' , },
823             1131 => { pos => '020', def => 'an..17', },
824             3055 => { pos => '030', def => 'an..3' , },
825             8024 => { pos => '040', def => 'an..35', },
826             }},
827             'C526' => { label => 'FREQUENCY DETAILS', desc => 'Number of samples collected per specified unit of measure.', parts =>{
828             6071 => { pos => '010', def => 'an..3' , mandatory => 1, },
829             6072 => { pos => '020', def => 'n..9' , },
830             6411 => { pos => '030', def => 'an..8' , },
831             }},
832             'C527' => { label => 'STATISTICAL DETAILS', desc => 'Specifications related to statistical measurements.', parts =>{
833             6314 => { pos => '010', def => 'an..18', },
834             6411 => { pos => '020', def => 'an..8' , },
835             6313 => { pos => '030', def => 'an..3' , },
836             6321 => { pos => '040', def => 'an..3' , },
837             }},
838             'C528' => { label => 'COMMODITY/RATE DETAIL', desc => 'Identification of commodity/rates.', parts =>{
839             7357 => { pos => '010', def => 'an..18', },
840             1131 => { pos => '020', def => 'an..17', },
841             3055 => { pos => '030', def => 'an..3' , },
842             }},
843             'C531' => { label => 'PACKAGING DETAILS', desc => 'Packaging level and details, terms and conditions.', parts =>{
844             7075 => { pos => '010', def => 'an..3' , },
845             7233 => { pos => '020', def => 'an..3' , },
846             7073 => { pos => '030', def => 'an..3' , },
847             }},
848             'C532' => { label => 'RETURNABLE PACKAGE DETAILS', desc => 'Indication of responsibility for payment and load contents of returnable packages.', parts =>{
849             8395 => { pos => '010', def => 'an..3' , },
850             8393 => { pos => '020', def => 'an..3' , },
851             }},
852             'C533' => { label => 'DUTY/TAX/FEE ACCOUNT DETAIL', desc => 'Indication of account reference for duties, taxes and/or fees.', parts =>{
853             5289 => { pos => '010', def => 'an..6' , mandatory => 1, },
854             1131 => { pos => '020', def => 'an..17', },
855             3055 => { pos => '030', def => 'an..3' , },
856             }},
857             'C534' => { label => 'PAYMENT INSTRUCTION DETAILS', desc => 'Indication of method of payment employed or to be employed.', parts =>{
858             4439 => { pos => '010', def => 'an..3' , },
859             4431 => { pos => '020', def => 'an..3' , },
860             4461 => { pos => '030', def => 'an..3' , },
861             1131 => { pos => '040', def => 'an..17', },
862             3055 => { pos => '050', def => 'an..3' , },
863             4435 => { pos => '060', def => 'an..3' , },
864             }},
865             'C536' => { label => 'CONTRACT AND CARRIAGE CONDITION', desc => 'To identify a contract and carriage condition.', parts =>{
866             4065 => { pos => '010', def => 'an..3' , mandatory => 1, },
867             1131 => { pos => '020', def => 'an..17', },
868             3055 => { pos => '030', def => 'an..3' , },
869             }},
870             'C537' => { label => 'TRANSPORT PRIORITY', desc => 'To indicate the priority of requested transport service.', parts =>{
871             4219 => { pos => '010', def => 'an..3' , mandatory => 1, },
872             1131 => { pos => '020', def => 'an..17', },
873             3055 => { pos => '030', def => 'an..3' , },
874             }},
875             'C543' => { label => 'AGREEMENT TYPE IDENTIFICATION', desc => 'Identification of specific agreement type by code or name.', parts =>{
876             7431 => { pos => '010', def => 'an..3' , mandatory => 1, },
877             7433 => { pos => '020', def => 'an..3' , },
878             1131 => { pos => '030', def => 'an..17', },
879             3055 => { pos => '040', def => 'an..3' , },
880             7434 => { pos => '050', def => 'an..70', },
881             }},
882             'C545' => { label => 'INDEX IDENTIFICATION', desc => 'To identify an index.', parts =>{
883             5013 => { pos => '010', def => 'an..3' , mandatory => 1, },
884             5027 => { pos => '020', def => 'an..17', },
885             1131 => { pos => '030', def => 'an..17', },
886             3055 => { pos => '040', def => 'an..3' , },
887             }},
888             'C546' => { label => 'INDEX VALUE', desc => 'To identify the value of an index.', parts =>{
889             5030 => { pos => '010', def => 'an..35', mandatory => 1, },
890             5039 => { pos => '020', def => 'an..3' , },
891             }},
892             'C549' => { label => 'MONETARY AMOUNT FUNCTION', desc => 'To identify the function of a monetary amount.', parts =>{
893             5007 => { pos => '010', def => 'an..3' , },
894             1131 => { pos => '020', def => 'an..17', },
895             3055 => { pos => '030', def => 'an..3' , },
896             5006 => { pos => '040', def => 'an..70', },
897             }},
898             'C550' => { label => 'REQUIREMENT/CONDITION IDENTIFICATION', desc => 'To identify the specific rule/condition requirement.', parts =>{
899             7295 => { pos => '010', def => 'an..17', mandatory => 1, },
900             1131 => { pos => '020', def => 'an..17', },
901             3055 => { pos => '030', def => 'an..3' , },
902             7294 => { pos => '040', def => 'an..35', },
903             }},
904             'C551' => { label => 'BANK OPERATION', desc => 'Identification of a bank operation by code.', parts =>{
905             4383 => { pos => '010', def => 'an..3' , mandatory => 1, },
906             1131 => { pos => '020', def => 'an..17', },
907             3055 => { pos => '030', def => 'an..3' , },
908             }},
909             'C552' => { label => 'ALLOWANCE/CHARGE INFORMATION', desc => 'Identification of allowance/charge information by number and/or code.', parts =>{
910             1230 => { pos => '010', def => 'an..35', },
911             5189 => { pos => '020', def => 'an..3' , },
912             }},
913             'C553' => { label => 'RELATED LOCATION TWO IDENTIFICATION', desc => 'Identification of second related location by code or name.', parts =>{
914             3233 => { pos => '010', def => 'an..35', },
915             1131 => { pos => '020', def => 'an..17', },
916             3055 => { pos => '030', def => 'an..3' , },
917             3232 => { pos => '040', def => 'an..70', },
918             }},
919             'C554' => { label => 'RATE/TARIFF CLASS DETAIL', desc => 'Identification of the applicable rate/tariff class.', parts =>{
920             5243 => { pos => '010', def => 'an..9' , },
921             1131 => { pos => '020', def => 'an..17', },
922             3055 => { pos => '030', def => 'an..3' , },
923             }},
924             'C555' => { label => 'STATUS', desc => 'To specify a status.', parts =>{
925             4405 => { pos => '010', def => 'an..3' , mandatory => 1, },
926             1131 => { pos => '020', def => 'an..17', },
927             3055 => { pos => '030', def => 'an..3' , },
928             4404 => { pos => '040', def => 'an..35', },
929             }},
930             'C556' => { label => 'STATUS REASON', desc => 'To specify the reason for a status.', parts =>{
931             9013 => { pos => '010', def => 'an..3' , mandatory => 1, },
932             1131 => { pos => '020', def => 'an..17', },
933             3055 => { pos => '030', def => 'an..3' , },
934             9012 => { pos => '040', def => 'an..256', },
935             }},
936             'C564' => { label => 'PHYSICAL OR LOGICAL STATE INFORMATION', desc => 'To give information in coded or clear text form on the physical or logical state.', parts =>{
937             7007 => { pos => '010', def => 'an..3' , },
938             1131 => { pos => '020', def => 'an..17', },
939             3055 => { pos => '030', def => 'an..3' , },
940             7006 => { pos => '040', def => 'an..70', },
941             }},
942             'C585' => { label => 'PRIORITY DETAILS', desc => 'To indicate a priority.', parts =>{
943             4037 => { pos => '010', def => 'an..3' , },
944             1131 => { pos => '020', def => 'an..17', },
945             3055 => { pos => '030', def => 'an..3' , },
946             4036 => { pos => '040', def => 'an..35', },
947             }},
948             'C593' => { label => 'ACCOUNT IDENTIFICATION', desc => 'Identification of an account.', parts =>{
949             1147 => { pos => '010', def => 'an..35', mandatory => 1, },
950             1131 => { pos => '020', def => 'an..17', },
951             3055 => { pos => '030', def => 'an..3' , },
952             1148 => { pos => '040', def => 'an..17', },
953             1146 => { pos => '050', def => 'an..35', },
954             1146 => { pos => '060', def => 'an..35', },
955             6345 => { pos => '070', def => 'an..3' , },
956             }},
957             'C595' => { label => 'ACCOUNTING JOURNAL IDENTIFICATION', desc => 'Identification of an accounting journal.', parts =>{
958             1171 => { pos => '010', def => 'an..17', mandatory => 1, },
959             1131 => { pos => '020', def => 'an..17', },
960             3055 => { pos => '030', def => 'an..3' , },
961             1170 => { pos => '040', def => 'an..35', },
962             }},
963             'C596' => { label => 'ACCOUNTING ENTRY TYPE DETAILS', desc => 'Identification of the type of entry included in an accounting journal.', parts =>{
964             4475 => { pos => '010', def => 'an..17', mandatory => 1, },
965             1131 => { pos => '020', def => 'an..17', },
966             3055 => { pos => '030', def => 'an..3' , },
967             4474 => { pos => '040', def => 'an..35', },
968             }},
969             'C601' => { label => 'STATUS CATEGORY', desc => 'To specify the category of the status.', parts =>{
970             9015 => { pos => '010', def => 'an..3' , mandatory => 1, },
971             1131 => { pos => '020', def => 'an..17', },
972             3055 => { pos => '030', def => 'an..3' , },
973             }},
974             'C701' => { label => 'ERROR POINT DETAILS', desc => 'Indication of the point of error in a message.', parts =>{
975             1049 => { pos => '010', def => 'an..3' , },
976             1052 => { pos => '020', def => 'an..35', },
977             1054 => { pos => '030', def => 'n..6' , },
978             }},
979             'C702' => { label => 'CODE SET IDENTIFICATION', desc => 'To identify a code set.', parts =>{
980             9150 => { pos => '010', def => 'an..4' , },
981             1131 => { pos => '020', def => 'an..17', },
982             3055 => { pos => '030', def => 'an..3' , },
983             }},
984             'C703' => { label => 'NATURE OF CARGO', desc => 'Rough classification of a type of cargo.', parts =>{
985             7085 => { pos => '010', def => 'an..3' , mandatory => 1, },
986             1131 => { pos => '020', def => 'an..17', },
987             3055 => { pos => '030', def => 'an..3' , },
988             }},
989             'C709' => { label => 'MESSAGE IDENTIFIER', desc => 'Identification of the message.', parts =>{
990             1003 => { pos => '010', def => 'an..6' , mandatory => 1, },
991             1056 => { pos => '020', def => 'an..9' , },
992             1058 => { pos => '030', def => 'an..9' , },
993             1476 => { pos => '040', def => 'an..2' , },
994             1523 => { pos => '050', def => 'an..6' , },
995             1060 => { pos => '060', def => 'an..6' , },
996             1373 => { pos => '070', def => 'an..3' , },
997             }},
998             'C770' => { label => 'ARRAY CELL DETAILS', desc => 'To contain the data for a contiguous set of cells in an array.', parts =>{
999             9424 => { pos => '010', def => 'an..512', },
1000             }},
1001             'C778' => { label => 'POSITION IDENTIFICATION', desc => 'To identify the position of an object in a structure containing the object.', parts =>{
1002             7164 => { pos => '010', def => 'an..35', },
1003             1050 => { pos => '020', def => 'an..10', },
1004             }},
1005             'C779' => { label => 'ARRAY STRUCTURE IDENTIFICATION', desc => 'The identification of an array structure.', parts =>{
1006             9428 => { pos => '010', def => 'an..35', mandatory => 1, },
1007             7405 => { pos => '020', def => 'an..3' , },
1008             }},
1009             'C780' => { label => 'VALUE LIST IDENTIFICATION', desc => 'The identification of a coded or non coded value list.', parts =>{
1010             1518 => { pos => '010', def => 'an..35', mandatory => 1, },
1011             7405 => { pos => '020', def => 'an..3' , },
1012             }},
1013             'C782' => { label => 'DATA SET IDENTIFICATION', desc => 'The identification of a data set.', parts =>{
1014             1520 => { pos => '010', def => 'an..35', mandatory => 1, },
1015             7405 => { pos => '020', def => 'an..3' , },
1016             }},
1017             'C783' => { label => 'FOOTNOTE SET IDENTIFICATION', desc => 'The identification of a set of footnotes.', parts =>{
1018             9430 => { pos => '010', def => 'an..35', mandatory => 1, },
1019             7405 => { pos => '020', def => 'an..3' , },
1020             }},
1021             'C784' => { label => 'FOOTNOTE IDENTIFICATION', desc => 'The identification of a footnote.', parts =>{
1022             9432 => { pos => '010', def => 'an..35', mandatory => 1, },
1023             7405 => { pos => '020', def => 'an..3' , },
1024             }},
1025             'C785' => { label => 'STATISTICAL CONCEPT IDENTIFICATION', desc => 'The identification of a statistical concept.', parts =>{
1026             6434 => { pos => '010', def => 'an..35', mandatory => 1, },
1027             7405 => { pos => '020', def => 'an..3' , },
1028             }},
1029             'C786' => { label => 'STRUCTURE COMPONENT IDENTIFICATION', desc => 'The identification of a structure component.', parts =>{
1030             7512 => { pos => '010', def => 'an..35', mandatory => 1, },
1031             7405 => { pos => '020', def => 'an..3' , },
1032             }},
1033             'C811' => { label => 'QUESTION DETAILS', desc => 'To specify a question.', parts =>{
1034             4057 => { pos => '010', def => 'an..3' , },
1035             1131 => { pos => '020', def => 'an..17', },
1036             3055 => { pos => '030', def => 'an..3' , },
1037             4056 => { pos => '040', def => 'an..256', },
1038             }},
1039             'C812' => { label => 'RESPONSE DETAILS', desc => 'To specify a response to a question, in code or text.', parts =>{
1040             4345 => { pos => '010', def => 'an..3' , },
1041             1131 => { pos => '020', def => 'an..17', },
1042             3055 => { pos => '030', def => 'an..3' , },
1043             4344 => { pos => '040', def => 'an..256', },
1044             }},
1045             'C814' => { label => 'SAFETY SECTION', desc => 'To identify the safety section to which information relates.', parts =>{
1046             4046 => { pos => '010', def => 'n..2' , mandatory => 1, },
1047             4044 => { pos => '020', def => 'an..70', },
1048             }},
1049             'C815' => { label => 'ADDITIONAL SAFETY INFORMATION', desc => 'To identify additional safety information.', parts =>{
1050             4039 => { pos => '010', def => 'an..3' , mandatory => 1, },
1051             1131 => { pos => '020', def => 'an..17', },
1052             3055 => { pos => '030', def => 'an..3' , },
1053             4038 => { pos => '040', def => 'an..35', },
1054             }},
1055             'C816' => { label => 'NAME COMPONENT DETAILS', desc => 'To specify a name component.', parts =>{
1056             3405 => { pos => '010', def => 'an..3' , mandatory => 1, },
1057             3398 => { pos => '020', def => 'an..256', },
1058             3401 => { pos => '030', def => 'an..3' , },
1059             3295 => { pos => '040', def => 'an..3' , },
1060             }},
1061             'C817' => { label => 'ADDRESS USAGE', desc => 'To describe the usage of an address.', parts =>{
1062             3299 => { pos => '010', def => 'an..3' , },
1063             3131 => { pos => '020', def => 'an..3' , },
1064             3475 => { pos => '030', def => 'an..3' , },
1065             }},
1066             'C818' => { label => 'PERSON INHERITED CHARACTERISTIC DETAILS', desc => 'To specify an inherited characteristic of a person.', parts =>{
1067             3311 => { pos => '010', def => 'an..8' , },
1068             1131 => { pos => '020', def => 'an..17', },
1069             3055 => { pos => '030', def => 'an..3' , },
1070             3310 => { pos => '040', def => 'an..70', },
1071             }},
1072             'C819' => { label => 'COUNTRY SUBDIVISION DETAILS', desc => 'To specify a country subdivision, such as state, canton, county, prefecture.', parts =>{
1073             3229 => { pos => '010', def => 'an..9' , },
1074             1131 => { pos => '020', def => 'an..17', },
1075             3055 => { pos => '030', def => 'an..3' , },
1076             3228 => { pos => '040', def => 'an..70', },
1077             }},
1078             'C820' => { label => 'PREMIUM CALCULATION COMPONENT', desc => 'To identify the component affecting premium calculation.', parts =>{
1079             4521 => { pos => '010', def => 'an..17', },
1080             1131 => { pos => '020', def => 'an..17', },
1081             3055 => { pos => '030', def => 'an..3' , },
1082             }},
1083             'C821' => { label => 'TYPE OF DAMAGE', desc => 'To specify the type of damage to an object.', parts =>{
1084             7501 => { pos => '010', def => 'an..3' , },
1085             1131 => { pos => '020', def => 'an..17', },
1086             3055 => { pos => '030', def => 'an..3' , },
1087             7500 => { pos => '040', def => 'an..35', },
1088             }},
1089             'C822' => { label => 'DAMAGE AREA', desc => 'To specify where the damage is on an object.', parts =>{
1090             7503 => { pos => '010', def => 'an..4' , },
1091             1131 => { pos => '020', def => 'an..17', },
1092             3055 => { pos => '030', def => 'an..3' , },
1093             7502 => { pos => '040', def => 'an..35', },
1094             }},
1095             'C823' => { label => 'TYPE OF UNIT/COMPONENT', desc => 'To identify the type of unit/component of an object (e.g. lock, door, tyre).', parts =>{
1096             7505 => { pos => '010', def => 'an..3' , },
1097             1131 => { pos => '020', def => 'an..17', },
1098             3055 => { pos => '030', def => 'an..3' , },
1099             7504 => { pos => '040', def => 'an..35', },
1100             }},
1101             'C824' => { label => 'COMPONENT MATERIAL', desc => 'To identify the material of which a component is composed (e.g. steel, plastics).', parts =>{
1102             7507 => { pos => '010', def => 'an..3' , },
1103             1131 => { pos => '020', def => 'an..17', },
1104             3055 => { pos => '030', def => 'an..3' , },
1105             7506 => { pos => '040', def => 'an..35', },
1106             }},
1107             'C825' => { label => 'DAMAGE SEVERITY', desc => 'To specify the severity of damage to an object.', parts =>{
1108             7509 => { pos => '010', def => 'an..3' , },
1109             1131 => { pos => '020', def => 'an..17', },
1110             3055 => { pos => '030', def => 'an..3' , },
1111             7508 => { pos => '040', def => 'an..35', },
1112             }},
1113             'C826' => { label => 'ACTION', desc => 'To indicate an action which has been taken or is to be taken (e.g. in relation to a certain object).', parts =>{
1114             1229 => { pos => '010', def => 'an..3' , },
1115             1131 => { pos => '020', def => 'an..17', },
1116             3055 => { pos => '030', def => 'an..3' , },
1117             1228 => { pos => '040', def => 'an..35', },
1118             }},
1119             'C827' => { label => 'TYPE OF MARKING', desc => 'Specification of the type of marking that reflects the method that was used and the conventions adhered to for marking (e.g. of packages).', parts =>{
1120             7511 => { pos => '010', def => 'an..3' , mandatory => 1, },
1121             1131 => { pos => '020', def => 'an..17', },
1122             3055 => { pos => '030', def => 'an..3' , },
1123             }},
1124             'C828' => { label => 'CLINICAL INTERVENTION DETAILS', desc => 'To specify a clinical intervention.', parts =>{
1125             9437 => { pos => '010', def => 'an..17', },
1126             1131 => { pos => '020', def => 'an..17', },
1127             3055 => { pos => '030', def => 'an..3' , },
1128             9436 => { pos => '040', def => 'an..70', },
1129             }},
1130             'C829' => { label => 'SUB-LINE INFORMATION', desc => 'To provide an indication that a segment or segment group is used to contain sub-line or sub-line item information and to optionally enable the sub-line to be identified.', parts =>{
1131             5495 => { pos => '010', def => 'an..3' , },
1132             1082 => { pos => '020', def => 'an..6' , },
1133             }},
1134             'C830' => { label => 'PROCESS IDENTIFICATION DETAILS', desc => 'To identify the details of a specific process.', parts =>{
1135             7191 => { pos => '010', def => 'an..17', },
1136             1131 => { pos => '020', def => 'an..17', },
1137             3055 => { pos => '030', def => 'an..3' , },
1138             7190 => { pos => '040', def => 'an..70', },
1139             }},
1140             'C831' => { label => 'RESULT DETAILS', desc => 'To specify a value.', parts =>{
1141             6314 => { pos => '010', def => 'an..18', },
1142             6321 => { pos => '020', def => 'an..3' , },
1143             6155 => { pos => '030', def => 'an..17', },
1144             1131 => { pos => '040', def => 'an..17', },
1145             3055 => { pos => '050', def => 'an..3' , },
1146             6154 => { pos => '060', def => 'an..70', },
1147             }},
1148             'C836' => { label => 'CLINICAL INFORMATION DETAILS', desc => 'To specify an item of clinical information.', parts =>{
1149             6413 => { pos => '010', def => 'an..17', },
1150             1131 => { pos => '020', def => 'an..17', },
1151             3055 => { pos => '030', def => 'an..3' , },
1152             6412 => { pos => '040', def => 'an..70', },
1153             }},
1154             'C837' => { label => 'CERTAINTY DETAILS', desc => 'To specify the certainty.', parts =>{
1155             4049 => { pos => '010', def => 'an..3' , },
1156             1131 => { pos => '020', def => 'an..17', },
1157             3055 => { pos => '030', def => 'an..3' , },
1158             4048 => { pos => '040', def => 'an..35', },
1159             }},
1160             'C838' => { label => 'DOSAGE DETAILS', desc => 'To specify a dosage.', parts =>{
1161             6083 => { pos => '010', def => 'an..8' , },
1162             1131 => { pos => '020', def => 'an..17', },
1163             3055 => { pos => '030', def => 'an..3' , },
1164             6082 => { pos => '040', def => 'an..70', },
1165             }},
1166             'C839' => { label => 'ATTENDEE CATEGORY', desc => 'To specify the category of the attendee.', parts =>{
1167             7459 => { pos => '010', def => 'an..3' , },
1168             1131 => { pos => '020', def => 'an..17', },
1169             3055 => { pos => '030', def => 'an..3' , },
1170             7458 => { pos => '040', def => 'an..35', },
1171             }},
1172             'C840' => { label => 'ATTENDANCE ADMISSION DETAILS', desc => 'To specify type of admission.', parts =>{
1173             9445 => { pos => '010', def => 'an..3' , },
1174             1131 => { pos => '020', def => 'an..17', },
1175             3055 => { pos => '030', def => 'an..3' , },
1176             9444 => { pos => '040', def => 'an..35', },
1177             }},
1178             'C841' => { label => 'ATTENDANCE DISCHARGE DETAILS', desc => 'To specify type of discharge.', parts =>{
1179             9447 => { pos => '010', def => 'an..3' , },
1180             1131 => { pos => '020', def => 'an..17', },
1181             3055 => { pos => '030', def => 'an..3' , },
1182             9446 => { pos => '040', def => 'an..35', },
1183             }},
1184             'C844' => { label => 'ORGANISATION CLASSIFICATION DETAIL', desc => 'To specify details regarding the class of an organisation.', parts =>{
1185             3083 => { pos => '010', def => 'an..17', },
1186             1131 => { pos => '020', def => 'an..17', },
1187             3055 => { pos => '030', def => 'an..3' , },
1188             3082 => { pos => '040', def => 'an..70', },
1189             }},
1190             'C848' => { label => 'MEASUREMENT UNIT DETAILS', desc => 'To specify a measurement unit.', parts =>{
1191             6411 => { pos => '010', def => 'an..8' , },
1192             1131 => { pos => '020', def => 'an..17', },
1193             3055 => { pos => '030', def => 'an..3' , },
1194             6410 => { pos => '040', def => 'an..35', },
1195             }},
1196             'C849' => { label => 'PARTIES TO INSTRUCTION', desc => 'Identify the sending and receiving parties of the instruction.', parts =>{
1197             3301 => { pos => '010', def => 'an..35', mandatory => 1, },
1198             3285 => { pos => '020', def => 'an..35', },
1199             }},
1200             'C850' => { label => 'STATUS OF INSTRUCTION', desc => 'Provides information regarding the status of an instruction.', parts =>{
1201             4405 => { pos => '010', def => 'an..3' , mandatory => 1, },
1202             3036 => { pos => '020', def => 'an..70', },
1203             }},
1204             'C851' => { label => 'RISK OBJECT TYPE', desc => 'Specification of a type of risk object.', parts =>{
1205             7179 => { pos => '010', def => 'an..17', },
1206             1131 => { pos => '020', def => 'an..17', },
1207             3055 => { pos => '030', def => 'an..3' , },
1208             }},
1209             'C852' => { label => 'RISK OBJECT SUB-TYPE', desc => 'To provide identification details for a risk object sub-type.', parts =>{
1210             7177 => { pos => '010', def => 'an..17', },
1211             1131 => { pos => '020', def => 'an..17', },
1212             3055 => { pos => '030', def => 'an..3' , },
1213             7176 => { pos => '040', def => 'an..70', },
1214             }},
1215             'C853' => { label => 'ERROR SEGMENT POINT DETAILS', desc => 'To indicate the exact segment location of an application error within a message.', parts =>{
1216             9166 => { pos => '010', def => 'an..3' , },
1217             1050 => { pos => '020', def => 'an..10', },
1218             1159 => { pos => '030', def => 'an..3' , },
1219             }},
1220             'C878' => { label => 'CHARGE/ALLOWANCE ACCOUNT', desc => 'Identification of the account for charge or allowance.', parts =>{
1221             3434 => { pos => '010', def => 'an..17', mandatory => 1, },
1222             1131 => { pos => '020', def => 'an..17', },
1223             3055 => { pos => '030', def => 'an..3' , },
1224             3194 => { pos => '040', def => 'an..35', },
1225             6345 => { pos => '050', def => 'an..3' , },
1226             }},
1227             'C889' => { label => 'CHARACTERISTIC VALUE', desc => 'To provide the value of a characteristic.', parts =>{
1228             7111 => { pos => '010', def => 'an..3' , },
1229             1131 => { pos => '020', def => 'an..17', },
1230             3055 => { pos => '030', def => 'an..3' , },
1231             7110 => { pos => '040', def => 'an..35', },
1232             7110 => { pos => '050', def => 'an..35', },
1233             }},
1234             'C901' => { label => 'APPLICATION ERROR DETAIL', desc => 'Code assigned by the recipient of a message to indicate a data validation error condition.', parts =>{
1235             9321 => { pos => '010', def => 'an..8' , mandatory => 1, },
1236             1131 => { pos => '020', def => 'an..17', },
1237             3055 => { pos => '030', def => 'an..3' , },
1238             }},
1239             'C941' => { label => 'RELATIONSHIP', desc => 'Identification and/or description of a relationship.', parts =>{
1240             9143 => { pos => '010', def => 'an..3' , },
1241             1131 => { pos => '020', def => 'an..17', },
1242             3055 => { pos => '030', def => 'an..3' , },
1243             9142 => { pos => '040', def => 'an..35', },
1244             }},
1245             'C942' => { label => 'MEMBERSHIP CATEGORY', desc => 'Identification and/or description of a membership category for a member of a scheme or group.', parts =>{
1246             7451 => { pos => '010', def => 'an..4' , mandatory => 1, },
1247             1131 => { pos => '020', def => 'an..17', },
1248             3055 => { pos => '030', def => 'an..3' , },
1249             7450 => { pos => '040', def => 'an..35', },
1250             }},
1251             'C944' => { label => 'MEMBERSHIP STATUS', desc => 'Code and/or description of membership status.', parts =>{
1252             7453 => { pos => '010', def => 'an..3' , },
1253             1131 => { pos => '020', def => 'an..17', },
1254             3055 => { pos => '030', def => 'an..3' , },
1255             7452 => { pos => '040', def => 'an..35', },
1256             }},
1257             'C945' => { label => 'MEMBERSHIP LEVEL', desc => 'Identification of a membership level.', parts =>{
1258             7455 => { pos => '010', def => 'an..3' , mandatory => 1, },
1259             7457 => { pos => '020', def => 'an..9' , },
1260             1131 => { pos => '030', def => 'an..17', },
1261             3055 => { pos => '040', def => 'an..3' , },
1262             7456 => { pos => '050', def => 'an..35', },
1263             }},
1264             'C948' => { label => 'EMPLOYMENT CATEGORY', desc => 'Code and/or description of an employment category.', parts =>{
1265             9005 => { pos => '010', def => 'an..3' , },
1266             1131 => { pos => '020', def => 'an..17', },
1267             3055 => { pos => '030', def => 'an..3' , },
1268             9004 => { pos => '040', def => 'an..35', },
1269             }},
1270             'C950' => { label => 'QUALIFICATION CLASSIFICATION', desc => 'Qualification classification description and/or code. This specifies the trade, skill, professional or similar qualification category.', parts =>{
1271             9007 => { pos => '010', def => 'an..3' , },
1272             1131 => { pos => '020', def => 'an..17', },
1273             3055 => { pos => '030', def => 'an..3' , },
1274             9006 => { pos => '040', def => 'an..35', },
1275             9006 => { pos => '050', def => 'an..35', },
1276             }},
1277             'C951' => { label => 'OCCUPATION', desc => 'Description of an occupation.', parts =>{
1278             9009 => { pos => '010', def => 'an..3' , },
1279             1131 => { pos => '020', def => 'an..17', },
1280             3055 => { pos => '030', def => 'an..3' , },
1281             9008 => { pos => '040', def => 'an..35', },
1282             9008 => { pos => '050', def => 'an..35', },
1283             }},
1284             'C953' => { label => 'CONTRIBUTION TYPE', desc => 'Identification of the type of a contribution to a scheme or group.', parts =>{
1285             5049 => { pos => '010', def => 'an..3' , mandatory => 1, },
1286             1131 => { pos => '020', def => 'an..17', },
1287             3055 => { pos => '030', def => 'an..3' , },
1288             5048 => { pos => '040', def => 'an..35', },
1289             }},
1290             'C955' => { label => 'ATTRIBUTE TYPE', desc => 'Identification of the type of attribute.', parts =>{
1291             9021 => { pos => '010', def => 'an..17', },
1292             1131 => { pos => '020', def => 'an..17', },
1293             3055 => { pos => '030', def => 'an..3' , },
1294             9020 => { pos => '040', def => 'an..70', },
1295             }},
1296             'C956' => { label => 'ATTRIBUTE DETAIL', desc => 'Identification of the attribute related to an entity.', parts =>{
1297             9019 => { pos => '010', def => 'an..17', },
1298             1131 => { pos => '020', def => 'an..17', },
1299             3055 => { pos => '030', def => 'an..3' , },
1300             9018 => { pos => '040', def => 'an..256', },
1301             }},
1302             'C960' => { label => 'REASON FOR CHANGE', desc => 'Code and/or description of the reason for a change.', parts =>{
1303             4295 => { pos => '010', def => 'an..3' , },
1304             1131 => { pos => '020', def => 'an..17', },
1305             3055 => { pos => '030', def => 'an..3' , },
1306             4294 => { pos => '040', def => 'an..35', },
1307             }},
1308             'C961' => { label => 'FORMULA COMPLEXITY', desc => 'Identification of the complexity of a formula.', parts =>{
1309             9505 => { pos => '010', def => 'an..3' , },
1310             1131 => { pos => '020', def => 'an..17', },
1311             3055 => { pos => '030', def => 'an..3' , },
1312             }},
1313             'C970' => { label => 'CLAUSE NAME', desc => 'Identification of a clause in coded or clear form.', parts =>{
1314             4069 => { pos => '010', def => 'an..17', },
1315             1131 => { pos => '020', def => 'an..17', },
1316             3055 => { pos => '030', def => 'an..3' , },
1317             4068 => { pos => '040', def => 'an..70', },
1318             }},
1319             'C971' => { label => 'PROVISO TYPE', desc => 'Specification of the proviso type in coded or clear form.', parts =>{
1320             4073 => { pos => '010', def => 'an..3' , },
1321             1131 => { pos => '020', def => 'an..17', },
1322             3055 => { pos => '030', def => 'an..3' , },
1323             4072 => { pos => '040', def => 'an..35', },
1324             }},
1325             'C972' => { label => 'PROVISO CALCULATION', desc => 'Specification of the proviso calculation in coded or clear form.', parts =>{
1326             4075 => { pos => '010', def => 'an..3' , },
1327             1131 => { pos => '020', def => 'an..17', },
1328             3055 => { pos => '030', def => 'an..3' , },
1329             4074 => { pos => '040', def => 'an..35', },
1330             }},
1331             'C973' => { label => 'APPLICABILITY TYPE', desc => 'Specification of the applicability type in coded or clear form.', parts =>{
1332             9049 => { pos => '010', def => 'an..3' , },
1333             1131 => { pos => '020', def => 'an..17', },
1334             3055 => { pos => '030', def => 'an..3' , },
1335             9048 => { pos => '040', def => 'an..35', },
1336             }},
1337             'C974' => { label => 'BASIS TYPE', desc => 'Specification of the basis in coded or clear form.', parts =>{
1338             9047 => { pos => '010', def => 'an..3' , },
1339             1131 => { pos => '020', def => 'an..17', },
1340             3055 => { pos => '030', def => 'an..3' , },
1341             9046 => { pos => '040', def => 'an..35', },
1342             }},
1343             'C977' => { label => 'PERIOD DETAIL', desc => 'Specification of the period detail in coded or clear form.', parts =>{
1344             2119 => { pos => '010', def => 'an..3' , },
1345             1131 => { pos => '020', def => 'an..17', },
1346             3055 => { pos => '030', def => 'an..3' , },
1347             2118 => { pos => '040', def => 'an..35', },
1348             }},
1349             };
1350              
1351             sub codemap {
1352             # my $self = shift;
1353 1     1 0 7 return $guts;
1354             }
1355              
1356             sub chunk {
1357 0     0 0 0 my ($class, $key) = @_;
1358 0         0 my $chunk = $guts->{$key};
1359 0 0       0 if (! $chunk) {
1360 0 0       0 $debug and carp __PACKAGE__ . " : Composite key '$key' unrecognized";
1361 0         0 return;
1362             }
1363 0         0 return $chunk;
1364             }
1365              
1366             sub spec_parts {
1367 0     0 0 0 my ($class, $key) = @_;
1368 0 0       0 if (! $key) {
1369 0         0 carp __PACKAGE__ . "->spec_parts() called without required argument for ccode key";
1370 0         0 return;
1371             }
1372 0         0 my $chunk = $class->chunk($key);
1373 0         0 return $chunk->{parts};
1374             }
1375              
1376             sub parts {
1377 0     0 0 0 my $self = shift;
1378 0 0       0 unless (ref $self) { # if it is just Business::EDI::Composite->parts
1379 0         0 return $self->spec_parts(@_); # just do a lookup
1380             }
1381 0 0       0 my $chunk = $self->chunk(@_ ? shift : $self->ccode) or return;
    0          
1382 0         0 return $chunk->{parts};
1383             }
1384             sub code {
1385 4     4 1 7 my $self = shift;
1386 4 50       69 @_ and $self->{ccode} = shift;
1387 4         20 return $self->{ccode};
1388             }
1389             sub ccode {
1390 0     0 0 0 my $self = shift;
1391 0 0       0 @_ and $self->{ccode} = shift;
1392 0         0 return $self->{ccode};
1393             }
1394             sub label {
1395 4     4 0 8 my $self = shift;
1396 4 50       11 @_ and $self->{label} = shift;
1397 4         26 return $self->{label};
1398             }
1399             sub desc {
1400 0     0 1 0 my $self = shift;
1401 0 0       0 @_ and $self->{desc} = shift;
1402 0         0 return $self->{desc};
1403             }
1404             sub value {
1405 4     4 1 8 my $self = shift;
1406 4 50       13 @_ and $self->{value} = shift;
1407 4         19 return $self->{value};
1408             }
1409              
1410             =head2 ->new($body)
1411              
1412             $body is a hashref like:
1413              
1414             { 'C002' => {
1415             '1001' => '231'
1416             }
1417             }
1418              
1419             The top level should have only one composite "Cxxx" key.
1420              
1421             =cut
1422              
1423             sub new {
1424 1910     1910 1 10930 my $class = shift;
1425 1910         2255 my $body = shift;
1426 1910 50       4157 unless ($body) {
1427 0         0 carp __PACKAGE__ . " : empty argument to new()";
1428 0         0 return;
1429             }
1430 1910 50       4891 unless (ref($body) eq 'HASH') {
1431 0         0 carp __PACKAGE__ . " : argument to new() must be a HASHref, not '" . ref($body) . "'";
1432 0         0 return;
1433             }
1434              
1435 1910         2234 my (@keys, $key, $chunk, $repeat);
1436 1910         1375012 @keys = keys %$body;
1437 1910 50       4637 unless (scalar @keys == 1) {
1438 0         0 carp __PACKAGE__ . " : HASHref arg. to new() must have (only) 1 top level key (e.q. C977). We got " . scalar(@keys);
1439 0         0 return;
1440             }
1441 1910         2832 $key = $keys[0];
1442 1910 50       6284 unless ($chunk = $guts->{$key}) { # assignment, not comparison
1443 0         0 carp __PACKAGE__ . " : Composite key '$key' unrecognized";
1444 0         0 return;
1445             }
1446 1910         2884 my $value = $body->{$key};
1447 1910 100       4539 if (ref($value) eq 'ARRAY') {
1448 33 50       89 if (scalar @$value == 1) {
1449 33 50       88 $debug and carp "Flattening repeating $key array with only 1 element";
1450 33         65 $value = $value->[0];
1451             } else {
1452 0         0 carp "Repeating value actually repeats (" . scalar(@$value) . " times). Not implemented"; # TODO
1453 0         0 return;
1454             }
1455 33         49 $repeat = -1;
1456             }
1457 1910         2492 my $self = $class->SUPER::unblessed($value, [(keys %{$chunk->{parts}})], $debug); # send the "parts" hashref
  1910         338845  
1458 1910         6435 $self->{ccode} = $key; # the Cxxx key
1459 1910         2903 $self->{code} = $key; # the Cxxx key
1460             # $self->{value} = $value; # the hashref value associated with the key -- not a value
1461 1910         3948 $self->{label} = $chunk->{label}; # label from spec
1462 1910         4532 $self->{desc} = $chunk->{desc}; # desc from spec
1463 1910 100       4305 $self->{repeat}= $repeat if $repeat;
1464 1910         13331 return bless $self, $class;
1465             }
1466              
1467             1;