DGROHLQ3 ;DJH/AMA - ROM HL7 QRY/ORF PROCESSING ; 27 Apr 2004  4:50 PM
 ;;5.3;Registration;**533,572**;Aug 13, 1993
 ;
PARSQRY(DGWRK,DGHL,DGQRY,DGROERR) ;Parse QRY~R02 Message/Segments
 ;Called from RCVQRY^DGROHLR
 ;  Input:
 ;    DGWRK - Closed root global reference, ^TMP("DGROHL7",$J)
 ;     DGHL - VistA HL7 environment array
 ;
 ;  Output:
 ;    DGQRY - Patient lookup components array
 ;   DGROERR - Undefined on success, ERR segment data array on failure
 ;             Format:  DGROERR(seg_id,sequence,fld_pos)=error_code
 ;
 N DGFS      ;field separator
 N DGCS      ;component separator
 N DGRS      ;repetition separator
 N DGSS      ;sub-component separator
 N DGCURLIN  ;current segment line
 N DGSEG     ;segment field data array
 N DGROERR   ;error processing array
 ;
 S DGFS=DGHL("FS")
 S DGCS=$E(DGHL("ECH"),1)
 S DGRS=$E(DGHL("ECH"),2)
 S DGSS=$E(DGHL("ECH"),4)
 S DGCURLIN=0
 ;
 ;loop through the message segments and retrieve the field data
 F  D  Q:'DGCURLIN
 . N DGSEG
 . S DGCURLIN=$$NXTSEG^DGROHLUT(DGWRK,DGCURLIN,DGFS,.DGSEG)
 . Q:'DGCURLIN
 . D @(DGSEG("TYPE")_"(.DGSEG,DGCS,DGRS,DGSS,.DGQRY,.DGROERR)")
 Q
 ;
PARSORF(DGWRK,DGHL,DGORF,DGMSG,DGDATA) ;Parse ORF~R04 Message/Segments
 ;Called RCVORF^DGROHLR
 ;  Input:
 ;    DGWRK - Closed root work global reference, ^TMP("DGROHL7",$J)
 ;     DGHL - HL7 environment array
 ;
 ;  Output:
 ;     DGORF - array of ORF results
 ;             "ACKCODE" - acknowledgment code ("AA","AE","AR")
 ;             "DFN"     - DFN
 ;             "ICN"     - patient's Integrated Control Number
 ;             "MSGDTM"  - message creation date/time in FileMan format
 ;             "MSGID"   - Message ID for HL7
 ;             "RCVFAC"  - receiving facility
 ;             "SNDFAC"  - sending facility
 ;    DGDATA - array of patient data to upload, ^TMP("DGROFDA",$J)
 ;     DGMSG - undefined on success, array of MailMan text on failure
 ;
 N DGFS,DGCS,DGRS,DGSS,DGCURLIN
 ;
 S DGFS=DGHL("FS")
 S DGCS=$E(DGHL("ECH"),1)
 S DGRS=$E(DGHL("ECH"),2)
 S DGSS=$E(DGHL("ECH"),4)
 S DGCURLIN=0
 ;
 ;loop through the message segments and retrieve the field data
 F  D  Q:'DGCURLIN
 . N DGSEG
 . S DGCURLIN=$$NXTSEG^DGROHLUT(DGWRK,DGCURLIN,DGFS,.DGSEG)
 . Q:'DGCURLIN
 . I DGSEG("TYPE")'="FDA" D @(DGSEG("TYPE")_"(.DGSEG,DGCS,DGRS,DGSS,.DGORF,.DGMSG)") I 1
 . E  D FDA^DGROHLU(DGWRK,.DGCURLIN,DGFS,DGCS,DGRS,.DGDATA)
 Q
 ;
MSH(DGSEG,DGCS,DGRS,DGSS,DGORF,DGERR) ;
 ;
 ;  Input:
 ;    DGSEG - MSH segment field array
 ;     DGCS - HL7 component separator
 ;     DGRS - HL7 repetition separator
 ;     DGSS - HL7 sub-component separator
 ;
 ;  Output:
 ;    DGORF - array of ORF results
 ;            "SNDFAC" - sending facility
 ;            "RCVFAC" - receiving facility
 ;            "MSGDTM" - message creation date/time in FileMan format
 ;    DGERR - undefined on success, error array on failure
 ;
 D MSH^DGROHLU4(.DGSEG,DGCS,DGRS,DGSS,.DGORF,.DGERR)
 Q
 ;
