XU8P799 ;BIR/JFW - XU*8.0*799 Post-Init ;04-Mar-2025 4:47 PM
 ;;8.0;KERNEL;**799**;Jul 10, 1995;Build 3
 ;;Per VHA Directive 2004-038, this routine should not be modified
 ;
 ;**663 STORY 1203246 (jfw) - Create 'AVIAM' New Style X-REF in NEW PERSON (#200) file
 ;      STORY 1204295 (jfw) - Enable Auditing on NEW PERSON (#200) fields
 ;      STORY 1203257 (jfw) - Initialize # of Purge Days for File 8933.1 in File 8989.3 (Field #875)
 ;**799 STORY VAMPI-22625 (jfw) - Copied XU8P663 and adding new Cleanup processes
 ;
POST ;
 D BMES^XPDUTL("Post-Install: Starting")
 D XR  ;Create 'AVIAM' New Style X-REF in the NEW PERSON File (#200)
 D ENAUDIT  ;Enable auditing on fields in the NEW PERSON File (#200)
 D INITPRG  ;Initialize new field #875 in KERNEL SYSTEM PARAMETERS File (#8989.3)
 D MNTRFCU  ;**799 Story VAMPI-22625 (jfw) - NEW PERSON FIELD MONITOR (#8933.1) File Wipe (XU*8.0*663 CleanUp)
 D DELHMP  ;**799 Story VAMPI-22625 (mko) - Remove HMP XU EVENTS menu item from Kernel Options
 D QUECU  ;**799 Story VAMPI-22625 (jfw) - Name Components Clean Up Task
 D BMES^XPDUTL("Post-Install: Finished")
 Q
 ;
ENAUDIT ;Enable auditing on NEW PERSON (#200) fields)
 N XUI,XUENTRY
 D BMES^XPDUTL("   >> Enable AUDIT(ing) on the following NEW PERSON (#200) fields:")
 F XUI=2:1 S XUENTRY=$P($T(@"AUDITON"+XUI),";;",2) Q:(XUENTRY="")  D
 .D AUDIT($P(XUENTRY,"^",2),$P(XUENTRY,"^",3))
 Q
 ;
INITPRG ;Initialize # of days to keep records in File #8933.1 before Purging
 N XUDA,XUFDA,XUERR,XUMSG
 S XUDA=1  ;DD only supports having 1 record with ID of 1 in the file
 S XUFDA(8989.3,XUDA_",",875)=365  ;Default Purge (#875) of 8933.1 to 365 Days
 D FILE^DIE("K","XUFDA","XUERR")
 D:('$D(XUERR("DIERR")))
 .D BMES^XPDUTL("   >> NEW PERSON FIELD MONITOR PURGE initialized to 365 days in File #8989.3")
 D:($D(XUERR("DIERR")))
 .S XUMSG(1)=""
 .S XUMSG(2)="   >> The following error occurred updating Field #875 in file #8989.3"
 .S XUMSG(3)="        Error Code: "_$G(XUERR("DIERR",1))
 .S XUMSG(4)="              Text: "_$G(XUERR("DIERR",1,"TEXT",1))
 .S XUMSG(5)=""
 .S XUMSG(6)="      Re-execute Purge initialization D INITPRG^XU8P663 after resolving error(s)"
 .D BMES^XPDUTL(.XUMSG)
 Q
 ;
 ;Input:
 ;  XUFLD    - Field # to turn auditing for
 ;  XUFLDNME - Name of the Field
AUDIT(XUFLD,XUFLDNM) ;Turn on Auditing for Fields in NEW PERSON (#200) file
 D TURNON^DIAUTL(200,XUFLD)  ;DBIA #4397 Supported
 D MES^XPDUTL("        Field (#"_XUFLD_"): "_XUFLDNM)
 Q
 ;
XR ;Create 'AVIAM' New Style index type cross reference
 N DIERR,DIHELP,DIMSG,XUI,XUERR,XUFDA,XURES,XUOUT,XUXR
 S XUXR("FILE")=200
 S XUXR("NAME")="AVIAM"
 S XUXR("TYPE")="MU"
 S XUXR("USE")="A"
 S XUXR("EXECUTION")="R"
 S XUXR("ACTIVITY")="I"
 S XUXR("SHORT DESCR")="IAM User Provisioning Monitor for NEW PERSON (#200) fields."
 S XUXR("DESCR",1)="The AVIAM cross-reference (X-REF) is used to remember that"
 S XUXR("DESCR",2)="changes to the following fields were made to the NEW PERSON (#200) file:"
 S XUXR("DESCR",3)=" "
 S XUXR("DESCR",4)="      (.01)   NAME"
 S XUXR("DESCR",5)="      (.151)  EMAIL ADDRESS"
 S XUXR("DESCR",6)="      (4)     SEX"
 S XUXR("DESCR",7)="      (5)     DOB"
 S XUXR("DESCR",8)="      (7)     DISUSER"
 S XUXR("DESCR",9)="      (9)     SSN"
 S XUXR("DESCR",10)="      (9.2)   TERMINATION DATE"
 S XUXR("DESCR",11)="      (41.99) NPI"
 S XUXR("DESCR",12)="      (202)   LAST SIGN-ON DATE/TIME"
 S XUXR("DESCR",13)="      (205.1) SECID"
 S XUXR("DESCR",14)="      (205.2) SUBJECT ORGANIZATION"
 S XUXR("DESCR",15)="      (205.3) SUBJECT ORGANIZATION ID"
 S XUXR("DESCR",16)="      (205.4) UNIQUE USER ID"
 S XUXR("DESCR",17)="      (205.5) ADUPN"
 S XUXR("DESCR",18)="      (501.1) NETWORK USERNAME"
 S XUXR("DESCR",19)="      (201)   PRIMARY MENU OPTION"
 S XUXR("DESCR",20)=" "
 S XUXR("DESCR",21)="Execution of this X-REF will create (assuming an entry doesn't exist) or"
 S XUXR("DESCR",22)="update (entry exists) an entry in the NEW PERSON FIELD MONITOR (#8933.1) file"
 S XUXR("DESCR",23)="and mark it as requiring transmission/broadcast out."
 S XUXR("DESCR",24)=" "
 S XUXR("DESCR",25)="NOTE: The local variable 'XUIAMNPF' should be initialized to 1 if the 'AVIAM'"
 S XUXR("DESCR",26)="X-REF is NOT to be executed, because the entry is being initially 'ADD'ed to"
 S XUXR("DESCR",27)="the system."
 S XUXR("SET")="I ($T(AVIAM^XUIAMDD1)'="""") D AVIAM^XUIAMDD1(DUZ,DA,.X1,.X2)"
 S XUXR("KILL")="Q"
 S XUXR("WHOLE KILL")="Q"
 S XUXR("VAL",1)=.01
 S XUXR("VAL",1,"COLLATION")="F"
 S XUXR("VAL",2)=.151
 S XUXR("VAL",2,"COLLATION")="F"
 S XUXR("VAL",3)=4
 S XUXR("VAL",3,"COLLATION")="F"
 S XUXR("VAL",4)=5
 S XUXR("VAL",4,"COLLATION")="F"
 S XUXR("VAL",5)=7
 S XUXR("VAL",5,"COLLATION")="F"
 S XUXR("VAL",6)=9
 S XUXR("VAL",6,"COLLATION")="F"
 S XUXR("VAL",7)=9.2
 S XUXR("VAL",7,"COLLATION")="F"
 S XUXR("VAL",8)=41.99
 S XUXR("VAL",8,"COLLATION")="F"
 S XUXR("VAL",9)=202
 S XUXR("VAL",9,"COLLATION")="F"
 S XUXR("VAL",10)=205.1
 S XUXR("VAL",10,"COLLATION")="F"
 S XUXR("VAL",11)=205.2
 S XUXR("VAL",11,"COLLATION")="F"
 S XUXR("VAL",12)=205.3
 S XUXR("VAL",12,"COLLATION")="F"
 S XUXR("VAL",13)=205.4
 S XUXR("VAL",13,"COLLATION")="F"
 S XUXR("VAL",14)=205.5
 S XUXR("VAL",14,"COLLATION")="F"
 S XUXR("VAL",15)=501.1
 S XUXR("VAL",15,"COLLATION")="F"
 S XUXR("VAL",16)=201
 S XUXR("VAL",16,"COLLATION")="F"
 D CREIXN^DDMOD(.XUXR,"K",.XURES,"XUOUT","XUERR")
 ;
 I $D(DIERR) D  Q
 .D BMES^XPDUTL("   >> A problem has occurred during the creation of x-ref ""AVIAM""!")
 .D MES^XPDUTL("      Please contact Customer Support.")
 .S XUI="" F  S XUI=$O(XUERR("DIERR",1,"TEXT",XUI)) Q:XUI=""  D MES^XPDUTL(XUERR("DIERR",1,"TEXT",XUI))
 ;
 ;CREIXN^DDMOD wasn't updated to include the RE-INDEXING field (#666) of the INDEX file (#.11)
 S XUFDA(.11,+XURES_",",666)=1
 D FILE^DIE("","XUFDA","XUERR")
 ;
 D MES^XPDUTL("   >> ""AVIAM"" cross-reference index created...")
 Q
 ;
MNTRFCU ;**799 Story VAMPI-22625 (jfw) - NEW PERSON FIELD MONITOR File #8933.1 Clean-Up
 ;Don't reset 8933.1 after patch has been installed!
 Q:($$PATCH^XPDUTL("XU*8.0*799"))  ;Supported DBIA #10141
 L +^XTV(8933.1):30
 K ^XTV(8933.1)  ;Remove all data from file
 S:('$D(^XTV(8933.1,0))) ^XTV(8933.1,0)="NEW PERSON FIELD MONITOR^8933.1D^0^0"
 L -^XTV(8933.1)
 D BMES^XPDUTL("   >> NEW PERSON FIELD MONITOR (#8933.1) File has been reset!")
 Q
 ;
DELHMP ;**799 Story VAMPI-22625 (mko) - Remove HMP XU EVENTS menu item from Kernel Options
 N DA,DIK,XUHMP,XUHMPIEN,XUITEMIEN,XUOPTIEN,XUOPTNM
 ;Build XUHMP(ien)="", where ien=ien of HMP XU EVENTS option (there should be only one)
 S XUHMPIEN="" F  S XUHMPIEN=$O(^DIC(19,"B","HMP XU EVENTS",XUHMPIEN)) Q:XUHMPIEN'>0  S XUHMP(XUHMPIEN)=""
 ;For each of the three Kernel options, find the HMP XU EVENTS menu item and delete it.
 F XUOPTNM="XU USER ADD","XU USER CHANGE","XU USER TERMINATE" D
 .S XUOPTIEN="" F  S XUOPTIEN=$O(^DIC(19,"B",XUOPTNM,XUOPTIEN)) Q:XUOPTIEN'>0  D
 ..S XUHMPIEN="" F  S XUHMPIEN=$O(XUHMP(XUHMPIEN)) Q:XUHMPIEN'>0  D
 ...S XUITEMIEN="" F  S XUITEMIEN=$O(^DIC(19,XUOPTIEN,10,"B",XUHMPIEN,XUITEMIEN)) Q:XUITEMIEN'>0  D
 ....S DIK="^DIC(19,"_XUOPTIEN_",10,",DA(1)=XUOPTIEN,DA=XUITEMIEN
 ....D ^DIK
 D BMES^XPDUTL("   >> Obsolete HMP XU EVENTS menu item removed from Kernel options!")
 Q
 ;
QUECU ;**799 Story VAMPI-22625 (jfw) - Name Component Clean Up Task
 N ZTRTN,ZTDESC,ZTIO,ZTSAVE,ZTREQ,ZTSK,ZTDTH
 S ZTRTN="EN663CU^XU8P799",ZTDESC="XU*8.0*779 Post-Init Name Component Clean Up Task"
 S ZTIO="",ZTDTH=$H
 I $D(DUZ) S ZTSAVE("DUZ")=DUZ
 D ^%ZTLOAD
 D BMES^XPDUTL("   >> Name Component Clean-Up Task #"_ZTSK_" has been queued!")
 Q
 ;
EN663CU ;**799 Story VAMPI-22625 (jfw) - Name Component Clean Up Task Entry Point
 N XUCNT,XUSTRT,XUEND
 S XUSTRT=$$NOW^XLFDT
 D NCOMPCU(.XUCNT)  ;Missing or Dangling Ptrs to NAME COMPONENTS (#20) File Clean-Up
 S XUEND=$$NOW^XLFDT
 D EMAIL(.XUCNT,XUSTRT,XUEND)
 Q
 ;
NCOMPCU(XUCNT) ;**799 Story VAMPI-22625 (jfw) - File #20 Clean-up
 N XURECS,XUPRECS,DA,XUNCPTR
 S XURECS=0,XUPRECS=0,DA=0
 F  S DA=$O(^VA(200,DA)) Q:'+DA  D
 .S XURECS=XURECS+1,XUNCPTR=+$G(^VA(200,DA,3.1))
 .I $S('XUNCPTR:1,'$D(^VA(20,XUNCPTR)):1,1:0),($P($G(^VA(200,DA,0)),"^",1)'="") D
 ..D CHKPTR^XLFNAME2  ;Update Name Components File (#20) if invalid/missing
 ..S XUPRECS=XUPRECS+1
 S XUCNT("NPRECS")=XURECS,XUCNT("NPRECSUP")=XUPRECS
 Q
 ;
EMAIL(XUCNT,XUSTRT,XUEND) ;*799 Story VAMPI-22625 (jfw) - Clean-Up Results Email
 N XMDUZ,XMTEXT,XMSUB,XMY,XMZ,XMDUN,XUMSG,XUSTN
 S XUSTN=$$SITE^VASITE(),XUSTN=$P(XUSTN,"^",3)_" ("_$P(XUSTN,"^",2)_")"
 S XUMSG(1)="Post-Init routine XU8P799 has completed performing the"
 S XUMSG(2)="required Name Component Clean-Up."
 S XUMSG(3)=" "
 S XUMSG(4)="Process Started: "_$$FMTE^XLFDT(XUSTRT)_" / Completed: "_$$FMTE^XLFDT(XUEND)_" / "
 S XUMSG(5)="Processing Time [DD HH:MM:SS]: "_$$FMDIFF^XLFDT(XUEND,XUSTRT,3)
 S XUMSG(6)=" "
 S XUMSG(7)="Number of NEW PERSON Records: "_$FN(XUCNT("NPRECS"),",")
 S XUMSG(8)="    >> with NAME COMPONENTS issues: "_$FN(XUCNT("NPRECSUP"),",")
 S XMSUB="Name Component Clean-Up : XU*8.0*799 - "_XUSTN
 S XMTEXT="XUMSG(",XMDUZ=.5,XMY(DUZ)=""
 S XMY("VAIDSMPIDEVELOPERS@DOMAIN.EXT")=""
 D ^XMD
 Q
 ;
AUDITON ;List of NEW PERSON (#200) fields to audit
 ;;FILE^FIELD #^FIELD NAME
 ;;200^.151^EMAIL ADDRESS
 ;;200^41.98^NPI ENTRY STATUS
 ;;200^41.99^NPI
 ;;200^205.1^SECID
 ;;200^205.2^SUBJECT ORGANIZATION
 ;;200^205.3^SUBJECT ORGANIZATION ID
 ;;200^205.4^UNIQUE USER ID
 ;;200^205.5^ADUPN
 ;;200^501.1^NETWORK USERNAME
 ;;
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HXU8P799   9646     printed  Sep 23, 2025@19:44:56                                                                                                                                                                                                     Page 2
XU8P799   ;BIR/JFW - XU*8.0*799 Post-Init ;04-Mar-2025 4:47 PM
 +1       ;;8.0;KERNEL;**799**;Jul 10, 1995;Build 3
 +2       ;;Per VHA Directive 2004-038, this routine should not be modified
 +3       ;
 +4       ;**663 STORY 1203246 (jfw) - Create 'AVIAM' New Style X-REF in NEW PERSON (#200) file
 +5       ;      STORY 1204295 (jfw) - Enable Auditing on NEW PERSON (#200) fields
 +6       ;      STORY 1203257 (jfw) - Initialize # of Purge Days for File 8933.1 in File 8989.3 (Field #875)
 +7       ;**799 STORY VAMPI-22625 (jfw) - Copied XU8P663 and adding new Cleanup processes
 +8       ;
POST      ;
 +1        DO BMES^XPDUTL("Post-Install: Starting")
 +2       ;Create 'AVIAM' New Style X-REF in the NEW PERSON File (#200)
           DO XR
 +3       ;Enable auditing on fields in the NEW PERSON File (#200)
           DO ENAUDIT
 +4       ;Initialize new field #875 in KERNEL SYSTEM PARAMETERS File (#8989.3)
           DO INITPRG
 +5       ;**799 Story VAMPI-22625 (jfw) - NEW PERSON FIELD MONITOR (#8933.1) File Wipe (XU*8.0*663 CleanUp)
           DO MNTRFCU
 +6       ;**799 Story VAMPI-22625 (mko) - Remove HMP XU EVENTS menu item from Kernel Options
           DO DELHMP
 +7       ;**799 Story VAMPI-22625 (jfw) - Name Components Clean Up Task
           DO QUECU
 +8        DO BMES^XPDUTL("Post-Install: Finished")
 +9        QUIT 
 +10      ;
ENAUDIT   ;Enable auditing on NEW PERSON (#200) fields)
 +1        NEW XUI,XUENTRY
 +2        DO BMES^XPDUTL("   >> Enable AUDIT(ing) on the following NEW PERSON (#200) fields:")
 +3        FOR XUI=2:1
               SET XUENTRY=$PIECE($TEXT(@"AUDITON"+XUI),";;",2)
               if (XUENTRY="")
                   QUIT 
               Begin DoDot:1
 +4                DO AUDIT($PIECE(XUENTRY,"^",2),$PIECE(XUENTRY,"^",3))
               End DoDot:1
 +5        QUIT 
 +6       ;
INITPRG   ;Initialize # of days to keep records in File #8933.1 before Purging
 +1        NEW XUDA,XUFDA,XUERR,XUMSG
 +2       ;DD only supports having 1 record with ID of 1 in the file
           SET XUDA=1
 +3       ;Default Purge (#875) of 8933.1 to 365 Days
           SET XUFDA(8989.3,XUDA_",",875)=365
 +4        DO FILE^DIE("K","XUFDA","XUERR")
 +5        if ('$DATA(XUERR("DIERR")))
               Begin DoDot:1
 +6                DO BMES^XPDUTL("   >> NEW PERSON FIELD MONITOR PURGE initialized to 365 days in File #8989.3")
               End DoDot:1
 +7        if ($DATA(XUERR("DIERR")))
               Begin DoDot:1
 +8                SET XUMSG(1)=""
 +9                SET XUMSG(2)="   >> The following error occurred updating Field #875 in file #8989.3"
 +10               SET XUMSG(3)="        Error Code: "_$GET(XUERR("DIERR",1))
 +11               SET XUMSG(4)="              Text: "_$GET(XUERR("DIERR",1,"TEXT",1))
 +12               SET XUMSG(5)=""
 +13               SET XUMSG(6)="      Re-execute Purge initialization D INITPRG^XU8P663 after resolving error(s)"
 +14               DO BMES^XPDUTL(.XUMSG)
               End DoDot:1
 +15       QUIT 
 +16      ;
 +17      ;Input:
 +18      ;  XUFLD    - Field # to turn auditing for
 +19      ;  XUFLDNME - Name of the Field
AUDIT(XUFLD,XUFLDNM) ;Turn on Auditing for Fields in NEW PERSON (#200) file
 +1       ;DBIA #4397 Supported
           DO TURNON^DIAUTL(200,XUFLD)
 +2        DO MES^XPDUTL("        Field (#"_XUFLD_"): "_XUFLDNM)
 +3        QUIT 
 +4       ;
XR        ;Create 'AVIAM' New Style index type cross reference
 +1        NEW DIERR,DIHELP,DIMSG,XUI,XUERR,XUFDA,XURES,XUOUT,XUXR
 +2        SET XUXR("FILE")=200
 +3        SET XUXR("NAME")="AVIAM"
 +4        SET XUXR("TYPE")="MU"
 +5        SET XUXR("USE")="A"
 +6        SET XUXR("EXECUTION")="R"
 +7        SET XUXR("ACTIVITY")="I"
 +8        SET XUXR("SHORT DESCR")="IAM User Provisioning Monitor for NEW PERSON (#200) fields."
 +9        SET XUXR("DESCR",1)="The AVIAM cross-reference (X-REF) is used to remember that"
 +10       SET XUXR("DESCR",2)="changes to the following fields were made to the NEW PERSON (#200) file:"
 +11       SET XUXR("DESCR",3)=" "
 +12       SET XUXR("DESCR",4)="      (.01)   NAME"
 +13       SET XUXR("DESCR",5)="      (.151)  EMAIL ADDRESS"
 +14       SET XUXR("DESCR",6)="      (4)     SEX"
 +15       SET XUXR("DESCR",7)="      (5)     DOB"
 +16       SET XUXR("DESCR",8)="      (7)     DISUSER"
 +17       SET XUXR("DESCR",9)="      (9)     SSN"
 +18       SET XUXR("DESCR",10)="      (9.2)   TERMINATION DATE"
 +19       SET XUXR("DESCR",11)="      (41.99) NPI"
 +20       SET XUXR("DESCR",12)="      (202)   LAST SIGN-ON DATE/TIME"
 +21       SET XUXR("DESCR",13)="      (205.1) SECID"
 +22       SET XUXR("DESCR",14)="      (205.2) SUBJECT ORGANIZATION"
 +23       SET XUXR("DESCR",15)="      (205.3) SUBJECT ORGANIZATION ID"
 +24       SET XUXR("DESCR",16)="      (205.4) UNIQUE USER ID"
 +25       SET XUXR("DESCR",17)="      (205.5) ADUPN"
 +26       SET XUXR("DESCR",18)="      (501.1) NETWORK USERNAME"
 +27       SET XUXR("DESCR",19)="      (201)   PRIMARY MENU OPTION"
 +28       SET XUXR("DESCR",20)=" "
 +29       SET XUXR("DESCR",21)="Execution of this X-REF will create (assuming an entry doesn't exist) or"
 +30       SET XUXR("DESCR",22)="update (entry exists) an entry in the NEW PERSON FIELD MONITOR (#8933.1) file"
 +31       SET XUXR("DESCR",23)="and mark it as requiring transmission/broadcast out."
 +32       SET XUXR("DESCR",24)=" "
 +33       SET XUXR("DESCR",25)="NOTE: The local variable 'XUIAMNPF' should be initialized to 1 if the 'AVIAM'"
 +34       SET XUXR("DESCR",26)="X-REF is NOT to be executed, because the entry is being initially 'ADD'ed to"
 +35       SET XUXR("DESCR",27)="the system."
 +36       SET XUXR("SET")="I ($T(AVIAM^XUIAMDD1)'="""") D AVIAM^XUIAMDD1(DUZ,DA,.X1,.X2)"
 +37       SET XUXR("KILL")="Q"
 +38       SET XUXR("WHOLE KILL")="Q"
 +39       SET XUXR("VAL",1)=.01
 +40       SET XUXR("VAL",1,"COLLATION")="F"
 +41       SET XUXR("VAL",2)=.151
 +42       SET XUXR("VAL",2,"COLLATION")="F"
 +43       SET XUXR("VAL",3)=4
 +44       SET XUXR("VAL",3,"COLLATION")="F"
 +45       SET XUXR("VAL",4)=5
 +46       SET XUXR("VAL",4,"COLLATION")="F"
 +47       SET XUXR("VAL",5)=7
 +48       SET XUXR("VAL",5,"COLLATION")="F"
 +49       SET XUXR("VAL",6)=9
 +50       SET XUXR("VAL",6,"COLLATION")="F"
 +51       SET XUXR("VAL",7)=9.2
 +52       SET XUXR("VAL",7,"COLLATION")="F"
 +53       SET XUXR("VAL",8)=41.99
 +54       SET XUXR("VAL",8,"COLLATION")="F"
 +55       SET XUXR("VAL",9)=202
 +56       SET XUXR("VAL",9,"COLLATION")="F"
 +57       SET XUXR("VAL",10)=205.1
 +58       SET XUXR("VAL",10,"COLLATION")="F"
 +59       SET XUXR("VAL",11)=205.2
 +60       SET XUXR("VAL",11,"COLLATION")="F"
 +61       SET XUXR("VAL",12)=205.3
 +62       SET XUXR("VAL",12,"COLLATION")="F"
 +63       SET XUXR("VAL",13)=205.4
 +64       SET XUXR("VAL",13,"COLLATION")="F"
 +65       SET XUXR("VAL",14)=205.5
 +66       SET XUXR("VAL",14,"COLLATION")="F"
 +67       SET XUXR("VAL",15)=501.1
 +68       SET XUXR("VAL",15,"COLLATION")="F"
 +69       SET XUXR("VAL",16)=201
 +70       SET XUXR("VAL",16,"COLLATION")="F"
 +71       DO CREIXN^DDMOD(.XUXR,"K",.XURES,"XUOUT","XUERR")
 +72      ;
 +73       IF $DATA(DIERR)
               Begin DoDot:1
 +74               DO BMES^XPDUTL("   >> A problem has occurred during the creation of x-ref ""AVIAM""!")
 +75               DO MES^XPDUTL("      Please contact Customer Support.")
 +76               SET XUI=""
                   FOR 
                       SET XUI=$ORDER(XUERR("DIERR",1,"TEXT",XUI))
                       if XUI=""
                           QUIT 
                       DO MES^XPDUTL(XUERR("DIERR",1,"TEXT",XUI))
               End DoDot:1
               QUIT 
 +77      ;
 +78      ;CREIXN^DDMOD wasn't updated to include the RE-INDEXING field (#666) of the INDEX file (#.11)
 +79       SET XUFDA(.11,+XURES_",",666)=1
 +80       DO FILE^DIE("","XUFDA","XUERR")
 +81      ;
 +82       DO MES^XPDUTL("   >> ""AVIAM"" cross-reference index created...")
 +83       QUIT 
 +84      ;
MNTRFCU   ;**799 Story VAMPI-22625 (jfw) - NEW PERSON FIELD MONITOR File #8933.1 Clean-Up
 +1       ;Don't reset 8933.1 after patch has been installed!
 +2       ;Supported DBIA #10141
           if ($$PATCH^XPDUTL("XU*8.0*799"))
               QUIT 
 +3        LOCK +^XTV(8933.1):30
 +4       ;Remove all data from file
           KILL ^XTV(8933.1)
 +5        if ('$DATA(^XTV(8933.1,0)))
               SET ^XTV(8933.1,0)="NEW PERSON FIELD MONITOR^8933.1D^0^0"
 +6        LOCK -^XTV(8933.1)
 +7        DO BMES^XPDUTL("   >> NEW PERSON FIELD MONITOR (#8933.1) File has been reset!")
 +8        QUIT 
 +9       ;
DELHMP    ;**799 Story VAMPI-22625 (mko) - Remove HMP XU EVENTS menu item from Kernel Options
 +1        NEW DA,DIK,XUHMP,XUHMPIEN,XUITEMIEN,XUOPTIEN,XUOPTNM
 +2       ;Build XUHMP(ien)="", where ien=ien of HMP XU EVENTS option (there should be only one)
 +3        SET XUHMPIEN=""
           FOR 
               SET XUHMPIEN=$ORDER(^DIC(19,"B","HMP XU EVENTS",XUHMPIEN))
               if XUHMPIEN'>0
                   QUIT 
               SET XUHMP(XUHMPIEN)=""
 +4       ;For each of the three Kernel options, find the HMP XU EVENTS menu item and delete it.
 +5        FOR XUOPTNM="XU USER ADD","XU USER CHANGE","XU USER TERMINATE"
               Begin DoDot:1
 +6                SET XUOPTIEN=""
                   FOR 
                       SET XUOPTIEN=$ORDER(^DIC(19,"B",XUOPTNM,XUOPTIEN))
                       if XUOPTIEN'>0
                           QUIT 
                       Begin DoDot:2
 +7                        SET XUHMPIEN=""
                           FOR 
                               SET XUHMPIEN=$ORDER(XUHMP(XUHMPIEN))
                               if XUHMPIEN'>0
                                   QUIT 
                               Begin DoDot:3
 +8                                SET XUITEMIEN=""
                                   FOR 
                                       SET XUITEMIEN=$ORDER(^DIC(19,XUOPTIEN,10,"B",XUHMPIEN,XUITEMIEN))
                                       if XUITEMIEN'>0
                                           QUIT 
                                       Begin DoDot:4
 +9                                        SET DIK="^DIC(19,"_XUOPTIEN_",10,"
                                           SET DA(1)=XUOPTIEN
                                           SET DA=XUITEMIEN
 +10                                       DO ^DIK
                                       End DoDot:4
                               End DoDot:3
                       End DoDot:2
               End DoDot:1
 +11       DO BMES^XPDUTL("   >> Obsolete HMP XU EVENTS menu item removed from Kernel options!")
 +12       QUIT 
 +13      ;
QUECU     ;**799 Story VAMPI-22625 (jfw) - Name Component Clean Up Task
 +1        NEW ZTRTN,ZTDESC,ZTIO,ZTSAVE,ZTREQ,ZTSK,ZTDTH
 +2        SET ZTRTN="EN663CU^XU8P799"
           SET ZTDESC="XU*8.0*779 Post-Init Name Component Clean Up Task"
 +3        SET ZTIO=""
           SET ZTDTH=$HOROLOG
 +4        IF $DATA(DUZ)
               SET ZTSAVE("DUZ")=DUZ
 +5        DO ^%ZTLOAD
 +6        DO BMES^XPDUTL("   >> Name Component Clean-Up Task #"_ZTSK_" has been queued!")
 +7        QUIT 
 +8       ;
EN663CU   ;**799 Story VAMPI-22625 (jfw) - Name Component Clean Up Task Entry Point
 +1        NEW XUCNT,XUSTRT,XUEND
 +2        SET XUSTRT=$$NOW^XLFDT
 +3       ;Missing or Dangling Ptrs to NAME COMPONENTS (#20) File Clean-Up
           DO NCOMPCU(.XUCNT)
 +4        SET XUEND=$$NOW^XLFDT
 +5        DO EMAIL(.XUCNT,XUSTRT,XUEND)
 +6        QUIT 
 +7       ;
NCOMPCU(XUCNT) ;**799 Story VAMPI-22625 (jfw) - File #20 Clean-up
 +1        NEW XURECS,XUPRECS,DA,XUNCPTR
 +2        SET XURECS=0
           SET XUPRECS=0
           SET DA=0
 +3        FOR 
               SET DA=$ORDER(^VA(200,DA))
               if '+DA
                   QUIT 
               Begin DoDot:1
 +4                SET XURECS=XURECS+1
                   SET XUNCPTR=+$GET(^VA(200,DA,3.1))
 +5                IF $SELECT('XUNCPTR:1,'$DATA(^VA(20,XUNCPTR)):1,1:0)
                       IF ($PIECE($GET(^VA(200,DA,0)),"^",1)'="")
                           Begin DoDot:2
 +6       ;Update Name Components File (#20) if invalid/missing
                               DO CHKPTR^XLFNAME2
 +7                            SET XUPRECS=XUPRECS+1
                           End DoDot:2
               End DoDot:1
 +8        SET XUCNT("NPRECS")=XURECS
           SET XUCNT("NPRECSUP")=XUPRECS
 +9        QUIT 
 +10      ;
EMAIL(XUCNT,XUSTRT,XUEND) ;*799 Story VAMPI-22625 (jfw) - Clean-Up Results Email
 +1        NEW XMDUZ,XMTEXT,XMSUB,XMY,XMZ,XMDUN,XUMSG,XUSTN
 +2        SET XUSTN=$$SITE^VASITE()
           SET XUSTN=$PIECE(XUSTN,"^",3)_" ("_$PIECE(XUSTN,"^",2)_")"
 +3        SET XUMSG(1)="Post-Init routine XU8P799 has completed performing the"
 +4        SET XUMSG(2)="required Name Component Clean-Up."
 +5        SET XUMSG(3)=" "
 +6        SET XUMSG(4)="Process Started: "_$$FMTE^XLFDT(XUSTRT)_" / Completed: "_$$FMTE^XLFDT(XUEND)_" / "
 +7        SET XUMSG(5)="Processing Time [DD HH:MM:SS]: "_$$FMDIFF^XLFDT(XUEND,XUSTRT,3)
 +8        SET XUMSG(6)=" "
 +9        SET XUMSG(7)="Number of NEW PERSON Records: "_$FNUMBER(XUCNT("NPRECS"),",")
 +10       SET XUMSG(8)="    >> with NAME COMPONENTS issues: "_$FNUMBER(XUCNT("NPRECSUP"),",")
 +11       SET XMSUB="Name Component Clean-Up : XU*8.0*799 - "_XUSTN
 +12       SET XMTEXT="XUMSG("
           SET XMDUZ=.5
           SET XMY(DUZ)=""
 +13       SET XMY("VAIDSMPIDEVELOPERS@DOMAIN.EXT")=""
 +14       DO ^XMD
 +15       QUIT 
 +16      ;
AUDITON   ;List of NEW PERSON (#200) fields to audit
 +1       ;;FILE^FIELD #^FIELD NAME
 +2       ;;200^.151^EMAIL ADDRESS
 +3       ;;200^41.98^NPI ENTRY STATUS
 +4       ;;200^41.99^NPI
 +5       ;;200^205.1^SECID
 +6       ;;200^205.2^SUBJECT ORGANIZATION
 +7       ;;200^205.3^SUBJECT ORGANIZATION ID
 +8       ;;200^205.4^UNIQUE USER ID
 +9       ;;200^205.5^ADUPN
 +10      ;;200^501.1^NETWORK USERNAME
 +11      ;;