[613] | 1 | DGROHLU1 ;DJH/AMA - ROM HL7 BUILD FDA SEGMENT ; 24 Jun 2003 3:53 PM
|
---|
| 2 | ;;5.3;Registration;**533,572**;Aug 13, 1993
|
---|
| 3 | ;
|
---|
| 4 | Q
|
---|
| 5 | ;
|
---|
| 6 | FDA(DGROFDA,DGSEGSTR) ; FDA SEGMENT API
|
---|
| 7 | ;Called from BLDORF^DGROHLQ
|
---|
| 8 | ;
|
---|
| 9 | ; INPUT:
|
---|
| 10 | ; DGROFDA - POINTER TO THE GLOBAL DATA ARRAY, ^TMP("DGROFDA",$J)
|
---|
| 11 | ;
|
---|
| 12 | ; OUTPUT:
|
---|
| 13 | ; DGSEGSTR - ARRAY OF SEGMENTS
|
---|
| 14 | ;
|
---|
| 15 | N DGVAL
|
---|
| 16 | ;
|
---|
| 17 | Q:'$D(@DGROFDA)
|
---|
| 18 | I $$FDAVAL(.DGVAL) D
|
---|
| 19 | . D BLDFDA("FDA",.DGVAL,.DGSEGSTR,.DGHL)
|
---|
| 20 | Q
|
---|
| 21 | ;
|
---|
| 22 | FDAVAL(DGVAL) ; FORMAT THE DATA ARRAY FOR THE FDA SEGMENT
|
---|
| 23 | ; Input:
|
---|
| 24 | ; DGVAL - array of data
|
---|
| 25 | ;
|
---|
| 26 | N DGRSLT,DGX,DGF,DGIEN,DGFLD,DGEI,DGCHAR
|
---|
| 27 | ;
|
---|
| 28 | S (DGRSLT,DGX)=0
|
---|
| 29 | S DGF=0 F S DGF=$O(@DGROFDA@(DGF)) Q:'DGF D
|
---|
| 30 | . S DGIEN="" F S DGIEN=$O(@DGROFDA@(DGF,DGIEN)) Q:DGIEN="" D
|
---|
| 31 | . . S DGFLD=0 F S DGFLD=$O(@DGROFDA@(DGF,DGIEN,DGFLD)) Q:'DGFLD D
|
---|
| 32 | . . . S DGX=DGX+1
|
---|
| 33 | . . . S DGVAL(DGX,1,1)=DGF
|
---|
| 34 | . . . S DGVAL(DGX,1,2)=DGIEN
|
---|
| 35 | . . . S DGVAL(DGX,1,3)=DGFLD
|
---|
| 36 | . . . ;*Get all External values (DG*5.3*572)
|
---|
| 37 | . . . S DGVAL(DGX,2,1)=$G(@DGROFDA@(DGF,DGIEN,DGFLD,"E"))
|
---|
| 38 | . S DGRSLT=1
|
---|
| 39 | ;
|
---|
| 40 | Q DGRSLT
|
---|
| 41 | ;
|
---|
| 42 | BLDFDA(DGTYP,DGVAL,DGSEGSTR,DGHL) ;FDA SEGMENT BUILDER
|
---|
| 43 | ;BUILDS THE FDA SEGMENT IN THE FOLLOWING FORMAT:
|
---|
| 44 | ; FDA ^ FILE | IEN | FIELD ~ EXTERNAL VALUE
|
---|
| 45 | ; ADD ^ FILE | IEN | FIELD ~ EXTERNAL VALUE
|
---|
| 46 | ; ADD ^ FILE | IEN | FIELD ~ EXTERNAL VALUE
|
---|
| 47 | ; etc., etc.
|
---|
| 48 | ;
|
---|
| 49 | ; INPUT:
|
---|
| 50 | ; DGTYP - SEGMENT TYPE
|
---|
| 51 | ; DGVAL - FIELD DATA ARRAY [SUB1:field, SUB2:repetition
|
---|
| 52 | ; SUB3:component, SUB4:sub-component]
|
---|
| 53 | ; DGSEGSTR - ARRAY OF SEGMENTS, EACH NO GREATER THAN 245 CHARACTERS
|
---|
| 54 | ; DGHL - HL7 ENVIRONMENT ARRAY
|
---|
| 55 | ;
|
---|
| 56 | ; OUTPUT:
|
---|
| 57 | ; FUNCTION VALUE - FORMATTED ARRAY OF HL7 SEGMENTS ON SUCCESS, "" ON FAILURE
|
---|
| 58 | ;
|
---|
| 59 | N DGCNT ;array counter
|
---|
| 60 | N DGFS ;field separator
|
---|
| 61 | N DGCS ;component separator
|
---|
| 62 | N DGRS ;repetition separator
|
---|
| 63 | N DGSS ;sub-component separator
|
---|
| 64 | N DGFLD ;field subscript
|
---|
| 65 | N DGFLDVAL ;field value
|
---|
| 66 | N DGSEP ;HL7 separator
|
---|
| 67 | N DGREP ;repetition subscript
|
---|
| 68 | N DGREPVAL ;repetition value
|
---|
| 69 | N DGCMP ;component subscript
|
---|
| 70 | N DGCMPVAL ;component value
|
---|
| 71 | N DGSUB ;sub-component subscript
|
---|
| 72 | N DGSUBVAL ;sub-component value
|
---|
| 73 | ;
|
---|
| 74 | Q:($G(DGTYP)']"")
|
---|
| 75 | ;
|
---|
| 76 | S DGCNT=1
|
---|
| 77 | S DGSEGSTR(DGCNT)=DGTYP
|
---|
| 78 | S DGFS=DGHL("FS")
|
---|
| 79 | S DGCS=$E(DGHL("ECH"))
|
---|
| 80 | S DGRS=$E(DGHL("ECH"),2)
|
---|
| 81 | S DGSS=$E(DGHL("ECH"),4)
|
---|
| 82 | ;
|
---|
| 83 | F DGFLD=1:1:$O(DGVAL(""),-1) D
|
---|
| 84 | . I DGTYP="ADD" S DGCNT=DGCNT+1,DGSEGSTR(DGCNT)=DGTYP
|
---|
| 85 | . S DGFLDVAL=$G(DGVAL(DGFLD)),DGSEP=DGFS
|
---|
| 86 | . D ADD(DGFLDVAL,DGSEP,.DGSEGSTR,.DGCNT)
|
---|
| 87 | . F DGREP=1:1:$O(DGVAL(DGFLD,""),-1) D
|
---|
| 88 | . . S DGREPVAL=$G(DGVAL(DGFLD,DGREP))
|
---|
| 89 | . . S DGSEP=$S(DGREP=1:"",1:DGRS)
|
---|
| 90 | . . D ADD(DGREPVAL,DGSEP,.DGSEGSTR,.DGCNT)
|
---|
| 91 | . . F DGCMP=1:1:$O(DGVAL(DGFLD,DGREP,""),-1) D
|
---|
| 92 | . . . S DGCMPVAL=$G(DGVAL(DGFLD,DGREP,DGCMP))
|
---|
| 93 | . . . S DGSEP=$S(DGCMP=1:"",1:DGCS)
|
---|
| 94 | . . . D ADD(DGCMPVAL,DGSEP,.DGSEGSTR,.DGCNT)
|
---|
| 95 | . . . F DGSUB=1:1:$O(DGVAL(DGFLD,DGREP,DGCMP,""),-1) D
|
---|
| 96 | . . . . S DGSUBVAL=$G(DGVAL(DGFLD,DGREP,DGCMP,DGSUB))
|
---|
| 97 | . . . . S DGSEP=$S(DGSUB=1:"",1:DGSS)
|
---|
| 98 | . . . . D ADD(DGSUBVAL,DGSEP,.DGSEGSTR,.DGCNT)
|
---|
| 99 | . S DGTYP="ADD"
|
---|
| 100 | Q
|
---|
| 101 | ;
|
---|
| 102 | ADD(DGVAL,DGSEP,DGSEGSTR,DGCNT) ;append a value onto segment
|
---|
| 103 | ;
|
---|
| 104 | ; Input:
|
---|
| 105 | ; DGVAL - value to append
|
---|
| 106 | ; DGSEP - HL7 separator
|
---|
| 107 | ;
|
---|
| 108 | ; Output:
|
---|
| 109 | ; DGSEGSTR(DGCNT) - segment passed by reference
|
---|
| 110 | ;
|
---|
| 111 | S DGSEP=$G(DGSEP)
|
---|
| 112 | S DGVAL=$G(DGVAL)
|
---|
| 113 | S DGSEGSTR(DGCNT)=DGSEGSTR(DGCNT)_DGSEP_DGVAL
|
---|
| 114 | Q
|
---|