| 1 | KMPRBD04 ;OAK/RAK - RUM Data Compression ;5/28/03  08:45 | 
|---|
| 2 | ;;2.0;CAPACITY MANAGEMENT - RUM;;May 28, 2003 | 
|---|
| 3 | ; | 
|---|
| 4 | ; Background Driver (cont.) | 
|---|
| 5 | ; | 
|---|
| 6 | WEEKLY(KMPRDT) ;-- compress daily stats to weekly | 
|---|
| 7 | ;----------------------------------------------------------------------- | 
|---|
| 8 | ; KMPRDT... Compression date in internal fileman formt.  This date | 
|---|
| 9 | ;           must be a Sunday.  It represents the date from which the | 
|---|
| 10 | ;           previous weeks data should be compressed. | 
|---|
| 11 | ;           Example: if KMPRDT = 2981011  then compression will begin | 
|---|
| 12 | ;                    on 2981010 (KMPRDT-1) | 
|---|
| 13 | ; | 
|---|
| 14 | ; Every Sunday compress the daily stats in file #8971.1 into weekly | 
|---|
| 15 | ; and upload the data to the CM RUM National Database | 
|---|
| 16 | ; | 
|---|
| 17 | ; ^TMP($J)............. temporary storage for RUM data | 
|---|
| 18 | ; ^TMP("KMPR PROC",$J). entries that have been processed and will be | 
|---|
| 19 | ;                        updated as 'send to national dabase' | 
|---|
| 20 | ;----------------------------------------------------------------------- | 
|---|
| 21 | ; | 
|---|
| 22 | Q:'$G(KMPRDT) | 
|---|
| 23 | ; | 
|---|
| 24 | N DATA,DATE,DELDATE,END,HOURS,I,IEN,J,NODE,OPTION,SITE,START | 
|---|
| 25 | ; | 
|---|
| 26 | ; quit if not sunday | 
|---|
| 27 | Q:$$DOW^XLFDT(KMPRDT,1) | 
|---|
| 28 | ; | 
|---|
| 29 | K ^TMP($J),^TMP("KMPR PROC",$J) | 
|---|
| 30 | ; | 
|---|
| 31 | ; site info | 
|---|
| 32 | S SITE=$$SITE^VASITE Q:SITE="" | 
|---|
| 33 | ; | 
|---|
| 34 | S DATE=KMPRDT | 
|---|
| 35 | S (START,END)="" | 
|---|
| 36 | ; | 
|---|
| 37 | ; date to begin deletion | 
|---|
| 38 | S DELDATE=$$FMADD^XLFDT(KMPRDT,-14) | 
|---|
| 39 | ; | 
|---|
| 40 | W:'$D(ZTQUEUED) !,"Compressing data into weekly format..." | 
|---|
| 41 | ; reverse $order to get previous dates | 
|---|
| 42 | F  S DATE=$O(^KMPR(8971.1,"B",DATE),-1) Q:'DATE  D | 
|---|
| 43 | .; if DATE is saturday set START and END dates and kill ^TMP($J) | 
|---|
| 44 | .I $$DOW^XLFDT(DATE,1)=6 D | 
|---|
| 45 | ..S END=DATE,START=$$FMADD^XLFDT(DATE,-6) | 
|---|
| 46 | ..K ^TMP($J) | 
|---|
| 47 | .Q:'START | 
|---|
| 48 | .S IEN=0 | 
|---|
| 49 | .F  S IEN=$O(^KMPR(8971.1,"B",DATE,IEN)) Q:'IEN  D | 
|---|
| 50 | ..; | 
|---|
| 51 | ..Q:'$D(^KMPR(8971.1,IEN,0)) | 
|---|
| 52 | ..; | 
|---|
| 53 | ..; data nodes into DATA() array | 
|---|
| 54 | ..S DATA(0)=^KMPR(8971.1,IEN,0),DATA(1)=$G(^(1)),DATA(1.1)=$G(^(1.1)),DATA(1.2)=$G(^(1.2)),DATA(2)=$G(^(2)),DATA(2.1)=$G(^(2.1)),DATA(2.2)=$G(^(2.2)),DATA(3)=$G(^(3)) | 
|---|
| 55 | ..; | 
|---|
| 56 | ..; quit if data has already been sent to national database | 
|---|
| 57 | ..Q:$P(DATA(0),U,2) | 
|---|
| 58 | ..; | 
|---|
| 59 | ..; cpu node | 
|---|
| 60 | ..S NODE=$P(DATA(0),U,3) Q:NODE="" | 
|---|
| 61 | ..; | 
|---|
| 62 | ..; option | 
|---|
| 63 | ..S OPTION=$P(DATA(0),U,4) | 
|---|
| 64 | ..; rpc | 
|---|
| 65 | ..S:OPTION="" OPTION=$P(DATA(0),U,7) | 
|---|
| 66 | ..; hl7 | 
|---|
| 67 | ..S:OPTION="" OPTION=$P(DATA(0),U,9) | 
|---|
| 68 | ..; | 
|---|
| 69 | ..Q:OPTION="" | 
|---|
| 70 | ..; | 
|---|
| 71 | ..; OPTION = OptionName^ProtocolName | 
|---|
| 72 | ..S $P(OPTION,U,2)=$P(DATA(0),U,5) | 
|---|
| 73 | ..; | 
|---|
| 74 | ..S ^TMP($J,START,NODE,OPTION,0)=DATA(0) | 
|---|
| 75 | ..; change first piece to starting date (START) | 
|---|
| 76 | ..S $P(^TMP($J,START,NODE,OPTION,0),U)=START | 
|---|
| 77 | ..; second piece not applicable to national database | 
|---|
| 78 | ..S $P(^TMP($J,START,NODE,OPTION,0),U,2)="" | 
|---|
| 79 | ..; EndingDate^SiteName^SiteNumber | 
|---|
| 80 | ..S ^TMP($J,START,NODE,OPTION,99)=END_U_$P(SITE,U,2)_U_$P(SITE,U,3) | 
|---|
| 81 | ..; | 
|---|
| 82 | ..; add data to get weekly totals | 
|---|
| 83 | ..F I=1,1.1,1.2,2,2.1,2.2,3 I DATA(I)]"" D | 
|---|
| 84 | ...; if subscript 1 or 2 or 3 ('I#1) add pieces 1 - 8 | 
|---|
| 85 | ...; else add pieces 1 - 24 | 
|---|
| 86 | ...F J=1:1:$S('(I#1):8,1:24) D | 
|---|
| 87 | ....S $P(^TMP($J,START,NODE,OPTION,I),U,J)=$P($G(^TMP($J,START,NODE,OPTION,I)),U,J)+$P(DATA(I),U,J) | 
|---|
| 88 | ....; update "HOURS" subscript | 
|---|
| 89 | ....S:(I#1)&($P(DATA(I),U,J)) $P(^KMPTMP("KMPR","HOURS",DATE,NODE),U,J)=1 | 
|---|
| 90 | ..; | 
|---|
| 91 | ..; back to IEN level | 
|---|
| 92 | ..; add to processed array | 
|---|
| 93 | ..S ^TMP("KMPR PROC",$J,IEN)="" | 
|---|
| 94 | .; | 
|---|
| 95 | .; back to DATE level | 
|---|
| 96 | .; if START then transmit data | 
|---|
| 97 | .I DATE=START I $D(^TMP($J)) D TRANSMIT K ^TMP($J) | 
|---|
| 98 | ; | 
|---|
| 99 | ; transmit data to national database | 
|---|
| 100 | W:'$D(ZTQUEUED) !,"Transmitting data to national database..." | 
|---|
| 101 | D:$D(^TMP($J)) TRANSMIT | 
|---|
| 102 | K ^TMP($J) | 
|---|
| 103 | ; | 
|---|
| 104 | ; update field .02 (SENT TO CM NATIONAL DATABASE) to 'YES' for all | 
|---|
| 105 | ; processed entries | 
|---|
| 106 | W:'$D(ZTQUEUED) !,"Updating records to reflect transmission..." | 
|---|
| 107 | S IEN=0 | 
|---|
| 108 | F  S IEN=$O(^TMP("KMPR PROC",$J,IEN)) Q:'IEN  D | 
|---|
| 109 | .K FDA,ERROR | 
|---|
| 110 | .S FDA($J,8971.1,IEN_",",.02)=1 | 
|---|
| 111 | .D FILE^DIE("","FDA($J)","ERROR") | 
|---|
| 112 | K ^TMP("KMPR PROC",$J) | 
|---|
| 113 | ; | 
|---|
| 114 | ; leave two complete weeks of data in file #8971.1 | 
|---|
| 115 | D PURGE^KMPRUTL3(DELDATE,1) | 
|---|
| 116 | ; | 
|---|
| 117 | Q | 
|---|
| 118 | ; | 
|---|
| 119 | TRANSMIT ;-- format ^TMP($J) data, put into e-mail and send to cm. | 
|---|
| 120 | ; | 
|---|
| 121 | Q:'$D(^TMP($J)) | 
|---|
| 122 | ; | 
|---|
| 123 | N HRSDAYS,I,IEN,LN,N,O,S,XMSUB,X,XMTEXT,XMY,XMZ,Y,Z | 
|---|
| 124 | ; | 
|---|
| 125 | K ^TMP("KMPRBD04-3",$J) | 
|---|
| 126 | ; | 
|---|
| 127 | S LN=1 | 
|---|
| 128 | ; version and patch info and weekly background info | 
|---|
| 129 | S Z=$G(^KMPTMP("KMPR","BACKGROUND","WEEKLY","TOTAL","START"))_"^"_$G(^("STOP"))_"^"_$G(^("DELTA")) | 
|---|
| 130 | S ^TMP("KMPRBD04-3",$J,LN)="VERSION="_$$VERSION^KMPRUTL_"^"_Z | 
|---|
| 131 | ; | 
|---|
| 132 | ; get system information | 
|---|
| 133 | S LN=LN+1 | 
|---|
| 134 | S ^TMP("KMPRBD04-3",$J,LN)="SYSINFO="_$$SYSINFO^KMPDUTL1() | 
|---|
| 135 | ; | 
|---|
| 136 | ; get number of days/hours data for the specified date range | 
|---|
| 137 | D HRSDAYS^KMPRUTL3(START,END,1,.HRSDAYS) | 
|---|
| 138 | ; | 
|---|
| 139 | ; if ^KMPTMP("KMPR","HOURS","START") exists then this is the first time | 
|---|
| 140 | ; the "HOURS" subscript is being accessed.  chances are this is only | 
|---|
| 141 | ; partial data, so it should be ignored. | 
|---|
| 142 | I $G(^KMPTMP("KMPR","HOURS","START"))&($D(HRSDAYS)) D | 
|---|
| 143 | .K HRSDAYS,^KMPTMP("KMPR","HOURS","START") | 
|---|
| 144 | ; | 
|---|
| 145 | I $D(HRSDAYS) S S=0 D | 
|---|
| 146 | .F  S S=$O(HRSDAYS(S)) Q:'S  S N="" D | 
|---|
| 147 | ..F  S N=$O(HRSDAYS(S,N)) Q:N=""  D | 
|---|
| 148 | ...S LN=LN+1 | 
|---|
| 149 | ...; StartDate^Node^EndDate^PTDays^PTHours^NPTDays^NPTHours | 
|---|
| 150 | ...; ... ^WDDays^WDHours^NWDays^NWHours | 
|---|
| 151 | ...S ^TMP("KMPRBD04-3",$J,LN)="HRSDAYS="_START_"^"_N_"^"_END_"^"_HRSDAYS(S,N) | 
|---|
| 152 | ; | 
|---|
| 153 | ; reformat so that data is in ^TMP("KMPR UPLOAD",$J,LN)= format. | 
|---|
| 154 | S IEN=0,S="" | 
|---|
| 155 | F  S S=$O(^TMP($J,S)) Q:S=""  S N="" D | 
|---|
| 156 | .F  S N=$O(^TMP($J,S,N)) Q:N=""  S O="" D | 
|---|
| 157 | ..F  S O=$O(^TMP($J,S,N,O)) Q:O=""  S I="",IEN=IEN+1 D | 
|---|
| 158 | ...F  S I=$O(^TMP($J,S,N,O,I)) Q:I=""  D | 
|---|
| 159 | ....S LN=LN+1 | 
|---|
| 160 | ....S ^TMP("KMPRBD04-3",$J,LN)=IEN_","_I_")="_^TMP($J,S,N,O,I) | 
|---|
| 161 | ; | 
|---|
| 162 | ; quit if no data to transmit. | 
|---|
| 163 | Q:'$D(^TMP("KMPRBD04-3",$J)) | 
|---|
| 164 | ; send packman message. | 
|---|
| 165 | S XMTEXT="^TMP(""KMPRBD04-3"","_$J_"," | 
|---|
| 166 | S XMSUB="RUM DATA~"_$P(SITE,U,2)_" ("_$P(SITE,U,3)_")~"_$$FMTE^XLFDT(START)_"~"_$P($$VERSION^KMPRUTL,U) | 
|---|
| 167 | S XMY("S.KMP2-RUM-SERVER@FO-ALBANY.MED.VA.GOV")="" | 
|---|
| 168 | S XMY("CAPACITY,MANAGEMENT@FO-ALBANY.MED.VA.GOV")="" | 
|---|
| 169 | D ^XMD | 
|---|
| 170 | W:'$D(ZTQUEUED) !,"Message #",$G(XMZ)," sent..." | 
|---|
| 171 | K ^TMP("KMPRBD04-3",$J) | 
|---|
| 172 | ; | 
|---|
| 173 | Q | 
|---|