HMPEFX ;SLC/MKB,ASMR/RRB - Reference data update;7/19/12 2:26pm
;;2.0;ENTERPRISE HEALTH MANAGEMENT PLATFORM;**;Sep 01, 2011;Build 63
;Per VA Directive 6402, this routine should not be modified.
;
; External References DBIA#
; ------------------- -----
; ^DPT 10035
; MPIF001 2701
; XLFSTR 10104
Q
;
EN(LAST,MAX) ; -- get data from ^XTMP("HMPEF-<date>",n)
;[MAX not used yet]
N X,Y,HMPTOTL,DOMCNT,TYPE,NAME,RTN,HMPID
S LAST=$G(LAST) D GETLIST(LAST)
G ENQ:$G(^TMP("HMPX",$J,0))<1 ;no data
;
S (HMPTOTL,DOMCNT)=0
S TYPE="" F S TYPE=$O(^TMP("HMPX",$J,TYPE)) Q:TYPE="" D
. S NAME=$$LOW^XLFSTR(TYPE)
. S RTN=$$TAG^HMPEF(NAME)_"^HMPEF" Q:'$L($T(@RTN))
. S DOMCNT=DOMCNT+1
. ;
. N HMP,HMPI
. S HMP=$NA(^TMP("HMP",$J,DOMCNT)),HMPI=0,HMPID=""
. F S HMPID=$O(^TMP("HMPX",$J,TYPE,HMPID)) Q:HMPID="" D
.. D @RTN S HMPTOTL=HMPTOTL+1
. ;
. I 'HMPI S DOMCNT=DOMCNT-1 Q ;no data, or error
. S:DOMCNT>1 @HMP@(.3)=","
. S @HMP@(.5)="{""domainName"":"""_NAME_""",""total"":"_HMPI_",""items"":["
. S HMPI=HMPI+1,@HMP@(HMPI)="]}"
;
ENQ ;
S Y=$G(^TMP("HMPX",$J,0)) K ^TMP("HMPX",$J)
I '$G(DOMCNT) S @HMP@(.5)="{""apiVersion"":""1.01"",""data"":{""lastUpdate"":"""_LAST_""",""totalItems"":0,""items"":[]}}" Q
;
S @HMP@(.5)="{""apiVersion"":""1.01"",""data"":{""lastUpdate"":"""_Y_""",""totalItems"":"_DOMCNT_",""items"":["
S HMPI=DOMCNT I $D(^TMP($J,"HMP ERROR")) D
. N ERROR,CNT
. D BUILDERR^HMPEF(.ERROR)
. S HMPI=HMPI+1,@HMP@(HMPI)=",",CNT=0
. F S CNT=$O(ERROR(CNT)) Q:CNT'>0 S HMPI=HMPI+1,@HMP@(HMPI)=ERROR(CNT)
. K ^TMP($J,"HMP ERROR")
S HMPI=HMPI+1,@HMP@(HMPI)="]}}"
Q
;
GETLIST(LAST) ; -- build list of updates for client
; Returns ^TMP("HMPX",$J,0) = last DATE:SEQ included
; ^TMP("HMPX",$J,TYPE,ID)=ACT
N DATE,SEQ,BEG,END,IDX,X0,DFN,TYPE,ID,ACT
K ^TMP("HMPX",$J)
S DATE=+LAST,SEQ=+$P(LAST,":",2)
; generate list ID, and end point
S BEG=$NA(^XTMP("HMPEF-"_DATE,SEQ)) ;init loop where left off
; END=$Q(^XTMP("HMPEF-"_(DT+1),9999999),-1) ;last node
S END=+$O(^XTMP("HMPEF-"_DT,"A"),-1) ;last node
S ^TMP("HMPX",$J,0)=DT_":"_END ;date:seq
;
S IDX=BEG F S IDX=$Q(@IDX) Q:$$DONE D
. S X0=@IDX,TYPE=$P(X0,U),ID=$P(X0,U,2),ACT=$P(X0,U,3)
. I TYPE=""!(ID="") Q ;error
. S ^TMP("HMPX",$J,TYPE,ID)=ACT
Q
;
DONE() ; -- Return 1 or 0, if loop has finished
I IDX'?1"^XTMP(""HMPEF-"7N.E Q 1 ;end of ^XTMP
N D,N S D=+$P(IDX,"-",2),N=+$P(IDX,",",2)
; check HMP-DATE subscript
I D<DT Q 0 ;prior day: keep going
I D>DT Q 1 ;next day: stop loop
; D=DT: check sequence# subscript
I N>END Q 1
Q 0
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HHMPEFX 2788 printed Oct 16, 2024@17:54:34 Page 2
HMPEFX ;SLC/MKB,ASMR/RRB - Reference data update;7/19/12 2:26pm
+1 ;;2.0;ENTERPRISE HEALTH MANAGEMENT PLATFORM;**;Sep 01, 2011;Build 63
+2 ;Per VA Directive 6402, this routine should not be modified.
+3 ;
+4 ; External References DBIA#
+5 ; ------------------- -----
+6 ; ^DPT 10035
+7 ; MPIF001 2701
+8 ; XLFSTR 10104
+9 QUIT
+10 ;
EN(LAST,MAX) ; -- get data from ^XTMP("HMPEF-<date>",n)
+1 ;[MAX not used yet]
+2 NEW X,Y,HMPTOTL,DOMCNT,TYPE,NAME,RTN,HMPID
+3 SET LAST=$GET(LAST)
DO GETLIST(LAST)
+4 ;no data
if $GET(^TMP("HMPX",$JOB,0))<1
GOTO ENQ
+5 ;
+6 SET (HMPTOTL,DOMCNT)=0
+7 SET TYPE=""
FOR
SET TYPE=$ORDER(^TMP("HMPX",$JOB,TYPE))
if TYPE=""
QUIT
Begin DoDot:1
+8 SET NAME=$$LOW^XLFSTR(TYPE)
+9 SET RTN=$$TAG^HMPEF(NAME)_"^HMPEF"
if '$LENGTH($TEXT(@RTN))
QUIT
+10 SET DOMCNT=DOMCNT+1
+11 ;
+12 NEW HMP,HMPI
+13 SET HMP=$NAME(^TMP("HMP",$JOB,DOMCNT))
SET HMPI=0
SET HMPID=""
+14 FOR
SET HMPID=$ORDER(^TMP("HMPX",$JOB,TYPE,HMPID))
if HMPID=""
QUIT
Begin DoDot:2
+15 DO @RTN
SET HMPTOTL=HMPTOTL+1
End DoDot:2
+16 ;
+17 ;no data, or error
IF 'HMPI
SET DOMCNT=DOMCNT-1
QUIT
+18 if DOMCNT>1
SET @HMP@(.3)=","
+19 SET @HMP@(.5)="{""domainName"":"""_NAME_""",""total"":"_HMPI_",""items"":["
+20 SET HMPI=HMPI+1
SET @HMP@(HMPI)="]}"
End DoDot:1
+21 ;
ENQ ;
+1 SET Y=$GET(^TMP("HMPX",$JOB,0))
KILL ^TMP("HMPX",$JOB)
+2 IF '$GET(DOMCNT)
SET @HMP@(.5)="{""apiVersion"":""1.01"",""data"":{""lastUpdate"":"""_LAST_""",""totalItems"":0,""items"":[]}}"
QUIT
+3 ;
+4 SET @HMP@(.5)="{""apiVersion"":""1.01"",""data"":{""lastUpdate"":"""_Y_""",""totalItems"":"_DOMCNT_",""items"":["
+5 SET HMPI=DOMCNT
IF $DATA(^TMP($JOB,"HMP ERROR"))
Begin DoDot:1
+6 NEW ERROR,CNT
+7 DO BUILDERR^HMPEF(.ERROR)
+8 SET HMPI=HMPI+1
SET @HMP@(HMPI)=","
SET CNT=0
+9 FOR
SET CNT=$ORDER(ERROR(CNT))
if CNT'>0
QUIT
SET HMPI=HMPI+1
SET @HMP@(HMPI)=ERROR(CNT)
+10 KILL ^TMP($JOB,"HMP ERROR")
End DoDot:1
+11 SET HMPI=HMPI+1
SET @HMP@(HMPI)="]}}"
+12 QUIT
+13 ;
GETLIST(LAST) ; -- build list of updates for client
+1 ; Returns ^TMP("HMPX",$J,0) = last DATE:SEQ included
+2 ; ^TMP("HMPX",$J,TYPE,ID)=ACT
+3 NEW DATE,SEQ,BEG,END,IDX,X0,DFN,TYPE,ID,ACT
+4 KILL ^TMP("HMPX",$JOB)
+5 SET DATE=+LAST
SET SEQ=+$PIECE(LAST,":",2)
+6 ; generate list ID, and end point
+7 ;init loop where left off
SET BEG=$NAME(^XTMP("HMPEF-"_DATE,SEQ))
+8 ; END=$Q(^XTMP("HMPEF-"_(DT+1),9999999),-1) ;last node
+9 ;last node
SET END=+$ORDER(^XTMP("HMPEF-"_DT,"A"),-1)
+10 ;date:seq
SET ^TMP("HMPX",$JOB,0)=DT_":"_END
+11 ;
+12 SET IDX=BEG
FOR
SET IDX=$QUERY(@IDX)
if $$DONE
QUIT
Begin DoDot:1
+13 SET X0=@IDX
SET TYPE=$PIECE(X0,U)
SET ID=$PIECE(X0,U,2)
SET ACT=$PIECE(X0,U,3)
+14 ;error
IF TYPE=""!(ID="")
QUIT
+15 SET ^TMP("HMPX",$JOB,TYPE,ID)=ACT
End DoDot:1
+16 QUIT
+17 ;
DONE() ; -- Return 1 or 0, if loop has finished
+1 ;end of ^XTMP
IF IDX'?1"^XTMP(""HMPEF-"7N.E
QUIT 1
+2 NEW D,N
SET D=+$PIECE(IDX,"-",2)
SET N=+$PIECE(IDX,",",2)
+3 ; check HMP-DATE subscript
+4 ;prior day: keep going
IF D<DT
QUIT 0
+5 ;next day: stop loop
IF D>DT
QUIT 1
+6 ; D=DT: check sequence# subscript
+7 IF N>END
QUIT 1
+8 QUIT 0