| 1 | HLUCM009 ;CIOFO-O/LJA - HL7/Capacity Mgt API-II ;2/25/03-08:50
 | 
|---|
| 2 |  ;;1.6;HEALTH LEVEL SEVEN;**103**;Oct 13, 1995
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 | IEN870(IEN772) ; Given 772 find 870...
 | 
|---|
| 5 |  N DATA,I773,I870,IEN
 | 
|---|
| 6 |  S DATA=$G(^HL(772,+IEN772,0))
 | 
|---|
| 7 |  ;
 | 
|---|
| 8 |  ; Logical Link field...
 | 
|---|
| 9 |  S IEN=$P(DATA,U,11) I IEN QUIT IEN ;->
 | 
|---|
| 10 |  ;
 | 
|---|
| 11 |  ; Related Event Protocol...
 | 
|---|
| 12 |  S IEN=$P(DATA,U,10),IEN=$P($G(^ORD(101,+IEN,770)),U,7) I IEN QUIT IEN ;->
 | 
|---|
| 13 |  ;
 | 
|---|
| 14 |  S I773=0
 | 
|---|
| 15 |  F  S I773=$O(^HLMA("B",IEN772,I773)) Q:I773'>0  D  QUIT:I870
 | 
|---|
| 16 |  .  S I870=$P($G(^HLMA(+I773,0)),U,7)
 | 
|---|
| 17 |  I $G(I870) QUIT +I870 ;->
 | 
|---|
| 18 |  ;
 | 
|---|
| 19 |  QUIT ""
 | 
|---|
| 20 |  ;
 | 
|---|
| 21 | MSGTYPE(IEN772) ; MSG or MSA's type...
 | 
|---|
| 22 |  N DEL,IN
 | 
|---|
| 23 |  S IN=$G(^HL(772,+IEN772,"IN",1,0)) QUIT:IN']"" "MSG" ;->
 | 
|---|
| 24 |  S DEL=$E(IN,4) QUIT:DEL']"" "MSG" ;->
 | 
|---|
| 25 |  S IN=$P(IN,DEL,2) QUIT:IN']"" "MSG" ;->
 | 
|---|
| 26 |  I $L(IN)=2,$E(IN)="C"!($E(IN)="A") QUIT IN ;->
 | 
|---|
| 27 |  QUIT "MSG"
 | 
|---|
| 28 |  ;
 | 
|---|
| 29 | KILLS(WHEN) ; Kills of ^TMP data WHEN (START or END or ALL)
 | 
|---|
| 30 |  N DATA
 | 
|---|
| 31 |  ;
 | 
|---|
| 32 |  ; If ALL, set WHEN to include START and END...
 | 
|---|
| 33 |  S:WHEN="ALL" WHEN="STARTandEND"
 | 
|---|
| 34 |  ;
 | 
|---|
| 35 |  ; Always KILLs...
 | 
|---|
| 36 |  F DATA="ACTUAL","HLCHILD",$G(TOTALS)_"ERRTIME","HLOAD772","N","HLNMSP94","HLNMSPXRF","HLPARENT","HLRECNM","U","X" D
 | 
|---|
| 37 |  .  KILL ^TMP(DATA,$J),^TMP($J,DATA)
 | 
|---|
| 38 |  ;
 | 
|---|
| 39 |  ; START-only KILLs...
 | 
