| 1 | KMPDHU03 ;OAK/RAK - CM Tools Compile & File HL7 Daily Stats ;2/17/04  08:59 | 
|---|
| 2 | ;;2.0;CAPACITY MANAGEMENT TOOLS;;Mar 22, 2002 | 
|---|
| 3 | ; | 
|---|
| 4 | COMPILE ;-compile synchronous data into GLB1 | 
|---|
| 5 | ;----------------------------------------------------------------------- | 
|---|
| 6 | ; DATA.... data from GBL array | 
|---|
| 7 | ; DATE.... date.hr | 
|---|
| 8 | ; ND...... node where data will be filed in file #8973.1 | 
|---|
| 9 | ; LC...... up-arrow (^) piece location of data to be filed | 
|---|
| 10 | ; NM....... namespace | 
|---|
| 11 | ; PT...... protocol name~ien | 
|---|
| 12 | ; PTNP.... prime time - 1 | 
|---|
| 13 | ;          non-prime time 2 | 
|---|
| 14 | ;----------------------------------------------------------------------- | 
|---|
| 15 | ; | 
|---|
| 16 | N DATA,DATE,I,ND,LC,NM,PT,PTNP | 
|---|
| 17 | ; | 
|---|
| 18 | Q:'$D(@GBL@(SS1,SS2,SS3,SS4,SS5,SS6))  S DATA=$G(^(SS6)) Q:DATA="" | 
|---|
| 19 | ; namespace | 
|---|
| 20 | S NM=$S(SS1="HR"!(SS1="PROT"):SS5,SS1="NMSP":SS4,1:"") Q:NM="" | 
|---|
| 21 | ; protocol | 
|---|
| 22 | S PT=$S(SS1="HR"!(SS1="NMSP"):SS6,SS1="PROT":SS4,1:"") Q:PT="" | 
|---|
| 23 | ; prime time - 1, non-prime time - 2 | 
|---|
| 24 | S DATE=$S(SS1="HR":SS4,SS1="NMSP":SS5,SS1="PROT":SS6,1:"") Q:'DATE | 
|---|
| 25 | ; DATE is set by using the 'next highest' hour | 
|---|
| 26 | ; 3030509.0811 is returned as 3030509.09 | 
|---|
| 27 | ; use $$fmadd to go back to previous hour | 
|---|
| 28 | S PTNP=$$PTNP^KMPDHU03($$FMADD^XLFDT(DATE,,-1)) Q:'PTNP | 
|---|
| 29 | ; | 
|---|
| 30 | I SS1="HR" D | 
|---|
| 31 | .S ND=$S(SS2="TM":1,1:""),ND=ND+(PTNP-1) | 
|---|
| 32 | .S LC=$S(SS3="T":0,SS3="M":3,SS3="U":6,1:"") | 
|---|
| 33 | I SS1="NMSP" D | 
|---|
| 34 | .S ND=$S(SS2="IO":1.1,SS2="LR":1.2,1:""),ND=ND+(PTNP-1) | 
|---|
| 35 | .S LC=$S(SS3="I"!(SS3="L"):0,SS3="O"!(SS3="R"):3,SS3="U":6,1:"") Q:LC="" | 
|---|
| 36 | I SS1="PROT" D | 
|---|
| 37 | .S ND=99,LC=$S(PTNP=1:0,PTNP=2:3,1:"") | 
|---|
| 38 | ; | 
|---|
| 39 | ; quit if not node (ND) or location (LC) | 
|---|
| 40 | Q:'$P(DATE,".")!('ND)!(LC="") | 
|---|
| 41 | ; | 
|---|
| 42 | F I=1,3 D | 
|---|
| 43 | .S $P(@GBL1@($P(DATE,"."),PT,NM,ND),U,(I+LC))=$P($G(@GBL1@($P(DATE,"."),PT,NM,ND)),U,(I+LC))+$P(DATA,U,I) | 
|---|
| 44 | S $P(@GBL1@($P(DATE,"."),PT,NM,ND),U,(2+LC))=$P($G(@GBL1@($P(DATE,"."),PT,NM,ND)),U,(2+LC))+$P(DATA,U,4) | 
|---|
| 45 | ; | 
|---|
| 46 | Q | 
|---|
| 47 | ; | 
|---|
| 48 | FILE(KMPDSYNC) ;-file data into file 8973.1 (CM HL7 DATA) | 
|---|
| 49 | ;----------------------------------------------------------------------- | 
|---|
| 50 | ; KMPDSYNC... 1 - synchronous | 
|---|
| 51 | ;             2 - asynchronous | 
|---|
| 52 | ;----------------------------------------------------------------------- | 
|---|
| 53 | Q:'$G(KMPDSYNC) | 
|---|
| 54 | Q:KMPDSYNC<1!(KMPDSYNC>2) | 
|---|
| 55 | Q:'$D(@GBL1) | 
|---|
| 56 | ; | 
|---|
| 57 | W:'$D(ZTQUEUED) !,"Filing ",$S(KMPDSYNC=2:"asynchronous",1:"synchronous")," HL7 stats into file 8973.1 (CM HL7 DATA)..." | 
|---|
| 58 | ; | 
|---|
| 59 | ; file data | 
|---|
| 60 | D @("FILE"_KMPDSYNC) Q:'$D(FDA) | 
|---|
| 61 | ; | 
|---|
| 62 | Q | 
|---|
| 63 | ; | 
|---|
| 64 | FILE1 ;-- file synchronous data | 
|---|
| 65 | ; | 
|---|
| 66 | Q:'$D(@GBL1) | 
|---|
| 67 | ; | 
|---|
| 68 | N DATE,ERROR,FDA,I,IEN,INDEX,NM,PT,PT1,ZIEN | 
|---|
| 69 | ; | 
|---|
| 70 | S DATE=0 | 
|---|
| 71 | F  S DATE=$O(@GBL1@(DATE)) Q:'DATE  S PT="" D | 
|---|
| 72 | .F  S PT=$O(@GBL1@(DATE,PT)) Q:PT=""  S NM="" D | 
|---|
| 73 | ..; remove ien (name~123) from protocol | 
|---|
| 74 | ..S PT1=$P(PT,"~") Q:PT1="" | 
|---|
| 75 | ..F  S NM=$O(@GBL1@(DATE,PT,NM)) Q:NM=""  S ND=0 D | 
|---|
| 76 | ...K ERROR,FDA,IEN,ZIEN | 
|---|
| 77 | ...; determine if data has already been filed (if ien) | 
|---|
| 78 | ...S IEN=$O(^KMPD(8973.1,"APTDTNM",PT1,DATE,NM,0)) | 
|---|
| 79 | ...;     if filed set IEN="ien," - edit entry | 
|---|
| 80 | ...; if not filed set IEN="+1," - add entry | 
|---|
| 81 | ...S IEN=$S(IEN:IEN_",",1:"+1,") | 
|---|
| 82 | ...S FDA($J,8973.1,IEN,.01)=DATE | 
|---|
| 83 | ...S FDA($J,8973.1,IEN,.03)=NM | 
|---|
| 84 | ...S FDA($J,8973.1,IEN,.05)=PT1 | 
|---|
| 85 | ...S FDA($J,8973.1,IEN,.06)=1 | 
|---|
| 86 | ...F  S ND=$O(@GBL1@(DATE,PT,NM,ND)) Q:'ND  D | 
|---|
| 87 | ....S DATA=@GBL1@(DATE,PT,NM,ND) Q:DATA="" | 
|---|
| 88 | ....S INDEX=$S(ND=99:6,ND=99.2:13,ND=99.5:3,$E(ND)=5:24,1:9) | 
|---|
| 89 | ....F I=1:1:INDEX S:$P(DATA,U,I)'="" FDA($J,8973.1,IEN,ND+(I*.001))=$P(DATA,U,I) | 
|---|
| 90 | ...; file data | 
|---|
| 91 | ...D UPDATE^DIE("","FDA($J)","ZIEN","ERROR") | 
|---|
| 92 | ...; if error | 
|---|
| 93 | ...I $D(ERROR) D | 
|---|
| 94 | ....D MSG^DIALOG("HA",.KMPDERR,60,5,"ERROR") | 
|---|
| 95 | ....D EMAIL^KMPDUTL2("CM TOOLS - HL7 DAILY Error","KMPDERR(") | 
|---|
| 96 | ; | 
|---|
| 97 | Q | 
|---|
| 98 | ; | 
|---|
| 99 | FILE2 ;-- file asynchronous data | 
|---|
| 100 | ; | 
|---|
| 101 | Q:'$D(@GBL1) | 
|---|
| 102 | ; | 
|---|
| 103 | N CF,DATE,ERROR,I,IEN,INDEX1,INDEX2,KMPDERR,NM,PT,PT1,ZIEN | 
|---|
| 104 | ; | 
|---|
| 105 | K ^TMP($J,"KMPDHU03-F2") | 
|---|
| 106 | S DATE=0 | 
|---|
| 107 | F  S DATE=$O(@GBL1@(DATE)) Q:'DATE  S PT="" D | 
|---|
| 108 | .F  S PT=$O(@GBL1@(DATE,PT)) Q:PT=""  S NM="" D | 
|---|
| 109 | ..; remove ien (name~123) from protocol | 
|---|
| 110 | ..S PT1=$P(PT,"~") Q:PT1="" | 
|---|
| 111 | ..F  S NM=$O(@GBL1@(DATE,PT,NM)) Q:NM=""  S CF="" D | 
|---|
| 112 | ...F  S CF=$O(@GBL1@(DATE,PT,NM,CF)) Q:CF=""  S ND=0 D | 
|---|
| 113 | ....K ERROR,IEN,ZIEN,^TMP($J,"KMPDHU03-F2"),^TMP($J,"KMPDHU03-ERROR") | 
|---|
| 114 | ....; determine if data has already been filed (if ien) | 
|---|
| 115 | ....S IEN=$O(^KMPD(8973.1,"ACSDTPRNM",CF,DATE,PT1,NM,0)) | 
|---|
| 116 | ....;     if filed set IEN="ien," - edit entry | 
|---|
| 117 | ....; if not filed set IEN="+1," - add entry | 
|---|
| 118 | ....S IEN=$S(IEN:IEN_",",1:"+1,") | 
|---|
| 119 | ....; date | 
|---|
| 120 | ....S ^TMP($J,"KMPDHU03-F2",8973.1,IEN,.01)=DATE | 
|---|
| 121 | ....; namespace | 
|---|
| 122 | ....S ^TMP($J,"KMPDHU03-F2",8973.1,IEN,.03)=NM | 
|---|
| 123 | ....; protocol | 
|---|
| 124 | ....S ^TMP($J,"KMPDHU03-F2",8973.1,IEN,.05)=PT1 | 
|---|
| 125 | ....; 2 = asynchronous | 
|---|
| 126 | ....S ^TMP($J,"KMPDHU03-F2",8973.1,IEN,.06)=2 | 
|---|
| 127 | ....F  S ND=$O(@GBL1@(DATE,PT,NM,CF,ND)) Q:'ND  D | 
|---|
| 128 | .....S DATA=@GBL1@(DATE,PT,NM,CF,ND) Q:DATA="" | 
|---|
| 129 | .....; starting index | 
|---|
| 130 | .....S INDEX1=1 ;$S($E(ND)=5:9,1:1) | 
|---|
| 131 | .....; ending index | 
|---|
| 132 | .....S INDEX2=$S(ND=99:6,ND=99.2:13,ND=99.3:9,ND=99.5:3,$E(ND)=5:24,$E(ND)=6:24,1:0) | 
|---|
| 133 | .....Q:'INDEX2 | 
|---|
| 134 | .....F I=INDEX1:1:INDEX2 S:$P(DATA,U,I)'="" ^TMP($J,"KMPDHU03-F2",8973.1,IEN,ND+(I*.001))=$P(DATA,U,I) | 
|---|
| 135 | ....;file data | 
|---|
| 136 | ....D UPDATE^DIE("",$NA(^TMP($J,"KMPDHU03-F2")),"ZIEN","ERROR") | 
|---|
| 137 | ....; if error | 
|---|
| 138 | ....I $D(ERROR) D | 
|---|
| 139 | .....D MSG^DIALOG("HA",.KMPDERR,60,5,"ERROR") | 
|---|
| 140 | .....D EMAIL^KMPDUTL2("CM TOOLS - HL7 DAILY Error","KMPDERR(") | 
|---|
| 141 | ; | 
|---|
| 142 | K ^TMP($J,"KMPDHU03-F2") | 
|---|
| 143 | ; | 
|---|
| 144 | Q | 
|---|
| 145 | ; | 
|---|
| 146 | PTNP(DATE) ;-extrinsic function - determine if date.hr is prime time or non-prime time | 
|---|
| 147 | ;----------------------------------------------------------------------- | 
|---|
| 148 | ; DATE.... Date.Time in internal FileMan format | 
|---|
| 149 | ; | 
|---|
| 150 | ; Return: 1 - prime time | 
|---|
| 151 | ;         2 - non-prime time | 
|---|
| 152 | ;        "" - unable to identify | 
|---|
| 153 | ;----------------------------------------------------------------------- | 
|---|
| 154 | Q:'$G(DATE) "" | 
|---|
| 155 | N DOW,HOUR | 
|---|
| 156 | ; day of week in numeric format | 
|---|
| 157 | S DOW=$$DOW^XLFDT(DATE,1) | 
|---|
| 158 | ; hours | 
|---|
| 159 | S HOUR=$E($P(DATE,".",2),1,2) | 
|---|
| 160 | ; prime time - not saturday or sunday or holiday and between the hours | 
|---|
| 161 | ;              of 8am (0800) to 5 pm (1700) | 
|---|
| 162 | Q:DOW'=0&(DOW'=6)&('$G(^HOLIDAY($P(DATE,"."),0)))&(HOUR>7)&(HOUR<17) 1 | 
|---|
| 163 | ; non-prime time | 
|---|
| 164 | Q 2 | 
|---|