PXRMLRM ; SLC/PJH/PKR - List Rule Management ; 09/06/2007
 ;;2.0;CLINICAL REMINDERS;**4,6**;Feb 04, 2005;Build 123
 ;
 ;Main entry point for PXRM LIST RULE MANAGEMENT
START N PXRMDONE,PXRMTYP,VALMBCK,VALMCNT,VALMSG,X,XMZ,XQORM,XQORNOD
 S X="IORESET"
 D ENDR^%ZISS
 S VALMCNT=0
 ;Default view is Rule Sets
 S PXRMTYP=3
 D EN^VALM("PXRM LIST RULE MANAGEMENT")
 Q
 ;
BLDLIST ;Build workfile
 K ^TMP("PXRMLRM",$J)
 N IEN,IND,PLIST
 D LIST(.PLIST,.IEN,PXRMTYP)
 M ^TMP("PXRMLRM",$J)=PLIST
 S VALMCNT=PLIST("VALMCNT")
 F IND=1:1:VALMCNT D
 .S ^TMP("PXRMLRM",$J,"IDX",IND,IND)=IEN(IND)
 I PXRMTYP=1 D CHGCAP^VALM("HEADER2","Finding Rule Name")
 I PXRMTYP=2 D CHGCAP^VALM("HEADER2","Reminder Rule Name")
 I PXRMTYP=3 D CHGCAP^VALM("HEADER2","Rule Set Name")
 I PXRMTYP=4 D CHGCAP^VALM("HEADER2","Report Output Rule Name")
 I PXRMTYP=5 D CHGCAP^VALM("HEADER2","Patient List Rule Name")
 Q
 ;
ENTRY ;Entry code
 D BLDLIST,XQORM
 Q
 ;
EXIT ;Exit code
 K ^TMP("PXRMLRM",$J)
 K ^TMP("PXRMLRMH",$J)
 D CLEAN^VALM10
 D FULL^VALM1
 S VALMBCK="Q"
 Q
 ;
FRE(NUMBER,NAME,CLASS) ;Format  entry number, name
 ;and date packed.
 N TCLASS,TEMP,TNAME,TSOURCE
 S TEMP=$$RJ^XLFSTR(NUMBER,5," ")
 S TNAME=$E(NAME,1,60)
 S TEMP=TEMP_"  "_$$LJ^XLFSTR(TNAME,60," ")
 S TCLASS=$S(CLASS="N":"NATIONAL",CLASS="V":"VISN",1:"LOCAL")
 S TEMP=TEMP_"  "_TCLASS
 Q TEMP
 ;
HDR ; Header code
 S VALMSG="+ Next Screen   - Prev Screen   ?? More Actions"
 Q
 ;
HELP(CALL) ;General help text routine
 N HTEXT
 I CALL=1 D
 .S HTEXT(1)="Select DE to display or edit a rule.\\"
 .S HTEXT(2)="Select ED to edit a rule.\\"
 ;
 I CALL=2 D
 .S HTEXT(1)="Select F to edit term based finding rules.\\"
 .S HTEXT(2)="Select P to edit patient list based finding rules.\\"
 .S HTEXT(3)="Select R to edit reminder rules.\\"
 .S HTEXT(4)="Select S to edit rule sets. A rule set may contain"
 .S HTEXT(5)="any of the following:\\"
 .S HTEXT(6)=" finding list rules, patient list rules, reminder rules\\"
 .S HTEXT(7)="These component list rules must be created before the rule set"
 .S HTEXT(8)="can be constructed."
 ;
 D HELP^PXRMEUT(.HTEXT)
 Q
 ;
HLP ;Help code
 N ORU,ORUPRMT,SUB,XQORM
 S SUB="PXRMLRMH"
 D EN^VALM("PXRM LIST RULE HELP")
 Q
 ;
INIT ;Init
 S VALMCNT=0
 Q
 ;
LIST(RLIST,IEN,LRTYP) ;Build a list of list rule entries.
 N DATA,IND,LRCLASS,LRNAME,NAME
 ;Build the list in alphabetical order.
 S VALMCNT=0
 S NAME=""
 F  S NAME=$O(^PXRM(810.4,"B",NAME)) Q:NAME=""  D
 .S IND=$O(^PXRM(810.4,"B",NAME,"")) Q:'IND
 .S DATA=$G(^PXRM(810.4,IND,0))
 .I $P(DATA,U,3)'=LRTYP Q
 .S LRNAME=$P(DATA,U)
 .S LRCLASS=$P($G(^PXRM(810.4,IND,100)),U)
 .S VALMCNT=VALMCNT+1
 .S RLIST(VALMCNT,0)=$$FRE(VALMCNT,LRNAME,LRCLASS)
 .S IEN(VALMCNT)=IND
 S RLIST("VALMCNT")=VALMCNT
 Q
 ;