MSA(DGSEG,DGCS,DGRS,DGSS,DGORF,DGERR) ;
 ;
 ;  Input:
 ;    DGSEG - MSH segment field array
 ;     DGCS - HL7 component separator
 ;     DGRS - HL7 repetition separator
 ;     DGSS - HL7 sub-component separator
 ;
 ;  Output:
 ;    DGORF - array of ORF results
 ;            "ACKCODE" - Acknowledgment code
 ;            "MSGID" - Message Control ID of the message being ACK'ed
 ;    DGERR - undefined on success, error array on failure
 ;
 D MSA^DGROHLU4(.DGSEG,DGCS,DGRS,DGSS,.DGORF,.DGERR)
 Q
 ;
ERR(DGSEG,DGCS,DGRS,DGSS,DGORF,DGERR) ;
 ;
 ;  Input:
 ;    DGSEG - MSH segment field array
 ;     DGCS - HL7 component separator
 ;     DGRS - HL7 repetition separator
 ;     DGSS - HL7 sub-component separator
 ;
 ;  Output:
 ;    DGORF - array of ORF results
 ;    DGERR - undefined on success, error array on failure
 ;
 D ERR^DGROHLU4(.DGSEG,DGCS,DGRS,DGSS,.DGORF,.DGERR)
 Q
 ;
QRD(DGSEG,DGCS,DGRS,DGSS,DGQRY,DGERR) ;
 ;
 ;  Input:
 ;    DGSEG - MSH segment field array
 ;     DGCS - HL7 component separator
 ;     DGRS - HL7 repetition separator
 ;     DGSS - HL7 sub-component separator
 ;
 ;  Output:
 ;    DGQRY("ICN") - Patient's Integrated Control Number
 ;    DGQRY("DFN") - Query ID
 ;   DGQRY("USER") - Query Site user's info   ;DG*5.3*572
 ;           DGERR - undefined on success, error array on failure
 ;                      format: DGERR(seg_id,sequence,fld_pos)=error code
 ;
 S DGQRY("DFN")=$P($G(DGSEG(4)),"~")
 S DGQRY("USER")=$P($G(DGSEG(4)),"~",2,99)
 S DGQRY("ICN")=+$P($G(DGSEG(8)),DGCS,1)
 S DGQRY("PATCH")=$G(DGSEG(5))
 I DGQRY("ICN")="" D
 . S DGERR("QRD",1,8)="NM"
 Q
 ;
QRF(DGSEG,DGCS,DGRS,DGSS,DGQRY,DGERR) ;
 ;
 ;  Input:
 ;    DGSEG - PID segment field array
 ;     DGCS - HL7 component separator
 ;     DGRS - HL7 repetition separator
 ;     DGSS - HL7 sub-component separator
 ;
 ;  Output:
 ;    DGQRY("SSN") - Patient's Social Security Number
 ;    DGQRY("DOB") - Patient's Date of Birth
 ;           DGERR - undefined on success, error array on failure
 ;                   format: DGERR(seg_id,sequence,fld_pos)=error code
 ;
 S DGQRY("SSN")=$G(DGSEG(4))
 I DGQRY("SSN")="" S DGERR("QRF",1,4)="NM"  ;no match
 ;
 S DGQRY("DOB")=+$$HL7TFM^XLFDT($G(DGSEG(5)))
 I DGQRY("DOB")'>0 S DGERR("QRF",1,5)="NM"  ;no match
 Q
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HDGROHLQ3   5333     printed  Sep 23, 2025@20:31:07                                                                                                                                                                                                    Page 2
DGROHLQ3  ;DJH/AMA - ROM HL7 QRY/ORF PROCESSING ; 27 Apr 2004  4:50 PM
 +1       ;;5.3;Registration;**533,572**;Aug 13, 1993
 +2       ;
