| 1 | IBDECLN ;ALB/AAS - Clean up Data Qualifiers and Package interfaces ; 23-JUN-97
 | 
|---|
| 2 |  ;;3.0;AUTOMATED INFO COLLECTION SYS;**14,36**;APR 24, 1997
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 | UPDATE(TALK) ; -- update both qualifiers and package interface file
 | 
|---|
| 5 |  ; -- do the qualifiers first to rename bad ones
 | 
|---|
| 6 |  ;
 | 
|---|
| 7 |  ; -- input Talk, 1=send messages through mes^xpdutl (default is 1)
 | 
|---|
| 8 |  ;                0=no messages
 | 
|---|
| 9 |  ;
 | 
|---|
| 10 |  S:$G(TALK)="" TALK=1
 | 
|---|
| 11 |  S TALK=$TR(TALK,"yesnomaybe","YESNOMAYBE")
 | 
|---|
| 12 |  S:$G(TALK)="YES" TALK=1
 | 
|---|
| 13 |  S TALK=+$G(TALK)
 | 
|---|
| 14 |  D CLNQLF(TALK),CLNPI(TALK)
 | 
|---|
| 15 |  D CLNSEL^IBDECLN1(TALK)
 | 
|---|
| 16 |  Q
 | 
|---|
| 17 |  ;
 | 
|---|
| 18 | CLNPI(TALK) ;
 | 
|---|
| 19 |  ; -- update/delete Allowable Qualifiers in Package Interface file
 | 
|---|
| 20 |  N I,J,K,L,X,Y,CNT,CNT1,CNT2,CNT3,CNT4,ENTRY,PI,QLF,NODE,FILE
 | 
|---|
| 21 |  N IEN,PROBLEM,QLFNODE,DATA,QLFNUM,NNODE,ONODE,NLEN,TOT
 | 
|---|
| 22 |  K ^TMP($J,"IBDE CLN")
 | 
|---|
| 23 |  S (CNT,CNT1,CNT2,CNT3,CNT4)=0
 | 
|---|
| 24 |  ;
 | 
|---|
| 25 |  S (X(1),X(3))="  "
 | 
|---|
| 26 |  S X(2)=">>> Now checking the PACKAGE INTERFACE file for inappropriate data qualifiers."
 | 
|---|
| 27 |  D:TALK MES^XPDUTL(.X)
 | 
|---|
| 28 |  ;
 | 
|---|
| 29 |  ; -- build array of input package interfaces and qualifiers
 | 
|---|
| 30 |  ;    sent out with version 3.0
 | 
|---|
| 31 |  S I=0
 | 
|---|
| 32 |  F I=1:1 S ENTRY=$P($T(OUTPUT+I^IBDECLN2),";;",2) Q:ENTRY=""  D
 | 
|---|
| 33 |  . I $E(ENTRY)="~" Q
 | 
|---|
| 34 |  . I $E(ENTRY)'="+" D  Q
 | 
|---|
| 35 |  .. S PI=$E($P(ENTRY,":",1),1,30)
 | 
|---|
| 36 |  .. S DATA=$P(ENTRY,":",2)
 | 
|---|
| 37 |  .. S ^TMP($J,"IBDE CLN",PI,12)=DATA
 | 
|---|
| 38 |  . I $E(ENTRY)="+" D  Q
 | 
|---|
| 39 |  .. S QLF=$E($P(ENTRY,":",1),2,99)
 | 
|---|
| 40 |  .. S QLFNUM=+$O(^IBD(357.98,"B",$E(QLF,1,30),0))
 | 
|---|
| 41 |  .. Q:QLFNUM=0
 | 
|---|
| 42 |  .. S DATA=QLFNUM_$P(ENTRY,":",2)
 | 
|---|
| 43 |  .. S ^TMP($J,"IBDE CLN",PI,"QLF",QLF)=DATA
 | 
|---|
| 44 |  ;
 | 
|---|
| 45 |  ; -- now go through the supported list of Package Interface entries
 | 
|---|
| 46 |  ;    and make sure that the main PCE DIM data is correct (node 12)
 | 
|---|
| 47 |  ;
 | 
|---|
| 48 |  S PI=""
 | 
