Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: HLUCM

HLUCM.m

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