1 | TMGTRAN1 ;TMG/kst/TRANSCRIPTION REPORT FUNCTIONS -- UI ;03/25/06
|
---|
2 | ;;1.0;TMG-LIB;**1**;09/01/05
|
---|
3 |
|
---|
4 | ;" TRANSCRIPTION REPORT FUNCTIONS
|
---|
5 |
|
---|
6 | ;"=======================================================================
|
---|
7 | ;" API -- Public Functions.
|
---|
8 | ;"=======================================================================
|
---|
9 | ;"RPTCUR
|
---|
10 | ;"RPTASK
|
---|
11 | ;"RPTQUIET(OPTIONS)
|
---|
12 | ;"FREECUR
|
---|
13 | ;"FREEASK
|
---|
14 | ;"ScanSign(OPTIONS,SIGNED)
|
---|
15 | ;"PWDSNOOP(IEN)
|
---|
16 | ;"SHOWUNSIGNED
|
---|
17 | ;"SIGNDOC(DocIEN,OPTIONS)
|
---|
18 | ;"PRINT(DocArray) ; Prompt and print, or array
|
---|
19 |
|
---|
20 |
|
---|
21 |
|
---|
22 | ;"=======================================================================
|
---|
23 | ;" Private Functions.
|
---|
24 | ;"=======================================================================
|
---|
25 | ;"AskDatesRPT(Options)
|
---|
26 | ;"FreeDocs(AuthorIEN,ShowDetails)
|
---|
27 |
|
---|
28 | ;"=======================================================================
|
---|
29 | RPTCUR
|
---|
30 | ;"SCOPE: PUBLIC
|
---|
31 | ;"Purpose: To report transcription productivity for the current user (DUZ)
|
---|
32 | ;"Input: none. User will be asked for start and end dates
|
---|
33 | ;"Output: Produces a report to choses output channel.
|
---|
34 |
|
---|
35 | new Options
|
---|
36 |
|
---|
37 | write !,"-- TRANSCRIPTION PRODUCTIVITY CREDIT REPORT -- ",!!
|
---|
38 | write "Showing credit for: ",$piece($get(^VA(200,DUZ,0)),"^",1),!!
|
---|
39 |
|
---|
40 | set Options("TRANS")=DUZ
|
---|
41 | do AskDatesRPT(.Options)
|
---|
42 |
|
---|
43 | quit
|
---|
44 |
|
---|
45 | RPTASK
|
---|
46 | ;"SCOPE: PUBLIC
|
---|
47 | ;"Purpose: To report transcription productivity for a chosen user
|
---|
48 | ;"Input: none. User will be asked for the user to report on, and also
|
---|
49 | ;" start and end dates
|
---|
50 | ;"Output: Produces a report to choses output channel.
|
---|
51 |
|
---|
52 | new Options
|
---|
53 |
|
---|
54 | ;"set TMGDEBUG=1 ;"TEMP!!!
|
---|
55 |
|
---|
56 | write !,"-- TRANSCRIPTION PRODUCTIVITY CREDIT REPORT -- ",!!
|
---|
57 |
|
---|
58 | set DIC=200 ;"NEW PERSON file
|
---|
59 | set DIC(0)="MAQE"
|
---|
60 | set DIC("A")="Enter name of transcriptionist (^ to abort): "
|
---|
61 | do ^DIC
|
---|
62 | if +Y=-1 do goto RADone
|
---|
63 | . write !,"No transcriptionist selected. Aborting report.",!
|
---|
64 |
|
---|
65 | set Options("TRANS")=+Y
|
---|
66 |
|
---|
67 | do AskDatesRPT(.Options)
|
---|
68 | RADone
|
---|
69 | quit
|
---|
70 |
|
---|
71 | RPTCURA
|
---|
72 | ;"SCOPE: PUBLIC
|
---|
73 | ;"Purpose: To report current user's (DUZ) cost for all transcriptionists
|
---|
74 | ;"Input: none. User will be asked for start and end dates
|
---|
75 | ;"Output: Produces a report to choses output channel.
|
---|
76 |
|
---|
77 | new Options
|
---|
78 |
|
---|
79 | write !,"-- TRANSCRIPTION COST REPORT -- ",!!
|
---|
80 | write "Showing cost for: ",$piece($get(^VA(200,DUZ,0)),"^",1),!!
|
---|
81 |
|
---|
82 | set Options("AUTHOR")=DUZ
|
---|
83 | do AskDatesRPT(.Options)
|
---|
84 |
|
---|
85 | quit
|
---|
86 |
|
---|
87 | RPTASKA
|
---|
88 | ;"SCOPE: PUBLIC
|
---|
89 | ;"Purpose: To report transcription costs for a chosen user
|
---|
90 | ;"Input: none. User will be asked for the user to report on, and also
|
---|
91 | ;" start and end dates
|
---|
92 | ;"Output: Produces a report to choses output channel.
|
---|
93 |
|
---|
94 | new Options
|
---|
95 |
|
---|
96 | write !,"-- TRANSCRIPTION COST REPORT -- ",!!
|
---|
97 |
|
---|
98 | set DIC=200 ;"NEW PERSON file
|
---|
99 | set DIC(0)="MAQE"
|
---|
100 | set DIC("A")="Enter name of author (^ to abort): "
|
---|
101 | do ^DIC
|
---|
102 | if +Y=-1 do goto RAADone
|
---|
103 | . write !,"No author selected. Aborting report.",!
|
---|
104 |
|
---|
105 | set Options("AUTHOR")=+Y
|
---|
106 |
|
---|
107 | do AskDatesRPT(.Options)
|
---|
108 | RAADone
|
---|
109 | quit
|
---|
110 |
|
---|
111 |
|
---|
112 |
|
---|
113 | AskDatesRPT(Options)
|
---|
114 | ;"SCOPE: PUBLIC
|
---|
115 | ;"Purpose: to finish the interactive report process.
|
---|
116 | ;"Input: An array that should contain Options("TRANS")=IEN
|
---|
117 |
|
---|
118 | write !!!
|
---|
119 | write "NOTE: Enter date range for note ENTRY into system, not date of service.",!
|
---|
120 | new %DT
|
---|
121 | set %DT="AEP"
|
---|
122 | set %DT("A")="Enter starting date (^ to abort): "
|
---|
123 | do ^%DT
|
---|
124 | if Y=-1 do goto ADRDone
|
---|
125 | . write "Invalid date. Aborting report.",!
|
---|
126 | set Options("START")=Y
|
---|
127 |
|
---|
128 | set %DT("A")="Enter ending date (^ to abort): "
|
---|
129 | do ^%DT
|
---|
130 | if Y=-1 do goto ADRDone
|
---|
131 | . write "Invalid date. Aborting report.",!
|
---|
132 | set Options("END")=Y
|
---|
133 |
|
---|
134 | new YN
|
---|
135 | read !,"Show Details? YES// ",YN:$get(DTIME,3600)
|
---|
136 | if YN="" set YN="Y"
|
---|
137 | set Options("DETAILS")=($$UP^XLFSTR(YN)["Y")
|
---|
138 | if YN="^" write "Aborting.",! goto ADRDone
|
---|
139 |
|
---|
140 | set %ZIS("A")="Enter output printer or device (^ to abort): "
|
---|
141 | do ^%ZIS
|
---|
142 | if POP do goto ADRDone
|
---|
143 | . write !,"Error selecting output printer or device. Aborting report.",!
|
---|
144 |
|
---|
145 | use IO
|
---|
146 | do RPTQUIET(.Options)
|
---|
147 | use IO(0)
|
---|
148 |
|
---|
149 | do ^%ZISC
|
---|
150 |
|
---|
151 | ADRDone
|
---|
152 | quit
|
---|
153 |
|
---|
154 |
|
---|
155 | RPTQUIET(OPTIONS)
|
---|
156 | ;"SCOPE: PUBLIC
|
---|
157 | ;"Purpose: To create a report on transcription productivity based on
|
---|
158 | ;" options specified in OPTIONS.
|
---|
159 | ;"Input: The following elements in OPTIONS should be defined
|
---|
160 | ;" 0PTIONS("TRANS") ;"the IEN of the transcriptionst (IEN from file 200)
|
---|
161 | ;" This term is to limit the search. If all transcriptionsts are
|
---|
162 | ;" wanted, then don't define OPTIONS("TRANS")
|
---|
163 | ;" If multiple transcriptionists need to be specified, use this format:
|
---|
164 | ;" OPTIONS("TRANS")="*"
|
---|
165 | ;" OPTIONS("TRANS",1)=IEN#1
|
---|
166 | ;" OPTIONS("TRANS",2)=IEN#2
|
---|
167 | ;" OPTIONS("TRANS",3)=IEN#3
|
---|
168 | ;" 0PTIONS("AUTHOR") ;"the IEN of the author (IEN from file 200)
|
---|
169 | ;" This term is to limit the search. If all authors are
|
---|
170 | ;" wanted, then don't define OPTIONS("AUTHOR")
|
---|
171 | ;" If multiple authors need to be specified, use this format:
|
---|
172 | ;" OPTIONS("AUTHOR")="*"
|
---|
173 | ;" OPTIONS("AUTHOR",1)=IEN#1
|
---|
174 | ;" OPTIONS("AUTHOR",2)=IEN#2
|
---|
175 | ;" OPTIONS("AUTHOR",3)=IEN#3
|
---|
176 | ;" OPTIONS("START") ;"Earliest date of documents, in Fileman internal format
|
---|
177 | ;" OPTIONS("END") ;"Latest date of documents, in Fileman internal format
|
---|
178 | ;" OPTIONS("DETAILS") ;"if 1, then each document showed
|
---|
179 | ;"Note: This will create a report by writing to the current device
|
---|
180 | ;" If the user wants output to go to a DEVICE, then they should call
|
---|
181 | ;" ^%ZIS prior to calling this function, and call ^%ZISC aftewards to close
|
---|
182 |
|
---|
183 | if $get(TMGDEBUG)>0 do DebugEntry^TMGDEBUG(.DBIndent,"RPTQUIET^TMGTRANS1")
|
---|
184 |
|
---|
185 | new index
|
---|
186 | new TransIEN,AuthorIEN
|
---|
187 | new TransArrayP set TransArrayP="OPTIONS(""TRANS"")"
|
---|
188 | new AuthorArrayP set AuthorArrayP="OPTIONS(""AUTHOR"")"
|
---|
189 | new ChrCt set ChrCt=0
|
---|
190 | new LineCt set LineCt=0
|
---|
191 | new StartDT,EndDT
|
---|
192 | new CtAuthor ;"An array to subdivide lines to each doctor's account
|
---|
193 | new CtTrans ;"An array to track transcriptionists lines and income
|
---|
194 | new AuthorInitials,TransInitials
|
---|
195 | new ShowDetails set ShowDetails=+$get(OPTIONS("DETAILS"))
|
---|
196 |
|
---|
197 | set StartDT=+$get(OPTIONS("START"))
|
---|
198 | if (StartDT=0) do goto RQDone
|
---|
199 | . write "No start date specified. Aborting.",!
|
---|
200 | set EndDT=+$get(OPTIONS("END"))\1 ;" \1 removes time from date
|
---|
201 | if (EndDT=0) do goto RQDone
|
---|
202 | . write "No end date specified. Aborting.",!
|
---|
203 |
|
---|
204 | new CharsPerLine set CharsPerLine=+$piece($get(^TIU(8925.99,1,0)),"^",3)
|
---|
205 | if CharsPerLine=0 set CharsPerLine=65
|
---|
206 |
|
---|
207 | write !!," Visit;"
|
---|
208 | write $$RJ^XLFSTR("Entry Date;",15)
|
---|
209 | write $$RJ^XLFSTR("Lines@Rate=$Cost",23),"; "
|
---|
210 | write "Trn; Ath; Sgn; Patient",!
|
---|
211 | write "------------------------------------------------------------------------------",!
|
---|
212 | set index=$order(^TIU(8925,0))
|
---|
213 | for do quit:(index="")
|
---|
214 | . ;"write "."
|
---|
215 | . if index="" quit
|
---|
216 | . new k
|
---|
217 | . use IO(0) read *k:0 use IO
|
---|
218 | . if k=27 do quit
|
---|
219 | . . set index=""
|
---|
220 | . . write "Report aborted by ESC from user.",!
|
---|
221 | . new tDate set tDate=$piece($get(^TIU(8925,index,12)),"^",1)
|
---|
222 | . set tDate=tDate\1 ;"remove time from date
|
---|
223 | . ;"set mC=mC+1 set tC=tC+1 if tC>100 write mC," " set tC=0
|
---|
224 | . if (tDate'<StartDT)&(tDate'>EndDT) do
|
---|
225 | . . set TransIEN=+$piece($get(^TIU(8925,index,13)),"^",2) ;"field 1302
|
---|
226 | . . ;"write "index=",index," "
|
---|
227 | . . ;"write "TransIEN='"
|
---|
228 | . . ;"write TransIEN,"'"
|
---|
229 | . . if ($data(OPTIONS("TRANS"))=0)!($$InList^TMGMISC(TransIEN,TransArrayP)=1) do
|
---|
230 | . . . set AuthorIEN=$piece($get(^TIU(8925,index,12)),"^",2) ;field 1202
|
---|
231 | . . . if ($data(OPTIONS("AUTHOR"))=0)!($$InList^TMGMISC(AuthorIEN,AuthorArrayP)=1) do
|
---|
232 | . . . . new tCharCt,tLineCt,Date,DateS,Pt
|
---|
233 | . . . . new VDate,VDateSi
|
---|
234 | . . . . new pStatus
|
---|
235 | . . . . new Status set Status="N"
|
---|
236 | . . . . new Patient set Patient=""
|
---|
237 | . . . . set tCharCt=+$piece($get(^TIU(8925,index,"TMG")),"^",2);"field 22711=char count
|
---|
238 | . . . . set tLineCt=+$piece($get(^TIU(8925,index,0)),"^",10) ;"field .1 = line count
|
---|
239 | . . . . set pStatus=$piece($get(^TIU(8925,index,0)),"^",5) ;"field .05 is status file pointer
|
---|
240 | . . . . if +pStatus'=0 do
|
---|
241 | . . . . . set Status=$piece($get(^TIU(8925.6,pStatus,0)),"^",2) ;"8925.6=TIU Status. field .02=symbol
|
---|
242 | . . . . . if Status="c" set Status="Y"
|
---|
243 | . . . . . else set Status="N"
|
---|
244 | . . . . if (tLineCt=0)!(tCharCt=0) do
|
---|
245 | . . . . . if (tLineCt=0)&(tCharCt'=0) do
|
---|
246 | . . . . . . set tLineCt=(((tCharCt/CharsPerLine)*10)\1)/10
|
---|
247 | . . . . . else if (tCharCt=0)&(tLineCt'=0) do
|
---|
248 | . . . . . . set tCharCt=tLineCt*CharsPerLine
|
---|
249 | . . . . . else do
|
---|
250 | . . . . . . set tLineCt=$$DocLines^TMGMISC(index,.tCharCt)
|
---|
251 | . . . . . . if tLineCt=0 set tLineCt=(((tCharCt/CharsPerLine)*10)\1)/10
|
---|
252 | . . . . . set tLineCt=$$Round^TMGMISC(tLineCt)
|
---|
253 | . . . . . set tCharCt=$$Round^TMGMISC(tCharCt)
|
---|
254 | . . . . . ;"Store values, so next time we won't have to calculate it.
|
---|
255 | . . . . . set $piece(^TIU(8925,index,0),"^",10)=+tLineCt ;"field .1 = line count
|
---|
256 | . . . . . set $piece(^TIU(8925,index,"TMG"),"^",2)=tCharCt ;"field 22711 = char count
|
---|
257 | . . . . set Date=$piece($get(^TIU(8925,index,12)),"^",1) ;"field 1201 = Entry Date
|
---|
258 | . . . . ;"set DateS=$$FMTE^XLFDT(Date,"D")
|
---|
259 | . . . . set DateS=$$DTFormat^TMGMISC(Date,"ww mm/dd/yy")
|
---|
260 | . . . . set VDate=$piece($get(^TIU(8925,index,13)),"^",1) ;"field 1301=Ref/Visit Date
|
---|
261 | . . . . ;"set VDateS=$$FMTE^XLFDT(VDate,"D")
|
---|
262 | . . . . set VDateS=$$DTFormat^TMGMISC(VDate,"mm/dd/yy")
|
---|
263 | . . . . set AuthorInitials=$piece($get(^VA(200,AuthorIEN,0)),"^",2)
|
---|
264 | . . . . set TransInitials=$piece($get(^VA(200,TransIEN,0)),"^",2) ;"field 1 = initials
|
---|
265 | . . . . set CtAuthor(AuthorIEN,"LINES")=$get(CtAuthor(AuthorIEN,"LINES"))+tLineCt
|
---|
266 | . . . . set CtAuthor(AuthorIEN,"NOTES")=+$get(CtAuthor(AuthorIEN,"NOTES"))+1
|
---|
267 | . . . . set CtTrans(TransIEN,"LINES")=$get(CtTrans(TransIEN,"LINES"))+tLineCt
|
---|
268 | . . . . set CtTrans(TransIEN,"NOTES")=+$get(CtTrans(TransIEN,"NOTES"))+1
|
---|
269 | . . . . set Pt=+$piece($get(^TIU(8925,index,0)),"^",2) ;"field .02 = patient
|
---|
270 | . . . . if Pt'=0 set Patient=$piece($get(^DPT(Pt,0)),"^",1) ;"field .01 = name
|
---|
271 | . . . . new NoteBonus set NoteBonus=0
|
---|
272 | . . . . new PayRate set PayRate=$$PayRate(TransIEN,Date,.NoteBonus)
|
---|
273 | . . . . ;"new LineCost set LineCost=$$RoundDn^TMGMISC(tLineCt*PayRate)
|
---|
274 | . . . . ;"new LineCost set LineCost=(tLineCt*PayRate)
|
---|
275 | . . . . new LineCost set LineCost=(tLineCt*PayRate)+NoteBonus
|
---|
276 | . . . . set CtAuthor(AuthorIEN,"COST")=+$get(CtAuthor(AuthorIEN,"COST"))+LineCost
|
---|
277 | . . . . set CtAuthor(AuthorIEN,"BONUS")=+$get(CtAuthor(AuthorIEN,"BONUS"))+NoteBonus
|
---|
278 | . . . . set CtTrans(TransIEN,"COST")=+$get(CtTrans(TransIEN,"COST"))+LineCost
|
---|
279 | . . . . set CtTrans(TransIEN,"BONUS")=+$get(CtTrans(TransIEN,"BONUS"))+NoteBonus
|
---|
280 | . . . . if ShowDetails do
|
---|
281 | . . . . . write VDateS,"; "
|
---|
282 | . . . . . write $$RJ^XLFSTR(DateS,13),";"
|
---|
283 | . . . . . new tS set tS=tLineCt_" @"_PayRate
|
---|
284 | . . . . . if NoteBonus>0 set tS=tS_")+"_NoteBonus
|
---|
285 | . . . . . write $$RJ^XLFSTR(.tS,15)
|
---|
286 | . . . . . set tS=" =$"_LineCost_"; "
|
---|
287 | . . . . . write $$RJ^XLFSTR(.tS,10)
|
---|
288 | . . . . . write TransInitials,"; ",AuthorInitials,"; "
|
---|
289 | . . . . . write " ",Status,"; "
|
---|
290 | . . . . . write $$Clip^TMGSTUTL(Patient,15),!
|
---|
291 | . . . . set LineCt=LineCt+tLineCt
|
---|
292 | . set index=+$order(^TIU(8925,index))
|
---|
293 | . if index=0 set index=""
|
---|
294 |
|
---|
295 | write !,"Transcriptionist breakdown",!
|
---|
296 | write "-----------------------------",!
|
---|
297 | set index=$order(CtTrans(""))
|
---|
298 | for do quit:(index="")
|
---|
299 | . new TransS,Lines,Notes
|
---|
300 | . if index="" quit
|
---|
301 | . set TransS=$piece($get(^VA(200,index,0)),"^",1)
|
---|
302 | . if TransS="" set TransS="(Unknown Transcriptionist)"
|
---|
303 | . set Lines=+$get(CtTrans(index,"LINES"))
|
---|
304 | . set Notes=+$get(CtTrans(index,"NOTES"))
|
---|
305 | . write " ",TransS,": ",Lines," lines in ",Notes," notes."
|
---|
306 | . write " $",$get(CtTrans(index,"COST"))
|
---|
307 | . write " (income)",!
|
---|
308 | . if +$get(CtTrans(index,"BONUS"))>0 do
|
---|
309 | . . new c set c=+$get(CtTrans(index,"COST"))
|
---|
310 | . . new b set b=$get(CtTrans(index,"BONUS"))
|
---|
311 | . . write ?15,"$",c," = $",(c-b)," + $",b," per-note bonus.",!
|
---|
312 | . set index=$order(CtTrans(index))
|
---|
313 |
|
---|
314 | write !,"Author breakdown",!
|
---|
315 | write "--------------------",!
|
---|
316 | set index=$order(CtAuthor(""))
|
---|
317 | for do quit:(index="")
|
---|
318 | . new AuthorS,Lines,Notes
|
---|
319 | . if index="" quit
|
---|
320 | . set AuthorS=$piece($get(^VA(200,index,0)),"^",1)
|
---|
321 | . if AuthorS="" set AuthorS="(Unknown Author)"
|
---|
322 | . set Lines=+$get(CtAuthor(index,"LINES"))
|
---|
323 | . set Notes=+$get(CtAuthor(index,"NOTES"))
|
---|
324 | . write " ",AuthorS,": ",Lines," lines in ",Notes," notes."
|
---|
325 | . write " $",$get(CtAuthor(index,"COST"))," (expense)",!
|
---|
326 | . if +$get(CtAuthor(index,"BONUS"))>0 do
|
---|
327 | . . new c set c=+$get(CtAuthor(index,"COST"))
|
---|
328 | . . new b set b=$get(CtAuthor(index,"BONUS"))
|
---|
329 | . . write ?15,"$",c," = $",(c-b)," + $",b," per-note bonus.",!
|
---|
330 | . set index=$order(CtAuthor(index))
|
---|
331 |
|
---|
332 | write !!,"Done.",!
|
---|
333 |
|
---|
334 | RQDone
|
---|
335 | if $get(TMGDEBUG)>0 do DebugExit^TMGDEBUG(.DBIndent,"RPTQUIET^TMGTRANS1")
|
---|
336 | quit
|
---|
337 |
|
---|
338 |
|
---|
339 | PayRateE(TransIEN,Date)
|
---|
340 | ;"Purpose: To provide a 'shell' for PayRate below, except external
|
---|
341 | ;" format of date alowed
|
---|
342 |
|
---|
343 | new IDate
|
---|
344 |
|
---|
345 | set X=$get(Date)
|
---|
346 | ;"set IDate=
|
---|
347 |
|
---|
348 | ;"COMPLETE FUNCTION LATER...
|
---|
349 |
|
---|
350 | quit
|
---|
351 |
|
---|
352 |
|
---|
353 | PayRate(TransIEN,Date,NoteBonus)
|
---|
354 | ;"Purpose: Get payrate in effect at time of Date
|
---|
355 | ;"Input: TransIEN -- the record number in file 200
|
---|
356 | ;" Date: reference date to lookup, ** in internal fileman format **
|
---|
357 | ;" NoteBonus -- [OPTIONAL] This is an out parameter. See below.
|
---|
358 | ;"Result: The payrate found in file TMG TRANSCRIPTION PAYRATE file
|
---|
359 | ;" This is dollars/line
|
---|
360 | ;" If NoteBonus was passed by reference, then the value of the
|
---|
361 | ;" NOTE BONUS field (field #3) is returned, or 0 if not found.
|
---|
362 | ;" Note: a result of 0 is returned if TransIEN not found, or
|
---|
363 | ;" no date range covers Date
|
---|
364 |
|
---|
365 | new result set result=0
|
---|
366 | new bonusresult set bonusresult=0
|
---|
367 | new RateIEN
|
---|
368 | new index
|
---|
369 |
|
---|
370 | if (+$get(TransIEN)=0)!(+$get(Date)=0) goto PRDone
|
---|
371 | set Date=Date\1
|
---|
372 | set RateIEN=+$order(^TMG(22704,"B",TransIEN,""))
|
---|
373 | if RateIEN=0 goto PRDone
|
---|
374 | merge PayRates=^TMG(22704,RateIEN,1)
|
---|
375 | set index=$order(^TMG(22704,RateIEN,1,0))
|
---|
376 | for do quit:(index="")
|
---|
377 | . if index="" quit
|
---|
378 | . new Rate set Rate=$get(^TMG(22704,RateIEN,1,index,0))
|
---|
379 | . if Rate'="" do
|
---|
380 | . . new StartDate,EndDate
|
---|
381 | . . set StartDate=$piece(Rate,"^",2)
|
---|
382 | . . set EndDate=$piece(Rate,"^",3)
|
---|
383 | . . if Date<StartDate do quit
|
---|
384 | . . . ;"write "Date=",Date," StartDate=",StartDate,!
|
---|
385 | . . if (EndDate'="")&(Date>EndDate) do quit
|
---|
386 | . . . ;"write "Date=",Date," EndDate=",EndDate,!
|
---|
387 | . . set result=$piece(Rate,"^",1)
|
---|
388 | . . set bonusresult=$piece(Rate,"^",4) ;"field#3 (NOTE BONUS)
|
---|
389 | . if result'=0 set index="" quit
|
---|
390 | . set index=$order(^TMG(22704,RateIEN,1,index))
|
---|
391 |
|
---|
392 | if result=0 do
|
---|
393 | . ;"write !,"TransIEN=",TransIEN," Date=",Date,!
|
---|
394 | PRDone
|
---|
395 | set NoteBonus=bonusresult
|
---|
396 | quit result
|
---|
397 |
|
---|
398 | ;"=======================================================================
|
---|
399 |
|
---|
400 | FREECUR
|
---|
401 | ;"Purpose: For current user, cycle through all alerts regarding
|
---|
402 | ;" documents needing to be signed, and automatically sign
|
---|
403 | ;" them, then print if user wants.
|
---|
404 | ;"Input: none. User will be asked for signature password,
|
---|
405 | ;" and if they want documents printed.
|
---|
406 | ;"Output: Produces a report to chosen output channel.
|
---|
407 |
|
---|
408 | ;"write @IOF
|
---|
409 | write !!,"-- RELEASE UNSIGNED DOCUMENTS -- ",!!
|
---|
410 | write "Releasing transcription for: ",$piece($get(^VA(200,DUZ,0)),"^",1),!!
|
---|
411 |
|
---|
412 | do FreeDocs(DUZ,1)
|
---|
413 |
|
---|
414 | write !,"Goodbye.",!
|
---|
415 |
|
---|
416 | quit
|
---|
417 |
|
---|
418 |
|
---|
419 | FREEASK
|
---|
420 | ;"Purpose: Ask for chosen user, then cycle through all alerts
|
---|
421 | ;" regarding documents needing to be signed, and automatically
|
---|
422 | ;" sign them, then print if user wants.
|
---|
423 | ;"Input: none. User will be asked for signature password,
|
---|
424 | ;" and if they want documents printed.
|
---|
425 | ;"Output: Produces a report to choses output channel.
|
---|
426 |
|
---|
427 | new Y,DIC,TransIEN,DocIEN
|
---|
428 | set TransIEN=-1
|
---|
429 |
|
---|
430 | ;"write @IOF
|
---|
431 | write !!,"-- RELEASE UNSIGNED DOCUMENTS -- ",!!
|
---|
432 |
|
---|
433 | set DIC=200 ;"NEW PERSON file
|
---|
434 | set DIC(0)="MAQE"
|
---|
435 | set DIC("A")="Enter name of author (^ to abort): "
|
---|
436 | do ^DIC
|
---|
437 | if +Y'>0 do goto RADone
|
---|
438 | . write !,"No author selected. Aborting report.",!
|
---|
439 | set DocIEN=+Y
|
---|
440 |
|
---|
441 | write !!,"OPTIONAL-- Enter name of transcriptionist to screen for. If specified, ",!
|
---|
442 | write "only notes entered by this transcriptionist will be signed and released."
|
---|
443 | set DIC("A")="Enter name of transcriptionist (ENTER or ^ to skip): "
|
---|
444 | do ^DIC
|
---|
445 | write !!
|
---|
446 | if +Y'>0 set TransIEN=+Y
|
---|
447 |
|
---|
448 | do FreeDocs(DocIEN,1,TransIEN)
|
---|
449 |
|
---|
450 | write !,"Goodbye.",!
|
---|
451 |
|
---|
452 | FADone
|
---|
453 | quit
|
---|
454 |
|
---|
455 |
|
---|
456 | FreeDocs(AuthorIEN,ShowDetails,TransIEN)
|
---|
457 | ;"Purpose: to finish the interactive release documents process.
|
---|
458 | ;" This separate entry point allows restriction of the author
|
---|
459 | ;" whose's documents are to be released.
|
---|
460 | ;"Input: AuthorIEN, the record number of the author in file 200
|
---|
461 | ;" ShowDetails: optional. Default is to show details (1)
|
---|
462 | ;" 0=don't show, 1=show
|
---|
463 | ;" TransIEN: OPTIONAL -- the IEN of the transcriptionist.
|
---|
464 | ;" IF specified, then ONLY those notes created by this
|
---|
465 | ;" transcriptionist will be finished/released
|
---|
466 |
|
---|
467 | new Signed
|
---|
468 | new abort set abort=0
|
---|
469 | new Options
|
---|
470 | new PrintAfter
|
---|
471 | new YN
|
---|
472 | new SignAll
|
---|
473 |
|
---|
474 | set Options("AUTHOR")=+$get(AuthorIEN)
|
---|
475 | set Options("SIG")=0
|
---|
476 | set Options("DETAILS")=$get(ShowDetails,1)
|
---|
477 | if +$get(TransIEN)>0 set Options("TRANS")=+TransIEN
|
---|
478 |
|
---|
479 | do
|
---|
480 | . write "Enter 'your' (meaning author's) signature code below."
|
---|
481 | . new DUZ
|
---|
482 | . set DUZ=+$get(AuthorIEN)
|
---|
483 | . if DUZ=0 quit
|
---|
484 | . do SIG^XUSESIG
|
---|
485 | . write !
|
---|
486 | . if X1'="" set Options("SIG")=1
|
---|
487 | if Options("SIG")'=1 do goto FADDone
|
---|
488 | . write "Signature code incorrect. Aborting.",!
|
---|
489 |
|
---|
490 | read "Sign all notes at once (^/Y/N): YES// ",SignAll:$get(DTIME,3600),!
|
---|
491 | if SignAll="" set SignAll="Y"
|
---|
492 | if SignAll="^" write "Aborting.",! goto ADRDone
|
---|
493 | set Options("SIGN ALL")=($$UP^XLFSTR(SignAll)["Y")
|
---|
494 |
|
---|
495 | write !,"Print Notes after signing? (^/Y/N): YES// "
|
---|
496 | read YN:$get(DTIME,3600),!
|
---|
497 | if YN="^" write "Aborting.",! goto ADRDone
|
---|
498 | if YN="" set YN="Y"
|
---|
499 | set PrintAfter=($$UP^XLFSTR(YN)["Y")
|
---|
500 |
|
---|
501 | do AlertSign(.Options,.Signed)
|
---|
502 |
|
---|
503 | write "Now look at ALL documents to find any unsigned ones.",!
|
---|
504 | set Options("START")="0001111"
|
---|
505 | do NOW^%DTC
|
---|
506 | set Options("END")=X
|
---|
507 | do ScanSign(.Options,.Signed)
|
---|
508 |
|
---|
509 | merge ^TMG("BATCH SIGNED DOCS",$J)=Signed
|
---|
510 |
|
---|
511 | if PrintAfter do PRINT(.Signed)
|
---|
512 |
|
---|
513 | FADDone
|
---|
514 | quit
|
---|
515 |
|
---|
516 |
|
---|
517 | ScanSign(OPTIONS,SIGNED)
|
---|
518 | ;"Purpose: To scan through all TIU DOCUMENTS, and release those
|
---|
519 | ;" that have a status of unsigned to completed
|
---|
520 | ;"Input: The following elements in OPTIONS should be defined
|
---|
521 | ;" 0PTIONS("AUTHOR") ;"the IEN of the user (IEN from file 200)
|
---|
522 | ;" OPTIONS("START") ;"Earliest date of documents, in Fileman internal format
|
---|
523 | ;" ;"Note if not specified, then all dates are matched
|
---|
524 | ;" OPTIONS("END") ;"Latest date of documents, in Fileman internal format
|
---|
525 | ;" ;"Note if not specified, then all dates are matched
|
---|
526 | ;" OPTIONS("DETAILS") ;"if 1, then each document is shown as signed (not quiet)
|
---|
527 | ;" OPTIONS("SIG") ;"1 if signature has been verified.
|
---|
528 | ;" -----------Optional OPTIONS below---------------
|
---|
529 | ;" OPTIONS("TRANS") ;"the IEN of note. If specified, then note will not be signed
|
---|
530 | ;" ;"unless the transcriptionist (i.e. ENTERED BY field) = this IEN
|
---|
531 | ;" -------------------------------------------------------
|
---|
532 | ;" SIGNED: OPTIONAL. This is an OUT PARAMETER -- must be passed by reference
|
---|
533 | ;" This will contain list of documents freed/signed, in this format:
|
---|
534 | ;" SIGNED(1234)=1234 with 1234 being IEN of document signed.
|
---|
535 | ;" SIGNED(1235)=1235 with 1235 being IEN of document signed.
|
---|
536 | ;" SIGNED(1236)=1236 with 1235 being IEN of document signed.
|
---|
537 |
|
---|
538 | new index
|
---|
539 | new DocAuth,Status,EnteredBy
|
---|
540 | new User,initials
|
---|
541 | new NeedsCR set NeedsCR=1
|
---|
542 | new StartDT,EndDT
|
---|
543 | new ShowDetails set ShowDetails=+$get(OPTIONS("DETAILS"))
|
---|
544 |
|
---|
545 | if +$get(OPTIONS("START"))=0 do
|
---|
546 | . new %DT
|
---|
547 | . set %DT="AEP"
|
---|
548 | . set %DT("A")="Enter starting date (^ to abort): "
|
---|
549 | . do ^%DT
|
---|
550 | . set OPTIONS("START")=Y
|
---|
551 | if $get(OPTIONS("START"))'>0 do goto SSDone
|
---|
552 | . if ShowDetails write "START date invalid. Aborting.",!
|
---|
553 |
|
---|
554 | if +$get(OPTIONS("END"))=0 do
|
---|
555 | . set %DT("A")="Enter ending date (^ to abort): "
|
---|
556 | . do ^%DT
|
---|
557 | . set OPTIONS("END")=Y
|
---|
558 | if $get(OPTIONS("END"))'>0 do goto SSDone
|
---|
559 | . if ShowDetails write "END date invalid. Aborting.",!
|
---|
560 |
|
---|
561 | set User=+$get(OPTIONS("AUTHOR"))
|
---|
562 | if User=0 do goto RQDone
|
---|
563 | . if $get(OPTIONS("DETAILS")) write "No author IEN supplied. Aborting.",!
|
---|
564 | set StartDT=+$get(OPTIONS("START"))
|
---|
565 | set EndDT=+$get(OPTIONS("END"))
|
---|
566 |
|
---|
567 | if $get(OPTIONS("DETAILS")) do
|
---|
568 | . write !,"------------------------------------------------",!
|
---|
569 | . write "Starting scan of all documents. [ESC] will abort.",!
|
---|
570 | . write "------------------------------------------------",!
|
---|
571 |
|
---|
572 | set initials=$piece($get(^VA(200,User,0)),"^",2) ;"field 1 = initials
|
---|
573 | new sUnsigned set sUnsigned=$order(^TIU(8925.6,"B","UNSIGNED",""))
|
---|
574 | new sUnverified set sUnverified=$order(^TIU(8925.6,"B","UNVERIFIED",""))
|
---|
575 |
|
---|
576 | set index=$order(^TIU(8925,0))
|
---|
577 | for do quit:(index="")
|
---|
578 | . if index="" quit
|
---|
579 | . new k read *k:0
|
---|
580 | . if k=27 do quit
|
---|
581 | . . set index=""
|
---|
582 | . . if $get(OPTIONS("DETAILS")) write "Release aborted by ESC from user.",!
|
---|
583 | . set DocAuth=$piece($get(^TIU(8925,index,12)),"^",2) ;"field 1202 = Author
|
---|
584 | . set EnteredBy=$piece($get(^TIU(8925,index,13)),"^",2) ;"field 1302 = Entered By
|
---|
585 | . if (DocAuth=$get(OPTIONS("AUTHOR"))) do
|
---|
586 | . . if $data(OPTIONS("TRANS"))&($get(OPTIONS("TRANS"))'=EnteredBy) quit
|
---|
587 | . . set Status=$piece($get(^TIU(8925,index,0)),"^",5) ;"field .05 = Status
|
---|
588 | . . if (Status=sUnsigned)!(Status=sUnverified) do ;"*** What else should go here?!!
|
---|
589 | . . . new tDate
|
---|
590 | . . . set tDate=$piece($get(^TIU(8925,index,12)),"^",1)
|
---|
591 | . . . set tDate=tDate\1 ;"integer round down (removes time decimal amount)
|
---|
592 | . . . if (StartDT=0)!(EndDT=0)!((tDate'<StartDT)&(tDate'>EndDT)) do
|
---|
593 | . . . . if $$SIGNDOC(index,.OPTIONS) do
|
---|
594 | . . . . . set SIGNED(index)=index
|
---|
595 | . set index=+$order(^TIU(8925,index))
|
---|
596 | . if index=0 set index=""
|
---|
597 |
|
---|
598 | SSDone
|
---|
599 | if $get(OPTIONS("DETAILS")) write !,"Done scanning all documents.",!
|
---|
600 |
|
---|
601 | quit
|
---|
602 |
|
---|
603 |
|
---|
604 | AlertSign(OPTIONS,SIGNED)
|
---|
605 | ;"Purpose: To cycle through all alerts for AUTHOR, and release TIU DOCUMENTS
|
---|
606 | ;" needing signature.
|
---|
607 | ;"Input: The following elements in OPTIONS should be defined
|
---|
608 | ;" 0PTIONS("AUTHOR") ;"the IEN of the user (IEN from file 200)
|
---|
609 | ;" OPTIONS("DETAILS") ;"if 1, then each document is shown as signed (not quiet)
|
---|
610 | ;" OPTIONS("SIG") ;"1 if signature has been verified.
|
---|
611 | ;" OPTIONS("SIGN ALL");"if 1, then all are signed without asking each one.
|
---|
612 | ;" SIGNED: OPTIONAL. This is an OUT PARAMETER -- must be passed by reference
|
---|
613 | ;" This will contain list of documents freed/signed, in this format:
|
---|
614 | ;" SIGNED(1234)=1234 with 1234 being IEN of document signed.
|
---|
615 | ;" SIGNED(1235)=1235 with 1235 being IEN of document signed.
|
---|
616 | ;" SIGNED(1236)=1236 with 1235 being IEN of document signed.
|
---|
617 |
|
---|
618 | new index
|
---|
619 | new Abort set Abort=0
|
---|
620 | new Alert
|
---|
621 | new DocIEN
|
---|
622 | new NumFound set NumFound=0
|
---|
623 | new SignAll set SignAll=+$get(OPTIONS("SIGN ALL"))
|
---|
624 |
|
---|
625 | set User=+$get(OPTIONS("AUTHOR"))
|
---|
626 | if User=0 do goto RQDone
|
---|
627 | . if $get(OPTIONS("DETAILS")) write "No author IEN supplied. Aborting.",!
|
---|
628 |
|
---|
629 | if $get(OPTIONS("DETAILS")) do
|
---|
630 | . write !,"-------------------------------------------------------",!
|
---|
631 | . write "Search for 'signature-needed' alerts. [ESC] will abort.",!
|
---|
632 | . write "-------------------------------------------------------",!
|
---|
633 |
|
---|
634 | if SignAll'=1 do if NumFound=0 goto ASgn2
|
---|
635 | . write !!,"-------- List of Documents to be Signed --------",!
|
---|
636 | . set index=$order(^XTV(8992,User,"XQA",0))
|
---|
637 | . for do quit:(index="")
|
---|
638 | . . if index="" quit
|
---|
639 | . . new k read *k:0
|
---|
640 | . . if k=27 do quit
|
---|
641 | . . . set index=""
|
---|
642 | . . . if $get(OPTIONS("DETAILS")) write "List aborted by ESC from user.",!
|
---|
643 | . . set Alert=$get(^XTV(8992,User,"XQA",index,0))
|
---|
644 | . . if $piece(Alert,"^",3)["available for SIGNATURE" do
|
---|
645 | . . . write $piece(Alert,"^",3),!
|
---|
646 | . . . set NumFound=NumFound+1
|
---|
647 | . . set index=$order(^XTV(8992,User,"XQA",index))
|
---|
648 | . write "-----------------------------------------------",!
|
---|
649 | . write !,NumFound," documents needing signature.",!!
|
---|
650 | . if NumFound=0 do quit
|
---|
651 | . . write "No alerts for a missing signature found.!",!
|
---|
652 |
|
---|
653 | ;"WRITE "STARTING SIGN LOOP",!
|
---|
654 | set NumFound=0
|
---|
655 | set index=$order(^XTV(8992,User,"XQA",0))
|
---|
656 | for do quit:(index="")!(Abort=1)
|
---|
657 | . new Title,YN
|
---|
658 | . if index="" quit
|
---|
659 | . set Alert=$get(^XTV(8992,User,"XQA",index,0))
|
---|
660 | . set Title=$piece(Alert,"^",3)
|
---|
661 | . if Title["available for SIGNATURE" do
|
---|
662 | . . set NumFound=NumFound+1
|
---|
663 | . . if SignAll'=1 do
|
---|
664 | . . . write "Sign: ",$piece(Title," ",1),"? (Y/N/ALL): ALL// "
|
---|
665 | . . . read YN:$get(DTIME,3600),!
|
---|
666 | . . . set YN=$$UP^XLFSTR(YN)
|
---|
667 | . . else set YN="Y"
|
---|
668 | . . if YN="" set YN="ALL" write "ALL",!
|
---|
669 | . . if YN="ALL" set SignAll=1 set YN="Y"
|
---|
670 | . . else if YN["^" write !,"Aborting.",! set Abort=1 quit
|
---|
671 | . . if YN["Y" do
|
---|
672 | . . . set DocIEN=+$get(^XTV(8992,User,"XQA",index,1))
|
---|
673 | . . . if DocIEN'=0 do
|
---|
674 | . . . . if $$SIGNDOC(DocIEN,.OPTIONS) do
|
---|
675 | . . . . . set SIGNED(DocIEN)=DocIEN
|
---|
676 | . set index=$order(^XTV(8992,User,"XQA",index))
|
---|
677 |
|
---|
678 | if $get(OPTIONS("DETAILS")) do
|
---|
679 | . write !!,"Done searching for 'needed-signature' alerts.",!
|
---|
680 |
|
---|
681 | ASgn2
|
---|
682 | if (1=0) do ;"if (NumFound=0) do
|
---|
683 | . if $get(OPTIONS("DETAILS")) do
|
---|
684 | . . write "No alert indicating a signature is needed was found....",!
|
---|
685 | . . write "...So starting a scan of all documents to look for unsigned documents.",!
|
---|
686 | . set OPTIONS("START")="0001111"
|
---|
687 | . do NOW^%DTC
|
---|
688 | . set OPTIONS("END")=X
|
---|
689 | . do ScanSign(.OPTIONS,.Signed)
|
---|
690 |
|
---|
691 | ASgnDone
|
---|
692 | quit
|
---|
693 |
|
---|
694 |
|
---|
695 | SIGNDOC(DocIEN,OPTIONS)
|
---|
696 | ;"Purpose: To sign one document
|
---|
697 | ;"Input: DocIEN -- the record number of the document to sign
|
---|
698 | ;" OPTIONS -- An array with input values. The following are used:
|
---|
699 | ;" 0PTIONS("AUTHOR") ;"the IEN of the user (IEN from file 200)
|
---|
700 | ;" OPTIONS("DETAILS") ;"if 1, then each document showed
|
---|
701 | ;" OPTIONS("SIG") ;"1 if signature has been verified.
|
---|
702 | ;"Results: 1 = successful sign. 0 = failure
|
---|
703 |
|
---|
704 | new result set result=0 ;"default to failure
|
---|
705 | new Node0
|
---|
706 | new sCompleted set sCompleted=$order(^TIU(8925.6,"B","COMPLETED",""))
|
---|
707 | new NewStatus
|
---|
708 | if $get(OPTIONS("SIG"))'=1 goto SDCDone
|
---|
709 | if +$get(OPTIONS("AUTHOR"))'>0 goto SDCDone
|
---|
710 | if $get(DocIEN)="" goto SDCDone
|
---|
711 |
|
---|
712 | new SignerS
|
---|
713 | set SignerS=1_"^"_$piece($get(^VA(200,+OPTIONS("AUTHOR"),20)),"^",2,3)
|
---|
714 | if $data(^TIU(8925,DocIEN,0))=0 do goto SDCDone
|
---|
715 | . write "Unable to sign document #",DocIEN," because it doesn't seem to exist.",!
|
---|
716 | do ES^TIURS(DocIEN,SignerS)
|
---|
717 | ;"Note: alert(s) r.e. "Note available for signature" are automatically removed
|
---|
718 |
|
---|
719 | SDLoop
|
---|
720 | set Node0=$get(^TIU(8925,DocIEN,0))
|
---|
721 | set NewStatus=$piece(Node0,"^",5) ;"field .05 = Status
|
---|
722 |
|
---|
723 | new Date,DateS,Pt
|
---|
724 | set Date=$piece(Node0,"^",7) ;"field .07 = Episode begin date/time
|
---|
725 | set DateS=$$FMTE^XLFDT(Date,"D")
|
---|
726 | set Pt=+$piece(Node0,"^",2) ;"field .02 = patient
|
---|
727 | if Pt'=0 set Patient=$piece($get(^DPT(Pt,0)),"^",1) ;"field .01 = name
|
---|
728 | if OPTIONS("DETAILS")=1 do
|
---|
729 | . write DateS," -- ",Patient
|
---|
730 |
|
---|
731 | if NewStatus'=sCompleted do goto SDLoop
|
---|
732 | . if OPTIONS("DETAILS")=1 do
|
---|
733 | . . new s
|
---|
734 | . . set s=$piece($get(^TIU(8925.6,NewStatus,0)),"^",1)
|
---|
735 | . . write " NOT completed. Status=",s
|
---|
736 | . . write !," TRYING AGAIN. (utilizing a lower-level signature method.)",!
|
---|
737 | . . set $piece(^TIU(8925,DocIEN,0),"^",5)=sCompleted
|
---|
738 |
|
---|
739 | if OPTIONS("DETAILS")=1 do
|
---|
740 | . write " Released (auto-'signed')",!
|
---|
741 |
|
---|
742 | set result=1 ;"success
|
---|
743 |
|
---|
744 | SDCDone
|
---|
745 | quit result
|
---|
746 |
|
---|
747 |
|
---|
748 | PRINT(DocArray) ; Prompt and print, or array
|
---|
749 | ;"This function was copied from PRINT^TIUEPRNT, to allow modification
|
---|
750 | ;"Function modification: changed to allow array input.
|
---|
751 | ;" DocArray: This will contain list of documents to print, in this format:
|
---|
752 | ;" DocArray(1234)=1234 with 1234 being IEN of document to be printed.
|
---|
753 | ;" DocArray(1235)=1235 with 1235 being IEN of document to be printed.
|
---|
754 | ;" DocArray(1236)=1236 with 1235 being IEN of document to be printed.
|
---|
755 | ;" Note: Is appears that DocArray(IEN)="" is the needed format.
|
---|
756 |
|
---|
757 | New TIUDEV,TIUTYP,DFN,TIUPMTHD,TIUD0,TIUMSG,TIUPR,TIUDARR,TIUDPRM
|
---|
758 | new TIUFLAG set TIUFLAG="x"
|
---|
759 | New TIUPGRP,TIUPFHDR,TIUPFNBR
|
---|
760 |
|
---|
761 | new index set index=$order(DocArray(""))
|
---|
762 | if index="" goto PRINT1X
|
---|
763 | for do quit:(index="")
|
---|
764 | . set DocIEN=index
|
---|
765 | . ;
|
---|
766 | . If +$$ISADDNDM^TIULC1(DocIEN) Set DocIEN=$Piece($Get(^TIU(8925,+DocIEN,0)),U,6)
|
---|
767 | . If $Get(^TIU(8925,DocIEN,21)) Set DocIEN=^TIU(8925,DocIEN,21)
|
---|
768 | . Set TIUD0=$Get(^TIU(8925,DocIEN,0))
|
---|
769 | . Set TIUTYP=$Piece(TIUD0,U)
|
---|
770 | . Set DFN=$Piece(TIUD0,U,2)
|
---|
771 | . If +TIUTYP'>0 Quit
|
---|
772 | . ;
|
---|
773 | . Set TIUPMTHD=$$PRNTMTHD^TIULG(+TIUTYP)
|
---|
774 | . Set TIUPGRP=$$PRNTGRP^TIULG(+TIUTYP)
|
---|
775 | . Set TIUPFHDR=$$PRNTHDR^TIULG(+TIUTYP)
|
---|
776 | . Set TIUPFNBR=$$PRNTNBR^TIULG(+TIUTYP)
|
---|
777 | . ;
|
---|
778 | . Do DOCPRM^TIULC1(+TIUTYP,.TIUDPRM,DocIEN)
|
---|
779 | . ;
|
---|
780 | . If +$Piece($Get(TIUDPRM(0)),U,9) do
|
---|
781 | . . if TIUFLAG="x" Set TIUFLAG=$$FLAG^TIUPRPN3 ;"Asks Chart vs. Work Copy? only ONCE
|
---|
782 | . If ($Get(TIUPMTHD)]"")&(+$Get(TIUPGRP))&($Get(TIUPFHDR)]"")&($Get(TIUPFNBR)]"") do
|
---|
783 | . . Set TIUDARR(TIUPMTHD,$Get(TIUPGRP)_"$"_TIUPFHDR_";"_DFN,1,DocIEN)=TIUPFNBR
|
---|
784 | . Else Set TIUDARR(TIUPMTHD,DFN,1,DocIEN)=""
|
---|
785 | . ;
|
---|
786 | . If $Get(TIUPMTHD)']"" do ;"Goto PRINT1X
|
---|
787 | . . if OPTIONS("DETAILS")=1 do
|
---|
788 | . . . Write !,$Char(7),"No Print Method Defined for "
|
---|
789 | . . . write $Piece($Get(^TIU(8925.1,+TIUTYP,0)),U)
|
---|
790 | . . ;"Hang 2
|
---|
791 | . ;
|
---|
792 | . set index=$order(DocArray(index))
|
---|
793 |
|
---|
794 | Set TIUDEV=$$DEVICE^TIUDEV(.IO) ; Get Device/allow queueing
|
---|
795 | If ($Get(IO)']"")!(TIUDEV']"") Do ^%ZISC Quit
|
---|
796 | If $Data(IO("Q")) Do QUE^TIUDEV("PRINTQ^TIUEPRNT",TIUDEV) Goto PRINT1X
|
---|
797 | Do PRINTQ^TIUEPRNT
|
---|
798 | Do ^%ZISC
|
---|
799 |
|
---|
800 | PRINT1X ; Exit single document print
|
---|
801 | Quit
|
---|
802 |
|
---|
803 |
|
---|
804 | SHOWUNSIGNED
|
---|
805 | ;"Purpose: to scan through all documents and show any that are unsigned
|
---|
806 |
|
---|
807 | new index
|
---|
808 | new DocAuth,Status,Patient,PtName
|
---|
809 | new TransIEN,TransInit
|
---|
810 | new User,initials,AuthName
|
---|
811 | new NeedsCR set NeedsCR=1
|
---|
812 | new StartDT,EndDT
|
---|
813 |
|
---|
814 | write !,"----------------------------------------------",!
|
---|
815 | write "Starting scan of documents. [ESC] will abort.",!
|
---|
816 | write "----------------------------------------------",!
|
---|
817 |
|
---|
818 | new sUnsigned set sUnsigned=$order(^TIU(8925.6,"B","UNSIGNED",""))
|
---|
819 | new sCompleted set sCompleted=$order(^TIU(8925.6,"B","COMPLETED",""))
|
---|
820 |
|
---|
821 | set index=$order(^TIU(8925,0))
|
---|
822 | for do quit:(index="")
|
---|
823 | . if index="" quit
|
---|
824 | . new k read *k:0
|
---|
825 | . if k=27 do quit
|
---|
826 | . . set index=""
|
---|
827 | . . if $get(OPTIONS("DETAILS")) write "Scan aborted by ESC from user.",!
|
---|
828 | . set Status=$piece($get(^TIU(8925,index,0)),"^",5) ;"field .05 = Status
|
---|
829 | . if (Status'=sCompleted) do
|
---|
830 | . . ;"write !
|
---|
831 | . . new tDate
|
---|
832 | . . set tDate=$piece($get(^TIU(8925,index,12)),"^",1)
|
---|
833 | . . set DocAuth=$piece($get(^TIU(8925,index,12)),"^",2) ;"field 1202 = Author
|
---|
834 | . . set initials=$piece($get(^VA(200,DocAuth,0)),"^",2) ;"field .02 = initials
|
---|
835 | . . set AuthName=$piece($get(^VA(200,DocAuth,0)),"^",1) ;"field .01 = Name
|
---|
836 | . . set Patient=$piece($get(^TIU(8925,index,0)),"^",2) ;"field .02 = patient IEN
|
---|
837 | . . set TransIEN=$piece($get(^TIU(8925,index,13)),"^",2) ;"field 1302 = Entered by IEN
|
---|
838 | . . if +TransIEN'=0 set TransInit=$piece($get(^VA(200,TransIEN,0)),"^",2) ;" field .02 = initials
|
---|
839 | . . else set TransInit="???"
|
---|
840 | . . if +Patient'=0 set PtName=$piece($get(^DPT(Patient,0)),"^",1) ;"field .01 is patient name
|
---|
841 | . . else set Patient="Name Unknown(?)"
|
---|
842 | . . set DateS=$$DTFormat^TMGMISC(tDate,"ww mm/dd/yy")
|
---|
843 | . . write "NOT COMPLETED. "
|
---|
844 | . . write $$RJ^XLFSTR(AuthName_"; ",20)
|
---|
845 | . . write $$RJ^XLFSTR(DateS_"; ",15)
|
---|
846 | . . write $$RJ^XLFSTR(TransInit_"; ",5)
|
---|
847 | . . write $$Clip^TMGSTUTL(PtName,20),!
|
---|
848 | . ;"else write "."
|
---|
849 | . set index=+$order(^TIU(8925,index))
|
---|
850 | . if index=0 set index=""
|
---|
851 |
|
---|
852 | write !,"Done scanning documents.",!
|
---|
853 |
|
---|
854 | quit
|
---|
855 |
|
---|
856 |
|
---|
857 |
|
---|
858 | PWDSNOOP(IEN)
|
---|
859 | ;"Purpose: To show private info for a given user
|
---|
860 | ;"NOTICE: This function MUST be used responsibly
|
---|
861 | ;"Input: IEN -- [OPTIONAL] the record number of the user to snoop on
|
---|
862 |
|
---|
863 | write !!,"------------------------------------------------------------------",!
|
---|
864 | write "Notice: This function will unmask private password codes.",!
|
---|
865 | write "These codes can be used spoof this EMR system. Note",!
|
---|
866 | write "that impersonating another user can be a CRIME.",!,!
|
---|
867 |
|
---|
868 | if $data(IEN) goto IS2
|
---|
869 |
|
---|
870 | set DIC=200 ;"NEW PERSON file
|
---|
871 | set DIC(0)="MAQE"
|
---|
872 | set DIC("A")="Enter name of user to unmask codes for (^ to abort): "
|
---|
873 | do ^DIC
|
---|
874 | if +Y=-1 do goto ISPDone
|
---|
875 | . write !,"No user selected. Aborting report.",!
|
---|
876 |
|
---|
877 | write !,!
|
---|
878 | set IEN=+Y
|
---|
879 |
|
---|
880 | IS2
|
---|
881 | new VerHash,AccHash,ESig
|
---|
882 | if '$data(IEN) goto ISPDone
|
---|
883 |
|
---|
884 | set VerHash=$piece($get(^VA(200,IEN,.1)),"^",2)
|
---|
885 | set AccHash=$piece($get(^VA(200,IEN,0)),"^",3)
|
---|
886 | set ESig=$piece($get(^VA(200,IEN,20)),"^",4)
|
---|
887 |
|
---|
888 | write "Access Code=",$$UN^XUSHSH(AccHash),!
|
---|
889 | write "Verify Code=",$$UN^XUSHSH(VerHash),!
|
---|
890 | write "Electronic Signature=",ESig,!!
|
---|
891 |
|
---|
892 | write "Remember, you are morally, ethically, and LEGALLY required to use",!
|
---|
893 | write "this information only in an appropriate manner.",!
|
---|
894 | write "------------------------------------------------------------------",!
|
---|
895 | write "Goodbye.",!!
|
---|
896 |
|
---|
897 | ISPDone
|
---|
898 | quit
|
---|
899 |
|
---|
900 |
|
---|
901 |
|
---|
902 |
|
---|
903 |
|
---|