| 1 | SDOQMP ;ALB/SCK - Appointment Monitoring / Performance Measure report ; [07/17/96]
 | 
|---|
| 2 |  ;;5.3;SCHEDULING;**47**;AUG 13,1993
 | 
|---|
| 3 |  Q
 | 
|---|
| 4 |  ;
 | 
|---|
| 5 | EN ;  Entry point for Access PM extract to be sent to data collection server
 | 
|---|
| 6 |  ;
 | 
|---|
| 7 |  Q:$$CHKTASK^SDOQMP0
 | 
|---|
| 8 |  D INIT,LOOP,START^SDOQMP2,BLDPME
 | 
|---|
| 9 |  D END^SDOQMP1
 | 
|---|
| 10 |  Q
 | 
|---|
| 11 |  ;
 | 
|---|
| 12 | EN1 ;  Entry point for interactive appointment monitoring report
 | 
|---|
| 13 |  ;
 | 
|---|
| 14 |  N XT,XT1,CONT,PMSEL
 | 
|---|
| 15 |  ;
 | 
|---|
| 16 |  S PMSEL=$$SELECT^SDOQMP0
 | 
|---|
| 17 |  Q:PMSEL']""
 | 
|---|
| 18 |  ;
 | 
|---|
| 19 |  I PMSEL="C" G EN1Q:'$$CLINIC^SDOQMP0
 | 
|---|
| 20 |  I PMSEL="S" G EN1Q:'$$STOP^SDOQMP0
 | 
|---|
| 21 |  I PMSEL="D" G EN1Q:'$$DIV^SDOQMP0
 | 
|---|
| 22 |  ;
 | 
|---|
| 23 |  F XT=1:1 S XT1=$P($T(MSG+XT),";;",2) Q:XT1="$$END"  W !,XT1
 | 
|---|
| 24 | AGN S CONT=0
 | 
|---|
| 25 |  S %ZIS="Q" D ^%ZIS  G:POP EN1Q
 | 
|---|
| 26 |  ;
 | 
|---|
| 27 |  I IOM'=132 D  G:'CONT AGN
 | 
|---|
| 28 |  . S:$E(IOST,1,2)="C-" DIR("A",1)="It's not recommended to print this report to screen."
 | 
|---|
| 29 |  . S DIR(0)="Y^A",DIR("A")="Do you want to select another device?",DIR("B")="YES"
 | 
|---|
| 30 |  . S DIR("A",2)="The selected device does not have 132 columns."
 | 
|---|
| 31 |  . D ^DIR K DIR
 | 
|---|
| 32 |  . S:$D(DIRUT)!(Y=0) CONT=1
 | 
|---|
| 33 |  ;
 | 
|---|
| 34 | QUE I $D(IO("Q")) D  G EN1Q
 | 
|---|
| 35 |  . S ZTRTN="START^SDOQMP",ZTDESC="Appointment Monitoring Report"
 | 
|---|
| 36 |  . S:PMSEL="C" ZTSAVE("CLINIC(")="",ZTSAVE("CLINIC")=""
 | 
|---|
| 37 |  . S:PMSEL="S" ZTSAVE("VAUTC(")="",ZTSAVE("VAUTC")=""
 | 
|---|
| 38 |  . S:PMSEL="D" ZTSAVE("VAUTD(")="",ZTSAVE("VAUTD")=""
 | 
|---|
| 39 |  . D ^%ZTLOAD W:$D(ZTSK) !,"TASK #: ",ZTSK
 | 
|---|
| 40 |  . D HOME^%ZIS K IO("Q")
 | 
|---|
| 41 |  ;
 | 
|---|
| 42 |  D WAIT^DICD
 | 
|---|
| 43 | START D INIT,LOOPS^SDOQMP0,START^SDOQMP2,BLDRPT
 | 
|---|
| 44 |  ;
 | 
|---|
| 45 | EN1Q D:'$D(ZTQUEUED) ^%ZISC
 | 
|---|
| 46 |  D END^SDOQMP1
 | 
|---|
| 47 |  K CLINIC,^TMP("SDAMMS"),^TMP("SDPM"),VAUTD,VAUTC,^TMP("SDMSG")
 | 
