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
|
---|