| 1 | DIKC2 ;SFISC/MKO-CHECK INPUT PARAMETERS TO INDEX^DIKC ;8:25 AM  30 Jul 1999
 | 
|---|
| 2 |  ;;22.0;VA FileMan;**11**;Mar 30, 1999
 | 
|---|
| 3 |  ;Per VHA Directive 10-93-142, this routine should not be modified.
 | 
|---|
| 4 |  ;CHK:  Check input parameters to INDEX^DIKC
 | 
|---|
| 5 |  ;Also set:
 | 
|---|
| 6 |  ; DA     = DA array
 | 
|---|
| 7 |  ; DIROOT = Closed root of file
 | 
|---|
| 8 |  ; DIFILE = File #
 | 
|---|
| 9 |  ; DIKERR = "X" : if there's a problem
 | 
|---|
| 10 |  ;
 | 
|---|
| 11 | CHK ;File is a required input param
 | 
|---|
| 12 |  I $G(DIFILE)="" D:DIF["D" ERR^DIKCU2(202,"","","","FILE") D ERR Q
 | 
|---|
| 13 |  ;
 | 
|---|
| 14 |  ;Check DIREC and set DA array
 | 
|---|
| 15 |  I $G(DIREC)'["," M DA=DIREC
 | 
|---|
| 16 |  E  S:DIREC'?.E1"," DIREC=DIREC_"," D DA^DILF(DIREC,.DA)
 | 
|---|
| 17 |  S:'$G(DA) DA=""
 | 
|---|
| 18 |  I '$$VDA^DIKCU1(.DA,DIF) D ERR Q
 | 
|---|
| 19 |  ;
 | 
|---|
| 20 |  ;Check DICTRL parameter
 | 
|---|
| 21 |  I $G(DICTRL)]"",'$$VFLAG^DIKCU1(DICTRL,"KSsDWiRIkCTrf",DIF) D ERR
 | 