|---|
| 48 |  Q
 | 
|---|
| 49 |  ;
 | 
|---|
| 50 | INIT ;   Initialize date arrays for calculating next available appointments
 | 
|---|
| 51 |  ;
 | 
|---|
| 52 |  S:'$D(U) U="^"
 | 
|---|
| 53 |  K ^TMP("SDAMMS"),^TMP("SDPM"),^TMP("APPT")
 | 
|---|
| 54 |  S ^TMP("SDAMMS",$J,"MGN")=80,(CNT,CNT1,CNT2,CNT3,CNT4)=0,IOM=80
 | 
|---|
| 55 |  S ^TMP("SDAMMS",$J,"PG")=0,$P(^TMP("SDAMMS",$J,"="),"=",IOM)=""
 | 
|---|
| 56 |  S X="T" D ^%DT S DT=Y X ^DD("DD") S ^TMP("SDAMMS",$J,"DT")=Y
 | 
|---|
| 57 |  S X="T" D ^%DT S AMMSRDT=Y
 | 
|---|
| 58 |  S ^TMP("SDPM",$J,0)=DT
 | 
|---|
| 59 |  S AMMSCNT="",AMMSLAST=0,AMMSZDT=DT,AMMSFDT=20,AMMSFSL=33
 | 
|---|
| 60 |  D DATES^SDOQMP1
 | 
|---|
| 61 |  Q
 | 
|---|
| 62 |  ;
 | 
|---|
| 63 | LOOP ;   Loop through the clinics in the Hospital location file.  Use only those clinics with
 | 
|---|
| 64 |  ;   an associated stop code on the required list for the access performance measure
 | 
|---|
| 65 |  ;
 | 
|---|
| 66 |  ;   Variables
 | 
|---|
| 67 |  ;      AMMSD0 - Clinic IEN
 | 
|---|
| 68 |  ;   
 | 
|---|
| 69 |  S AMMSD0=0
 | 
|---|
| 70 |  F  S AMMSD0=$O(^SC("AC","C",AMMSD0)) Q:'AMMSD0  D
 | 
|---|
| 71 |  . Q:'$P($G(^SC(AMMSD0,0)),"^",7)
 | 
|---|
| 72 |  . Q:'$$CLNOK^SDOQMP0($P($G(^SC(AMMSD0,0)),"^",7))
 | 
|---|
| 73 |  . Q:$G(^TMP("SDAMMS",$J,"Q"))=1
 | 
|---|
| 74 |  . F X1=1:1:3 D AMMSCNT^SDOQMP1 Q:AMMSLAST=0
 | 
|---|
| 75 |  Q
 | 
|---|
| 76 |  ;
 | 
|---|
| 77 | LOOPC ;  Loop through the clinics in the hospital location file.  User can select
 | 
|---|
| 78 |  ;  one-many-all clinics through this entry point.
 | 
|---|
| 79 |  ;
 | 
|---|
| 80 |  ;  Variables
 | 
|---|
| 81 |  ;    AMMSD0 -  Clinic IEN
 | 
|---|
| 82 |  ;    CLINIC -  Clinic array returned from VAUTOMA
 | 
|---|
| 83 |  ;
 | 
|---|
| 84 |  S AMMSD0=0
 | 
|---|
| 85 |  ;   Select all
 | 
|---|
| 86 |  I CLINIC=1 D
 | 
|---|
| 87 |  . F  S AMMSD0=$O(^SC("AC","C",AMMSD0)) Q:'AMMSD0  D
 | 
|---|
| 88 |  .. Q:'$P($G(^SC(AMMSD0,0)),"^",7)
 | 
|---|
| 89 |  .. Q:$G(^TMP("SDAMMS",$J,"Q"))=1
 | 
|---|
| 90 |  .. F X1=1:1:3 D AMMSCNT^SDOQMP1 Q:AMMSLAST=0
 | 
|---|
| 91 |  ;
 | 
|---|
| 92 |  ;   Select One-Many
 | 
|---|
| 93 |  I CLINIC=0&($D(CLINIC)) D 
 | 
