285 lines
8.5 KiB
Mathematica
285 lines
8.5 KiB
Mathematica
IVMBULK ;ALB/KCL - IVM/ENROLLMENT Extract ; 18-AUG-1997
|
|
;;2.0;INCOME VERIFICATION MATCH;**9**; 21-OCT-94
|
|
;
|
|
; * This extract will scan the PATIENT (#2) file for patients that
|
|
; meet the following enrollment extract selection criteria:
|
|
;
|
|
; [Patient has a current enrollment]
|
|
; AND
|
|
; [Enrollment status is 'Pending'
|
|
; OR
|
|
; Enrollment status is 'Unverified'
|
|
; OR
|
|
; Enrollment status is 'Verified']
|
|
;
|
|
; OR,
|
|
;
|
|
; [Patient is a Veteran]
|
|
; AND
|
|
; [Patient is a current inpatient
|
|
; OR
|
|
; Patient was an inpatient after 1/1/96
|
|
; OR
|
|
; Patient was an outpatient after 1/1/96]
|
|
;
|
|
;
|
|
; * An HL7 "Full Data Transmission" message (Z07) will be built
|
|
; for each patient selected. HL7 messages will be output to a
|
|
; selected host file.
|
|
;
|
|
; * A mail message will be generated upon completion of the initial
|
|
; data extract. This mail message will contian the results of
|
|
; the extract.
|
|
;
|
|
; * This job will be queued.
|
|
;
|
|
;
|
|
EN(IVMARRY1,IVMCONST) ; --
|
|
; Description: Entry point responsible for queuing off the enrollment extract job.
|
|
;
|
|
; Input: None
|
|
;
|
|
; Output:
|
|
; IVMARRY1 - as array containing required input parameters for enrollment extract job, pass by reference
|
|
; IVMCONST - as array containing enrollment extract constants, pass by reference
|
|
;
|
|
N ZTDESC,ZTIO,ZTRTN,ZTSAVE,QUIT
|
|
;
|
|
S QUIT=0
|
|
;
|
|
; lock IVM Extract Mangement file, otherwise exit
|
|
I '$$LOCK^IVMBULK2(1) D G ENQ
|
|
.W !,">>> This job has already been queued!"
|
|
;
|
|
; if environment check fails, exit
|
|
I '$$ENV() S QUIT=1 G ENQ
|
|
;
|
|
; get extract constants
|
|
I $$GETCONST^IVMBULK2(.IVMCONST)
|
|
;
|
|
; get IVM Extract Management record
|
|
I '$$GET^IVMBULK2(.IVMARRY1) D
|
|
.;
|
|
.; - if no IVM Extract Mgmt. record, init IVM Extract Mgmt. record
|
|
.I $$INIT^IVMBULK2(.IVMARRY1)
|
|
;
|
|
; don't want sites to unknowingly run extract again
|
|
I IVMARRY1("EXTRACT"),'IVMARRY1("LASTPAT") D G:QUIT ENQ
|
|
.W !,"> > > W A R N I N G",*7
|
|
.W !,?5,"The enrollment data extract has already run to completion!"
|
|
.W !,?5,"Do NOT run the extract again unless you have first deleted the"
|
|
.W !,?5,"host files that contain the prior extract!",!
|
|
.D INQUIRE^IVMBULK2("^IVM(301.63,",1)
|
|
.N DIR
|
|
.S DIR(0)="Y"
|
|
.S DIR("A")="Do you want to run the enrollment extract again"
|
|
.S DIR("B")="NO"
|
|
.D ^DIR
|
|
.I $D(DIRUT)!(Y'=1) D
|
|
..S QUIT=1
|
|
.E D
|
|
..D CLEAR(.IVMARRY1)
|
|
;
|
|
; write user info
|
|
D HDR1
|
|
;
|
|
; calculate extract size/time estimates
|
|
S IVMARRY1("PROJECT")=""
|
|
D EST(.IVMARRY1,.IVMCONST)
|
|
;
|
|
; if user time-out or abort, exit
|
|
I '$$PAUSE() S QUIT=1 G ENQ
|
|
;
|
|
; if directory not specified, exit
|
|
I IVMARRY1("DIR")="",('$$PATH^IVMBULK2(.IVMARRY1)) S QUIT=1 G ENQ
|
|
;
|
|
; queue enrollment extract job
|
|
S ZTSAVE("IVMARRY1(")="",ZTSAVE("IVMCONST(")=""
|
|
S ZTDESC="Enrollment Initial Data Extract",ZTRTN="GOGO^IVMBULK1",ZTIO=""
|
|
D ^%ZTLOAD,HOME^%ZIS
|
|
I $D(ZTSK) W !,"This job has been queued. The task number is "_ZTSK_"."
|
|
I '$D(ZTSK) W !,"Unable to queue this job." S QUIT=1
|
|
;
|
|
ENQ ;
|
|
; if job is not queued, unlock IVM EXTRACT MANAGEMENT file
|
|
I QUIT D UNLOCK^IVMBULK2(1)
|
|
Q
|
|
;
|
|
;
|
|
ENV() ; --
|
|
; Description: This function performs an environment check for the enrollment initial data extract job.
|
|
;
|
|
; Input: None
|
|
;
|
|
; Output:
|
|
; Function Value - Extract environment check successful?
|
|
; Return 1 if successful, otherwise 0
|
|
;
|
|
N IVMOK
|
|
S IVMOK=1
|
|
;
|
|
I '($D(DUZ)#2) W *7,!,"You must have a valid DUZ defined before running this routine!" S IVMOK=0
|
|
;
|
|
Q IVMOK
|
|
;
|
|
;
|
|
PAUSE() ; --
|
|
; Description: End-of-Page, Press return to continue or "^" to exit.
|
|
;
|
|
; Input: None
|
|
;
|
|
; Output: Function value - returns 1 if success, 0 otherwise
|
|
;
|
|
N DIR,DIRUT,DUOUT,SUCCESS,Y
|
|
S SUCCESS=0
|
|
;
|
|
S DIR(0)="E"
|
|
D ^DIR
|
|
I $D(DIRUT)!($D(DUOUT)) G PAUSEQ
|
|
;
|
|
S SUCCESS=1
|
|
;
|
|
PAUSEQ Q SUCCESS
|
|
;
|
|
;
|
|
EST(IVMARRY1,IVMCONST) ; --
|
|
; Description: Calculate extract size/time estimates.
|
|
;
|
|
; Input:
|
|
; IVMARRY1 - as array containing required input parameters for enrollment extract job, pass by reference
|
|
; IVMCONST - as array containing enrollment extract constants, pass by reference
|
|
;
|
|
; Output: None
|
|
;
|
|
N IVMTOTAL,X,X2,X3
|
|
;
|
|
; total patients in PATIENT file
|
|
S IVMTOTAL=$$TOTPAT(1)
|
|
;
|
|
; if extract complete, exit
|
|
I IVMTOTAL'>$G(IVMARRY1("PROC")) G ESTQ
|
|
;
|
|
; write estimate disclaimer
|
|
D HDR2(.IVMCONST)
|
|
;
|
|
S IVMTOTAL=IVMTOTAL-$G(IVMARRY1("PROC"))
|
|
S X=IVMTOTAL,X2=0,X3=10 D COMMA^%DTC
|
|
W !,?7,"Estimated number of patients to be processed: "_X
|
|
;W !,?7,"Estimated time of extract: "_$$TIMEST(IVMTOTAL,IVMCONST("PERCNT"),IVMCONST("AVG100"))
|
|
S X=$$TIMEST(IVMTOTAL,IVMCONST("PERCNT"),IVMCONST("AVG100"))
|
|
W !,?7,"Estimated time of extract: "_$P(X,"^",1)_" Hours "_$P(X,"^",2)_" Minutes"
|
|
S IVMARRY1("PROJECT")=$$FMADD^XLFDT($$NOW^XLFDT,0,$P(X,"^",1),$P(X,"^",2),0)
|
|
S X=($$SIZEST(IVMTOTAL,IVMCONST("PERCNT"),IVMCONST("SIZE"))\1),X2=0,X3=20 D COMMA^%DTC
|
|
W !,?7,"Estimated amount of disk space (bytes): "_X
|
|
W !
|
|
ESTQ Q
|
|
;
|
|
;
|
|
TOTPAT(ESTIMATE) ; --
|
|
; Description: This function counts the number of records in the PATIENT file.
|
|
;
|
|
; Input:
|
|
; ESTIMATE - (optional) if not passed, an actual patient count will be returned as the function value. If ESTIMATE=1, then an estimated number of patients in the Patient (#2) file will be returned as the function value.
|
|
;
|
|
; Output:
|
|
; Function Value - If ESTIMATE=1 the actual count of records in the patient file, otherwise the estimated count of records in the patient file.
|
|
;
|
|
N COUNT,DFN
|
|
S (COUNT,DFN)=0
|
|
;
|
|
; if flag, estimated count of records in Patient (#2) file (header node)
|
|
I $G(ESTIMATE) S COUNT=$P($G(^DPT(0)),"^",4)
|
|
;
|
|
ELSE D
|
|
.;
|
|
.; - loop through Patient (#2) file for actual count of records
|
|
.F S DFN=$O(^DPT(DFN)) Q:'DFN S COUNT=COUNT+1
|
|
;
|
|
Q COUNT
|
|
;
|
|
;
|
|
TIMEST(COUNT,PERCN,AVG100) ; --
|
|
; Description: This function will return a time estimate as to how long the initial data extract will run.
|
|
;
|
|
; Input:
|
|
; COUNT - number of patients in the PATIENT file
|
|
; PERCN - percentage of total patients that are expected to be extracted
|
|
; AVG100 - average time to add 100 patients to the extract in seconds
|
|
;
|
|
; Output:
|
|
; Function Value - If successful, returns the time estimate in the format HOURS^MINUTES. If function is not successful, the function returns NULL
|
|
;
|
|
N SECONDS,HOURS,MINUTES
|
|
;
|
|
I ($G(COUNT)'>0)!($G(PERCN)'>0)!($G(AVG100)'>0) Q ""
|
|
S SECONDS=(PERCN*AVG100*COUNT)/10000
|
|
S HOURS=SECONDS\3600
|
|
S SECONDS=SECONDS-(HOURS*3600)
|
|
S MINUTES=SECONDS\60
|
|
;
|
|
Q HOURS_"^"_MINUTES
|
|
;
|
|
;
|
|
SIZEST(COUNT,PERCN,SIZE) ;
|
|
; Description: This function will return a size estimate for the initial data extract.
|
|
;
|
|
; Input:
|
|
; COUNT - number of patients in the PATIENT file
|
|
; PERCN - percentage of total patients that are expected to be extracted
|
|
; SIZE - average size of single patient record in the extract in BYTES
|
|
; Output:
|
|
; Function Value - the estimated file size in BYTES
|
|
;
|
|
I (COUNT'>0)!(PERCN'>0)!(SIZE'>0) Q 0
|
|
Q (PERCN*SIZE*COUNT)/100
|
|
;
|
|
;
|
|
HDR1 ; --
|
|
; Description: Write extract user info.
|
|
;
|
|
; Input: None
|
|
; Output: None
|
|
;
|
|
W !!,"> > > E N R O L L M E N T D A T A E X T R A C T"
|
|
W !!,?5,"This job will loop through the Patient (#2) file to find patients"
|
|
W !,?5,"that meet the enrollment extract selection criteria.",!
|
|
W !,?5,"Due to the high integration with the Patient (#2) file, please"
|
|
W !,?5,"queue this job to run at non-peak hours.",!
|
|
Q
|
|
;
|
|
;
|
|
HDR2(IVMCONST) ; --
|
|
; Description: Write extract estimate disclaimer
|
|
;
|
|
; Input:
|
|
; IVMCONST() - an array containing extract constants, pass by reference
|
|
; IVMCONST("PERCNT") - % of patients expected to be extracted.
|
|
;
|
|
; Output: None
|
|
;
|
|
W !,?15," * * * * * P L E A S E N O T E * * * * *"
|
|
W !,?5,"The following time and space estimates are based on the approximate"
|
|
W !,?5,"number of patients in your database. Of those patients, it is assumed"
|
|
W !,?5,"that approximately "_IVMCONST("PERCNT")_"% will meet the requirements to be included in"
|
|
W !,?5,"the extract. Also, the time estimate provided does not account for"
|
|
W !,?5,"the speed of your system or the load on your system.",!
|
|
Q
|
|
;
|
|
CLEAR(IVMARRAY) ;
|
|
;Description: If the extract must be run again (the entire extract
|
|
;created from scratch, as opposed to restarted), the IVM EXTRACT
|
|
;MANAGMENT record needs to be cleared. This call will do that.
|
|
;
|
|
;Input: none
|
|
;Output:
|
|
; IVMARRAY - optional output variable, pass by reference,
|
|
; IVMARRAY() contains the IVM EXTRACT MANAGMENT record after
|
|
; being initialized.
|
|
;
|
|
N IVMCONST
|
|
;
|
|
I $$GETCONST^IVMBULK2(.IVMCONST),$$INIT^IVMBULK2(.IVMARRAY) D
|
|
.S IVMARRAY("HOST")=IVMCONST("HOST")
|
|
.I $$STORE^IVMBULK2(.IVMARRAY)
|
|
Q
|