|---|
| 22 |  I $G(DICTRL)["W",'$$VFNUM^DIKCU1(+$P(DICTRL,"W",2),DIF) D ERR
 | 
|---|
| 23 |  I $G(DICTRL)["C",$G(DICTRL)["T" D
 | 
|---|
| 24 |  . D:DIF["D" ERR^DIKCU2(301,"","","","C and T")
 | 
|---|
| 25 |  . D ERR
 | 
|---|
| 26 |  E  I $G(DICTRL)["C",$G(DICTRL)["K" D
 | 
|---|
| 27 |  . D:DIF["D" ERR^DIKCU2(301,"","","","C and K")
 | 
|---|
| 28 |  . D ERR
 | 
|---|
| 29 |  E  I $G(DICTRL)["T",$G(DICTRL)["S" D
 | 
|---|
| 30 |  . D:DIF["D" ERR^DIKCU2(301,"","","","T and S")
 | 
|---|
| 31 |  . D ERR
 | 
|---|
| 32 |  Q:$G(DIKERR)="X"
 | 
|---|
| 33 |  ;
 | 
|---|
| 34 |  ;Set DIFILE and DIROOT
 | 
|---|
| 35 |  N DILEV
 | 
|---|
| 36 |  I DIFILE=+$P(DIFILE,"E") D
 | 
|---|
| 37 |  . S DIROOT=$$FROOTDA^DIKCU(DIFILE,DIF,.DILEV) I DIROOT="" D ERR Q
 | 
|---|
| 38 |  . I DILEV,$D(DA(DILEV))[0 D  Q
 | 
|---|
| 39 |  .. D:DIF["D" ERR^DIKCU2(205,"",$$IENS^DILF(.DA),"",DIFILE) D ERR
 | 
|---|
| 40 |  . S:DILEV DIROOT=$NA(@DIROOT)
 | 
|---|
| 41 |  . S DIFILE=$$FNUM^DIKCU(DIROOT,DIF) I DIFILE="" D ERR
 | 
|---|
| 42 |  E  D
 | 
|---|
| 43 |  . S DIROOT=DIFILE
 | 
|---|
| 44 |  . S:"(,"[$E(DIROOT,$L(DIROOT)) DIROOT=$$CREF^DILF(DIFILE)
 | 
|---|
| 45 |  . S DIFILE=$$FNUM^DIKCU(DIROOT,DIF) I DIFILE="" D ERR Q
 | 
|---|
| 46 |  . S DILEV=$$FLEV^DIKCU(DIFILE,DIF) I DILEV="" D ERR Q
 | 
|---|
| 47 |  . I DILEV,$D(DA(DILEV))[0 D  Q
 | 
|---|
| 48 |  .. D:DIF["D" ERR^DIKCU2(205,"",$$IENS^DILF(.DA),"",DIFILE) D ERR
 | 
|---|
| 49 |  ;
 | 
|---|
| 50 |  ;Set DIKVAL,DIKON
 | 
|---|
| 51 |  S DIKVAL=$G(DICTRL("VAL"))
 | 
|---|
| 52 |  I DIKVAL]"" D
 | 
|---|
| 53 |  . S:"(,_"'[$E(DIKVAL,$L(DIKVAL)) DIKVAL=$$OREF^DILF(DIKVAL)
 | 
|---|
| 54 |  . S DIKON="O^N"
 | 
|---|
| 55 |  E  S DIKON=""
 | 
|---|
| 56 |  Q
 | 
|---|
| 57 |  ;
 | 
|---|
| 58 | ERR ;Set error flag
 | 
|---|
| 59 |  S DIKERR="X"
 | 
|---|
| 60 |  Q
 | 
|---|
| 61 |  ;
 | 
|---|
| 62 |  ;==========================
 | 
|---|
| 63 |  ; CRV(Index,ValueRoot,TMP)
 | 
|---|
| 64 |  ;==========================
 | 
|---|
| 65 |  ;Load values from Cross Reference Values multiple into @TMP
 | 
|---|
| 66 |  ;In:
 | 
|---|
| 67 |  ;  XR    = Index #
 | 
|---|
| 68 |  ;  VALRT = Array Ref where old/new values are located
 | 
|---|
| 69 |  ;  TMP   = Root of array to store data
 | 
|---|
| 70 |  ;Returns:
 | 
|---|
| 71 |  ;  @TMP@(RootFile,Index#)             = Name^File^RootType^Type
 | 
|---|
| 72 |  ;                 Index#,Order#)      = Code that sets X to the data
 | 
|---|
| 73 |  ;                        Order#,"SS") = Subscript^MaxLength
 | 
|---|
| 74 |  ;                               "T")  = Transform (for 'Field'-type)
 | 
|---|
| 75 |  ;                               "F")  = file^field^levdiff(file,rFile)
 | 
|---|
| 76 | CRV(XR,VALRT,TMP) ;
 | 
|---|
| 77 |  Q:'$G(XR)!($G(TMP)="")
 | 
|---|
| 78 |  N CRV,CRV0,DEC,FIL,FLD,MAXL,ND,ORD,OROOT,RFIL,SBSC,TYPE
 | 
|---|
| 79 |  ;
 | 
|---|
| 80 |  S RFIL=$P($G(^DD("IX",XR,0)),U,9) Q:RFIL=""  Q:$D(@TMP@(RFIL,XR))
 | 
|---|
| 81 |  S @TMP@(RFIL,XR)=$P(^DD("IX",XR,0),U,2)_U_$P(^(0),U)_U_$P(^(0),U,8)_U_$P(^(0),U,4)
 | 
|---|
| 82 |  S OROOT=$$FROOTDA^DIKCU(RFIL,"O")_"DA," Q:OROOT="DA,"
 | 
|---|
| 83 |  ;
 | 
|---|
| 84 |  S CRV=0 F  S CRV=$O(^DD("IX",XR,11.1,CRV)) Q:'CRV  D
 | 
|---|
| 85 |  . S CRV0=$G(^DD("IX",XR,11.1,CRV,0))
 | 
|---|
| 86 |  . S ORD=$P(CRV0,U),TYPE=$P(CRV0,U,2),MAXL=$P(CRV0,U,5),SBSC=$P(CRV0,U,6)
 | 
|---|
| 87 |  . Q:ORD=""!(TYPE="")
 | 
|---|
| 88 |  . ;
 | 
|---|
| 89 |  . I TYPE="F" D
 | 
|---|
| 90 |  .. S FIL=$P(CRV0,U,3),FLD=$P(CRV0,U,4) Q:(FIL="")!'FLD
 | 
|---|
| 91 |  .. I FIL'=RFIL N OROOT,LDIF D  Q:$G(OROOT)=""
 | 
|---|
| 92 |  ... S LDIF=$$FLEVDIFF^DIKCU(FIL,RFIL) Q:'LDIF
 | 
|---|
| 93 |  ... S OROOT=$$FROOTDA^DIKCU(FIL,LDIF_"O") Q:OROOT=""
 | 
|---|
| 94 |  ... S OROOT=OROOT_"DA("_LDIF_"),"
 | 
|---|
| 95 |  .. S DEC=$$DEC(FIL,FLD,$G(VALRT),OROOT) Q:DEC=""
 | 
|---|
| 96 |  .. S @TMP@(RFIL,XR,ORD)=DEC
 | 
|---|
| 97 |  .. S @TMP@(RFIL,XR,ORD,"F")=FIL_U_FLD_$S($G(LDIF):U_LDIF,1:"")
 | 
|---|
| 98 |  .. S:$G(^DD("IX",XR,11.1,CRV,2))'?."^" @TMP@(RFIL,XR,ORD,"T")=^(2)
 | 
|---|
| 99 |  . ;
 | 
|---|
| 100 |  . E  I TYPE="C" S @TMP@(RFIL,XR,ORD)=$G(^DD("IX",XR,11.1,CRV,1.5))
 | 
|---|
| 101 |  . ;
 | 
|---|
| 102 |  . S:SBSC @TMP@(RFIL,XR,ORD,"SS")=SBSC_$S(MAXL:U_MAXL,1:"")
 | 
|---|
| 103 |  Q
 | 
|---|
| 104 |  ;
 | 
|---|
| 105 |  ;======================================
 | 
|---|
| 106 |  ; $$DEC(File,Field,ValueRoot,OpenRoot)
 | 
|---|
| 107 |  ;======================================
 | 
|---|
| 108 |  ;Return Data Extraction Code -- M code that sets X equal to the data.
 | 
|---|
| 109 |  ;In:
 | 
|---|
| 110 |  ;  FIL   = File #
 | 
|---|
| 111 |  ;  FLD   = Field #
 | 
|---|
| 112 |  ;  VALRT = Array Ref where old/new values are located
 | 
|---|
| 113 |  ;           if ends in "_", FILE subscript is concatenated to the last
 | 
|---|
| 114 |  ;           subscript (used by DDS02)
 | 
|---|
| 115 |  ;  OROOT = Open root of record w/ DA subscripts
 | 
|---|
| 116 |  ;Returns:  M code
 | 
|---|
| 117 |  ;  For example:
 | 
|---|
| 118 |  ;    S X=$P(^DIZ(1000,DA(1),100,0),U,2)   or
 | 
|---|
| 119 |  ;    S X=$E(^DIZ(1000,DA(1),100,1),1,245) or
 | 
|---|
| 120 |  ;    S X=$G(array(file,DIIENS,field,DION),$P(^root(DA,nd),U,pc))
 | 
|---|
| 121 |  ;
 | 
|---|
| 122 | DEC(FIL,FLD,VALRT,OROOT) ;
 | 
|---|
| 123 |  Q:$P($G(^DD(FIL,FLD,0)),U)="" ""
 | 
|---|
| 124 |  ;
 | 
|---|
| 125 |  N ND,PC,DEC
 | 
|---|
| 126 |  S PC=$P($G(^DD(FIL,FLD,0)),U,4)
 | 
|---|
| 127 |  S ND=$P(PC,";"),PC=$P(PC,";",2) Q:ND?." "!("0 "[PC) ""
 | 
|---|
| 128 |  S:ND'=+$P(ND,"E") ND=""""_ND_""""
 | 
|---|
| 129 |  ;
 | 
|---|
| 130 |  I $G(OROOT)="" S OROOT=$$FROOTDA^DIKCU(FIL,"O")_"DA," Q:OROOT="DA," ""
 | 
|---|
| 131 |  I PC S DEC="$P($G("_OROOT_ND_")),U,"_PC_")"
 | 
|---|
| 132 |  E  S DEC="$E($G("_OROOT_ND_")),"_+$E(PC,2,999)_","_$P(PC,",",2)_")"
 | 
|---|
| 133 |  ;
 | 
|---|
| 134 |  I $G(VALRT)]"" D
 | 
|---|
| 135 |  . I $E(VALRT,$L(VALRT))="_" D  Q
 | 
|---|
| 136 |  .. S VALRT=$E(VALRT,1,$L(VALRT)-3)
 | 
|---|
| 137 |  .. S DEC="$G("_VALRT_FIL_""",DIIENS,"_FLD_",DION),"_DEC_")"
 | 
|---|
| 138 |  . S:"(,"'[$E(VALRT,$L(VALRT)) VALRT=$$OREF^DILF(VALRT)
 | 
|---|
| 139 |  . S DEC="$G("_VALRT_FIL_",DIIENS,"_FLD_",DION),"_DEC_")"
 | 
|---|
| 140 |  S DEC="S X="_DEC
 | 
|---|
| 141 |  Q DEC
 | 
|---|
| 142 |  ;
 | 
|---|
| 143 |  ;======================
 | 
|---|
| 144 |  ; LOG(Index,Logic,TMP)
 | 
|---|
| 145 |  ;======================
 | 
|---|
| 146 |  ;Load Set and/or Kill logic into into @TMP
 | 
|---|
| 147 |  ;In:
 | 
|---|
| 148 |  ;  XR  = Index #
 | 
|---|
| 149 |  ;  LOG [ K : load kill logic
 | 
|---|
| 150 |  ;      [ S : load set logic
 | 
|---|
| 151 |  ;  TMP = Root of array to store data
 | 
|---|
| 152 |  ;Returns:
 | 
|---|
| 153 |  ;  @TMP@(RootFile,Index#,"S")  = Set logic
 | 
|---|
| 154 |  ;                        "SC") = Set condition
 | 
|---|
| 155 |  ;                        "K")  = Kill logic
 | 
|---|
| 156 |  ;                        "KC") = Kill condtion
 | 
|---|
| 157 | LOG(XR,LOG,TMP) ;
 | 
|---|
| 158 |  Q:'$G(XR)  Q:$G(LOG)=""  Q:$G(TMP)=""
 | 
|---|
| 159 |  N SL,KL,SC,KC,RFIL
 | 
|---|
| 160 |  ;
 | 
|---|
| 161 |  S RFIL=$P(^DD("IX",XR,0),U,9) Q:RFIL=""
 | 
|---|
| 162 |  I LOG["S" D
 | 
|---|
| 163 |  . S SL=$G(^DD("IX",XR,1)),SC=$G(^(1.4))
 | 
|---|
| 164 |  . I "Q"'[SL,SL'?."^" S @TMP@(RFIL,XR,"S")=SL
 | 
|---|
| 165 |  . I "Q"'[SC,SC'?."^" S @TMP@(RFIL,XR,"SC")=SC
 | 
|---|
| 166 |  I LOG["K" D
 | 
|---|
| 167 |  . S KL=$G(^DD("IX",XR,2)),KC=$G(^(2.4))
 | 
|---|
| 168 |  . I "Q"'[KL,KL'?."^" S @TMP@(RFIL,XR,"K")=KL
 | 
|---|
| 169 |  . I "Q"'[KC,KC'?."^" S @TMP@(RFIL,XR,"KC")=KC
 | 
|---|
| 170 |  Q
 | 
|---|
| 171 |  ;
 | 
|---|
| 172 |  ;===============
 | 
|---|
| 173 |  ; KW(Index,TMP)
 | 
|---|
| 174 |  ;===============
 | 
|---|
| 175 |  ;Load Kill Entire Index logic into @TMP
 | 
|---|
| 176 |  ;In:
 | 
|---|
| 177 |  ;  XR  = Index #
 | 
|---|
| 178 |  ;  TMP = Root of array to store data
 | 
|---|
| 179 |  ;Returns:
 | 
|---|
| 180 |  ;  @TMP@("KW",File#[.01],Index#) =   Kill Entire Index logic
 | 
|---|
| 181 |  ;                        Index#,0) = Type ("W" for whole-file index)
 | 
|---|
| 182 |  ;                                    ^RootFile
 | 
|---|
| 183 |  ;                                    ^Level difference between top file
 | 
|---|
| 184 |  ;                                      and root file
 | 
|---|
| 185 | KW(XR,TMP) ;Get Kill Entire Index logic
 | 
|---|
| 186 |  Q:'$G(XR)!($G(TMP)="")
 | 
|---|
| 187 |  N FILE,KW,RFIL,TYPE
 | 
|---|
| 188 |  S KW=$G(^DD("IX",XR,2.5)) Q:KW="Q"!(KW?."^")
 | 
|---|
| 189 |  S FILE=$P($G(^DD("IX",XR,0)),U),TYPE=$P(^(0),U,8),RFIL=$P(^(0),U,9)
 | 
|---|
| 190 |  Q:FILE=""!(RFIL="")
 | 
|---|
| 191 |  ;
 | 
|---|
| 192 |  S @TMP@("KW",FILE,XR)=KW
 | 
|---|
| 193 |  S:RFIL'=FILE @TMP@("KW",FILE,XR,0)=TYPE_U_RFIL_U_$$FLEVDIFF^DIKCU(FILE,RFIL)
 | 
|---|
| 194 |  Q
 | 
|---|
| 195 |  ;
 | 
|---|
| 196 |  ;#202  The input parameter that identifies the |1| is missing or invalid.
 | 
|---|
| 197 |  ;#205  File# |1| and IEN string |IENS| represent different subfile levels.
 | 
|---|
| 198 |  ;
 | 
|---|