|---|
| 40 |  I WHEN["START" D
 | 
|---|
| 41 |  .  F DATA="HLUCMSTORE","RFAC",$G(TOTALS) D
 | 
|---|
| 42 |  .  .  QUIT:DATA']""  ;-> Sometimes TOTALS might not be defined
 | 
|---|
| 43 |  .  .  KILL ^TMP(DATA,$J),^TMP($J,DATA)
 | 
|---|
| 44 |  ;
 | 
|---|
| 45 |  ; END-only KILLs...
 | 
|---|
| 46 |  I WHEN["END" D
 | 
|---|
| 47 |  .  KILL HLAPI
 | 
|---|
| 48 |  .  ; Don't store any debug global data...
 | 
|---|
| 49 |  .  I $G(^TMP($J,"HLUCM"))'="DEBUG GLOBAL" KILL ^TMP($J)
 | 
|---|
| 50 |  .  F DATA="HL4","HLUCM","HLUCMDT" D
 | 
|---|
| 51 |  .  .  KILL ^TMP($J,DATA),^TMP(DATA,$J)
 | 
|---|
| 52 |  ;
 | 
|---|
| 53 |  QUIT
 | 
|---|
| 54 |  ;
 | 
|---|
| 55 | SITESMSH(TXT) ; Return location pieces, slightly modified...
 | 
|---|
| 56 |  N DIV,P4,P6
 | 
|---|
| 57 |  S DIV=$E(TXT,4),P4=$P(TXT,DIV,4),P6=$P(TXT,DIV,6)
 | 
|---|
| 58 |  S P4=$S(P4?1.N1"~"!(P4?1.N):+P4,1:"")
 | 
|---|
| 59 |  S P6=$S(P6?1.N1"~"!(P6?1.N):+P6,1:"")
 | 
|---|
| 60 |  QUIT P4_U_P6
 | 
|---|
| 61 |  ;
 | 
|---|
| 62 | MAILTYPE(MIEN) ; Is MSH in Mailman message local or remote...
 | 
|---|
| 63 |  N IEN,RECNO,TO,TOID,TYPE
 | 
|---|
| 64 |  S TYPE="L"
 | 
|---|
| 65 |  KILL ^TMP($J,"HLMAILTYPE")
 | 
|---|
| 66 |  D QD^XMXUTIL3(+MIEN,,,,,"^TMP($J,""HLMAILTYPE"")")
 | 
|---|
| 67 |  S RECNO=0
 | 
|---|
| 68 |  F  S RECNO=$O(^TMP($J,"HLMAILTYPE","XMLIST",RECNO)) Q:RECNO'>0!(TYPE'="L")  D
 | 
|---|
| 69 |  .  S TO=$G(^TMP($J,"HLMAILTYPE","XMLIST",+RECNO,"TO"))
 | 
|---|
| 70 |  .  S TOID=$G(^TMP($J,"HLMAILTYPE","XMLIST",+RECNO,"TO ID"))
 | 
|---|
| 71 |  .  I TO["@"!(TOID="R") S TYPE="R"
 | 
|---|
| 72 |  KILL ^TMP($J,"HLMAILTYPE")
 | 
|---|
| 73 |  QUIT TYPE
 | 
|---|
| 74 |  ;
 | 
|---|
| 75 | NMSPXRF ; Xref of namespaces that can be inferred. (If start with DG change to DG)
 | 
|---|
| 76 |  N I,T KILL ^TMP($J,"HLNMSPXRF") F I=2:1 S T=$T(NMSPXRF+I) Q:T'[";;"  S T=$P(T,";;",2,99),^TMP($J,"HLNMSPXRF",$P(T,U))=$P(T,U,2)
 | 
|---|
| 77 |  ;;DG^DG
 | 
|---|
| 78 |  ;;GM^GM
 | 
|---|
| 79 |  ;;HEC^HEC
 | 
|---|
| 80 |  ;;IB^IB
 | 
|---|
| 81 |  ;;IVM^IVM
 | 
|---|
| 82 |  ;;LA^LA
 | 
|---|
| 83 |  ;;MPI^MPI
 | 
|---|
| 84 |  ;;OR^OR
 | 
|---|
| 85 |  ;;PR^PR
 | 
|---|
| 86 |  ;;PS^PS
 | 
|---|
| 87 |  ;;RG^RG
 | 
|---|
| 88 |  ;;ROR^ROR
 | 
|---|
| 89 |  ;;SC^SC
 | 
|---|
| 90 |  ;;VEI^VEIB
 | 
|---|
| 91 |  ;;XM^XMB
 | 
|---|
| 92 |  ;;XU^XU
 | 
|---|
| 93 |  ;;XW^XWB
 | 
|---|
| 94 |  Q
 | 
|---|
| 95 |  ;
 | 
|---|
| 96 | ACCUMLAT(CATEGORY,TYPE,SORT,SUB1,SUB2,SUB3,SUB4) ; Generic accumulator
 | 
|---|
| 97 |  ;
 | 
|---|
| 98 |  I $G(SUB4)]"" D
 | 
|---|
| 99 |  .  S TOTCURR=$G(^TMP(TOTALS,$J,CATEGORY,TYPE,SORT,SUB1,SUB2,SUB3,SUB4))
 | 
|---|
| 100 |  .  D INCR^HLUCM001
 | 
|---|
| 101 |  .  S ^TMP(TOTALS,$J,CATEGORY,TYPE,SORT,SUB1,SUB2,SUB3,SUB4)=TOTCURR
 | 
|---|
| 102 |  ;
 | 
|---|
| 103 |  S TOTCURR=$G(^TMP(TOTALS,$J,CATEGORY,TYPE,SORT,SUB1,SUB2,SUB3))
 | 
|---|
| 104 |  D INCR^HLUCM001
 | 
|---|
| 105 |  S ^TMP(TOTALS,$J,CATEGORY,TYPE,SORT,SUB1,SUB2,SUB3)=TOTCURR
 | 
|---|
| 106 |  ;
 | 
|---|
| 107 |  ; Totals level 2 for SUB...
 | 
|---|
| 108 |  S TOTCURR=$G(^TMP(TOTALS,$J,CATEGORY,TYPE,SORT,SUB1,SUB2))
 | 
|---|
| 109 |  D INCR^HLUCM001
 | 
|---|
| 110 |  S ^TMP(TOTALS,$J,CATEGORY,TYPE,SORT,SUB1,SUB2)=TOTCURR
 | 
|---|
| 111 |  ;
 | 
|---|
| 112 |  ; Totals level 1 for SUB...
 | 
|---|
| 113 |  S TOTCURR=$G(^TMP(TOTALS,$J,CATEGORY,TYPE,SORT,SUB1))
 | 
|---|
| 114 |  D INCR^HLUCM001
 | 
|---|
| 115 |  S ^TMP(TOTALS,$J,CATEGORY,TYPE,SORT,SUB1)=TOTCURR
 | 
|---|
| 116 |  ;
 | 
|---|
| 117 |  ; Total level TYPE/SORT...
 | 
|---|
| 118 |  S TOTCURR=$G(^TMP(TOTALS,$J,CATEGORY,TYPE,SORT))
 | 
|---|
| 119 |  D INCR^HLUCM001
 | 
|---|
| 120 |  S ^TMP(TOTALS,$J,CATEGORY,TYPE,SORT)=TOTCURR
 | 
|---|
| 121 |  ;
 | 
|---|
| 122 |  ; Total level TYPE
 | 
|---|
| 123 |  S TOTCURR=$G(^TMP(TOTALS,$J,CATEGORY,TYPE))
 | 
|---|
| 124 |  D INCR^HLUCM001
 | 
|---|
| 125 |  S ^TMP(TOTALS,$J,CATEGORY,TYPE)=TOTCURR
 | 
|---|
| 126 |  ;
 | 
|---|
| 127 |  ; Total level CATEGORY
 | 
|---|
| 128 |  ; [Don't subtotal here, for NMSP holds two different TYPEs, and
 | 
|---|
| 129 |  ; if totalled here, it would double count.]
 | 
|---|
| 130 |  ;
 | 
|---|
| 131 |  QUIT
 | 
|---|
| 132 |  ;
 | 
|---|
| 133 | LOAD772S(IEN772,HLNMSP) ; Load list of related 772s... [HL*1.6*91]
 | 
|---|
| 134 |  ;
 | 
|---|
| 135 |  ; Warning!!!  This call point will never load more than 20 entries...
 | 
|---|
| 136 |  ;             Any more than that, and probably an error condition
 | 
|---|
| 137 |  ;             exists.
 | 
|---|
| 138 |  ;
 | 
|---|
| 139 |  N ACKTO,CHILD,DATA,FAC,HL772,HLI,HLJ,HLK,HLN,HLPCKG,HLZZI,HOLDNMSP,I
 | 
|---|
| 140 |  N I772,I773,MSGID,NUM,PARENT,PCKG,PIEN,PROT,TOTNUM,VAL,X
 | 
|---|
| 141 |  ;
 | 
|---|
| 142 |  KILL HLNMSP
 | 
|---|
| 143 |  QUIT:$G(^HL(772,+$G(IEN772),0))']"" "" ;->
 | 
|---|
| 144 |  ;
 | 
|---|
| 145 |  S DATA=$G(^HL(772,+$G(IEN772),0)) QUIT:DATA']"" "" ;->
 | 
|---|
| 146 |  ;
 | 
|---|
| 147 |  ; Loop until no new entries found or more than 20 entries...
 | 
|---|
| 148 |  S NUM=$$LOADEM^HLUCM050(+IEN772,.HLNMSP)
 | 
|---|
| 149 |  ;
 | 
|---|
| 150 |  QUIT NUM
 | 
|---|
| 151 |  ;
 | 
|---|
| 152 | HOLDTOT(IEN) ; Accumulate...
 | 
|---|
| 153 |  QUIT:$D(HOLDNMSP(IEN))!(TOTNUM>19)  ;->
 | 
|---|
| 154 |  S HOLDNMSP(IEN)="",TOTNUM=TOTNUM+1
 | 
|---|
| 155 |  QUIT
 | 
|---|
| 156 |  ;
 | 
|---|
| 157 | SETUP() ; Perform checks, which can return error conditions, and
 | 
|---|
| 158 |  ; set up variables for $$LOOP.  This extrinsic function returns
 | 
|---|
| 159 |  ; "" if no errors, or the # errors found.  (Note that error
 | 
|---|
| 160 |  ; details placed in ERRINFO(ERROR-REASON)="")
 | 