|---|
| 49 |  F  S PI=$O(^TMP($J,"IBDE CLN",PI)) Q:PI=""  D
 | 
|---|
| 50 |  . S (J,K)=0
 | 
|---|
| 51 |  . F  S J=$O(^IBE(357.6,"B",PI,J)) Q:'J  D
 | 
|---|
| 52 |  .. S NNODE=$G(^TMP($J,"IBDE CLN",PI,12))
 | 
|---|
| 53 |  .. Q:NNODE=""
 | 
|---|
| 54 |  .. S ONODE=$G(^IBE(357.6,J,12))
 | 
|---|
| 55 |  .. S NLEN=$L(NNODE)
 | 
|---|
| 56 |  .. I $E(ONODE,1,NLEN)'=NNODE D DEL(TALK,PI,J,K,20,NNODE,ONODE)
 | 
|---|
| 57 |  ;
 | 
|---|
| 58 |  ; -- now go through the qualifiers for the package interface
 | 
|---|
| 59 |  ;    and make sure that only supported qualifiers are listed, 
 | 
|---|
| 60 |  ;    no duplicates, and that the data is correct.
 | 
|---|
| 61 |  ;
 | 
|---|
| 62 |  S PI=""
 | 
|---|
| 63 |  S (CNT1,CNT3)=0
 | 
|---|
| 64 |  F  S PI=$O(^TMP($J,"IBDE CLN",PI)) Q:PI=""  D
 | 
|---|
| 65 |  . S (J,K)=0
 | 
|---|
| 66 |  . F  S J=$O(^IBE(357.6,"B",PI,J)) Q:'J  D
 | 
|---|
| 67 |  .. N CNT1,ONODE,NNODE,PIQLF
 | 
|---|
| 68 |  .. S K=0
 | 
|---|
| 69 |  .. F  S K=$O(^IBE(357.6,J,13,K)) Q:K=""  D
 | 
|---|
| 70 |  ... ;
 | 
|---|
| 71 |  ... S ONODE=$G(^IBE(357.6,J,13,K,0)) Q:ONODE=""
 | 
|---|
| 72 |  ... S FILE=$P($P(ONODE,"^",1),";",2)
 | 
|---|
| 73 |  ... Q:FILE'="IBD(357.98,"
 | 
|---|
| 74 |  ... S IEN=+ONODE
 | 
|---|
| 75 |  ... S QLF=$P($G(^IBD(357.98,IEN,0),"UNKNOWN"),"^",1)
 | 
|---|
| 76 |  ... S PIQLF(QLF)=""
 | 
|---|
| 77 |  ... ;
 | 
|---|
| 78 |  ... ; -- now if there is a duplicate, delete the duplicate
 | 
|---|
| 79 |  ... S NNODE=$G(^TMP($J,"IBDE CLN",PI,"QLF",QLF))
 | 
|---|
| 80 |  ... I NNODE="" D DEL(TALK,PI,J,K,1) Q
 | 
|---|
| 81 |  ... S CNT1(PI,QLF)=$G(CNT1(PI,QLF))+1
 | 
|---|
| 82 |  ... I CNT1(PI,QLF)>1 D DEL(TALK,PI,J,K,2) Q
 | 
|---|
| 83 |  ... ;
 | 
|---|
| 84 |  ... S NLEN=$L(NNODE)
 | 
|---|
| 85 |  ... I $E(ONODE,1,NLEN)'=NNODE D DEL(TALK,PI,J,K,21,NNODE,ONODE)
 | 
|---|
| 86 |  .. ; --check to see if all allowable qualifiers exist if not, add
 | 
|---|
| 87 |  .. S QLF="" F  S QLF=$O(^TMP($J,"IBDE CLN",PI,"QLF",QLF)) Q:QLF']""  D
 | 
|---|
| 88 |  ... N FILE,DATA,IBDFDA,QLFNODE,NIEN,ERROR
 | 
|---|
| 89 |  ... Q:$D(PIQLF(QLF))
 | 
|---|
| 90 |  ... S FILE=357.613,IBDFDA(1)=J
 | 
|---|
| 91 |  ... S QLFNODE=$G(^TMP($J,"IBDE CLN",PI,"QLF",QLF))
 | 
