Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: SDES2MRTCCLEAN

SDES2MRTCCLEAN.m

Go to the documentation of this file.
SDES2MRTCCLEAN ;ALB/LAB - MRTC IT Clean up Utility ; FEB 23,2026
 ;;5.3;SCHEDULING;**929**;AUG 13, 1993;Build 9
 ;;Per VHA Directive 6402, this routine should not be modified
 ;;
 Q
 ;
CLEANUP ;
 N INPID,POP,PIDDATE,DIR,CNT,UPDATE,LEAVE,RUN,REQIEN,PRTIDX,RETN,X,ERROR
 S POP=0
 D VERIFYRUN(.RUN)
 Q:'RUN
 D REQUESTPROMPT(.REQIEN,.LEAVE)
 Q:+$G(LEAVE)
 D MRTCCLEAN(.RETN,REQIEN,.ERROR)
 I ($G(ERROR)'="") D
 . S UPDATE=0
 . D FIN(UPDATE,ERROR)
 Q:$G(ERROR)'=""
 S PRTIDX=""
 F  S PRTIDX=$O(RETN(PRTIDX)) Q:PRTIDX=""  D
 . W !,RETN(PRTIDX)
 D PRINTORUPDATE(.UPDATE,.LEAVE)
 I UPDATE D
 . S PRTIDX=""
 . F  S PRTIDX=$O(RETN(PRTIDX)) Q:PRTIDX=""  D
 . . X RETN(PRTIDX)
 D FIN(UPDATE,$G(ERROR))
 Q
 ;
VERIFYRUN(Y) ;display what option does and verify user wants to run
 N DIRUT,DIR,X1,X2,X
 ;
 ; Entry Point for clean-up with user specified dates
 ;
 W !!,"This OPTION will loop through the entered request and will clean update the  MRTC"
 W !,"parent request and all children request of the parent request."
 W !!
 S DIR(0)="Y"
 S DIR("A")="Are you sure you would like to run the MRTC cleanup tool"
 S DIR("?")="Enter 'Y'es or 'N'o."
 S DIR("B")="YES"
 D ^DIR
 Q
 ;
REQUESTPROMPT(Y,DIRUT) ;prompt for pid to search on
 N DIR
 K DIR
 S DIR(0)="FO"
 S DIR("A")="Enter Request IEN"
 D ^DIR
 Q
 ;
 ;
PRINTORUPDATE(Y,DIRUT) ;does user want to print report only or udpate and print
 N Y
 W !!
 S DIR(0)="Y"
 S DIR("A")="Would you like to UPDATE the records? Enter 'N'o to print only."
 S DIR("?")="Enter 'Y'es to UPDATE and PRINT the records or 'N'o to print records only."
 S DIR("B")="NO"
 D ^DIR
 G:$G(DIRUT) EXIT
 S UPDATE=Y
 W !!
 Q
 ;
MRTCCLEAN(RETN,REQUESTIEN,ERROR) ; 
 N REQLIST,APPTDATE,APPTIEN,APPTREQTYPE,B,ORIGCHILDCNT,PARENTIEN
 N PATIENTDFN,REQCNT,REQIDX,REQIEN,REQPARENT,REQUESTLIST,STATUS,TOTALREQ,UPDATECNT,CNT
 N MRTCARRAY,MRTCARRAY2,RETIDX,DATEDISPOSITION,DISPOSITIONARRAY,DISPOSITION
 N DISPOSITIONBY,IDATEDISP,APPTFOUND,DISP,DISPBY,INDEXCNT
 ;Validate REQUESTIEN
 S:($$GET1^DIQ(409.85,REQUESTIEN_",",.01,"I")="") ERROR="Invalid request IEN."
 Q:$G(ERROR)'=""
 S:($G(REQUESTIEN)="")!($$GET1^DIQ(409.85,REQUESTIEN_",",41,"I")'=1) ERROR="Request null or not an MRTC request."
 Q:$G(ERROR)'=""
 S PARENTIEN=$$GET1^DIQ(409.85,REQUESTIEN,43.8,"I")
 S:PARENTIEN="" PARENTIEN=REQUESTIEN
 S MRTCARRAY(PARENTIEN,0)=$$GET1^DIQ(409.85,PARENTIEN,23,"E")
 S PATIENTDFN=$$GET1^DIQ(409.85,PARENTIEN,.01,"I")
 S REQIEN=PARENTIEN
 S ORIGCHILDCNT=0,RETIDX=0
 F  S REQIEN=$O(^SDEC(409.85,"B",PATIENTDFN,REQIEN)) Q:+REQIEN=0  D
 . Q:$$GET1^DIQ(409.85,REQIEN_",",41,"I")'=1 
 . S REQPARENT=$$GET1^DIQ(409.85,REQIEN,43.8,"I")
 . Q:REQPARENT'=PARENTIEN
 . S ORIGCHILDCNT=ORIGCHILDCNT+1
 . S STATUS=$$GET1^DIQ(409.85,REQIEN,23,"E")
 . S DISPOSITION=$$GET1^DIQ(409.85,REQIEN,21,"I")
 . S DISPOSITIONBY=$$GET1^DIQ(409.85,REQIEN,20,"I")
 . S DATEDISPOSITION=$$GET1^DIQ(409.85,REQIEN,19,"I")
 . S:DATEDISPOSITION'="" DISPOSITIONARRAY(DATEDISPOSITION,REQIEN)=U_DISPOSITION_U_DISPOSITIONBY_U_DATEDISPOSITION
 . S MRTCARRAY(PARENTIEN,REQIEN)=STATUS_U_$$GET1^DIQ(409.85,REQIEN,21,"E")_U_$$GET1^DIQ(409.85,REQIEN,20,"E")_U_$$GET1^DIQ(409.85,REQIEN,19,"E")
 . S MRTCARRAY("STATUS",$$GET1^DIQ(409.85,REQIEN,23,"E"),REQIEN)=""
 . I STATUS="OPEN" D
 . . S MRTCARRAY("OPEN")=$G(MRTCARRAY("OPEN"))+1
 . . S REQLIST(REQIEN)=""
 S TOTALREQ=$G(MRTCARRAY("OPEN"))
 S APPTDATE=$$GET1^DIQ(409.85,PARENTIEN,1,"I")
 S APPTFOUND=0
 F  S APPTDATE=$O(^SDEC(409.84,"APTDT",PATIENTDFN,APPTDATE)) Q:+APPTDATE=0  D
 . S APPTIEN=0
 . F  S APPTIEN=$O(^SDEC(409.84,"APTDT",PATIENTDFN,APPTDATE,APPTIEN)) Q:+APPTIEN=0  D
 . . S APPTREQTYPE=$$GET1^DIQ(409.84,APPTIEN,.22,"I")
 . . Q:$P(APPTREQTYPE,";",2)'="SDEC(409.85,"
 . . S REQIEN=$P(APPTREQTYPE,";",1)
 . . Q:'$D(MRTCARRAY(PARENTIEN,REQIEN))
 . . Q:$$GET1^DIQ(409.84,APPTIEN,.101,"I")'=""
 . . Q:$$GET1^DIQ(409.84,APPTIEN,.12,"I")'=""
 . . S APPTFOUND=1
 . . S $P(MRTCARRAY(PARENTIEN,REQIEN),U,5)=APPTIEN
 . . S IDATEDISP=$$GET1^DIQ(409.85,REQIEN,19,"I")
 . . S:(IDATEDISP'="") $P(DISPOSITIONARRAY(IDATEDISP,REQIEN),U,1)=APPTIEN
 . . S MRTCARRAY(PARENTIEN,"CLOSED",REQIEN)=APPTIEN
 . . S REQLIST(REQIEN)=""
 . . S TOTALREQ=$G(TOTALREQ)+1
 I ($G(MRTCARRAY(PARENTIEN,0))="OPEN")&'(+$G(MRTCARRAY("OPEN"))) D
 . ;determine dispostion information and close parent
 . ;DISPOSITIONARRAY(3210810,250642)="286399^3^520881776^3210810"
 . N DATEDISP,REQIEN
 . S DATEDISP="",REQIEN=""
 . S DATEDISP=$O(DISPOSITIONARRAY(DATEDISP),-1)
 . S:DATEDISP'="" REQIEN=$O(DISPOSITIONARRAY(DATEDISP,REQIEN),-1)
 . I $G(REQIEN)'="" D
 . . S:APPTFOUND DISP=$O(^SDEC(409.853,"B","MRTC PARENT CLOSED",""))
 . . S:'APPTFOUND DISP=$P(DISPOSITIONARRAY(DATEDISP,REQIEN),U,2)
 . . S DISPBY=$P(DISPOSITIONARRAY(DATEDISP,REQIEN),U,3)
 . . S RETN(RETIDX)="S $P(^SDEC(409.85,"_PARENTIEN_",0),U,17)="_""""_"C"_""""
 . . S RETIDX=RETIDX+1
 . . S RETN(RETIDX)="S $P(^SDEC(409.85,"_PARENTIEN_","_""""_"DIS"_""""_"),U,1)="_DATEDISP
 . . S RETIDX=RETIDX+1
 . . S RETN(RETIDX)="S $P(^SDEC(409.85,"_PARENTIEN_","_""""_"DIS"_""""_"),U,2)="_DISPBY
 . . S RETIDX=RETIDX+1
 . . S RETN(RETIDX)="S $P(^SDEC(409.85,"_PARENTIEN_","_""""_"DIS"_""""_"),U,3)="_DISP
 . . S RETIDX=RETIDX+1
 Q:'(+$G(TOTALREQ))
 S CNT=0,UPDATECNT=0,REQIEN=0
 F  S REQIEN=$O(MRTCARRAY(PARENTIEN,REQIEN)) Q:+REQIEN=0  D
 . S STATUS=$P(MRTCARRAY(PARENTIEN,REQIEN),U,1)
 . S CNT=CNT+1
 . I STATUS="OPEN" D
 . . S MRTCARRAY2(PARENTIEN,2,CNT,0)=REQIEN
 . . S MRTCARRAY2(PARENTIEN,2,"B",REQIEN,CNT)=""
 . . S MRTCARRAY2(PARENTIEN,5,CNT,0)=$$GET1^DIQ(409.85,REQIEN,22,"I")
 . . S MRTCARRAY2(PARENTIEN,5,"B",$$GET1^DIQ(409.85,REQIEN,22,"I"),CNT)=""
 . . S UPDATECNT=UPDATECNT+1
 . . S REQUESTLIST(UPDATECNT)=REQIEN
 . . S INDEXCNT=CNT
 . I STATUS="CLOSED" D
 . . S APPTIEN=$P($G(MRTCARRAY(PARENTIEN,"CLOSED",REQIEN)),"^",1)
 . . Q:APPTIEN=""
 . . S UPDATECNT=UPDATECNT+1
 . . S REQUESTLIST(UPDATECNT)=REQIEN
 . . S MRTCARRAY2(PARENTIEN,2,CNT,0)=REQIEN_U_APPTIEN
 . . S MRTCARRAY2(PARENTIEN,2,"B",REQIEN,CNT)=""
 . . S MRTCARRAY2(PARENTIEN,5,CNT,0)=$$GET1^DIQ(409.85,REQIEN,22,"I")
 . . S MRTCARRAY2(PARENTIEN,5,"B",$$GET1^DIQ(409.85,REQIEN,22,"I"),CNT)=""
 . . S INDEXCNT=CNT
 S MRTCARRAY2(PARENTIEN,2,0)=""""_"^409.852P^"_INDEXCNT_U_UPDATECNT_""""
 S MRTCARRAY2(PARENTIEN,5,0)=""""_"^409.851D^"_INDEXCNT_U_UPDATECNT_""""
 S RETIDX=RETIDX+1
 S RETN(RETIDX)="K ^SDEC(409.85,"_PARENTIEN_",2)"
 S RETIDX=RETIDX+1
 S RETN(RETIDX)="K ^SDEC(409.85,"_PARENTIEN_",5)"
 S RETIDX=RETIDX+1
 S RETN(RETIDX)="S ^SDEC(409.85,"_PARENTIEN_",2,0)="_MRTCARRAY2(PARENTIEN,2,0)
 S RETIDX=RETIDX+1
 S REQIDX=0,B="B"
 F  S REQIDX=$O(MRTCARRAY2(PARENTIEN,2,REQIDX)) Q:+REQIDX=0  D
 . S RETN(RETIDX)="S ^SDEC(409.85,"_PARENTIEN_",2,"_REQIDX_",0)="_""""_MRTCARRAY2(PARENTIEN,2,REQIDX,0)_""""
 . S RETIDX=RETIDX+1
 ;
 S REQIDX=0
 F  S REQIDX=$O(MRTCARRAY2(PARENTIEN,2,REQIDX)) Q:+REQIDX=0  D
 . S REQIEN=$P(MRTCARRAY2(PARENTIEN,2,REQIDX,0),U,1)
 . S RETN(RETIDX)="S ^SDEC(409.85,"_PARENTIEN_",2,"_""""_B_""""_","_REQIEN_","_REQIDX_")="""_""""
 . S RETIDX=RETIDX+1
 ;
 S RETN(RETIDX)="S ^SDEC(409.85,"_PARENTIEN_",5,0)="_MRTCARRAY2(PARENTIEN,5,0)
 S RETIDX=RETIDX+1
  S REQIDX=0
 F  S REQIDX=$O(MRTCARRAY2(PARENTIEN,5,REQIDX)) Q:+REQIDX=0  D
 . S RETN(RETIDX)="S ^SDEC(409.85,"_PARENTIEN_",5,"_REQIDX_",0)="_""""_MRTCARRAY2(PARENTIEN,5,REQIDX,0)_""""
 . S RETIDX=RETIDX+1
 ;
 S REQIDX=0
 F  S REQIDX=$O(MRTCARRAY2(PARENTIEN,5,REQIDX)) Q:+REQIDX=0  D
 . S REQIEN=$P(MRTCARRAY2(PARENTIEN,5,REQIDX,0),U,1)
 . S RETN(RETIDX)="S ^SDEC(409.85,"_PARENTIEN_",5,"_""""_B_""""_","_REQIEN_","_REQIDX_")="""_""""
 . S RETIDX=RETIDX+1
 ;
 S RETN(RETIDX)="S $P(^SDEC(409.85,"_PARENTIEN_",3),U,3)="_UPDATECNT
 S RETIDX=RETIDX+1
 I $$GET1^DIQ(409.85,PARENTIEN,43.1,"I")'="" D
 . S RETN(RETIDX)="S $P(^SDEC(409.85,"_PARENTIEN_",3),U,6)="_""""_""""
 . S RETIDX=RETIDX+1
 I ($G(MRTCARRAY(PARENTIEN,0))="CLOSED")&$G(MRTCARRAY("OPEN")) D
 . ;open parent
 . S RETN(RETIDX)="S $P(^SDEC(409.85,"_PARENTIEN_",0),U,17)="_""""_"O"_""""
 . S RETIDX=RETIDX+1
 . S RETN(RETIDX)="S $P(^SDEC(409.85,"_PARENTIEN_","_""""_"DIS"_""""_"),U,1)="_""""_""""
 . S RETIDX=RETIDX+1
 . S RETN(RETIDX)="S $P(^SDEC(409.85,"_PARENTIEN_","_""""_"DIS"_""""_"),U,2)="_""""_""""
 . S RETIDX=RETIDX+1
 . S RETN(RETIDX)="S $P(^SDEC(409.85,"_PARENTIEN_","_""""_"DIS"_""""_"),U,3)="_""""_""""
 . S RETIDX=RETIDX+1
 S REQCNT=0
 F  S REQCNT=$O(REQUESTLIST(REQCNT)) Q:+REQCNT=0  D
 . S RETN(RETIDX)="S $P(^SDEC(409.85,"_REQUESTLIST(REQCNT)_",3),U,3)="_UPDATECNT
 . S RETIDX=RETIDX+1
 . S RETN(RETIDX)="S $P(^SDEC(409.85,"_REQUESTLIST(REQCNT)_",3),U,6)="_REQCNT
 . S RETIDX=RETIDX+1
 Q
 ;
 ;
EXIT ;exit without running
 S POP=1
 W !,"Nothing done."
 Q
 ;
FIN(UDPATE,ERROR) ;Show final results
 ;
 I $G(ERROR)'="" D
 . W !,ERROR
 Q:$G(ERROR)'=""
 I UPDATE W !!,"Clean-up is complete."
 I 'UPDATE W !!,"Report finished."
 Q
 ;