BUSRUPD4 ;IHS/MSC/MGH - Authorization/Subscription Service ;11-Sep-2012 12:49;DU
;;1.0;AUTHORIZATION/SUBSCRIPTION;**1004**;APR 24, 1997;Build 15
;=================================================================
;
;
ENV ;Environment checker for USR updates
N PATCH
S (XPDDIQ("XPZ1"),XPDDIQ("XPZ2"))=0
;
S PATCH="USR*1.0*1003"
I '$$PATCH(PATCH) D Q
. W !,"You must first install "_PATCH_"." S XPDQUIT=2
S (XPDDIQ("XPZ1"),XPDDIQ("XPZ2"))=0
Q
PATCH(X) ;return 1 if patch X was installed, X=aaaa*nn.nn*nnnn
;copy of code from XPDUTL but modified to handle 4 digit IHS patch numbers
Q:X'?1.4UN1"*"1.2N1"."1.2N.1(1"V",1"T").2N1"*"1.4N 0
NEW NUM,I,J
S I=$O(^DIC(9.4,"C",$P(X,"*"),0)) Q:'I 0
S J=$O(^DIC(9.4,I,22,"B",$P(X,"*",2),0)),X=$P(X,"*",3) Q:'J 0
;check if patch is just a number
Q:$O(^DIC(9.4,I,22,J,"PAH","B",X,0)) 1
S NUM=$O(^DIC(9.4,I,22,J,"PAH","B",X_" SEQ"))
Q (X=+NUM)
POST ; Create new Business Rules
; Create rules for ONE User Class & ONE DDEF
; -- Set data for rules:
;If rules already exist, quit
N CLASS,ACTION,DOC,STATUS,RULENUM
S RULENUM=0
S DOC="PATIENT RECORD FLAG CAT I",STATUS="UNSIGNED",CLASS="PROVIDER",ACTION="LINK TO FLAG"
D DO(DOC,STATUS,CLASS,ACTION)
S DOC="PATIENT RECORD FLAG CAT II",STATUS="UNSIGNED",CLASS="PROVIDER",ACTION="LINK TO FLAG"
D DO(DOC,STATUS,CLASS,ACTION)
S DOC="PATIENT RECORD FLAG CAT I",STATUS="COMPLETED",CLASS="CHIEF, MIS",ACTION="LINK TO FLAG"
D DO(DOC,STATUS,CLASS,ACTION)
S DOC="PATIENT RECORD FLAG CAT II",STATUS="COMPLETED",CLASS="CHIEF, MIS",ACTION="LINK TO FLAG"
D DO(DOC,STATUS,CLASS,ACTION)
D PROCESS
D ROLE
Q
DO(DOC,STATUS,CLASS,ACTION) ;DO THE ACTION,STATUS,DOC
N CL,ST,MSG,VIEW,PRINT,IEN,USR
S CL=$$FIND1^DIC(8925.1,,"BO",DOC,,,"MSG")
I $D(MSG) D Q
.W !!,"Unable to find the document class "_DOC_" Rules cannot be added."
S ST=$$FIND1^DIC(8930.6,,,STATUS,,,"MSG")
I $D(MSG) D Q
.W !!,"Unable to find the status "_STATUS_" Rules cannot be added"
S USR=$$FIND1^DIC(8930,,,CLASS,,,"MSG")
I $D(MSG) D Q
.W !!,"Unable to find the user class "_USR_" Rules cannot be added."
S VIEW=$$FIND1^DIC(8930.8,,,ACTION,,,"MSG")
I $D(MSG) D Q
.W !!,"Unable to find the action "_VIEW_" Rules cannot be added."
S IEN="" S IEN=$O(^USR(8930.1,"AC",CL,ST,VIEW,USR,IEN))
;Only add if this rule does not exist
I IEN="" D
. S RULENUM=RULENUM+1
. D SETDATA(RULENUM,VIEW)
Q
PROCESS ; -- Loop through numbered list of rules:
N NUM,SUCCESS
S SUCCESS=1,NUM=0
I '$O(^TMP("USR1004",$J,"RULES",0)) S SUCCESS=0 W "Business rules already exist" Q
F S NUM=$O(^TMP("USR1004",$J,"RULES",NUM)) Q:'NUM D
.N USRERR,FDA,DESC
.M FDA(8930.1,"+1,")=^TMP("USR1004",$J,"RULES",NUM)
.M DESC=^TMP("USR1004",$J,"RULESDESC")
.S FDA(8930.1,"+1,",1)="DESC"
.D UPDATE^DIE("","FDA","","USRERR")
.I $D(USRERR) S SUCCESS=0 Q
.K ^TMP("USR1004",$J,"RULES",NUM)
K ^TMP("USR1004",$J,"RULESDESC")
I '$G(SUCCESS) D Q
. W "Problem creating Business Rules. Please contact National VistA Support."
W !,"Business Rules created successfully."
Q
;
SETDATA(RULENUM,ACTION) ; Set data for rules
; -- Set data for exported Rules into Rule nodes of ^TMP.
; Use interior data since there may be dup DDEF names.
; Must set AFTER User Class is created:
N DDEFIEN,USRCLASS,EXACTION
S ^TMP("USR1004",$J,"RULES",RULENUM,.01)=CL
S ^TMP("USR1004",$J,"RULES",RULENUM,.04)=USR
S ^TMP("USR1004",$J,"RULES",RULENUM,.02)=ST
S ^TMP("USR1004",$J,"RULES",RULENUM,.03)=VIEW
S ^TMP("USR1004",$J,"RULESDESC",1)="Rule created by patch USR*1*1004."
S ^TMP("USR1004",$J,"RULESDESC",2)="Rules allowing PRF documents to be linked."
Q
ROLE ;Set business rules
N CL,ST,ACTION,MSG,RULENUM,VIEW,PRINT,IEN,USR,DOC,STATUS,ACTION,ROLE
S DOC="CLINICAL DOCUMENTS",STATUS="UNSIGNED",ACTION="SIGNATURE",ROLE="SURROGATE"
S RULENUM=0
S CL=$$FIND1^DIC(8925.1,,,DOC,,,"MSG")
I $D(MSG) D Q
.W !!,"Unable to find the document class "_DOC_" Rules cannot be added."
S ST=$$FIND1^DIC(8930.6,,,STATUS,,,"MSG")
I $D(MSG) D Q
.W !!,"Unable to find the status "_STATUS_" Rules cannot be added"
S USR=$$FIND1^DIC(8930.2,,,ROLE,,,"MSG")
I $D(MSG) D Q
.W !!,"Unable to find the user class "_USR_" Rules cannot be added."
S VIEW=$$FIND1^DIC(8930.8,,,ACTION,,,"MSG")
I $D(MSG) D Q
.W !!,"Unable to find the action "_VIEW_" Rules cannot be added."
S IEN="" S IEN=$O(^USR(8930.1,"AR",CL,ST,VIEW,USR,IEN))
;Only add if this rule does not exist
I IEN="" D
. S RULENUM=RULENUM+1
. S ^TMP("USR1004",$J,"RULES",RULENUM,.01)=CL
. S ^TMP("USR1004",$J,"RULES",RULENUM,.06)=USR
. S ^TMP("USR1004",$J,"RULES",RULENUM,.02)=ST
. S ^TMP("USR1004",$J,"RULES",RULENUM,.03)=VIEW
. S ^TMP("USR1004",$J,"RULESDESC",1)="Rule created by patch USR*1*1004."
. S ^TMP("USR1004",$J,"RULESDESC",2)="Rules allowing SURROGATES TO SIGN documents."
. N NUM,SUCCESS
. S SUCCESS=1,NUM=0
. ; -- Loop through numbered list of rules:
. I '$O(^TMP("USR1004",$J,"RULES",0)) S SUCCESS=0 W "Business rules already exist" Q
. S NUM=$O(^TMP("USR1004",$J,"RULES",NUM)) Q:'NUM D
..N USRERR,FDA,DESC
..M FDA(8930.1,"+1,")=^TMP("USR1004",$J,"RULES",NUM)
..M DESC=^TMP("USR1004",$J,"RULESDESC")
..S FDA(8930.1,"+1,",1)="DESC"
..D UPDATE^DIE("","FDA","","USRERR")
..I $D(USRERR) S SUCCESS=0 Q
..K ^TMP("USR1004",$J,"RULES",NUM)
..K ^TMP("USR1004",$J,"RULESDESC")
.I '$G(SUCCESS) D Q
..W "Problem creating Business Rules. Please contact National VistA Support."
.W !,"Business Rules created successfully."
SETX ;
Q