[613] | 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
|
---|