| 1 | TMGHRPC2        ;TMG/elh/Support Functions for TMG_CPRS ;10/20/09
 | 
|---|
| 2 |                 ;;1.0;TMG-LIB;**1**;10/20/09;Build 3
 | 
|---|
| 3 |         ;
 | 
|---|
| 4 |         ;"Eddie Hagood
 | 
|---|
| 5 |         ;"GNU Lessor General Public License (LGPL) applies
 | 
|---|
| 6 |         ;"10/20/09
 | 
|---|
| 7 |         ;
 | 
|---|
| 8 |         ;"=======================================================================
 | 
|---|
| 9 |         ;" RPC -- Public Functions.
 | 
|---|
| 10 |         ;"=======================================================================
 | 
|---|
| 11 |         ;" <none>
 | 
|---|
| 12 |         ;"=======================================================================
 | 
|---|
| 13 |         ;"PRIVATE API FUNCTIONS
 | 
|---|
| 14 |         ;"=======================================================================
 | 
|---|
| 15 |         ;" ;
 | 
|---|
| 16 |         ;"=======================================================================
 | 
|---|
| 17 |         ;"Dependencies:
 | 
|---|
| 18 |         ;" ;
 | 
|---|
| 19 |         ;"=======================================================================
 | 
|---|
| 20 |         ;
 | 
|---|
| 21 | LISTALL(Y,FROM,DIR)         ; Return a bolus of patient names.  From is either Name or IEN^Name.
 | 
|---|
| 22 |           merge ^TMG("TMP","RPC","LISTALL^TMGHRPC2","FROM")=FROM
 | 
|---|
| 23 |           merge ^TMG("TMP","RPC","LISTALL^TMGHRPC2","DIR")=DIR
 | 
|---|
| 24 |           ;"IF $EXTRACT(FROM,1)="." DO INEXACT(.Y,FROM,.DIR) QUIT
 | 
|---|
| 25 |           IF $$WEDGE^TMGHRPC2(.Y,FROM,.DIR) QUIT
 | 
|---|
| 26 |           IF FROM'="" DO INEXACT(.Y,FROM,.DIR) QUIT
 | 
|---|
| 27 |           DO LISTALL^ORWPT(.Y,.FROM,.DIR)
 | 
|---|
| 28 |           QUIT
 | 
|---|
| 29 |           ;
 | 
|---|
| 30 | WEDGE(OUT,FROM,DIR)     ; 
 | 
|---|
| 31 |           ;"Purpose: Return a bolus of patient names, handling a leading date
 | 
|---|
| 32 |           ;"Input: OUT --  Out parameter, pass by reference.
 | 
|---|
| 33 |           ;"       FROM -- User specified string to search from.
 | 
|---|
| 34 |           ;"                If in format of a date, then handled here.  Otherwise
 | 
|---|
| 35 |           ;"                this function quits, and handling will occur elsewhere
 | 
|---|
| 36 |           ;".               Input can be either Name or IEN^Name (but later not
 | 
|---|
| 37 |           ;"                   handled here)
 | 
|---|
| 38 |           ;"                Example of Input: '10/1/67 Too~'
 | 
|---|
| 39 |           ;"                Note: CPRS decrements the terminal character of user
 | 
|---|
| 40 |           ;"                   input, and adds a ~   
 | 
|---|
| 41 |           ;"       DIR -- should be 1 or -1
 | 
|---|
| 42 |           ;"Results: 1 if handled, 0 if not handled.
 | 
|---|
| 43 |           ;"
 | 
|---|
| 44 |           NEW TMGCH,TMGTEMP,TMGTNAME,TMGSUBIEN,TMGB,TMGABORT
 | 
|---|
| 45 |           NEW I,IEN,CNT,FROMIEN,TMGNAME,TMGA,TMGANAME,TMGRESULT
 | 
|---|
| 46 |           NEW %DT,X,Y
 | 
|---|
| 47 |           SET CNT=44,I=0,TMGABORT=0
 | 
|---|
| 48 |           SET DIR=$GET(DIR,1)
 | 
|---|
| 49 |           SET TMGRESULT=0  ;"Default to failure
 | 
|---|
| 50 |           SET TMGA=$PIECE(FROM," ",1)
 | 
