GMRA1008 ;IHS/MSC/PLS - Patch support;19-Sep-2014 10:02;DU
;;4.0;Adverse Reaction Tracking;**1008**;Mar 29, 1996;Build 8
;
ENV ;EP -
N PATCH
S (XPDDIQ("XPZ1"),XPDDIQ("XPZ2"))=0
;
;Check for the installation of other patches
S PATCH="GMRA*4.0*1007"
I '$$PATCH(PATCH) D Q
. W !,"You must first install "_PATCH_"." S XPDQUIT=2
Q
;
PATCH(X) ;return 1 if patch X was installed, X=aaaa*nn.nn*nnnn
;copy of code from XPDUTL but modified to handle 4 digit IHS patch numb
Q:X'?1.4UN1"*"1.2N1"."1.2N.1(1"V",1"T").2N1"*"1.4N 0
NEW NUM,I,J
S I=$O(^DIC(9.4,"C",$P(X,"*"),0)) Q:'I 0
S J=$O(^DIC(9.4,I,22,"B",$P(X,"*",2),0)),X=$P(X,"*",3) Q:'J 0
;check if patch is just a number
Q:$O(^DIC(9.4,I,22,J,"PAH","B",X,0)) 1
S NUM=$O(^DIC(9.4,I,22,J,"PAH","B",X_" SEQ"))
Q (X=+NUM)
PRE ;EP -
;Loop through the allergy file and remove any bad cross-references to
;the drug file that are found there
N IEN,AIEN,FDA,X,X1,X2
S IEN=0 F S IEN=$O(^GMR(120.8,IEN)) Q:'+IEN D
.S X=$P($G(^GMR(120.8,IEN,0)),U,3)
.I X[$C(34) D
..S X1=$P(X,$C(34))
..S X2=X1_","
..S AIEN=IEN_","
..S FDA(120.8,AIEN,1)=X2
..D UPDATE^DIE(,"FDA","DIEN","ERR")
Q
POST ;EP -
D DATA,SIGNS
D INACT
;D TOP10^GMRAUTL2
Q
INACT ;EP Remove duplicate caterpillar entries
N IEN,X,SAVE
S SAVE=0
S IEN="" F S IEN=$O(^GMRD(120.82,"B","CATERPILLER STING",IEN)) Q:IEN="" D
.S X=$$CHECK^ORWDAL32(IEN)
.I X=0 D INAC(IEN)
Q
INAC(IEN) ;Inactivate this entry
K ERR,FDA,NIEN,FNUM
S FNUM=120.8299
S AIEN="+1,"_IEN_","
S FDA(120.8299,AIEN,.01)=$$NOW^XLFDT
S FDA(120.8299,AIEN,.02)=0
D UPDATE^DIE(,"FDA","NIEN","ERR")
I $D(ERR) W !,IENS W ERR("DIERR",1,"TEXT",1) W !
Q
;
SIGNS ;EP-
N F,LP,NAM
S F=120.83
D DATAIN^DIFROMS(F,"","",XPDGREF),DIERR("** ERROR IN DATA FOR FILE # "_F_" **"):$D(DIERR)
Q
;
DATA ; Import Data
N LP,NAM,F,LNAARY,XUMF
; Build array of local national allergies
S LP=0 F S LP=$O(^GMRD(120.82,LP)) Q:'LP D
.Q:'$P(^GMRD(120.82,LP,0),U,3) ;Must be a National Allergy
.S LNAARY($P(^GMRD(120.82,LP,0),U),LP)=""
S F=120.82,XUMF=1
S LP=0 F S LP=$O(@XPDGREF@("DATA",F,LP)) Q:'LP D
.Q:'$P(@XPDGREF@("DATA",F,LP,0),U,3) ; Must be marked as National Allergy
.S NAM=$P($G(@XPDGREF@("DATA",F,LP,0)),U)
.D STOREALG(LP)
Q
;
STOREALG(DATAIEN) ;
N FDA,FDAIEN,ERR,IENS,ARY,LP2,CNT,IEN
Q:'$L(DATAIEN)
M ARY=@XPDGREF@("DATA",120.82,DATAIEN)
S IEN=$$ALGIEN(NAM)
S:'IEN IEN="+1"
S IENS=IEN_",",X=IEN
S CNT=0
I X=+X D ;EXISTING ENTRY
.S FDA(F,IENS,1)=$P(ARY(0),U,2)
.S FDA(F,IENS,2)=$P(ARY(0),U,3)
.S FDA(F,IENS,99.99)=$P($G(ARY("VUID")),U,1)
.S FDA(F,IENS,99.98)=$P($G(ARY("VUID")),U,2)
.D FILE^DIE("K","FDA","ERR")
.Q:$D(ERR)
.D SUBDATA(IEN)
E D ;New entry
.S FDA(F,IENS,.01)=$P(ARY(0),U)
.S FDA(F,IENS,1)=$P(ARY(0),U,2)
.S FDA(F,IENS,2)=$P(ARY(0),U,3)
.S FDA(F,IENS,99.99)=$P($G(ARY("VUID")),U,1)
.S FDA(F,IENS,99.98)=$P($G(ARY("VUID")),U,2)
.D UPDATE^DIE("","FDA","IENS","ERR")
.I $D(ERR) W !,IENS W ERR W !! Q
.D SUBDATA(IENS(1))
Q
; Add subfile data
SUBDATA(DIEN) ;EP-
N IENS
S IENS=DIEN_","
; KILL EXISTING SUBFILE DATA
;Synonyms
K ^GMRD(120.82,DIEN,3)
S LP2=0 F S LP2=$O(ARY(3,LP2)) Q:'LP2 D
.S FDA(120.823,"+"_$$INC()_","_IENS,.01)=$P(ARY(3,LP2,0),U)
;Drug Class
K ^GMRD(120.82,DIEN,"CLASS")
S LP2=0 F S LP2=$O(ARY("CLASS",LP2)) Q:'LP2 D
.S FDA(120.8205,"+"_$$INC()_","_IENS,.01)=$P(ARY("CLASS",LP2,0),U)
;Drug Ingredient
K ^GMRD(120.82,DIEN,"ING")
S LP2=0 F S LP2=$O(ARY("ING",LP2)) Q:'LP2 D
.S FDA(120.824,"+"_$$INC()_","_IENS,.01)=$P(ARY("ING",LP2,0),U)
;Effective Date
K ^GMRD(120.82,DIEN,"TERMSTATUS")
S LP2=0 F S LP2=$O(ARY("TERMSTATUS",LP2)) Q:'LP2 D
.S FDA(120.8299,"+"_$$INC()_","_IENS,.01)=$P(ARY("TERMSTATUS",LP2,0),U)
.S FDA(120.8299,"+"_$$INC(0)_","_IENS,.02)=$P(ARY("TERMSTATUS",LP2,0),U,2)
K ERR
D UPDATE^DIE("","FDA","","ERR")
I $D(ERR) W !,IENS W ERR("DIERR",1,"TEXT",1) W !! Q
Q
; Increment counter
INC(VAL) ;EP-
S VAL=$G(VAL,1)
S CNT=$G(CNT)+VAL
Q CNT
DIERR(XPDI) N XPD
D MSG^DIALOG("AE",.XPD) Q:'$D(XPD)
D BMES^XPDUTL(XPDI),MES^XPDUTL(.XPD)
Q
; Check existence of entry
EXISTS(NAM) ;EP -
Q $O(LNAARY(NAM,0))>0
; Get Allergy IEN from Local National Allergies
ALGIEN(NAM) ;EP-
Q $O(LNAARY(NAM,0))
; Check for Drug Allergy
DRUG(IEN) ;EP-
Q $P($G(^GMRD(120.82,IEN,0)),U,2)["D"
;
PRETRAN ;EP -
D PRELOOP(120.82,"GMR ALLERGIES",""),PRELOOP(120.83,"SIGN/SYMPTOMS","")
Q
PRELOOP(FILE,FNAM,SCRN) ;EP-
D FIA^DIFROMSU(FILE,"",FNAM,XPDGREF,"n^n^f^^n^^y^m^n","",SCRN,4.0)
D DATAOUT^DIFROMS("","","",XPDGREF)
Q
GMRA1008 ;IHS/MSC/PLS - Patch support;19-Sep-2014 10:02;DU
+1 ;;4.0;Adverse Reaction Tracking;**1008**;Mar 29, 1996;Build 8
+2 ;
ENV ;EP -
+1 NEW PATCH
+2 SET (XPDDIQ("XPZ1"),XPDDIQ("XPZ2"))=0
+3 ;
+4 ;Check for the installation of other patches
+5 SET PATCH="GMRA*4.0*1007"
+6 IF '$$PATCH(PATCH)
Begin DoDot:1
+7 WRITE !,"You must first install "_PATCH_"."
SET XPDQUIT=2
End DoDot:1
QUIT
+8 QUIT
+9 ;
PATCH(X) ;return 1 if patch X was installed, X=aaaa*nn.nn*nnnn
+1 ;copy of code from XPDUTL but modified to handle 4 digit IHS patch numb
+2 IF X'?1.4UN1"*"1.2N1"."1.2N.1(1"V",1"T").2N1"*"1.4N
QUIT 0
+3 NEW NUM,I,J
+4 SET I=$ORDER(^DIC(9.4,"C",$PIECE(X,"*"),0))
IF 'I
QUIT 0
+5 SET J=$ORDER(^DIC(9.4,I,22,"B",$PIECE(X,"*",2),0))
SET X=$PIECE(X,"*",3)
IF 'J
QUIT 0
+6 ;check if patch is just a number
+7 IF $ORDER(^DIC(9.4,I,22,J,"PAH","B",X,0))
QUIT 1
+8 SET NUM=$ORDER(^DIC(9.4,I,22,J,"PAH","B",X_" SEQ"))
+9 QUIT (X=+NUM)
PRE ;EP -
+1 ;Loop through the allergy file and remove any bad cross-references to
+2 ;the drug file that are found there
+3 NEW IEN,AIEN,FDA,X,X1,X2
+4 SET IEN=0
FOR
SET IEN=$ORDER(^GMR(120.8,IEN))
IF '+IEN
QUIT
Begin DoDot:1
+5 SET X=$PIECE($GET(^GMR(120.8,IEN,0)),U,3)
+6 IF X[$CHAR(34)
Begin DoDot:2
+7 SET X1=$PIECE(X,$CHAR(34))
+8 SET X2=X1_","
+9 SET AIEN=IEN_","
+10 SET FDA(120.8,AIEN,1)=X2
+11 DO UPDATE^DIE(,"FDA","DIEN","ERR")
End DoDot:2
End DoDot:1
+12 QUIT
POST ;EP -
+1 DO DATA
DO SIGNS
+2 DO INACT
+3 ;D TOP10^GMRAUTL2
+4 QUIT
INACT ;EP Remove duplicate caterpillar entries
+1 NEW IEN,X,SAVE
+2 SET SAVE=0
+3 SET IEN=""
FOR
SET IEN=$ORDER(^GMRD(120.82,"B","CATERPILLER STING",IEN))
IF IEN=""
QUIT
Begin DoDot:1
+4 SET X=$$CHECK^ORWDAL32(IEN)
+5 IF X=0
DO INAC(IEN)
End DoDot:1
+6 QUIT
INAC(IEN) ;Inactivate this entry
+1 KILL ERR,FDA,NIEN,FNUM
+2 SET FNUM=120.8299
+3 SET AIEN="+1,"_IEN_","
+4 SET FDA(120.8299,AIEN,.01)=$$NOW^XLFDT
+5 SET FDA(120.8299,AIEN,.02)=0
+6 DO UPDATE^DIE(,"FDA","NIEN","ERR")
+7 IF $DATA(ERR)
WRITE !,IENS
WRITE ERR("DIERR",1,"TEXT",1)
WRITE !
+8 QUIT
+9 ;
SIGNS ;EP-
+1 NEW F,LP,NAM
+2 SET F=120.83
+3 DO DATAIN^DIFROMS(F,"","",XPDGREF)
IF $DATA(DIERR)
DO DIERR("** ERROR IN DATA FOR FILE # "_F_" **")
+4 QUIT
+5 ;
DATA ; Import Data
+1 NEW LP,NAM,F,LNAARY,XUMF
+2 ; Build array of local national allergies
+3 SET LP=0
FOR
SET LP=$ORDER(^GMRD(120.82,LP))
IF 'LP
QUIT
Begin DoDot:1
+4 ;Must be a National Allergy
IF '$PIECE(^GMRD(120.82,LP,0),U,3)
QUIT
+5 SET LNAARY($PIECE(^GMRD(120.82,LP,0),U),LP)=""
End DoDot:1
+6 SET F=120.82
SET XUMF=1
+7 SET LP=0
FOR
SET LP=$ORDER(@XPDGREF@("DATA",F,LP))
IF 'LP
QUIT
Begin DoDot:1
+8 ; Must be marked as National Allergy
IF '$PIECE(@XPDGREF@("DATA",F,LP,0),U,3)
QUIT
+9 SET NAM=$PIECE($GET(@XPDGREF@("DATA",F,LP,0)),U)
+10 DO STOREALG(LP)
End DoDot:1
+11 QUIT
+12 ;
STOREALG(DATAIEN) ;
+1 NEW FDA,FDAIEN,ERR,IENS,ARY,LP2,CNT,IEN
+2 IF '$LENGTH(DATAIEN)
QUIT
+3 MERGE ARY=@XPDGREF@("DATA",120.82,DATAIEN)
+4 SET IEN=$$ALGIEN(NAM)
+5 IF 'IEN
SET IEN="+1"
+6 SET IENS=IEN_","
SET X=IEN
+7 SET CNT=0
+8 ;EXISTING ENTRY
IF X=+X
Begin DoDot:1
+9 SET FDA(F,IENS,1)=$PIECE(ARY(0),U,2)
+10 SET FDA(F,IENS,2)=$PIECE(ARY(0),U,3)
+11 SET FDA(F,IENS,99.99)=$PIECE($GET(ARY("VUID")),U,1)
+12 SET FDA(F,IENS,99.98)=$PIECE($GET(ARY("VUID")),U,2)
+13 DO FILE^DIE("K","FDA","ERR")
+14 IF $DATA(ERR)
QUIT
+15 DO SUBDATA(IEN)
End DoDot:1
+16 ;New entry
IF '$TEST
Begin DoDot:1
+17 SET FDA(F,IENS,.01)=$PIECE(ARY(0),U)
+18 SET FDA(F,IENS,1)=$PIECE(ARY(0),U,2)
+19 SET FDA(F,IENS,2)=$PIECE(ARY(0),U,3)
+20 SET FDA(F,IENS,99.99)=$PIECE($GET(ARY("VUID")),U,1)
+21 SET FDA(F,IENS,99.98)=$PIECE($GET(ARY("VUID")),U,2)
+22 DO UPDATE^DIE("","FDA","IENS","ERR")
+23 IF $DATA(ERR)
WRITE !,IENS
WRITE ERR
WRITE !!
QUIT
+24 DO SUBDATA(IENS(1))
End DoDot:1
+25 QUIT
+26 ; Add subfile data
SUBDATA(DIEN) ;EP-
+1 NEW IENS
+2 SET IENS=DIEN_","
+3 ; KILL EXISTING SUBFILE DATA
+4 ;Synonyms
+5 KILL ^GMRD(120.82,DIEN,3)
+6 SET LP2=0
FOR
SET LP2=$ORDER(ARY(3,LP2))
IF 'LP2
QUIT
Begin DoDot:1
+7 SET FDA(120.823,"+"_$$INC()_","_IENS,.01)=$PIECE(ARY(3,LP2,0),U)
End DoDot:1
+8 ;Drug Class
+9 KILL ^GMRD(120.82,DIEN,"CLASS")
+10 SET LP2=0
FOR
SET LP2=$ORDER(ARY("CLASS",LP2))
IF 'LP2
QUIT
Begin DoDot:1
+11 SET FDA(120.8205,"+"_$$INC()_","_IENS,.01)=$PIECE(ARY("CLASS",LP2,0),U)
End DoDot:1
+12 ;Drug Ingredient
+13 KILL ^GMRD(120.82,DIEN,"ING")
+14 SET LP2=0
FOR
SET LP2=$ORDER(ARY("ING",LP2))
IF 'LP2
QUIT
Begin DoDot:1
+15 SET FDA(120.824,"+"_$$INC()_","_IENS,.01)=$PIECE(ARY("ING",LP2,0),U)
End DoDot:1
+16 ;Effective Date
+17 KILL ^GMRD(120.82,DIEN,"TERMSTATUS")
+18 SET LP2=0
FOR
SET LP2=$ORDER(ARY("TERMSTATUS",LP2))
IF 'LP2
QUIT
Begin DoDot:1
+19 SET FDA(120.8299,"+"_$$INC()_","_IENS,.01)=$PIECE(ARY("TERMSTATUS",LP2,0),U)
+20 SET FDA(120.8299,"+"_$$INC(0)_","_IENS,.02)=$PIECE(ARY("TERMSTATUS",LP2,0),U,2)
End DoDot:1
+21 KILL ERR
+22 DO UPDATE^DIE("","FDA","","ERR")
+23 IF $DATA(ERR)
WRITE !,IENS
WRITE ERR("DIERR",1,"TEXT",1)
WRITE !!
QUIT
+24 QUIT
+25 ; Increment counter
INC(VAL) ;EP-
+1 SET VAL=$GET(VAL,1)
+2 SET CNT=$GET(CNT)+VAL
+3 QUIT CNT
DIERR(XPDI) NEW XPD
+1 DO MSG^DIALOG("AE",.XPD)
IF '$DATA(XPD)
QUIT
+2 DO BMES^XPDUTL(XPDI)
DO MES^XPDUTL(.XPD)
+3 QUIT
+4 ; Check existence of entry
EXISTS(NAM) ;EP -
+1 QUIT $ORDER(LNAARY(NAM,0))>0
+2 ; Get Allergy IEN from Local National Allergies
ALGIEN(NAM) ;EP-
+1 QUIT $ORDER(LNAARY(NAM,0))
+2 ; Check for Drug Allergy
DRUG(IEN) ;EP-
+1 QUIT $PIECE($GET(^GMRD(120.82,IEN,0)),U,2)["D"
+2 ;
PRETRAN ;EP -
+1 DO PRELOOP(120.82,"GMR ALLERGIES","")
DO PRELOOP(120.83,"SIGN/SYMPTOMS","")
+2 QUIT
PRELOOP(FILE,FNAM,SCRN) ;EP-
+1 DO FIA^DIFROMSU(FILE,"",FNAM,XPDGREF,"n^n^f^^n^^y^m^n","",SCRN,4.0)
+2 DO DATAOUT^DIFROMS("","","",XPDGREF)
+3 QUIT