| 1 | SCDXPRN2 ;ALB/JRP - HISTORY FILE REPORTS;21-JUL-1997
 | 
|---|
| 2 |  ;;5.3;Scheduling;**128,135,405**;AUG 13, 1993
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 | FULLHIST ;Print full transmission history report
 | 
|---|
| 5 |  ; - Report based within the ACRP Transmission History file (#409.77)
 | 
|---|
| 6 |  ; - User prompted for selection criteria
 | 
|---|
| 7 |  ;     Division (one/many/all)     Clinic (o/m/a)     Patient (o/m/a)
 | 
|---|
| 8 |  ; - User prompted for transmission date range
 | 
|---|
| 9 |  ; - Report formatted for 80 columns (allows output to screen)
 | 
|---|
| 10 |  ;
 | 
|---|
| 11 |  ;Declare variables
 | 
|---|
| 12 |  N VAUTSTR,VAUTNI,VAUTVB,VAUTNALL,VAUTD,VAUTC,VAUTN
 | 
|---|
| 13 |  N SCDXBEG,SCDXEND,SCDXGLO,X,Y,SCDXH,SCDXLOCK
 | 
|---|
| 14 |  ;SD*5.3*405 lock user from running multiple times in same session
 | 
|---|
| 15 |  I $D(^TMP("RPT-LOCK",$J,DUZ)) W !!,"Sorry, you either have this report already running or queued to run.",!,"Please try again later.",!! Q
 | 
|---|
| 16 |  ;Initialize selection global
 | 
|---|
| 17 |  S SCDXGLO=$NA(^TMP("SCDXPRN2",$J,"SELECT"))
 | 
|---|
| 18 |  K @SCDXGLO
 | 
|---|
| 19 |  ;Get division(s) - default to 'ALL' if single division
 | 
|---|
| 20 |  S VAUTD=1 I ($P($G(^DG(43,1,"GL")),"^",2)) D DIVISION^VAUTOMA Q:(Y<0)
 | 
|---|
| 21 |  ;Copy into global location [for tasking]
 | 
|---|
| 22 |  ; Local array not deleted - it's required input for clinic selection
 | 
|---|
| 23 |  M @SCDXGLO@("VAUTD")=VAUTD
 | 
|---|
| 24 |  ;Get clinic(s)
 | 
|---|
| 25 |  S VAUTNI=2 D CLINIC^VAUTOMA Q:(Y<0)
 | 
|---|
| 26 |  ;Copy into global location [for tasking] and delete local array
 | 
|---|
| 27 |  M @SCDXGLO@("VAUTC")=VAUTC
 | 
|---|
| 28 |  K VAUTC
 | 
|---|
| 29 |  ;Delete local array of selected divisions
 | 
|---|
| 30 |  K VAUTD
 | 
|---|
| 31 |  ;Get patient(s)
 | 
|---|
| 32 |  S VAUTNI=2 D PATIENT^VAUTOMA Q:(Y<0)
 | 
|---|
| 33 |  ;Copy into global location [for tasking] and delete array
 | 
|---|
| 34 |  M @SCDXGLO@("VAUTN")=VAUTN
 | 
|---|
| 35 |  K VAUTN
 | 
|---|
| 36 |  ;Set allowable date range
 | 
|---|
| 37 |  S SCDXBEG=2961001
 | 
|---|
| 38 |  S SCDXEND=$$DT^XLFDT()
 | 
|---|
| 39 |  ;Begin date help text
 | 
|---|
| 40 |  S SCDXH("B",1)="Enter transmission date to begin search from"
 | 
|---|
| 41 |  S SCDXH("B",2)=" "
 | 
|---|
| 42 |  S SCDXH("B",3)=$$FMTE^XLFDT(SCDXBEG)_" is the earliest date allowed"
 | 
|---|
| 43 |  S SCDXH("B",4)=$$FMTE^XLFDT(SCDXEND)_" will be the latest date allowed"
 | 
|---|
| 44 |  S SCDXH("B",5)=" "
 | 
|---|
| 45 |  S SCDXH("B",6)="Note: Encounter date does not always match date of"
 | 
|---|
| 46 |  S SCDXH("B")="      transmission to the National Patient Care Database"
 | 
|---|
| 47 |  ; End date help text
 | 
|---|
| 48 |  S SCDXH("E",1)="Enter transmission date to end search at"
 | 
|---|
| 49 |  S SCDXH("E",2)=" "
 | 
|---|
| 50 |  S SCDXH("E",3)=$$FMTE^XLFDT(SCDXEND)_" is the latest date allowed"
 | 
|---|
| 51 |  S SCDXH("E",4)=$$FMTE^XLFDT(SCDXBEG)_" was the earliest date allowed"
 | 
|---|
| 52 |  S SCDXH("E",5)=" "
 | 
|---|
| 53 |  S SCDXH("E",6)="Note: Encounter date does not always match date of"
 | 
|---|
| 54 |  S SCDXH("E")="      transmission to the National Patient Care Database"
 | 
|---|
| 55 |  S X=$$GETDTRNG^SCDXUTL1(SCDXBEG,SCDXEND,$NA(SCDXH("B")),$NA(SCDXH("E")))
 | 
|---|
| 56 |  Q:(X<0)
 | 
|---|
| 57 |  K SCDXH
 | 
|---|
| 58 |  S SCDXBEG=+$P(X,"^",1)
 | 
|---|
| 59 |  S SCDXEND=+$P(X,"^",2)
 | 
|---|
| 60 |  S SCDXLOCK=$J_U_DUZ  ;SD*5.3*405 lock variable for when report is queued
 | 
|---|
| 61 |  S ^TMP("RPT-LOCK",$J,DUZ)=""  ;SD*5.3*405 set lock for current user
 | 
|---|
| 62 |  ;Queue/run
 | 
|---|
| 63 |  W !!
 | 
|---|
| 64 |  S ZTDESC="ACRP TRANSMISSION HISTORY REPORT"
 | 
|---|
| 65 |  S ZTSAVE("SCDXBEG")=""
 | 
|---|
| 66 |  S ZTSAVE("SCDXEND")=""
 | 
|---|
| 67 |  S ZTSAVE("SCDXGLO")=""
 | 
|---|
| 68 |  S ZTSAVE("SCDXLOCK")=""  ;SD*5.3*405
 | 
|---|
| 69 |  S ZTSAVE($$OREF^DILF(SCDXGLO))=""
 | 
|---|
| 70 |  S IOP="Q"
 | 
|---|
| 71 |  D EN^XUTMDEVQ("PRINT^SCDXPRN2",ZTDESC,.ZTSAVE)
 | 
|---|
| 72 |  ;Done - reset IO variables (safety measure) and quit
 | 
|---|
| 73 |  I POP K ^TMP("RPT-LOCK",$J,DUZ)
 | 
|---|
| 74 |  I $D(X) I X="^" K ^TMP("RPT-LOCK",$J,DUZ)
 | 
|---|
| 75 |  D HOME^%ZIS
 | 
|---|
| 76 |  Q
 | 
|---|
| 77 |  ;
 | 
|---|
| 78 | PRINT ;Print report
 | 
|---|
| 79 |  ;Input  : SCDXBEG - Begin date (FileMan)
 | 
|---|
| 80 |  ;                 - Refers to date/time of transmission (not encounter)
 | 
|---|
| 81 |  ;         SCDXEND - End date (FileMan)
 | 
|---|
| 82 |  ;                 - Refers to date/time of transmission (not encounter)
 | 
|---|
| 83 |  ;         SCDXGLO - Global containing selection criteria
 | 
|---|
| 84 |  ;         SCDXLOCK- Equals user's DUZ and locks the same user from
 | 
|---|
| 85 |  ;                   queueing the report more than once at the same time
 | 
|---|
| 86 |  ;                   This was output of calls to VAUTOMA for division,
 | 
|---|
| 87 |  ;                   clinic, and patient (full global reference)
 | 
|---|
| 88 |  ;           Divisions selected   Clinics selected     Patients selected
 | 
|---|
| 89 |  ;           SCDXGLO("VAUTD")     SCDXGLO("VAUTC")     SCDXGLO("VAUTN")
 | 
|---|
| 90 |  ;           SCDXGLO("VAUTD",x)   SCDXGLO("VAUTC",x)   SCDXGLO("VAUTN",x)
 | 
|---|
| 91 |  ;Output : None
 | 
|---|
| 92 |  ;Notes  : All input is REQUIRED - report will not be generated if
 | 
|---|
| 93 |  ;         any of the variables are not defined
 | 
|---|
| 94 |  ;       : All input (including global location) will be deleted on exit
 | 
|---|
| 95 |  ;       : User will be prompted for device except on queued entry
 | 
|---|
| 96 |  ;
 | 
|---|
| 97 |  ;Declare variables
 | 
|---|
| 98 |  N DIC,L,BY,FR,TO,DHD,FLDS,DISPAR,DIOBEG,DIOEND,IOP,SCDXSLVE,DOLJ
 | 
|---|
| 99 |  ;Define sort criteria
 | 
|---|
| 100 |  S DIC="^SD(409.77,"
 | 
|---|
| 101 |  S L=0
 | 
|---|
| 102 |  ;Define sort array
 | 
|---|
| 103 |  S BY(0)="^TMP(""SCDXPRN2"",$J,""SORT"","
 | 
|---|
| 104 |  S L(0)=6
 | 
|---|
| 105 |  ;Make FileMan think sort already done (set fake value into array)
 | 
|---|
| 106 |  S ^TMP("SCDXPRN2",$J,"SORT",1,2,3,4,5,6)=""
 | 
|---|
| 107 |  ;Define sort routine
 | 
|---|
| 108 |  S DIOBEG="D SORT^SCDXPRN2"
 | 
|---|
| 109 |  ;Define post-report action
 | 
|---|
| 110 |  S DIOEND="K ^TMP(""SCDXPRN2"",$J,""SORT"")"
 | 
|---|
| 111 |  ;Form feed for each clinic
 | 
|---|
| 112 |  S DISPAR(0,2)="#^;"
 | 
|---|
| 113 |  ;Define print fields
 | 
|---|
| 114 |  S FLDS="[SCDX XMIT HIST FULL PRINT]"
 | 
|---|
| 115 |  ;Define header & footer
 | 
|---|
| 116 |  S DHD="[SCDX XMIT HIST FULL HEADER]-[SCDX XMIT HIST FULL FOOTER]"
 | 
|---|
| 117 |  ;Use current device
 | 
|---|
| 118 |  S IOP=IO
 | 
|---|
| 119 |  ;Remember IO("S")
 | 
|---|
| 120 |  S SCDXSLVE=+$G(IO("S"))
 | 
|---|
| 121 |  ;Print report
 | 
|---|
| 122 |  D EN1^DIP
 | 
|---|
| 123 |  ;Reset IO("S")
 | 
|---|
| 124 |  S:(SCDXSLVE) IO("S")=SCDXSLVE
 | 
|---|
| 125 |  ;Delete input array & variables
 | 
|---|
| 126 |  K @SCDXGLO
 | 
|---|
| 127 |  K SCDXBEG,SCDXEND,SCDXGLO
 | 
|---|
| 128 |  ;If queued, purge task
 | 
|---|
| 129 |  S:($D(ZTQUEUED)) ZTREQ="@"
 | 
|---|
| 130 |  ;SD*5.3*405 remove lock for current user
 | 
|---|
| 131 |  K ^TMP("RPT-LOCK",$P(SCDXLOCK,U,1),$P(SCDXLOCK,U,2))
 | 
|---|
| 132 |  Q
 | 
|---|
| 133 |  ;
 | 
|---|
| 134 | SORT ;Sort routine
 | 
|---|
| 135 |  ;Input  : See TASK entry point
 | 
|---|
| 136 |  ;Output : Global containing sorted entries for printing
 | 
|---|
| 137 |  ;           ^TMP("SCDXPRN2",$J,"SORT",Div,Clin,Pat,EncDate,VID,DA)
 | 
|---|
| 138 |  ;             Div = Division name     Clin = Clinic name
 | 
|---|
| 139 |  ;             Pat = Patient name      EncDate = Encounter date [no time]
 | 
|---|
| 140 |  ;             VID = Visit ID          DA = Pointer to entry in 409.77
 | 
|---|
| 141 |  ;Notes  : ^TMP("SCDXPRN2",$J,"SORT") will be initialized upon entry
 | 
|---|
| 142 |  ;       : Existance & validity of input is assumed
 | 
|---|
| 143 |  ;
 | 
|---|
| 144 |  ;Declare variables
 | 
|---|
| 145 |  N HISTPTR,NODE,DATE,NAME,CLINIC,DIVISION,VID
 | 
|---|
| 146 |  N BEGDATE,ENDDATE,TMP,VAUTD,VAUTC,VAUTN
 | 
|---|
| 147 |  ;Make begin and end dates opposing midnights
 | 
|---|
| 148 |  S BEGDATE=$$FMADD^XLFDT($P(SCDXBEG,".",1),-1,23,59,59)
 | 
|---|
| 149 |  S ENDDATE=$$FMADD^XLFDT($P(SCDXEND,".",1),0,23,59,59)
 | 
|---|
| 150 |  ;All divisions selected ?
 | 
|---|
| 151 |  S VAUTD=+$G(@SCDXGLO@("VAUTD"))
 | 
|---|
| 152 |  ;All clinics selected ?
 | 
|---|
| 153 |  S VAUTC=+$G(@SCDXGLO@("VAUTC"))
 | 
|---|
| 154 |  ;All patients selected ?
 | 
|---|
| 155 |  S VAUTN=+$G(@SCDXGLO@("VAUTN"))
 | 
|---|
| 156 |  ;Initialize sort array
 | 
|---|
| 157 |  K ^TMP("SCDXPRN2",$J,"SORT")
 | 
|---|
| 158 |  ;Sort/screen
 | 
|---|
| 159 |  F  S BEGDATE=+$O(^SD(409.77,"AXMIT",BEGDATE)) Q:(('BEGDATE)!(BEGDATE>ENDDATE))  D  Q:($$S^%ZTLOAD())
 | 
|---|
| 160 |  .S HISTPTR=0
 | 
|---|
| 161 |  .F  S HISTPTR=+$O(^SD(409.77,"AXMIT",BEGDATE,HISTPTR)) Q:('HISTPTR)  D  Q:($$S^%ZTLOAD())
 | 
|---|
| 162 |  ..;Grab zero node of entry
 | 
|---|
| 163 |  ..S NODE=$G(^SD(409.77,HISTPTR,0))
 | 
|---|
| 164 |  ..;Get encounter date (strip time)
 | 
|---|
| 165 |  ..S TMP=+$P(NODE,"^",2)
 | 
|---|
| 166 |  ..S DATE=$P(TMP,".",1)
 | 
|---|
| 167 |  ..;Get patient
 | 
|---|
| 168 |  ..S TMP=+$P(NODE,"^",3)
 | 
|---|
| 169 |  ..S NAME=$P($G(^DPT(TMP,0),"UNKNOWN"),"^",1)
 | 
|---|
| 170 |  ..;Patient selection screen
 | 
|---|
| 171 |  ..I ('VAUTN) Q:('$D(@SCDXGLO@("VAUTN",TMP)))
 | 
|---|
| 172 |  ..;Get clinic
 | 
|---|
| 173 |  ..S TMP=+$P(NODE,"^",4)
 | 
|---|
| 174 |  ..S CLINIC=$P($G(^SC(TMP,0),"UNKNOWN"),"^",1)
 | 
|---|
| 175 |  ..;Clinic selection screen
 | 
|---|
| 176 |  ..I ('VAUTC) Q:('$D(@SCDXGLO@("VAUTC",TMP)))
 | 
|---|
| 177 |  ..;Get division
 | 
|---|
| 178 |  ..S TMP=+$P(NODE,"^",5)
 | 
|---|
| 179 |  ..S DIVISION=$P($G(^DG(40.8,TMP,0),"UNKNOWN"),"^",1)
 | 
|---|
| 180 |  ..;Division selection screen
 | 
|---|
| 181 |  ..I ('VAUTD) Q:('$D(@SCDXGLO@("VAUTD",TMP)))
 | 
|---|
| 182 |  ..;Get visit ID
 | 
|---|
| 183 |  ..S VID=+$P(NODE,"^",6)
 | 
|---|
| 184 |  ..;Store in pre-sort array
 | 
|---|
| 185 |  ..S ^TMP("SCDXPRN2",$J,"SORT",DIVISION,CLINIC,NAME,DATE,VID,HISTPTR)=""
 | 
|---|
| 186 |  ;Done
 | 
|---|
| 187 |  Q
 | 
|---|