[613] | 1 | RAPSAPI3 ;HOIFO/SG - INPUT TEMPLATE UTILS FOR PHARM. POINTERS ; 4/13/07 10:45am
|
---|
| 2 | ;;5.0;Radiology/Nuclear Medicine;**65**;Mar 16, 1998;Build 8
|
---|
| 3 | ;
|
---|
| 4 | ; This routine uses the following IAs:
|
---|
| 5 | ;
|
---|
| 6 | ; #2056 GET1^DIQ
|
---|
| 7 | ; #2052 FIELD^DID
|
---|
| 8 | ; #2055 ROOT^DILFD
|
---|
| 9 | ; #10007 DO^DIC1
|
---|
| 10 | ; #4551 DIC^PSSDI looks up & screens records from file #50
|
---|
| 11 | ;
|
---|
| 12 | Q
|
---|
| 13 | ;
|
---|
| 14 | ;***** RETURNS IEN OF THE DEFAULT RECORD OF THE MULTIPLE
|
---|
| 15 | ;
|
---|
| 16 | ; Note: This is an internal function. Do not call it from outside
|
---|
| 17 | ; of this routine.
|
---|
| 18 | ;
|
---|
| 19 | DFLTREC() ;
|
---|
| 20 | Q $S($G(RADESCR("SELCNT"))'>1:+$O(@(RADESCR("ROOT"))@(" "),-1),1:0)
|
---|
| 21 | ;
|
---|
| 22 | ;***** EDITS RADIOLOGY SCREENED POINTER TO THE DRUG FILE (#50)
|
---|
| 23 | ;
|
---|
| 24 | ; RADESCR Flags that control execution
|
---|
| 25 | ; "P" Medications
|
---|
| 26 | ; "R" Radiopharms
|
---|
| 27 | ;
|
---|
| 28 | ; RAIENS IENS of the edited record (e.g. "1,")
|
---|
| 29 | ;
|
---|
| 30 | ; RAFILE Radiology file number (e.g. 71.9)
|
---|
| 31 | ;
|
---|
| 32 | ; RAFIELD Field number of the pointer to the file #50 (e.g. 5)
|
---|
| 33 | ;
|
---|
| 34 | ; [RADATE] Date for screening medications
|
---|
| 35 | ;
|
---|
| 36 | ; Return values:
|
---|
| 37 | ; "" Field was empty and the value has not changed
|
---|
| 38 | ; "@" Clear the field
|
---|
| 39 | ; "^" Exit the record editing
|
---|
| 40 | ; ^Field "^"-jump to other field (e.g. "^KIT")
|
---|
| 41 | ; `IEN Pointer to the record of the file #50 (e.g. "`234")
|
---|
| 42 | ;
|
---|
| 43 | RXEDIT(RADESCR,RAIENS,RAFILE,RAFIELD,RADATE) ;
|
---|
| 44 | N PSSDIY,RA50IEN,RABUF,RADIC,RAENTRY,RALABEL,RAMSG,RARC,RAVACL,TMP
|
---|
| 45 | ;=== Validate and parse parameters
|
---|
| 46 | S RADESCR=$G(RADESCR)
|
---|
| 47 | S:(RADESCR'["P")&(RADESCR'["R") RADESCR=RADESCR_"P"
|
---|
| 48 | S:$G(RADATE)'>0 RADATE=""
|
---|
| 49 | ;
|
---|
| 50 | ;=== Get field info from the data dictionary
|
---|
| 51 | D FIELD^DID(RAFILE,RAFIELD,,"LABEL;MULTIPLE-VALUED","RABUF","RAMSG")
|
---|
| 52 | I $G(RABUF("MULTIPLE-VALUED")) S TMP=$T(+0) D Q "^"
|
---|
| 53 | . W !!,"$$RXEDIT^"_TMP_" cannot be used for multiples!"
|
---|
| 54 | . W !,"Use $$RXMEDIT^"_TMP_" instead.",!
|
---|
| 55 | S RALABEL=RABUF("LABEL")_": "
|
---|
| 56 | K RABUF
|
---|
| 57 | ;
|
---|
| 58 | ;===
|
---|
| 59 | F D Q:$D(RARC)
|
---|
| 60 | . ;--- Get the current internal value of the field
|
---|
| 61 | . S RA50IEN=+$$GET1^DIQ(RAFILE,RAIENS,RAFIELD,"I",,"RAMSG")
|
---|
| 62 | . ;--- Get the external value of the field
|
---|
| 63 | . I RA50IEN>0 D
|
---|
| 64 | . . S TMP=$$EN1^RAPSAPI(RA50IEN,.01)
|
---|
| 65 | . . S:TMP="" TMP=RA50IEN
|
---|
| 66 | . E S TMP=""
|
---|
| 67 | . ;--- Display the prompt and get a user response
|
---|
| 68 | . W !,RALABEL_$S(TMP'="":TMP_"// ",1:"")
|
---|
| 69 | . R RAENTRY:DTIME E S RARC="^" Q
|
---|
| 70 | . ;--- Keep the current value
|
---|
| 71 | . I RAENTRY="" S RARC=$S(RA50IEN>0:"`"_RA50IEN,1:"") Q
|
---|
| 72 | . ;--- Exit or "^"-jump
|
---|
| 73 | . I RAENTRY?1"^".E S RARC=RAENTRY Q
|
---|
| 74 | . ;--- @ entered
|
---|
| 75 | . I RAENTRY="@" S:$$DELCONF^RAPSAPI2(+RAIENS,RA50IEN) RARC="@" Q
|
---|
| 76 | . ;--- ? or ?? entered
|
---|
| 77 | . D:RAENTRY?1"?".1"?" HELP^RAPSAPI2(RAENTRY,RAFILE,RAFIELD)
|
---|
| 78 | . ;--- Something else entered
|
---|
| 79 | . S RADIC="^PSDRUG(",RADIC(0)="EQMZ",RADIC("A")=RALABEL
|
---|
| 80 | . D SETVACL^RAPSAPI2(RADESCR)
|
---|
| 81 | . D DIC^PSSDI(50,"RA",.RADIC,RAENTRY,,RADATE,,.RAVACL)
|
---|
| 82 | . S:Y>0 RARC="`"_(+Y)
|
---|
| 83 | ;
|
---|
| 84 | ;===
|
---|
| 85 | Q RARC
|
---|
| 86 | ;
|
---|
| 87 | ;***** EDITS .01 POINTER (MULTIPLE) TO THE DRUG FILE (#50)
|
---|
| 88 | ;
|
---|
| 89 | ; .RADESCR( Flags that control execution
|
---|
| 90 | ; "P" Medications
|
---|
| 91 | ; "R" Radiopharms
|
---|
| 92 | ;
|
---|
| 93 | ; When this function finishes editing the multiple,
|
---|
| 94 | ; this parameter is KILL'ed automatically.
|
---|
| 95 | ;
|
---|
| 96 | ; Subscripts of this parameter store the state between
|
---|
| 97 | ; calls. Do not access them outside of this function!
|
---|
| 98 | ; The only exception is the RADESCR("RESULT") that
|
---|
| 99 | ; stores the latest value returned by the function.
|
---|
| 100 | ;
|
---|
| 101 | ; "EDITONLY") The function is in "edit-only" mode of the .01 field
|
---|
| 102 | ; of the multiple.
|
---|
| 103 | ;
|
---|
| 104 | ; "FLDNAME") Name of the .01 field of the multiple
|
---|
| 105 | ; "MLTNAME") Name of the multiple
|
---|
| 106 | ; "RESULT") The latest result returned by this function
|
---|
| 107 | ; "ROOT") Closed root of the multiple's sub-file
|
---|
| 108 | ; "SCRDATE") Date for screening meds (value of the RADATE param.)
|
---|
| 109 | ;
|
---|
| 110 | ; "SELCNT") Number of times the function was called in selection
|
---|
| 111 | ; mode ($G("EDITONLY")=0) without resetting the state.
|
---|
| 112 | ;
|
---|
| 113 | ; "SUBFILE") Number of the multiple's sub-file
|
---|
| 114 | ;
|
---|
| 115 | ; RAIENS IENS of a multiple/subfile (e.g. ",1,") or IENS
|
---|
| 116 | ; of a record of the multiple (e.g. "2,3,"). In the
|
---|
| 117 | ; latter case, the function switches to "edit-only"
|
---|
| 118 | ; mode.
|
---|
| 119 | ;
|
---|
| 120 | ; [RAFILE] Radiology file number (e.g. 70.2)
|
---|
| 121 | ;
|
---|
| 122 | ; [RAMULT] Field number of the multiple (e.g. 100)
|
---|
| 123 | ;
|
---|
| 124 | ; [RADATE] Date for screening medications
|
---|
| 125 | ;
|
---|
| 126 | ; Return values:
|
---|
| 127 | ; "" Exit the multiple
|
---|
| 128 | ; "@" Delete the value of the .01 field
|
---|
| 129 | ; "^" Exit the record editing
|
---|
| 130 | ; ^Field "^"-jump to other field (e.g. "^KIT")
|
---|
| 131 | ; `IEN Pointer to the record of the file #50 or IEN of
|
---|
| 132 | ; an existing record of the multiple (e.g. "`234")
|
---|
| 133 | ;
|
---|
| 134 | RXMEDIT(RADESCR,RAIENS,RAFILE,RAMULT,RADATE) ;
|
---|
| 135 | N RASUBIEN ; IEN of the record of the multiple
|
---|
| 136 | ;
|
---|
| 137 | N PSSDIY,RA50IEN,RADEFDIS,RADEFVAL,RADIC,RADUP,RAENTRY,RAMIEN,RAMSG,RARC,RAVACL,RAXNODE,TMP
|
---|
| 138 | ;=== Validate and parse parameters
|
---|
| 139 | S RADESCR=$G(RADESCR)
|
---|
| 140 | S:(RADESCR'["P")&(RADESCR'["R") RADESCR=RADESCR_"P"
|
---|
| 141 | S RASUBIEN=+$P(RAIENS,","),$P(RAIENS,",")=""
|
---|
| 142 | ;
|
---|
| 143 | ;=== Get file/field info from the data dictionary
|
---|
| 144 | I '$G(RADESCR("SELCNT")) D I $D(RARC) K RADESCR Q RARC
|
---|
| 145 | . N RABUF,SUBFILE
|
---|
| 146 | . S TMP="LABEL;MULTIPLE-VALUED;SPECIFIER"
|
---|
| 147 | . D FIELD^DID(RAFILE,RAMULT,,TMP,"RABUF","RAMSG")
|
---|
| 148 | . ;---
|
---|
| 149 | . I '$G(RABUF("MULTIPLE-VALUED")) S TMP=$T(+0) D S RARC="^" Q
|
---|
| 150 | . . W !!,"$$RXMEDIT^"_TMP_" cannot be used for single-value fields!"
|
---|
| 151 | . . W !,"Use $$RXEDIT^"_TMP_" instead.",!
|
---|
| 152 | . ;---
|
---|
| 153 | . S RADESCR("MLTNAME")=RABUF("LABEL")
|
---|
| 154 | . S (RADESCR("SUBFILE"),SUBFILE)=+RABUF("SPECIFIER")
|
---|
| 155 | . S RADESCR("FLDNAME")=$$GET1^DID(SUBFILE,.01,,"LABEL",,"RAMSG")
|
---|
| 156 | . S RADESCR("ROOT")=$$ROOT^DILFD(SUBFILE,RAIENS,1)
|
---|
| 157 | . S RADESCR("SCRDATE")=$S($G(RADATE)>0:+RADATE,1:"")
|
---|
| 158 | ;
|
---|
| 159 | ;=== Determine the execution mode
|
---|
| 160 | I RASUBIEN'>0 D K RADESCR("EDITONLY")
|
---|
| 161 | . S RADESCR("SELCNT")=$G(RADESCR("SELCNT"))+1
|
---|
| 162 | . S RASUBIEN=$$DFLTREC()
|
---|
| 163 | E S RADESCR("EDITONLY")=1
|
---|
| 164 | ;
|
---|
| 165 | ;===
|
---|
| 166 | F D Q:$D(RARC)
|
---|
| 167 | . ;--- Get the current internal value of the .01 field
|
---|
| 168 | . I RASUBIEN>0 D
|
---|
| 169 | . . S TMP=RASUBIEN_RAIENS
|
---|
| 170 | . . S RA50IEN=+$$GET1^DIQ(RADESCR("SUBFILE"),TMP,.01,"I",,"RAMSG")
|
---|
| 171 | . E S RA50IEN=0
|
---|
| 172 | . ;--- Get the external value of the .01 field
|
---|
| 173 | . I RA50IEN>0 D
|
---|
| 174 | . . S RADEFVAL=$$EN1^RAPSAPI(RA50IEN,.01)
|
---|
| 175 | . . S:RADEFVAL="" RADEFVAL=RA50IEN
|
---|
| 176 | . E S RADEFVAL=""
|
---|
| 177 | . S RADEFDIS=": "_$S(RADEFVAL'="":RADEFVAL_"// ",1:"")
|
---|
| 178 | . ;--- Display the prompt and get a user response
|
---|
| 179 | . W ! W:'$G(RADESCR("EDITONLY")) "Select "
|
---|
| 180 | . W RADESCR("FLDNAME")_RADEFDIS
|
---|
| 181 | . R RAENTRY:DTIME E S RARC="^" Q
|
---|
| 182 | . ;--- Keep the current value or exit if there is no current record
|
---|
| 183 | . I RAENTRY="" D Q
|
---|
| 184 | . . I RASUBIEN'>0 S RARC="" Q
|
---|
| 185 | . . ;--- If selecting a record, return IEN in the multiple
|
---|
| 186 | . . I '$G(RADESCR("EDITONLY")) S RARC="`"_RASUBIEN Q
|
---|
| 187 | . . ;--- If just editing the .01 field, return IEN in the DRUG file
|
---|
| 188 | . . S RARC=$S(RA50IEN>0:"`"_RA50IEN,1:"")
|
---|
| 189 | . ;--- Exit or "^"-jump
|
---|
| 190 | . I RAENTRY?1"^".E S RARC=RAENTRY Q
|
---|
| 191 | . ;--- @ entered
|
---|
| 192 | . I RAENTRY="@" D:$$DELCONF^RAPSAPI2(RASUBIEN,RA50IEN) Q
|
---|
| 193 | . . ;--- Let the FileMan delete the value of the .01 field
|
---|
| 194 | . . I $G(RADESCR("EDITONLY")) S RARC="@" Q
|
---|
| 195 | . . ;--- Delete the record at "Select ..." prompt
|
---|
| 196 | . . D DELETE^RAPSAPI2(RADESCR("SUBFILE"),RASUBIEN_RAIENS)
|
---|
| 197 | . . S RASUBIEN=$$DFLTREC()
|
---|
| 198 | . ;--- Record IEN entered
|
---|
| 199 | . I RAENTRY?1"`"1.N S:$$IEN^RAPSAPI2(.RAENTRY) RARC=RAENTRY Q
|
---|
| 200 | . ;--- Add duplicate entry (value in double quotes)
|
---|
| 201 | . I RAENTRY?1""""1.E1"""" D S RADUP=1
|
---|
| 202 | . . S RAENTRY=$E(RAENTRY,2,$L(RAENTRY)-1) ; Remove quotes
|
---|
| 203 | . E S RADUP=0
|
---|
| 204 | . ;--- ? or ?? entered
|
---|
| 205 | . I RAENTRY?1"?".1"?" D S RADUP=0
|
---|
| 206 | . . I $G(RADESCR("EDITONLY")) D Q
|
---|
| 207 | . . . D HELP^RAPSAPI2(RAENTRY,RADESCR("SUBFILE"),.01)
|
---|
| 208 | . . D HELP^RAPSAPI2(RAENTRY,RAFILE,RAMULT,RAIENS)
|
---|
| 209 | . ;--- Everything else
|
---|
| 210 | . S RADIC="^PSDRUG(",RADIC(0)="EQMZ"
|
---|
| 211 | . S RADIC("A")=RADESCR("FLDNAME")_": "
|
---|
| 212 | . D SETVACL^RAPSAPI2(RADESCR)
|
---|
| 213 | . D DIC^PSSDI(50,"RA",.RADIC,RAENTRY,,RADESCR("SCRDATE"),,.RAVACL)
|
---|
| 214 | . Q:Y'>0
|
---|
| 215 | . ;--- If just editing the .01 field, return IEN in the DRUG file
|
---|
| 216 | . I $G(RADESCR("EDITONLY")) S RARC="`"_(+Y) Q
|
---|
| 217 | . ;--- Try to find the drug in the multiple.
|
---|
| 218 | . ;--- If not found or duplication is forced, add the drug.
|
---|
| 219 | . S RAXNODE=$NA(@(RADESCR("ROOT"))@("B",+Y))
|
---|
| 220 | . S RAMIEN=+$O(@RAXNODE@(0))
|
---|
| 221 | . I (RAMIEN'>0)!RADUP S RARC="""`"_(+Y)_"""" Q
|
---|
| 222 | . ;--- Otherwise, select a record from the multiple.
|
---|
| 223 | . I $O(@RAXNODE@(RAMIEN))>0 D Q:RAMIEN'>0
|
---|
| 224 | . . S RAMIEN=$$MULTSEL^RAPSAPI2(RAXNODE,RADESCR("MLTNAME"),$P(Y,U,2))
|
---|
| 225 | . S RARC="`"_RAMIEN
|
---|
| 226 | ;
|
---|
| 227 | ;=== Cleanup
|
---|
| 228 | S RADESCR("RESULT")=RARC
|
---|
| 229 | D:'$G(RADESCR("EDITONLY"))
|
---|
| 230 | . K:(RARC="^")!((RARC="")&(RA50IEN'>0)) RADESCR
|
---|
| 231 | Q RARC
|
---|