[613] | 1 | DGPFHLUQ ;ALB/RPM - PRF HL7 INTERACTIVE QUERY ; 8/24/06
|
---|
| 2 | ;;5.3;Registration;**650**;Aug 13, 1993;Build 3
|
---|
| 3 | ;
|
---|
| 4 | Q ;no direct entry
|
---|
| 5 | ;
|
---|
| 6 | EN ;entry point
|
---|
| 7 | ;This procedure prompts the user to select a patient and the facility
|
---|
| 8 | ;that they wish to check for existing Category I patient record flags.
|
---|
| 9 | ;An HL7 query is then sent to the selected facility.
|
---|
| 10 | ;
|
---|
| 11 | N DGDFN ;pointer to patient in PATIENT (#2) file
|
---|
| 12 | N DGFAC ;selected facility
|
---|
| 13 | N DGTF ;array of treating facilities
|
---|
| 14 | N DGPAT ;selected patient
|
---|
| 15 | N DGRSLT ;result of query call
|
---|
| 16 | ;
|
---|
| 17 | ;select patient
|
---|
| 18 | W !!
|
---|
| 19 | D SELPAT^DGPFUT1(.DGPAT)
|
---|
| 20 | Q:+$G(DGPAT)'>0
|
---|
| 21 | S DGDFN=+DGPAT
|
---|
| 22 | ;
|
---|
| 23 | ;build list of valid query facilities
|
---|
| 24 | I '$$BLDTFL^DGPFUT2(DGDFN,.DGTF) D Q
|
---|
| 25 | . N DGLINE
|
---|
| 26 | . S DGLINE(1)=""
|
---|
| 27 | . S DGLINE(3)="* No treating facilities are available to query. *"
|
---|
| 28 | . S $P(DGLINE(2),"*",$L(DGLINE(3)))="*"
|
---|
| 29 | . S DGLINE(4)=DGLINE(2)
|
---|
| 30 | . S DGLINE(5)=""
|
---|
| 31 | . D EN^DDIOL(.DGLINE)
|
---|
| 32 | . I $$CONTINUE^DGPFUT()
|
---|
| 33 | ;
|
---|
| 34 | ;select facility
|
---|
| 35 | S DGFAC=$$ANSWER^DGPFUT("Select facility to query",$P($$NS^XUAF4($$GETNXTF^DGPFUT(DGDFN)),U),"P^4:EMZ","","I $D(DGTF(+Y))")
|
---|
| 36 | Q:DGFAC'>0
|
---|
| 37 | S DGFAC=$$STA^XUAF4(DGFAC)
|
---|
| 38 | ;
|
---|
| 39 | ;send query and build display
|
---|
| 40 | S DGRSLT=$$SNDQRY^DGPFHLS(DGDFN,3,DGFAC)
|
---|
| 41 | ;
|
---|
| 42 | Q
|
---|
| 43 | ;
|
---|
| 44 | ;
|
---|
| 45 | DISPLAY(DGMTIEN,DGRESULT) ;DISPLAY RESULTS
|
---|
| 46 | ;This procedure is the entry point called from SNDQRY^DGPFHLS that
|
---|
| 47 | ;parses and displays the returned Response to Observation Query
|
---|
| 48 | ;(ORF~R04) HL7 message.
|
---|
| 49 | ;
|
---|
| 50 | ; Input:
|
---|
| 51 | ; DGMTIEN - if positive a response was returned from destination;
|
---|
| 52 | ; otherwise, no response was returned
|
---|
| 53 | ; DGRESULT - result parameter from HLMA call
|
---|
| 54 | ;
|
---|
| 55 | ; Output: none
|
---|
| 56 | ;
|
---|
| 57 | N DGANS ;pause response
|
---|
| 58 | N DGCNT ;continuation node counter
|
---|
| 59 | N DGERR ;parsed message error results array
|
---|
| 60 | N DGFACNAM ;facility name
|
---|
| 61 | N DGORF ;parsed data array name
|
---|
| 62 | N DGSEGCNT ;segment counter
|
---|
| 63 | N DGSTA ;station number
|
---|
| 64 | N DGTEXT ;message text array
|
---|
| 65 | N DGWRK ;HL7 segments array name
|
---|
| 66 | ;
|
---|
| 67 | ;if HL7 package reports failure, notify user and quit
|
---|
| 68 | I +$G(DGMTIEN)<1!(+$P($G(DGRESULT),U,2)) D Q
|
---|
| 69 | . K DGTEXT
|
---|
| 70 | . S DGTEXT(1)="The facility failed to respond to the query request."
|
---|
| 71 | . D SHOWMSG(.DGTEXT,"*")
|
---|
| 72 | . I $$ANSWER^DGPFUT("Enter RETURN to continue","","E")
|
---|
| 73 | ;
|
---|
| 74 | S DGWRK=$NA(^TMP("DGPFHL7",$J))
|
---|
| 75 | K @DGWRK
|
---|
| 76 | S DGORF=$NA(^TMP("DGPF",$J))
|
---|
| 77 | K @DGORF
|
---|
| 78 | ;
|
---|
| 79 | ;load work global with segments
|
---|
| 80 | F DGSEGCNT=1:1 X HLNEXT Q:HLQUIT'>0 D
|
---|
| 81 | . S DGCNT=0
|
---|
| 82 | . S @DGWRK@(DGSEGCNT,DGCNT)=HLNODE
|
---|
| 83 | . F S DGCNT=$O(HLNODE(DGCNT)) Q:'DGCNT D
|
---|
| 84 | . . S @DGWRK@(DGSEGCNT,DGCNT)=HLNODE(DGCNT)
|
---|
| 85 | ;
|
---|
| 86 | ;parse segments and load into data array
|
---|
| 87 | D PARSORF^DGPFHLQ4(DGWRK,.HL,DGORF,.DGERR)
|
---|
| 88 | ;
|
---|
| 89 | ;get facility name from message
|
---|
| 90 | S DGSTA=$G(@DGORF@("SNDFAC"))
|
---|
| 91 | S DGFACNAM=$$EXTERNAL^DILFD(26.13,.04,"F",$$IEN^XUAF4(DGSTA))
|
---|
| 92 | ;
|
---|
| 93 | ;when assignments are returned, file any that are missing locally
|
---|
| 94 | ;and display all returned assignments
|
---|
| 95 | I $O(@DGORF@(0)) D
|
---|
| 96 | . ;
|
---|
| 97 | . N DGDFN ;patient
|
---|
| 98 | . N DGFLG ;flag name
|
---|
| 99 | . N DGI ;generic index
|
---|
| 100 | . N DGPRE ;list of flag assignments prior to filing
|
---|
| 101 | . N DGPRECNT ;count of flag assignments prior to filing
|
---|
| 102 | . N DGPST ;list of flag assignments following filing
|
---|
| 103 | . ;
|
---|
| 104 | . S DGDFN=$$GETDFN^MPIF001(+$G(@DGORF@("ICN")))
|
---|
| 105 | . ;
|
---|
| 106 | . ;get list of existing Cat I assignments
|
---|
| 107 | . S DGPRECNT=$$GETFNAME(DGDFN,.DGPRE)
|
---|
| 108 | . ;
|
---|
| 109 | . ;store the returned assignments
|
---|
| 110 | . I $$STOORF^DGPFHLR(DGDFN,DGORF) ;naked IF
|
---|
| 111 | . ;
|
---|
| 112 | . ;get updated list of Cat I assignments and notify user when
|
---|
| 113 | . ;assignments are added
|
---|
| 114 | . I $$GETFNAME(DGDFN,.DGPST)>DGPRECNT D
|
---|
| 115 | . . K DGTEXT
|
---|
| 116 | . . ;
|
---|
| 117 | . . ;remove pre-existing flags from assignment list
|
---|
| 118 | . . S DGFLG=""
|
---|
| 119 | . . F S DGFLG=$O(DGPST(DGFLG)) Q:DGFLG="" K:$D(DGPRE(DGFLG)) DGPST(DGFLG)
|
---|
| 120 | . . ;build user message
|
---|
| 121 | . . S DGTEXT(1)="The following Category I Patient Record Flag Assignments"
|
---|
| 122 | . . S DGTEXT(2)="were returned and filed on your system:"
|
---|
| 123 | . . S DGFLG=""
|
---|
| 124 | . . F DGI=3:1 S DGFLG=$O(DGPST(DGFLG)) Q:DGFLG="" D
|
---|
| 125 | . . . S DGTEXT(DGI)=" "_DGFLG
|
---|
| 126 | . . D SHOWMSG(.DGTEXT,"*")
|
---|
| 127 | . . S DGANS=$$ANSWER^DGPFUT("Enter RETURN to view query results","","E")
|
---|
| 128 | . ;
|
---|
| 129 | . ;display query results
|
---|
| 130 | . I +$G(DGANS)>-1 D EN^DGPFLMQ(DGORF)
|
---|
| 131 | ;
|
---|
| 132 | ;otherwise notify user that none were found
|
---|
| 133 | E D
|
---|
| 134 | . K DGTEXT
|
---|
| 135 | . S DGTEXT(1)="No Category I Patient Record Flag Assignments found for"
|
---|
| 136 | . S DGTEXT(2)="this patient at "_DGFACNAM_" ("_DGSTA_")."
|
---|
| 137 | . D SHOWMSG(.DGTEXT,"*")
|
---|
| 138 | . I $$ANSWER^DGPFUT("Enter RETURN to continue","","E")
|
---|
| 139 | ;
|
---|
| 140 | ;cleanup
|
---|
| 141 | K @DGWRK
|
---|
| 142 | K @DGORF
|
---|
| 143 | Q
|
---|
| 144 | ;
|
---|
| 145 | GETFNAME(DGDFN,DGFLGS) ;get list of assigned flag names
|
---|
| 146 | ;
|
---|
| 147 | ; Input:
|
---|
| 148 | ; DGDFN
|
---|
| 149 | ;
|
---|
| 150 | ; Output:
|
---|
| 151 | ; Function value - count of assigned flag names
|
---|
| 152 | ; DGFLGS - array of assigned flag names
|
---|
| 153 | ; Ex. DGFLGS("FLAGNAME")=""
|
---|
| 154 | ;
|
---|
| 155 | N DGASGN ;PRF assignments array
|
---|
| 156 | N DGCNT ;assigned flag name count
|
---|
| 157 | N DGPFA ;assignment data array
|
---|
| 158 | N DGIEN ;assignment record#
|
---|
| 159 | ;
|
---|
| 160 | S DGCNT=0
|
---|
| 161 | I $$GETALL^DGPFAA(DGDFN,.DGASGN,"",1) D
|
---|
| 162 | . S DGIEN=0
|
---|
| 163 | . F S DGIEN=$O(DGASGN(DGIEN)) Q:'DGIEN D
|
---|
| 164 | . . I $$GETASGN^DGPFAA(DGIEN,.DGPFA) D
|
---|
| 165 | . . . S DGFLGS($P(DGPFA("FLAG"),U,2))=""
|
---|
| 166 | . . . S DGCNT=DGCNT+1
|
---|
| 167 | Q DGCNT
|
---|
| 168 | ;
|
---|
| 169 | SHOWMSG(DGTEXT,DGBCHAR) ;format and display user message
|
---|
| 170 | ;
|
---|
| 171 | ; Input:
|
---|
| 172 | ; DGTEXT - array of lines to display
|
---|
| 173 | ; DGBCHAR - border character (optional [DEFAULT="*"])
|
---|
| 174 | ;
|
---|
| 175 | ; Output: none
|
---|
| 176 | ;
|
---|
| 177 | N DGBLNK ;blank line
|
---|
| 178 | N DGBORDER ;border string
|
---|
| 179 | N DGCNT ;line counter
|
---|
| 180 | N DGI ;generic index
|
---|
| 181 | N DGLEN ;line length
|
---|
| 182 | N DGLINE ;formatted text line
|
---|
| 183 | N DGMAX ;max line length
|
---|
| 184 | ;
|
---|
| 185 | S DGBCHAR=$S($G(DGBCHAR)?1.ANP:$E(DGBCHAR),1:"*")
|
---|
| 186 | ;determine max line length
|
---|
| 187 | S (DGI,DGCNT,DGMAX)=0
|
---|
| 188 | F S DGI=$O(DGTEXT(DGI)) Q:'DGI D
|
---|
| 189 | . S DGLEN=$L(DGTEXT(DGI))
|
---|
| 190 | . I DGLEN>(IOM-4) D
|
---|
| 191 | . . S DGTEXT(DGI+.1)=$E(DGTEXT(DGI),IOM-3,DGLEN)
|
---|
| 192 | . . S DGTEXT(DGI)=$E(DGTEXT(DGI),1,IOM-4)
|
---|
| 193 | . . S DGLEN=IOM-4
|
---|
| 194 | . S:DGLEN>DGMAX DGMAX=DGLEN
|
---|
| 195 | S $P(DGBLNK," ",DGMAX+1)=""
|
---|
| 196 | S $P(DGBORDER,DGBCHAR,DGMAX+5)=""
|
---|
| 197 | S DGCNT=DGCNT+1
|
---|
| 198 | S DGLINE(DGCNT)=""
|
---|
| 199 | S DGCNT=DGCNT+1
|
---|
| 200 | S DGLINE(DGCNT)=DGBORDER
|
---|
| 201 | S DGI=0
|
---|
| 202 | F S DGI=$O(DGTEXT(DGI)) Q:'DGI D
|
---|
| 203 | . S DGCNT=DGCNT+1
|
---|
| 204 | . S DGLINE(DGCNT)=DGBCHAR_" "_DGTEXT(DGI)_$E(DGBLNK,1,$L(DGBLNK)-$L(DGTEXT(DGI)))_" "_DGBCHAR
|
---|
| 205 | S DGCNT=DGCNT+1
|
---|
| 206 | S DGLINE(DGCNT)=DGBORDER
|
---|
| 207 | S DGCNT=DGCNT+1
|
---|
| 208 | S DGLINE(DGCNT)=""
|
---|
| 209 | D EN^DDIOL(.DGLINE)
|
---|
| 210 | ;
|
---|
| 211 | Q
|
---|