|---|
| 161 |  N NOERR
 | 
|---|
| 162 |  S NOERR=""
 | 
|---|
| 163 |  D SETDEF ; Set defaults for parameters, if not passed
 | 
|---|
| 164 |  D FINDWAY ; Find way NMSP and PROT parameters passed
 | 
|---|
| 165 |  D SETMORE^HLUCM003 ; Additional var sets based on parameters & "way"...
 | 
|---|
| 166 |  D ERRCHK^HLUCM003 ; Check for errors...
 | 
|---|
| 167 |  KILL ^TMP(TOTALS,$J) ; Clear out storage location...
 | 
|---|
| 168 |  QUIT NOERR
 | 
|---|
| 169 |  ;
 | 
|---|
| 170 | SETDEF ; Set various defaults...
 | 
|---|
| 171 |  I '$D(PNMSP) S PNMSP=1
 | 
|---|
| 172 |  I '$D(IEN101) S IEN101=1
 | 
|---|
| 173 |  I $G(TOTALS)']"" S TOTALS="HLTOTALS"
 | 
|---|
| 174 |  S COND=$$UP^XLFSTR(COND)
 | 
|---|
| 175 |  S COND=$S($G(COND)="BOTH":COND,1:"EITHER") ; Default to EITHER matches, count it...
 | 
