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