| 1 | HLEMU ;ALB/CJM  Utility Routines ;02/04/2004 14:42
 | 
|---|
| 2 |  ;;1.6;HEALTH LEVEL SEVEN;**109**;Oct 13, 1995
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 | STATNUM(IEN) ;
 | 
|---|
| 5 |  ;Description:  Given an ien to the Institution file, returns as the function value the station number.  If IEN is NOT passed in, it assumes the local site.  Returns "" on failure.
 | 
|---|
| 6 |  ;
 | 
|---|
| 7 |  N STATION,RETURN
 | 
|---|
| 8 |  S RETURN=""
 | 
|---|
| 9 |  I $G(IEN) D
 | 
|---|
| 10 |  .Q:'$D(^DIC(4,IEN,0))
 | 
|---|
| 11 |  .S STATION=$P($$NNT^XUAF4(IEN),"^",2)
 | 
|---|
| 12 |  .S RETURN=$S(+STATION:STATION,1:"")
 | 
|---|
| 13 |  E  D
 | 
|---|
| 14 |  .S RETURN=$P($$SITE^VASITE(),"^",3)
 | 
|---|
| 15 |  Q RETURN
 | 
|---|
| 16 | INSTIEN(STATION) ;
 | 
|---|
| 17 |  ;Given the station number, this returns a pointer to the Institution file
 | 
|---|
| 18 |  Q $$LKUP^XUAF4(STATION)
 | 
|---|
| 19 |  ;
 | 
|---|
| 20 | UPD(FILE,HLDA,DATA,ERROR) ;File data into an existing record.
 | 
|---|
| 21 |  ; Input:
 | 
|---|
| 22 |  ;   FILE - File or sub-file number
 | 
|---|
| 23 |  ;   HLDA - New name for traditional DA array, with same meaning.
 | 
|---|
| 24 |  ;            Pass by reference.
 | 
|---|
| 25 |  ;   DATA - Data array to file (pass by reference)
 | 