LRADD ;Add Rule Option
 ;
 ;Reset Screen Mode
 W IORESET
 ;
 ;Add Rule
 D ADD^PXRMLRED
 ;
 ;Rebuild Workfile
 D BLDLIST
 S VALMBCK="R"
 Q
 ;
LRINQ ;Rule Inquiry - PXRM LIST RULE DISPLAY/EDIT entry 
 N IND,LRIEN,VALMY
 D EN^VALM2(XQORNOD(0))
 ;If there is no list quit.
 I '$D(VALMY) Q
 S PXRMDONE=0
 S IND=""
 F  S IND=$O(VALMY(IND)) Q:(+IND=0)!(PXRMDONE)  D
 .;Get the ien.
 .S LRIEN=^TMP("PXRMLRM",$J,"IDX",IND,IND)
 .D START^PXRMLRED(LRIEN,PXRMTYP)
 D BLDLIST
 S VALMBCK="R"
 Q
 ;
PEXIT ;Protocol exit code
 S VALMSG="+ Next Screen   - Prev Screen   ?? More Actions"
 ;Reset after page up/down etc
 D XQORM
 Q
 ;
VIEW ;Select view
 W IORESET
 S VALMBCK="R"
 N X,Y,CODE,DIR
 K DIROUT,DIRUT,DTOUT,DUOUT
 S DIR(0)="S"_U_"F:Finding Rule;"
 S DIR(0)=DIR(0)_"P:Patient List Rule;"
 S DIR(0)=DIR(0)_"R:Reminder Rule;"
 S DIR(0)=DIR(0)_"S:Rule Set;"
 S DIR("A")="TYPE OF VIEW"
 S DIR("B")="F"
 S DIR("?")="Select from the codes displayed. For detailed help type ??"
 S DIR("??")=U_"D HELP^PXRMLRM(2)"
 D ^DIR K DIR
 I $D(DIROUT) S DTOUT=1
 I $D(DTOUT)!($D(DUOUT)) Q
 ;Change display type
 S PXRMTYP=$S(Y="F":1,Y="P":5,Y="S":3,1:4)
 S PXRMTYP=$S(Y="F":1,Y="P":5,Y="S":3,Y="R":2,1:4)
 ;Rebuild Workfile
 D BLDLIST,HDR
 Q
 ;
XSEL ;PXRM LIST RULE MANAGEMENT SELECT ENTRY validation
 N SEL,IEN
 S SEL=$P(XQORNOD(0),"=",2)
 ;Remove trailing ,
 I $E(SEL,$L(SEL))="," S SEL=$E(SEL,1,$L(SEL)-1)
 ;Invalid selection
 I SEL["," D  Q
 .W $C(7),!,"Only one item number allowed." H 2
 .S VALMBCK="R"
 I ('SEL)!(SEL>VALMCNT)!('$D(@VALMAR@("IDX",SEL))) D  Q
 .W $C(7),!,SEL_" is not a valid item number." H 2
 .S VALMBCK="R"
 ;
 ;Get the list ien.
 S IEN=^TMP("PXRMLRM",$J,"IDX",SEL,SEL)
 ;
 ;Option to Display/Edit or Test Rule Set.
 N DIR,OPTION,RIEN,X,Y
 K DIROUT,DIRUT,DTOUT,DUOUT
 S DIR(0)="SBM"_U_"DR:Display/Edit Rule;"
 I $G(PXRMTYP)=3 S DIR(0)=DIR(0)_"TEST:Test Rule Set"
 S DIR("A")="Select Action: "
 S DIR("B")="DR"
 S DIR("?")="Select from the codes displayed."
 D ^DIR K DIR
 I $D(DIROUT) S DTOUT=1
 I $D(DTOUT)!($D(DUOUT)) S VALMBCK="R" Q
 S OPTION=Y
 I $G(OPTION)="" G XSELE
 ;
 ;Display/Edit
 I OPTION="DR"   D START^PXRMLRED(IEN,PXRMTYP)
 Q:$D(DUOUT)!$D(DTOUT)
 ;
 ;Rule set test
 I OPTION="TEST" D RSTEST^PXRMRST(IEN)
 Q:$D(DUOUT)!$D(DTOUT)
 ;
XSELE ;
 D CLEAN^VALM10
 D BLDLIST,XQORM
 S VALMBCK="R"
 Q
 ;
XQORM S XQORM("#")=$O(^ORD(101,"B","PXRM LIST RULE MANAGEMENT SELECT ENTRY",0))_U_"1:"_VALMCNT
 S XQORM("A")="Select Item: "
 Q
 ;
