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
|
---|