PARSQRY(DGWRK,DGHL,DGQRY,DGROERR) ;Parse QRY~R02 Message/Segments
 +1       ;Called from RCVQRY^DGROHLR
 +2       ;  Input:
 +3       ;    DGWRK - Closed root global reference, ^TMP("DGROHL7",$J)
 +4       ;     DGHL - VistA HL7 environment array
 +5       ;
 +6       ;  Output:
 +7       ;    DGQRY - Patient lookup components array
 +8       ;   DGROERR - Undefined on success, ERR segment data array on failure
 +9       ;             Format:  DGROERR(seg_id,sequence,fld_pos)=error_code
 +10      ;
 +11      ;field separator
           NEW DGFS
 +12      ;component separator
           NEW DGCS
 +13      ;repetition separator
           NEW DGRS
 +14      ;sub-component separator
           NEW DGSS
 +15      ;current segment line
           NEW DGCURLIN
 +16      ;segment field data array
           NEW DGSEG
 +17      ;error processing array
           NEW DGROERR
 +18      ;
 +19       SET DGFS=DGHL("FS")
 +20       SET DGCS=$EXTRACT(DGHL("ECH"),1)
 +21       SET DGRS=$EXTRACT(DGHL("ECH"),2)
 +22       SET DGSS=$EXTRACT(DGHL("ECH"),4)
 +23       SET DGCURLIN=0
 +24      ;
 +25      ;loop through the message segments and retrieve the field data
 +26       FOR 
               Begin DoDot:1
 +27               NEW DGSEG
 +28               SET DGCURLIN=$$NXTSEG^DGROHLUT(DGWRK,DGCURLIN,DGFS,.DGSEG)
 +29               if 'DGCURLIN
                       QUIT 
 +30               DO @(DGSEG("TYPE")_"(.DGSEG,DGCS,DGRS,DGSS,.DGQRY,.DGROERR)")
               End DoDot:1
               if 'DGCURLIN
                   QUIT 
 +31       QUIT 
 +32      ;
PARSORF(DGWRK,DGHL,DGORF,DGMSG,DGDATA) ;Parse ORF~R04 Message/Segments
 +1       ;Called RCVORF^DGROHLR
 +2       ;  Input:
 +3       ;    DGWRK - Closed root work global reference, ^TMP("DGROHL7",$J)
 +4       ;     DGHL - HL7 environment array
 +5       ;
 +6       ;  Output:
 +7       ;     DGORF - array of ORF results
 +8       ;             "ACKCODE" - acknowledgment code ("AA","AE","AR")
 +9       ;             "DFN"     - DFN
 +10      ;             "ICN"     - patient's Integrated Control Number
 +11      ;             "MSGDTM"  - message creation date/time in FileMan format
 +12      ;             "MSGID"   - Message ID for HL7
 +13      ;             "RCVFAC"  - receiving facility
 +14      ;             "SNDFAC"  - sending facility
 +15      ;    DGDATA - array of patient data to upload, ^TMP("DGROFDA",$J)
 +16      ;     DGMSG - undefined on success, array of MailMan text on failure
 +17      ;
 +18       NEW DGFS,DGCS,DGRS,DGSS,DGCURLIN
 +19      ;
 +20       SET DGFS=DGHL("FS")
 +21       SET DGCS=$EXTRACT(DGHL("ECH"),1)
 +22       SET DGRS=$EXTRACT(DGHL("ECH"),2)
 +23       SET DGSS=$EXTRACT(DGHL("ECH"),4)
 +24       SET DGCURLIN=0
 +25      ;
 +26      ;loop through the message segments and retrieve the field data
 +27       FOR 
               Begin DoDot:1
 +28               NEW DGSEG
 +29               SET DGCURLIN=$$NXTSEG^DGROHLUT(DGWRK,DGCURLIN,DGFS,.DGSEG)
 +30               if 'DGCURLIN
                       QUIT 
 +31               IF DGSEG("TYPE")'="FDA"
                       DO @(DGSEG("TYPE")_"(.DGSEG,DGCS,DGRS,DGSS,.DGORF,.DGMSG)")
                       IF 1
 +32              IF '$TEST
                       DO FDA^DGROHLU(DGWRK,.DGCURLIN,DGFS,DGCS,DGRS,.DGDATA)
               End DoDot:1
               if 'DGCURLIN
                   QUIT 
 +33       QUIT 
 +34      ;
MSH(DGSEG,DGCS,DGRS,DGSS,DGORF,DGERR) ;
 +1       ;
 +2       ;  Input:
 +3       ;    DGSEG - MSH segment field array
 +4       ;     DGCS - HL7 component separator
 +5       ;     DGRS - HL7 repetition separator
 +6       ;     DGSS - HL7 sub-component separator
 +7       ;
 +8       ;  Output:
 +9       ;    DGORF - array of ORF results
 +10      ;            "SNDFAC" - sending facility
 +11      ;            "RCVFAC" - receiving facility
 +12      ;            "MSGDTM" - message creation date/time in FileMan format
 +13      ;    DGERR - undefined on success, error array on failure
 +14      ;
 +15       DO MSH^DGROHLU4(.DGSEG,DGCS,DGRS,DGSS,.DGORF,.DGERR)
 +16       QUIT 
 +17      ;
