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