|---|
| 94 |  . F  S AMMSD0=$O(CLINIC(AMMSD0)) Q:'AMMSD0  D
 | 
|---|
| 95 |  .. Q:'$P($G(^SC(AMMSD0,0)),"^",7)
 | 
|---|
| 96 |  .. Q:$G(^TMP("SDAMMS",$J,"Q"))=1
 | 
|---|
| 97 |  .. F X1=1:1:3 D AMMSCNT^SDOQMP1 Q:AMMSLAST=0
 | 
|---|
| 98 |  Q
 | 
|---|
| 99 |  ;
 | 
|---|
| 100 | BLDPME ;   Build the data array to be included in the mail message.
 | 
|---|
| 101 |  ;   If the number of data lines in the current array goes over 100,
 | 
|---|
| 102 |  ;   Send the array and begin building a new one.
 | 
|---|
| 103 |  ;
 | 
|---|
| 104 |  ;   Data String format:
 | 
|---|
| 105 |  ;       Clinic Name^Date Run^Date of Next Appt.^# of Days^Stop code^Division
 | 
|---|
| 106 |  ;
 | 
|---|
| 107 |  N X,LC,PMNODE,PMDT,PMMSG,PMCLNI,PMCLNE,PMAPT
 | 
|---|
| 108 |  ;
 | 
|---|
| 109 |  K ^TMP("SDMSG")
 | 
|---|
| 110 |  S X=$G(^TMP("SDPM",$J,0)),PMDT=$P(X,U)
 | 
|---|
| 111 |  S LC=1,PMCLNI=0
 | 
|---|
| 112 |  ;
 | 
|---|
| 113 |  F  S PMCLNI=$O(^TMP("SDPM",$J,PMCLNI)) Q:'PMCLNI  D
 | 
|---|
| 114 |  . S PMNODE=$G(^TMP("SDPM",$J,PMCLNI,PMDT))
 | 
|---|
| 115 |  . S PMCLNE=$P($G(^SC(PMCLNI,0)),U)
 | 
|---|
| 116 |  . S PMAPT=$P(PMNODE,U)
 | 
|---|
| 117 |  . S X2=PMDT,X1=PMAPT D ^%DTC
 | 
