| 1 | SDPMHLS ;BPFO/JRC -Build ROU-R01 HL7 message for 'SD ENC PERF MON' application ; 4/2/04 7:12am [5/12/04 10:29am] | 
|---|
| 2 | ;;5.3;Scheduling;**313,371,416**;AUG 13, 1993 | 
|---|
| 3 | ; | 
|---|
| 4 | QUE ;Queue retroactive XMIT job | 
|---|
| 5 | ;Declare variables | 
|---|
| 6 | S (STDT,EDT,Y,X)="" | 
|---|
| 7 | ;Prompt user for month and year | 
|---|
| 8 | S %DT("A")="Please select MONTH and YEAR for TIU's National Rollup to transmit: " | 
|---|
| 9 | S %DT="AEMX" | 
|---|
| 10 | ;Set %DT not to allow current and future months | 
|---|
| 11 | S %DT(0)=-($$FMADD^XLFDT($$NOW^XLFDT(),-32)) | 
|---|
| 12 | D ^%DT | 
|---|
| 13 | ;Check date input if (-1) quit else continue | 
|---|
| 14 | I Y<0 Q | 
|---|
| 15 | ;Set STDT = user selected month and year and add 1 day | 
|---|
| 16 | S STDT=Y+01 | 
|---|
| 17 | ;Add 32 days to STDT | 
|---|
| 18 | S X=$$FMADD^XLFDT(STDT,32) | 
|---|
| 19 | ;Subtract number of days that overlap into the following month | 
|---|
| 20 | S EDT=$$FMADD^XLFDT(X,-($E(X,6,7))) | 
|---|
| 21 | ;Set task variables | 
|---|
| 22 | S ZTIO="" | 
|---|
| 23 | S ZTDESC="Performance Indicator National Rollup" | 
|---|
| 24 | S ZTRTN="EN^SDPMHLS" | 
|---|
| 25 | S ZTSAVE("STDT")="" | 
|---|
| 26 | S ZTSAVE("EDT")="" | 
|---|
| 27 | D ^%ZTLOAD W:$D(ZTSK) "   (Task: ",ZTSK,")" | 
|---|
| 28 | K STDT,EDT,X,Y,%DT,%DT("A"),%DT(0) | 
|---|
| 29 | Q | 
|---|
| 30 | EN ;Entry point | 
|---|
| 31 | ;Note: Retroactive reports use variables STDT and EDT to pass dates | 
|---|
| 32 | ;   STDT - start date, first day of the month for selected month | 
|---|
| 33 | ;   EDT - ending date, last day of the month for selected month | 
|---|
| 34 | ;Declare variables | 
|---|
| 35 | N STDATE,ENDDATE | 
|---|
| 36 | N XMTARRY,SCRNARR,SORTARR,OUTARR,X,RDATE | 
|---|
| 37 | S SCRNARR="^TMP(""SCRPW"",$J,""SCRNARR"")" | 
|---|
| 38 | S SORTARR="^TMP(""SCRPW"",$J,""SORTARR"")" | 
|---|
| 39 | S OUTARR="^TMP(""SCRPW"",$J,""OUTARR"")" | 
|---|
| 40 | S XMTARRY="^TMP(""HLS"","_$J_")" | 
|---|
| 41 | S (STDATE,ENDDATE)="" | 
|---|
| 42 | ;Set national screen/sort | 
|---|
| 43 | D ROLLUP^SCRPW303(SCRNARR,SORTARR) | 
|---|
| 44 | ;Call module to build scratch global | 
|---|
| 45 | D GETINFO | 
|---|
| 46 | ;Build HL7 Message | 
|---|
| 47 | D BLDMSG(OUTARR,XMTARRY) | 
|---|
| 48 | ;Send HL7 Message | 
|---|
| 49 | I +$O(@XMTARRY@(""))>0 D | 
|---|
| 50 | .S J=$$SENDMSG(.XMTARRY) | 
|---|
| 51 | ;Send XMIT notifications | 
|---|
| 52 | D MSG | 
|---|
| 53 | ;Cleanup an quit | 
|---|
| 54 | D EXIT | 
|---|
| 55 | Q | 
|---|
| 56 | BLDMSG(OUTARR,XMTARRY) ;Build OBR segment | 
|---|
| 57 | ;Input : OUTARR - Ouptut array | 
|---|
| 58 | ;Output: XMTARRY - HL7 temporary array | 
|---|
| 59 | ;Declare variables | 
|---|
| 60 | N HL,HLFS,HLECH,HLQ,SNODE,PNODE,DIVHL,TYPE,COUNT | 
|---|
| 61 | D INIT^HLFNC2("SD ENC PERF MON ORU-R01 SERVER",.HL) | 
|---|
| 62 | Q:$O(HL(""))="" | 
|---|
| 63 | N VAFEVN,VAFSTR,CNT,MAKE,VAFOBR,VAFOBX,I,XCNT,INFO,DIV,DIVHL | 
|---|
| 64 | S CNT=1,XCNT=0 | 
|---|
| 65 | S MAKE(1)="1" | 
|---|
| 66 | S MAKE(4,1,1)="01" | 
|---|
| 67 | S MAKE(4,1,2)="VA ENC PERF MONITOR" | 
|---|
| 68 | S MAKE(7)=$$HLDATE^HLFNC(RDATE) | 
|---|
| 69 | S MAKE(25)="F" | 
|---|
| 70 | S MAKE(27,1,4)=$$HLDATE^HLFNC(STDATE,"DT") | 
|---|
| 71 | S MAKE(27,1,5)=$$HLDATE^HLFNC(ENDDATE,"DT") | 
|---|
| 72 | K VAFOBR | 
|---|
| 73 | D MAKEIT^VAFHLU("OBR",.MAKE,.VAFOBR,.VAFOBR) | 
|---|
| 74 | M @XMTARRY@(CNT)=VAFOBR | 
|---|
| 75 | S XCNT=XCNT+1,CNT=CNT+1 | 
|---|
| 76 | ;Build OBX segment for facility | 
|---|
| 77 | S SNODE=$G(@OUTARR@("SUMMARY")) | 
|---|
| 78 | S PNODE=$G(@OUTARR@("SUMMARY","PI")) | 
|---|
| 79 | S DIVHL=$P($$SITE^VASITE,"^",3) | 
|---|
| 80 | D MAKEOBX | 
|---|
| 81 | ;Build OBX segment for division(s) | 
|---|
| 82 | S DIV="" F  S DIV=$O(@OUTARR@("SUBTOTAL",DIV)) Q:DIV=""  D | 
|---|
| 83 | .N SNODE,PNODE | 
|---|
| 84 | .S SNODE=$G(@OUTARR@("SUBTOTAL",DIV)) | 
|---|
| 85 | .S PNODE=$G(@OUTARR@("SUBTOTAL",DIV,"PI")) | 
|---|
| 86 | .S DIVHL=$P(DIV,"^",2) | 
|---|
| 87 | .D MAKEOBX | 
|---|
| 88 | .Q | 
|---|
| 89 | Q | 
|---|
| 90 | MAKEOBX ;Set type and count for total encounters to bld OBX | 
|---|
| 91 | ;Input : SNODE - Temporary counter node for summary | 
|---|
| 92 | ;        PNODE - Temporary counter node for PI | 
|---|
| 93 | ;        DIVHL - Division and Suffix | 
|---|
| 94 | ;        CNT - Temporary array subscript count | 
|---|
| 95 | ;        XCNT  - OBX segment counter | 
|---|
| 96 | ;        XMTARRY - Temporary HL array ^TMP("HLS",$J) | 
|---|
| 97 | S TYPE="CD",COUNT=$P($G(SNODE),U,1),OBID=1 D BLDOBX | 
|---|
| 98 | ;Set type and count for counters for ET in days F0 - F10 to bld OBX | 
|---|
| 99 | F M4=0:1:10 D | 
|---|
| 100 | .S OBID=2 | 
|---|
| 101 | .S TYPE="F"_M4 | 
|---|
| 102 | .S COUNT=$P($G(PNODE),U,(M4+1)) | 
|---|
| 103 | .D BLDOBX | 
|---|
| 104 | ;Set type and count for scanned notes and Uniques to bld OBX | 
|---|
| 105 | S TYPE="FSPN",OBID=2,COUNT=$P($G(SNODE),U,7) D BLDOBX | 
|---|
| 106 | S TYPE="FEP",OBID=2,COUNT=$P($G(SNODE),U,4) D BLDOBX | 
|---|
| 107 | S TYPE="FDSS",OBID=2,COUNT=$P($G(SNODE),U,5) D BLDOBX | 
|---|
| 108 | ;Set types and count for encounters w/o progress notes and | 
|---|
| 109 | ;encounters w/progress notes pending signatures | 
|---|
| 110 | S TYPE="FNPN",OBID=2,COUNT=+$P(SNODE,U,1)-(+($P(SNODE,U,2)))-(+($P(SNODE,U,9)))-(+($P(SNODE,U,7)))-(+($P(PNODE,U,11))) D BLDOBX | 
|---|
| 111 | S TYPE="FNPS",OBID=2,COUNT=$P($G(SNODE),U,9) D BLDOBX | 
|---|
| 112 | Q | 
|---|
| 113 | BLDOBX ;Build OBX | 
|---|
| 114 | ;Ouput : @XMTARRY = Temporary HL array | 
|---|
| 115 | ;Set variables | 
|---|
| 116 | N MAKE,VAFOBX | 
|---|
| 117 | S MAKE(1)=XCNT | 
|---|
| 118 | S MAKE(2)="NM" | 
|---|
| 119 | S MAKE(3,1,1)=OBID | 
|---|
| 120 | S MAKE(3,1,4)=TYPE | 
|---|
| 121 | S MAKE(5)=COUNT | 
|---|
| 122 | S MAKE(11)="F" | 
|---|
| 123 | S MAKE(15)=DIVHL | 
|---|
| 124 | K VAFOBX | 
|---|
| 125 | D MAKEIT^VAFHLU("OBX",.MAKE,.VAFOBX,.VAFOBX) | 
|---|
| 126 | M @XMTARRY@(CNT)=VAFOBX | 
|---|
| 127 | S XCNT=XCNT+1,CNT=CNT+1 | 
|---|
| 128 | Q | 
|---|
| 129 | SENDMSG(XMTARRY) ;Send HL7 message | 
|---|
| 130 | ;Input - @XMTARRY | 
|---|
| 131 | ;Output - ARRY4HL7 | 
|---|
| 132 | N ARRY4HL7,KILLARRY,HL,HLRESLT,HLFS,HLECH,HLQ,HLP | 
|---|
| 133 | S XMTARRY=$G(XMTARRY) | 
|---|
| 134 | S:'(XMTARRY]"") XMTARRY="^TMP(""HLS"","_$J_")" | 
|---|
| 135 | Q:($O(@XMTARRY@(""))="") "-1^Can not send empty message" | 
|---|
| 136 | S ARRY4HL7="TMP(""HLS"","_$J_")" | 
|---|
| 137 | ;Initialize HL7 variables | 
|---|
| 138 | D INIT^HLFNC2("SD ENC PERF MON ORU-R01 SERVER",.HL) | 
|---|
| 139 | Q:($O(HL(""))="") "-1^Unable to initialize HL7 variables" | 
|---|
| 140 | ;Check if XMTARRY is ^TMP("HLS",$J) | 
|---|
| 141 | S KILLARRY=0 | 
|---|
| 142 | I $NA(@XMTARRY)'=$NA(@ARRY4HL7) D | 
|---|
| 143 | .K @ARRY4HL7 | 
|---|
| 144 | .M @ARRY4HL7=@XMTARRY | 
|---|
| 145 | .S KILLARRY=1 | 
|---|
| 146 | ;Broadcast message | 
|---|
| 147 | D GENERATE^HLMA("SD ENC PERF MON ORU-R01 SERVER","GM",1,.HLRESLT,"",.HLP) | 
|---|
| 148 | S:('HLRESLT) HLRESLT=$P(HLRESLT,"^",2,3) | 
|---|
| 149 | ;Delete ^TMP("HLS",$J) if XMTARRY was different | 
|---|
| 150 | K:(KILLARRY) @ARRY4HL7 | 
|---|
| 151 | Q $G(HLRESLT) | 
|---|
| 152 | GETINFO ;Get performance monitor data | 
|---|
| 153 | ;Input: | 
|---|
| 154 | ;    @SCRNARR - Screen array full global reference | 
|---|
| 155 | ;    @SORTARR - Sort array full global reference | 
|---|
| 156 | ;Output: | 
|---|
| 157 | ;    @OUTARR - Ouput array full global reference | 
|---|
| 158 | ;Remember starting time | 
|---|
| 159 | S RDATE=$$NOW^XLFDT() | 
|---|
| 160 | ;Check STDT and EDT, if 1 set STDATE and ENDDATE | 
|---|
| 161 | I $D(STDT)&$D(EDT) S STDATE=STDT,ENDDATE=EDT | 
|---|
| 162 | I STDATE="" D | 
|---|
| 163 | .;Set start date = 1st day of previous month | 
|---|
| 164 | .N X,X1,X2 | 
|---|
| 165 | .S X1=$$DT^XLFDT(),X2=-30 S:$E(X1,6,7)=31 X2=-31 | 
|---|
| 166 | .D C^%DTC | 
|---|
| 167 | .S STDATE=$E(X,1,5)_"01" | 
|---|
| 168 | .;Set end date = start date + 32 minus number of days into next month | 
|---|
| 169 | .S X=$$FMADD^XLFDT(STDATE,32) | 
|---|
| 170 | .S ENDDATE=$$FMADD^XLFDT(X,-($E(X,6,7))) | 
|---|
| 171 | .Q | 
|---|
| 172 | ;Set date range in screen array | 
|---|
| 173 | S @SCRNARR@("RANGE")=STDATE_"^"_ENDDATE | 
|---|
| 174 | ;Get data | 
|---|
| 175 | D GETDATA^SDPMUT1(SCRNARR,SORTARR,OUTARR) | 
|---|
| 176 | Q | 
|---|
| 177 | MSG ;Build bulletin and send | 
|---|
| 178 | ;Input: | 
|---|
| 179 | ;     RDATE - report starting time | 
|---|
| 180 | ;Output: | 
|---|
| 181 | ;   Notificaion bulletin to SD ENC PERF MON mail group | 
|---|
| 182 | N MSGTEXT,XMTEXT,XMSUB,XMY,XMCHAN,XMZ,XMDUZ | 
|---|
| 183 | S MSGTEXT(1)=" " | 
|---|
| 184 | S MSGTEXT(2)="Performance Indicator National Rollup was started on "_$$FMTE^XLFDT(RDATE,1) | 
|---|
| 185 | S MSGTEXT(3)="Encounter date range: "_$$FMTE^XLFDT(STDATE,1)_" to "_$$FMTE^XLFDT(ENDDATE,1) | 
|---|
| 186 | S MSGTEXT(3)="Extraction of data and sending of data completed "_$$FMTE^XLFDT($$NOW^XLFDT(),1) | 
|---|
| 187 | S MSGTEXT(4)=" " | 
|---|
| 188 | ;Send completion bulletin to current user | 
|---|
| 189 | S XMSUB="Performance Indicator National Rollup" | 
|---|
| 190 | S XMTEXT="MSGTEXT(" | 
|---|
| 191 | S XMY("G.SD PM NOTIFICATION TIU")="" | 
|---|
| 192 | S XMCHAN=1 | 
|---|
| 193 | S XMDUZ="Performance Indicator" | 
|---|
| 194 | D ^XMD | 
|---|
| 195 | Q | 
|---|
| 196 | EXIT ;Done | 
|---|
| 197 | K @SCRNARR,@SORTARR,@OUTARR,@XMTARRY | 
|---|
| 198 | Q | 
|---|