DG53415 ;BPFO/JRP - PRE/POST INITS FOR PATCH 415;7/11/2002 ; 11/5/02 12:45pm
;;5.3;Registration;**415,1015**;Aug 13, 1993;Build 21
;
Q
;
PRE ;Pre-init entry point
N JUNK1,JUNK2,SUBFILE
;Delete obsolete sub-files
F SUBFILE=2.02,2.06 I $D(^DD(SUBFILE)) D
.;Don't delete if the obsolete sub-file isn't there
.N DEL,X
.S DEL=0
.S X=0 F S X=+$O(^DD(2,"SB",SUBFILE,X)) Q:'X D Q:DEL
..I SUBFILE=2.02 S:(X'=2) DEL=1
..I SUBFILE=2.06 S:(X'=6) DEL=1
.Q:'DEL
.;Remove reference to correct sub-file
.S X=$S(SUBFILE=2.02:2,1:6) K ^DD(2,"SB",SUBFILE,X)
.;Delete sub-file
.S JUNK1(1)=" "
.S JUNK1(2)="The new "_$S(SUBFILE=2.02:"RACE",1:"ETHNICITY")_" INFORMATION multiple is contained in"
.S JUNK1(3)="an obsolete sub-file that still exists on your system."
.S JUNK1(4)="The obsolete sub-file (#"_SUBFILE_") will now be deleted."
.S JUNK1(5)=" "
.D MES^XPDUTL(.JUNK1) K JUNK1
.N DIU
.S DIU=SUBFILE
.S DIU(0)="DST"
.D EN^DIU2
;Delete "bad" B x-reference on RACE file (patch brings in "good" one)
S JUNK1(1)=" "
S JUNK1(2)="The B cross reference on the RACE file (#10) may be listed"
S JUNK1(3)="as the second cross reference of the NAME field (#.01)"
S JUNK1(4)="instead of the first. To ensure that the B cross"
S JUNK1(5)="reference is listed as the first cross reference, the"
S JUNK1(6)="second cross reference of the NAME field will now be"
S JUNK1(7)="deleted."
S JUNK1(8)=" "
D MES^XPDUTL(.JUNK1) K JUNK1
D DELIX^DDMOD(10,.01,2,"W","JUNK1","JUNK2")
Q
;
POST ;Post-init entry point
N JUNK,DIK,RACES,IEN
;Rebuild B x-reference on RACE file
S JUNK(1)=" "
S JUNK(2)="The incorrect B cross reference on the RACE file (#10),"
S JUNK(3)="which was removed by the pre-init, placed the entire value"
S JUNK(4)="of the NAME field (#.01) into the cross reference. The"
S JUNK(5)="correct logic for the B cross reference only places the"
S JUNK(6)="first thirty characters into the cross reference. To"
S JUNK(7)="ensure that the cross referenced values are correct, the"
S JUNK(8)="entire B cross reference will now be deleted and then"
S JUNK(9)="reindexed."
S JUNK(10)=" "
D MES^XPDUTL(.JUNK) K JUNK
K ^DIC(10,"B")
S DIK="^DIC(10,"
S DIK(1)=".01^B"
D ENALL^DIK K DIK
;Inactivate all races
S JUNK(1)=" "
S JUNK(2)="Marking all entries in the RACE file (#10) as inactive"
S JUNK(3)=" "
D MES^XPDUTL(.JUNK) K JUNK
S IEN=0
F S IEN=+$O(^DIC(10,IEN)) Q:'IEN D
.N FDAROOT,MSGROOT,IENS
.S IENS=IEN_","
.S FDAROOT(10,IENS,200)=1
.S FDAROOT(10,IENS,202)=$P($$NOW^XLFDT(),".",1)
.D FILE^DIE("K","FDAROOT","MSGROOT")
.I $D(MSGROOT) D
..S JUNK(1)=" **"
..S JUNK(2)=" ** ERROR"
..S JUNK(3)=" ** Unable to inactivate entry number "_IEN
..S JUNK(4)=" ** Entry should be inactivated via FileMan"
..S JUNK(5)=" **"
..D MES^XPDUTL(.JUNK) K JUNK
;Create/update national entries
S JUNK(1)=" "
S JUNK(2)="Creating/updating nationally supported entries in the RACE"
S JUNK(3)="file (#10)"
S JUNK(4)=" "
D MES^XPDUTL(.JUNK) K JUNK
D BLDLST(.RACES)
S IEN=0
F S IEN=+$O(RACES("FDA",IEN)) Q:'IEN D
.N FDAROOT,IENROOT,MSGROOT,IENS,TMP
.S TMP=RACES("FDA",IEN,.01)
.S IENS=+$O(^DIC(10,"B",$E(TMP,1,30),0)) S:'IENS IENS="+1"
.S IENS=IENS_","
.M FDAROOT(10,IENS)=RACES("FDA",IEN)
.D UPDATE^DIE("","FDAROOT","IENROOT","MSGROOT")
.I $D(MSGROOT) D
..S JUNK(1)=" **"
..S JUNK(2)=" ** ERROR"
..S JUNK(3)=" ** Unable to create entry for "_RACES("FDA",IEN,.01)
..S JUNK(4)=" ** Entry should be created via FileMan"
..S JUNK(5)=" ** Name (.01): "_RACES("FDA",IEN,.01)
..S JUNK(6)=" ** Abbrev (2): "_RACES("FDA",IEN,2)
..S JUNK(7)=" ** HL7 Val (3): "_RACES("FDA",IEN,3)
..S JUNK(8)=" ** CDC Val (4): "_RACES("FDA",IEN,4)
..S JUNK(9)=" ** PTF Val (5): "_RACES("FDA",IEN,5)
..S JUNK(10)=" **"
..D MES^XPDUTL(.JUNK) K JUNK
;Delete RACE identifier
S JUNK(1)=" "
S JUNK(2)="Removing old RACE field (#.06) as an identifier of the"
S JUNK(3)="PATIENT file (#2)."
S JUNK(4)=" "
D MES^XPDUTL(.JUNK) K JUNK
K ^DD(2,0,"ID",.06)
Q
;
BLDLST(ARRAY) ;Build list of valid races
;Input : ARRAY - Array to place values into (pass by value)
;Output : ARRAY("FDA",X,Field) = Value
;Notes : ARRAY will be initiallized (killed) on entry
; : Assumes ARRAY is input
;
N LOOP,TEXT,STOP,X
K ARRAY
S (STOP,LOOP)=0
F S LOOP=LOOP+1 D Q:STOP
.S TEXT=$P($T(RACES+LOOP),";;",2)
.S X=$P(TEXT,"^",1)
.I X="" S STOP=1 Q
.S ARRAY("FDA",LOOP,.01)=X
.F X=2:1:5 S ARRAY("FDA",LOOP,X)=$P(TEXT,"^",X)
.S ARRAY("FDA",LOOP,200)="@"
.S ARRAY("FDA",LOOP,202)="@"
Q
;
RACES ;RACE (#.01)^ABBREVIATION (#2)^HL7 (#3)^CDC (#4)^PTF (#5)
;;AMERICAN INDIAN OR ALASKA NATIVE^3^1002-5^1002-5^3
;;ASIAN^A^2028-9^2028-9^8
;;BLACK OR AFRICAN AMERICAN^B^2054-5^2054-5^9
;;DECLINED TO ANSWER^D^0000-0^^C
;;NATIVE HAWAIIAN OR OTHER PACIFIC ISLANDER^H^2076-8^2076-8^A
;;UNKNOWN BY PATIENT^U^9999-4^^D
;;WHITE^W^2106-3^2106-3^B
;;
DG53415 ;BPFO/JRP - PRE/POST INITS FOR PATCH 415;7/11/2002 ; 11/5/02 12:45pm
+1 ;;5.3;Registration;**415,1015**;Aug 13, 1993;Build 21
+2 ;
+3 QUIT
+4 ;
PRE ;Pre-init entry point
+1 NEW JUNK1,JUNK2,SUBFILE
+2 ;Delete obsolete sub-files
+3 FOR SUBFILE=2.02,2.06
IF $DATA(^DD(SUBFILE))
Begin DoDot:1
+4 ;Don't delete if the obsolete sub-file isn't there
+5 NEW DEL,X
+6 SET DEL=0
+7 SET X=0
FOR
SET X=+$ORDER(^DD(2,"SB",SUBFILE,X))
IF 'X
QUIT
Begin DoDot:2
+8 IF SUBFILE=2.02
IF (X'=2)
SET DEL=1
+9 IF SUBFILE=2.06
IF (X'=6)
SET DEL=1
End DoDot:2
IF DEL
QUIT
+10 IF 'DEL
QUIT
+11 ;Remove reference to correct sub-file
+12 SET X=$SELECT(SUBFILE=2.02:2,1:6)
KILL ^DD(2,"SB",SUBFILE,X)
+13 ;Delete sub-file
+14 SET JUNK1(1)=" "
+15 SET JUNK1(2)="The new "_$SELECT(SUBFILE=2.02:"RACE",1:"ETHNICITY")_" INFORMATION multiple is contained in"
+16 SET JUNK1(3)="an obsolete sub-file that still exists on your system."
+17 SET JUNK1(4)="The obsolete sub-file (#"_SUBFILE_") will now be deleted."
+18 SET JUNK1(5)=" "
+19 DO MES^XPDUTL(.JUNK1)
KILL JUNK1
+20 NEW DIU
+21 SET DIU=SUBFILE
+22 SET DIU(0)="DST"
+23 DO EN^DIU2
End DoDot:1
+24 ;Delete "bad" B x-reference on RACE file (patch brings in "good" one)
+25 SET JUNK1(1)=" "
+26 SET JUNK1(2)="The B cross reference on the RACE file (#10) may be listed"
+27 SET JUNK1(3)="as the second cross reference of the NAME field (#.01)"
+28 SET JUNK1(4)="instead of the first. To ensure that the B cross"
+29 SET JUNK1(5)="reference is listed as the first cross reference, the"
+30 SET JUNK1(6)="second cross reference of the NAME field will now be"
+31 SET JUNK1(7)="deleted."
+32 SET JUNK1(8)=" "
+33 DO MES^XPDUTL(.JUNK1)
KILL JUNK1
+34 DO DELIX^DDMOD(10,.01,2,"W","JUNK1","JUNK2")
+35 QUIT
+36 ;
POST ;Post-init entry point
+1 NEW JUNK,DIK,RACES,IEN
+2 ;Rebuild B x-reference on RACE file
+3 SET JUNK(1)=" "
+4 SET JUNK(2)="The incorrect B cross reference on the RACE file (#10),"
+5 SET JUNK(3)="which was removed by the pre-init, placed the entire value"
+6 SET JUNK(4)="of the NAME field (#.01) into the cross reference. The"
+7 SET JUNK(5)="correct logic for the B cross reference only places the"
+8 SET JUNK(6)="first thirty characters into the cross reference. To"
+9 SET JUNK(7)="ensure that the cross referenced values are correct, the"
+10 SET JUNK(8)="entire B cross reference will now be deleted and then"
+11 SET JUNK(9)="reindexed."
+12 SET JUNK(10)=" "
+13 DO MES^XPDUTL(.JUNK)
KILL JUNK
+14 KILL ^DIC(10,"B")
+15 SET DIK="^DIC(10,"
+16 SET DIK(1)=".01^B"
+17 DO ENALL^DIK
KILL DIK
+18 ;Inactivate all races
+19 SET JUNK(1)=" "
+20 SET JUNK(2)="Marking all entries in the RACE file (#10) as inactive"
+21 SET JUNK(3)=" "
+22 DO MES^XPDUTL(.JUNK)
KILL JUNK
+23 SET IEN=0
+24 FOR
SET IEN=+$ORDER(^DIC(10,IEN))
IF 'IEN
QUIT
Begin DoDot:1
+25 NEW FDAROOT,MSGROOT,IENS
+26 SET IENS=IEN_","
+27 SET FDAROOT(10,IENS,200)=1
+28 SET FDAROOT(10,IENS,202)=$PIECE($$NOW^XLFDT(),".",1)
+29 DO FILE^DIE("K","FDAROOT","MSGROOT")
+30 IF $DATA(MSGROOT)
Begin DoDot:2
+31 SET JUNK(1)=" **"
+32 SET JUNK(2)=" ** ERROR"
+33 SET JUNK(3)=" ** Unable to inactivate entry number "_IEN
+34 SET JUNK(4)=" ** Entry should be inactivated via FileMan"
+35 SET JUNK(5)=" **"
+36 DO MES^XPDUTL(.JUNK)
KILL JUNK
End DoDot:2
End DoDot:1
+37 ;Create/update national entries
+38 SET JUNK(1)=" "
+39 SET JUNK(2)="Creating/updating nationally supported entries in the RACE"
+40 SET JUNK(3)="file (#10)"
+41 SET JUNK(4)=" "
+42 DO MES^XPDUTL(.JUNK)
KILL JUNK
+43 DO BLDLST(.RACES)
+44 SET IEN=0
+45 FOR
SET IEN=+$ORDER(RACES("FDA",IEN))
IF 'IEN
QUIT
Begin DoDot:1
+46 NEW FDAROOT,IENROOT,MSGROOT,IENS,TMP
+47 SET TMP=RACES("FDA",IEN,.01)
+48 SET IENS=+$ORDER(^DIC(10,"B",$EXTRACT(TMP,1,30),0))
IF 'IENS
SET IENS="+1"
+49 SET IENS=IENS_","
+50 MERGE FDAROOT(10,IENS)=RACES("FDA",IEN)
+51 DO UPDATE^DIE("","FDAROOT","IENROOT","MSGROOT")
+52 IF $DATA(MSGROOT)
Begin DoDot:2
+53 SET JUNK(1)=" **"
+54 SET JUNK(2)=" ** ERROR"
+55 SET JUNK(3)=" ** Unable to create entry for "_RACES("FDA",IEN,.01)
+56 SET JUNK(4)=" ** Entry should be created via FileMan"
+57 SET JUNK(5)=" ** Name (.01): "_RACES("FDA",IEN,.01)
+58 SET JUNK(6)=" ** Abbrev (2): "_RACES("FDA",IEN,2)
+59 SET JUNK(7)=" ** HL7 Val (3): "_RACES("FDA",IEN,3)
+60 SET JUNK(8)=" ** CDC Val (4): "_RACES("FDA",IEN,4)
+61 SET JUNK(9)=" ** PTF Val (5): "_RACES("FDA",IEN,5)
+62 SET JUNK(10)=" **"
+63 DO MES^XPDUTL(.JUNK)
KILL JUNK
End DoDot:2
End DoDot:1
+64 ;Delete RACE identifier
+65 SET JUNK(1)=" "
+66 SET JUNK(2)="Removing old RACE field (#.06) as an identifier of the"
+67 SET JUNK(3)="PATIENT file (#2)."
+68 SET JUNK(4)=" "
+69 DO MES^XPDUTL(.JUNK)
KILL JUNK
+70 KILL ^DD(2,0,"ID",.06)
+71 QUIT
+72 ;
BLDLST(ARRAY) ;Build list of valid races
+1 ;Input : ARRAY - Array to place values into (pass by value)
+2 ;Output : ARRAY("FDA",X,Field) = Value
+3 ;Notes : ARRAY will be initiallized (killed) on entry
+4 ; : Assumes ARRAY is input
+5 ;
+6 NEW LOOP,TEXT,STOP,X
+7 KILL ARRAY
+8 SET (STOP,LOOP)=0
+9 FOR
SET LOOP=LOOP+1
Begin DoDot:1
+10 SET TEXT=$PIECE($TEXT(RACES+LOOP),";;",2)
+11 SET X=$PIECE(TEXT,"^",1)
+12 IF X=""
SET STOP=1
QUIT
+13 SET ARRAY("FDA",LOOP,.01)=X
+14 FOR X=2:1:5
SET ARRAY("FDA",LOOP,X)=$PIECE(TEXT,"^",X)
+15 SET ARRAY("FDA",LOOP,200)="@"
+16 SET ARRAY("FDA",LOOP,202)="@"
End DoDot:1
IF STOP
QUIT
+17 QUIT
+18 ;
RACES ;RACE (#.01)^ABBREVIATION (#2)^HL7 (#3)^CDC (#4)^PTF (#5)
+1 ;;AMERICAN INDIAN OR ALASKA NATIVE^3^1002-5^1002-5^3
+2 ;;ASIAN^A^2028-9^2028-9^8
+3 ;;BLACK OR AFRICAN AMERICAN^B^2054-5^2054-5^9
+4 ;;DECLINED TO ANSWER^D^0000-0^^C
+5 ;;NATIVE HAWAIIAN OR OTHER PACIFIC ISLANDER^H^2076-8^2076-8^A
+6 ;;UNKNOWN BY PATIENT^U^9999-4^^D
+7 ;;WHITE^W^2106-3^2106-3^B
+8 ;;