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