[613] | 1 | HLUCM001 ;CIOFO-O/LJA - HL7/Capacity Mgt API (continued) ;2/27/01 10:15
|
---|
| 2 | ;;1.6;HEALTH LEVEL SEVEN;**79,88,103**;Oct 13, 1995
|
---|
| 3 | ;
|
---|
| 4 | ADDTMP ; Accumulate totals into ^TMP(TOTALS,$J,...)
|
---|
| 5 | ; FAC,ORIGETM,ORIGSTM,TYPEHR,TYPEIO,TYPELR -- req
|
---|
| 6 | ;
|
---|
| 7 | N CHAR,ERRFLAG,FAC,SEC,START,TOTCURR,TYPEHR,TYPEIO,TYPELR
|
---|
| 8 | ;
|
---|
| 9 | S CHAR=$G(DATA("CHAR")),SEC=$G(DATA("DIFF")),FAC=$G(DATA("FAC"))
|
---|
| 10 | S TYPEHR=$G(DATA("HR")),TYPEIO=$G(DATA("IO")),TYPELR=$G(DATA("LR"))
|
---|
| 11 | ;
|
---|
| 12 | S START=$$HR($G(DATA("START")))
|
---|
| 13 | ;I START<ORIGSTM S START=ORIGSTM
|
---|
| 14 | ;I START>ORIGETM S START=ORIGETM
|
---|
| 15 | ;
|
---|
| 16 | ; Back door way to total by day only. (Dropping HR).
|
---|
| 17 | I $D(^TMP($J,"HLUCMDT")) S START=START\1
|
---|
| 18 | ;
|
---|
| 19 | ; Is delta time greater than 30 minutes?
|
---|
| 20 | S ERRFLAG=0
|
---|
| 21 | I SEC>1799 D
|
---|
| 22 | . S X=TOTALS N TOTALS S TOTALS=X_"ERRTIME",ERRFLAG=1
|
---|
| 23 | . D ERRMOVE^HLUCM009(+IEN772) ; Move into ^TMP($J,"HLUCMSTORE","ERR")
|
---|
| 24 | ; Store under TOTALS_ERRTIME
|
---|
| 25 | ;
|
---|
| 26 | ; Maybe, this IEN772 has already been ERRd by ERRMOVE^HLUCM009?
|
---|
| 27 | I $D(^TMP($J,"HLUCMSTORE","ERR","X",+IEN772)) D QUIT ;->
|
---|
| 28 | . D ERRMOVE^HLUCM009(+IEN772) ; Just to be sure
|
---|
| 29 | ;
|
---|
| 30 | ; Should this entry even be counted?
|
---|
| 31 | I (HLAPI="CMF"!(HLAPI="CM2F"))&(TYPELR'="R") QUIT ;->
|
---|
| 32 | ;
|
---|
| 33 | ; Accumulating and totaling here...
|
---|
| 34 | I TYPELR="R" D ACCUMFAC^HLUCM090
|
---|
| 35 | D ACCUMHR
|
---|
| 36 | D ACCUMSP
|
---|
| 37 | D ACCUMPR
|
---|
| 38 | D TOTALING
|
---|
| 39 | ;
|
---|
| 40 | Q
|
---|
| 41 | ;
|
---|
| 42 | TOTALING ; Grand totals
|
---|
| 43 | S TOTCURR=$G(^TMP(TOTALS,$J))
|
---|
| 44 | S $P(TOTCURR,U)=$P(TOTCURR,U)+DATA("CHAR")
|
---|
| 45 | I $G(HLUCMADD)'="DON'T ADD. COLLECT3~HLUCM003" D
|
---|
| 46 | . S $P(TOTCURR,U,2)=$P(TOTCURR,U,2)+1
|
---|
| 47 | S $P(TOTCURR,U,3)=$P(TOTCURR,U,3)+DATA("DIFF")
|
---|
| 48 | S $P(TOTCURR,U,4)=$P(TOTCURR,U,4)+1
|
---|
| 49 | S ^TMP(TOTALS,$J)=TOTCURR
|
---|
| 50 | Q
|
---|
| 51 | ;
|
---|
| 52 | ACCUMHR ; Hour totaling
|
---|
| 53 | ; DATA(),FAC,START,TYPEHR -- req
|
---|
| 54 | ;
|
---|
| 55 | I HLAPI="CM"!(HLAPI="CM2") D ACCUMLAT^HLUCM009("HR","TM",TYPEHR,START,DATA("PCKG"),DATA("PROT"))
|
---|
| 56 | I HLAPI="CMF"!(HLAPI="CM2F") D ACCUMLAT^HLUCM009("HR","TM",TYPEHR,FAC,START,DATA("PCKG"),DATA("PROT"))
|
---|
| 57 | ;
|
---|
| 58 | ; Total level CATEGORY
|
---|
| 59 | S TOTCURR=$G(^TMP(TOTALS,$J,"HR"))
|
---|
| 60 | D INCR
|
---|
| 61 | S ^TMP(TOTALS,$J,"HR")=TOTCURR
|
---|
| 62 | ;
|
---|
| 63 | QUIT
|
---|
| 64 | ;
|
---|
| 65 | ACCUMSP ; Namespace totaling
|
---|
| 66 | ; DATA(),FAC,TYPEIO,TYPELR -- req
|
---|
| 67 | ;
|
---|
| 68 | I HLAPI="CM"!(HLAPI="CM2") D
|
---|
| 69 | . D ACCUMLAT^HLUCM009("NMSP","IO",TYPEIO,DATA("PCKG"),START,DATA("PROT"))
|
---|
| 70 | . D ACCUMLAT^HLUCM009("NMSP","LR",TYPELR,DATA("PCKG"),START,DATA("PROT"))
|
---|
| 71 | I HLAPI="CMF"!(HLAPI="CM2F") D
|
---|
| 72 | . D ACCUMLAT^HLUCM009("NMSP","IO",TYPEIO,FAC,DATA("PCKG"),START,DATA("PROT"))
|
---|
| 73 | . D ACCUMLAT^HLUCM009("NMSP","LR",TYPELR,FAC,DATA("PCKG"),START,DATA("PROT"))
|
---|
| 74 | ;
|
---|
| 75 | ; Total level CATEGORY
|
---|
| 76 | S TOTCURR=$G(^TMP(TOTALS,$J,"NMSP"))
|
---|
| 77 | D INCR
|
---|
| 78 | S ^TMP(TOTALS,$J,"NMSP")=TOTCURR
|
---|
| 79 | ;
|
---|
| 80 | QUIT
|
---|
| 81 | ;
|
---|
| 82 | ACCUMPR ; Protocol totaling...
|
---|
| 83 | ; DATA(),FAC,START -- req
|
---|
| 84 | ;
|
---|
| 85 | I HLAPI="CM"!(HLAPI="CM2") D ACCUMLAT^HLUCM009("PROT","PR","P",DATA("PROT"),DATA("PCKG"),START)
|
---|
| 86 | I HLAPI="CMF"!(HLAPI="CM2F") D ACCUMLAT^HLUCM009("PROT","PR","P",FAC,DATA("PROT"),DATA("PCKG"),START)
|
---|
| 87 | ;
|
---|
| 88 | ; Total level CATEGORY
|
---|
| 89 | S TOTCURR=$G(^TMP(TOTALS,$J,"PROT"))
|
---|
| 90 | D INCR
|
---|
| 91 | S ^TMP(TOTALS,$J,"PROT")=TOTCURR
|
---|
| 92 | ;
|
---|
| 93 | QUIT
|
---|
| 94 | ;
|
---|
| 95 | INCR ; Increment totals in TOTCURR...
|
---|
| 96 | ; CHAR,SEC -- req
|
---|
| 97 | S $P(TOTCURR,U)=$P(TOTCURR,U)+CHAR ; Number characters
|
---|
| 98 | I $G(HLUCMADD)'="DON'T ADD. COLLECT3~HLUCM003" D
|
---|
| 99 | . S $P(TOTCURR,U,2)=$P(TOTCURR,U,2)+1
|
---|
| 100 | S $P(TOTCURR,U,3)=$P(TOTCURR,U,3)+SEC ; Processing seconds
|
---|
| 101 | S $P(TOTCURR,U,4)=$P(TOTCURR,U,4)+1
|
---|
| 102 | QUIT
|
---|
| 103 | ;
|
---|
| 104 | HR(FMDT) ; Return FM DATE and HOUR only...
|
---|
| 105 | N HR
|
---|
| 106 | S FMDT=$G(FMDT)
|
---|
| 107 | I FMDT'?7N&(FMDT'?7N1"."1.N) QUIT "" ;->
|
---|
| 108 | S:FMDT'["." FMDT=FMDT_"."
|
---|
| 109 | S FMDT=$E(FMDT_"00",1,10) ; .00 thru .23 now...
|
---|
| 110 | S HR=+$P(FMDT,".",2)+1
|
---|
| 111 | S:HR<10 HR=0_HR S:HR>24 HR=24
|
---|
| 112 | QUIT (FMDT\1)_"."_HR
|
---|
| 113 | ;
|
---|
| 114 | OKPAR101(PAR) ; PAR=IEN101...
|
---|
| 115 | N RET,VAL
|
---|
| 116 | ;
|
---|
| 117 | I PAR=1!(PAR=2) QUIT PAR ;->
|
---|
| 118 | I PAR="0^9999999" QUIT PAR ;->
|
---|
| 119 | ;
|
---|
| 120 | ; Passed as 0^IEN or 0^PROTOCOL NAME...
|
---|
| 121 | S VAL=$P(PAR,U,2)
|
---|
| 122 | ;
|
---|
| 123 | ; Was IEN passed?
|
---|
| 124 | I VAL=+VAL D QUIT RET ;->
|
---|
| 125 | . S RET=""
|
---|
| 126 | . I $D(^ORD(101,+VAL,0)) S RET=PAR
|
---|
| 127 | . I '$D(^ORD(101,+VAL,0)) QUIT ;-> Leaving RET=""
|
---|
| 128 | ;
|
---|
| 129 | ; Name was passed... (Can be up to 63 characters long...)
|
---|
| 130 | ; Find IEN for name...
|
---|
| 131 | S VAL=$$FIND101(PAR)
|
---|
| 132 | ;
|
---|
| 133 | ; If VAL=IEN, reset IEN101 to 0^IEN format...
|
---|
| 134 | I VAL>0 QUIT "0^"_+VAL ;->
|
---|
| 135 | ;
|
---|
| 136 | QUIT ""
|
---|
| 137 | ;
|
---|
| 138 | TYPELR(IEN772,FACNM) ; Is this Local or Remote or Unknown?
|
---|
| 139 | ; SITENM -- req
|
---|
| 140 | N D772,I773,IEN,IEN870,IO,MIEN,NM,TXT,TYPE,X
|
---|
| 141 | ;
|
---|
| 142 | ; If SITENM=FACNM, then it isn't remote...
|
---|
| 143 | I $G(SITENM)]"",$G(FACNM)]"",SITENM=FACNM QUIT "L" ;->
|
---|
| 144 | ;
|
---|
| 145 | S D772=$G(^HL(772,+IEN772,0))
|
---|
| 146 | ;
|
---|
| 147 | ; Mailman check...
|
---|
| 148 | S MIEN=$P(D772,U,5) ; get Mailman IEN...
|
---|
| 149 | I MIEN S X=$$MAILTYPE^HLUCM009(MIEN) QUIT:X="R" $$SLR(IEN772,"R") ;-> Mailman, and remote...
|
---|
| 150 | ;
|
---|
| 151 | ; Additional mail check...
|
---|
| 152 | I $$MAIL870^HLUCM090(IEN772)="R" QUIT $$SLR(IEN772,"R") ;->
|
---|
| 153 | ;
|
---|
| 154 | ; Institution check...
|
---|
| 155 | I $$INST870^HLUCM090(+IEN772,+$P($$SITE^VASITE,U,3))="R" QUIT $$SLR(IEN772,"R") ;->
|
---|
| 156 | ;
|
---|
| 157 | ; MSH segment in 773 check...
|
---|
| 158 | S TYPE="L",I773=0
|
---|
| 159 | F S I773=$O(^HLMA("B",IEN772,I773)) Q:'I773!(TYPE'="L") D
|
---|
| 160 | . N DIV,P4,P6
|
---|
| 161 | . S TXT="",MIEN=0
|
---|
| 162 | . F S MIEN=$O(^HLMA(+I773,"MSH",MIEN)) Q:MIEN'>0 D
|
---|
| 163 | . . S TXT=TXT_$G(^HLMA(+I773,"MSH",+MIEN,0))
|
---|
| 164 | . QUIT:TXT']"" ;->
|
---|
| 165 | . S X=$$SITESMSH^HLUCM009(TXT),P4=$P(X,U),P6=$P(X,U,2)
|
---|
| 166 | . S:P4'=P6 TYPE="R"
|
---|
| 167 | ;
|
---|
| 168 | ; Was anything found?
|
---|
| 169 | QUIT:TYPE'="L" $$SLR(IEN772,TYPE) ;->
|
---|
| 170 | ;
|
---|
| 171 | ; Logical links check...
|
---|
| 172 | S IEN870=$$IEN870^HLUCM009(+IEN772) I IEN870 D
|
---|
| 173 | . N DATA,MGIEN
|
---|
| 174 | . S DATA=$G(^HLCS(870,+IEN870,0))
|
---|
| 175 | . QUIT:$P(DATA,U,3)'=1 ;-> Not MAIL...
|
---|
| 176 | . S MGIEN=$P($G(^HLCS(870,+IEN870,100)),U) QUIT:MGIEN'>0 ;->
|
---|
| 177 | . ; If a MAIL type link and there is an associated mail group,
|
---|
| 178 | ; ; it is almost always REMOTE. Enough so, that "R" will be assumed.
|
---|
| 179 | . ; QUIT:$O(^XMB(3.8,+MGIEN,6,0))'>0 ;-> No remote groups
|
---|
| 180 | . S TYPE="R"
|
---|
| 181 | . ; Rare to hit this point.
|
---|
| 182 | ;
|
---|
| 183 | QUIT $$SLR(IEN772,TYPE)
|
---|
| 184 | ;
|
---|
| 185 | SLR(IEN772,LR) ; Store the L/R type for use for FACILITY sorting
|
---|
| 186 | N FAC,HLDATA,PARENT,TYPE,X
|
---|
| 187 | Q LR
|
---|
| 188 | ;
|
---|
| 189 | PREPARE() ; Called by $$CM & $$CM2 and other APIs...
|
---|
| 190 | ;
|
---|
| 191 | S ORIGSTM=$G(START),ORIGETM=$G(END)
|
---|
| 192 | S SITENM=$P($$SITE^VASITE,U,2)
|
---|
| 193 | ;
|
---|
| 194 | ; Summarize by DAY instead of hour?
|
---|
| 195 | I ORIGSTM?7N,ORIGETM']"" D
|
---|
| 196 | . S ^TMP($J,"HLUCMDT")=""
|
---|
| 197 | . S ORIGETM=ORIGSTM_".24"
|
---|
| 198 | ;
|
---|
| 199 | D ZEROUP
|
---|
| 200 | ;
|
---|
| 201 | ; Miscellaneous KILLs...
|
---|
| 202 | D KILLS^HLUCM009("START")
|
---|
| 203 | ;
|
---|
| 204 | ; Build namespace xref
|
---|
| 205 | D NMSPXRF^HLUCM009
|
---|
| 206 | ;
|
---|
| 207 | ; This is where results are returned to caller...
|
---|
| 208 | KILL ERRINFO
|
---|
| 209 | ;
|
---|
| 210 | ; Perform all setup chores. If errors found, they will be placed
|
---|
| 211 | ; in ERRINFO(ERROR-REASON)="" array
|
---|
| 212 | QUIT:$$SETUP^HLUCM009 "" ;-> Some errors occurred...
|
---|
| 213 | ;
|
---|
| 214 | Q 1
|
---|
| 215 | ;
|
---|
| 216 | ZEROUP ; If didn't add 0^...
|
---|
| 217 | I $G(IEN101)]"",IEN101'?1N,IEN101'?1"0^".E S IEN101="0^"_IEN101
|
---|
| 218 | I $G(PNMSP)]"",PNMSP'?1N,PNMSP'?1"0^".E S PNMSP="0^"_PNMSP
|
---|
| 219 | Q
|
---|
| 220 | ;
|
---|
| 221 | FIND101(VAL) ; No checking for upp/lowercase. Must be passed right!
|
---|
| 222 | ; VAL = Protocol name...
|
---|
| 223 | N FIEN,IEN,LNM,PNM
|
---|
| 224 | ;
|
---|
| 225 | S VAL=$P(VAL,"0^",2)
|
---|
| 226 | ;
|
---|
| 227 | ; Passed as IEN?
|
---|
| 228 | I VAL=+VAL,$D(^ORD(101,+VAL,0)) QUIT +VAL ;->
|
---|
| 229 | ;
|
---|
| 230 | ; Passed as NAME?
|
---|
| 231 | S FIEN=0
|
---|
| 232 | S LNM=$E(VAL,1,$S($L(VAL)>30:29,1:$L(VAL)-1))
|
---|
| 233 | F S LNM=$O(^ORD(101,"B",LNM)) Q:LNM]VAL!(LNM']"")!(FIEN) D
|
---|
| 234 | . S IEN=0
|
---|
| 235 | . F S IEN=$O(^ORD(101,"B",LNM,IEN)) Q:IEN'>0!(FIEN) D
|
---|
| 236 | . . QUIT:$P($G(^ORD(101,+IEN,0)),U)'=VAL ;->
|
---|
| 237 | . . S FIEN=+IEN
|
---|
| 238 | QUIT $S(FIEN:FIEN,1:"")
|
---|
| 239 | ;
|
---|
| 240 | REFPROT(PROT) ; If passed by reference, is PROT in array? 0=Don't count, 2=Count
|
---|
| 241 | ; PROTYPE -- req
|
---|
| 242 | N X
|
---|
| 243 | I PROTYPE'=1 QUIT 1 ;-> Not passed by reference...
|
---|
| 244 | S X=$P(PROT,"~") I X]"" I $D(IEN101(X)) QUIT 1 ;-> found by name in array
|
---|
| 245 | S X=$P(PROT,"~",2) I X]"" I $D(IEN101(+X)) QUIT 1 ;-> found by IEN in array
|
---|
| 246 | QUIT ""
|
---|
| 247 | ;
|
---|
| 248 | REFPCKG(PCKG) ; If passed by reference, is PCKG in array? 0=Don't count,1=OK to count
|
---|
| 249 | ; NMSPTYPE -- req
|
---|
| 250 | I NMSPTYPE'=1 QUIT 1 ;-> Not passed by reference...
|
---|
| 251 | I PCKG]"" I $D(PNMSP(PCKG)) QUIT 1 ;-> found in array
|
---|
| 252 | QUIT ""
|
---|
| 253 | ;
|
---|
| 254 | EOR ; HLUCM001 - HL7/Capacity Mgt API (continued) ;2/27/01 10:15
|
---|