|---|
| 92 |  ... S DATA(.01)=$P(QLFNODE,"^")
 | 
|---|
| 93 |  ... Q:DATA(.01)=""
 | 
|---|
| 94 |  ... S NIEN=$$ADD^IBDFDBS(FILE,.IBDFDA,.DATA,.ERROR)
 | 
|---|
| 95 |  ... D:+NIEN>0 DEL(TALK,PI,J,NIEN,22,QLFNODE)
 | 
|---|
| 96 |  ;
 | 
|---|
| 97 |  G:'TALK END
 | 
|---|
| 98 |  ;
 | 
|---|
| 99 |  ; -- Find out if Problem is in PCE DIM NODE in 357.6
 | 
|---|
| 100 |  ;    if so, then user is warned to contact customer service
 | 
|---|
| 101 |  ;    to be manually corrected
 | 
|---|
| 102 |  D PROBLEM^IBDECLN1(.PROBLEM)
 | 
|---|
| 103 |  I PROBLEM>0 D
 | 
|---|
| 104 |  . S X(1)="  ",X(2)=" >> WARNING: The following interfaces use the PROBLEM node to transmit data"
 | 
|---|
| 105 |  . D:TALK MES^XPDUTL(.X)
 | 
|---|
| 106 |  . S I=0 ;skip the zero node, contains PI stuff
 | 
|---|
| 107 |  . F  S I=$O(PROBLEM(I)) Q:I=""  D:TALK MES^XPDUTL("    Package Interface "_PROBLEM(I))
 | 
|---|
| 108 |  . D:TALK MES^XPDUTL("    Contact Customer Support for assistance updating the package interface file.")
 | 
|---|
| 109 |  ;
 | 
|---|
| 110 |  ;
 | 
|---|
| 111 | SUM ; -- summary of package interface file check
 | 
|---|
| 112 |  K X
 | 
|---|
| 113 |  S TOT=2
 | 
|---|
| 114 |  S X(1)=" "
 | 
|---|
| 115 |  S X(2)=" >> Summary of the Package Interface Check:"
 | 
|---|
| 116 |  ;
 | 
|---|
| 117 |  I CNT<1,CNT2<1,CNT3<1,CNT4<1 D
 | 
|---|
| 118 |  . S TOT=TOT+1,X(TOT)="    No required changes were found."
 | 
|---|
| 119 |  ;
 | 
|---|
| 120 |  I CNT>0 D
 | 
|---|
| 121 |  . S TOT=TOT+1
 | 
|---|
| 122 |  . S X(TOT)="    A total of "_CNT_" qualifier"_$S(CNT=1:" was",1:"s were")_" removed from Package Interface Entries."
 | 
|---|
| 123 |  ;
 | 
|---|
| 124 |  ;
 | 
|---|
| 125 |  I CNT2>0 D
 | 
|---|
| 126 |  . S TOT=TOT+1
 | 
|---|
| 127 |  . S X(TOT)="    The PCE DIM data fields for "_CNT2_" Package Interface"_$S(CNT2=1:" was",1:"s were")_" updated."
 | 
|---|
| 128 |  ;
 | 
|---|
| 129 |  I CNT3>0 D
 | 
|---|
| 130 |  . S TOT=TOT+1
 | 
|---|
| 131 |  . S X(TOT)="    The PCE DIM data fields for "_CNT3_" Allowable Qualifier"_$S(CNT3=1:" was",1:"s were")_" updated."
 | 
|---|
| 132 |  ;
 | 
|---|
| 133 |  I CNT4>0 D
 | 
|---|
| 134 |  . S TOT=TOT+1
 | 
|---|
| 135 |  . S X(TOT)="    A total of "_CNT4_" Allowable Qualifier"_$S(CNT4=1:" was",1:"s were")_" added."
 | 
|---|
| 136 |  I PROBLEM>0 D
 | 
|---|
| 137 |  . S TOT=TOT+1,X(TOT)="    Contact Customer Support for assistance updating the package interface file."
 | 
|---|
| 138 |  ;
 | 
|---|
| 139 |  D:TALK MES^XPDUTL(.X)
 | 
|---|
| 140 |  ;
 | 
|---|
| 141 | END K ^TMP($J,"IBDE CLN")
 | 
|---|
| 142 |  Q
 | 
