- DGROHLU1 ;DJH/AMA - ROM HL7 BUILD FDA SEGMENT ; 24 Jun 2003 3:53 PM
- ;;5.3;Registration;**533,572,1015**;Aug 13, 1993;Build 21
- ;
- Q
- ;
- FDA(DGROFDA,DGSEGSTR) ; FDA SEGMENT API
- ;Called from BLDORF^DGROHLQ
- ;
- ; INPUT:
- ; DGROFDA - POINTER TO THE GLOBAL DATA ARRAY, ^TMP("DGROFDA",$J)
- ;
- ; OUTPUT:
- ; DGSEGSTR - ARRAY OF SEGMENTS
- ;
- N DGVAL
- ;
- Q:'$D(@DGROFDA)
- I $$FDAVAL(.DGVAL) D
- . D BLDFDA("FDA",.DGVAL,.DGSEGSTR,.DGHL)
- Q
- ;
- FDAVAL(DGVAL) ; FORMAT THE DATA ARRAY FOR THE FDA SEGMENT
- ; Input:
- ; DGVAL - array of data
- ;
- N DGRSLT,DGX,DGF,DGIEN,DGFLD,DGEI,DGCHAR
- ;
- S (DGRSLT,DGX)=0
- S DGF=0 F S DGF=$O(@DGROFDA@(DGF)) Q:'DGF D
- . S DGIEN="" F S DGIEN=$O(@DGROFDA@(DGF,DGIEN)) Q:DGIEN="" D
- . . S DGFLD=0 F S DGFLD=$O(@DGROFDA@(DGF,DGIEN,DGFLD)) Q:'DGFLD D
- . . . S DGX=DGX+1
- . . . S DGVAL(DGX,1,1)=DGF
- . . . S DGVAL(DGX,1,2)=DGIEN
- . . . S DGVAL(DGX,1,3)=DGFLD
- . . . ;*Get all External values (DG*5.3*572)
- . . . S DGVAL(DGX,2,1)=$G(@DGROFDA@(DGF,DGIEN,DGFLD,"E"))
- . S DGRSLT=1
- ;
- Q DGRSLT
- ;
- BLDFDA(DGTYP,DGVAL,DGSEGSTR,DGHL) ;FDA SEGMENT BUILDER
- ;BUILDS THE FDA SEGMENT IN THE FOLLOWING FORMAT:
- ; FDA ^ FILE | IEN | FIELD ~ EXTERNAL VALUE
- ; ADD ^ FILE | IEN | FIELD ~ EXTERNAL VALUE
- ; ADD ^ FILE | IEN | FIELD ~ EXTERNAL VALUE
- ; etc., etc.
- ;
- ; INPUT:
- ; DGTYP - SEGMENT TYPE
- ; DGVAL - FIELD DATA ARRAY [SUB1:field, SUB2:repetition
- ; SUB3:component, SUB4:sub-component]
- ; DGSEGSTR - ARRAY OF SEGMENTS, EACH NO GREATER THAN 245 CHARACTERS
- ; DGHL - HL7 ENVIRONMENT ARRAY
- ;
- ; OUTPUT:
- ; FUNCTION VALUE - FORMATTED ARRAY OF HL7 SEGMENTS ON SUCCESS, "" ON FAILURE
- ;
- N DGCNT ;array counter
- N DGFS ;field separator
- N DGCS ;component separator
- N DGRS ;repetition separator
- N DGSS ;sub-component separator
- N DGFLD ;field subscript
- N DGFLDVAL ;field value
- N DGSEP ;HL7 separator
- N DGREP ;repetition subscript
- N DGREPVAL ;repetition value
- N DGCMP ;component subscript
- N DGCMPVAL ;component value
- N DGSUB ;sub-component subscript
- N DGSUBVAL ;sub-component value
- ;
- Q:($G(DGTYP)']"")
- ;
- S DGCNT=1
- S DGSEGSTR(DGCNT)=DGTYP
- S DGFS=DGHL("FS")
- S DGCS=$E(DGHL("ECH"))
- S DGRS=$E(DGHL("ECH"),2)
- S DGSS=$E(DGHL("ECH"),4)
- ;
- F DGFLD=1:1:$O(DGVAL(""),-1) D
- . I DGTYP="ADD" S DGCNT=DGCNT+1,DGSEGSTR(DGCNT)=DGTYP
- . S DGFLDVAL=$G(DGVAL(DGFLD)),DGSEP=DGFS
- . D ADD(DGFLDVAL,DGSEP,.DGSEGSTR,.DGCNT)
- . F DGREP=1:1:$O(DGVAL(DGFLD,""),-1) D
- . . S DGREPVAL=$G(DGVAL(DGFLD,DGREP))
- . . S DGSEP=$S(DGREP=1:"",1:DGRS)
- . . D ADD(DGREPVAL,DGSEP,.DGSEGSTR,.DGCNT)
- . . F DGCMP=1:1:$O(DGVAL(DGFLD,DGREP,""),-1) D
- . . . S DGCMPVAL=$G(DGVAL(DGFLD,DGREP,DGCMP))
- . . . S DGSEP=$S(DGCMP=1:"",1:DGCS)
- . . . D ADD(DGCMPVAL,DGSEP,.DGSEGSTR,.DGCNT)
- . . . F DGSUB=1:1:$O(DGVAL(DGFLD,DGREP,DGCMP,""),-1) D
- . . . . S DGSUBVAL=$G(DGVAL(DGFLD,DGREP,DGCMP,DGSUB))
- . . . . S DGSEP=$S(DGSUB=1:"",1:DGSS)
- . . . . D ADD(DGSUBVAL,DGSEP,.DGSEGSTR,.DGCNT)
- . S DGTYP="ADD"
- Q
- ;
- ADD(DGVAL,DGSEP,DGSEGSTR,DGCNT) ;append a value onto segment
- ;
- ; Input:
- ; DGVAL - value to append
- ; DGSEP - HL7 separator
- ;
- ; Output:
- ; DGSEGSTR(DGCNT) - segment passed by reference
- ;
- S DGSEP=$G(DGSEP)
- S DGVAL=$G(DGVAL)
- S DGSEGSTR(DGCNT)=DGSEGSTR(DGCNT)_DGSEP_DGVAL
- Q
- DGROHLU1 ;DJH/AMA - ROM HL7 BUILD FDA SEGMENT ; 24 Jun 2003 3:53 PM
- +1 ;;5.3;Registration;**533,572,1015**;Aug 13, 1993;Build 21
- +2 ;
- +3 QUIT
- +4 ;
- FDA(DGROFDA,DGSEGSTR) ; FDA SEGMENT API
- +1 ;Called from BLDORF^DGROHLQ
- +2 ;
- +3 ; INPUT:
- +4 ; DGROFDA - POINTER TO THE GLOBAL DATA ARRAY, ^TMP("DGROFDA",$J)
- +5 ;
- +6 ; OUTPUT:
- +7 ; DGSEGSTR - ARRAY OF SEGMENTS
- +8 ;
- +9 NEW DGVAL
- +10 ;
- +11 IF '$DATA(@DGROFDA)
- QUIT
- +12 IF $$FDAVAL(.DGVAL)
- Begin DoDot:1
- +13 DO BLDFDA("FDA",.DGVAL,.DGSEGSTR,.DGHL)
- End DoDot:1
- +14 QUIT
- +15 ;
- FDAVAL(DGVAL) ; FORMAT THE DATA ARRAY FOR THE FDA SEGMENT
- +1 ; Input:
- +2 ; DGVAL - array of data
- +3 ;
- +4 NEW DGRSLT,DGX,DGF,DGIEN,DGFLD,DGEI,DGCHAR
- +5 ;
- +6 SET (DGRSLT,DGX)=0
- +7 SET DGF=0
- FOR
- SET DGF=$ORDER(@DGROFDA@(DGF))
- IF 'DGF
- QUIT
- Begin DoDot:1
- +8 SET DGIEN=""
- FOR
- SET DGIEN=$ORDER(@DGROFDA@(DGF,DGIEN))
- IF DGIEN=""
- QUIT
- Begin DoDot:2
- +9 SET DGFLD=0
- FOR
- SET DGFLD=$ORDER(@DGROFDA@(DGF,DGIEN,DGFLD))
- IF 'DGFLD
- QUIT
- Begin DoDot:3
- +10 SET DGX=DGX+1
- +11 SET DGVAL(DGX,1,1)=DGF
- +12 SET DGVAL(DGX,1,2)=DGIEN
- +13 SET DGVAL(DGX,1,3)=DGFLD
- +14 ;*Get all External values (DG*5.3*572)
- +15 SET DGVAL(DGX,2,1)=$GET(@DGROFDA@(DGF,DGIEN,DGFLD,"E"))
- End DoDot:3
- End DoDot:2
- +16 SET DGRSLT=1
- End DoDot:1
- +17 ;
- +18 QUIT DGRSLT
- +19 ;
- BLDFDA(DGTYP,DGVAL,DGSEGSTR,DGHL) ;FDA SEGMENT BUILDER
- +1 ;BUILDS THE FDA SEGMENT IN THE FOLLOWING FORMAT:
- +2 ; FDA ^ FILE | IEN | FIELD ~ EXTERNAL VALUE
- +3 ; ADD ^ FILE | IEN | FIELD ~ EXTERNAL VALUE
- +4 ; ADD ^ FILE | IEN | FIELD ~ EXTERNAL VALUE
- +5 ; etc., etc.
- +6 ;
- +7 ; INPUT:
- +8 ; DGTYP - SEGMENT TYPE
- +9 ; DGVAL - FIELD DATA ARRAY [SUB1:field, SUB2:repetition
- +10 ; SUB3:component, SUB4:sub-component]
- +11 ; DGSEGSTR - ARRAY OF SEGMENTS, EACH NO GREATER THAN 245 CHARACTERS
- +12 ; DGHL - HL7 ENVIRONMENT ARRAY
- +13 ;
- +14 ; OUTPUT:
- +15 ; FUNCTION VALUE - FORMATTED ARRAY OF HL7 SEGMENTS ON SUCCESS, "" ON FAILURE
- +16 ;
- +17 ;array counter
- NEW DGCNT
- +18 ;field separator
- NEW DGFS
- +19 ;component separator
- NEW DGCS
- +20 ;repetition separator
- NEW DGRS
- +21 ;sub-component separator
- NEW DGSS
- +22 ;field subscript
- NEW DGFLD
- +23 ;field value
- NEW DGFLDVAL
- +24 ;HL7 separator
- NEW DGSEP
- +25 ;repetition subscript
- NEW DGREP
- +26 ;repetition value
- NEW DGREPVAL
- +27 ;component subscript
- NEW DGCMP
- +28 ;component value
- NEW DGCMPVAL
- +29 ;sub-component subscript
- NEW DGSUB
- +30 ;sub-component value
- NEW DGSUBVAL
- +31 ;
- +32 IF ($GET(DGTYP)']"")
- QUIT
- +33 ;
- +34 SET DGCNT=1
- +35 SET DGSEGSTR(DGCNT)=DGTYP
- +36 SET DGFS=DGHL("FS")
- +37 SET DGCS=$EXTRACT(DGHL("ECH"))
- +38 SET DGRS=$EXTRACT(DGHL("ECH"),2)
- +39 SET DGSS=$EXTRACT(DGHL("ECH"),4)
- +40 ;
- +41 FOR DGFLD=1:1:$ORDER(DGVAL(""),-1)
- Begin DoDot:1
- +42 IF DGTYP="ADD"
- SET DGCNT=DGCNT+1
- SET DGSEGSTR(DGCNT)=DGTYP
- +43 SET DGFLDVAL=$GET(DGVAL(DGFLD))
- SET DGSEP=DGFS
- +44 DO ADD(DGFLDVAL,DGSEP,.DGSEGSTR,.DGCNT)
- +45 FOR DGREP=1:1:$ORDER(DGVAL(DGFLD,""),-1)
- Begin DoDot:2
- +46 SET DGREPVAL=$GET(DGVAL(DGFLD,DGREP))
- +47 SET DGSEP=$SELECT(DGREP=1:"",1:DGRS)
- +48 DO ADD(DGREPVAL,DGSEP,.DGSEGSTR,.DGCNT)
- +49 FOR DGCMP=1:1:$ORDER(DGVAL(DGFLD,DGREP,""),-1)
- Begin DoDot:3
- +50 SET DGCMPVAL=$GET(DGVAL(DGFLD,DGREP,DGCMP))
- +51 SET DGSEP=$SELECT(DGCMP=1:"",1:DGCS)
- +52 DO ADD(DGCMPVAL,DGSEP,.DGSEGSTR,.DGCNT)
- +53 FOR DGSUB=1:1:$ORDER(DGVAL(DGFLD,DGREP,DGCMP,""),-1)
- Begin DoDot:4
- +54 SET DGSUBVAL=$GET(DGVAL(DGFLD,DGREP,DGCMP,DGSUB))
- +55 SET DGSEP=$SELECT(DGSUB=1:"",1:DGSS)
- +56 DO ADD(DGSUBVAL,DGSEP,.DGSEGSTR,.DGCNT)
- End DoDot:4
- End DoDot:3
- End DoDot:2
- +57 SET DGTYP="ADD"
- End DoDot:1
- +58 QUIT
- +59 ;
- ADD(DGVAL,DGSEP,DGSEGSTR,DGCNT) ;append a value onto segment
- +1 ;
- +2 ; Input:
- +3 ; DGVAL - value to append
- +4 ; DGSEP - HL7 separator
- +5 ;
- +6 ; Output:
- +7 ; DGSEGSTR(DGCNT) - segment passed by reference
- +8 ;
- +9 SET DGSEP=$GET(DGSEP)
- +10 SET DGVAL=$GET(DGVAL)
- +11 SET DGSEGSTR(DGCNT)=DGSEGSTR(DGCNT)_DGSEP_DGVAL
- +12 QUIT