PXRMCOND ; SLC/PKR - Routines for evaluating conditions. ;11/01/2004 ;;2.0;CLINICAL REMINDERS;;Feb 04, 2005 ; ;============================================================ CASESEN(X,DA,FILENUM) ; ;Called by xref on condition case sensitive field in 811.5 and 811.9. N COND,GBL S GBL=$$GET1^DID(FILENUM,"","","GLOBAL NAME") S GBL=GBL_DA(1)_",20,"_DA_",3)" S COND=$P(@GBL,U,1) D SICOND(COND,.DA,FILENUM) Q ; ;============================================================ COND(CASESEN,ICOND,VSLIST,VA) ;Evaluate the condition. N CONVAL,IND,JND,NSTAR,SUB,TEMP,V,VSTAR S CONVAL="" ;If there is no condition return true. I $L($G(ICOND))=0 Q 1 S NSTAR=0 F IND=1:1 S SUB=$P(VSLIST,";",IND) Q:SUB="" D . I SUB["*" S NSTAR=NSTAR+1,VSTAR(NSTAR)=$L(SUB,",")_U_SUB S V=$G(VA("VALUE")) I 'CASESEN S V=$$UP^XLFSTR(V) ;Move all non "*" elements of VA into V. I VSLIST'="" D MV(VSLIST,CASESEN,.V,.VA) I NSTAR=0 X ICOND S CONVAL=$T I NSTAR>0 S CONVAL=$$STARCOND(CASESEN,ICOND,.V,.VA,NSTAR,.VSTAR) Q CONVAL ; ;============================================================ KICOND(X,DA,FILENUM) ; ;Do not execute as part of a verify fields. I $G(DIUTIL)="VERIFY FIELDS" Q ;Do not execute as part of exchange. I $G(PXRMEXCH) Q S FILENUM=$G(FILENUM) I FILENUM=811.5 K ^PXRMD(811.5,DA(1),20,DA,10),^PXRMD(811.5,DA(1),20,DA,11) I FILENUM=811.9 K ^PXD(811.9,DA(1),20,DA,10),^PXD(811.9,DA(1),20,DA,11) Q ; ;============================================================ MV(VSLIST,CASESEN,V,VA) ;Move the elements of VA included in VSLIST ;into V and uppercase if necessary. N IND,NE,RV,RVA,SUB S NE=$L(VSLIST,";")-1 F IND=1:1:NE D . S SUB=$P(VSLIST,";",IND) . I SUB["*" Q . S RV="V("_SUB_")",RVA="VA("_SUB_")" .;If VA(SUB) does not exist skip it. . I '$D(@RVA) Q . S @RV=$S('CASESEN:$$UP^XLFSTR(@RVA),1:@RVA) Q ; ;============================================================ RECSUB(IND,V,VA,NSTAR,VSTAR,NM,VM,CASESEN,ICOND,CONVAL) ;Called recursively, ;first substitutes V array elements with "*" in subscript with a ;replacement value. Once all have been replaced test condition and ;quit if true. If not true continue until all combinations have been ;tested. N JND,RV,RVA,VSUB,VASUB F JND=1:1:NM(IND) Q:CONVAL D . S VASUB=VM(IND,JND) . S RVA="VA("_VASUB_")" . S SUB=$P(VSTAR(IND),U,2) . S RV="V("_SUB_")" . S @RV=$S('CASESEN:$$UP^XLFSTR(@RVA),1:@RVA) . I IND$P(QP(JND),U,1),SPACE<$P(QP(JND),U,2) S IQ=1,JND=NQP Q . S NIQ=$S(IQ:0,1:1) . I NIQ S IND=NSP Q I NIQ D . D EN^DDIOL("No spaces are allowed except in quoted strings!") . S VALID=0 Q VALID ; ;============================================================ VSUB(COND) ;Make sure all V subscripts are quoted strings, numbers ;or quoted * strings. N IND,RP,SS,SUB,SUBL,VALID S (SS,VALID)=1 F S SS=$F(COND,"V(",SS) Q:('VALID)!(SS=0) D . S RP=$F(COND,")",SS)-2 . I RP=-2 D Q .. N TEXT .. S TEXT=$E(COND,SS-2,$L(COND))_" is missing a "")""" .. D EN^DDIOL(TEXT) .. S VALID=0 . S SUBL=$E(COND,SS,RP) . F IND=1:1:$L(SUBL,",") D .. S SUB=$P(SUBL,",",IND) ..;Check for a number. .. I SUB=+SUB Q ..;Check for a wildcard, must be in quotes any number of * allowed. .. I SUB?1"""1"*"."*"""" Q .. ;Check for first and last character = to a ". .. I ($E(SUB,1)'="""")!($E(SUB,$L(SUB))'="""") S VALID=0 I 'VALID D EN^DDIOL("All V subscripts must be quoted strings, numbers or *!") Q VALID ;