|---|
| 143 |  ;
 | 
|---|
| 144 | DEL(TALK,PI,J,K,REASON,NNODE,ONODE) ; -- delete inappropriate entries
 | 
|---|
| 145 |  ;
 | 
|---|
| 146 |  ;  reasons for deletion or warnings
 | 
|---|
| 147 |  ;  1- invalid qualifier
 | 
|---|
| 148 |  ;  2- duplicate qualifier
 | 
|---|
| 149 |  ;  9- bad qualifier, not deleted, user warned
 | 
|---|
| 150 |  ;  20-node ^IBE(357.6,IEN,12) not correct
 | 
|---|
| 151 |  ;  21-node ^IBE(357.6,IEN,13,allow qual,0) not correct
 | 
|---|
| 152 |  ;
 | 
|---|
| 153 |  N I,X,Y,DA,DIC,DIK
 | 
|---|
| 154 |  I (REASON=1!(REASON=2)) S CNT=CNT+1
 | 
|---|
| 155 |  S CNT(PI)=+$G(CNT(PI))+1
 | 
|---|
| 156 |  I CNT(PI)=1 D
 | 
|---|
| 157 |  . S X(1)=" ",X(2)="    The Package Interface "_PI_" had: "
 | 
|---|
| 158 |  . D:TALK MES^XPDUTL(.X) N X
 | 
|---|
| 159 |  D:(TALK&(REASON=1)) MES^XPDUTL("       an invalid qualifier of "_QLF_" deleted.")
 | 
|---|
| 160 |  D:(TALK&(REASON=2)) MES^XPDUTL("       a duplicate qualifier of "_QLF_" deleted.")
 | 
|---|
| 161 |  I TALK&(REASON=9) D MES^XPDUTL("       a bad qualifier of "_QLF_" not deleted, PCE DIM NODE='PROBLEM'") Q  ;don't delete, save for manual update
 | 
|---|
| 162 |  ;
 | 
|---|
| 163 |  I REASON<10 S DA=K,DA(1)=J,DIK="^IBE(357.6,"_DA(1)_",13," D ^DIK Q
 | 
|---|
| 164 |  ;
 | 
|---|
| 165 |  I TALK&(REASON=20) D
 | 
|---|
| 166 |  . N X
 | 
|---|
| 167 |  . S X(1)="       The PCE Device Interface Data Updated."
 | 
|---|
| 168 |  . S X(2)="          Old Data: "_ONODE
 | 
|---|
| 169 |  . S X(3)="          New Data: "_NNODE
 | 
|---|
| 170 |  . D:TALK MES^XPDUTL(.X)
 | 
|---|
| 171 |  . S CNT2=CNT2+1
 | 
|---|
| 172 |  . S ^IBE(357.6,J,12)=NNODE
 | 
|---|
| 173 |  ;
 | 
|---|
| 174 |  I TALK&(REASON=21) D
 | 
|---|
| 175 |  . N X
 | 
|---|
| 176 |  . S X(1)="       The PCE Device Interface Data for the Data Qualifier "_QLF_" was updated."
 | 
|---|
| 177 |  . S X(2)="          Old Data: "_ONODE
 | 
|---|
| 178 |  . S X(3)="          New Data: "_NNODE
 | 
|---|
| 179 |  . D:TALK MES^XPDUTL(.X)
 | 
|---|
| 180 |  . S CNT3=CNT3+1
 | 
|---|
| 181 |  . S ^IBE(357.6,J,13,K,0)=NNODE
 | 
|---|
| 182 |  ;
 | 
|---|
| 183 |  I TALK&(REASON=22) D
 | 
|---|
| 184 |  . S CNT4=CNT4+1
 | 
|---|
| 185 |  . D MES^XPDUTL("       "_QLF_" was added.")
 | 
|---|
| 186 |  . S ^IBE(357.6,J,13,K,0)=NNODE
 | 
|---|
| 187 |  Q
 | 
|---|
| 188 |  ;
 | 
|---|
| 189 | CLNQLF(TALK) ;
 | 
|---|
| 190 |  ; -- update codes in AICS DATA QUALIFIERS file (357.98)
 | 
|---|
| 191 |  ;    according to version 3.0
 | 
