SDES2INACTCLIN ;ALB/TJB,MGD,TJB,TJB,JAS,TJB,MCB - Inactivate Clinic in HOSPITAL LOCATION FILE 44 ;May 7, 2025
 ;;5.3;Scheduling;**864,877,890,902,903,905,907**;Aug 13, 1993;Build 5
 ;;Per VHA Directive 6402, this routine should not be modified
 ;
 ; Documented API's and Integration Agreements
 ; -------------------------------------------
 ;Reference to $$GETS^DIQ is supported by IA #2056
 ;Reference to $$GETS1^DIQ is supported by IA #2056
 ;
 Q
 ;
SDINACTCLN(SDRETURN,SDCONTEXT,SDPARAM) ;Inactivate Clinic
 ;INPUT -
 ; SDCONTEXT("ACHERON AUDIT ID") = Up to 40 Character unique ID number. Ex: 11d9dcc6-c6a2-4785-8031-8261576fca37
 ; SDCONTEXT("PATIENT DFN") = The DFN/IEN of the target patient from the calling application.
 ; SDCONTEXT("PATIENT ICN") = The ICN of the target patient from the calling application.
 ; SDCONTEXT("USER DUZ") = The DUZ of the user taking action in the calling application.
 ; SDCONTEXT("USER SECID") = The SECID of the user taking action in the calling application.
 ;
 ; SDPARAM("CLINIC IEN")=CLINIC IEN     IEN of the clinic in file 44 - Hospital location
 ; SDPARAM("INACTIVATION DATE")=DATE    ISO DATE to inactivate the clinic if empty default to today (DT)
 ; SDPARAM("DELETE INACTIVATION")="Y"   Either not defined (don't pass in) or "Y" any other value errors
 ;
 ;RETURN PARMETER:
 ; Status
 ;
 N ERRORS,RESULTS,CLINICIEN,INACTDATE,DELINACT,DIERR
 S DELINACT=0
 ; validate context array
 D VALCONTEXT^SDES2VALCONTEXT(.ERRORS,.SDCONTEXT)
 I $D(ERRORS) S ERRORS("ClinicInactivate",1)="" D BUILDJSON^SDES2JSON(.SDRETURN,.ERRORS) Q
 D VALCLINIEN^SDES2VAL44(.ERRORS,$G(SDPARAM("CLINIC IEN")),1)
 D INIT(.SDPARAM,.CLINICIEN,.INACTDATE)
 D VALIDATE(.ERRORS,.SDPARAM,INACTDATE,CLINICIEN,.DELINACT)
 I $D(ERRORS) S ERRORS("ClinicInactivate",1)="" D BUILDJSON^SDES2JSON(.SDRETURN,.ERRORS) Q
 I DELINACT=0 D  Q:$D(ERRORS)
 . D NOAPPOINTMENTS(CLINICIEN,INACTDATE,.ERRORS)
 . I $D(ERRORS) S ERRORS("ClinicInactivate",1)="" D BUILDJSON^SDES2JSON(.SDRETURN,.ERRORS) Q
 . ; File the inactivation on HOSPITAL LOCATION
 . D BLDCINREC(.RESULTS,CLINICIEN,INACTDATE,.ERRORS)
 . ; If the Clinic was inactivated then update the SDEC RESOURCE (409.831) with the inactivation information
 . I '$D(ERRORS) D UPDATECLNRES(CLINICIEN,INACTDATE,$G(SDCONTEXT("USER DUZ")),.ERRORS)
 . I $D(ERRORS) S ERRORS("ClinicInactivate",1)="" D BUILDJSON^SDES2JSON(.SDRETURN,.ERRORS) Q  ; There was a problem updating 409.831 with the inactivation
 I DELINACT=1 D
 . D DELETEINACTIVE(.RESULTS,.SDPARAM,$S($G(SDCONTEXT("USER DUZ"))'="":SDCONTEXT("USER DUZ"),1:DUZ)) ; delete the inactivate date
 D ENCODE^SDES2JSON(.RESULTS,.SDRETURN)
 Q
 ;
INIT(SDPARAM,CLINICIEN,INACTDATE) ; initialize values needed
 S CLINICIEN=$G(SDPARAM("CLINIC IEN"))
 S INACTDATE=$G(SDPARAM("INACTIVATION DATE"))
 ; If no Inactivation Date then default it to today
 I INACTDATE="" S INACTDATE=$$FMTISO^SDAMUTDT(DT)
 Q
 ;
VALPARAM(ERRORS,PARAMS,DELINACT) ; Check if we are doing a delete inactivation date
 N INACTDT
 Q:$D(ERRORS)
 I '$D(PARAMS("DELETE INACTIVATION")) Q  ; No delete inactivation
 I $G(PARAMS("DELETE INACTIVATION"))'="Y" D ERRLOG^SDES2JSON(.ERRORS,52,"Incorrect value for 'DELETE INACTIVATION' parameter, must be 'Y' or not provided") Q
 S INACTDT=$$GET1^DIQ(44,PARAMS("CLINIC IEN"),2505,"I")
 I INACTDT="" D ERRLOG^SDES2JSON(.ERRORS,52,"No INACTIVATE DATE on this clinic, can't delete INACTIVATE DATE") Q
 I INACTDT=DT D ERRLOG^SDES2JSON(.ERRORS,52,"Clinic inactivated today for this clinic, can't delete INACTIVATE DATE must use clinic reactivate.") Q
 S DELINACT=1
 Q
VALIDATE(ERRORS,SDPARAM,INACTIVEDATE,CLINICIEN,DELINACT) ; validate incoming parameters
 N FMDATE
 D VALPARAM(.ERRORS,.SDPARAM,.DELINACT) Q:DELINACT
 ; Validate the inactivation date
 S FMDATE=$$ISOTFM^SDAMUTDT(INACTIVEDATE)
 I FMDATE=-1 D ERRLOG^SDES2JSON(.ERRORS,46,"For Clinic Inactivation")
 I FMDATE>0,(FMDATE<DT) D ERRLOG^SDES2JSON(.ERRORS,46,"Clinic Inactivation can't be before today")
 Q
 ; Make sure there are no active appointments after the inactivation date
NOAPPOINTMENTS(CLINICIEN,INACTDATE,ERRORS) ;
 N POP,FMDATE,DATEIDX,LASTDATE,I1
 S FMDATE=$$ISOTFM^SDAMUTDT($G(INACTDATE))
 S CLINICIEN=$G(CLINICIEN)
 S POP=0,LASTDATE=9999999,DATEIDX=FMDATE-.0001
 F  S DATEIDX=$O(^SC(CLINICIEN,"S",DATEIDX)) Q:'DATEIDX!(POP)!(FMDATE'<LASTDATE&(LASTDATE))  D
 . S I1=0 F  S I1=$O(^SC(CLINICIEN,"S",DATEIDX,1,I1)) Q:'I1  I $$GET1^DIQ(44.003,I1_","_DATEIDX_","_CLINICIEN_",",310,"I")'="C" S POP=1,FMDATE=DATEIDX Q
 I POP D ERRLOG^SDES2JSON(.ERRORS,521)
 Q
 ;
BLDCINREC(SDCINREC,CLINICIEN,INACTIVEDATE,ERRORS) ;Inactivate Clinic
 ; If the inactivation was filed in FILEMAN, no errors recorded, otherwise populate ERRORS
 N SDERR,SDFDA,SDCLNNAME,FMDATE,REACTDT,SDATE,I
 N CLIN,PROVDUZ,IEN ; These variables linger from the UPDATE^DIE call
 S SDCLNNAME=""
 S REACTDT=$$GET1^DIQ(44,CLINICIEN,2506,"I")
 S FMDATE=$$ISOTFM^SDAMUTDT(INACTIVEDATE)
 S SDCLNNAME=$$GET1^DIQ(44,CLINICIEN,.01)
 S SDFDA(44,CLINICIEN_",",2505)=FMDATE
 I REACTDT'="",REACTDT<=FMDATE D
 . S SDFDA(44,CLINICIEN_",",2506)="@"
 D UPDATE^DIE("","SDFDA","","SDERR")
 I $D(SDERR) D ERRLOG^SDES2JSON(.ERRORS,81) Q
 ; Remove the grid elements
 S SDATE=$S((REACTDT'=""&(REACTDT>FMDATE)):REACTDT,1:9999999) D  Q:$D(ERRORS)
 . F I=FMDATE-.0001:0 S I=$O(^SC(CLINICIEN,"ST",I)) Q:'I!(I>SDATE)  K ^SC(CLINICIEN,"ST",I)
 . F I=FMDATE-.0001:0 S I=$O(^SC(CLINICIEN,"T",I)) Q:'I!(I>SDATE)  K ^SC(CLINICIEN,"T",I)
 . F I=FMDATE-.0001:0 S I=$O(^SC(CLINICIEN,"OST",I)) Q:'I!(I>SDATE)  K ^SC(CLINICIEN,"OST",I)
 . D REMVTX(CLINICIEN,FMDATE)
 I FMDATE=DT D REMPROV(CLINICIEN)
 S SDCINREC("ClinicInactivate",1)="Clinic is successfully inactivated."
 Q
 ;
REMVTX(SCLIN,SDDATE) ; Remove T0 to T6 patterns
 N SDN,SD,J,J1,I,X,X1,X2,DA,DIE,DR,DOW,SDINDPAT,FDA,ERR,FDAIEN,SDFILE,TNODE
 S TNODE="44.06^44.07^44.08^44.09^44.008^44.009^44.0001"
 F I=0:1:6 S SDFILE(I)=$P(TNODE,U,I+1)
 K SDN S DOW=$$DOW^XLFDT(SDDATE,1),SDN(DOW)=SDDATE,SDINDPAT(DOW)=$G(^SC(SCLIN,"T"_DOW,9999999,1)),X=SDDATE
 F I=1:1:6 S X2=1,X1=X D C^%DTC S DOW=$$DOW^XLFDT(X,1),SDN(DOW)=X,SDINDPAT(DOW)=$G(^SC(SCLIN,"T"_DOW,9999999,1))
 F I=0:1:6 S J=$O(^SC(SCLIN,"T"_I,(SDN(I)-0.0001)))  D  Q:$D(ERRORS)
 . Q:'$D(^SC(SCLIN,"T"_I,0))  ; skip if no Tx node
 . Q:$O(^SC(SCLIN,"T"_I,0))=""
 . S SD=$O(^SC(SCLIN,"T"_I,J,0))
 . I J>0,SD'=9999999,$$GET1^DIQ(SDFILE(I),J_","_SCLIN_",",1,"I")'="" D  Q:$D(ERRORS)
 . . K FDA,ERR,FDAIEN
 . . D  Q:$D(ERRORS)
 . . . Q:$D(^SC(SCLIN,"T"_I,SDN(I)))
 . . . S FDA(SDFILE(I),"+2,"_SCLIN_",",1)=$$GET1^DIQ(SDFILE(I),J_","_SCLIN_",",1,"I")  ;^SC(SCLIN,"T"_I,J,1)
 . . . S FDA(SDFILE(I),"+2,"_SCLIN_",",.01)=SDN(I)
 . . . S FDAIEN(2)=SDN(I) D UPDATE^DIE("","FDA","FDAIEN","ERR")
 . . . I $D(ERR) D ERRLOG^SDES2JSON(.ERRORS,81,"Issue with saving old pattern for Clinic IEN:"_SCLIN_" DOW: "_I_" Date: "_SDN(I))
 . . K ^SC(SCLIN,"T"_I,J) F J1=J:0 S J1=$O(^SC(SCLIN,"T"_I,J1)) Q:'J1  K ^SC(SCLIN,"T"_I,J1) ;don't remove if already canceled, SD*5.3*726
 . D  Q:$D(ERRORS)  ; File indefinite date with empty pattern
 . . I $$GET1^DIQ(SDFILE(I),"9999999,"_SCLIN_",",.01,"I")=9999999,$$GET1^DIQ(SDFILE(I),"9999999,"_SCLIN_",",1,"I")="" Q  ; Already have an empty indefinite pattern
 . . K FDA,ERR,FDAIEN
 . . S FDA(SDFILE(I),"+2,"_SCLIN_",",1)=""
 . . S FDA(SDFILE(I),"+2,"_SCLIN_",",.01)=9999999
 . . S FDAIEN(2)=9999999 D UPDATE^DIE("","FDA","FDAIEN","ERR")
 . . I $D(ERR) D ERRLOG^SDES2JSON(.ERRORS,81,"Issue with saving empty indefinite pattern for Clinic IEN:"_SCLIN)
 . D:SDINDPAT(I)'=""  ; If we have an indefinite pattern then file it on the inactivation date
 . . Q:$D(^SC(SCLIN,"T"_I,SDN(I)))
 . . K FDA,ERR,FDAIEN
 . . S FDA(SDFILE(I),"+2,"_SCLIN_",",1)=SDINDPAT(I)
 . . S FDA(SDFILE(I),"+2,"_SCLIN_",",.01)=SDN(I)
 . . S FDAIEN(2)=SDN(I)
 . . D UPDATE^DIE("","FDA","FDAIEN","ERR")
 . . I $D(ERR) D ERRLOG^SDES2JSON(.ERRORS,81,"Issue with filing the saved pattern for Clinic IEN:"_SCLIN_" Date: "_SDN(I))
 Q
 ;
REMPROV(CLINIEN) ;Remove Providers from Clinic
 Q:'$D(^SC(CLINIEN,"PR"))
 N PRVDA,PRVIEN,X,Y
 S PRVIEN=0
 F  S PRVIEN=$O(^SC(CLINIEN,"PR",PRVIEN)) Q:'PRVIEN  D
 . S PRVDA(44.1,PRVIEN_","_CLINIEN_",",.01)="@"
 . D FILE^DIE(,"PRVDA") K PRVDA
 Q
 ;
UPDATECLNRES(SDCLINICIEN,INACTIVATIONDATE,SDDUZ,ERRORS) ;Update INACTIVATED DATE/TIME and INACTIVATED BY USER in SDEC RESOURCE File #409.831
 N SDRESFDA,SDCLINRES,SDERR,FMDATE,REACTDT
 S SDCLINRES=$$GETRES^SDES2UTIL1(SDCLINICIEN,1)
 Q:SDCLINRES=""  ; no resource associated with clinic
 S FMDATE=$$ISOTFM^SDAMUTDT(INACTIVATIONDATE)
 S REACTDT=$$GET1^DIQ(409.831,SDCLINRES,.025,"I")
 S SDRESFDA(409.831,SDCLINRES_",",.021)=$P(FMDATE,".")
 S SDRESFDA(409.831,SDCLINRES_",",.022)=$S(SDDUZ'="":SDDUZ,1:DUZ)
 I REACTDT'="",REACTDT<=FMDATE D
 . S SDRESFDA(409.831,SDCLINRES_",",.025)="@"
 . S SDRESFDA(409.831,SDCLINRES_",",.026)="@"
 D FILE^DIE("","SDRESFDA","SDERR")
 I $D(SDERR) D ERRLOG^SDES2JSON(.ERRORS,81,"File 409.831 not updated with the inactivation date for Resource IEN="_SDCLINRES)
 Q
 ; If the code is called with SDPARAM("DELETE INACTIVATION")="Y"
DELETEINACTIVE(RESULTS,SDPARAM,SDDUZ) ;
 ;
 N FDA,FDERR,SDCLINRES
 S SDCLINRES=$$GETRES^SDES2UTIL1(SDPARAM("CLINIC IEN"),1)
 S FDA(44,SDPARAM("CLINIC IEN")_",",2505)="@"
 D FILE^DIE("","FDA","FDERR")
 I $D(FDERR) S RESULTS("ClinicInactivate",1)="" D ERRLOG^SDES2JSON(.RESULTS,52,"Error trying to delete INACTIVATE DATE on Clinic "_SDPARAM("CLINIC IEN")) Q
 K FDA,FDERR
 S FDA(409.831,SDCLINRES_",",.021)="@"
 S FDA(409.831,SDCLINRES_",",.022)="@"
 D FILE^DIE("","FDA","FDERR")
 I $D(FDERR) S RESULTS("ClinicInactivate",1)="" D ERRLOG^SDES2JSON(.RESULTS,81,"File 409.831 not updated with the inactivation date for Resource IEN="_SDCLINRES) Q
 S RESULTS("ClinicInactivate",1,"DeleteInactivate")="Inactivate Date successfully removed from clinic: "_SDPARAM("CLINIC IEN")_"."
 Q
 ;
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HSDES2INACTCLIN   9972     printed  Sep 23, 2025@20:30:59                                                                                                                                                                                              Page 2
SDES2INACTCLIN ;ALB/TJB,MGD,TJB,TJB,JAS,TJB,MCB - Inactivate Clinic in HOSPITAL LOCATION FILE 44 ;May 7, 2025
 +1       ;;5.3;Scheduling;**864,877,890,902,903,905,907**;Aug 13, 1993;Build 5
 +2       ;;Per VHA Directive 6402, this routine should not be modified
 +3       ;
 +4       ; Documented API's and Integration Agreements
 +5       ; -------------------------------------------
 +6       ;Reference to $$GETS^DIQ is supported by IA #2056
 +7       ;Reference to $$GETS1^DIQ is supported by IA #2056
 +8       ;
 +9        QUIT 
 +10      ;
SDINACTCLN(SDRETURN,SDCONTEXT,SDPARAM) ;Inactivate Clinic
 +1       ;INPUT -
 +2       ; SDCONTEXT("ACHERON AUDIT ID") = Up to 40 Character unique ID number. Ex: 11d9dcc6-c6a2-4785-8031-8261576fca37
 +3       ; SDCONTEXT("PATIENT DFN") = The DFN/IEN of the target patient from the calling application.
 +4       ; SDCONTEXT("PATIENT ICN") = The ICN of the target patient from the calling application.
 +5       ; SDCONTEXT("USER DUZ") = The DUZ of the user taking action in the calling application.
 +6       ; SDCONTEXT("USER SECID") = The SECID of the user taking action in the calling application.
 +7       ;
 +8       ; SDPARAM("CLINIC IEN")=CLINIC IEN     IEN of the clinic in file 44 - Hospital location
 +9       ; SDPARAM("INACTIVATION DATE")=DATE    ISO DATE to inactivate the clinic if empty default to today (DT)
 +10      ; SDPARAM("DELETE INACTIVATION")="Y"   Either not defined (don't pass in) or "Y" any other value errors
 +11      ;
 +12      ;RETURN PARMETER:
 +13      ; Status
 +14      ;
 +15       NEW ERRORS,RESULTS,CLINICIEN,INACTDATE,DELINACT,DIERR
 +16       SET DELINACT=0
 +17      ; validate context array
 +18       DO VALCONTEXT^SDES2VALCONTEXT(.ERRORS,.SDCONTEXT)
 +19       IF $DATA(ERRORS)
               SET ERRORS("ClinicInactivate",1)=""
               DO BUILDJSON^SDES2JSON(.SDRETURN,.ERRORS)
               QUIT 
 +20       DO VALCLINIEN^SDES2VAL44(.ERRORS,$GET(SDPARAM("CLINIC IEN")),1)
 +21       DO INIT(.SDPARAM,.CLINICIEN,.INACTDATE)
 +22       DO VALIDATE(.ERRORS,.SDPARAM,INACTDATE,CLINICIEN,.DELINACT)
 +23       IF $DATA(ERRORS)
               SET ERRORS("ClinicInactivate",1)=""
               DO BUILDJSON^SDES2JSON(.SDRETURN,.ERRORS)
               QUIT 
 +24       IF DELINACT=0
               Begin DoDot:1
 +25               DO NOAPPOINTMENTS(CLINICIEN,INACTDATE,.ERRORS)
 +26               IF $DATA(ERRORS)
                       SET ERRORS("ClinicInactivate",1)=""
                       DO BUILDJSON^SDES2JSON(.SDRETURN,.ERRORS)
                       QUIT 
 +27      ; File the inactivation on HOSPITAL LOCATION
 +28               DO BLDCINREC(.RESULTS,CLINICIEN,INACTDATE,.ERRORS)
 +29      ; If the Clinic was inactivated then update the SDEC RESOURCE (409.831) with the inactivation information
 +30               IF '$DATA(ERRORS)
                       DO UPDATECLNRES(CLINICIEN,INACTDATE,$GET(SDCONTEXT("USER DUZ")),.ERRORS)
 +31      ; There was a problem updating 409.831 with the inactivation
                   IF $DATA(ERRORS)
                       SET ERRORS("ClinicInactivate",1)=""
                       DO BUILDJSON^SDES2JSON(.SDRETURN,.ERRORS)
                       QUIT 
               End DoDot:1
               if $DATA(ERRORS)
                   QUIT 
 +32       IF DELINACT=1
               Begin DoDot:1
 +33      ; delete the inactivate date
                   DO DELETEINACTIVE(.RESULTS,.SDPARAM,$SELECT($GET(SDCONTEXT("USER DUZ"))'="":SDCONTEXT("USER DUZ"),1:DUZ))
               End DoDot:1
 +34       DO ENCODE^SDES2JSON(.RESULTS,.SDRETURN)
 +35       QUIT 
 +36      ;
INIT(SDPARAM,CLINICIEN,INACTDATE) ; initialize values needed
 +1        SET CLINICIEN=$GET(SDPARAM("CLINIC IEN"))
 +2        SET INACTDATE=$GET(SDPARAM("INACTIVATION DATE"))
 +3       ; If no Inactivation Date then default it to today
 +4        IF INACTDATE=""
               SET INACTDATE=$$FMTISO^SDAMUTDT(DT)
 +5        QUIT 
 +6       ;
VALPARAM(ERRORS,PARAMS,DELINACT) ; Check if we are doing a delete inactivation date
 +1        NEW INACTDT
 +2        if $DATA(ERRORS)
               QUIT 
 +3       ; No delete inactivation
           IF '$DATA(PARAMS("DELETE INACTIVATION"))
               QUIT 
 +4        IF $GET(PARAMS("DELETE INACTIVATION"))'="Y"
               DO ERRLOG^SDES2JSON(.ERRORS,52,"Incorrect value for 'DELETE INACTIVATION' parameter, must be 'Y' or not provided")
               QUIT 
 +5        SET INACTDT=$$GET1^DIQ(44,PARAMS("CLINIC IEN"),2505,"I")
 +6        IF INACTDT=""
               DO ERRLOG^SDES2JSON(.ERRORS,52,"No INACTIVATE DATE on this clinic, can't delete INACTIVATE DATE")
               QUIT 
 +7        IF INACTDT=DT
               DO ERRLOG^SDES2JSON(.ERRORS,52,"Clinic inactivated today for this clinic, can't delete INACTIVATE DATE must use clinic reactivate.")
               QUIT 
 +8        SET DELINACT=1
 +9        QUIT 
VALIDATE(ERRORS,SDPARAM,INACTIVEDATE,CLINICIEN,DELINACT) ; validate incoming parameters
 +1        NEW FMDATE
 +2        DO VALPARAM(.ERRORS,.SDPARAM,.DELINACT)
           if DELINACT
               QUIT 
 +3       ; Validate the inactivation date
 +4        SET FMDATE=$$ISOTFM^SDAMUTDT(INACTIVEDATE)
 +5        IF FMDATE=-1
               DO ERRLOG^SDES2JSON(.ERRORS,46,"For Clinic Inactivation")
 +6        IF FMDATE>0
               IF (FMDATE<DT)
                   DO ERRLOG^SDES2JSON(.ERRORS,46,"Clinic Inactivation can't be before today")
 +7        QUIT 
 +8       ; Make sure there are no active appointments after the inactivation date
NOAPPOINTMENTS(CLINICIEN,INACTDATE,ERRORS) ;
 +1        NEW POP,FMDATE,DATEIDX,LASTDATE,I1
 +2        SET FMDATE=$$ISOTFM^SDAMUTDT($GET(INACTDATE))
 +3        SET CLINICIEN=$GET(CLINICIEN)
 +4        SET POP=0
           SET LASTDATE=9999999
           SET DATEIDX=FMDATE-.0001
 +5        FOR 
               SET DATEIDX=$ORDER(^SC(CLINICIEN,"S",DATEIDX))
               if 'DATEIDX!(POP)!(FMDATE'<LASTDATE&(LASTDATE))
                   QUIT 
               Begin DoDot:1
 +6                SET I1=0
                   FOR 
                       SET I1=$ORDER(^SC(CLINICIEN,"S",DATEIDX,1,I1))
                       if 'I1
                           QUIT 
                       IF $$GET1^DIQ(44.003,I1_","_DATEIDX_","_CLINICIEN_",",310,"I")'="C"
                           SET POP=1
                           SET FMDATE=DATEIDX
                           QUIT 
               End DoDot:1
 +7        IF POP
               DO ERRLOG^SDES2JSON(.ERRORS,521)
 +8        QUIT 
 +9       ;
BLDCINREC(SDCINREC,CLINICIEN,INACTIVEDATE,ERRORS) ;Inactivate Clinic
 +1       ; If the inactivation was filed in FILEMAN, no errors recorded, otherwise populate ERRORS
 +2        NEW SDERR,SDFDA,SDCLNNAME,FMDATE,REACTDT,SDATE,I
 +3       ; These variables linger from the UPDATE^DIE call
           NEW CLIN,PROVDUZ,IEN
 +4        SET SDCLNNAME=""
 +5        SET REACTDT=$$GET1^DIQ(44,CLINICIEN,2506,"I")
 +6        SET FMDATE=$$ISOTFM^SDAMUTDT(INACTIVEDATE)
 +7        SET SDCLNNAME=$$GET1^DIQ(44,CLINICIEN,.01)
 +8        SET SDFDA(44,CLINICIEN_",",2505)=FMDATE
 +9        IF REACTDT'=""
               IF REACTDT<=FMDATE
                   Begin DoDot:1
 +10                   SET SDFDA(44,CLINICIEN_",",2506)="@"
                   End DoDot:1
 +11       DO UPDATE^DIE("","SDFDA","","SDERR")
 +12       IF $DATA(SDERR)
               DO ERRLOG^SDES2JSON(.ERRORS,81)
               QUIT 
 +13      ; Remove the grid elements
 +14       SET SDATE=$SELECT((REACTDT'=""&(REACTDT>FMDATE)):REACTDT,1:9999999)
           Begin DoDot:1
 +15           FOR I=FMDATE-.0001:0
                   SET I=$ORDER(^SC(CLINICIEN,"ST",I))
                   if 'I!(I>SDATE)
                       QUIT 
                   KILL ^SC(CLINICIEN,"ST",I)
 +16           FOR I=FMDATE-.0001:0
                   SET I=$ORDER(^SC(CLINICIEN,"T",I))
                   if 'I!(I>SDATE)
                       QUIT 
                   KILL ^SC(CLINICIEN,"T",I)
 +17           FOR I=FMDATE-.0001:0
                   SET I=$ORDER(^SC(CLINICIEN,"OST",I))
                   if 'I!(I>SDATE)
                       QUIT 
                   KILL ^SC(CLINICIEN,"OST",I)
 +18           DO REMVTX(CLINICIEN,FMDATE)
           End DoDot:1
           if $DATA(ERRORS)
               QUIT 
 +19       IF FMDATE=DT
               DO REMPROV(CLINICIEN)
 +20       SET SDCINREC("ClinicInactivate",1)="Clinic is successfully inactivated."
 +21       QUIT 
 +22      ;
REMVTX(SCLIN,SDDATE) ; Remove T0 to T6 patterns
 +1        NEW SDN,SD,J,J1,I,X,X1,X2,DA,DIE,DR,DOW,SDINDPAT,FDA,ERR,FDAIEN,SDFILE,TNODE
 +2        SET TNODE="44.06^44.07^44.08^44.09^44.008^44.009^44.0001"
 +3        FOR I=0:1:6
               SET SDFILE(I)=$PIECE(TNODE,U,I+1)
 +4        KILL SDN
           SET DOW=$$DOW^XLFDT(SDDATE,1)
           SET SDN(DOW)=SDDATE
           SET SDINDPAT(DOW)=$GET(^SC(SCLIN,"T"_DOW,9999999,1))
           SET X=SDDATE
 +5        FOR I=1:1:6
               SET X2=1
               SET X1=X
               DO C^%DTC
               SET DOW=$$DOW^XLFDT(X,1)
               SET SDN(DOW)=X
               SET SDINDPAT(DOW)=$GET(^SC(SCLIN,"T"_DOW,9999999,1))
 +6        FOR I=0:1:6
               SET J=$ORDER(^SC(SCLIN,"T"_I,(SDN(I)-0.0001)))
               Begin DoDot:1
 +7       ; skip if no Tx node
                   if '$DATA(^SC(SCLIN,"T"_I,0))
                       QUIT 
 +8                if $ORDER(^SC(SCLIN,"T"_I,0))=""
                       QUIT 
 +9                SET SD=$ORDER(^SC(SCLIN,"T"_I,J,0))
 +10               IF J>0
                       IF SD'=9999999
                           IF $$GET1^DIQ(SDFILE(I),J_","_SCLIN_",",1,"I")'=""
                               Begin DoDot:2
 +11                               KILL FDA,ERR,FDAIEN
 +12                               Begin DoDot:3
 +13                                   if $DATA(^SC(SCLIN,"T"_I,SDN(I)))
                                           QUIT 
 +14      ;^SC(SCLIN,"T"_I,J,1)
                                       SET FDA(SDFILE(I),"+2,"_SCLIN_",",1)=$$GET1^DIQ(SDFILE(I),J_","_SCLIN_",",1,"I")
 +15                                   SET FDA(SDFILE(I),"+2,"_SCLIN_",",.01)=SDN(I)
 +16                                   SET FDAIEN(2)=SDN(I)
                                       DO UPDATE^DIE("","FDA","FDAIEN","ERR")
 +17                                   IF $DATA(ERR)
                                           DO ERRLOG^SDES2JSON(.ERRORS,81,"Issue with saving old pattern for Clinic IEN:"_SCLIN_" DOW: "_I_" Date: "_SDN(I))
                                   End DoDot:3
                                   if $DATA(ERRORS)
                                       QUIT 
 +18      ;don't remove if already canceled, SD*5.3*726
                                   KILL ^SC(SCLIN,"T"_I,J)
                                   FOR J1=J:0
                                       SET J1=$ORDER(^SC(SCLIN,"T"_I,J1))
                                       if 'J1
                                           QUIT 
                                       KILL ^SC(SCLIN,"T"_I,J1)
                               End DoDot:2
                               if $DATA(ERRORS)
                                   QUIT 
 +19      ; File indefinite date with empty pattern
                   Begin DoDot:2
 +20      ; Already have an empty indefinite pattern
                       IF $$GET1^DIQ(SDFILE(I),"9999999,"_SCLIN_",",.01,"I")=9999999
                           IF $$GET1^DIQ(SDFILE(I),"9999999,"_SCLIN_",",1,"I")=""
                               QUIT 
 +21                   KILL FDA,ERR,FDAIEN
 +22                   SET FDA(SDFILE(I),"+2,"_SCLIN_",",1)=""
 +23                   SET FDA(SDFILE(I),"+2,"_SCLIN_",",.01)=9999999
 +24                   SET FDAIEN(2)=9999999
                       DO UPDATE^DIE("","FDA","FDAIEN","ERR")
 +25                   IF $DATA(ERR)
                           DO ERRLOG^SDES2JSON(.ERRORS,81,"Issue with saving empty indefinite pattern for Clinic IEN:"_SCLIN)
                   End DoDot:2
                   if $DATA(ERRORS)
                       QUIT 
 +26      ; If we have an indefinite pattern then file it on the inactivation date
                   if SDINDPAT(I)'=""
                       Begin DoDot:2
 +27                       if $DATA(^SC(SCLIN,"T"_I,SDN(I)))
                               QUIT 
 +28                       KILL FDA,ERR,FDAIEN
 +29                       SET FDA(SDFILE(I),"+2,"_SCLIN_",",1)=SDINDPAT(I)
 +30                       SET FDA(SDFILE(I),"+2,"_SCLIN_",",.01)=SDN(I)
 +31                       SET FDAIEN(2)=SDN(I)
 +32                       DO UPDATE^DIE("","FDA","FDAIEN","ERR")
 +33                       IF $DATA(ERR)
                               DO ERRLOG^SDES2JSON(.ERRORS,81,"Issue with filing the saved pattern for Clinic IEN:"_SCLIN_" Date: "_SDN(I))
                       End DoDot:2
               End DoDot:1
               if $DATA(ERRORS)
                   QUIT 
 +34       QUIT 
 +35      ;
REMPROV(CLINIEN) ;Remove Providers from Clinic
 +1        if '$DATA(^SC(CLINIEN,"PR"))
               QUIT 
 +2        NEW PRVDA,PRVIEN,X,Y
 +3        SET PRVIEN=0
 +4        FOR 
               SET PRVIEN=$ORDER(^SC(CLINIEN,"PR",PRVIEN))
               if 'PRVIEN
                   QUIT 
               Begin DoDot:1
 +5                SET PRVDA(44.1,PRVIEN_","_CLINIEN_",",.01)="@"
 +6                DO FILE^DIE(,"PRVDA")
                   KILL PRVDA
               End DoDot:1
 +7        QUIT 
 +8       ;
UPDATECLNRES(SDCLINICIEN,INACTIVATIONDATE,SDDUZ,ERRORS) ;Update INACTIVATED DATE/TIME and INACTIVATED BY USER in SDEC RESOURCE File #409.831
 +1        NEW SDRESFDA,SDCLINRES,SDERR,FMDATE,REACTDT
 +2        SET SDCLINRES=$$GETRES^SDES2UTIL1(SDCLINICIEN,1)
 +3       ; no resource associated with clinic
           if SDCLINRES=""
               QUIT 
 +4        SET FMDATE=$$ISOTFM^SDAMUTDT(INACTIVATIONDATE)
 +5        SET REACTDT=$$GET1^DIQ(409.831,SDCLINRES,.025,"I")
 +6        SET SDRESFDA(409.831,SDCLINRES_",",.021)=$PIECE(FMDATE,".")
 +7        SET SDRESFDA(409.831,SDCLINRES_",",.022)=$SELECT(SDDUZ'="":SDDUZ,1:DUZ)
 +8        IF REACTDT'=""
               IF REACTDT<=FMDATE
                   Begin DoDot:1
 +9                    SET SDRESFDA(409.831,SDCLINRES_",",.025)="@"
 +10                   SET SDRESFDA(409.831,SDCLINRES_",",.026)="@"
                   End DoDot:1
 +11       DO FILE^DIE("","SDRESFDA","SDERR")
 +12       IF $DATA(SDERR)
               DO ERRLOG^SDES2JSON(.ERRORS,81,"File 409.831 not updated with the inactivation date for Resource IEN="_SDCLINRES)
 +13       QUIT 
 +14      ; If the code is called with SDPARAM("DELETE INACTIVATION")="Y"
DELETEINACTIVE(RESULTS,SDPARAM,SDDUZ) ;
 +1       ;
 +2        NEW FDA,FDERR,SDCLINRES
 +3        SET SDCLINRES=$$GETRES^SDES2UTIL1(SDPARAM("CLINIC IEN"),1)
 +4        SET FDA(44,SDPARAM("CLINIC IEN")_",",2505)="@"
 +5        DO FILE^DIE("","FDA","FDERR")
 +6        IF $DATA(FDERR)
               SET RESULTS("ClinicInactivate",1)=""
               DO ERRLOG^SDES2JSON(.RESULTS,52,"Error trying to delete INACTIVATE DATE on Clinic "_SDPARAM("CLINIC IEN"))
               QUIT 
 +7        KILL FDA,FDERR
 +8        SET FDA(409.831,SDCLINRES_",",.021)="@"
 +9        SET FDA(409.831,SDCLINRES_",",.022)="@"
 +10       DO FILE^DIE("","FDA","FDERR")
 +11       IF $DATA(FDERR)
               SET RESULTS("ClinicInactivate",1)=""
               DO ERRLOG^SDES2JSON(.RESULTS,81,"File 409.831 not updated with the inactivation date for Resource IEN="_SDCLINRES)
               QUIT 
 +12       SET RESULTS("ClinicInactivate",1,"DeleteInactivate")="Inactivate Date successfully removed from clinic: "_SDPARAM("CLINIC IEN")_"."
 +13       QUIT 
 +14      ;