|---|
| 118 |  . S ^TMP("SDMSG",$J,LC)=PMCLNE_U_PMDT_U_PMAPT_U_$S(X']"":-1,1:X)_U_$$STOPCDE^SDOQMP0(PMCLNI)_U_$$DIVISION^SDOQMP0(PMCLNI)
 | 
|---|
| 119 |  . S LC=LC+1
 | 
|---|
| 120 |  ;
 | 
|---|
| 121 |  D:LC>350 PRCLRG
 | 
|---|
| 122 |  I LC'>350 D PRCSML
 | 
|---|
| 123 | DMQ Q
 | 
|---|
| 124 |  ;
 | 
|---|
| 125 | PRCSML ;  Process clinic lists smaller than 500 entries
 | 
|---|
| 126 |  N PMMSG,LC
 | 
|---|
| 127 |  S (X,LC)=0
 | 
|---|
| 128 |  F  S X=$O(^TMP("SDMSG",$J,X)) Q:'X  D
 | 
|---|
| 129 |  . S LC=LC+1
 | 
|---|
| 130 |  . S PMMSG(LC)=^TMP("SDMSG",$J,X)
 | 
|---|
| 131 |  D MAIL(.PMMSG,LC)
 | 
|---|
| 132 |  Q
 | 
|---|
| 133 |  ;
 | 
|---|
| 134 | PRCLRG ;  Process clinic lists greater than 500 entries
 | 
|---|
| 135 |  N SDTMP,XF,XL,XC
 | 
|---|
| 136 |  S XF=1,XL=350
 | 
|---|
| 137 |  ;
 | 
|---|
| 138 | LP1 F XC=XF:1:XL Q:XC'<LC  D
 | 
|---|
| 139 |  . S SDTMP(XC)=^TMP("SDMSG",$J,XC)
 | 
|---|
| 140 |  ;
 | 
|---|
| 141 |  D MAIL(.SDTMP,LC,XC)
 | 
|---|
| 142 |  ;
 | 
|---|
| 143 |  S XF=XL+1,XL=XL+350
 | 
|---|
| 144 |  K SDTMP
 | 
|---|
| 145 |  G:XC<LC LP1
 | 
|---|
| 146 |  Q
 | 
|---|
| 147 |  ;
 | 
|---|
| 148 | MAIL(PMDATA,LINCNT,CNT) ;  Send data message to server.
 | 
|---|
| 149 |  ;   The data message is sent to the local notification mail group,
 | 
|---|
| 150 |  ;   the notification mail group at the server domain, and the
 | 
|---|
| 151 |  ;   server at the data collection server domain
 | 
|---|
| 152 |  ;
 | 
|---|
| 153 |  ;   Server
 | 
|---|
| 154 |  ;      A1BO PM NEXT APPT EXTRACT at Albany ISC
 | 
|---|
| 155 |  ;
 | 
|---|
| 156 |  ;   Variables
 | 
|---|
| 157 |  ;     MSG    - Data array to be sent
 | 
|---|
| 158 |  ;     LINCNT - Number of lines in the data array
 | 
|---|
| 159 |  ;
 | 
|---|
| 160 |  ;   Message Format        
 | 
|---|
| 161 |  ;     Header - $START^Site Name^Facility Number^Date.Time run^Domain Name^Total lines^Last line sent
 | 
|---|
| 162 |  ;     Body   - data array (see BLDPME)
 | 
|---|
| 163 |  ;     Tail   - $END
 | 
|---|
| 164 |  ;
 | 
|---|
| 165 |  N XC,X1,%DT,XMB,PMFAC,XMLOC
 | 
|---|
| 166 |  ;
 | 
|---|
| 167 |  S XMLOC=0
 | 
|---|
| 168 |  S XMDUZ=.5
 | 
|---|
| 169 |  S XMY(".5")=""
 | 
|---|
| 170 |  S XMY("S.A1BO PM NEXT APPT EXTRACT@DEVFEX.ISC-ALBANY.VA.GOV")=""
 | 
|---|
| 171 |  S XMY("G.SD PM NOTIFICATION")=""
 | 
|---|
| 172 |  S XMY("G.SD PM EXTRACT@ISC-ALBANY.VA.GOV")=""
 | 
|---|
| 173 |  ;
 | 
|---|
| 174 |  S PMFAC=$$SITE^VASITE
 | 
|---|
| 175 |  D NOW^%DTC
 | 
|---|
| 176 |  ;
 | 
|---|
| 177 |  S PMDATA(.01)="$START^"_$P($G(PMFAC),"^",2,3)_"^"_%_"^"_$G(^XMB("NETNAME"))_"^"_LINCNT_"^"_$G(CNT)
 | 
|---|
| 178 |  S PMDATA(LINCNT+1)="$END"
 | 
|---|
| 179 |  ;
 | 
|---|
| 180 |  S XMTEXT="PMDATA("
 | 
|---|
| 181 |  S XMSUB="Access PM Extract from "_$P($G(PMFAC),U,2),XMN=0
 | 
|---|
| 182 |  D ^XMD
 | 
|---|
| 183 |  K XMDUZ,XMN,XMSUB,XMTEXT,XMY
 | 
|---|
| 184 | SMQ Q
 | 
|---|
| 185 |  ;
 | 
|---|
| 186 | BLDRPT ;  Call the entry point to print the Appointment Monitoring report
 | 
|---|
| 187 |  D START^SDOQMPR
 | 
|---|
| 188 |  Q
 | 
|---|
| 189 |  ;
 | 
|---|
| 190 | MSG ;   Message displayed to user when the EN1 entry point is used.
 | 
|---|
| 191 |  ;;
 | 
|---|
| 192 |  ;;This report requires 132 columns and could take a long time
 | 
|---|
| 193 |  ;;to print depending on the number of clinics selected.
 | 
|---|
| 194 |  ;;Please remember to QUEUE it.
 | 
|---|
| 195 |  ;;$$END
 | 
|---|