|---|
| 192 |  N I,J,K,L,X,Y,CNT,CNT1,CNT2,CNT3,ENTRY,NAME,CODE,NEWNAME,IBQUIT,DIC,DIE,DIK,DA,DR
 | 
|---|
| 193 |  S (CNT,CNT1)=0,CNT2=1
 | 
|---|
| 194 |  ;
 | 
|---|
| 195 |  S (X(1),X(3))="  "
 | 
|---|
| 196 |  S X(2)=">>> Now checking the AICS DATA QUALIFIERS file for inappropriate entries."
 | 
|---|
| 197 |  D:TALK MES^XPDUTL(.X)
 | 
|---|
| 198 |  ;
 | 
|---|
| 199 |  ; -- Go through AICS Data Qualifiers and set up correctly
 | 
|---|
| 200 |  F I=1:1:28 S ENTRY=$P($T(DATA+I),";;",2) Q:ENTRY=""  D
 | 
|---|
| 201 |  . S CNT=CNT+1
 | 
|---|
| 202 |  . S NAME=$P(ENTRY,"^",1)
 | 
|---|
| 203 |  . S CODE=$P(ENTRY,"^",2)
 | 
|---|
| 204 |  . S J=""
 | 
|---|
| 205 |  . F  S J=$O(^IBD(357.98,"B",NAME,J)) Q:J=""  D
 | 
|---|
| 206 |  .. I $P($G(^IBD(357.98,J,0)),"^",2)=CODE Q
 | 
|---|
| 207 |  .. ;
 | 
|---|
| 208 |  .. ; -- don't change Active=1 and Inactive=0 if Problem
 | 
|---|
| 209 |  .. I $P($G(^IBE(357.6,J,12)),"^",1)="PROBLEM",NAME="ACTIVE"!(NAME="INACTIVE") D  Q:IBQUIT
 | 
|---|
| 210 |  ... S IBQUIT=0
 | 
|---|
| 211 |  ... I NAME="ACTIVE",($P($G(^IBD(357.98,J,0)),"^",2)=1) D
 | 
|---|
| 212 |  ....S IBQUIT=1
 | 
|---|
| 213 |  ....D MES^XPDUTL("    The qualifier ACTIVE with a code of 1 needs to be changed but is used.")
 | 
|---|
| 214 |  ... I NAME="INACTIVE",($P($G(^IBD(357.98,J,0)),"^",2)=0) D
 | 
|---|
| 215 |  ....S IBQUIT=1
 | 
|---|
| 216 |  ....D MES^XPDUTL("    The qualifier of INACTIVE with a code of 0 needs to be changed but is used.")
 | 
|---|
| 217 |  ..
 | 
|---|
| 218 |  .. ; -- keep track of what was changed
 | 
|---|
| 219 |  .. S CNT(NAME)=$G(CNT(NAME))+1
 | 
|---|
| 220 |  .. S CNT1=CNT1+1,CNT2=CNT2+1
 | 
|---|
| 221 |  .. S CNT3(CNT2)="    The Entry "_$G(^IBD(357.98,J,0))_" changed to ZZBAD-"_ENTRY
 | 
|---|
| 222 |  .. ;
 | 
|---|
| 223 |  .. ; -- see if it's used
 | 
|---|
| 224 |  .. S K=0 F  S K=$O(^IBE(357.6,K)) Q:'K  I $D(^IBE(357.6,K,13)) D
 | 
|---|
| 225 |  ... S L=0 F  S L=$O(^IBE(357.6,K,13,L)) Q:'L  I $P($G(^IBE(357.6,K,13,L,0)),"^",1)=(J_";IBD(357.98,") D
 | 
|---|
| 226 |  .... S CNT2=CNT2+1
 | 
|---|
| 227 |  .... S CNT3(CNT2)="       and was used by Package File entry "_$P($G(^IBE(357.6,K,0)),"^",1)
 | 
|---|
| 228 |  .. ;
 | 
|---|
| 229 |  .. ; -- finally, make the change
 | 
|---|
| 230 |  .. S NEWNAME=$E("ZZBAD-"_$P(^IBD(357.98,J,0),"^",1),1,30)
 | 
