- OCXOCMP9 ;SLC/RJS,CLA - ORDER CHECK CODE COMPILER (Build List of Active Rules, Elements and Data Fields) ;3/27/01 07:29
- ;;3.0;ORDER ENTRY/RESULTS REPORTING;**32,105**;Dec 17,1997
- ;; ;;ORDER CHECK EXPERT version 1.01 released OCT 29,1998
- ;
- Q
- EN() ;
- Q:$G(OCXWARN) 1
- ;
- S OCXDLK=$O(^OCXS(860.6,"B","DATABASE LOOKUP",0))
- ;
- N RESCAN
- ;
- S OCXD0=0 F S OCXD0=$O(^OCXS(860.2,OCXD0)) Q:'OCXD0 D
- .Q:$G(^OCXS(860.2,OCXD0,"INACT"))
- .I '$G(OCXAUTO) W:($X>60) ! W "."
- .S ^TMP("OCXCMP",$J,"RULE",OCXD0)=""
- .S OCXD1=0 F S OCXD1=$O(^OCXS(860.2,OCXD0,"C",OCXD1)) Q:'OCXD1 D Q:OCXWARN
- ..N OCXEL,OCXEXP
- ..S OCXEL=+$P($G(^OCXS(860.2,OCXD0,"C",OCXD1,0)),U,2) I OCXEL,$D(^OCXS(860.3,OCXEL,0)) D
- ...I '$G(OCXAUTO) W:($X>60) ! W "."
- ...S ^TMP("OCXCMP",$J,"ELEMENT",OCXEL)=$G(^TMP("OCXCMP",$J,"ELEMENT",OCXEL))+1
- ...S ^TMP("OCXCMP",$J,"ELEMENT",OCXEL,"CON")=+$P($G(^OCXS(860.3,OCXEL,0)),U,2)
- ..S OCXEXP=$G(^OCXS(860.2,OCXD0,"C",OCXD1,"EXP")) I $L(OCXEXP) D GETDF(OCXD0,OCXEXP,OCXEL,0,"EXP") Q:OCXWARN
- ..S OCXEXP=$G(^OCXS(860.2,OCXD0,"C",OCXD1,"SEL")) I $L(OCXEXP) D GETDF(OCXD0,OCXEXP,OCXEL,1,"SEL") Q:OCXWARN
- .Q:OCXWARN
- .S OCXD1=0 F S OCXD1=$O(^OCXS(860.2,OCXD0,"R",OCXD1)) Q:'OCXD1 D Q:OCXWARN
- ..N OCXEXP
- ..S OCXEXP=$G(^OCXS(860.2,OCXD0,"R",OCXD1,"E")) I $L(OCXEXP) D GETDF(OCXD0,OCXEXP,0,0,"REL") Q:OCXWARN
- ..S OCXEXP=$G(^OCXS(860.2,OCXD0,"R",OCXD1,"MSG")) I $L(OCXEXP) D GETDF(OCXD0,OCXEXP,0,0,"MSG") Q:OCXWARN
- ..S OCXEXP=$G(^OCXS(860.2,OCXD0,"R",OCXD1,"OCMSG")) I $L(OCXEXP) D GETDF(OCXD0,OCXEXP,0,0,"MSG") Q:OCXWARN
- ..S OCXEXP=$G(^OCXS(860.2,OCXD0,"R",OCXD1,"RULE")) I $L(OCXEXP) D GETDF(OCXD0,OCXEXP,0,0,"MSG") Q:OCXWARN
- ..S OCXEXP=$G(^OCXS(860.2,OCXD0,"R",OCXD1,"MCODE")) I $L(OCXEXP) D GETDF(OCXD0,OCXEXP,0,0,"MCODE") Q:OCXWARN
- ;
- S OCXD1=0 F S OCXD1=$O(^TMP("OCXCMP",$J,"ELEMENT",OCXD1)) Q:'OCXD1 D Q:OCXWARN
- .S OCXD2=0 F S OCXD2=$O(^OCXS(860.3,OCXD1,"COND",OCXD2)) Q:'OCXD2 D Q:OCXWARN
- ..F OCXSUB=1,2,3 S OCXDF=+$G(^OCXS(860.3,OCXD1,"COND",OCXD2,"DFLD"_OCXSUB)) I OCXDF,$D(^OCXS(860.4,OCXDF,0)) D Q:OCXWARN
- ...I '$G(OCXAUTO) W:($X>60) ! W "."
- ...S ^TMP("OCXCMP",$J,"DATA FIELD",OCXDF)=$G(^TMP("OCXCMP",$J,"DATA FIELD",OCXDF))+1
- ;
- I $O(^TMP("OCXCMP",$J,"RULE",0)) D
- .N OCXDFN,OCXDF
- .F OCXDFN="PATIENT IEN" S OCXDF=$O(^OCXS(860.4,"B",OCXDFN,0)) D
- ..S ^TMP("OCXCMP",$J,"DATA FIELD",OCXDF)=$G(^TMP("OCXCMP",$J,"DATA FIELD",OCXDF))+1
- ;
- F D Q:'RESCAN
- .S (RESCAN,OCXD1)=0 F S OCXD1=$O(^TMP("OCXCMP",$J,"DATA FIELD",OCXD1)) Q:'OCXD1 D
- ..N OCXPATH,OCXLINK,OCXPAR,OCXVAL,OCXCON
- ..S OCXCON=0 F S OCXCON=$O(^OCXS(860.4,OCXD1,"LINK",OCXCON)) Q:'OCXCON D
- ...S OCXPATH=$G(^OCXS(860.4,OCXD1,"LINK",OCXCON,"DATAPATH")) Q:'$L(OCXPATH)
- ...S OCXLINK=$O(^OCXS(863.3,"B",OCXPATH,0)) Q:'OCXLINK
- ...S OCXPAR=0 F S OCXPAR=$O(^OCXS(863.3,OCXLINK,"PAR",OCXPAR)) Q:'OCXPAR S OCXVAL=$G(^(OCXPAR,"VAL")) D
- ....Q:'(OCXVAL["|")
- ....N OCXPIEC
- ....F OCXPIEC=2:2:$L(OCXVAL,"|") D
- .....N OCXDF,OCXDFN
- .....S OCXDF=$P(OCXVAL,"|",OCXPIEC) Q:'$L(OCXDF)
- .....S OCXDFN=0 F S OCXDFN=$O(^OCXS(860.4,"B",$E(OCXDF,1,30),OCXDFN)) Q:'OCXDFN I ($P($G(^OCXS(860.4,OCXDFN,0)),U,1)=OCXDF) D
- ......I '$D(^TMP("OCXCMP",$J,"DATA FIELD",OCXDFN)) S RESCAN=1,^TMP("OCXCMP",$J,"DATA FIELD",OCXDFN)=0
- .....S OCXDFN=0 F S OCXDFN=$O(^OCXS(860.4,"C",OCXDF,OCXDFN)) Q:'OCXDFN D
- ......I '$D(^TMP("OCXCMP",$J,"DATA FIELD",OCXDFN)) S RESCAN=1,^TMP("OCXCMP",$J,"DATA FIELD",OCXDFN)=0
- ;
- Q:$G(OCXWARN) 1 Q '$O(^TMP("OCXCMP",$J,"RULE",0))
- ;
- GETDF(OCXD0,OCXSTR,OCXELM,OCXREF,OCXSRC) ;
- ;
- N OCXPC,OCXFLD,OCXCON,OCXLABL,OCXDF,OCXFSPEC,OCXD1
- Q:'(OCXSTR["|")
- F OCXPC=2:2:$L(OCXSTR,"|") D Q:OCXWARN
- .S OCXFSPEC=$P($P(OCXSTR,"|",OCXPC),"|",1),(OCXFLD,OCXLABL)=""
- .I (OCXFSPEC[".") D Q
- ..I OCXELM,(OCXSRC="SEL") D WARN^OCXOCMPV(" '"_OCXFSPEC_"' cannot specify Label in selector.",2,OCXD0) Q
- ..S OCXLABL=$P(OCXFSPEC,".",1),OCXFLD=$P(OCXFSPEC,".",2)
- ..I '$L(OCXLABL)!'$L(OCXFLD)!($L(OCXFSPEC,".")>2) D Q
- ...D WARN^OCXOCMPV(" Illegal use of period '.' in Field Specifier '"_OCXFSPEC_"'",2,OCXD0,$P($T(+1)," ",1)) Q
- ..S OCXELE=+$P($$LABEL(OCXD0,OCXLABL),U,2) I 'OCXELE D WARN^OCXOCMPV(" Label '"_OCXLABL_"' not defined in this rule.",2,OCXD0,$P($T(+1)," ",1)) Q
- ..S OCXCON=$$DATACON(+OCXELE)
- ..I '$L(OCXCON) D WARN^OCXOCMPV(" Data context not defined for element '"_$P(^OCXS(860.3,+OCXELE,0),U,1)_"'.",2,OCXD0,$P($T(+1)," ",1)) Q
- ..S OCXDF=$$DATAFLD(OCXFLD,OCXCON)
- ..I (OCXDF=-1) D WARN^OCXOCMPV(" "_OCXFLD_" data field name not unique.",2,OCXD0,$P($T(+1)," ",1)) Q
- ..I (OCXDF=-2) D WARN^OCXOCMPV(" "_OCXFLD_" data field not in Data Field file.",2,OCXD0,$P($T(+1)," ",1)) Q
- ..I 'OCXDF S OCXDF=$$DATAFLD(OCXFLD,OCXDLK)
- ..I 'OCXDF D WARN^OCXOCMPV(" "_OCXFLD_" data field not defined for "_OCXCON_" data context.",2,OCXD0,$P($T(+1)," ",1)) Q
- ..I '$G(OCXAUTO) W:($X>60) ! W "."
- ..S ^TMP("OCXCMP",$J,"ELEMENT",OCXELE,"DATA",OCXDF)=OCXREF
- ..I '$D(^TMP("OCXCMP",$J,"DATA FIELD",OCXDF)) D
- ...I '$G(OCXAUTO) W:($X>60) ! W "."
- ...S ^TMP("OCXCMP",$J,"DATA FIELD",OCXDF)=1
- .;
- .I OCXELM D Q
- ..S OCXFLD=OCXFSPEC,OCXDF=0
- ..S OCXCON=$$DATACON(+OCXELM) Q:'$L(OCXCON)
- ..S OCXDF=$$DATAFLD(OCXFLD,OCXCON)
- ..I (OCXDF=-1) D WARN^OCXOCMPV(" "_OCXFLD_" data field name not unique.",2,OCXD0,$P($T(+1)," ",1)) Q
- ..I (OCXDF=-2) D WARN^OCXOCMPV(" "_OCXFLD_" data field not in Data Field file.",2,OCXD0,$P($T(+1)," ",1)) Q
- ..I 'OCXDF S OCXDF=$$DATAFLD(OCXFLD,OCXDLK)
- ..I 'OCXDF D WARN^OCXOCMPV(" "_OCXFLD_" data field not defined for "_OCXCON_" data context.",2,OCXD0,$P($T(+1)," ",1)) Q
- ..I '$G(OCXAUTO) W:($X>60) ! W "."
- ..S ^TMP("OCXCMP",$J,"ELEMENT",OCXELM,"DATA",OCXDF)=OCXREF
- ..I '$D(^TMP("OCXCMP",$J,"DATA FIELD",OCXDF)) D
- ...I '$G(OCXAUTO) W:($X>60) ! W "."
- ...S ^TMP("OCXCMP",$J,"DATA FIELD",OCXDF)=1
- .;
- .S OCXFLD=OCXFSPEC,OCXDF=0
- .S OCXD1=0 F S OCXD1=$O(^OCXS(860.2,OCXD0,"C",OCXD1)) Q:'OCXD1 D
- ..S OCXELE=+$P($G(^OCXS(860.2,OCXD0,"C",OCXD1,0)),U,2) Q:'OCXELE
- ..S OCXCON=$$DATACON(+OCXELE) Q:'$L(OCXCON)
- ..S OCXDF=$$DATAFLD(OCXFLD,OCXCON)
- ..I (OCXDF=-1) D WARN^OCXOCMPV(" "_OCXFLD_" data field name not unique.",2,OCXD0,$P($T(+1)," ",1)) Q
- ..I (OCXDF=-2) D WARN^OCXOCMPV(" "_OCXFLD_" data field not in Data Field file.",2,OCXD0,$P($T(+1)," ",1)) Q
- ..S:'OCXDF OCXDF=$$DATAFLD(OCXFLD,OCXDLK)
- ..Q:'OCXDF
- ..;
- ..I '$G(OCXAUTO) W:($X>60) ! W "."
- ..S ^TMP("OCXCMP",$J,"ELEMENT",OCXELE,"DATA",OCXDF)=OCXREF
- ..I '$D(^TMP("OCXCMP",$J,"DATA FIELD",OCXDF)) D
- ...I '$G(OCXAUTO) W:($X>60) ! W "."
- ...S ^TMP("OCXCMP",$J,"DATA FIELD",OCXDF)=1
- Q
- ;
- DATACON(OCXEL) ;
- ;
- Q +$P($G(^OCXS(860.3,OCXEL,0)),U,2)
- ;
- LABEL(OCXD0,OCXLABL) ;
- ;
- N OCXEL
- Q:'$L(OCXLABL) 0 S OCXEL=+$O(^OCXS(860.2,OCXD0,"C","B",OCXLABL,0)) Q:'OCXEL 0
- Q (+OCXEL)_U_+$P($G(^OCXS(860.2,OCXD0,"C",OCXEL,0)),U,2)
- ;
- DATAFLD(FNAM,CONTXT) ;
- ;
- N FNUM,D0
- Q:'$G(CONTXT) 0
- S FNUM=$O(^OCXS(860.4,"C",FNAM,0))
- I 'FNUM S FNUM=0 F S FNUM=$O(^OCXS(860.4,"B",$E(FNAM,1,30),FNUM)) Q:'FNUM Q:($P($G(^OCXS(860.4,FNUM,0)),U,1)=FNAM)
- I 'FNUM Q -2
- ;
- Q:$O(^OCXS(860.4,"B",FNAM,FNUM)) -1
- Q:$L($G(^OCXS(860.4,FNUM,"LINK",CONTXT,"DATAPATH"))) FNUM
- Q 0
- ;
- OCXOCMP9 ;SLC/RJS,CLA - ORDER CHECK CODE COMPILER (Build List of Active Rules, Elements and Data Fields) ;3/27/01 07:29
- +1 ;;3.0;ORDER ENTRY/RESULTS REPORTING;**32,105**;Dec 17,1997
- +2 ;; ;;ORDER CHECK EXPERT version 1.01 released OCT 29,1998
- +3 ;
- +4 QUIT
- EN() ;
- +1 IF $GET(OCXWARN)
- QUIT 1
- +2 ;
- +3 SET OCXDLK=$ORDER(^OCXS(860.6,"B","DATABASE LOOKUP",0))
- +4 ;
- +5 NEW RESCAN
- +6 ;
- +7 SET OCXD0=0
- FOR
- SET OCXD0=$ORDER(^OCXS(860.2,OCXD0))
- IF 'OCXD0
- QUIT
- Begin DoDot:1
- +8 IF $GET(^OCXS(860.2,OCXD0,"INACT"))
- QUIT
- +9 IF '$GET(OCXAUTO)
- IF ($X>60)
- WRITE !
- WRITE "."
- +10 SET ^TMP("OCXCMP",$JOB,"RULE",OCXD0)=""
- +11 SET OCXD1=0
- FOR
- SET OCXD1=$ORDER(^OCXS(860.2,OCXD0,"C",OCXD1))
- IF 'OCXD1
- QUIT
- Begin DoDot:2
- +12 NEW OCXEL,OCXEXP
- +13 SET OCXEL=+$PIECE($GET(^OCXS(860.2,OCXD0,"C",OCXD1,0)),U,2)
- IF OCXEL
- IF $DATA(^OCXS(860.3,OCXEL,0))
- Begin DoDot:3
- +14 IF '$GET(OCXAUTO)
- IF ($X>60)
- WRITE !
- WRITE "."
- +15 SET ^TMP("OCXCMP",$JOB,"ELEMENT",OCXEL)=$GET(^TMP("OCXCMP",$JOB,"ELEMENT",OCXEL))+1
- +16 SET ^TMP("OCXCMP",$JOB,"ELEMENT",OCXEL,"CON")=+$PIECE($GET(^OCXS(860.3,OCXEL,0)),U,2)
- End DoDot:3
- +17 SET OCXEXP=$GET(^OCXS(860.2,OCXD0,"C",OCXD1,"EXP"))
- IF $LENGTH(OCXEXP)
- DO GETDF(OCXD0,OCXEXP,OCXEL,0,"EXP")
- IF OCXWARN
- QUIT
- +18 SET OCXEXP=$GET(^OCXS(860.2,OCXD0,"C",OCXD1,"SEL"))
- IF $LENGTH(OCXEXP)
- DO GETDF(OCXD0,OCXEXP,OCXEL,1,"SEL")
- IF OCXWARN
- QUIT
- End DoDot:2
- IF OCXWARN
- QUIT
- +19 IF OCXWARN
- QUIT
- +20 SET OCXD1=0
- FOR
- SET OCXD1=$ORDER(^OCXS(860.2,OCXD0,"R",OCXD1))
- IF 'OCXD1
- QUIT
- Begin DoDot:2
- +21 NEW OCXEXP
- +22 SET OCXEXP=$GET(^OCXS(860.2,OCXD0,"R",OCXD1,"E"))
- IF $LENGTH(OCXEXP)
- DO GETDF(OCXD0,OCXEXP,0,0,"REL")
- IF OCXWARN
- QUIT
- +23 SET OCXEXP=$GET(^OCXS(860.2,OCXD0,"R",OCXD1,"MSG"))
- IF $LENGTH(OCXEXP)
- DO GETDF(OCXD0,OCXEXP,0,0,"MSG")
- IF OCXWARN
- QUIT
- +24 SET OCXEXP=$GET(^OCXS(860.2,OCXD0,"R",OCXD1,"OCMSG"))
- IF $LENGTH(OCXEXP)
- DO GETDF(OCXD0,OCXEXP,0,0,"MSG")
- IF OCXWARN
- QUIT
- +25 SET OCXEXP=$GET(^OCXS(860.2,OCXD0,"R",OCXD1,"RULE"))
- IF $LENGTH(OCXEXP)
- DO GETDF(OCXD0,OCXEXP,0,0,"MSG")
- IF OCXWARN
- QUIT
- +26 SET OCXEXP=$GET(^OCXS(860.2,OCXD0,"R",OCXD1,"MCODE"))
- IF $LENGTH(OCXEXP)
- DO GETDF(OCXD0,OCXEXP,0,0,"MCODE")
- IF OCXWARN
- QUIT
- End DoDot:2
- IF OCXWARN
- QUIT
- End DoDot:1
- +27 ;
- +28 SET OCXD1=0
- FOR
- SET OCXD1=$ORDER(^TMP("OCXCMP",$JOB,"ELEMENT",OCXD1))
- IF 'OCXD1
- QUIT
- Begin DoDot:1
- +29 SET OCXD2=0
- FOR
- SET OCXD2=$ORDER(^OCXS(860.3,OCXD1,"COND",OCXD2))
- IF 'OCXD2
- QUIT
- Begin DoDot:2
- +30 FOR OCXSUB=1,2,3
- SET OCXDF=+$GET(^OCXS(860.3,OCXD1,"COND",OCXD2,"DFLD"_OCXSUB))
- IF OCXDF
- IF $DATA(^OCXS(860.4,OCXDF,0))
- Begin DoDot:3
- +31 IF '$GET(OCXAUTO)
- IF ($X>60)
- WRITE !
- WRITE "."
- +32 SET ^TMP("OCXCMP",$JOB,"DATA FIELD",OCXDF)=$GET(^TMP("OCXCMP",$JOB,"DATA FIELD",OCXDF))+1
- End DoDot:3
- IF OCXWARN
- QUIT
- End DoDot:2
- IF OCXWARN
- QUIT
- End DoDot:1
- IF OCXWARN
- QUIT
- +33 ;
- +34 IF $ORDER(^TMP("OCXCMP",$JOB,"RULE",0))
- Begin DoDot:1
- +35 NEW OCXDFN,OCXDF
- +36 FOR OCXDFN="PATIENT IEN"
- SET OCXDF=$ORDER(^OCXS(860.4,"B",OCXDFN,0))
- Begin DoDot:2
- +37 SET ^TMP("OCXCMP",$JOB,"DATA FIELD",OCXDF)=$GET(^TMP("OCXCMP",$JOB,"DATA FIELD",OCXDF))+1
- End DoDot:2
- End DoDot:1
- +38 ;
- +39 FOR
- Begin DoDot:1
- +40 SET (RESCAN,OCXD1)=0
- FOR
- SET OCXD1=$ORDER(^TMP("OCXCMP",$JOB,"DATA FIELD",OCXD1))
- IF 'OCXD1
- QUIT
- Begin DoDot:2
- +41 NEW OCXPATH,OCXLINK,OCXPAR,OCXVAL,OCXCON
- +42 SET OCXCON=0
- FOR
- SET OCXCON=$ORDER(^OCXS(860.4,OCXD1,"LINK",OCXCON))
- IF 'OCXCON
- QUIT
- Begin DoDot:3
- +43 SET OCXPATH=$GET(^OCXS(860.4,OCXD1,"LINK",OCXCON,"DATAPATH"))
- IF '$LENGTH(OCXPATH)
- QUIT
- +44 SET OCXLINK=$ORDER(^OCXS(863.3,"B",OCXPATH,0))
- IF 'OCXLINK
- QUIT
- +45 SET OCXPAR=0
- FOR
- SET OCXPAR=$ORDER(^OCXS(863.3,OCXLINK,"PAR",OCXPAR))
- IF 'OCXPAR
- QUIT
- SET OCXVAL=$GET(^(OCXPAR,"VAL"))
- Begin DoDot:4
- +46 IF '(OCXVAL["|")
- QUIT
- +47 NEW OCXPIEC
- +48 FOR OCXPIEC=2:2:$LENGTH(OCXVAL,"|")
- Begin DoDot:5
- +49 NEW OCXDF,OCXDFN
- +50 SET OCXDF=$PIECE(OCXVAL,"|",OCXPIEC)
- IF '$LENGTH(OCXDF)
- QUIT
- +51 SET OCXDFN=0
- FOR
- SET OCXDFN=$ORDER(^OCXS(860.4,"B",$EXTRACT(OCXDF,1,30),OCXDFN))
- IF 'OCXDFN
- QUIT
- IF ($PIECE($GET(^OCXS(860.4,OCXDFN,0)),U,1)=OCXDF)
- Begin DoDot:6
- +52 IF '$DATA(^TMP("OCXCMP",$JOB,"DATA FIELD",OCXDFN))
- SET RESCAN=1
- SET ^TMP("OCXCMP",$JOB,"DATA FIELD",OCXDFN)=0
- End DoDot:6
- +53 SET OCXDFN=0
- FOR
- SET OCXDFN=$ORDER(^OCXS(860.4,"C",OCXDF,OCXDFN))
- IF 'OCXDFN
- QUIT
- Begin DoDot:6
- +54 IF '$DATA(^TMP("OCXCMP",$JOB,"DATA FIELD",OCXDFN))
- SET RESCAN=1
- SET ^TMP("OCXCMP",$JOB,"DATA FIELD",OCXDFN)=0
- End DoDot:6
- End DoDot:5
- End DoDot:4
- End DoDot:3
- End DoDot:2
- End DoDot:1
- IF 'RESCAN
- QUIT
- +55 ;
- +56 IF $GET(OCXWARN)
- QUIT 1
- QUIT '$ORDER(^TMP("OCXCMP",$JOB,"RULE",0))
- +57 ;
- GETDF(OCXD0,OCXSTR,OCXELM,OCXREF,OCXSRC) ;
- +1 ;
- +2 NEW OCXPC,OCXFLD,OCXCON,OCXLABL,OCXDF,OCXFSPEC,OCXD1
- +3 IF '(OCXSTR["|")
- QUIT
- +4 FOR OCXPC=2:2:$LENGTH(OCXSTR,"|")
- Begin DoDot:1
- +5 SET OCXFSPEC=$PIECE($PIECE(OCXSTR,"|",OCXPC),"|",1)
- SET (OCXFLD,OCXLABL)=""
- +6 IF (OCXFSPEC[".")
- Begin DoDot:2
- +7 IF OCXELM
- IF (OCXSRC="SEL")
- DO WARN^OCXOCMPV(" '"_OCXFSPEC_"' cannot specify Label in selector.",2,OCXD0)
- QUIT
- +8 SET OCXLABL=$PIECE(OCXFSPEC,".",1)
- SET OCXFLD=$PIECE(OCXFSPEC,".",2)
- +9 IF '$LENGTH(OCXLABL)!'$LENGTH(OCXFLD)!($LENGTH(OCXFSPEC,".")>2)
- Begin DoDot:3
- +10 DO WARN^OCXOCMPV(" Illegal use of period '.' in Field Specifier '"_OCXFSPEC_"'",2,OCXD0,$PIECE($TEXT(+1)," ",1))
- QUIT
- End DoDot:3
- QUIT
- +11 SET OCXELE=+$PIECE($$LABEL(OCXD0,OCXLABL),U,2)
- IF 'OCXELE
- DO WARN^OCXOCMPV(" Label '"_OCXLABL_"' not defined in this rule.",2,OCXD0,$PIECE($TEXT(+1)," ",1))
- QUIT
- +12 SET OCXCON=$$DATACON(+OCXELE)
- +13 IF '$LENGTH(OCXCON)
- DO WARN^OCXOCMPV(" Data context not defined for element '"_$PIECE(^OCXS(860.3,+OCXELE,0),U,1)_"'.",2,OCXD0,$PIECE($TEXT(+1)," ",1))
- QUIT
- +14 SET OCXDF=$$DATAFLD(OCXFLD,OCXCON)
- +15 IF (OCXDF=-1)
- DO WARN^OCXOCMPV(" "_OCXFLD_" data field name not unique.",2,OCXD0,$PIECE($TEXT(+1)," ",1))
- QUIT
- +16 IF (OCXDF=-2)
- DO WARN^OCXOCMPV(" "_OCXFLD_" data field not in Data Field file.",2,OCXD0,$PIECE($TEXT(+1)," ",1))
- QUIT
- +17 IF 'OCXDF
- SET OCXDF=$$DATAFLD(OCXFLD,OCXDLK)
- +18 IF 'OCXDF
- DO WARN^OCXOCMPV(" "_OCXFLD_" data field not defined for "_OCXCON_" data context.",2,OCXD0,$PIECE($TEXT(+1)," ",1))
- QUIT
- +19 IF '$GET(OCXAUTO)
- IF ($X>60)
- WRITE !
- WRITE "."
- +20 SET ^TMP("OCXCMP",$JOB,"ELEMENT",OCXELE,"DATA",OCXDF)=OCXREF
- +21 IF '$DATA(^TMP("OCXCMP",$JOB,"DATA FIELD",OCXDF))
- Begin DoDot:3
- +22 IF '$GET(OCXAUTO)
- IF ($X>60)
- WRITE !
- WRITE "."
- +23 SET ^TMP("OCXCMP",$JOB,"DATA FIELD",OCXDF)=1
- End DoDot:3
- End DoDot:2
- QUIT
- +24 ;
- +25 IF OCXELM
- Begin DoDot:2
- +26 SET OCXFLD=OCXFSPEC
- SET OCXDF=0
- +27 SET OCXCON=$$DATACON(+OCXELM)
- IF '$LENGTH(OCXCON)
- QUIT
- +28 SET OCXDF=$$DATAFLD(OCXFLD,OCXCON)
- +29 IF (OCXDF=-1)
- DO WARN^OCXOCMPV(" "_OCXFLD_" data field name not unique.",2,OCXD0,$PIECE($TEXT(+1)," ",1))
- QUIT
- +30 IF (OCXDF=-2)
- DO WARN^OCXOCMPV(" "_OCXFLD_" data field not in Data Field file.",2,OCXD0,$PIECE($TEXT(+1)," ",1))
- QUIT
- +31 IF 'OCXDF
- SET OCXDF=$$DATAFLD(OCXFLD,OCXDLK)
- +32 IF 'OCXDF
- DO WARN^OCXOCMPV(" "_OCXFLD_" data field not defined for "_OCXCON_" data context.",2,OCXD0,$PIECE($TEXT(+1)," ",1))
- QUIT
- +33 IF '$GET(OCXAUTO)
- IF ($X>60)
- WRITE !
- WRITE "."
- +34 SET ^TMP("OCXCMP",$JOB,"ELEMENT",OCXELM,"DATA",OCXDF)=OCXREF
- +35 IF '$DATA(^TMP("OCXCMP",$JOB,"DATA FIELD",OCXDF))
- Begin DoDot:3
- +36 IF '$GET(OCXAUTO)
- IF ($X>60)
- WRITE !
- WRITE "."
- +37 SET ^TMP("OCXCMP",$JOB,"DATA FIELD",OCXDF)=1
- End DoDot:3
- End DoDot:2
- QUIT
- +38 ;
- +39 SET OCXFLD=OCXFSPEC
- SET OCXDF=0
- +40 SET OCXD1=0
- FOR
- SET OCXD1=$ORDER(^OCXS(860.2,OCXD0,"C",OCXD1))
- IF 'OCXD1
- QUIT
- Begin DoDot:2
- +41 SET OCXELE=+$PIECE($GET(^OCXS(860.2,OCXD0,"C",OCXD1,0)),U,2)
- IF 'OCXELE
- QUIT
- +42 SET OCXCON=$$DATACON(+OCXELE)
- IF '$LENGTH(OCXCON)
- QUIT
- +43 SET OCXDF=$$DATAFLD(OCXFLD,OCXCON)
- +44 IF (OCXDF=-1)
- DO WARN^OCXOCMPV(" "_OCXFLD_" data field name not unique.",2,OCXD0,$PIECE($TEXT(+1)," ",1))
- QUIT
- +45 IF (OCXDF=-2)
- DO WARN^OCXOCMPV(" "_OCXFLD_" data field not in Data Field file.",2,OCXD0,$PIECE($TEXT(+1)," ",1))
- QUIT
- +46 IF 'OCXDF
- SET OCXDF=$$DATAFLD(OCXFLD,OCXDLK)
- +47 IF 'OCXDF
- QUIT
- +48 ;
- +49 IF '$GET(OCXAUTO)
- IF ($X>60)
- WRITE !
- WRITE "."
- +50 SET ^TMP("OCXCMP",$JOB,"ELEMENT",OCXELE,"DATA",OCXDF)=OCXREF
- +51 IF '$DATA(^TMP("OCXCMP",$JOB,"DATA FIELD",OCXDF))
- Begin DoDot:3
- +52 IF '$GET(OCXAUTO)
- IF ($X>60)
- WRITE !
- WRITE "."
- +53 SET ^TMP("OCXCMP",$JOB,"DATA FIELD",OCXDF)=1
- End DoDot:3
- End DoDot:2
- End DoDot:1
- IF OCXWARN
- QUIT
- +54 QUIT
- +55 ;
- DATACON(OCXEL) ;
- +1 ;
- +2 QUIT +$PIECE($GET(^OCXS(860.3,OCXEL,0)),U,2)
- +3 ;
- LABEL(OCXD0,OCXLABL) ;
- +1 ;
- +2 NEW OCXEL
- +3 IF '$LENGTH(OCXLABL)
- QUIT 0
- SET OCXEL=+$ORDER(^OCXS(860.2,OCXD0,"C","B",OCXLABL,0))
- IF 'OCXEL
- QUIT 0
- +4 QUIT (+OCXEL)_U_+$PIECE($GET(^OCXS(860.2,OCXD0,"C",OCXEL,0)),U,2)
- +5 ;
- DATAFLD(FNAM,CONTXT) ;
- +1 ;
- +2 NEW FNUM,D0
- +3 IF '$GET(CONTXT)
- QUIT 0
- +4 SET FNUM=$ORDER(^OCXS(860.4,"C",FNAM,0))
- +5 IF 'FNUM
- SET FNUM=0
- FOR
- SET FNUM=$ORDER(^OCXS(860.4,"B",$EXTRACT(FNAM,1,30),FNUM))
- IF 'FNUM
- QUIT
- IF ($PIECE($GET(^OCXS(860.4,FNUM,0)),U,1)=FNAM)
- QUIT
- +6 IF 'FNUM
- QUIT -2
- +7 ;
- +8 IF $ORDER(^OCXS(860.4,"B",FNAM,FNUM))
- QUIT -1
- +9 IF $LENGTH($GET(^OCXS(860.4,FNUM,"LINK",CONTXT,"DATAPATH")))
- QUIT FNUM
- +10 QUIT 0
- +11 ;