| [796] | 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 |
|
|---|