| 1 | IVMBULK1 ;ALB/KCL - IVM/ENROLLMENT Extract Con't ; 18-AUG-1997
|
---|
| 2 | ;;2.0;INCOME VERIFICATION MATCH;**9,11,15**; 21-OCT-94
|
---|
| 3 | ;
|
---|
| 4 | ;
|
---|
| 5 | GOGO ; --
|
---|
| 6 | ; Description: This entry point will be the main driver for enrollment data extract.
|
---|
| 7 | ;
|
---|
| 8 | ; Input:
|
---|
| 9 | ; IVMCONST - as local array containing extract input parameters
|
---|
| 10 | ; (constants), pass by reference
|
---|
| 11 | ; IVMARRY1 - as local array containing extract input parameters
|
---|
| 12 | ; (variable), pass by reference
|
---|
| 13 | ;
|
---|
| 14 | ; Output: None
|
---|
| 15 | ;
|
---|
| 16 | ; Perform enrollment data extract
|
---|
| 17 | D BULK(.IVMCONST,.IVMARRY1)
|
---|
| 18 | ;
|
---|
| 19 | ; Send extract notification message
|
---|
| 20 | D DOMAIL
|
---|
| 21 | ;
|
---|
| 22 | ; If enrollment events not on, turn on enrollment events
|
---|
| 23 | I '$$ON^IVMUPAR1() D SETON^IVMUPAR1
|
---|
| 24 | ;
|
---|
| 25 | Q
|
---|
| 26 | ;
|
---|
| 27 | ;
|
---|
| 28 | BULK(IVMCONST,IVMARRY1) ; --
|
---|
| 29 | ; Description: This entry point will perform the enrollment data extract.
|
---|
| 30 | ;
|
---|
| 31 | ; Input:
|
---|
| 32 | ; IVMCONST - as local array containing extract input parameters
|
---|
| 33 | ; (constants), pass by reference
|
---|
| 34 | ; IVMARRY1 - as local array containing extract input parameters
|
---|
| 35 | ; (variable), pass by reference
|
---|
| 36 | ;
|
---|
| 37 | ; Output: None
|
---|
| 38 | ;
|
---|
| 39 | ; initilize varibles
|
---|
| 40 | N DFN,POP,Z
|
---|
| 41 | K IVMQUERY("LTD"),IVMQUERY("OVIS")
|
---|
| 42 | D INIT^IVMUFNC ; HL7 vars
|
---|
| 43 | S (IVMARRY1("ERROR"),IVMARRY1("TERM"))=""
|
---|
| 44 | S IVMARRY1("HOST")=$S(IVMARRY1("HOST")'="":IVMARRY1("HOST"),1:IVMCONST("HOST"))
|
---|
| 45 | S IVMARRY1("PROC")=$G(IVMARRY1("PROC")),IVMARRY1("EXTRACT")=$G(IVMARRY1("EXTRACT")) ; extract statistic counters
|
---|
| 46 | S IVMARRY1("START")=$$NOW^XLFDT ; current date/time job started
|
---|
| 47 | S IVMARRY1("TASK")=$G(ZTSK)
|
---|
| 48 | ;
|
---|
| 49 | ; store processing info
|
---|
| 50 | I $$STORE^IVMBULK2(.IVMARRY1)
|
---|
| 51 | ;
|
---|
| 52 | ; open host file, if error quit
|
---|
| 53 | D OPEN^%ZISH("FILE1",IVMARRY1("DIR"),IVMARRY1("HOST")_"_"_(1+(IVMARRY1("EXTRACT")\IVMCONST("MSGMAX"))),"A")
|
---|
| 54 | I POP S IVMARRY1("ERROR")="Could not create host file in specified directory." G BULKQ
|
---|
| 55 | ;
|
---|
| 56 | ; loop through patients in Patient (#2) file
|
---|
| 57 | S DFN=+IVMARRY1("LASTPAT")
|
---|
| 58 | F S DFN=$O(^DPT(DFN)) Q:'DFN D Q:IVMARRY1("ERROR")'=""
|
---|
| 59 | .;
|
---|
| 60 | .; - # of patients processed/checked
|
---|
| 61 | .S IVMARRY1("PROC")=IVMARRY1("PROC")+1
|
---|
| 62 | .;
|
---|
| 63 | .; - quit if patient does not pass selection criteria
|
---|
| 64 | .Q:'$$CRITERIA(DFN,IVMCONST("BEGDT"),DT)
|
---|
| 65 | .;
|
---|
| 66 | .; - kill ^TMP global containing previous HL7 msg
|
---|
| 67 | .K ^TMP("HLS",$J,HLSDT)
|
---|
| 68 | .;
|
---|
| 69 | .; - build HL7 full data transmission msg for patient
|
---|
| 70 | .D BUILD^IVMPTRN8(DFN,$$LD^IVMUFNC4(DFN),0,.IVMQUERY)
|
---|
| 71 | .;
|
---|
| 72 | .; - write HL7 full data transmission message to host file
|
---|
| 73 | .D HOST(HLSDT)
|
---|
| 74 | .;
|
---|
| 75 | .; - # of patients extracted
|
---|
| 76 | .S IVMARRY1("EXTRACT")=IVMARRY1("EXTRACT")+1
|
---|
| 77 | .;
|
---|
| 78 | .; - check if host file has reached max size limit
|
---|
| 79 | .I IVMARRY1("EXTRACT")#IVMCONST("MSGMAX")=0 D Q:IVMARRY1("ERROR")'=""
|
---|
| 80 | ..;
|
---|
| 81 | ..; -- close host file, max limit reached
|
---|
| 82 | ..D CLOSE^%ZISH("FILE1")
|
---|
| 83 | ..;
|
---|
| 84 | ..; -- open next host file
|
---|
| 85 | ..D OPEN^%ZISH("FILE1",IVMARRY1("DIR"),IVMARRY1("HOST")_"_"_(1+(IVMARRY1("EXTRACT")\IVMCONST("MSGMAX"))),"A")
|
---|
| 86 | ..I POP S IVMARRY1("ERROR")="Could not open host file." Q
|
---|
| 87 | .;
|
---|
| 88 | .; - for every 100 patients processed, check if task stopped
|
---|
| 89 | .I IVMARRY1("PROC")#100=0 D
|
---|
| 90 | ..; -- check if task has been stopped
|
---|
| 91 | ..I $$S^%ZTLOAD S IVMARRY1("ERROR")="Queued job stopped prior to completion.",IVMARRY1("TERM")=1,IVMARRY1("LASTPAT")=DFN
|
---|
| 92 | ..; -- update IVM EXTRACT MANAGEMENT file
|
---|
| 93 | ..I $$STORE^IVMBULK2(.IVMARRY1)
|
---|
| 94 | ;
|
---|
| 95 | ;Close the last treatment date search and the outpt visit queries
|
---|
| 96 | F Z="LTD","OVIS" I $G(IVMQUERY(Z)) D CLOSE^SDQ(IVMQUERY(Z)) K IVMQUERY(Z)
|
---|
| 97 | ; close host file
|
---|
| 98 | D CLOSE^%ZISH("FILE1")
|
---|
| 99 | ;
|
---|
| 100 | ;
|
---|
| 101 | BULKQ ; set up final extract statistics
|
---|
| 102 | I $G(DFN)'>0 S IVMARRY1("LASTPAT")=""
|
---|
| 103 | S IVMARRY1("STOP")=$$NOW^XLFDT ; current date/time job stopped
|
---|
| 104 | S IVMARRY1("FILES")=(1+(IVMARRY1("EXTRACT")\IVMCONST("MSGMAX"))) ; # of host files
|
---|
| 105 | ;
|
---|
| 106 | ; store processing info for extract in IVM Extract Management file
|
---|
| 107 | I $$STORE^IVMBULK2(.IVMARRY1)
|
---|
| 108 | ;
|
---|
| 109 | ; unlock IVM EXTRACT MANAGEMENT file
|
---|
| 110 | D UNLOCK^IVMBULK2(1)
|
---|
| 111 | ;
|
---|
| 112 | ; kill hl7 temp array
|
---|
| 113 | K ^TMP("HLS",$J,HLSDT)
|
---|
| 114 | ;
|
---|
| 115 | ; Cleanup HL7/IVM vars (as defined by call to INIT^IVMUFNC)
|
---|
| 116 | D CLEAN^IVMUFNC
|
---|
| 117 | ;
|
---|
| 118 | Q
|
---|
| 119 | ;
|
---|
| 120 | ;
|
---|
| 121 | CRITERIA(DFN,IVMDT1,IVMDT2) ; --
|
---|
| 122 | ; Description: This function will determine if the patient meets the enrollment initial data extract selection criteria for a specific date range.
|
---|
| 123 | ;
|
---|
| 124 | ; Input:
|
---|
| 125 | ; DFN - pointer to patient in Patient (#2) file
|
---|
| 126 | ; IVMDT1 - as start date to use when looking for episodes of care
|
---|
| 127 | ; IVMDT2 - as end date to use when looking for episodes of care
|
---|
| 128 | ;
|
---|
| 129 | ; Output:
|
---|
| 130 | ; Function Value - Does patient meet the selection criteria?
|
---|
| 131 | ; Return 1 if successful, otherwise 0
|
---|
| 132 | ;
|
---|
| 133 | N IVMCRIT,IVMCUREN
|
---|
| 134 | S IVMCRIT=0
|
---|
| 135 | ;
|
---|
| 136 | ; get enrollment status from patient's current enrollment
|
---|
| 137 | S IVMCUREN=$$STATUS^DGENA(DFN),IVMCUREN=$G(IVMCUREN)
|
---|
| 138 | ; is status unverified, verified, or pending
|
---|
| 139 | I IVMCUREN,(IVMCUREN=1!(IVMCUREN=2)!(IVMCUREN=9)) S IVMCRIT=1 G CRITQ
|
---|
| 140 | ;
|
---|
| 141 | ; if patient is not a veteran, exit
|
---|
| 142 | I '$$VET^DGENPTA(DFN) G CRITQ
|
---|
| 143 | ;
|
---|
| 144 | ; is veteran a current inpatient?
|
---|
| 145 | I $$CURINPAT^DGENPTA(DFN) S IVMCRIT=1 G CRITQ
|
---|
| 146 | ;
|
---|
| 147 | ; was veteran an inpatient?
|
---|
| 148 | I $$INPAT^DGENPTA(DFN,IVMDT1,IVMDT2) S IVMCRIT=1 G CRITQ
|
---|
| 149 | ;
|
---|
| 150 | ; does veteran have a checked-out encounter (outpatient)?
|
---|
| 151 | I $$OUTPAT^DGENPTA(DFN,IVMDT1,IVMDT2) S IVMCRIT=1 G CRITQ
|
---|
| 152 | ;
|
---|
| 153 | CRITQ Q IVMCRIT
|
---|
| 154 | ;
|
---|
| 155 | ;
|
---|
| 156 | HOST(HLSDT) ; --
|
---|
| 157 | ; Description: Take HL7 message contained in temporary array and write to host file.
|
---|
| 158 | ;
|
---|
| 159 | ; Input:
|
---|
| 160 | ; IO - name of opened host file in the format to
|
---|
| 161 | ; to use for the 'M' USE command
|
---|
| 162 | ; ^TMP("HLS",$J,HLSDT) - global array containing all segments of the
|
---|
| 163 | ; HL7 message for a patient. The HLSDT
|
---|
| 164 | ; variable is a flag that indicates that data
|
---|
| 165 | ; is to be stored in the ^TMP("HLS") global
|
---|
| 166 | ; array. The IVMCT variable is a sequential
|
---|
| 167 | ; number starting at 0 and incremented by 1.
|
---|
| 168 | ;
|
---|
| 169 | ; Output: None
|
---|
| 170 | ;
|
---|
| 171 | N IVMSUB
|
---|
| 172 | ;
|
---|
| 173 | ; use host file
|
---|
| 174 | U IO
|
---|
| 175 | ;
|
---|
| 176 | ; used to delineate begining of new HL7 message
|
---|
| 177 | W "{",!
|
---|
| 178 | ;
|
---|
| 179 | ; write message segments to host file
|
---|
| 180 | S IVMSUB="" F S IVMSUB=$O(^TMP("HLS",$J,HLSDT,IVMSUB)) Q:IVMSUB'>0 D
|
---|
| 181 | .W $G(^TMP("HLS",$J,HLSDT,IVMSUB)),!
|
---|
| 182 | ;
|
---|
| 183 | ; used to delineate end of HL7 message
|
---|
| 184 | W "}",!
|
---|
| 185 | ;
|
---|
| 186 | Q
|
---|
| 187 | ;
|
---|
| 188 | ;
|
---|
| 189 | DOMAIL ; --
|
---|
| 190 | ; Description: This function will generate a MailMan message contianing the results of the enrollment data extract.
|
---|
| 191 | ;
|
---|
| 192 | ; Input: None
|
---|
| 193 | ;
|
---|
| 194 | ; Output: None
|
---|
| 195 | ;
|
---|
| 196 | K XMZ
|
---|
| 197 | N DIFROM,IVMCON1,IVMMSG,IVMPRCNT,IVMSITE,XMTEXT,XMSUB,XMDUZ,XMY
|
---|
| 198 | ;
|
---|
| 199 | ; init mail variables
|
---|
| 200 | S IVMSITE=$$SITE^VASITE
|
---|
| 201 | S XMSUB="Enrollment Extract Results "_"("_$P(IVMSITE,"^",3)_")"
|
---|
| 202 | S XMDUZ=.5,XMY(DUZ)="",XMY(.5)=""
|
---|
| 203 | S XMTEXT="IVMMSG("
|
---|
| 204 | ;
|
---|
| 205 | ; if error creating message text, exit
|
---|
| 206 | I '$$FINAL(.IVMMSG) G DOMAILQ
|
---|
| 207 | ;
|
---|
| 208 | ; get extract constants
|
---|
| 209 | I $$GETCONST^IVMBULK2(.IVMCON1)
|
---|
| 210 | ;
|
---|
| 211 | ; HEC mail group
|
---|
| 212 | I IVMARRY1("ERROR")']"" S XMY(IVMCON1("MAILGRP"))=""
|
---|
| 213 | ;
|
---|
| 214 | ; send msg
|
---|
| 215 | D ^XMD
|
---|
| 216 | ;
|
---|
| 217 | DOMAILQ Q
|
---|
| 218 | ;
|
---|
| 219 | ;
|
---|
| 220 | FINAL(IVMTXT) ; --
|
---|
| 221 | ; Description: Places message text into local IVMTXT array.
|
---|
| 222 | ;
|
---|
| 223 | ; Input: None
|
---|
| 224 | ;
|
---|
| 225 | ; Output:
|
---|
| 226 | ; Function Value - returns 1 if success, 0 if failure
|
---|
| 227 | ; IVMTXT - as local array containing mail message text,
|
---|
| 228 | ; pass by reference
|
---|
| 229 | ;
|
---|
| 230 | N SUCCESS,IVMSITE,IVMARRY2
|
---|
| 231 | S SUCCESS=0
|
---|
| 232 | ;
|
---|
| 233 | ; if obtaining IVM Extract Management record unsuccessful, exit
|
---|
| 234 | I '$$GET^IVMBULK2(.IVMARRY2) G FINALQ
|
---|
| 235 | ;
|
---|
| 236 | S IVMSITE=$$SITE^VASITE
|
---|
| 237 | ;
|
---|
| 238 | S IVMTXT(1)=" > > > > > > > > > > ENROLLMENT DATA EXTRACT RESULTS < < < < < < < < < <"
|
---|
| 239 | S IVMTXT(2)=""
|
---|
| 240 | S IVMTXT(3)=" Facility Name: "_$P(IVMSITE,"^",2)
|
---|
| 241 | S IVMTXT(4)=" Station Number: "_$P(IVMSITE,"^",3)
|
---|
| 242 | S IVMTXT(5)=""
|
---|
| 243 | S IVMTXT(6)=" Date/Time job started: "_$$FMTE^XLFDT(IVMARRY2("START"),"1P")
|
---|
| 244 | S IVMTXT(7)=" Date/Time job stopped: "_$$FMTE^XLFDT(IVMARRY2("STOP"),"1P")
|
---|
| 245 | S IVMTXT(8)=""
|
---|
| 246 | S IVMTXT(9)=" Total patients processed: "_IVMARRY2("PROC")
|
---|
| 247 | S IVMTXT(10)=" Total patients extracted: "_IVMARRY2("EXTRACT")
|
---|
| 248 | S IVMTXT(11)=" Percentage extracted: "_$S($G(IVMARRY2("PROC")):$P(IVMARRY2("EXTRACT")/IVMARRY2("PROC")*100,".")_"%",1:"")
|
---|
| 249 | S IVMTXT(12)=""
|
---|
| 250 | S IVMTXT(13)=" Host file directory: "_IVMARRY2("DIR")
|
---|
| 251 | S IVMTXT(14)=" Host file name: "_IVMARRY2("HOST")
|
---|
| 252 | S IVMTXT(15)=" Number of host files: "_IVMARRY2("FILES")
|
---|
| 253 | ;
|
---|
| 254 | ; if ERROR, set error into msg text
|
---|
| 255 | I IVMARRY2("ERROR")]"" D
|
---|
| 256 | .S IVMTXT(16)=""
|
---|
| 257 | .S IVMTXT(17)=" * * * * E R R O R E N C O U N T E R E D * * * *"
|
---|
| 258 | .S IVMTXT(18)=""
|
---|
| 259 | .S IVMTXT(19)=" Error Message: "_IVMARRY2("ERROR")
|
---|
| 260 | .S IVMTXT(20)=" Task Number: "_IVMARRY2("TASK")
|
---|
| 261 | ;
|
---|
| 262 | S SUCCESS=1
|
---|
| 263 | ;
|
---|
| 264 | FINALQ Q SUCCESS
|
---|