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

HMPTOOLS.m

Go to the documentation of this file.
  1. HMPTOOLS ;ASMR/JD - More HMP utilities ; 9/25/15 10:59am
  1. ;;2.0;ENTERPRISE HEALTH MANAGEMENT PLATFORM;**2**;Sep 01, 2011;Build 28
  1. ;Per VA Directive 6402, this routine should not be modified.
  1. ;
  1. Q
  1. ;
  1. CHKXTMP(RSLT) ; RPC(HMP CHKXTMP) to return the state of ^XTMP data
  1. ; RSLT - Return array:
  1. ; "There are a total of xxx patients in queue. yyy Complete zzz Staging"
  1. ; Where xxx,yyy, and zzz are zero or greater.
  1. ; NOTE: If xxx is zero, then the sentence after "queue." will NOT be displayed
  1. ;
  1. ; Goes through ^XTMP and figures out the total number of patients, how many
  1. ; have completed data staging, and how many are still staging.
  1. ; There is code to allow a bit more information than requested to be stored
  1. ; in a global (^TMP("FINDSTATUS",$J)) for future needs (e.g. Complete/staging
  1. ; is broken down by domain). *** This currently commented out ***.
  1. ;
  1. ; ^XTMP("HMPFX~<server id>~DFN",0,"status",<domain>)=STATUS, where STATUS=1 means
  1. ; data is completely staged and 0 means data is being staged but not complete yet.
  1. ;
  1. ; GLB = ^TMP("FINDSTATUS",$J) (FUTURE USE)
  1. ; HMPBAT = "HMPFX~<sever id>~DFN"
  1. ; HMPCM = Number of patients who have completed staging
  1. ; HMPCMP = Number of domains that have completed staging for a patient
  1. ; HMPCNT = Domain status (1 = complete; 0 = staging)
  1. ; HMPDFN = Patient IEN
  1. ; HMPDOM = Patient domain (e.g. lab, med, allergy, etc.)
  1. ; HMPST = Number of patients who are still in the staging state
  1. ; HMPSTG = Number of domains that are still staging for a patient
  1. ; HMPT = HMPCM+HMPST
  1. ;
  1. N GLB,HMPBAT,HMPCM,HMPCMP,HMPCNT,HMPDFN,HMPDOM,HMPST,HMPSTG,HMPT
  1. ;S GLB=$NA(^TMP("FINDSTATUS",$J))
  1. ;K @GLB
  1. S HMPBAT="HMPFX",(HMPCM,HMPST)=0
  1. F S HMPBAT=$O(^XTMP(HMPBAT)) Q:$E(HMPBAT,1,5)'="HMPFX" D
  1. .S HMPDOM="",HMPDFN=$P(HMPBAT,"~",3),(HMPCMP,HMPSTG)=0
  1. .I HMPDFN'=+HMPDFN Q ; Patients ONLY!
  1. .F S HMPDOM=$O(^XTMP(HMPBAT,0,"status",HMPDOM)) Q:HMPDOM']"" D
  1. ..S HMPCNT=^XTMP(HMPBAT,0,"status",HMPDOM)
  1. ..I HMPCNT=1 D
  1. ...S HMPCMP=HMPCMP+1
  1. ...;S @GLB@(HMPDFN,HMPDOM)="Complete"
  1. ..I HMPCNT'=1 D
  1. ...S HMPSTG=HMPSTG+1
  1. ...;S @GLB@(HMPDFN,HMPDOM)="Staging"
  1. .I HMPSTG>0 D
  1. ..S HMPST=HMPST+1
  1. ..;S @GLB@(HMPDFN)="Staging"
  1. .I HMPSTG'>0 D
  1. ..S HMPCM=HMPCM+1
  1. ..;S @GLB@(HMPDFN)="Complete"
  1. S HMPT=HMPCM+HMPST
  1. K RSLT
  1. S RSLT(1)="There are a total of "_HMPT_" patient"_$S(HMPT=1:"",1:"s")_" in queue."
  1. I HMPCM>0 S RSLT(1)=RSLT(1)_" "_HMPCM_" Complete"
  1. I HMPST>0 S RSLT(1)=RSLT(1)_" "_HMPST_" Staging"
  1. Q
  1. ;
  1. MON ; Monitor the progress of ^XTMP growth. JD - 6/11/15
  1. N DONE,SIZE,RES
  1. D HOME^%ZIS
  1. S DONE=-1
  1. F Q:DONE'=-1 D
  1. .S SIZE=+$P($P($$GETSIZE(),U)/1000+.5,".")
  1. .W @IOF,"eHMP usage of ^XTMP = "_SIZE_" kilo byte(s)"
  1. .D CHKXTMP(.RES)
  1. .W !!,RES(1)
  1. .W !!,"Hit any key to exit the monitor"
  1. .X "R *DONE:2"
  1. Q
  1. ;
  1. SIZE(RSLT) ; calculate the size of XTMP global
  1. S RSLT(1)=$P($$GETSIZE(),"^")
  1. Q
  1. ;
  1. GETSIZE(HMPMODE,HMPSRVN) ; -- return current aggregate extract size for extracts waiting to be sent to HMP servers
  1. ; input: HMPMODE := [ estimate - use estimated domain average sizes (default) |
  1. ; actual - walk though object nodes to calculate using $LENGTH ]
  1. ; HMPSRVN := name of HMP server [optional - defaults to all HMP servers]
  1. ; returns: total size in bytes ^ object count
  1. ;
  1. ; -- loop thru extracts for server(s)
  1. N ROOT,BATCH,TASK,DOMAIN,OBJS,OBJCNT,OBJSIZES,TOTAL
  1. S (OBJCNT,TOTAL)=0
  1. S ROOT="HMPFX~"_$S($G(HMPSRVN)]"":HMPSRVN_"~",1:"")
  1. S BATCH=ROOT
  1. F S BATCH=$O(^XTMP(BATCH)) Q:$E(BATCH,1,$L(ROOT))'=ROOT D
  1. . S TASK=0 F S TASK=$O(^XTMP(BATCH,TASK)) Q:'TASK D
  1. . . S DOMAIN="" F S DOMAIN=$O(^XTMP(BATCH,TASK,DOMAIN)) Q:DOMAIN="" D
  1. . . . S OBJS=+$O(^XTMP(BATCH,TASK,DOMAIN," "),-1)
  1. . . . S OBJCNT=OBJCNT+OBJS
  1. . . . S TOTAL=TOTAL+$$WALK(BATCH,TASK,DOMAIN) Q
  1. . . . S TOTAL=TOTAL+(OBJS*$G(OBJSIZES($P(DOMAIN,"#")),1000))
  1. Q TOTAL_"^"_OBJCNT
  1. ;
  1. WALK(BATCH,TASK,DOMAIN) ; -- walk through domain objectS in task to get actual size
  1. N OBJ,SIZE,NODE
  1. S (OBJ,SIZE)=0
  1. F S OBJ=$O(^XTMP(BATCH,TASK,DOMAIN,OBJ)) Q:'OBJ D
  1. . S NODE=0 F S NODE=$O(^XTMP(BATCH,TASK,DOMAIN,OBJ,NODE)) Q:'NODE S SIZE=SIZE+$L($G(^(NODE)))
  1. Q SIZE
  1. ;
  1. MSG(M,Q,V) ;
  1. ;Create a message (M) in JSON format with a qualifier (Q)
  1. ;Returns RSLT(1)
  1. ; M - Message text - The paramater is message being reported for instance "DFN" could the message
  1. ; Q - Qualifier: - The quailifier is reporting where the JSON message is Required or Invalid.
  1. ; 1 - Required
  1. ; 2 - Invalid
  1. ; V - If Q=1, then V is ignored (or not passed in)
  1. ; If Q=2, then V=<the invalid value>
  1. N TEXT,ERRMSG,JSONERR
  1. K ERRMSG,RSLT,JSONERR
  1. S M=$G(M),Q=$G(Q),V=$G(V)
  1. S TEXT=M
  1. I Q=1 S TEXT=M_" is required"
  1. I Q=2 S TEXT="Invalid "_M_": "_V
  1. S ERRMSG("Message")=TEXT D ENCODE^HMPJSON("ERRMSG","RSLT","JSONERR")
  1. I $G(JSONERR) S RSLT(1)=JSONERR
  1. Q