[613] | 1 | RORUTL18 ;HCIOFO/SG - MISCELLANEOUS UTILITIES ; 4/4/07 1:19pm
|
---|
| 2 | ;;1.5;CLINICAL CASE REGISTRIES;**2**;Feb 17, 2006;Build 6
|
---|
| 3 | ;
|
---|
| 4 | ; This routine uses the following IA's:
|
---|
| 5 | ;
|
---|
| 6 | ; #10035 Access to the field #63 of the file #2
|
---|
| 7 | ;
|
---|
| 8 | Q
|
---|
| 9 | ;
|
---|
| 10 | ;***** STRIPS NON-NUMERIC CHARACTERS FROM THE LAB RESULT VALUE
|
---|
| 11 | ;
|
---|
| 12 | ; VAL Source value
|
---|
| 13 | ;
|
---|
| 14 | CLRNMVAL(VAL) ;
|
---|
| 15 | Q $TR(VAL," <>,")
|
---|
| 16 | ;
|
---|
| 17 | ;***** CHECKS FOR 'CONFIRMED' STATUS
|
---|
| 18 | ;
|
---|
| 19 | ; IEN IEN of the registry record (in file #798)
|
---|
| 20 | ;
|
---|
| 21 | ; Return Values:
|
---|
| 22 | ; 0 Not confirmed
|
---|
| 23 | ; >0 Confirmation date/time
|
---|
| 24 | ;
|
---|
| 25 | CONFDT(IEN) ;
|
---|
| 26 | N CONF S CONF=$P($G(^RORDATA(798,+IEN,0)),U,4,5)
|
---|
| 27 | Q $S('$P(CONF,U,2):$P(CONF,U),1:0)
|
---|
| 28 | ;
|
---|
| 29 | ;***** DATE RANGE COMPARISON FUNCTIONS
|
---|
| 30 | DTMAX(DT1,DT2) ;
|
---|
| 31 | I DT1>0 Q $S(DT2>DT1:DT2,1:DT1)
|
---|
| 32 | Q $S(DT2>0:DT2,1:0)
|
---|
| 33 | ;
|
---|
| 34 | DTMIN(DT1,DT2) ;
|
---|
| 35 | I DT1>0 Q $S(DT2'>0:DT1,DT2<DT1:DT2,1:DT1)
|
---|
| 36 | Q $S(DT2>0:DT2,1:0)
|
---|
| 37 | ;
|
---|
| 38 | ;***** RETURNS THE INSTITUTION IEN FOR THE HOSPITAL LOCATION
|
---|
| 39 | ;
|
---|
| 40 | ; IEN44 IEN in the HOSPITAL LOCATION file (#44)
|
---|
| 41 | ;
|
---|
| 42 | ; Return Values:
|
---|
| 43 | ; <0 Error
|
---|
| 44 | ; "" Location has no corresponding institution
|
---|
| 45 | ; >0 Institution IEN
|
---|
| 46 | ;
|
---|
| 47 | IEN4(IEN44) ;
|
---|
| 48 | N IEN4,RC,RORMSG
|
---|
| 49 | Q:$G(IEN44)'>0 ""
|
---|
| 50 | S IEN4=+$$GET1^DIQ(44,IEN44_",",3,"I",,"RORMSG")
|
---|
| 51 | Q:$G(DIERR) $$DBS^RORERR("RORMSG",-9,,,44,IEN44_",")
|
---|
| 52 | Q $S(IEN4>0:IEN4,1:"")
|
---|
| 53 | ;
|
---|
| 54 | ;***** RETURNS A LAB REFERENCE (IEN IN 'LAB DATA') FOR THE PATIENT
|
---|
| 55 | ;
|
---|
| 56 | ; PTIEN Patient IEN
|
---|
| 57 | ;
|
---|
| 58 | ; Return values:
|
---|
| 59 | ; <0 Error code
|
---|
| 60 | ; 0 No lab data
|
---|
| 61 | ; >0 IEN of the record in LAB DATA file
|
---|
| 62 | ;
|
---|
| 63 | LABREF(PTIEN) ;
|
---|
| 64 | N LABREF,RORMSG
|
---|
| 65 | Q:$G(PTIEN)'>0 0
|
---|
| 66 | Q:$$MERGED(PTIEN) 0
|
---|
| 67 | S LABREF=+$$GET1^DIQ(2,PTIEN_",",63,"I",,"RORMSG")
|
---|
| 68 | Q:$G(DIERR) $$DBS^RORERR("RORMSG",-9,,PTIEN,2,PTIEN_",")
|
---|
| 69 | Q LABREF
|
---|
| 70 | ;
|
---|
| 71 | ;***** RETURNS THE NEW DFN OF A MERGED PATIENT RECORD
|
---|
| 72 | ;
|
---|
| 73 | ; DFN Patient IEN
|
---|
| 74 | ;
|
---|
| 75 | ; Return values:
|
---|
| 76 | ; 0 The patient has not been merged
|
---|
| 77 | ; >0 New DFN
|
---|
| 78 | ;
|
---|
| 79 | MERGED(DFN) ;
|
---|
| 80 | N NEWDFN
|
---|
| 81 | F S DFN=+$G(^DPT(+DFN,-9)) Q:DFN'>0 S NEWDFN=DFN
|
---|
| 82 | Q +$G(NEWDFN)
|
---|
| 83 | ;
|
---|
| 84 | ;***** SENDS THE CPRS-COMPATIBLE INFORMATIONAL ALERT
|
---|
| 85 | ;
|
---|
| 86 | ; MSG Text of the alert message. The text is truncated
|
---|
| 87 | ; to 50 characters and '^' are replaced with '~'.
|
---|
| 88 | ;
|
---|
| 89 | ; [DFN] Patient IEN
|
---|
| 90 | ;
|
---|
| 91 | ; [.XQA] List of addressees. By default, the
|
---|
| 92 | ; alert is sent to the current user.
|
---|
| 93 | ;
|
---|
| 94 | ORALERT(MSG,DFN,XQA) ;
|
---|
| 95 | N LAST4,NAME,VA,VADM,VAHOW,VAROOT,XQADATA,XQAID,XQAMSG,XQAROU
|
---|
| 96 | S XQAMSG="",XQAID="ROR,,"
|
---|
| 97 | I $G(DFN)>0 D
|
---|
| 98 | . D DEM^VADPT
|
---|
| 99 | . S NAME=$E($G(VADM(1)),1,9) ; Patient name
|
---|
| 100 | . S LAST4=$E($P($G(VADM(2)),U),6,9) ; Last 4 of SSN
|
---|
| 101 | . S XQAMSG=$$LJ^XLFSTR(NAME_" ("_$E(NAME,1)_LAST4_"):",19)
|
---|
| 102 | . S $P(XQAID,",",2)=+DFN
|
---|
| 103 | S XQAMSG=XQAMSG_$TR(MSG,"^","~")
|
---|
| 104 | S:$L(XQAMSG)>70 $E(XQAMSG,68,999)="..."
|
---|
| 105 | I $D(XQA)<10 Q:$G(DUZ)'>0 S XQA(+DUZ)=""
|
---|
| 106 | D SETUP^XQALERT
|
---|
| 107 | Q
|
---|
| 108 | ;
|
---|
| 109 | ;***** CHECKS FOR 'PENDING' STATUS
|
---|
| 110 | ;
|
---|
| 111 | ; IEN IEN of the registry record (in file #798)
|
---|
| 112 | ;
|
---|
| 113 | ; Return Values:
|
---|
| 114 | ; 0 Non-pending
|
---|
| 115 | ; 1 Pending patient
|
---|
| 116 | ;
|
---|
| 117 | PENDING(IEN) ;
|
---|
| 118 | Q ($P($G(^RORDATA(798,+IEN,0)),U,5)=4)
|
---|
| 119 | ;
|
---|
| 120 | ;***** EMULATES $QUERY WITH 'DIRECTION' PARAMETER
|
---|
| 121 | ;
|
---|
| 122 | ; NODE Closed root of a node
|
---|
| 123 | ;
|
---|
| 124 | ; [DIR] Direction:
|
---|
| 125 | ; $G(DIR)'<0 forward
|
---|
| 126 | ; DIR<0 backward
|
---|
| 127 | ;
|
---|
| 128 | Q(NODE,DIR) ;
|
---|
| 129 | Q:$G(DIR)'<0 $Q(@NODE)
|
---|
| 130 | N I,DN,PI,TMP
|
---|
| 131 | S TMP=$QL(NODE) Q:TMP'>0 ""
|
---|
| 132 | S I=$QS(NODE,TMP),NODE=$NA(@NODE,TMP-1)
|
---|
| 133 | S PI=""
|
---|
| 134 | F S I=$O(@NODE@(I),-1) Q:I="" D Q:PI'=""
|
---|
| 135 | . S DN=$D(@NODE@(I))
|
---|
| 136 | . I DN#10 S PI=$NA(@NODE@(I)) Q
|
---|
| 137 | . S:DN>1 PI=$$Q($NA(@NODE@(I,"")),-1)
|
---|
| 138 | Q PI
|
---|
| 139 | ;
|
---|
| 140 | ;***** COUNTS THE REGISTRY PATIENTS
|
---|
| 141 | ;
|
---|
| 142 | ; .REGLST Reference to a local array containing registry
|
---|
| 143 | ; names as the subscripts and optional registry IENs
|
---|
| 144 | ; as the values.
|
---|
| 145 | ;
|
---|
| 146 | ; [FLAGS] Flags (can be combined)
|
---|
| 147 | ; A Skip non-active patients
|
---|
| 148 | ; S Skip patients marked as "Do not Send"
|
---|
| 149 | ;
|
---|
| 150 | ; [ROR8DST] Closed root of the global node that will contain a
|
---|
| 151 | ; list of patients. By default ($G(ROR8DST)=""), the
|
---|
| 152 | ; ^TMP("RORUTL18",$J) global node is used internally
|
---|
| 153 | ; (it is deleted before exiting the function).
|
---|
| 154 | ; @ROR8DST@(
|
---|
| 155 | ; PatIEN,
|
---|
| 156 | ; RegIEN) Registry Record IEN
|
---|
| 157 | ;
|
---|
| 158 | ; Return Values:
|
---|
| 159 | ; <0 Error code
|
---|
| 160 | ; 0 All provided registries are empty
|
---|
| 161 | ; >0 Number of unique patients
|
---|
| 162 | ;
|
---|
| 163 | REGPTCNT(REGLST,FLAGS,ROR8DST) ;
|
---|
| 164 | N CNT,IEN,NODE,PLKILL,PTIEN,REGIEN,REGNAME
|
---|
| 165 | S:$G(ROR8DST)="" ROR8DST=$NA(^TMP("RORUTL18",$J)),PLKILL=1
|
---|
| 166 | S FLAGS=$G(FLAGS),NODE=$$ROOT^DILFD(798,"",1),CNT=0
|
---|
| 167 | K @ROR8DST
|
---|
| 168 | ;--- Build a list of unique patients and count them
|
---|
| 169 | S REGNAME=""
|
---|
| 170 | F S REGNAME=$O(REGLST(REGNAME)) Q:REGNAME="" D
|
---|
| 171 | . ;--- Get the registry IEN
|
---|
| 172 | . S REGIEN=+$G(REGLST(REGNAME))
|
---|
| 173 | . I REGIEN'>0 D Q:REGIEN'>0
|
---|
| 174 | . . S REGIEN=$$REGIEN^RORUTL02(REGNAME)
|
---|
| 175 | . ;--- Count the registry patients
|
---|
| 176 | . S IEN=0
|
---|
| 177 | . F S IEN=$O(@NODE@("AC",REGIEN,IEN)) Q:IEN'>0 D
|
---|
| 178 | . . I FLAGS["A" Q:'$$ACTIVE^RORDD(IEN)
|
---|
| 179 | . . I FLAGS["S" Q:$P($G(^RORDATA(798,IEN,2)),U,4)
|
---|
| 180 | . . S PTIEN=$$PTIEN^RORUTL01(IEN) Q:PTIEN'>0
|
---|
| 181 | . . I '$D(@ROR8DST@(PTIEN)) D S CNT=CNT+1
|
---|
| 182 | . . . S @ROR8DST@(PTIEN,REGIEN)=IEN
|
---|
| 183 | ;--- Cleanup
|
---|
| 184 | K:$G(PLKILL) @ROR8DST
|
---|
| 185 | Q CNT
|
---|
| 186 | ;
|
---|
| 187 | ;***** SELECTS A REGISTRY DESCRIPTOR IN THE FILE #798.1
|
---|
| 188 | ;
|
---|
| 189 | ; [.REGNAME] Registry name is returned via this parameter
|
---|
| 190 | ;
|
---|
| 191 | ; Return Values:
|
---|
| 192 | ; <0 Error code
|
---|
| 193 | ; "" Timeout, "^" entered, or an error in ^DIC
|
---|
| 194 | ; 0 There are no records in the file #798.1
|
---|
| 195 | ; >0 IEN of the selected registry
|
---|
| 196 | ;
|
---|
| 197 | SELREG(REGNAME) ;
|
---|
| 198 | N DA,DIC,DLAYGO,DTOUT,DUOUT,RC,RORBUF,RORMSG,X,Y
|
---|
| 199 | S REGNAME=""
|
---|
| 200 | ;--- If there are less than two records, do not ask a user
|
---|
| 201 | D LIST^DIC(798.1,,"@;.01E",,2,,,"B",,,"RORBUF","RORMSG")
|
---|
| 202 | Q:$G(DIERR) $$DBS^RORERR("RORMSG",-9,,,798.1)
|
---|
| 203 | I $G(RORBUF("DILIST",0))<2 D Q +$G(RORBUF("DILIST",2,1))
|
---|
| 204 | . S REGNAME=$G(RORBUF("DILIST","ID",1,.01))
|
---|
| 205 | ;--- Select a registry
|
---|
| 206 | S DIC=798.1,DIC(0)="AENQZ"
|
---|
| 207 | S DIC("A")="Select a Registry: "
|
---|
| 208 | D ^DIC
|
---|
| 209 | S:Y>0 REGNAME=Y(0,0)
|
---|
| 210 | Q $S($D(DTOUT)!$D(DUOUT):"",Y<0:"",1:+Y)
|
---|
| 211 | ;
|
---|
| 212 | ;***** RETURNS THE CLINIC'S STOP CODE
|
---|
| 213 | ;
|
---|
| 214 | ; CLIEN Clinic IEN
|
---|
| 215 | ;
|
---|
| 216 | ; Return Values:
|
---|
| 217 | ; <0 Error code
|
---|
| 218 | ; "" No stop code
|
---|
| 219 | ; >0 Stop code
|
---|
| 220 | ;
|
---|
| 221 | STOPCODE(CLIEN) ;
|
---|
| 222 | N RORMSG,STOP
|
---|
| 223 | I CLIEN>0 D
|
---|
| 224 | . S STOP=$$GET1^DIQ(44,CLIEN_",","#8:#1","I",,"RORMSG")
|
---|
| 225 | . S:$G(DIERR) STOP=$$DBS^RORERR("RORMSG",-99,,,44,CLIEN_",")
|
---|
| 226 | E S STOP=""
|
---|
| 227 | Q STOP
|
---|