[613] | 1 | VAFHLRO1 ;BP/JRP - UTILITIES FOR BUILDING HL7 ROLE SEGMENT;11/18/1997
|
---|
| 2 | ;;5.3;Registration;**160**;Aug 13, 1993
|
---|
| 3 | ;
|
---|
| 4 | ;
|
---|
| 5 | FIXLEN(INARR,OUTARR,MAXLEN,WORKSUB) ;Fixed length copy/collapse
|
---|
| 6 | ;
|
---|
| 7 | ;Input : INARR - Input array (full global reference)
|
---|
| 8 | ; OUTARR - Output array (full global reference)
|
---|
| 9 | ; MAXLEN - Maximum length (defaults to 245)
|
---|
| 10 | ; WORKSUB - Subscript [in OUTARR] to begin from (defaults to 0)
|
---|
| 11 | ;Output : None
|
---|
| 12 | ; INARR() will be collapsed into OUTARR()
|
---|
| 13 | ;Notes : Validity and existance of input is assumed
|
---|
| 14 | ; : OUTARR() is not initialized (i.e. KILLed) on input
|
---|
| 15 | ; : Sample input & output with maximum length of 4
|
---|
| 16 | ; INARR(1)=12345 OUTARR(0)=1234
|
---|
| 17 | ; INARR(1,2)=ABCD OUTARR(1)=5ABC
|
---|
| 18 | ; INARR(2)=567 OUTARR(2)=D567
|
---|
| 19 | ;
|
---|
| 20 | ;
|
---|
| 21 | S MAXLEN=$G(MAXLEN)
|
---|
| 22 | S:(MAXLEN<1) MAXLEN=245
|
---|
| 23 | S WORKSUB=$G(WORKSUB)
|
---|
| 24 | S:(WORKSUB<1) WORKSUB=0
|
---|
| 25 | ;Declare variables
|
---|
| 26 | N ROOT,VALUE,RESULT
|
---|
| 27 | ;Declare variables for recursive portion of call
|
---|
| 28 | N LENVAL,LENRES,LEN,LENOVR
|
---|
| 29 | ;Remember root of INARR
|
---|
| 30 | S ROOT=$$OREF^DILF(INARR)
|
---|
| 31 | ;Work down INARR
|
---|
| 32 | S RESULT=""
|
---|
| 33 | F S INARR=$Q(@INARR) Q:((INARR="")!(INARR'[ROOT)) D
|
---|
| 34 | .;Grab value to append
|
---|
| 35 | .S VALUE=$G(@INARR)
|
---|
| 36 | .;Recusively do fix length copy/collapse
|
---|
| 37 | .D FIXLEN1
|
---|
| 38 | ;If anything still left in RESULT, put into OUTARR()
|
---|
| 39 | S:(RESULT'="") @OUTARR@(WORKSUB)=RESULT
|
---|
| 40 | ;Done
|
---|
| 41 | Q
|
---|
| 42 | ;
|
---|
| 43 | FIXLEN1 ;Recursive portion of FIXLEN
|
---|
| 44 | ;
|
---|
| 45 | ;Input : VALUE - Value to append to RESULT
|
---|
| 46 | ; RESULT - Working & resulting value
|
---|
| 47 | ; OUTARR - Array to place max length results into (full global)
|
---|
| 48 | ; WORKSUB - Working subscript in OUTARR (where to put results)
|
---|
| 49 | ; MAXLEN - Maximum length for RESULT
|
---|
| 50 | ;Output : None
|
---|
| 51 | ; If max length was exceeded, then OUTARR(WORKSUB) will contain
|
---|
| 52 | ; the leading portion of appending, WORKSUB will be incremented
|
---|
| 53 | ; by 1, and RESULT will contain what was left. If max length
|
---|
| 54 | ; was not exceeded, then VALUE will be appended to RESULT and
|
---|
| 55 | ; OUTARR(WORKSUB) will be left unchanged.
|
---|
| 56 | ;Notes : Validity and existance of input is assumed
|
---|
| 57 | ; : Declarations done in FIXLEN
|
---|
| 58 | ; : VALUE may be modified by this call
|
---|
| 59 | ;
|
---|
| 60 | ;VALUE is null - done
|
---|
| 61 | Q:(VALUE="")
|
---|
| 62 | ;Get lengths of VAL & RES
|
---|
| 63 | S LENVAL=$L(VALUE)
|
---|
| 64 | S LENRES=$L(RESULT)
|
---|
| 65 | ;Determine what resulting length will be
|
---|
| 66 | S LEN=LENRES+LENVAL
|
---|
| 67 | ;Max length will not be exceeded - append and quit
|
---|
| 68 | I (LEN<MAXLEN) S RESULT=RESULT_VALUE Q
|
---|
| 69 | I (LEN=MAXLEN) S RESULT=RESULT_VALUE Q
|
---|
| 70 | ;Determine exceeding length
|
---|
| 71 | S LENOVR=LEN-MAXLEN
|
---|
| 72 | ;Put non-exceeding portion into output array
|
---|
| 73 | S @OUTARR@(WORKSUB)=RESULT_$E(VALUE,1,(LENVAL-LENOVR))
|
---|
| 74 | ;Increment working subscript
|
---|
| 75 | S WORKSUB=WORKSUB+1
|
---|
| 76 | ;Put exceeding portion into RESULT
|
---|
| 77 | ; Use recursion to account for further exceeding
|
---|
| 78 | S RESULT=""
|
---|
| 79 | S VALUE=$E(VALUE,((LENVAL-LENOVR)+1),LENVAL)
|
---|
| 80 | D FIXLEN1
|
---|
| 81 | ;Done
|
---|
| 82 | Q
|
---|
| 83 | ;
|
---|
| 84 | GETATT(SEQ) ;Get element attributes
|
---|
| 85 | ;
|
---|
| 86 | ;Input : SEQ - Sequence number
|
---|
| 87 | ;Output : Role segment attributes (as defined by HL7 standard)
|
---|
| 88 | ; SEQ^LEN^DT^OPT^RP/#^TBL#^ITEM#^ELEMENT NAME
|
---|
| 89 | ;Notes : Null is returned on bad input
|
---|
| 90 | ;
|
---|
| 91 | ;Get/return attributes
|
---|
| 92 | S SEQ="S"_$G(SEQ)
|
---|
| 93 | Q $P($T(@SEQ),";;",2,999)
|
---|
| 94 | ;
|
---|
| 95 | SEQREQ(SEQ) ;Required element ?
|
---|
| 96 | ;
|
---|
| 97 | ;Input : SEQ - Sequence number
|
---|
| 98 | ;Output : 1 = Yes 0 = No
|
---|
| 99 | ;Notes : 0 (no) is returned on bad input
|
---|
| 100 | ;
|
---|
| 101 | ;Declare variables
|
---|
| 102 | N TMP
|
---|
| 103 | ;Get attributes
|
---|
| 104 | S TMP=$$GETATT($G(SEQ))
|
---|
| 105 | ;Required/optional attribute lists required
|
---|
| 106 | Q:($P(TMP,"^",4)="R") 1
|
---|
| 107 | ;Optional
|
---|
| 108 | Q 0
|
---|
| 109 | ;
|
---|
| 110 | ERROR(SEQ,OUTARR,ERROR) ;Add error node to output array
|
---|
| 111 | ;
|
---|
| 112 | ;Input : SEQ - Sequence number
|
---|
| 113 | ; OUTARR - Output array
|
---|
| 114 | ; ERROR - Error text to include
|
---|
| 115 | ;Output : None
|
---|
| 116 | ; Required Element
|
---|
| 117 | ; OUTARR("ERROR",SEQ,x) = Error text
|
---|
| 118 | ; Optional Element
|
---|
| 119 | ; OUTARR("WARNING",SEQ,x) = Error text
|
---|
| 120 | ;Notes : Input error text (ERROR) will be appended to text stating
|
---|
| 121 | ; whether element is required/optional and the element name
|
---|
| 122 | ;
|
---|
| 123 | N ATTRIB,REQUIRED,ELEMENT,TEXT
|
---|
| 124 | ;Get attributes
|
---|
| 125 | S ATTRIB=$$GETATT($G(SEQ))
|
---|
| 126 | ;Required/Optional
|
---|
| 127 | S REQUIRED=0
|
---|
| 128 | S:($P(ATTRIB,"^",4)="R") REQUIRED=1
|
---|
| 129 | ;Element name
|
---|
| 130 | S ELEMENT=$P(ATTRIB,"^",8)
|
---|
| 131 | S:(ELEMENT="") ELEMENT="Unknown (seq #"_SEQ_")"
|
---|
| 132 | ;Build blanket error text
|
---|
| 133 | S TEXT=$S(REQUIRED:"Required",1:"Optional")
|
---|
| 134 | S TEXT=TEXT_" data element '"_ELEMENT_"'"
|
---|
| 135 | ;Append input error text (if present)
|
---|
| 136 | S:($G(ERROR)'="") TEXT=TEXT_" "_ERROR
|
---|
| 137 | ;Use WARNING node for optional element & ERROR node for required
|
---|
| 138 | S:('REQUIRED) OUTARR=$NA(@OUTARR@("WARNING"))
|
---|
| 139 | S:(REQUIRED) OUTARR=$NA(@OUTARR@("ERROR"))
|
---|
| 140 | ;Get next subscript in ouput array
|
---|
| 141 | S ATTRIB=1+$O(@OUTARR@(SEQ,""),-1)
|
---|
| 142 | ;Place error text into output array
|
---|
| 143 | S @OUTARR@(SEQ,ATTRIB)=TEXT
|
---|
| 144 | ;Done
|
---|
| 145 | Q
|
---|
| 146 | ;
|
---|
| 147 | ;
|
---|
| 148 | ;Role segment attributes (as defined by HL7 standard)
|
---|
| 149 | ATTRIB ;;SEQ^LEN^DT^OPT^RP/#^TBL#^ITEM#^ELEMENT NAME
|
---|
| 150 | S1 ;;1^60^EI^R^^^01206^Role Instance ID
|
---|
| 151 | S2 ;;2^2^ID^R^^0287^00816^Action Code
|
---|
| 152 | S3 ;;3^80^CE^R^^^01197^Role
|
---|
| 153 | S4 ;;4^80^XCN^R^^^01198^Role Person
|
---|
| 154 | S5 ;;5^26^TS^O^^^01199^Role Begin Date/Time
|
---|
| 155 | S6 ;;6^26^TS^O^^^01200^Role End Date/Time
|
---|
| 156 | S7 ;;7^80^CE^O^^^01201^Role Duration
|
---|
| 157 | S8 ;;8^80^CE^O^^^01205^Role Action Reason
|
---|