|---|
| 51 |           SET TMGB=$PIECE(FROM," ",2)
 | 
|---|
| 52 |           IF $$ISPHONE(FROM) QUIT $$HANDLEPHONE(.OUT,.FROM,.DIR)
 | 
|---|
| 53 |           IF $$ISMONTH(TMGA) DO
 | 
|---|
| 54 |           . NEW YEAR SET YEAR=$P(FROM," ",3)
 | 
|---|
| 55 |           . IF (YEAR?2.4N) DO
 | 
|---|
| 56 |           . . SET TMGA=$PIECE(FROM," ",1,3)
 | 
|---|
| 57 |           . . SET TMGB=$PIECE(FROM," ",4)
 | 
|---|
| 58 |           . ELSE  DO
 | 
|---|
| 59 |           . . SET TMGA=$PIECE(FROM," ",1,2)
 | 
|---|
| 60 |           . . SET TMGB=$PIECE(FROM," ",3)
 | 
|---|
| 61 |           ELSE  DO  
 | 
|---|
| 62 |           . ;"Test for nN/nN/nnNN pattern
 | 
|---|
| 63 |           . IF '(TMGA?1.2N1(1"-",1"/")1.2N1(1"-",1"/")2.4E0.1"~") SET TMGABORT=1
 | 
|---|
| 64 |           IF TMGABORT GOTO WQ
 | 
|---|
| 65 |           SET TMGA=$TRANSLATE(TMGA,"~","")
 | 
|---|
| 66 |           IF (DIR=1),TMGB="" DO   ;"Reverse CPRS's inc/dec of terminal digit if isolated date
 | 
|---|
| 67 |           . SET TMGCH=$E(TMGA,$L(TMGA))
 | 
|---|
| 68 |           . SET TMGCH=$CHAR($ASCII(TMGCH)+DIR)
 | 
|---|
| 69 |           . SET TMGA=$E(TMGA,1,$L(TMGA)-1)_TMGCH
 | 
|---|
| 70 |           SET %DT="P" ;"Assume past dates
 | 
|---|
| 71 |           SET X=TMGA
 | 
|---|
| 72 |           DO ^%DT  ;"convert external date to FM Date
 | 
|---|
| 73 |           IF Y=-1 GOTO WQ
 | 
|---|
| 74 |           SET IEN=0 
 | 
|---|
| 75 |           ;"Gather ALL patients with specified DOB, so can be sorted alphabetically
 | 
|---|
| 76 |           FOR  SET IEN=$ORDER(^DPT("ADOB",Y,IEN)) QUIT:'IEN  DO  
 | 
|---|
| 77 |           . SET TMGNAME=$P($G(^DPT(IEN,0)),U,1) ; Get zero node name.
 | 
|---|
| 78 |           . NEW TEMP SET TEMP=TMGA_" "_TMGNAME
 | 
|---|
| 79 |           . SET TMGTEMP(TEMP,IEN_U_TEMP_U_U_U_U_TEMP)=""
 | 
|---|
| 80 |           . SET TMGSUBIEN=0
 | 
|---|
| 81 |           . FOR  SET TMGSUBIEN=$O(^DPT(IEN,.01,TMGSUBIEN)) QUIT:TMGSUBIEN=""  DO
 | 
|---|
| 82 |           . . SET TMGANAME=$P($G(^DPT(IEN,.01,TMGSUBIEN,0)),U,1)
 | 
|---|
| 83 |           . . NEW TEMP2 SET TEMP2=TMGA_" "_TMGANAME
 | 
|---|
| 84 |           . . SET TMGTEMP(TEMP2,IEN_U_TEMP2_U_U_U_U_TEMP)=""
 | 
|---|
| 85 |           ;
 | 
|---|
| 86 |           KILL OUT      
 | 
|---|
| 87 |           SET TMGTNAME=TMGA_" "_$$UP^XLFSTR($TRANSLATE(TMGB,"~",""))
 | 
|---|
| 88 |           ;"Get sublist of patients starting at specified last name etc.
 | 
|---|
| 89 |           FOR  SET TMGTNAME=$ORDER(TMGTEMP(TMGTNAME),DIR) QUIT:TMGTNAME=""  DO  QUIT:I=CNT
 | 
