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