|---|
| 176 |  QUIT
 | 
|---|
| 177 |  ;
 | 
|---|
| 178 | FINDWAY ; How were NMSP and PROT passed?  By reference?  (If so, return 1)
 | 
|---|
| 179 |  ; Passed by reference?
 | 
|---|
| 180 |  S NMSPTYPE=$S($G(PNMSP)']""&($O(PNMSP(""))]""):1,1:0) ; 1=YES
 | 
|---|
| 181 |  S PROTYPE=$S($G(IEN101)']""&($O(IEN101(""))]""):1,1:0) ; 1=YES
 | 
|---|
| 182 |  QUIT
 | 
|---|
| 183 |  ;
 | 
|---|
| 184 | MSGID(MSGID) ; Search forward for MSA's to this MSGID...
 | 
|---|
| 185 |  N BIEN,CT,D,HOLD,I772,I773,MSA,X
 | 
|---|
| 186 |  ;
 | 
|---|
| 187 |  S X=$O(^HL(772,"C",MSGID,0)) I X S HOLD(X)=""
 | 
|---|
| 188 |  S X=$O(^HLMA("C",MSGID,0)) I X S X=+$G(^HLMA(+X,0)) I X S HOLD(X)=""
 | 
|---|
| 189 |  ;
 | 
|---|
| 190 |  Q
 | 
|---|
| 191 |  ;
 | 
|---|
| 192 | ERRMOVE(IEN772) ; Move all associated data out of ^TMP's totaling arrays
 | 
|---|
| 193 |  N IEN772C,IEN772P
 | 
|---|
| 194 |  ;
 | 
|---|
| 195 |  ; Find parent message (because have to move ALL associated messages out)
 | 
|---|
| 196 |  QUIT:$G(^TMP($J,"HLUCM"))'="DEBUG GLOBAL"  ;->
 | 
|---|
| 197 |  S IEN772P=$O(^TMP($J,"HLUCMSTORE","X",+IEN772,0))
 | 
|---|
| 198 |  I IEN772P'>0 S IEN772P=IEN772
 | 
|---|
| 199 |  ;
 | 
|---|
| 200 |  ; Loop thru all associated messages in unit...
 | 
|---|
| 201 |  S IEN772C=0
 | 
|---|
| 202 |  F  S IEN772C=$O(^TMP($J,"HLUCMSTORE","U",IEN772P,IEN772C)) Q:'IEN772C  D
 | 
|---|
| 203 |  .  F SUB="C","E","O","X" D
 | 
|---|
| 204 |  .  .  MERGE ^TMP($J,"HLUCMSTORE","ERR",SUB,IEN772C)=^TMP($J,"HLUCMSTORE",SUB,IEN772C)
 | 
|---|
| 205 |  .  .  KILL ^TMP($J,"HLUCMSTORE",SUB,IEN772C)
 | 
|---|
| 206 |  ;
 | 
|---|
| 207 |  ; Maybe there is no X xref...
 | 
|---|
| 208 |  MERGE ^TMP($J,"HLUCMSTORE","ERR","E",+IEN772P)=^TMP($J,"HLUCMSTORE","E",+IEN772P)
 | 
|---|
| 209 |  KILL ^TMP($J,"HLUCMSTORE","E",+IEN772P)
 | 
|---|
| 210 |  ;
 | 
|---|
| 211 |  ; Finally, move the unit's data...
 | 
|---|
| 212 |  MERGE ^TMP($J,"HLUCMSTORE","ERR","U",IEN772P)=^TMP($J,"HLUCMSTORE","U",IEN772P)
 | 
|---|
| 213 |  KILL ^TMP($J,"HLUCMSTORE","U",IEN772P)
 | 
|---|
| 214 |  ;
 | 
|---|
| 215 |  Q
 | 
|---|
| 216 |  ;
 | 
|---|
| 217 | EOR ;HLUCM009 - HL7/Capacity Mgt API-II ;2/25/03-08:50
 | 
|---|