|---|
| 90 |           . NEW ENTRY SET ENTRY=""
 | 
|---|
| 91 |           . FOR  SET ENTRY=$O(TMGTEMP(TMGTNAME,ENTRY),DIR) QUIT:ENTRY=""  DO  QUIT:I=CNT
 | 
|---|
| 92 |           . . SET I=I+1
 | 
|---|
| 93 |           . . SET OUT(I)=ENTRY
 | 
|---|
| 94 |           SET TMGRESULT=1
 | 
|---|
| 95 |           GOTO WQ
 | 
|---|
| 96 |           ;
 | 
|---|
| 97 | WQ      QUIT TMGRESULT
 | 
|---|
| 98 |           ;
 | 
|---|
| 99 | ISMONTH(S)      
 | 
|---|
| 100 |           ;"Purpose: to determine if S is a string specifying a month.
 | 
|---|
| 101 |           ;"Input: S -- the string to test.  It is altered, so don't pass by reference
 | 
|---|
| 102 |           ;"Results: 1 if is a month name, or 0 if not.
 | 
|---|
| 103 |           SET S=$$UP^XLFSTR(S)
 | 
|---|
| 104 |           SET S=$TRANSLATE(S,".","")
 | 
|---|
| 105 |           IF S="JANUARY"!(S="JAN") QUIT 1
 | 
|---|
| 106 |           IF S="FEBRUARY"!(S="FEB") QUIT 1
 | 
|---|
| 107 |           IF S="MARCH"!(S="MAR") QUIT 1
 | 
|---|
| 108 |           IF S="APRIL"!(S="APR") QUIT 1
 | 
|---|
| 109 |           IF S="MAY" QUIT 1
 | 
|---|
| 110 |           IF S="JUNE"!(S="JUN") QUIT 1
 | 
|---|
| 111 |           IF S="JULY"!(S="JUL") QUIT 1
 | 
|---|
| 112 |           IF S="AUGUST"!(S="AUG") QUIT 1
 | 
|---|
| 113 |           IF S="SEPTEMBER"!(S="SEP")!(S="SEPT") QUIT 1
 | 
|---|
| 114 |           IF S="OCTOBER"!(S="OCT") QUIT 1
 | 
|---|
| 115 |           IF S="NOVEMBER"!(S="NOV") QUIT 1
 | 
|---|
| 116 |           IF S="DECEMBER"!(S="DEC") QUIT 1
 | 
|---|
| 117 |           QUIT 0      
 | 
|---|
| 118 |         ;
 | 
|---|
| 119 | ISPHONE(S)      
 | 
|---|
| 120 |           ;"Purpose: to determine is S is a phone number.
 | 
|---|
| 121 |           ;"Input: S -- the string to test.
 | 
|---|
| 122 |           ;"Results: 1 if a phone number, or 0 if not.
 | 
|---|
| 123 |           IF (S?3N1(1"-",1" ")3N1(1"-",1" ")1.4N.E) QUIT 1
 | 
|---|
| 124 |           ;IF (S?3N1(1"-",1" ")3.4N.E) QUIT 1
 | 
|---|
| 125 |           IF $EXTRACT(S,1)="(" QUIT 1
 | 
|---|
| 126 |           QUIT 0
 | 
|---|
| 127 |         ;
 | 
|---|
| 128 | INEXACT(OUT,FROM,DIR)   
 | 
|---|
| 129 |           ;"Purpose: To perform an inexact, old-style Fileman lookup on user input
 | 
|---|
| 130 |           ;"Input: OUT --  Out parameter, pass by reference.
 | 
|---|
| 131 |           ;"       FROM -- User specified string to search from.
 | 
|---|
| 132 |           ;".               Input can be either Name or IEN^Name
 | 
|---|
| 133 |           ;"                Example of Input: '.Smit,Joh~'
 | 
|---|
| 134 |           ;"                Note: CPRS decrements the terminal character of user
 | 
|---|
| 135 |           ;"                   input, and adds a ~   
 | 
|---|
| 136 |           ;"       DIR -- should be 1 or -1
 | 
|---|
| 137 |           ;"Results: NONE
 | 
|---|
| 138 |           ;
 | 
|---|
| 139 |           NEW I,IEN,CNT,FROMIEN
 | 
