- GMTSRM3 ; SLC/DLT - Create/Modify - Selection Items ; 08/27/2002
- ;;2.7;Health Summary;**56,62,63**;Oct 20, 1995
- ;
- ; External References
- ; DBIA 2160 ^XUTL("OR")
- ; DBIA 67 ^LAB(60,
- ; DBIA 3137 EN^ORUS
- ;
- EN ; Entry Logic for Selection Items
- N GMTSN W !!,$S($O(^GMT(142,DA(1),1,DA,1,0)):"Current selection items are: ",1:"No selection items chosen.")
- S GMTSN=0 F S GMTSN=$O(^GMT(142,DA(1),1,DA,1,GMTSN)) Q:+GMTSN'>0 S GMTSN(0)=^(GMTSN,0) D SHOWSEL
- W !!,"Select new items one at a time in the sequence you want them displayed."
- W !,"You may select " I SELCNT="" W "any number of items.",!
- E W "up to ",SELCNT," items.",!
- Q
- SHOWSEL ; Writes Current Selection Items
- W ?30,$P(@("^"_$P(GMTSN(0),";",2)_+GMTSN(0)_",0)"),U),!
- Q
- EXIT ; Exit Logic for Selection Items
- N GMTSN,SELREF,GMREF I +X,(X["LAB(60,") D
- . S SELREF=U_$P(X,";",2)_+X_",",GMREF=X
- . I '$L($P($G(@(SELREF_"0)")),U,5)) D RESOLVE(GMREF)
- I $S('$D(DA(1)):1,'$D(DA(2)):1,1:0) Q
- S (GMTSNCNT,GMTSN)=0 F S GMTSN=$O(^GMT(142,DA(2),1,DA(1),1,GMTSN)) Q:'GMTSN S GMTSNCNT=GMTSNCNT+1
- S $P(^GMT(142,DA(2),1,DA(1),1,0),U,4)=GMTSNCNT
- I SELCNT,(GMTSNCNT'<SELCNT) W !?2,$C(7),"MAXIMUM # OF ITEMS SELECTED.",!
- Q
- RESOLVE(GMREF) ; Resolve Compound Items
- N C,IEN,GMI,GMHEAD,P,X,Y K ^XUTL("OR",$J,"ORU"),^("ORV"),^("ORW")
- S GMHEAD="-- "_$P($G(^LAB(60,+GMREF,.1)),U)_" --"
- S ^XUTL("OR",$J,"GMTS",0)="LAB TEST^1^^0" D COMPILE(+GMREF)
- S ORUS="^XUTL(""OR"","_$J_",""GMTS"",",ORUS("T")="D HEADER^GMTSRM3"
- I +$G(SELCNT) D
- . S ORUS(0)="40MN^"_SELCNT
- . S ORUS("A")="Select 1 - "_SELCNT_" LAB TEST(s): ",ORUS("B")="1-"_SELCNT
- E S ORUS(0)="40MN",ORUS("A")="Select LAB TEST(s): ",ORUS("B")="ALL"
- D EN^ORUS K ^XUTL("OR",$J,"GMTS"),^("ORU"),^("ORV"),^("ORW")
- I $S('$D(CMP(142.14,DA)):1,$G(CMP(142.14,DA))=GMREF:1,1:0) D
- . I $D(CMP(142.14,+$O(CMP(142.14,DA)))) D
- . . S GMI=DA F S GMI=$O(CMP(142.14,GMI)) Q:+GMI'>0!(GMI'<(DA+Y)) S CMP(142.14,GMI+Y)=CMP(142.14,GMI)
- . S GMI=0 F S GMI=$O(Y(GMI)) Q:GMI'>0 D
- . . I '$D(^GMT(142,+$G(DA(2)),1,+$G(DA(1)),1,"B",+$G(Y(GMI))_";LAB(60,")) D
- . . . S CMP(142.14,((GMI-1)+DA))=+$G(Y(GMI))_";LAB(60,"
- S IEN=0 F S IEN=$O(CMP(142.14,IEN)) Q:IEN'>0 D
- . I $D(^GMT(142,+$G(DA(2)),1,+$G(DA(1)),1,"B",CMP(142.14,IEN))) W $C(7),!," Duplicate test omitted." K CMP(142.14,IEN) Q
- . D LOADSEL^GMTSRM1A
- I $P($G(^LAB(60,+$G(^GMT(142,+DA(2),1,+DA(1),1,+DA,0)),0)),U,5)']"" D
- . N REC,SUBREC,SUBSUB S REC=DA(2),SUBREC=DA(1),SUBSUB=DA
- . D DELCOSMO(REC,SUBREC,SUBSUB)
- Q
- REITEM(GMTST,GMTSS) ; Resequence Items
- Q:+($G(GMTST))'>0 Q:'$D(^GMT(142,+($G(GMTST))))
- Q:+($G(GMTSS))'>0 Q:'$D(^GMT(142,+GMTST,1,+($G(GMTSS))))
- N DIR,DTOUT,DUOUT,DIRUT,DIROUT,GMTSA,GMTSCN,GMTSCA,GMTSMAX,GMTSN,GMTSI,Y,X
- D ARY(GMTST,GMTSS,.GMTSA) Q:+($G(GMTSA(0)))'>1
- S GMTSCN=$P($G(^GMT(142,GMTST,1,GMTSS,0)),"^",2),GMTSCA=$P($G(^GMT(142.1,+GMTSCN,0)),"^",4),GMTSCN=$P($G(^GMT(142.1,+GMTSCN,0)),"^",1)
- W !,?1,GMTSCN," ",$S($L(GMTSCA):"(",1:""),GMTSCA,$S($L(GMTSCA):")",1:"")
- S GMTSN=0 F S GMTSN=$O(GMTSA(GMTSN)) Q:+GMTSN=0 W !,$J(GMTSN,6)," ",GMTSA(GMTSN)
- S DIR(0)="YAO",DIR("?")="^D RIH^GMTSRM3",DIR("A")=" Do you want to resequence the selection items? "
- W ! D ^DIR I $D(DTOUT)!($D(DUOUT))!($D(DIRUT))!($D(DIROUT)) Q
- Q:+Y'>0
- N DA S DA(2)=+($G(GMTST)),DA(1)=+($G(GMTSS)) D RSI^GMTSRS2
- Q
- RIH ; Resequence Items Help
- W !,?4,"Enter either 'Y' or 'N'." Q
- ARY(GMTST,GMTSS,ARY) ; Array of Items
- N GMTSC,GMTSI,GMTSVAL,GMTSPTR,GMTSFRT,GMTSCRT,GMTSFFRT,GMTSFCRT,GMTSTYPE
- N GMTSRT,GMTSUB S ARY(0)=0 Q:+($G(GMTST))'>0 Q:'$D(^GMT(142,+($G(GMTST)))) Q:+($G(GMTSS))'>0 Q:'$D(^GMT(142,+GMTST,1,+($G(GMTSS))))
- S (GMTSC,GMTSI)=0 F S GMTSI=$O(^GMT(142,GMTST,1,GMTSS,1,GMTSI)) Q:+GMTSI=0 D
- . S GMTSVAL=$G(^GMT(142,GMTST,1,GMTSS,1,GMTSI,0)),GMTSPTR=+GMTSVAL,GMTSFRT=$P(GMTSVAL,";",2) Q:GMTSFRT'["(" S:GMTSFRT'["^" GMTSFRT="^"_GMTSFRT
- . S GMTSCRT=$$CREF^DILF(GMTSFRT),GMTSFFRT=GMTSFRT_GMTSPTR_","
- . S GMTSFCRT=$$CREF^DILF(GMTSFFRT) Q:'$D(@GMTSFCRT) Q:'$L($G(@($P(GMTSFCRT,")",1)_",0)")))
- . I GMTSFCRT["^AUTTHF(" D Q
- ..S GMTSTYPE=$S($P($G(@($P(GMTSFCRT,")",1)_",0)")),"^",10)="C":"CATEGORY",$P($G(@($P(GMTSFCRT,")",1)_",0)")),"^",10)="F":"FACTOR",1:" ")
- ..S GMTSUB=$$LJ^XLFSTR($P($G(@($P(GMTSFCRT,")",1)_",0)")),"^",1),42)_GMTSTYPE,GMTSC=GMTSC+1,ARY(GMTSC)=GMTSUB,ARY(0)=+GMTSC
- . S GMTSUB=$P($G(@($P(GMTSFCRT,")",1)_",0)")),"^",1),GMTSC=GMTSC+1,ARY(GMTSC)=GMTSUB,ARY(0)=+GMTSC
- Q
- COMPILE(GMTEST) ; Compile Menu
- N GMC,GMI,GMJ,GMROOT
- S GMI=0 F S GMI=$O(^LAB(60,GMTEST,2,GMI)) Q:GMI'>0 D
- . S GMJ=+$G(^LAB(60,GMTEST,2,+GMI,0))
- . S GMROOT=$G(^LAB(60,+GMJ,0))
- . I $L($P(GMROOT,U,5)) D
- . . S GMC=+$P($G(^XUTL("OR",$J,"GMTS",0)),U,4)+1
- . . S ^XUTL("OR",$J,"GMTS",GMJ,0)=$P(GMROOT,U),$P(^XUTL("OR",$J,"GMTS",0),U,4)=GMC
- . E D COMPILE(+$G(^LAB(60,GMTEST,2,GMI,0)))
- Q
- W !!?15,"Select the tests which you wish to include, in the",!?19,"sequence in which you wish them to appear."
- W !!?((80-$L(GMHEAD))\2),GMHEAD,!
- Q
- DELCOSMO(X1,X2,X3) ; Delete Cosmic Lab Tests from Selection Items
- N TEST S TEST=$G(^GMT(142,X1,1,X2,1,X3,0))
- K ^GMT(142,X1,1,X2,1,"B",TEST),^GMT(142,X1,1,X2,1,X3,0)
- Q
- --- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HGMTSRM3 5221 printed Feb 18, 2025@23:26:31 Page 2
- GMTSRM3 ; SLC/DLT - Create/Modify - Selection Items ; 08/27/2002
- +1 ;;2.7;Health Summary;**56,62,63**;Oct 20, 1995
- +2 ;
- +3 ; External References
- +4 ; DBIA 2160 ^XUTL("OR")
- +5 ; DBIA 67 ^LAB(60,
- +6 ; DBIA 3137 EN^ORUS
- +7 ;
- EN ; Entry Logic for Selection Items
- +1 NEW GMTSN
- WRITE !!,$SELECT($ORDER(^GMT(142,DA(1),1,DA,1,0)):"Current selection items are: ",1:"No selection items chosen.")
- +2 SET GMTSN=0
- FOR
- SET GMTSN=$ORDER(^GMT(142,DA(1),1,DA,1,GMTSN))
- if +GMTSN'>0
- QUIT
- SET GMTSN(0)=^(GMTSN,0)
- DO SHOWSEL
- +3 WRITE !!,"Select new items one at a time in the sequence you want them displayed."
- +4 WRITE !,"You may select "
- IF SELCNT=""
- WRITE "any number of items.",!
- +5 IF '$TEST
- WRITE "up to ",SELCNT," items.",!
- +6 QUIT
- SHOWSEL ; Writes Current Selection Items
- +1 WRITE ?30,$PIECE(@("^"_$PIECE(GMTSN(0),";",2)_+GMTSN(0)_",0)"),U),!
- +2 QUIT
- EXIT ; Exit Logic for Selection Items
- +1 NEW GMTSN,SELREF,GMREF
- IF +X
- IF (X["LAB(60,")
- Begin DoDot:1
- +2 SET SELREF=U_$PIECE(X,";",2)_+X_","
- SET GMREF=X
- +3 IF '$LENGTH($PIECE($GET(@(SELREF_"0)")),U,5))
- DO RESOLVE(GMREF)
- End DoDot:1
- +4 IF $SELECT('$DATA(DA(1)):1,'$DATA(DA(2)):1,1:0)
- QUIT
- +5 SET (GMTSNCNT,GMTSN)=0
- FOR
- SET GMTSN=$ORDER(^GMT(142,DA(2),1,DA(1),1,GMTSN))
- if 'GMTSN
- QUIT
- SET GMTSNCNT=GMTSNCNT+1
- +6 SET $PIECE(^GMT(142,DA(2),1,DA(1),1,0),U,4)=GMTSNCNT
- +7 IF SELCNT
- IF (GMTSNCNT'<SELCNT)
- WRITE !?2,$CHAR(7),"MAXIMUM # OF ITEMS SELECTED.",!
- +8 QUIT
- RESOLVE(GMREF) ; Resolve Compound Items
- +1 NEW C,IEN,GMI,GMHEAD,P,X,Y
- KILL ^XUTL("OR",$JOB,"ORU"),^("ORV"),^("ORW")
- +2 SET GMHEAD="-- "_$PIECE($GET(^LAB(60,+GMREF,.1)),U)_" --"
- +3 SET ^XUTL("OR",$JOB,"GMTS",0)="LAB TEST^1^^0"
- DO COMPILE(+GMREF)
- +4 SET ORUS="^XUTL(""OR"","_$JOB_",""GMTS"","
- SET ORUS("T")="D HEADER^GMTSRM3"
- +5 IF +$GET(SELCNT)
- Begin DoDot:1
- +6 SET ORUS(0)="40MN^"_SELCNT
- +7 SET ORUS("A")="Select 1 - "_SELCNT_" LAB TEST(s): "
- SET ORUS("B")="1-"_SELCNT
- End DoDot:1
- +8 IF '$TEST
- SET ORUS(0)="40MN"
- SET ORUS("A")="Select LAB TEST(s): "
- SET ORUS("B")="ALL"
- +9 DO EN^ORUS
- KILL ^XUTL("OR",$JOB,"GMTS"),^("ORU"),^("ORV"),^("ORW")
- +10 IF $SELECT('$DATA(CMP(142.14,DA)):1,$GET(CMP(142.14,DA))=GMREF:1,1:0)
- Begin DoDot:1
- +11 IF $DATA(CMP(142.14,+$ORDER(CMP(142.14,DA))))
- Begin DoDot:2
- +12 SET GMI=DA
- FOR
- SET GMI=$ORDER(CMP(142.14,GMI))
- if +GMI'>0!(GMI'<(DA+Y))
- QUIT
- SET CMP(142.14,GMI+Y)=CMP(142.14,GMI)
- End DoDot:2
- +13 SET GMI=0
- FOR
- SET GMI=$ORDER(Y(GMI))
- if GMI'>0
- QUIT
- Begin DoDot:2
- +14 IF '$DATA(^GMT(142,+$GET(DA(2)),1,+$GET(DA(1)),1,"B",+$GET(Y(GMI))_";LAB(60,"))
- Begin DoDot:3
- +15 SET CMP(142.14,((GMI-1)+DA))=+$GET(Y(GMI))_";LAB(60,"
- End DoDot:3
- End DoDot:2
- End DoDot:1
- +16 SET IEN=0
- FOR
- SET IEN=$ORDER(CMP(142.14,IEN))
- if IEN'>0
- QUIT
- Begin DoDot:1
- +17 IF $DATA(^GMT(142,+$GET(DA(2)),1,+$GET(DA(1)),1,"B",CMP(142.14,IEN)))
- WRITE $CHAR(7),!," Duplicate test omitted."
- KILL CMP(142.14,IEN)
- QUIT
- +18 DO LOADSEL^GMTSRM1A
- End DoDot:1
- +19 IF $PIECE($GET(^LAB(60,+$GET(^GMT(142,+DA(2),1,+DA(1),1,+DA,0)),0)),U,5)']""
- Begin DoDot:1
- +20 NEW REC,SUBREC,SUBSUB
- SET REC=DA(2)
- SET SUBREC=DA(1)
- SET SUBSUB=DA
- +21 DO DELCOSMO(REC,SUBREC,SUBSUB)
- End DoDot:1
- +22 QUIT
- REITEM(GMTST,GMTSS) ; Resequence Items
- +1 if +($GET(GMTST))'>0
- QUIT
- if '$DATA(^GMT(142,+($GET(GMTST))))
- QUIT
- +2 if +($GET(GMTSS))'>0
- QUIT
- if '$DATA(^GMT(142,+GMTST,1,+($GET(GMTSS))))
- QUIT
- +3 NEW DIR,DTOUT,DUOUT,DIRUT,DIROUT,GMTSA,GMTSCN,GMTSCA,GMTSMAX,GMTSN,GMTSI,Y,X
- +4 DO ARY(GMTST,GMTSS,.GMTSA)
- if +($GET(GMTSA(0)))'>1
- QUIT
- +5 SET GMTSCN=$PIECE($GET(^GMT(142,GMTST,1,GMTSS,0)),"^",2)
- SET GMTSCA=$PIECE($GET(^GMT(142.1,+GMTSCN,0)),"^",4)
- SET GMTSCN=$PIECE($GET(^GMT(142.1,+GMTSCN,0)),"^",1)
- +6 WRITE !,?1,GMTSCN," ",$SELECT($LENGTH(GMTSCA):"(",1:""),GMTSCA,$SELECT($LENGTH(GMTSCA):")",1:"")
- +7 SET GMTSN=0
- FOR
- SET GMTSN=$ORDER(GMTSA(GMTSN))
- if +GMTSN=0
- QUIT
- WRITE !,$JUSTIFY(GMTSN,6)," ",GMTSA(GMTSN)
- +8 SET DIR(0)="YAO"
- SET DIR("?")="^D RIH^GMTSRM3"
- SET DIR("A")=" Do you want to resequence the selection items? "
- +9 WRITE !
- DO ^DIR
- IF $DATA(DTOUT)!($DATA(DUOUT))!($DATA(DIRUT))!($DATA(DIROUT))
- QUIT
- +10 if +Y'>0
- QUIT
- +11 NEW DA
- SET DA(2)=+($GET(GMTST))
- SET DA(1)=+($GET(GMTSS))
- DO RSI^GMTSRS2
- +12 QUIT
- RIH ; Resequence Items Help
- +1 WRITE !,?4,"Enter either 'Y' or 'N'."
- QUIT
- ARY(GMTST,GMTSS,ARY) ; Array of Items
- +1 NEW GMTSC,GMTSI,GMTSVAL,GMTSPTR,GMTSFRT,GMTSCRT,GMTSFFRT,GMTSFCRT,GMTSTYPE
- +2 NEW GMTSRT,GMTSUB
- SET ARY(0)=0
- if +($GET(GMTST))'>0
- QUIT
- if '$DATA(^GMT(142,+($GET(GMTST))))
- QUIT
- if +($GET(GMTSS))'>0
- QUIT
- if '$DATA(^GMT(142,+GMTST,1,+($GET(GMTSS))))
- QUIT
- +3 SET (GMTSC,GMTSI)=0
- FOR
- SET GMTSI=$ORDER(^GMT(142,GMTST,1,GMTSS,1,GMTSI))
- if +GMTSI=0
- QUIT
- Begin DoDot:1
- +4 SET GMTSVAL=$GET(^GMT(142,GMTST,1,GMTSS,1,GMTSI,0))
- SET GMTSPTR=+GMTSVAL
- SET GMTSFRT=$PIECE(GMTSVAL,";",2)
- if GMTSFRT'["("
- QUIT
- if GMTSFRT'["^"
- SET GMTSFRT="^"_GMTSFRT
- +5 SET GMTSCRT=$$CREF^DILF(GMTSFRT)
- SET GMTSFFRT=GMTSFRT_GMTSPTR_","
- +6 SET GMTSFCRT=$$CREF^DILF(GMTSFFRT)
- if '$DATA(@GMTSFCRT)
- QUIT
- if '$LENGTH($GET(@($PIECE(GMTSFCRT,")",1)_",0)")))
- QUIT
- +7 IF GMTSFCRT["^AUTTHF("
- Begin DoDot:2
- +8 SET GMTSTYPE=$SELECT($PIECE($GET(@($PIECE(GMTSFCRT,")",1)_",0)")),"^",10)="C":"CATEGORY",$PIECE($GET(@($PIECE(GMTSFCRT,")",1)_",0)")),"^",10)="F":"FACTOR",1:" ")
- +9 SET GMTSUB=$$LJ^XLFSTR($PIECE($GET(@($PIECE(GMTSFCRT,")",1)_",0)")),"^",1),42)_GMTSTYPE
- SET GMTSC=GMTSC+1
- SET ARY(GMTSC)=GMTSUB
- SET ARY(0)=+GMTSC
- End DoDot:2
- QUIT
- +10 SET GMTSUB=$PIECE($GET(@($PIECE(GMTSFCRT,")",1)_",0)")),"^",1)
- SET GMTSC=GMTSC+1
- SET ARY(GMTSC)=GMTSUB
- SET ARY(0)=+GMTSC
- End DoDot:1
- +11 QUIT
- COMPILE(GMTEST) ; Compile Menu
- +1 NEW GMC,GMI,GMJ,GMROOT
- +2 SET GMI=0
- FOR
- SET GMI=$ORDER(^LAB(60,GMTEST,2,GMI))
- if GMI'>0
- QUIT
- Begin DoDot:1
- +3 SET GMJ=+$GET(^LAB(60,GMTEST,2,+GMI,0))
- +4 SET GMROOT=$GET(^LAB(60,+GMJ,0))
- +5 IF $LENGTH($PIECE(GMROOT,U,5))
- Begin DoDot:2
- +6 SET GMC=+$PIECE($GET(^XUTL("OR",$JOB,"GMTS",0)),U,4)+1
- +7 SET ^XUTL("OR",$JOB,"GMTS",GMJ,0)=$PIECE(GMROOT,U)
- SET $PIECE(^XUTL("OR",$JOB,"GMTS",0),U,4)=GMC
- End DoDot:2
- +8 IF '$TEST
- DO COMPILE(+$GET(^LAB(60,GMTEST,2,GMI,0)))
- End DoDot:1
- +9 QUIT
- +1 WRITE !!?15,"Select the tests which you wish to include, in the",!?19,"sequence in which you wish them to appear."
- +2 WRITE !!?((80-$LENGTH(GMHEAD))\2),GMHEAD,!
- +3 QUIT
- DELCOSMO(X1,X2,X3) ; Delete Cosmic Lab Tests from Selection Items
- +1 NEW TEST
- SET TEST=$GET(^GMT(142,X1,1,X2,1,X3,0))
- +2 KILL ^GMT(142,X1,1,X2,1,"B",TEST),^GMT(142,X1,1,X2,1,X3,0)
- +3 QUIT