| 1 | PXRMINTR ; SLC/PKR/PJH - Input transforms for Clinical Reminders.;04/17/2006
 | 
|---|
| 2 |  ;;2.0;CLINICAL REMINDERS;**4**;Feb 04, 2005;Build 21
 | 
|---|
| 3 |  ;=======================================================
 | 
|---|
| 4 | VASP(DA,X) ;Check for valid associate sponsor in file 811.6.
 | 
|---|
| 5 |  ;Do not execute as part of a verify fields.
 | 
|---|
| 6 |  I $G(DIUTIL)="VERIFY FIELDS" Q 1
 | 
|---|
| 7 |  ;Do not execute as part of exchange.
 | 
|---|
| 8 |  I $G(PXRMEXCH) Q 1
 | 
|---|
| 9 |  ;Make sure that an associated sponsor does not point to itself.
 | 
|---|
| 10 |  I X=DA D  Q 0
 | 
|---|
| 11 |  . D EN^DDIOL("An associated sponsor cannot point to itself.")
 | 
|---|
| 12 |  ;A sponsor cannot be an associated sponsor if it contains associated
 | 
|---|
| 13 |  ;sponsors.
 | 
|---|
| 14 |  I $D(^PXRMD(811.6,X,2,"B")) D  Q 0
 | 
|---|
| 15 |  . D EN^DDIOL("A sponsor cannot be selected as an associated sponsor if it contains associated sponsors.")
 | 
|---|
| 16 |  ;The class of an associated sponsor must match that of the sponsor.
 | 
|---|
| 17 |  N ASCLASS,SCLASS
 | 
|---|
| 18 |  S SCLASS=$P(^PXRMD(811.6,DA,0),U,2)
 | 
|---|
| 19 |  S ASCLASS=$P(^PXRMD(811.6,X,0),U,2)
 | 
|---|
| 20 |  I ASCLASS'=SCLASS D  Q 0
 | 
|---|
| 21 |  . N TEXT
 | 
|---|
| 22 |  . S TEXT="The associated sponsor's class is "_ASCLASS_", it does not match the sponsor's class which is "_SCLASS_". They must match."
 | 
|---|
| 23 |  . D EN^DDIOL(TEXT)
 | 
|---|
| 24 |  Q 1
 | 
|---|
| 25 |  ;
 | 
|---|
| 26 |  ;=======================================================
 | 
|---|
| 27 | VCLASS(X) ;Check for valid CLASS field, ordinary users cannot create
 | 
|---|
| 28 |  ;National classes.
 | 
|---|
| 29 |  ;Do not execute as part of a verify fields.
 | 
|---|
| 30 |  I $G(DIUTIL)="VERIFY FIELDS" Q 1
 | 
|---|
| 31 |  ;Do not execute as part of exchange.
 | 
|---|
| 32 |  I $G(PXRMEXCH) Q 1
 | 