MSA(DGSEG,DGCS,DGRS,DGSS,DGORF,DGERR) ;
 +1       ;
 +2       ;  Input:
 +3       ;    DGSEG - MSH segment field array
 +4       ;     DGCS - HL7 component separator
 +5       ;     DGRS - HL7 repetition separator
 +6       ;     DGSS - HL7 sub-component separator
 +7       ;
 +8       ;  Output:
 +9       ;    DGORF - array of ORF results
 +10      ;            "ACKCODE" - Acknowledgment code
 +11      ;            "MSGID" - Message Control ID of the message being ACK'ed
 +12      ;    DGERR - undefined on success, error array on failure
 +13      ;
 +14       DO MSA^DGROHLU4(.DGSEG,DGCS,DGRS,DGSS,.DGORF,.DGERR)
 +15       QUIT 
 +16      ;
ERR(DGSEG,DGCS,DGRS,DGSS,DGORF,DGERR) ;
 +1       ;
 +2       ;  Input:
 +3       ;    DGSEG - MSH segment field array
 +4       ;     DGCS - HL7 component separator
 +5       ;     DGRS - HL7 repetition separator
 +6       ;     DGSS - HL7 sub-component separator
 +7       ;
 +8       ;  Output:
 +9       ;    DGORF - array of ORF results
 +10      ;    DGERR - undefined on success, error array on failure
 +11      ;
 +12       DO ERR^DGROHLU4(.DGSEG,DGCS,DGRS,DGSS,.DGORF,.DGERR)
 +13       QUIT 
 +14      ;
QRD(DGSEG,DGCS,DGRS,DGSS,DGQRY,DGERR) ;
 +1       ;
 +2       ;  Input:
 +3       ;    DGSEG - MSH segment field array
 +4       ;     DGCS - HL7 component separator
 +5       ;     DGRS - HL7 repetition separator
 +6       ;     DGSS - HL7 sub-component separator
 +7       ;
 +8       ;  Output:
 +9       ;    DGQRY("ICN") - Patient's Integrated Control Number
 +10      ;    DGQRY("DFN") - Query ID
 +11      ;   DGQRY("USER") - Query Site user's info   ;DG*5.3*572
 +12      ;           DGERR - undefined on success, error array on failure
 +13      ;                      format: DGERR(seg_id,sequence,fld_pos)=error code
 +14      ;
 +15       SET DGQRY("DFN")=$PIECE($GET(DGSEG(4)),"~")
 +16       SET DGQRY("USER")=$PIECE($GET(DGSEG(4)),"~",2,99)
 +17       SET DGQRY("ICN")=+$PIECE($GET(DGSEG(8)),DGCS,1)
 +18       SET DGQRY("PATCH")=$GET(DGSEG(5))
 +19       IF DGQRY("ICN")=""
               Begin DoDot:1
 +20               SET DGERR("QRD",1,8)="NM"
               End DoDot:1
 +21       QUIT 
 +22      ;
QRF(DGSEG,DGCS,DGRS,DGSS,DGQRY,DGERR) ;
 +1       ;
 +2       ;  Input:
 +3       ;    DGSEG - PID segment field array
 +4       ;     DGCS - HL7 component separator
 +5       ;     DGRS - HL7 repetition separator
 +6       ;     DGSS - HL7 sub-component separator
 +7       ;
 +8       ;  Output:
 +9       ;    DGQRY("SSN") - Patient's Social Security Number
 +10      ;    DGQRY("DOB") - Patient's Date of Birth
 +11      ;           DGERR - undefined on success, error array on failure
 +12      ;                   format: DGERR(seg_id,sequence,fld_pos)=error code
 +13      ;
 +14       SET DGQRY("SSN")=$GET(DGSEG(4))
 +15      ;no match
           IF DGQRY("SSN")=""
               SET DGERR("QRF",1,4)="NM"
 +16      ;
 +17       SET DGQRY("DOB")=+$$HL7TFM^XLFDT($GET(DGSEG(5)))
 +18      ;no match
           IF DGQRY("DOB")'>0
               SET DGERR("QRF",1,5)="NM"
 +19       QUIT