|---|
| 26 |  ;          Format: DATA(<field #>)=<value>
 | 
|---|
| 27 |  ;
 | 
|---|
| 28 |  ; Output:
 | 
|---|
| 29 |  ;  Function Value -     0=error and 1=no error
 | 
|---|
| 30 |  ;  ERROR - optional error message - if needed, pass by reference
 | 
|---|
| 31 |  ;
 | 
|---|
| 32 |  ; Example: To update a record in subfile 2.0361 in record with ien=353,
 | 
|---|
| 33 |  ;          subrecord ien=68, with the field .01 value = 21:
 | 
|---|
| 34 |  ;    S DATA(.01)=21,HLDA=68,HLDA(1)=353 I $$UPD^HLEMU(2.0361,.HLDA,.DATA,.ERROR) W !,"DONE"
 | 
|---|
| 35 |  ;
 | 
|---|
| 36 |  N FDA,FIELD,IENS,ERRORS
 | 
|---|
| 37 |  ;
 | 
|---|
| 38 |  ;IENS - Internal Entry Number String defined by FM
 | 
|---|
| 39 |  ;FDA - the FDA array as defined by FM
 | 
|---|
| 40 |  ;
 | 
|---|
| 41 |  I '$G(HLDA) S ERROR="IEN OF RECORD TO BE UPDATED NOT SPECIFIED" Q 0
 | 
|---|
| 42 |  S IENS=$$IENS^DILF(.HLDA)
 | 
|---|
| 43 |  S FIELD=0
 | 
|---|
| 44 |  F  S FIELD=$O(DATA(FIELD)) Q:'FIELD  D
 | 
|---|
| 45 |  .S FDA(FILE,IENS,FIELD)=$G(DATA(FIELD))
 | 
|---|
| 46 |  D FILE^HLDIE(,"FDA","ERRORS(1)","UPD","HLEMU")
 | 
|---|
| 47 |  I +$G(DIERR) D
 | 
|---|
| 48 |  .S ERROR=$G(ERRORS(1,"DIERR",1,"TEXT",1))
 | 
|---|
| 49 |  E  D
 | 
|---|
| 50 |  .S ERROR=""
 | 
|---|
| 51 |  ;
 | 
|---|
| 52 |  I $S(+$G(DIERR):0,1:1) D CLEAN^DILF Q 1
 | 
|---|
| 53 |  E  D CLEAN^DILF Q 0
 | 
|---|
| 54 |  ;
 | 
|---|
| 55 | GETFIELD(FILE,FIELD,HLDA,ERROR,EXT) ;Get field value from an existing record.
 | 
|---|
| 56 |  ; Input:
 | 
|---|
| 57 |  ;   FILE - File or sub-file number
 | 
|---|
| 58 |  ;   HLDA - New name for traditional DA array, with same meaning.
 | 
|---|
| 59 |  ;            Pass by reference.
 | 
|---|
| 60 |  ;   FIELD - Field for which value is needed
 | 
|---|
| 61 |  ;   EXT - (optional) If $G(EXT) then returns the external display form of the value
 | 
|---|
| 62 |  ; Output:
 | 
|---|
| 63 |  ;  Function Value -  field value in internal format,"" if an error was encountered
 | 
|---|
| 64 |  ;  ERROR - optional error message - if needed, pass by reference
 | 
|---|
| 65 |  ;
 | 
|---|
| 66 |  N FDA,IENS,ERRORS,VALUE
 | 
|---|
| 67 |  ;
 | 
|---|
| 68 |  ;IENS - Internal Entry Number String defined by FM
 | 
|---|
| 69 |  ;FDA - the FDA array as defined by FM
 | 
|---|
| 70 |  ;
 | 
|---|
| 71 |  I '$G(HLDA) S ERROR="IEN OF RECORD TO BE UPDATED NOT SPECIFIED" Q ""
 | 
|---|
| 72 |  S IENS=$$IENS^DILF(.HLDA)
 | 
|---|
| 73 |  S VALUE=$$GET1^DIQ(FILE,IENS,FIELD,$S($G(EXT):"",1:"I"),,"ERRORS(1)")
 | 
|---|
| 74 |  I +$G(DIERR) D
 | 
|---|
| 75 |  .S ERROR=$G(ERRORS(1,"DIERR",1,"TEXT",1))
 | 
|---|
| 76 |  E  D
 | 
|---|
| 77 |  .S ERROR=""
 | 
|---|
| 78 |  ;
 | 
|---|
| 79 |  I $S(+$G(DIERR):0,1:1) D CLEAN^DILF Q VALUE
 | 
|---|
| 80 |  E  D CLEAN^DILF Q ""
 | 
|---|
| 81 |  ;
 | 
|---|
| 82 | DELETE(FILE,DA,ERROR) ;Delete an existing record.
 | 
|---|
| 83 |  ; Input:
 | 
|---|
| 84 |  ;   FILE - File or sub-file number
 | 
|---|
| 85 |  ;   DA - Traditional DA array, with same meaning.
 | 
|---|
| 86 |  ;           ** Pass by reference**
 | 
|---|
| 87 |  ;
 | 
|---|
| 88 |  ; Output:
 | 
|---|
| 89 |  ;  Function Value -     0=error and 1=no error
 | 
|---|
| 90 |  ;  ERROR - optional error message - if needed, pass by reference
 | 
|---|
| 91 |  ;
 | 
|---|
| 92 |  ; Example: To delete a record in subfile 2.0361 in record with ien=353,
 | 
|---|
| 93 |  ;          subrecord ien=68:
 | 
|---|
| 94 |  ;    S DA=68,DA(1)=353 I $$DELETE^HLEMU(2.0361,.DA,.ERROR) W !,"DONE"
 | 
|---|
| 95 |  ;
 | 
|---|
| 96 |  N DATA
 | 
|---|
| 97 |  S DATA(.01)="@"
 | 
|---|
| 98 |  Q $$UPD^HLEMU(FILE,.DA,.DATA,.ERROR)
 | 
|---|
| 99 |  Q
 | 
|---|
| 100 |  ;
 | 
|---|
| 101 | ADD(FILE,HLDA,DATA,ERROR,IEN) ;
 | 
|---|
| 102 |  ;Description: Creates a new record and files the data.
 | 
|---|
| 103 |  ; Input:
 | 
|---|
| 104 |  ;   FILE - File or sub-file number
 | 
|---|
| 105 |  ;   HLDA - New name for traditional FileMan DA array with same
 | 
|---|
| 106 |  ;            meaning. Pass by reference.  Only needed if adding to a
 | 
|---|
| 107 |  ;            subfile.
 | 
|---|
| 108 |  ;   DATA - Data array to file, pass by reference
 | 
|---|
| 109 |  ;          Format: DATA(<field #>)=<value>
 | 
|---|
| 110 |  ;   IEN - internal entry number to use (optional)
 | 
|---|
| 111 |  ;
 | 
|---|
| 112 |  ; Output:
 | 
|---|
| 113 |  ;   Function Value - If no error then it returns the ien of the created record, else returns NULL.
 | 
|---|
| 114 |  ;  HLDA - returns the ien of the new record, NULL if none created.  If needed, pass by reference.
 | 
|---|
| 115 |  ;  ERROR - optional error message - if needed, pass by reference
 | 
|---|
| 116 |  ;
 | 
|---|
| 117 |  ; Example: Adding a record in subfile 2.0361 in the record with ien=353
 | 
|---|
| 118 |  ;          with the field .01 value = 21:
 | 
|---|
| 119 |  ;  S DATA(.01)=21,HLDA(1)=353 I $$ADD^HLEMU(2.0361,.HLDA,.DATA) W !,"DONE"
 | 
|---|
| 120 |  ;
 | 
|---|
| 121 |  ; Example: Creating a record NOT in a subfile:
 | 
|---|
| 122 |  ;          S DATA(.01)=21 I $$ADD^HLEMU(867,,.DATA) W !,"DONE"
 | 
|---|
| 123 |  ;
 | 
|---|
| 124 |  N FDA,FIELD,IENA,IENS,ERRORS
 | 
|---|
| 125 |  ;
 | 
|---|
| 126 |  ;IENS - Internal Entry Number String defined by FM
 | 
|---|
| 127 |  ;IENA - the Internal Entry Numebr Array defined by FM
 | 
|---|
| 128 |  ;FDA - the FDA array defined by FM
 | 
|---|
| 129 |  ;IEN - the ien of the new record
 | 
|---|
| 130 |  ;
 | 
|---|
| 131 |  S HLDA="+1"
 | 
|---|
| 132 |  S IENS=$$IENS^DILF(.HLDA)
 | 
|---|
| 133 |  S FIELD=0
 | 
|---|
| 134 |  F  S FIELD=$O(DATA(FIELD)) Q:'FIELD  D
 | 
|---|
| 135 |  .S FDA(FILE,IENS,FIELD)=$G(DATA(FIELD))
 | 
|---|
| 136 |  I $G(IEN) S IENA(1)=IEN
 | 
|---|
| 137 |  D UPDATE^DIE("","FDA","IENA","ERRORS(1)")
 | 
|---|
| 138 |  I +$G(DIERR) D
 | 
|---|
| 139 |  .S ERROR=$G(ERRORS(1,"DIERR",1,"TEXT",1))
 | 
|---|
| 140 |  .S IEN=""
 | 
|---|
| 141 |  E  D
 | 
|---|
| 142 |  .S IEN=IENA(1)
 | 
|---|
| 143 |  .S ERROR=""
 | 
|---|
| 144 |  D CLEAN^DILF
 | 
|---|
| 145 |  S HLDA=IEN
 | 
|---|
| 146 |  Q IEN
 | 
|---|
| 147 |  ;
 | 
|---|
| 148 | TESTVAL(FILE,FIELD,VALUE) ;
 | 
|---|
| 149 |  ;Description: returns 1 if VALUE is a valid value for FIELD in FILE
 | 
|---|
| 150 |  ;
 | 
|---|
| 151 |  Q:(('$G(FILE))!('$G(FIELD))) 0
 | 
|---|
| 152 |  ;
 | 
|---|
| 153 |  N DISPLAY,VALID,RESULT
 | 
|---|
| 154 |  S VALID=1
 | 
|---|
| 155 |  ;
 | 
|---|
| 156 |  ;if there is no external value then it is not valid
 | 
|---|
| 157 |  S DISPLAY=$$EXTERNAL^DILFD(FILE,FIELD,"F",VALUE)
 | 
|---|
| 158 |  I (DISPLAY="") S VALID=0
 | 
|---|
| 159 |  ; 
 | 
|---|
| 160 |  I VALID,$$GET1^DID(FILE,FIELD,"","TYPE")'["POINTER" D
 | 
|---|
| 161 |  .D CHK^DIE(FILE,FIELD,,VALUE,.RESULT) I RESULT="^" S VALID=0 Q
 | 
|---|
| 162 |  Q VALID
 | 
|---|
| 163 |  ;
 | 
|---|
| 164 | GETLINK(INSTIEN) ;
 | 
|---|
| 165 |  ;Description:  Returns name of logical link for institition, given the institution ien.  Returns "" if a logical link name not found.
 | 
|---|
| 166 |  ;
 | 
|---|
| 167 |  Q:'$G(INSTIEN) ""
 | 
|---|
| 168 |  ;
 | 
|---|
| 169 |  N LINK,I,LINKNAME
 | 
|---|
| 170 |  S LINKNAME=""
 | 
|---|
| 171 |  D
 | 
|---|
| 172 |  .D LINK^HLUTIL3(INSTIEN,.LINK)
 | 
|---|
| 173 |  .S I=$O(LINK(0))
 | 
|---|
| 174 |  .I I,$L(LINK(I)) S LINKNAME=LINK(I)
 | 
|---|
| 175 |  Q LINKNAME
 | 
|---|
| 176 |  ;
 | 
|---|
| 177 | ASKYESNO(PROMPT,DEFAULT) ;
 | 
|---|
| 178 |  ;Description: Displays PROMPT, appending '?'.  Expects a YES NO response.
 | 
|---|
| 179 |  ;Input:
 | 
|---|
| 180 |  ;   PROMPT - text to display as prompt.  Appends '?'
 | 
|---|
| 181 |  ;   DEFAULT - (optional) YES or NO.  If not passed, defaults to YES
 | 
|---|
| 182 |  ;Output:
 | 
|---|
| 183 |  ;  Function value: 1 if yes, 0 if no, "" if '^' entered or timeout
 | 
|---|
| 184 |  ;
 | 
|---|
| 185 |  N DIR,Y
 | 
|---|
| 186 |  S DIR(0)="Y"
 | 
|---|
| 187 |  S DIR("A")=PROMPT
 | 
|---|
| 188 |  S DIR("B")=$S($G(DEFAULT)="NO":"NO",1:"YES")
 | 
|---|
| 189 |  D ^DIR
 | 
|---|
| 190 |  Q:$D(DIRUT) ""
 | 
|---|
| 191 |  Q Y
 | 
|---|
| 192 |  ;
 | 
|---|
| 193 | MSGIEN(MSGID) ;
 | 
|---|
| 194 |  ;Given the message id, returns the ien from file 773, or 0 on failure.
 | 
|---|
| 195 |  Q:'$L($G(MSGID)) 0
 | 
|---|
| 196 |  Q $O(^HLMA("C",MSGID,0))
 | 
|---|
| 197 |  ;
 | 
|---|
| 198 | LINK(MSGIEN) ;
 | 
|---|
| 199 |  ;Given the message ien from file 773, returns the HL Logical Link in the format <link ien>^<link name>
 | 
|---|
| 200 |  Q:'$G(MSGIEN) ""
 | 
|---|
| 201 |  N LINKIEN
 | 
|---|
| 202 |  S LINKIEN=$P($G(^HLMA(MSGIEN,0)),"^",7)
 | 
|---|
| 203 |  Q:'LINKIEN 0
 | 
|---|
| 204 |  Q LINKIEN_"^"_$P(^HLCS(870,LINKIEN,0),"^")
 | 
|---|
| 205 |  ;
 | 
|---|
| 206 | HL7EVENT(MSGIEN) ;
 | 
|---|
| 207 |  ;Given the message ien from file 773, returns the 3 character HL7 event type
 | 
|---|
| 208 |  Q:'$G(MSGIEN) ""
 | 
|---|
| 209 |  N EVENT
 | 
|---|
| 210 |  S EVENT=$P($G(^HLMA(MSGIEN,0)),"^",14)
 | 
|---|
| 211 |  Q:'EVENT ""
 | 
|---|
| 212 |  Q $P(^HL(779.001,EVENT,0),"^")
 | 
|---|
| 213 |  ;
 | 
|---|
| 214 | MSGTYPE(MSGIEN) ;
 | 
|---|
| 215 |  ;Given the message ien from file 773, returns the 3 character HL7 message type
 | 
|---|
| 216 |  Q:'$G(MSGIEN) ""
 | 
|---|
| 217 |  N MSG
 | 
|---|
| 218 |  S MSG=$P($G(^HLMA(MSGIEN,0)),"^",13)
 | 
|---|
| 219 |  Q:'MSG ""
 | 
|---|
| 220 |  Q $P(^HL(771.2,MSG,0),"^")
 | 
|---|
| 221 |  ;
 | 
|---|
| 222 | APP(MSGIEN) ;
 | 
|---|
| 223 |  ;Given the message ien from file 773, returns the name of the sending application from file 771
 | 
|---|
| 224 |  ;
 | 
|---|
| 225 |  Q:'$G(MSGIEN)
 | 
|---|
| 226 |  N APPIEN
 | 
|---|
| 227 |  S APPIEN=$P($G(^HLMA(MSGIEN,0)),"^",11)
 | 
|---|
| 228 |  Q $$APPNAME(APPIEN)
 | 
|---|
| 229 |  ;
 | 
|---|
| 230 | APPNAME(APPIEN) ;
 | 
|---|
| 231 |  ;Given an ien to the HL7 Application Parameter file (#771), it returns the NAME (field .01)
 | 
|---|
| 232 |  Q $S('APPIEN:"",1:$P($G(^HL(771,APPIEN,0)),"^"))
 | 
|---|
| 233 |  ;
 | 
|---|
| 234 | PROMPT(FILE,FIELD,DEFAULT,RESPONSE,REQUIRE) ;
 | 
|---|
| 235 |  ;Description: requests user to enter a single field value.
 | 
|---|
| 236 |  ;Input:
 | 
|---|
| 237 |  ;  FILE - the file #
 | 
|---|
| 238 |  ;  FIELD - the field #
 | 
|---|
| 239 |  ;  DEFAULT - default value, internal form
 | 
|---|
| 240 |  ;  REQUIRE - a flag, (+value)'=0 means to require a value to be
 | 
|---|
| 241 |  ;            entered and to return failure otherwise (optional)
 | 
|---|
| 242 |  ;Output:
 | 
|---|
| 243 |  ;  Function Value - 0 on failure, 1 on success
 | 
|---|
| 244 |  ;  RESPONSE - value entered by user, pass by reference
 | 
|---|
| 245 |  ;
 | 
|---|
| 246 |  Q:(('$G(FILE))!('$G(FIELD))) 0
 | 
|---|
| 247 |  S REQUIRE=$G(REQUIRE)
 | 
|---|
| 248 |  N DIR,DA,QUIT,AGAIN
 | 
|---|
| 249 |  ;
 | 
|---|
| 250 |  S DIR(0)=FILE_","_FIELD_$S($G(REQUIRE):"",1:"O")_"AO"
 | 
|---|
| 251 |  S:$G(DEFAULT)'="" DIR("A")=$$GET1^DID(FILE,FIELD,"","LABEL")_": "_$$EXTERNAL^DILFD(FILE,FIELD,"F",DEFAULT)_"// "
 | 
|---|
| 252 |  S QUIT=0
 | 
|---|
| 253 |  F  D  Q:QUIT
 | 
|---|
| 254 |  . D ^DIR
 | 
|---|
| 255 |  . I $D(DTOUT)!$D(DUOUT) S QUIT=1 Q
 | 
|---|
| 256 |  . I X="@" D  Q:AGAIN
 | 
|---|
| 257 |  . . S AGAIN=0
 | 
|---|
| 258 |  . . I 'REQUIRE,"Yy"'[$E($$ASKYESNO("  Are you sure")_"X") S AGAIN=1 Q
 | 
|---|
| 259 |  . . S RESPONSE="" ; This might trigger the "required" message below.
 | 
|---|
| 260 |  . E  I X="" S RESPONSE=$G(DEFAULT)
 | 
|---|
| 261 |  . E  S RESPONSE=$P(Y,"^")
 | 
|---|
| 262 |  . ;
 | 
|---|
| 263 |  . ; quit this loop if the user entered value OR value not required
 | 
|---|
| 264 |  . I RESPONSE'="" S QUIT=1 Q
 | 
|---|
| 265 |  . I 'REQUIRE S QUIT=1 Q
 | 
|---|
| 266 |  . W !,"This is a required response. Enter '^' to exit"
 | 
|---|
| 267 |  I $D(DTOUT)!$D(DUOUT) Q 0
 | 
|---|
| 268 |  Q 1
 | 
|---|
| 269 | I(VAR,N) ;This funtion increments the local or global variable by the amount N
 | 
|---|
| 270 |  ;Input:
 | 
|---|
| 271 |  ;  VAR - a string representing the name of a local or global variable to be referenced by indirection
 | 
|---|
| 272 |  ;  N - a number to increment @VAR by.  If not passed it is set to 1
 | 
|---|
| 273 |  ;OUTPUT
 | 
|---|
| 274 |  ;    @VAR is incremented by the amount N and also returned as the function value
 | 
|---|
| 275 |  ;
 | 
|---|
| 276 |  N X
 | 
|---|
| 277 |  I VAR["^" L +VAR:1
 | 
|---|
| 278 |  I '$G(N) S N=1
 | 
|---|
| 279 |  S X=$G(@VAR)+N
 | 
|---|
| 280 |  S @VAR=X
 | 
|---|
| 281 |  I VAR["^" L -VAR
 | 
|---|
| 282 |  Q X
 | 
|---|
| 283 |  ;
 | 
|---|
| 284 | INC(VAR,N) ;This funtion increments the local variable by the amount N
 | 
|---|
| 285 |  ;Input:
 | 
|---|
| 286 |  ;  VAR - a local or global variable passed by reference
 | 
|---|
| 287 |  ;  N - a number to increment VAR by.  If not passed or =0 it is set to 1
 | 
|---|
| 288 |  ;OUTPUT
 | 
|---|
| 289 |  ;    VAR is incremented by the amount N and also returned as the function value
 | 
|---|
| 290 |  ;
 | 
|---|
| 291 |  I '$G(N) S N=1
 | 
|---|
| 292 |  S VAR=$G(VAR)+N
 | 
|---|
| 293 |  Q VAR
 | 
|---|