[623] | 1 | ECXTRAC ;ALB/GTS,JAP,BIR/DMA,CML-Package Extracts for DSS ; 5/9/05 10:39am
|
---|
| 2 | ;;3.0;DSS EXTRACTS;**9,8,14,24,30,33,49,84**;Dec 22, 1997
|
---|
| 3 | ;Date range, queuing and message sending for package extracts
|
---|
| 4 | ;Input
|
---|
| 5 | ; ECPACK printed name of package (e.g. Lab, Prescriptions)
|
---|
| 6 | ; ECNODE in file 728 where last date is stored
|
---|
| 7 | ; ECPIECE piece of node where last date is stored
|
---|
| 8 | ; ECRTN in the form of START^ROUTINE
|
---|
| 9 | ; ECGRP name of local mail group to receive summary message
|
---|
| 10 | ; (MUST BE 1 TO 5 UPPER CASE ALPHA - NO SPACES)
|
---|
| 11 | ; ECFILE file number of the local editing file
|
---|
| 12 | ; ECXLOGIC Fiscal year extract logic to use (optional)
|
---|
| 13 | ; ECXDATES StartDate^EndDate^DoNotUpdate728 (optional)
|
---|
| 14 | ;Generates
|
---|
| 15 | ; EC23=2nd and 3rd piece of zero node in local editing file
|
---|
| 16 | ; =YYMM of end date^pointer to 727
|
---|
| 17 | ; ECXLOGIC=Fiscal year extract logic to use
|
---|
| 18 | ;
|
---|
| 19 | EN ;entry point
|
---|
| 20 | N OUT,CHKFLG
|
---|
| 21 | I '$D(ECNODE) S ECNODE=7
|
---|
| 22 | I '$D(ECHEAD) S ECHEAD=" "
|
---|
| 23 | I $P($G(^ECX(728,1,ECNODE+.1)),U,ECPIECE)]"" D Q
|
---|
| 24 | .W !!,$C(7),ECPACK," extract is already scheduled to run",!!
|
---|
| 25 | .D PAUSE
|
---|
| 26 | W @IOF,!,"Extract ",ECPACK," Information for DSS",!!
|
---|
| 27 | S:'$D(ECINST) ECINST=+$P(^ECX(728,1,0),U)
|
---|
| 28 | S ECXINST=ECINST
|
---|
| 29 | K ECXDIC S DA=ECINST,DIC="^DIC(4,",DIQ(0)="I",DIQ="ECXDIC",DR=".01;99"
|
---|
| 30 | D EN^DIQ1 S ECINST=$G(ECXDIC(4,DA,99,"I")) K DIC,DIQ,DA,DR,ECXDIC
|
---|
| 31 | ;* get last date for all extracts except prosthetics
|
---|
| 32 | I ECGRP'="PRO" D
|
---|
| 33 | .S ECLDT=$S($D(^ECX(728,1,ECNODE)):$P(^(ECNODE),U,ECPIECE),1:2610624)
|
---|
| 34 | .S:ECLDT="" ECLDT=2610624
|
---|
| 35 | ;* get last date for prosthetics
|
---|
| 36 | I ECGRP="PRO" D
|
---|
| 37 | .N ECXDA1
|
---|
| 38 | .S ECXDA1=$O(^ECX(728,0))
|
---|
| 39 | .I $D(^ECX(728,ECXDA1,1,ECXINST,0)) D
|
---|
| 40 | ..S ECLDT=$P(^ECX(728,ECXDA1,1,ECXINST,0),U,2)
|
---|
| 41 | .I '$D(^ECX(728,ECXDA1,1,ECXINST,0)) D
|
---|
| 42 | ..S DA(1)=ECXDA1
|
---|
| 43 | ..S DIC(0)="L" K ECXDD
|
---|
| 44 | ..D FIELD^DID(728,59,,"SPECIFIER","ECXDD")
|
---|
| 45 | ..S DIC("P")=ECXDD("SPECIFIER") K ECXDD
|
---|
| 46 | ..S DIC="^ECX(728,"_DA(1)_",1,",X=ECXINST,DINUM=X
|
---|
| 47 | ..K DD,DO D FILE^DICN
|
---|
| 48 | ..K DIC,X,DINUM,Y,DA
|
---|
| 49 | ..S ECLDT=2610624
|
---|
| 50 | S X=$G(ECXDATES) S ECSD=$P(X,"^",1),ECED=$P(X,"^",2)
|
---|
| 51 | S OUT=0
|
---|
| 52 | I (ECSD="")!(ECED="") F S (ECED,ECSD)="" D Q:OUT
|
---|
| 53 | .K %DT S %DT="AEX",%DT("A")="Starting with Date: " D ^%DT
|
---|
| 54 | .I Y<0 S OUT=1 Q
|
---|
| 55 | .S ECSD=Y
|
---|
| 56 | .K %DT S %DT="AEX",%DT("A")="Ending with Date: " D ^%DT
|
---|
| 57 | .I Y<0 S OUT=1 Q
|
---|
| 58 | .I Y<ECSD D Q
|
---|
| 59 | ..W !!,"The ending date cannot be earlier than the starting date."
|
---|
| 60 | ..W !,"Please try again.",!!
|
---|
| 61 | .I $E(Y,1,5)'=$E(ECSD,1,5) D Q
|
---|
| 62 | ..W !!,"Beginning and ending dates must be in the same month and year."
|
---|
| 63 | ..W !,"Please try again.",!!
|
---|
| 64 | .S ECED=Y
|
---|
| 65 | .I ECLDT'<ECSD D Q
|
---|
| 66 | ..W !!,"The ",ECPACK," information has already been extracted through ",$$FMTE^XLFDT(ECLDT),"."
|
---|
| 67 | ..W !,"Please enter a new date range.",!!
|
---|
| 68 | .S OUT=1
|
---|
| 69 | I ECED]"",ECSD]"" D QUE
|
---|
| 70 | Q
|
---|
| 71 | ;
|
---|
| 72 | QUE ;queue extract
|
---|
| 73 | N CHKFLG
|
---|
| 74 | ;if extract is ivp (i.e., file=727.819) and data in the intermediate file use new format
|
---|
| 75 | I ECFILE=727.819 D Q:CHKFLG
|
---|
| 76 | .S CHKFLG=0
|
---|
| 77 | .S X="PSIVSTAT" X ^%ZOSF("TEST") I '$T Q
|
---|
| 78 | .I '$D(^ECX(728.113,"A")) S CHKFLG=1 D NOIVP Q
|
---|
| 79 | .S DATE=$O(^ECX(728.113,"A",ECED+1),-1) I DATE<ECSD S CHKFLG=1 D NOIVP Q
|
---|
| 80 | .D CHK^ECXDIVIV Q:CHKFLG
|
---|
| 81 | .D CHK2
|
---|
| 82 | .S ECRTN="START^ECXPIVDN",ECVER=7
|
---|
| 83 | I '$D(ECNODE) S ECNODE=7
|
---|
| 84 | I '$D(ECHEAD) S ECHEAD=""
|
---|
| 85 | S ECSDN=$$FMTE^XLFDT(ECSD),ECEDN=$$FMTE^XLFDT(ECED),ECSD1=ECSD-.1
|
---|
| 86 | K ZTSAVE
|
---|
| 87 | F X="ECINST","ECED","ECSD","ECSD1","ECEDN","ECSDN" S ZTSAVE(X)=""
|
---|
| 88 | F X="ECPACK","ECPIECE","ECRTN","ECGRP","ECNODE" S ZTSAVE(X)=""
|
---|
| 89 | F X="ECFILE","ECHEAD","ECVER","ECINST","ECXINST" S ZTSAVE(X)=""
|
---|
| 90 | F X="ECXLOGIC","ECXDATES" S ZTSAVE(X)=""
|
---|
| 91 | S ZTDESC=ECPACK_" EXTRACT: "_ECSDN_" TO "_ECEDN,ZTRTN="START^ECXTRAC",ZTIO=""
|
---|
| 92 | D ^%ZTLOAD
|
---|
| 93 | I $D(ZTSK) D
|
---|
| 94 | .S $P(^ECX(728,1,ECNODE+.1),U,ECPIECE)="R"
|
---|
| 95 | .W !,"Request queued as Task #",ZTSK,".",!
|
---|
| 96 | .D PAUSE
|
---|
| 97 | Q
|
---|
| 98 | ;
|
---|
| 99 | NOIVP ;cannot generate ivp message
|
---|
| 100 | W !!,?5,"There does not appear to be any data in the IV EXTRACT DATA"
|
---|
| 101 | W !,?5,"file (#728.113) for the selected date range."
|
---|
| 102 | W !!,?5,"The IVP extract cannot be generated."
|
---|
| 103 | D PAUSE
|
---|
| 104 | Q
|
---|
| 105 | ;
|
---|
| 106 | START ; entry when queued
|
---|
| 107 | S QFLG=0
|
---|
| 108 | L +^ECX(727,0) S EC=$P(^ECX(727,0),U,3)+1,$P(^(0),U,3,4)=EC_U_EC L -^ECX(727,0)
|
---|
| 109 | S ^ECX(727,EC,0)=EC_U_DT_U_ECPACK_U_ECSD_U_$E(ECED,1,7)_U_U_DUZ
|
---|
| 110 | S ^ECX(727,EC,"HEAD")=ECHEAD
|
---|
| 111 | S:ECFILE=727.816 ECFILE=727.827 S ^ECX(727,EC,"FILE")=ECFILE
|
---|
| 112 | S ^ECX(727,EC,"GRP")=ECGRP
|
---|
| 113 | I $G(ECXLOGIC)="" S ECXLOGIC=$$FISCAL^ECXUTL1(ECSD)
|
---|
| 114 | S ^ECX(727,EC,"VER")=$G(ECVER)_"^"_ECXLOGIC
|
---|
| 115 | S ^ECX(727,EC,"DIV")=ECXINST
|
---|
| 116 | S DA=EC,DIK="^ECX(727," D IX^DIK K DIK,DA
|
---|
| 117 | S ECRN=0,ECXYM=$$ECXYM^ECXUTL(ECED),EC23=ECXYM_U_EC
|
---|
| 118 | S ECXSTART=$P($$HTE^XLFDT($H),":",1,2),ECXNOW=$H
|
---|
| 119 | ;do specific extract
|
---|
| 120 | D @ECRTN
|
---|
| 121 | ;if task gets stop request, set ztstop and quit
|
---|
| 122 | I QFLG D Q
|
---|
| 123 | .S $P(^ECX(728,1,ECNODE+.1),U,ECPIECE)="",ZTSTOP=1
|
---|
| 124 | .D QKILL
|
---|
| 125 | .D QMSG
|
---|
| 126 | .D ^ECXKILL
|
---|
| 127 | ;Set last date for extract
|
---|
| 128 | I '$P($G(ECXDATES),"^",3) D
|
---|
| 129 | .;* set last date for all extracts except prosthetics
|
---|
| 130 | .I ECGRP'="PRO" S $P(^ECX(728,1,ECNODE),U,ECPIECE)=$P(ECED,".") Q
|
---|
| 131 | .;* set last date for prosthetics
|
---|
| 132 | .N ECXDA1
|
---|
| 133 | .S ECXDA1=$O(^ECX(728,0))
|
---|
| 134 | .S $P(^ECX(728,ECXDA1,1,ECXINST,0),U,2)=$P(ECED,".")
|
---|
| 135 | S TIME=$P($$HTE^XLFDT($H),":",1,2)
|
---|
| 136 | S $P(^ECX(727,$P(EC23,U,2),0),U,6)=ECRN
|
---|
| 137 | ;set piece 3 and 4 of the zero node
|
---|
| 138 | S ECLAST=$O(^ECX(ECFILE,99999999),-1),ECTOTAL=$P(^ECX(ECFILE,0),U,4)+ECRN,$P(^(0),U,3,4)=ECLAST_U_ECTOTAL K ECLAST,ECTOTAL
|
---|
| 139 | D MSG
|
---|
| 140 | S $P(^ECX(728,1,ECNODE+.1),U,ECPIECE)=""
|
---|
| 141 | I $D(ZTQUEUED) S ZTREQ="@"
|
---|
| 142 | Q
|
---|
| 143 | ;
|
---|
| 144 | MSG ; send message to mail group 'DSS-ECGRP'
|
---|
| 145 | S XMSUB=ECINST_" - "_ECPACK_" EXTRACT FOR DSS",XMDUZ="DSS SYSTEM"
|
---|
| 146 | K XMY S XMY("G.DSS-"_ECGRP_"@"_^XMB("NETNAME"))=""
|
---|
| 147 | S ECMSG(1,0)="The DSS-"_ECPACK_" extract (#"_$P(EC23,U,2)_") for "_ECSDN
|
---|
| 148 | S ECMSG(2,0)="through "_ECEDN_" was begun on "_$P(ECXSTART,"@")_" at "_$P(ECXSTART,"@",2)
|
---|
| 149 | S ECMSG(3,0)="and completed on "_$P(TIME,"@")_" at "_$P(TIME,"@",2)_"."
|
---|
| 150 | S ECMSG(4,0)=" "
|
---|
| 151 | S ECMSG(5,0)="A total of "_ECRN_" records were written."
|
---|
| 152 | S ECMSG(6,0)=" "
|
---|
| 153 | S ECMSG(7,0)="Extract time was [HH:MM:SS] "_$$HDIFF^XLFDT($H,ECXNOW,3)
|
---|
| 154 | S ECMSG(8,0)=" "
|
---|
| 155 | S X=$E(ECXLOGIC,5) S X=$S((X="")!(X=" "):"",1:"revision "_X_" of ")
|
---|
| 156 | S ECMSG(9,0)="The data was extracted using "_X_"fiscal year "_$E(ECXLOGIC,1,4)_" logic."
|
---|
| 157 | S ECMSG(10,0)=" "
|
---|
| 158 | S XMTEXT="ECMSG("
|
---|
| 159 | D ^XMD
|
---|
| 160 | Q
|
---|
| 161 | ;
|
---|
| 162 | QMSG ; send abort message to mail group 'DSS-ECGRP'
|
---|
| 163 | S XMSUB=ECINST_" - "_ECPACK_" EXTRACT FOR DSS",XMDUZ="DSS SYSTEM"
|
---|
| 164 | K XMY S XMY("G.DSS-"_ECGRP_"@"_^XMB("NETNAME"))=""
|
---|
| 165 | S ECMSG(1,0)="The DSS-"_ECPACK_" extract (#"_$P(EC23,U,2)_") for "_ECSDN
|
---|
| 166 | S ECMSG(2,0)="through "_ECEDN_" was begun on "_$P(ECXSTART,"@")_" at "_$P(ECXSTART,"@",2)_"."
|
---|
| 167 | S ECMSG(3,0)=" "
|
---|
| 168 | S ECMSG(4,0)="A user stop request was received by Taskmanager which caused processing"
|
---|
| 169 | S ECMSG(5,0)="to terminate before completion. Any records which may have been created"
|
---|
| 170 | S ECMSG(6,0)="in file #"_ECFILE_" for this extract have been deleted."
|
---|
| 171 | S ECMSG(7,0)=" "
|
---|
| 172 | S XMTEXT="ECMSG("
|
---|
| 173 | D ^XMD
|
---|
| 174 | Q
|
---|
| 175 | ;
|
---|
| 176 | QKILL ;delete records created for any extract stopped at user request
|
---|
| 177 | N ECX,FILE,IEN,DA,DIK
|
---|
| 178 | S FILE="^ECX("_ECFILE_","
|
---|
| 179 | S ECX=$P(EC23,U,2)
|
---|
| 180 | F S IEN=$O(^ECX(ECFILE,999999999),-1) Q:($P(^ECX(ECFILE,IEN,0),U,3)'=ECX) D
|
---|
| 181 | .S DIK=FILE,DA=IEN D ^DIK
|
---|
| 182 | Q
|
---|
| 183 | ;
|
---|
| 184 | CHK2 ;iv extract check - all active iv rooms to have a division
|
---|
| 185 | S EC=0
|
---|
| 186 | F S EC=$O(^PS(59.5,EC)) Q:'EC I '$P(^PS(59.5,EC,0),U,4) D Q:CHKFLG
|
---|
| 187 | .S CHKFLG=$S('$G(^PS(59.5,EC,"I")):1,$G(^PS(59.5,EC,"I"))>DT:1,1:0)
|
---|
| 188 | .I CHKFLG D
|
---|
| 189 | ..W !!,"All active IV Rooms in the IV Room file (#59.5) must have a ""DIVISION""",!,"assigned to run this extract!"
|
---|
| 190 | ..W !!,"This information can be entered using the DSS Extract Manager's Maintenance ",!,"option ""Enter/Edit IV Room Division""."
|
---|
| 191 | ..D PAUSE
|
---|
| 192 | Q
|
---|
| 193 | ;
|
---|
| 194 | PAUSE ;pause screen
|
---|
| 195 | N DIR,X,Y
|
---|
| 196 | S OUT=0
|
---|
| 197 | I $E(IOST)="C" D
|
---|
| 198 | .S SS=22-$Y F JJ=1:1:SS W !
|
---|
| 199 | .S DIR(0)="E" W ! D ^DIR K DIR
|
---|
| 200 | I 'Y S OUT=1
|
---|
| 201 | W !!
|
---|
| 202 | Q
|
---|