[641] | 1 | XBSANU ;IHS/ITSC/LAB/FJE;SANITIZE RPMS DATABASE; [ 01/29/2005 11:10 AM ]
|
---|
| 2 | ;;4.0;XB;;Jul 20, 2009;Build 2
|
---|
| 3 | W !,"This routine sanitizes and deletes RPMS New Person file data. To use you must type: D START^XBSANU"
|
---|
| 4 | W !,"For help and an explanation of this utility type D HELP^XBSANU",!!
|
---|
| 5 | Q
|
---|
| 6 | START ;
|
---|
| 7 | S (XBDUZ,XBDEL,XBPAT,XBPHR,XBBH,XBCHR,XBPOS,XB3PB,XBAR,XBLAB,XBMMDEL,XBAUDEL,XBNCDEL)=0
|
---|
| 8 | K ^XTMP("SAN")
|
---|
| 9 | S ^XTMP("SAN","LASTDFN")=0
|
---|
| 10 | W !,"This routine will sanitize AND randomize the NEW PERSON file in the RPMS database."
|
---|
| 11 | S DIR(0)="Y",DIR("A")="Do you want to convert the new person data?",DIR("B")="N" KILL DA D ^DIR KILL DIR
|
---|
| 12 | S:Y=1 XBDUZ=1
|
---|
| 13 | W !,"All failed fileman update data can be found in: ^XTMP(""SAN"",""DUZFAILURE"", GLOBAL"
|
---|
| 14 | W !,"?? display usually means that there was a fileman update failure"
|
---|
| 15 | W !,"If a hard error like an UNDEFINED occurs during the scrambling,"
|
---|
| 16 | W !," you can restart at the next patient by typing: RESTART^XBSANU "
|
---|
| 17 | W !,"When finished...don't forget to manually address the failures"
|
---|
| 18 | W !,"D LIST^XBSANU will list the errors",!!
|
---|
| 19 | W !!,"This routine is about to scramble the RPMS database."
|
---|
| 20 | S DIR(0)="Y",DIR("A")="Last chance: Do you want your RPMS NEW PERSON file data SANITIZED?",DIR("B")="N" KILL DA D ^DIR KILL DIR
|
---|
| 21 | Q:Y'=1
|
---|
| 22 | D ^XBKVAR
|
---|
| 23 | W !,"Collecting random names" D CLEAN
|
---|
| 24 | FJE ;
|
---|
| 25 | I XBDUZ W !,"SCRAMBLING FILE 200" D DUZ
|
---|
| 26 | S ^XTMP("SAN","DUZPROCESS","XBSAN")="FINISHED"
|
---|
| 27 | W !,"FINISHED"
|
---|
| 28 | D LIST
|
---|
| 29 | D EOJ
|
---|
| 30 | Q
|
---|
| 31 | ;
|
---|
| 32 | EOJ ;
|
---|
| 33 | D EN^XBVK("XB")
|
---|
| 34 | K DFN,XBH,OTDFN,XBB,AUPNSEX,X,X2,XB3PB,XBAR,XBAUDEL
|
---|
| 35 | K DA,DIE,DIK,DIR,DR,XBDUZSSN,I,XBA,XBADDR,XBADL1
|
---|
| 36 | K XBBH,XBC,XBCHART,XBCHR,XBD,XBDAD,XBDEANUM,XBDEL,XBDFIRST,XBDLAST,XBDNAME
|
---|
| 37 | K XBDOB,XBDUZ,XBFIRST,XBFNAME,XBH,XBLAB,XBLNAME,XBMDFN,XBMMDEL,XBMOM
|
---|
| 38 | K XBNAME,XBNCDEL,XBNOK,XBNOKADL,XBP,XBPAT,XBPHN,XBPHR,XBPOS,XBS
|
---|
| 39 | K XBSCR,XBSEX,XBSSN,XBTEN,XBVAL,XBVANUM,XBX,Y,Z
|
---|
| 40 | W !,"If all data appears correct and you have chaecked failures, kill the ^XTMP(""SAN"") global",!!
|
---|
| 41 | Q
|
---|
| 42 | ;
|
---|
| 43 | CLEAN ;
|
---|
| 44 | K ^XTMP("SAN","DLAST")
|
---|
| 45 | K ^XTMP("SAN","DFIRST")
|
---|
| 46 | K ^XTMP("SAN","PROCESS","DUZ")
|
---|
| 47 | K ^XTMP("SAN","DUZFAILURE")
|
---|
| 48 | D ^XBKVAR
|
---|
| 49 | S (XBC(1),XBC(2))=0,XBX=1 F S XBX=$O(^VA(200,XBX)) Q:+XBX=0 D
|
---|
| 50 | .S XBNAME=$P($G(^VA(200,XBX,0)),U,1)
|
---|
| 51 | .S XBLAST=$P(XBNAME,",",1) S:'$L(XBLAST) XBLAST="MOUSE" S:$L(XBLAST)<3 XBLAST=XBLAST_"AAA"
|
---|
| 52 | .S XBFIRST=$P(XBNAME,",",2) S:'$L(XBFIRST) XBFIRST="MICKEY"_+XBX
|
---|
| 53 | .S XBC(1)=XBC(1)+1,^XTMP("SAN","DLAST")=XBC(1),^XTMP("SAN","DLAST",XBC(1))=XBLAST
|
---|
| 54 | .S XBC(2)=XBC(2)+1,^XTMP("SAN","DFIRST")=XBC(2),^XTMP("SAN","DFIRST",XBC(2))=XBFIRST
|
---|
| 55 | Q
|
---|
| 56 | R S X2=$R(X) I X2=0 G R
|
---|
| 57 | S X=X2
|
---|
| 58 | Q
|
---|
| 59 | ;
|
---|
| 60 | DUZ ;SCRAMBLES USER NAMES
|
---|
| 61 | D ^XBFMK
|
---|
| 62 | I '$D(^XTMP("SAN","LASTDUZ")) S ^XTMP("SAN","LASTDUZ")=1
|
---|
| 63 | S XBX=+^XTMP("SAN","LASTDUZ")
|
---|
| 64 | F S XBX=$O(^VA(200,XBX)) Q:+XBX=0 D
|
---|
| 65 | .S DA=XBX,DIE=200,DR="53.2///@" D ^DIE I $D(Y) S ^XTMP("SAN","DUZFAILURE","DUZDEA",XBX)=""
|
---|
| 66 | .D ^XBFMK
|
---|
| 67 | RESTART ;RESTARTS IF HARD FAILURE WITH DUZ (COMMON BECAUSE OF 3,6,16 PROBLEMS)
|
---|
| 68 | S XBX=+^XTMP("SAN","LASTDUZ")
|
---|
| 69 | F S XBX=$O(^VA(200,XBX)) Q:+XBX=0 D
|
---|
| 70 | .S ^XTMP("SAN","LASTDUZ")=XBX
|
---|
| 71 | .S X=^XTMP("SAN","DLAST") D R S XBLAST=^XTMP("SAN","DLAST",X)
|
---|
| 72 | .S X=^XTMP("SAN","DFIRST") D R S XBFIRST=^XTMP("SAN","DFIRST",X)
|
---|
| 73 | .D DUZSSN
|
---|
| 74 | .I XBDUZSSN S DA=XBX,DIE=200,DR=".01///"_XBLAST_","_XBFIRST_";9///"_XBDUZSSN D ^DIE I $D(Y) S ^XTMP("SAN","DUZFAILURE","DUZ IEN FAILURE",XBX)=""
|
---|
| 75 | .I 'XBDUZSSN S DA=XBX,DIE=200,DR=".01///"_XBLAST_","_XBFIRST D ^DIE I $D(Y) S ^XTMP("SAN","DUZFAILURE","DUZ IEN FAILURE",XBX)=""
|
---|
| 76 | .S DA=XBX,DIE=200,DR="1///"_$E(XBLAST,1,3)_";13///"_$E(XBLAST,1,8) D ^DIE I $D(Y) S ^XTMP("SAN","DUZFAILURE","DUZINITIALS",XBX)=""
|
---|
| 77 | .S XBVANUM=1000000+XBX
|
---|
| 78 | .S XBDEANUM=200000+XBX
|
---|
| 79 | .S XBDEAIL=$E(XBLAST,1)
|
---|
| 80 | .S XBDEAN=$E(XBDEANUM,1)+$E(XBDEANUM,3)+$E(XBDEANUM,5)+(2*($E(XBDEANUM,2)+$E(XBDEANUM,4)+$E(XBDEANUM,6)))
|
---|
| 81 | .S XBDEAN=XBDEAN#10
|
---|
| 82 | .S XBDEA="A"_XBDEAIL_XBDEANUM_XBDEAN
|
---|
| 83 | .S DA=XBX,DIE=200,DR="53.2///"_XBDEA D ^DIE I $D(Y) S ^XTMP("SAN","DUZFAILURE","DUZDEA",XBX)=""
|
---|
| 84 | .D ^XBFMK
|
---|
| 85 | .S DA=XBX,DIE=200,DR="53.3///"_XBVANUM D ^DIE I $D(Y) S ^XTMP("SAN","DUZFAILURE","DUZVA",XBX)=""
|
---|
| 86 | .D ^XBFMK
|
---|
| 87 | S ^XTMP("SAN","DUZPROCESS","DUZ")="FINISHED"
|
---|
| 88 | Q
|
---|
| 89 | DUZSSN ;CHANGES SSN FOR USER FILE
|
---|
| 90 | S XBDUZSSN=$P($G(^VA(200,XBX,1)),"^",9)
|
---|
| 91 | I XBDUZSSN D DUZSSNR S XBDUZSSN=XBSSN
|
---|
| 92 | Q
|
---|
| 93 | DUZSSNR ;FIND RANDOM SSN
|
---|
| 94 | F S XBSSN=$R(999999999) Q:XBSSN>100000000&(XBSSN<800000000)
|
---|
| 95 | I $D(^VA(200,"SSN",XBSSN)) G DUZSSNR
|
---|
| 96 | Q
|
---|
| 97 | ALLSSN ;ADDS SSN TO EVERY DUZ
|
---|
| 98 | D ^XBFMK
|
---|
| 99 | S XBX=0 F S XBX=$O(^VA(200,XBX)) Q:+XBX=0 D
|
---|
| 100 | .Q:$L($P($G(^VA(200,XBX,0)),"^",9))
|
---|
| 101 | .D SSNR
|
---|
| 102 | .S DA=XBX,DIE=200,DR=".09///"_XBSSN D ^DIE K DIE,DA
|
---|
| 103 | .D ^XBFMK
|
---|
| 104 | S ^XTMP("SAN","DUZPROCESS","DUZ SSN-ALL")="FINISHED"
|
---|
| 105 | Q
|
---|
| 106 | SSNR ;FIND RANDOM SSN
|
---|
| 107 | F S XBSSN=$R(999999999) Q:XBSSN>100000000&(XBSSN<800000000)
|
---|
| 108 | I $D(^VA(200,"SSN",XBSSN)) G SSNR
|
---|
| 109 | Q
|
---|
| 110 | ;
|
---|
| 111 | LIST ;
|
---|
| 112 | W !,"Listed below are the nodes and number of records that did not"
|
---|
| 113 | W !,"update properly."
|
---|
| 114 | W !,"XTMP(""SAN"",""DUZFAILURE"") nodes:"
|
---|
| 115 | S X="" F S X=$O(^XTMP("SAN","DUZFAILURE",X)) Q:X="" D
|
---|
| 116 | .S (Y,Z)=0 F S Y=$O(^XTMP("SAN","DUZFAILURE",X,Y)) Q:+Y=0 D
|
---|
| 117 | ..S Z=Z+1
|
---|
| 118 | .W !,"Failure: "_X_" "_Z
|
---|
| 119 | W !,"FINISHED"
|
---|
| 120 | LISTD ;
|
---|
| 121 | W !,"Listed below are the processes completed."
|
---|
| 122 | W !,"XTMP(""SAN"",""PROCESS"") nodes:"
|
---|
| 123 | S X="" F S X=$O(^XTMP("SAN","PROCESS",X)) Q:X="" D
|
---|
| 124 | .W !,"Process: "_X
|
---|
| 125 | W !,"FINISHED" Q
|
---|
| 126 | STU ;SETS STUDENT NAMES
|
---|
| 127 | K ^XTMP("SAN","DUZFAILURE","STU")
|
---|
| 128 | K ^XTMP("SAN","DUZFAILURE","STUA")
|
---|
| 129 | STUA D ^XBFMK
|
---|
| 130 | S XBX=50 F S XBX=$O(^VA(200,XBX)) Q:+XBX>76 D
|
---|
| 131 | .S XBLAST=$E("ABCDEFGHIJKLMNOPQRSTUVWXYZ",XBX-50,XBX-50)_"STUDENT"
|
---|
| 132 | .S XBFIRST="USER"
|
---|
| 133 | .S DA=XBX,DIE=200,DR=".01///"_XBLAST_","_XBFIRST D ^DIE I $D(Y) S ^XTMP("SAN","FAILURE","STU",XBX)=""
|
---|
| 134 | .S DA=XBX,DIE=200,DR="1///"_$E(XBLAST,1,2)_"U;13///"_$E(XBLAST,1,8) D ^DIE I $D(Y) S ^XTMP("SAN","FAILURE","STUINITIALS",XBX)=""
|
---|
| 135 | .S DA=XBX,DIE=200,DR="201///`29" D ^DIE I $D(Y) S ^XTMP("SAN","FAILURE","STUMENU",XBX)=""
|
---|
| 136 | .D ^XBFMK
|
---|
| 137 | W !,"FINISHED"
|
---|
| 138 | Q
|
---|
| 139 | HELP ;
|
---|
| 140 | W !,"Notes for sanitizing file 200."
|
---|
| 141 | W !,"START^XBSANU will start the sanitizing. The last names and first names"
|
---|
| 142 | W !,"of file 200 are captured and then randomly combined to form a new name"
|
---|
| 143 | W !,"If the user has a SSN regestered then that number is also ramdomized."
|
---|
| 144 | W !,"The internal entry is added to 1000000 to create the VA number and"
|
---|
| 145 | W !,"2000000 is added to make the DEA number"
|
---|
| 146 | W !,"The first three letters of the last name make up the initials and"
|
---|
| 147 | W !,"the first eight characters of the last name make up the nick name."
|
---|
| 148 | W !,"To fix hard errors you should look at the following:"
|
---|
| 149 | W !,"File 200 (^VA(200,IEN,0)) piece 16 points to file 16 (^DIC(16)). If"
|
---|
| 150 | W !,"^DIC(16,pointer,0) does not exist, you will get a hard error. File 16"
|
---|
| 151 | W !,"and file 6 (^DIC(6)) are generally dinumed and in file 16 the "
|
---|
| 152 | W !,"^DIC(16,pointer,""A6"" and ""A3"" point to file 6 and 3 (^DIC(3))"
|
---|
| 153 | W !,"respectfully. If either is missing you will get an error. File 3's IEN"
|
---|
| 154 | W !,"generally is dinumed to file 200.",!!
|
---|
| 155 | W !,"You can run this utility over and over without problems. The result is"
|
---|
| 156 | W !,"randomized again. User IEN 1 remains as ADAM,ADAM and is unchanged"
|
---|
| 157 | W !,"LIST^XBSANU will list the errors found"
|
---|
| 158 | W !,"ALLSSN^XBSANU will add a random SSN to all file 200 users"
|
---|
| 159 | W !,"STU^XBSANU will create 26 student accounts starting with ASTUDENT,USER"
|
---|
| 160 | W !,"and ending with ZSTUDENT,USER for IENS 51-76."
|
---|
| 161 | Q
|
---|