HLUCM ;CIOFO-O/LJA - HL7/Capacity Mgt API ;09/13/04 14:01
;;1.6;HEALTH LEVEL SEVEN;**79,88,103,114**;Oct 13, 1995
;
QUIT
;
CM(START,END,PNMSP,IEN101,TOTALS,COND,ERRINFO) ; Capacity management totals
N NMSPTYPE,PROTYPE,RESULTS,SITENM
I '$D(HLAPI) N HLAPI S HLAPI="CM"
QUIT:'$$PREPARE^HLUCM001 "" ;->
D KILLS^HLUCM009("START")
S RESULTS=$P($$LOOP,U,1,3)
D XTMP
D KILLS^HLUCM009("END")
KILL HLAPI
Q RESULTS
;
CMF(START,END,PNMSP,IEN101,TOTALS,COND,ERRINFO) ; Collect Remote Facility data - SYNC
N HLAPI
S HLAPI="CMF"
Q $$CM(START,END,.PNMSP,.IEN101,TOTALS,COND,.ERRINFO)
;
CM2(START,END,PNMSP,IEN101,TOTALS,COND,ERRINFO) ; Capacity management totals
N NMSPTYPE,PROTYPE,RESULTS,SITENM
I '$D(HLAPI) N HLAPI S HLAPI="CM2"
QUIT:'$$PREPARE^HLUCM001 "" ;->
D KILLS^HLUCM009("START")
S RESULTS=$P($$LOOP,U,1,3) ; Counts are aggregate
D XTMP
D KILLS^HLUCM009("END")
KILL HLAPI
QUIT RESULTS
;
CM2F(START,END,PNMSP,IEN101,TOTALS,COND,ERRINFO) ; Collect Remote Facility data - SYNC
N HLAPI
S HLAPI="CM2F"
Q $$CM2(START,END,.PNMSP,.IEN101,TOTALS,COND,.ERRINFO)
;
LOOP() ; Loop thru 772's .01... (Called from LOOP^HLUCM)
N ANS,API,CHAR,COUNTED,CTDBG,CTPCKG,D0,DATA,DEF,ERR,FAC,FAIL,HL,HLASTNM
N HLUCMADD,IEN772,IEN773,LEN,LOOP772,LOOPDT,NMSP,NUM,OK
N ORIGETM,ORIGSTM,PCKG,PROT,PROTOCOL,QUES,SEC
N SP,SUB,SVNO,TIMEP,TM772,TOT,V1,V2,VAL,VALUE,X,Y
;
D LOAD
D ADJTIME^HLUCM003
D CMDBD
D TOTALCM ; Already stored in X (no counted) or C (counted) subscripts...
S RESULTS=$G(^TMP(TOTALS,$J))
;
QUIT RESULTS
;
CMDBD ; Create $$CM debug data...
; HLAPI,START,END -- req
N DATA,IENPAR,IEN772,OKPP,S1,S2,S3,SUB,TOT,VALNMSP,VALPROT
;
S API=$S($G(API)["CM2":1,1:0) ; Async=1, Sync=0
;
S IENPAR=0
F S IENPAR=$O(^TMP($J,"HLPARENT",IENPAR)) Q:'IENPAR D
. S DATA=$G(^TMP($J,"HLPARENT",+IENPAR)) QUIT:DATA']"" ;->
. S VALPROT=$P(DATA,U,7),VALNMSP=$P(DATA,U,9)
. F S1="C","X" F S2="C","X" F S3="C","X" S TOT(S1_S2_S3)=0
. S ^TMP($J,"HLUCMSTORE","U",+IENPAR)=DATA
. S IEN772=0
. F S IEN772=$O(^TMP($J,"HLPARENT",+IENPAR,IEN772)) Q:'IEN772 D
. . S ^TMP($J,"HLUCMSTORE","X",+IEN772)=+IENPAR
. . S (OKPP,OKPP(1))=$$PP(+IEN772)
. . S OKPP=$S(OKPP=U:"X",1:"C")
. . S OK=$$COLLSYNC(+IEN772,START,END) ; Outside time range?
. . S SUB=$S(OK:"C",1:"X")
. . S DATA=$P($G(^TMP($J,"HLCHILD",+IEN772)),"~",2,999) Q:DATA']"" ;->
. . ; If # seconds exceeds 1799...
. . S SUB=SUB_$S($P(DATA,U,3)>1799:"X",1:"C")_OKPP
. . S:$P(DATA,U,7)']"" $P(DATA,U,7)=VALPROT
. . S:$P(DATA,U,9)']"" $P(DATA,U,9)=VALNMSP
. . S ^TMP($J,"HLUCMSTORE","U",+IENPAR,+IEN772,SUB)=DATA
. . F I=1:1:3 S $P(TOT(SUB),U,I)=$P(TOT(SUB),U,I)+$P(DATA,U,I)
. . S DATA=$G(^TMP($J,"HLPARENT",+IENPAR,+IEN772))
. . S X=OKPP(1),$P(DATA,U,5)=$P(X,U),$P(DATA,U,6)=$P(X,U,2)
. . S ^TMP($J,"HLUCMSTORE","U",+IENPAR,+IEN772,SUB,772)=DATA
.
. ; Position #1 C=Count (Message BEGIN is not before START)
. ; X=Outside (Msg BEGIN is before START)
. ; #2 C=Count (#Seconds<1800)
. ; X=Greater (#Seconds>1799)
. ; #3 C=Count (Protocol/Namespace match)
. ; X=Mismatch (Protocol/Namespace mismatch)
. F S1="C","X" F S2="C","X" F S3="C","X" S SUB=S1_S2_S3 D
. . QUIT:$TR(TOT(SUB),"0^","")']"" ;->
. . S ^TMP($J,"HLUCMSTORE","U",+IENPAR,SUB)=TOT(SUB)
. .
. . S TOT=$G(^TMP($J,"HLUCMSTORE","T",SUB))
. . D UPTOT
. . S ^TMP($J,"HLUCMSTORE","T",SUB)=TOT
. .
. . S ^TMP($J,"HLUCMSTORE","T",SUB,IENPAR)=TOT(SUB)
. .
. . S TOT=$G(^TMP($J,"HLUCMSTORE","T"))
. . D UPTOT
. . S ^TMP($J,"HLUCMSTORE","T")=TOT
;
KILL ^TMP($J,"HLCHILD"),^TMP($J,"HLPARENT")
;
Q
;
UPTOT ; Up the totals...
; TOT,TOT(SUB) -- req
S $P(TOT,U)=$P(TOT,U)+$P(TOT(SUB),U)
S $P(TOT,U,2)=$P(TOT,U,2)+$P(TOT(SUB),U,2)
S $P(TOT,U,3)=$P(TOT,U,3)+$P(TOT(SUB),U,3)
Q
;
PP(IEN772) ; Get store value for NMSP and PROT...
N PCKG,PP,PROT,X
S PP=$$PROTNMSP^HLUCM002(+IEN772)
I $P(PP,U)']""!($P(PP,U,2)']"") QUIT U ;->
S X=$P(PP,U),PROT=$S(X]"":X,1:"ZZZ")
S X=$P(PP,U,2),PCKG=$S(X]"":X,1:"ZZZ")
Q PROT_U_PCKG
;
LOAD ; Load data (Called by $$CM, $$CM2, and all other APIs)
; START,END -- req
N IEN772,LOOPDT,X
S LOOPDT=START-.000001
F S LOOPDT=$O(^HL(772,"B",LOOPDT)) Q:LOOPDT'>0!(LOOPDT>END) D
. S IEN772=0
. F S IEN772=$O(^HL(772,"B",LOOPDT,IEN772)) Q:IEN772'>0 D
. . QUIT:'$$OK772(+IEN772) ;->
. . S X=$$LOAD772S^HLUCM009(IEN772)
Q
;
TOTALCM ; Loop, total for $$CM...
; HLAPI -- req
N IEN772,IENPAR
S IENPAR=0
F S IENPAR=$O(^TMP($J,"HLUCMSTORE","U",IENPAR)) Q:'IENPAR D
. ; Don't count anything unless the entire unit is OK...
. QUIT:$O(^TMP($J,"HLUCMSTORE","U",+IENPAR,"CCC"))]"" ;->
. S IEN772=0,HLUCMADD=""
. F S IEN772=$O(^TMP($J,"HLUCMSTORE","U",IENPAR,IEN772)) Q:'IEN772 D
. . ;QUIT:'$D(^TMP($J,"HLUCMSTORE","U",+IENPAR,+IEN772,"CCC")) ;->
. . D COLLECT(+IENPAR,+IEN772)
. . I HLAPI["CM2" S HLUCMADD="DON'T ADD. COLLECT3~HLUCM003"
Q
;
COLLSYNC(IEN772,START,END) ; Does entry fall in START/END range?
N DATA,X
S DATA=$G(^TMP($J,"HLCHILD",+IEN772)) QUIT:DATA']"" "" ;->
S X=$P($P(DATA,"~",2,999),U,4) Q:X'?7N.E!(X<START)!(X>END) "" ;->
Q 1
;
OK772(IEN772) ; Valid entry?
N D
S D=$G(^HL(772,+IEN772,0))
QUIT:$P(D,U)'?7N.E "" ;->
I $P(D,U,2)']"",$P(D,U,3)']"",$P(D,U,4)']"",$P(D,U,5)']"" QUIT ""
Q 1
;
COLLECT(PAR,IEN772) ; Collect 772 data and associated 773 data...
N CT,CTPCKG,DATA,DBGBL,IEN773,PP,TOT772,TOT772T,TYPEHR,TYPEIO,TYPELR
;
; ^("U",PARENT-IEN,CHILD-IEN,"CCC")
S DATA=$G(^TMP($J,"HLUCMSTORE","U",+PAR,+IEN772,"CCC"))
S DATA("CHAR")=$P(DATA,U),DATA("DIFF")=$P(DATA,U,3)
S DATA("START")=$P(DATA,U,4),DATA("END")=$P(DATA,U,5)
S DATA("FAC")=$P(DATA,U,11)
;
; ^("U",PARENT-IEN,CHILD-IEN,"CCC",772)
S DATA=$G(^TMP($J,"HLUCMSTORE","U",+PAR,+IEN772,"CCC",772))
S DATA("HR")=$P(DATA,U),DATA("IO")=$P(DATA,U,2),DATA("LR")=$P(DATA,U,3)
S (DATA("PROT"),PROT)=$P(DATA,U,5)
S (DATA("PCKG"),PCKG)=$P(DATA,U,6)
;
S DBGBL=1
;
; Store DATA() info in ^TMP(TOTALS,$J,...)
D ADDTMP^HLUCM001
;
QUIT
;
TOT772C(IEN772) ; Total number of characters in message...
N LEN,LNO,TXT
;
; Use field if present. (Not present about 25% of time)
S LEN=$P($G(^HL(772,IEN772,"S")),U)
I LEN D QUIT ;->
. S DATA("CHAR",772)=$G(DATA("CHAR",772))+LEN
. S DATA("CHAR")=$G(DATA("CHAR"))+LEN
;
; Total manually...
S LNO=0
F S LNO=$O(^HL(772,IEN772,"IN",LNO)) Q:LNO'>0 D
. S TXT=$G(^HL(772,IEN772,"IN",+LNO,0)) QUIT:TXT']"" ;->
. S DATA("CHAR",772)=$G(DATA("CHAR",772))+$L(TXT)
. S DATA("CHAR")=$G(DATA("CHAR"))+$L(TXT)
;
QUIT
;
TOT772T(IEN772) ; Processing time...
; No totals here. Just set times in DATA() array for later use...
N TIME
;
; Time of entry...
S TIME=+$G(^HL(772,+IEN772,0))
I TIME?7N.E S DATA("TIME",TIME,772,.01)=""
;
; Time processed...
S TIME=$P($G(^HL(772,+IEN772,"P")),U,2)
I TIME?7N.E S DATA("TIME",TIME,772,21)=""
;
QUIT
;
TOT773C(IEN773) ; Total number of characters...
; DATA() -- passed in (See COLLECT)
N CHAR
S CHAR=$$MSGSIZE(+IEN773) QUIT:CHAR'>0 ;->
S DATA("CHAR",773,IEN773)=CHAR
S DATA("CHAR")=$G(DATA("CHAR"))+CHAR
S TOT773(IEN773)=CHAR
QUIT
;
MSGSIZE(IEN773) ; Number characters in 773 entry...
N NCH,NO
S NCH=0,NO=0
F S NO=$O(^HLMA(+IEN773,"MSH",NO)) Q:NO'>0 D
. S NCH=NCH+$L($G(^HLMA(+IEN773,"MSH",+NO,0)))
QUIT NCH
;
TOT773T(IEN773) ; Set TIMEs...
; DATA() -- passed in (See COLLECT)
N TIME
;
; Creation time already taken from 772...
;
; Processed time...
S TIME=+$G(^HLMA(+IEN773,"S")) QUIT:TIME'>0 ;->
S DATA("TIME",TIME,773,100)=""
;
QUIT
;
ERR(REA) ; Record error...
S NOERR=NOERR+1
S REA=$S($G(REA)]"":REA,1:"?")
S ERRINFO(REA)=""
QUIT
;
SEC(FMDT) ;
S FMDT=$$FMTH^XLFDT(FMDT)
QUIT $$SEC^XLFDT(FMDT)
;
TMDIFF ; DATA("TIME",...) -- req --> DATA("DIFF")
S (DATA("DIFF"),DATA("END"),DATA("START"))="" ; Default... HL*1.6*114
S DATA("START")=$O(DATA("TIME",0)) QUIT:DATA("START")'>0 ;->
S DATA("END")=$O(DATA("TIME",":"),-1)
S DATA("DIFF")=$$SEC(DATA("END"))-$$SEC(DATA("START"))
QUIT
;
XTMP ; Store in ^XTMP...
; API Parameters -- req
N XTMP
;
QUIT:PNMSP'=1!(IEN101'=1) ;-> Must be ALL,ALL
;
S XTMP="HLUCM "_$$DT^XLFDT
S:'$D(^XTMP(XTMP,0)) ^XTMP(XTMP,0)=$$FMADD^XLFDT($$DT^XLFDT,7)_U_$$NOW^XLFDT_U_"HLUCM Data"
;
S SVNO=$G(^XTMP(XTMP,"P",+START,+END,COND))
I SVNO'>0 S SVNO=$O(^XTMP(XTMP,"N",":"),-1)+1
S ^XTMP(XTMP,"P",+START,+END,COND)=SVNO_U_$$NOW^XLFDT
S ^XTMP(XTMP,"N",+SVNO)=START_U_END_U_COND_U_HLAPI
KILL ^XTMP(XTMP,"D",+SVNO)
;
MERGE ^XTMP(XTMP,"D",+SVNO)=^TMP(TOTALS,$J)
;
Q
;
EOR ; HLUCM - HL7/Capacity Mgt API ;2/27/01 10:15