|---|
| 33 |  I (X["N"),(($G(PXRMINST)'=1)!(DUZ(0)'="@")) D  Q 0
 | 
|---|
| 34 |  . D EN^DDIOL("You are not allowed to create a NATIONAL class")
 | 
|---|
| 35 |  E  Q 1
 | 
|---|
| 36 |  ;
 | 
|---|
| 37 |  ;=======================================================
 | 
|---|
| 38 | VDT(X) ;Check for a valid date/time. Input transform on 
 | 
|---|
| 39 |  ;beginning date/time and ending date/time fields.
 | 
|---|
| 40 |  N FMDATE,VALID
 | 
|---|
| 41 |  S FMDATE=$$CTFMD^PXRMDATE(X)
 | 
|---|
| 42 |  S VALID=$S(FMDATE=-1:0,1:1)
 | 
|---|
| 43 |  I 'VALID D 
 | 
|---|
| 44 |  . N TEXT
 | 
|---|
| 45 |  . S TEXT=X_" is not a valid date/time"
 | 
|---|
| 46 |  . D EN^DDIOL(TEXT)
 | 
|---|
| 47 |  Q VALID
 | 
|---|
| 48 |  ;
 | 
|---|
| 49 |  ;=======================================================
 | 
|---|
| 50 | VFINDING(X) ;Check X to see if it is a valid finding. This is the input
 | 
|---|
| 51 |  ;transform on the .01 field of the reminder findings multiple. Data
 | 
|---|
| 52 |  ;element 811.902,.01.
 | 
|---|
| 53 |  ;Include stubs for all possible finding types in case we need input
 | 
|---|
| 54 |  ;transforms on them.
 | 
|---|
| 55 |  ;I X["AUTTEDT(" Q 1
 | 
|---|
| 56 |  ;I X["AUTTEXAM(" Q 1
 | 
|---|
| 57 |  I X["AUTTHF(" Q $$VHF(X)
 | 
|---|
| 58 |  ;I X["AUTTIMM(" Q 1
 | 
|---|
| 59 |  ;I X["AUTTSK(" Q 1
 | 
|---|
| 60 |  ;I X["GMRD(120.51," Q 1
 | 
|---|
| 61 |  I X["LAB(60," Q $$VLAB(X)
 | 
|---|
| 62 |  ;I X["ORD(101.43," Q 1
 | 
|---|
| 63 |  I X["PXD(811.2," Q $$VTAX(X)
 | 
|---|
| 64 |  ;I X["PXRMD(811.4," Q 1
 | 
|---|
| 65 |  ;I X["PXRMD(811.5," Q 1
 | 
|---|
| 66 |  ;I X["PS(50.605," Q 1
 | 
|---|
| 67 |  ;I X["PSDRUG(" Q 1
 | 
|---|
| 68 |  ;I X["PSNDF(50.6," Q 1
 | 
|---|
| 69 |  ;I X["RAMIS(71," Q 1
 | 
|---|
| 70 |  I X["YTT(601," Q $$VMH(X)
 | 
|---|
| 71 |  Q 1
 | 
|---|
| 72 |  ;
 | 
|---|
| 73 |  ;=======================================================
 | 
|---|
| 74 | VHF(X) ;Check for valid health factor findings. It must be a factor, not
 | 
|---|
| 75 |  ;a category.
 | 
|---|
| 76 |  N CAT,IEN,TEMP,TYPE
 | 
|---|
| 77 |  S IEN=$P(X,";",1)
 | 
|---|
| 78 |  S TEMP=$G(^AUTTHF(IEN,0))
 | 
|---|
| 79 |  S TYPE=$P(TEMP,U,10)
 | 
|---|
| 80 |  I TYPE="C" D  Q 0
 | 
|---|
| 81 |  . D EN^DDIOL("Category health factors cannot be used in reminder definitions!")
 | 
|---|
| 82 |  I TYPE'="F" D  Q 0
 | 
|---|
| 83 |  . D EN^DDIOL("Only factor health factors can be used in reminder definitions!")
 | 
|---|
| 84 |  ;Make sure that the health factor has a category.
 | 
|---|
| 85 |  S CAT=$P(TEMP,U,3)
 | 
|---|
| 86 |  I CAT="" D  Q 0
 | 
|---|
| 87 |  . D EN^DDIOL("Factor health factors must have a category!")
 | 
|---|
| 88 |  Q 1
 | 
|---|
| 89 |  ;
 | 
|---|
| 90 |  ;=======================================================
 | 
|---|
| 91 | VIGNAC(X) ;Check X to see if it contains valid IGNORE ON N/A codes.
 | 
|---|
| 92 |  ;This is part of the input transform for this field. The length of the
 | 
|---|
| 93 |  ;IGNORE ON N/A field is 8 characters. The valid codes are:
 | 
|---|
| 94 |  ;   A - age
 | 
|---|
| 95 |  ;   I - inactive
 | 
|---|
| 96 |  ;   R - race
 | 
|---|
| 97 |  ;   S - sex
 | 
|---|
| 98 |  ;   * - wildcard matches anything.
 | 
|---|
| 99 |  N LEN
 | 
|---|
| 100 |  S LEN=$L(X)
 | 
|---|
| 101 |  I (LEN>8)!(LEN<1) Q 0
 | 
|---|
| 102 |  ;
 | 
|---|
| 103 |  N TEMP,TEXT
 | 
|---|
| 104 |  S TEMP=X
 | 
|---|
| 105 |  S TEMP=$TR(TEMP,"A","")
 | 
|---|
| 106 |  S TEMP=$TR(TEMP,"I","")
 | 
|---|
| 107 |  S TEMP=$TR(TEMP,"R","")
 | 
|---|
| 108 |  S TEMP=$TR(TEMP,"S","")
 | 
|---|
| 109 |  S TEMP=$TR(TEMP,"*","")
 | 
|---|
| 110 |  ;At this point TEMP should be NULL,if it is not then there are
 | 
|---|
| 111 |  ;bad codes.
 | 
|---|
| 112 |  S LEN=$L(TEMP)
 | 
|---|
| 113 |  I LEN=1 D  Q 0
 | 
|---|
| 114 |  . S TEXT=TEMP_" is not a valid IGNORE ON N/A code!"
 | 
|---|
| 115 |  . D EN^DDIOL(TEXT)
 | 
|---|
| 116 |  I LEN>1 D  Q 0
 | 
|---|
| 117 |  . S TEXT=TEMP_" are not valid IGNORE ON N/A codes!"
 | 
|---|
| 118 |  . D EN^DDIOL(TEXT)
 | 
|---|
| 119 |  Q 1
 | 
|---|
| 120 |  ;
 | 
|---|
| 121 |  ;=======================================================
 | 
|---|
| 122 | VLAB(X) ;Check for valid lab findings. Everything but a panel is ok.
 | 
|---|
| 123 |  I X'["LAB(60" Q 1
 | 
|---|
| 124 |  N DATANAME,LAB0,LABTEST,SUB,TEST,TEXT
 | 
|---|
| 125 |  S LABTEST=$P(X,";",1)
 | 
|---|
| 126 |  ;DBIA #91-A
 | 
|---|
| 127 |  S LAB0=^LAB(60,LABTEST,0)
 | 
|---|
| 128 |  S SUB=$P(LAB0,U,4)
 | 
|---|
| 129 |  ;BB and WK not allowed
 | 
|---|
| 130 |  I (SUB="BB")!(SUB="WK") D  Q 0
 | 
|---|
| 131 |  . S TEXT=SUB_" tests cannot be used as reminder findings."
 | 
|---|
| 132 |  . D EN^DDIOL(.TEXT)
 | 
|---|
| 133 |  ;The concept of lab panel only applies to CH tests.
 | 
|---|
| 134 |  I SUB'["CH" Q 1
 | 
|---|
| 135 |  S DATANAME=$P(LAB0,U,5)
 | 
|---|
| 136 |  ;If DATA NAME is null then it is a panel.
 | 
|---|
| 137 |  I DATANAME="" D  Q 0
 | 
|---|
| 138 |  . S TEXT(1)=$P(LAB0,U,1)_" is a lab panel, cannot be used for a reminder!"
 | 
|---|
| 139 |  . S TEXT(2)="Contact your Lab ADPAC for help"
 | 
|---|
| 140 |  . D EN^DDIOL(.TEXT)
 | 
|---|
| 141 |  Q 1
 | 
|---|
| 142 |  ;
 | 
|---|
| 143 |  ;=======================================================
 | 
|---|
| 144 | VMH(X) ;The site must have the routine YTAPI installed in order to use
 | 
|---|
| 145 |  ;mental health instrument findings.
 | 
|---|
| 146 |  N EXISTS
 | 
|---|
| 147 |  S EXISTS=$$EXISTS^PXRMEXCF("YTAPI")
 | 
|---|
| 148 |  I EXISTS Q 1
 | 
|---|
| 149 |  N TEXT
 | 
|---|
| 150 |  S TEXT(1)="Your site does not have the routine YTAPI installed."
 | 
|---|
| 151 |  S TEXT(2)="It is required in order to use Mental Instrument findings."
 | 
|---|
| 152 |  S TEXT(3)="The routine was originally released in patch YS*5.01*53."
 | 
|---|
| 153 |  S TEXT(4)=" "
 | 
|---|
| 154 |  D EN^DDIOL(.TEXT)
 | 
|---|
| 155 |  Q 0
 | 
|---|
| 156 |  ;
 | 
|---|
| 157 |  ;=======================================================
 | 
|---|
| 158 | VNAME(NAME,FILE) ;Check for valid .01 value.
 | 
|---|
| 159 |  ;For files 801.41, 811.2, 811.4 and 811.9 the name cannot start with VA-
 | 
|---|
| 160 |  ;unless this is a national reminder.
 | 
|---|
| 161 |  ;Do not execute as part of a verify fields.
 | 
|---|
| 162 |  I $G(DIUTIL)="VERIFY FIELDS" Q 1
 | 
|---|
| 163 |  ;Do not execute as part of exchange.
 | 
|---|
| 164 |  I $G(PXRMEXCH) Q 1
 | 
|---|
| 165 |  N STEXT,TEXT,VALID
 | 
|---|
| 166 |  S VALID=1
 | 
|---|
| 167 |  I (FILE=811.2)!(FILE=811.4)!(FILE=811.9)!(FILE=801.41) D
 | 
|---|
| 168 |  . S STEXT=$E(NAME,1,3)
 | 
|---|
| 169 |  . I (STEXT="VA-"),(($G(PXRMINST)'=1)!(DUZ(0)'="@")) D
 | 
|---|
| 170 |  .. S TEXT=NAME_" cannot start with ""VA-"", reserved for national distribution!"
 | 
|---|
| 171 |  .. D EN^DDIOL(TEXT)
 | 
|---|
| 172 |  .. H 2
 | 
|---|
| 173 |  .. S VALID=0
 | 
|---|
| 174 |  Q VALID
 | 
|---|
| 175 |  ;
 | 
|---|
| 176 |  ;=======================================================
 | 
|---|
| 177 | VSPONSOR(X) ;Make sure file Class and Sponsor Class match.
 | 
|---|
| 178 |  ;If there is no sponsor don't do the check.
 | 
|---|
| 179 |  I X="" Q 1
 | 
|---|
| 180 |  ;Do not execute as part of a verify fields.
 | 
|---|
| 181 |  I $G(DIUTIL)="VERIFY FIELDS" Q 1
 | 
|---|
| 182 |  ;Do not execute as part of exchange.
 | 
|---|
| 183 |  I $G(PXRMEXCH) Q 1
 | 
|---|
| 184 |  N FCLASS,FILENUM,SCLASS,TEXT,VALID
 | 
|---|
| 185 |  S VALID=1
 | 
|---|
| 186 |  I $G(X)="" Q VALID
 | 
|---|
| 187 |  I $G(DIC)="" Q 0
 | 
|---|
| 188 |  S FILENUM=+$P(@(DIC_"0)"),U,2)
 | 
|---|
| 189 |  S FCLASS=$P(@(DIC_DA_",100)"),U,1)
 | 
|---|
| 190 |  S SCLASS=$P(^PXRMD(811.6,X,100),U,1)
 | 
|---|
| 191 |  I SCLASS'=FCLASS D
 | 
|---|
| 192 |  . S FCLASS=$$EXTERNAL^DILFD(FILENUM,100,"",FCLASS)
 | 
|---|
| 193 |  . S SCLASS=$$EXTERNAL^DILFD(811.6,100,"",SCLASS)
 | 
|---|
| 194 |  . S TEXT="Sponsor Class is "_SCLASS_", File Class is "_FCLASS_" they must match!"
 | 
|---|
| 195 |  . D EN^DDIOL(TEXT)
 | 
|---|
| 196 |  . S VALID=0
 | 
|---|
| 197 |  Q VALID
 | 
|---|
| 198 |  ;
 | 
|---|
| 199 |  ;=======================================================
 | 
|---|
| 200 | VTAX(X) ;Make sure the taxonomy is active.
 | 
|---|
| 201 |  N IEN,INACTIVE
 | 
|---|
| 202 |  S IEN=$P(X,";",1)
 | 
|---|
| 203 |  S INACTIVE=$P(^PXD(811.2,IEN,0),U,6)
 | 
|---|
| 204 |  I INACTIVE D  Q 0
 | 
|---|
| 205 |  . D EN^DDIOL("This taxonomy is inactive and cannot be selected.")
 | 
|---|
| 206 |  E  Q 1
 | 
|---|
| 207 |  ;
 | 
|---|
| 208 |  ;=======================================================
 | 
|---|
| 209 | VTPER(X) ;Check for valid time period. They must be of the form NS,
 | 
|---|
| 210 |  ; where N is a number and S is D for days, M for months, or Y for years.
 | 
|---|
| 211 |  N LEN
 | 
|---|
| 212 |  S X=$$UP^XLFSTR(X)
 | 
|---|
| 213 |  S LEN=$L(X)
 | 
|---|
| 214 |  I (LEN>5)!(LEN<2) Q 0
 | 
|---|
| 215 |  I ((X'?1N.N1"D")&(X'?1N.N1"M")&(X'?1N.N1"Y")) Q 0
 | 
|---|
| 216 |  Q 1
 | 
|---|
| 217 |  ;
 | 
|---|
| 218 |  ;=======================================================
 | 
|---|
| 219 | VUSAGE(X) ;Check X to see if it contains valid USAGE codes.
 | 
|---|
| 220 |  ;This is part of the input transform for this field. The length of the
 | 
|---|
| 221 |  ;USAGE field is 10 characters. The valid codes are:
 | 
|---|
| 222 |  ;   C - CPRS
 | 
|---|
| 223 |  ;   L - Reminder Patient List
 | 
|---|
| 224 |  ;   P - Patient
 | 
|---|
| 225 |  ;   R - Reports
 | 
|---|
| 226 |  ;   X - Extracts
 | 
|---|
| 227 |  ;   * - Wildcard matches anything, except P.
 | 
|---|
| 228 |  N LEN
 | 
|---|
| 229 |  S LEN=$L(X)
 | 
|---|
| 230 |  I (LEN>10)!(LEN<1) Q 0
 | 
|---|
| 231 |  ;
 | 
|---|
| 232 |  N TEMP,TEXT
 | 
|---|
| 233 |  S TEMP=$$UP^XLFSTR(X)
 | 
|---|
| 234 |  S TEMP=$TR(TEMP,"C","")
 | 
|---|
| 235 |  S TEMP=$TR(TEMP,"L","")
 | 
|---|
| 236 |  S TEMP=$TR(TEMP,"P","")
 | 
|---|
| 237 |  S TEMP=$TR(TEMP,"R","")
 | 
|---|
| 238 |  S TEMP=$TR(TEMP,"X","")
 | 
|---|
| 239 |  S TEMP=$TR(TEMP,"*","")
 | 
|---|
| 240 |  ;At this point TEMP should be NULL,if it is not then there are
 | 
|---|
| 241 |  ;bad codes.
 | 
|---|
| 242 |  S LEN=$L(TEMP)
 | 
|---|
| 243 |  I LEN=1 D  Q 0
 | 
|---|
| 244 |  . S TEXT=TEMP_" is not a valid USAGE code!"
 | 
|---|
| 245 |  . D EN^DDIOL(TEXT)
 | 
|---|
| 246 |  I LEN>1 D  Q 0
 | 
|---|
| 247 |  . S TEXT=TEMP_" are not valid USAGE codes!"
 | 
|---|
| 248 |  . D EN^DDIOL(TEXT)
 | 
|---|
| 249 |  Q 1
 | 
|---|