ORVCOBM ;SPFO/AJB - VISTA CUTOVER ;Feb 11, 2021@09:04:56
;;3.0;ORDER ENTRY/RESULTS REPORTING;**529**;Dec 17, 1997;Build 17
Q
; see ORVCO for list of ICRs/DBIAs
RESULTS ; process the results
N X S X=0 F S X=$O(RESULTS(X)) Q:'+X D
. S X(1)=$P(RESULTS(X,"DATA"),U)
. S X(2)=$FN($P(RESULTS(X,"DATA"),U,2)/$P(RESULTS("Baseline"),U,2),"",2)
. S X(3)=$FN(1-($P(RESULTS(X,"DATA"),U,3)/$P(RESULTS("Baseline"),U,3)),"",2)
. S RESULTS("Score",X(1)*(X(2)*X(3)))=X
N OPT S OPT=RESULTS("Score",$O(RESULTS("Score",""),-1)),OPT=(OPT-1)*5 K X ; set best thread result & clean x
; set optimal thread count in options
F X="ORVCO TEST","ORVCO CREATE" D
. S X(1)=$$LU^ORVCO(19,X) Q:'+X(1)
. N ERR,FDA S FDA(19,X(1)_",",25)=$S(X["TEST":"TST^ORVCO("_OPT_")",1:"EN^ORVCO("_OPT_")")
. D UPDATE^DIE("","FDA","",.ERR)
Q
OUTPUT(BM,RESULTS) ;
D SAY^XGF(0,72,$P($$HTE^XLFDT($H),"@",2))
N INF,OUT,THREAD,THREADS,TOTAL
;
S INF=$NA(^XTMP("ORVCOBM",$J))
S TOTAL("FM Total")=@INF@("Total")
S INF=$NA(^XTMP("ORVCOBM",$J,"BM",BM,"Info"))
;
S THREAD=0 F S THREAD=$O(@INF@(" Daemon",THREAD)) Q:'+THREAD D
. S THREAD(BM,"Processed")=$G(THREAD(BM,"Processed"))+@INF@(" Daemon",THREAD,"Processed") ; total processed of all threads
. S THREAD(BM,"Elapsed")=$G(THREAD(BM,"Elapsed"))+@INF@(" Daemon",THREAD,"Elapsed") ; total elapsed time of all threads
;
S THREADS=@INF@("Threads")
S THREAD(BM,"Avg Thread Duration")=$FN(THREAD(BM,"Elapsed")/THREADS,"",2)
S THREAD(BM,"Avg Thread Duration")=$S('+THREAD(BM,"Avg Thread Duration"):1,1:THREAD(BM,"Avg Thread Duration"))
S THREAD(BM,"Patients per second")=$FN(THREAD(BM,"Processed")/THREAD(BM,"Avg Thread Duration"),"",2)
S TOTAL("EST")=$$CNVRT^ORVCO(TOTAL("FM Total")/THREAD(BM,"Patients per second")) ; estimated time to completion
;
S OUT=$$SETSTR^VALM1(BM,"",1,$L(BM)) ; Test #
S OUT=$$SETSTR^VALM1(THREADS,OUT,10,4) ; # of Threads
S OUT=$$SETSTR^VALM1(THREAD(BM,"Processed"),OUT,20,$L(THREAD(BM,"Processed"))) ; Patients Processed
S OUT=$$SETSTR^VALM1(@INF@("Elapsed"),OUT,32,$L(@INF@("Elapsed"))) ; Total Elapsed Time
S OUT=$$SETSTR^VALM1(THREAD(BM,"Avg Thread Duration"),OUT,42,$L(THREAD(BM,"Avg Thread Duration")))
S OUT=$$SETSTR^VALM1(THREAD(BM,"Patients per second"),OUT,53,$L(THREAD(BM,"Patients per second")))
S OUT=$$SETSTR^VALM1(TOTAL("EST"),OUT,81-$L(TOTAL("EST")),$L(TOTAL("EST")))
D CLEAR^XGF(4+BM,4+BM,4+BM,70),SAY^XGF(3+BM,0,OUT) ; display results
;
S RESULTS(BM,"DATA")=1 ;1-BM ; weighted score for # of threads
S $P(RESULTS(BM,"DATA"),U,2)=THREAD(BM,"Patients per second") ; patients per second
S $P(RESULTS(BM,"DATA"),U,3)=$FN(TOTAL("FM Total")/THREAD(BM,"Patients per second"),"",2) ; estimated time to completion in seconds
S:BM=1 RESULTS("Baseline")=RESULTS(BM,"DATA")
Q
EN(ITERATIONS) ;
S ITERATIONS=$S(+$G(ITERATIONS):ITERATIONS-1,1:0)
D HOME^%ZIS,PREP^XGF
N BM,CNT,CRD,GBL,INF,MODE,NEXUS6,PFAC,RESULTS,RMD,THREAD,THREADS,TITLE,TOTAL,USR
S MODE=0,RMD=0 ; do not do reminder benchmark due to coversheet time variation
D SETUP^ORVCO ; initalize variables
; set gbl and inf specific for benchmark
S GBL=$NA(^XTMP("ORVCOBM",$J," Patients")),GBL("DPT")="^DPT" K @GBL
S INF=$NA(^XTMP("ORVCOBM",$J)) K @INF
S @INF@("Total")=$P($G(@GBL("DPT")@(0)),U,4)
S @INF@(0)=$$FMADD^XLFDT(DT,1)_U_DT_U_"Data in use by ORVCOBM (Benchmark)." ; set the xtmp
S NEXUS6=$$LU^ORVCO(811.5,"VA-NEXUS CLINIC IN LAST THREE YEARS") ; 'All those moments will be lost in time, like tears in the rain...'
; create the patient list
W @IOF,"Finding patients for the benchmark..."
N DFN S DFN=0 F S DFN=$O(@GBL("DPT")@(DFN)) Q:'+DFN!($G(CNT("Patients"))'<10000) D
. I +$$BE^ORVCODAEMON(DFN) S CNT("Test Patients")=+$G(CNT("Test Patients"))+1 Q ; quit if test patient
. I '+$$VISIT^ORVCODAEMON(DFN,1096) S CNT("No Visits")=+$G(CNT("No Visits"))+1 Q ; quit if no visit in last 1096 days
. S @GBL@(DFN)=$P($G(@GBL("DPT")@(DFN,0)),U),CNT("Patients")=+$G(CNT("Patients"))+1 ; save patients and count them
. D SAY^XGF(0,(41-$L(CNT("Patients"))),CNT("Patients")) ; display # searched
D CLEAR^XGF(0,0,23,80),IOXY^XGF(0,0),HEADER ; clear screen, display header
; main loop for benchmark tests
F BM=0:1:ITERATIONS D ;S THREADS=2**BM D
. S THREADS=$S(BM=0:1,1:BM*5)
. S INF=$NA(^XTMP("ORVCOBM",$J,"BM",BM+1,"Info"))
. S @INF@("Threads")=THREADS
. S @INF@("Mode")=MODE,@INF@("PFAC")=PFAC,@INF@("Title")=$S(+$P(MODE,U,2):TITLE("Reminders"),1:TITLE("Summary")),@INF@("User")=USR
. D TOTEM^ORVCODAEMON(INF) ; set patient list variables
. N IEN D BLOCKS^ORVCODAEMON(.THREADS,TOTAL) ; establish patient block sizes
. S THREAD=0,DFN="" F S DFN=$O(IEN(DFN)) Q:DFN="" D
. . S @INF@("Start Time")=$H
. . N DUR S DUR=30 ; duration of benchmark
. . D TASK^ORVCODAEMON(GBL,INF,DFN,IEN(DFN),THREAD,DUR)
. . S THREAD=THREAD+1
. D SAY^XGF(5+BM,0,$$CJ^XLFSTR("Test "_(BM+1)_" of "_(ITERATIONS+1)_" in progress...",80))
. F Q:+$G(@INF@("Complete"))
. K @INF@(" Duration")
. D OUTPUT(BM+1,.RESULTS)
W !!,$$CJ^XLFSTR("< Benchmark Testing Complete >",IOM)
D RESULTS,IOXY^XGF(20,0),PROMPT,CLEAN^XGF
K ^XTMP("ORVCOBM",$J) ; just clean everything
Q
N DATA D SAY^XGF(0,33,"Benchmark Tool"),SAY^XGF(0,72,$P($$HTE^XLFDT($H),"@",2))
D SAY^XGF(2,9,"# of")
D SAY^XGF(2,19,"Patients")
D SAY^XGF(2,31,"Total")
D SAY^XGF(2,41,"Avg")
D SAY^XGF(2,52,"Max")
D SAY^XGF(2,68,"Est. Time to")
S DATA=$$SETSTR^VALM1("Test","",1,4)
S DATA=$$SETSTR^VALM1("Threads",DATA,10,7)
S DATA=$$SETSTR^VALM1("Processed",DATA,20,9)
S DATA=$$SETSTR^VALM1("Time",DATA,32,5)
S DATA=$$SETSTR^VALM1("Thread",DATA,42,10)
S DATA=$$SETSTR^VALM1("Pt/Sec",DATA,53,6)
S DATA=$$SETSTR^VALM1("Completion",DATA,69,12)
W !,IOUON,DATA,IOUOFF
;D SAY^XGF(16,0,"* includes time to start and complete all threads.")
;D SAY^XGF(18,0,"** based on evaluating all total patients.")
Q
FMR(DIR,PRM,DEF,HLP,SCR) ; fileman reader
N DILN,DILOCKTM,DISYS
N DIROUT,DIRUT,DTOUT,DUOUT,X,Y
S DIR(0)=DIR S:$G(PRM)'="" DIR("A")=PRM S:$G(DEF)'="" DIR("B")=DEF S:$G(SCR)'="" DIR("S")=SCR
I $G(HLP)'="" S DIR("?")=HLP
I $D(HLP) M DIR=HLP
W $G(IOCUON) D ^DIR W $G(IOCUOFF)
Q $S($D(DIROUT):U,$D(DIRUT):U,$D(DTOUT):U,$D(DUOUT):U,1:Y)
PROMPT ; 'Message transmitted, message received...'
I $$FMR("EA","Press <ENTER> to continue")
Q
DTXT(DOCTXT) ; do section to populate document text
N LINE,SECT F LINE=1:1 S SECT=$P($T(DATA+LINE),";;",2) Q:SECT="" D ; go through all sections of DATA
. I $P($P(SECT,";"),U)="DISCL" D @$P(SECT,";") Q ; always do disclaimer for both types
. I '+RMD,$P($P(SECT,";"),U)'="RMDRS" D @$P(SECT,";") Q ; for regular document(s), don't execute RMDRS section
. I +RMD,$P($P(SECT,";"),U)="RMDRS" D @$P(SECT,";") Q ; for clinical reminders document(s), don't execute non-RMDRS section
Q
DATA ;
;;DISCL^ORVCODATA02(DFN);DISCLAIMER
;;DEMO^ORVCODATA01(DFN);DEMOGRAPHICS
;;SCDIS^ORVCODATA01(DFN);SERVICE CONNECTED/DISABILITY
;;PRF^ORVCODATA01(DFN);PATIENT RECORD FLAGS
;;PROBLST^ORVCODATA01(DFN);PROBLEM LIST
;;ORDERS^ORVCODATA01(DFN);OPEN ORDERS
;;MEDS^ORVCODATA01(DFN);ALL MEDICATIONS
;;ALLERGIES^ORVCODATA01(DFN);ALLERGIES
;;SKIN^ORVCODATA01(DFN);SKIN TEST
;;IMMUINE^ORVCODATA01(DFN);IMMUNIZATIONS
;;IMAG^ORVCODATA01(DFN);IMAGING
;;FUTURE^ORVCODATA01(DFN);FUTURE VISITS
;;PAST^ORVCODATA02(DFN);PAST VISITS
;;RMDRS^ORVCODATA02(DFN);REMINDERS
;;
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HORVCOBM 7456 printed Nov 22, 2024@17:44:41 Page 2
ORVCOBM ;SPFO/AJB - VISTA CUTOVER ;Feb 11, 2021@09:04:56
+1 ;;3.0;ORDER ENTRY/RESULTS REPORTING;**529**;Dec 17, 1997;Build 17
+2 QUIT
+3 ; see ORVCO for list of ICRs/DBIAs
RESULTS ; process the results
+1 NEW X
SET X=0
FOR
SET X=$ORDER(RESULTS(X))
if '+X
QUIT
Begin DoDot:1
+2 SET X(1)=$PIECE(RESULTS(X,"DATA"),U)
+3 SET X(2)=$FNUMBER($PIECE(RESULTS(X,"DATA"),U,2)/$PIECE(RESULTS("Baseline"),U,2),"",2)
+4 SET X(3)=$FNUMBER(1-($PIECE(RESULTS(X,"DATA"),U,3)/$PIECE(RESULTS("Baseline"),U,3)),"",2)
+5 SET RESULTS("Score",X(1)*(X(2)*X(3)))=X
End DoDot:1
+6 ; set best thread result & clean x
NEW OPT
SET OPT=RESULTS("Score",$ORDER(RESULTS("Score",""),-1))
SET OPT=(OPT-1)*5
KILL X
+7 ; set optimal thread count in options
+8 FOR X="ORVCO TEST","ORVCO CREATE"
Begin DoDot:1
+9 SET X(1)=$$LU^ORVCO(19,X)
if '+X(1)
QUIT
+10 NEW ERR,FDA
SET FDA(19,X(1)_",",25)=$SELECT(X["TEST":"TST^ORVCO("_OPT_")",1:"EN^ORVCO("_OPT_")")
+11 DO UPDATE^DIE("","FDA","",.ERR)
End DoDot:1
+12 QUIT
OUTPUT(BM,RESULTS) ;
+1 DO SAY^XGF(0,72,$PIECE($$HTE^XLFDT($HOROLOG),"@",2))
+2 NEW INF,OUT,THREAD,THREADS,TOTAL
+3 ;
+4 SET INF=$NAME(^XTMP("ORVCOBM",$JOB))
+5 SET TOTAL("FM Total")=@INF@("Total")
+6 SET INF=$NAME(^XTMP("ORVCOBM",$JOB,"BM",BM,"Info"))
+7 ;
+8 SET THREAD=0
FOR
SET THREAD=$ORDER(@INF@(" Daemon",THREAD))
if '+THREAD
QUIT
Begin DoDot:1
+9 ; total processed of all threads
SET THREAD(BM,"Processed")=$GET(THREAD(BM,"Processed"))+@INF@(" Daemon",THREAD,"Processed")
+10 ; total elapsed time of all threads
SET THREAD(BM,"Elapsed")=$GET(THREAD(BM,"Elapsed"))+@INF@(" Daemon",THREAD,"Elapsed")
End DoDot:1
+11 ;
+12 SET THREADS=@INF@("Threads")
+13 SET THREAD(BM,"Avg Thread Duration")=$FNUMBER(THREAD(BM,"Elapsed")/THREADS,"",2)
+14 SET THREAD(BM,"Avg Thread Duration")=$SELECT('+THREAD(BM,"Avg Thread Duration"):1,1:THREAD(BM,"Avg Thread Duration"))
+15 SET THREAD(BM,"Patients per second")=$FNUMBER(THREAD(BM,"Processed")/THREAD(BM,"Avg Thread Duration"),"",2)
+16 ; estimated time to completion
SET TOTAL("EST")=$$CNVRT^ORVCO(TOTAL("FM Total")/THREAD(BM,"Patients per second"))
+17 ;
+18 ; Test #
SET OUT=$$SETSTR^VALM1(BM,"",1,$LENGTH(BM))
+19 ; # of Threads
SET OUT=$$SETSTR^VALM1(THREADS,OUT,10,4)
+20 ; Patients Processed
SET OUT=$$SETSTR^VALM1(THREAD(BM,"Processed"),OUT,20,$LENGTH(THREAD(BM,"Processed")))
+21 ; Total Elapsed Time
SET OUT=$$SETSTR^VALM1(@INF@("Elapsed"),OUT,32,$LENGTH(@INF@("Elapsed")))
+22 SET OUT=$$SETSTR^VALM1(THREAD(BM,"Avg Thread Duration"),OUT,42,$LENGTH(THREAD(BM,"Avg Thread Duration")))
+23 SET OUT=$$SETSTR^VALM1(THREAD(BM,"Patients per second"),OUT,53,$LENGTH(THREAD(BM,"Patients per second")))
+24 SET OUT=$$SETSTR^VALM1(TOTAL("EST"),OUT,81-$LENGTH(TOTAL("EST")),$LENGTH(TOTAL("EST")))
+25 ; display results
DO CLEAR^XGF(4+BM,4+BM,4+BM,70)
DO SAY^XGF(3+BM,0,OUT)
+26 ;
+27 ;1-BM ; weighted score for # of threads
SET RESULTS(BM,"DATA")=1
+28 ; patients per second
SET $PIECE(RESULTS(BM,"DATA"),U,2)=THREAD(BM,"Patients per second")
+29 ; estimated time to completion in seconds
SET $PIECE(RESULTS(BM,"DATA"),U,3)=$FNUMBER(TOTAL("FM Total")/THREAD(BM,"Patients per second"),"",2)
+30 if BM=1
SET RESULTS("Baseline")=RESULTS(BM,"DATA")
+31 QUIT
EN(ITERATIONS) ;
+1 SET ITERATIONS=$SELECT(+$GET(ITERATIONS):ITERATIONS-1,1:0)
+2 DO HOME^%ZIS
DO PREP^XGF
+3 NEW BM,CNT,CRD,GBL,INF,MODE,NEXUS6,PFAC,RESULTS,RMD,THREAD,THREADS,TITLE,TOTAL,USR
+4 ; do not do reminder benchmark due to coversheet time variation
SET MODE=0
SET RMD=0
+5 ; initalize variables
DO SETUP^ORVCO
+6 ; set gbl and inf specific for benchmark
+7 SET GBL=$NAME(^XTMP("ORVCOBM",$JOB," Patients"))
SET GBL("DPT")="^DPT"
KILL @GBL
+8 SET INF=$NAME(^XTMP("ORVCOBM",$JOB))
KILL @INF
+9 SET @INF@("Total")=$PIECE($GET(@GBL("DPT")@(0)),U,4)
+10 ; set the xtmp
SET @INF@(0)=$$FMADD^XLFDT(DT,1)_U_DT_U_"Data in use by ORVCOBM (Benchmark)."
+11 ; 'All those moments will be lost in time, like tears in the rain...'
SET NEXUS6=$$LU^ORVCO(811.5,"VA-NEXUS CLINIC IN LAST THREE YEARS")
+12 ; create the patient list
+13 WRITE @IOF,"Finding patients for the benchmark..."
+14 NEW DFN
SET DFN=0
FOR
SET DFN=$ORDER(@GBL("DPT")@(DFN))
if '+DFN!($GET(CNT("Patients"))'<10000)
QUIT
Begin DoDot:1
+15 ; quit if test patient
IF +$$BE^ORVCODAEMON(DFN)
SET CNT("Test Patients")=+$GET(CNT("Test Patients"))+1
QUIT
+16 ; quit if no visit in last 1096 days
IF '+$$VISIT^ORVCODAEMON(DFN,1096)
SET CNT("No Visits")=+$GET(CNT("No Visits"))+1
QUIT
+17 ; save patients and count them
SET @GBL@(DFN)=$PIECE($GET(@GBL("DPT")@(DFN,0)),U)
SET CNT("Patients")=+$GET(CNT("Patients"))+1
+18 ; display # searched
DO SAY^XGF(0,(41-$LENGTH(CNT("Patients"))),CNT("Patients"))
End DoDot:1
+19 ; clear screen, display header
DO CLEAR^XGF(0,0,23,80)
DO IOXY^XGF(0,0)
DO HEADER
+20 ; main loop for benchmark tests
+21 ;S THREADS=2**BM D
FOR BM=0:1:ITERATIONS
Begin DoDot:1
+22 SET THREADS=$SELECT(BM=0:1,1:BM*5)
+23 SET INF=$NAME(^XTMP("ORVCOBM",$JOB,"BM",BM+1,"Info"))
+24 SET @INF@("Threads")=THREADS
+25 SET @INF@("Mode")=MODE
SET @INF@("PFAC")=PFAC
SET @INF@("Title")=$SELECT(+$PIECE(MODE,U,2):TITLE("Reminders"),1:TITLE("Summary"))
SET @INF@("User")=USR
+26 ; set patient list variables
DO TOTEM^ORVCODAEMON(INF)
+27 ; establish patient block sizes
NEW IEN
DO BLOCKS^ORVCODAEMON(.THREADS,TOTAL)
+28 SET THREAD=0
SET DFN=""
FOR
SET DFN=$ORDER(IEN(DFN))
if DFN=""
QUIT
Begin DoDot:2
+29 SET @INF@("Start Time")=$HOROLOG
+30 ; duration of benchmark
NEW DUR
SET DUR=30
+31 DO TASK^ORVCODAEMON(GBL,INF,DFN,IEN(DFN),THREAD,DUR)
+32 SET THREAD=THREAD+1
End DoDot:2
+33 DO SAY^XGF(5+BM,0,$$CJ^XLFSTR("Test "_(BM+1)_" of "_(ITERATIONS+1)_" in progress...",80))
+34 FOR
if +$GET(@INF@("Complete"))
QUIT
+35 KILL @INF@(" Duration")
+36 DO OUTPUT(BM+1,.RESULTS)
End DoDot:1
+37 WRITE !!,$$CJ^XLFSTR("< Benchmark Testing Complete >",IOM)
+38 DO RESULTS
DO IOXY^XGF(20,0)
DO PROMPT
DO CLEAN^XGF
+39 ; just clean everything
KILL ^XTMP("ORVCOBM",$JOB)
+40 QUIT
+1 NEW DATA
DO SAY^XGF(0,33,"Benchmark Tool")
DO SAY^XGF(0,72,$PIECE($$HTE^XLFDT($HOROLOG),"@",2))
+2 DO SAY^XGF(2,9,"# of")
+3 DO SAY^XGF(2,19,"Patients")
+4 DO SAY^XGF(2,31,"Total")
+5 DO SAY^XGF(2,41,"Avg")
+6 DO SAY^XGF(2,52,"Max")
+7 DO SAY^XGF(2,68,"Est. Time to")
+8 SET DATA=$$SETSTR^VALM1("Test","",1,4)
+9 SET DATA=$$SETSTR^VALM1("Threads",DATA,10,7)
+10 SET DATA=$$SETSTR^VALM1("Processed",DATA,20,9)
+11 SET DATA=$$SETSTR^VALM1("Time",DATA,32,5)
+12 SET DATA=$$SETSTR^VALM1("Thread",DATA,42,10)
+13 SET DATA=$$SETSTR^VALM1("Pt/Sec",DATA,53,6)
+14 SET DATA=$$SETSTR^VALM1("Completion",DATA,69,12)
+15 WRITE !,IOUON,DATA,IOUOFF
+16 ;D SAY^XGF(16,0,"* includes time to start and complete all threads.")
+17 ;D SAY^XGF(18,0,"** based on evaluating all total patients.")
+18 QUIT
FMR(DIR,PRM,DEF,HLP,SCR) ; fileman reader
+1 NEW DILN,DILOCKTM,DISYS
+2 NEW DIROUT,DIRUT,DTOUT,DUOUT,X,Y
+3 SET DIR(0)=DIR
if $GET(PRM)'=""
SET DIR("A")=PRM
if $GET(DEF)'=""
SET DIR("B")=DEF
if $GET(SCR)'=""
SET DIR("S")=SCR
+4 IF $GET(HLP)'=""
SET DIR("?")=HLP
+5 IF $DATA(HLP)
MERGE DIR=HLP
+6 WRITE $GET(IOCUON)
DO ^DIR
WRITE $GET(IOCUOFF)
+7 QUIT $SELECT($DATA(DIROUT):U,$DATA(DIRUT):U,$DATA(DTOUT):U,$DATA(DUOUT):U,1:Y)
PROMPT ; 'Message transmitted, message received...'
+1 IF $$FMR("EA","Press <ENTER> to continue")
+2 QUIT
DTXT(DOCTXT) ; do section to populate document text
+1 ; go through all sections of DATA
NEW LINE,SECT
FOR LINE=1:1
SET SECT=$PIECE($TEXT(DATA+LINE),";;",2)
if SECT=""
QUIT
Begin DoDot:1
+2 ; always do disclaimer for both types
IF $PIECE($PIECE(SECT,";"),U)="DISCL"
DO @$PIECE(SECT,";")
QUIT
+3 ; for regular document(s), don't execute RMDRS section
IF '+RMD
IF $PIECE($PIECE(SECT,";"),U)'="RMDRS"
DO @$PIECE(SECT,";")
QUIT
+4 ; for clinical reminders document(s), don't execute non-RMDRS section
IF +RMD
IF $PIECE($PIECE(SECT,";"),U)="RMDRS"
DO @$PIECE(SECT,";")
QUIT
End DoDot:1
+5 QUIT
DATA ;
+1 ;;DISCL^ORVCODATA02(DFN);DISCLAIMER
+2 ;;DEMO^ORVCODATA01(DFN);DEMOGRAPHICS
+3 ;;SCDIS^ORVCODATA01(DFN);SERVICE CONNECTED/DISABILITY
+4 ;;PRF^ORVCODATA01(DFN);PATIENT RECORD FLAGS
+5 ;;PROBLST^ORVCODATA01(DFN);PROBLEM LIST
+6 ;;ORDERS^ORVCODATA01(DFN);OPEN ORDERS
+7 ;;MEDS^ORVCODATA01(DFN);ALL MEDICATIONS
+8 ;;ALLERGIES^ORVCODATA01(DFN);ALLERGIES
+9 ;;SKIN^ORVCODATA01(DFN);SKIN TEST
+10 ;;IMMUINE^ORVCODATA01(DFN);IMMUNIZATIONS
+11 ;;IMAG^ORVCODATA01(DFN);IMAGING
+12 ;;FUTURE^ORVCODATA01(DFN);FUTURE VISITS
+13 ;;PAST^ORVCODATA02(DFN);PAST VISITS
+14 ;;RMDRS^ORVCODATA02(DFN);REMINDERS
+15 ;;
+16 QUIT