|---|
| 140 |           SET CNT=44,I=0,FROMIEN=0
 | 
|---|
| 141 |           SET DIR=$GET(DIR,1)
 | 
|---|
| 142 |           NEW TMGCH,TMGTRIM SET TMGTRIM=""
 | 
|---|
| 143 |           ;"Trim any leading '.' or ' '
 | 
|---|
| 144 |           FOR  SET TMGCH=$EXTRACT(FROM,1) QUIT:(". "'[TMGCH)  DO
 | 
|---|
| 145 |           . SET TMGTRIM=TMGTRIM_$EXTRACT(FROM,1)
 | 
|---|
| 146 |           . SET FROM=$EXTRACT(FROM,2,999)
 | 
|---|
| 147 |           IF $PIECE(FROM,U,2)'="" DO
 | 
|---|
| 148 |           . SET FROM=$PIECE(FROM,U,2)
 | 
|---|
| 149 |           . SET FROMIEN=$PIECE(FROM,U,1)
 | 
|---|
| 150 |           NEW TMGSRCH SET TMGSRCH=$TRANSLATE(FROM,"~","")
 | 
|---|
| 151 |           NEW TMGSRFROM SET TMGSRFROM=""
 | 
|---|
| 152 |           IF TMGSRCH[" -- " DO
 | 
|---|
| 153 |           . SET TMGSRFROM=$PIECE(TMGSRCH," -- ",2)
 | 
|---|
| 154 |           . SET TMGSRCH=$PIECE(TMGSRCH," -- ",1)
 | 
|---|
| 155 |           IF (DIR=1),(TMGSRFROM="") DO   ;"Reverse CPRS's inc/dec of terminal digit
 | 
|---|
| 156 |           . SET TMGCH=$EXTRACT(TMGSRCH,$LENGTH(TMGSRCH))
 | 
|---|
| 157 |           . SET TMGCH=$CHAR($ASCII(TMGCH)+DIR)
 | 
|---|
| 158 |           . SET TMGSRCH=$EXTRACT(TMGSRCH,1,$LENGTH(TMGSRCH)-1)_TMGCH
 | 
|---|
| 159 |           NEW TMGOUT,TMGMSG
 | 
|---|
| 160 |           DO FIND^DIC(2,,"@;.01","PBC",TMGSRCH,"*",,,,"TMGOUT","TMGMSG")
 | 
|---|
| 161 |           KILL OUT
 | 
|---|
| 162 |           IF +TMGOUT("DILIST",0)'>0 QUIT  ;"No matches found.
 | 
|---|
| 163 |           ;   
 | 
|---|
| 164 |           ;"Gather ALL matching patients so can be sorted alphabetically
 | 
|---|
| 165 |           NEW TMGBYIEN,TMGTEMP
 | 
|---|
| 166 |           NEW TMGIDX SET TMGIDX=0
 | 
|---|
| 167 |           FOR  SET TMGIDX=$ORDER(TMGOUT("DILIST",TMGIDX)) QUIT:(TMGIDX="")  DO  
 | 
|---|
| 168 |           . SET TMGNAME=$PIECE($GET(TMGOUT("DILIST",TMGIDX,0)),U,2) 
 | 
|---|
| 169 |           . SET IEN=+$PIECE($GET(TMGOUT("DILIST",TMGIDX,0)),U,1) 
 | 
|---|
| 170 |           . NEW TEMP SET TEMP=TMGTRIM_TMGSRCH_" -- "_TMGNAME
 | 
|---|
| 171 |           . SET TMGTEMP(TEMP,IEN_U_TEMP_U_U_U_U_TEMP)=""
 | 
|---|
| 172 |           . IF FROMIEN>0 SET TMGBYIEN(IEN)=IEN_U_TEMP_U_U_U_U_TEM
 | 
|---|
| 173 |           ;
 | 
|---|
| 174 |           KILL OUT
 | 
|---|
| 175 |           IF $DATA(TMGBYIEN) DO
 | 
|---|
| 176 |           . SET IEN=FROMIEN-DIR
 | 
|---|
| 177 |           . FOR  SET IEN=$ORDER(TMGBYIEN(IEN),DIR) QUIT:(+IEN'>0)!(I=CNT)  DO
 | 
|---|
| 178 |           . . SET I=I+1
 | 
|---|
| 179 |           . . SET OUT(I)=$GET(TMGBYIEN(IEN))
 | 
|---|
| 180 |           ELSE  DO
 | 
|---|
| 181 |           . SET TMGTNAME=TMGTRIM_TMGSRCH_" -- "_TMGSRFROM
 | 
|---|
| 182 |           . FOR  SET TMGTNAME=$ORDER(TMGTEMP(TMGTNAME),DIR) QUIT:TMGTNAME=""  DO  QUIT:I=CNT
 | 
|---|
| 183 |           . . NEW ENTRY SET ENTRY=""
 | 
|---|
| 184 |           . . FOR  SET ENTRY=$ORDER(TMGTEMP(TMGTNAME,ENTRY),DIR) QUIT:ENTRY=""  DO  QUIT:I=CNT
 | 
|---|
| 185 |           . . . SET I=I+1
 | 
|---|
| 186 |           . . . SET OUT(I)=ENTRY
 | 
|---|
| 187 |           QUIT
 | 
|---|
| 188 |         ; 
 | 
|---|
| 189 | HANDLEPHONE(OUT,FROM,DIR)       
 | 
|---|
| 190 |           ;"PURPOSE: To handle patient lookup by telephone
 | 
|---|
| 191 |           ;"Gather ALL patients with specified DOB, so can be sorted alphabetically
 | 
|---|
| 192 |           ;"Results: 1 if handled, 0 if not handled.
 | 
|---|
| 193 |           NEW TEMP1,TEMP2,TEMP3,TEMPNUM,IEN,TMGNAME,TMGTNAME,TMGCH
 | 
|---|
| 194 |           SET FROM=$TRANSLATE(FROM,"~","")
 | 
|---|
| 195 |           IF (DIR=1) DO   ;"Reverse CPRS's inc/dec of terminal digit if isolated date
 | 
|---|
| 196 |           . SET TMGCH=$E(FROM,$L(FROM))
 | 
|---|
| 197 |           . SET TMGCH=$CHAR($ASCII(TMGCH)+DIR)
 | 
|---|
| 198 |           . SET FROM=$E(FROM,1,$L(FROM)-1)_TMGCH
 | 
|---|
| 199 |           SET TEMPNUM=$TR(FROM,"(")
 | 
|---|
| 200 |           SET TEMPNUM=$TR(TEMPNUM," ")
 | 
|---|
| 201 |           SET TEMPNUM=$TR(TEMPNUM,"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$%^&*)-_=+[]{}<>,./?:;'\|")
 | 
|---|
| 202 |           SET TEMP1=$EXTRACT(TEMPNUM,1,3)
 | 
|---|
| 203 |           SET TEMP2=$EXTRACT(TEMPNUM,4,6)
 | 
|---|
| 204 |           SET TEMP3=$EXTRACT(TEMPNUM,7,99)
 | 
|---|
| 205 |           ;
 | 
|---|
| 206 |           NEW TMGIDX
 | 
|---|
| 207 |           FOR TMGIDX="AZVWVOE","ATMGPHONEWORK","ATMGPHONETEMP","ATMGPHONECELL"  DO
 | 
|---|
| 208 |           . SET TEMPNUM=TEMP1_TEMP2_TEMP3
 | 
|---|
| 209 |           . DO DOLOOKUP(.TMGTEMP,TMGIDX,TEMPNUM,FROM)
 | 
|---|
| 210 |           . SET TEMPNUM=TEMP1_" "_TEMP2_" "_TEMP3
 | 
|---|
| 211 |           . DO DOLOOKUP(.TMGTEMP,TMGIDX,TEMPNUM,FROM)
 | 
|---|
| 212 |           . SET TEMPNUM=TEMP1_" "_TEMP2_TEMP3
 | 
|---|
| 213 |           . DO DOLOOKUP(.TMGTEMP,TMGIDX,TEMPNUM,FROM)
 | 
|---|
| 214 |           . SET TEMPNUM=TEMP1_TEMP2_" "_TEMP3
 | 
|---|
| 215 |           . DO DOLOOKUP(.TMGTEMP,TMGIDX,TEMPNUM,FROM)
 | 
|---|
| 216 |           ;
 | 
|---|
| 217 |           KILL OUT
 | 
|---|
| 218 |           SET TMGTNAME=FROM_" "_$$UP^XLFSTR($TRANSLATE(FROM,"~",""))
 | 
|---|
| 219 |           ;"Get sublist of patients starting at specified last name etc.
 | 
|---|
| 220 |           FOR  SET TMGTNAME=$ORDER(TMGTEMP(TMGTNAME),DIR) QUIT:TMGTNAME=""  DO  QUIT:I=CNT
 | 
|---|
| 221 |           . NEW ENTRY SET ENTRY=""
 | 
|---|
| 222 |           . FOR  SET ENTRY=$O(TMGTEMP(TMGTNAME,ENTRY),DIR) QUIT:ENTRY=""  DO  QUIT:I=CNT
 | 
|---|
| 223 |           . . SET I=I+1
 | 
|---|
| 224 |           . . SET OUT(I)=ENTRY
 | 
|---|
| 225 |           QUIT 1
 | 
|---|
| 226 |         ;
 | 
|---|
| 227 | DOLOOKUP(TMGTEMP,INDEX,ITEM,FROM)       
 | 
|---|
| 228 |           NEW TMGNAME,IEN
 | 
|---|
| 229 |           SET IEN=0
 | 
|---|
| 230 |           FOR  SET IEN=$ORDER(^DPT(INDEX,ITEM,IEN)) QUIT:'IEN  DO
 | 
|---|
| 231 |           . SET TMGNAME=$P($G(^DPT(IEN,0)),U,1) ; Get zero node name.
 | 
|---|
| 232 |           . NEW TEMP SET TEMP=FROM_" "_TMGNAME
 | 
|---|
| 233 |           . SET TMGTEMP(TEMP,IEN_U_TEMP_U_U_U_U_TEMP)=""
 | 
|---|
| 234 |           . SET TMGSUBIEN=0
 | 
|---|
| 235 |           QUIT
 | 
|---|
| 236 | FIXINDEX        ;
 | 
|---|
| 237 |          ;Check date of last run
 | 
|---|
| 238 |          ;if < 5 mins exit
 | 
|---|
| 239 |          ;loop through entry in Index
 | 
|---|
| 240 |          ;check entry for proper format
 | 
|---|
| 241 |          ;if improper format, then have fileman store new properly formatted number
 | 
|---|
| 242 |          ;store date of last run
 | 
|---|
| 243 |         ;
 | 
|---|
| 244 | SETRPC(TMGMODULE)       ;
 | 
|---|
| 245 |           ;"Purpose: Set module for RPC call.
 | 
|---|
| 246 |           IF $GET(TMGMODULE)="" QUIT
 | 
|---|
| 247 |           NEW TMGDATA,TMGMSG
 | 
|---|
| 248 |           SET DIC(0)="B"
 | 
|---|
| 249 |           SET DIC=8994
 | 
|---|
| 250 |           SET X="ORWPT LIST ALL"
 | 
|---|
| 251 |           DO ^DIC
 | 
|---|
| 252 |           IF Y=-1 QUIT
 | 
|---|
| 253 |           SET TMGDATA(8994,$P(Y,U,1)_",",".03")=TMGMODULE
 | 
|---|
| 254 |           DO FILE^DIE("K","TMGDATA","TMGMSG")
 | 
|---|
| 255 |           QUIT
 | 
|---|
| 256 |         ;
 | 
|---|
| 257 | INSTWEDG        ;
 | 
|---|
| 258 |           ;"Purpose: ROUTES RPC FOR CPRS PATIENT LOOKUP FROM ORWPT TO TMGHRPC2, IF IT EXISTS
 | 
|---|
| 259 |           DO SETRPC("TMGHRPC2") ;
 | 
|---|
| 260 |           QUIT
 | 
|---|
| 261 |         ;
 | 
|---|
| 262 | DELWEDG ;
 | 
|---|
| 263 |           ;"Purpose: ROUTES RPC FOR CPRS PATIENT LOOKUP FROM ORWPT TO TMGHRPC2, IF IT EXISTS
 | 
|---|
| 264 |           DO SETRPC("ORWPT") ;
 | 
|---|
| 265 |           QUIT
 | 
|---|
| 266 |         
 | 
|---|