|---|
| 231 |  .. S DIE="^IBD(357.98,",DA=J,DR=".01////^S X=NEWNAME;.02////^S X=CODE"
 | 
|---|
| 232 |  .. N I,J,K,L,X,Y D ^DIE K DIE,DA,DR
 | 
|---|
| 233 |  ;
 | 
|---|
| 234 |  ;
 | 
|---|
| 235 |  ; -- reindex the file
 | 
|---|
| 236 |  S DIK="^IBD(357.98,"
 | 
|---|
| 237 |  D IXALL^DIK
 | 
|---|
| 238 |  ;
 | 
|---|
| 239 |  ; summary of the aics data qualifiers check
 | 
|---|
| 240 |  ;
 | 
|---|
| 241 |  K X
 | 
|---|
| 242 |  S X(1)=" ",X(2)=" >> Summary of the AICS Data Qualifiers Check:"
 | 
|---|
| 243 |  D:TALK MES^XPDUTL(.X)
 | 
|---|
| 244 |  K X
 | 
|---|
| 245 |  I $G(CNT1)>0 M X=CNT3 S X(1)="    The number of changes made was "_CNT1
 | 
|---|
| 246 |  I CNT1=0 S X(1)="    No required changes were found.",X(2)=" "
 | 
|---|
| 247 |  I CNT1>1 S (X(CNT2+1),X(CNT2+3))=" ",X(CNT2+2)=" >> Done updating the AICS DATA QUALIFIERS file"
 | 
|---|
| 248 |  D:TALK MES^XPDUTL(.X)
 | 
|---|
| 249 |  Q
 | 
|---|
| 250 |  ;
 | 
|---|
| 251 | DATA ;;
 | 
|---|
| 252 |  ;;NONE APPLICABLE^ 
 | 
|---|
| 253 |  ;;PRIMARY^P^P
 | 
|---|
| 254 |  ;;SECONDARY^S^S
 | 
|---|
| 255 |  ;;ACTIVE^A^A
 | 
|---|
| 256 |  ;;INACTIVE^I^I
 | 
|---|
| 257 |  ;;HISTORICAL^H
 | 
|---|
| 258 |  ;;ADD TO PROBLEM LIST^1^ADD
 | 
|---|
| 259 |  ;;SERVICE CONNECTED^1^SC
 | 
|---|
| 260 |  ;;AGENT ORANGE RELATED^1^AO
 | 
|---|
| 261 |  ;;IONIZING RADIATION RELATED^1^IR
 | 
|---|
| 262 |  ;;ENVIRONMENTAL CONTAMINANTS RELATED^1^EC
 | 
|---|
| 263 |  ;;MILITARY SEXUAL TRAUMA^1^MST
 | 
|---|
| 264 |  ;;ABNORMAL RESULT^A^ABNORM
 | 
|---|
| 265 |  ;;NORMAL RESULT^N^NORM
 | 
|---|
| 266 |  ;;POOR UNDERSTANDING^1^POOR
 | 
|---|
| 267 |  ;;FAIR UNDERSTANDING^2^FAIR
 | 
|---|
| 268 |  ;;GOOD UNDERSTANDING^3^GOOD
 | 
|---|
| 269 |  ;;UNDERSTANDING NOT ASSESSED^4^N/A
 | 
|---|
| 270 |  ;;PATIENT ED REFUSED^5^REFUSED
 | 
|---|
| 271 |  ;;MINIMAL SEVERITY^M^MINIMAL
 | 
|---|
| 272 |  ;;MODERATE SEVERITY^MO^MODERATE
 | 
|---|
| 273 |  ;;HEAVY SEVERITY^H^SEVERE
 | 
|---|
| 274 |  ;;YES^1^YES
 | 
|---|
| 275 |  ;;NO^0^NO
 | 
|---|
| 276 |  ;;CONTRAINDICATED^1^CONTRA.
 | 
|---|
| 277 |  ;;GIVEN^0^GIV
 | 
|---|
| 278 |  ;;REFUSED^1^REFUSED
 | 
|---|
| 279 |  ;;NON-SERVICE CONNECTED^0^NSC
 | 
|---|
| 280 |  ;;NO CLASSIFICATIONS^1^NO CLASSIF
 | 
|---|
| 281 |  ;;
 | 
|---|