SCMCTSK2 ;ALB/JDS - PCMM Inactivation Nightly Job; 18 Apr 2003 9:36 AM ; 10/24/07 12:23pm ; Compiled November 21, 2007 13:32:47 ; 9/22/09 8:43am
;;5.3;PIMS;**297,498,527,499,532,1015,1016**;JUN 30, 2012;Build 20
Q
NIGHT ;
N ENDDT,NOINAC,SIXM,FLGDT,L,PATDT,SEEN,SDDT,LDOM
D DT^DICRW S SDDT=$P($G(^XTMP("SCMCTSK2-"_DT,0)),U,2)
I SDDT="" S SDDT=DT
S ALPHA=$G(^SCTM(404.44,1,1)),ALPHA=$P(ALPHA,U,8) I ALPHA<SDDT S ALPHA=0
;if 'ALPHA NOINAC=1 except 15th and the Last Day of a Month (LDoM)
;inact only on 15th and on LDoM
S (NOINAC,LDOM)=0
S X1=SDDT,X2=1 D C^%DTC
I ($E(SDDT,1,5)'=$E(X,1,5)) S LDOM=1
I 'ALPHA D
.I ($E(SDDT,6,7)'=15)&('LDOM) S NOINAC=1
.D INACTIVE^SCMCTSK1
S SIXM=$P($G(^SCTM(404.44,1,1)),U,9)
I SIXM!(LDOM) D PRFLAG
I ALPHA D INACTIVE^SCMCTSK1
;determine ENDDT-Inactn Date-30 days if flagged today
F DATE=0:0 S DATE=$O(^SCPT(404.43,"AFLG",DATE)) Q:'DATE D
.F ENTRY=0:0 S ENTRY=$O(^SCPT(404.43,"AFLG",DATE,ENTRY)) Q:'ENTRY D
..S ZERO=$G(^SCPT(404.43,ENTRY,0)) Q:'ZERO
..S DFN=+$G(^SCPT(404.42,+ZERO,0)) Q:'DFN
..S POS=$P(ZERO,U,2)
..I $P(ZERO,U,4) D UNFLG Q ;unass.
..S X1=DATE,X2=$S(ALPHA:+2,1:+30) D C^%DTC S ENDDT=X
..N SDASS S SDASS=$P(ZERO,U,3)
..;N-new or E-stbl.
..;assig >12 months since flagging, not NEW, E-stbl)
..N NEW
..S NEW=0 S X1=DATE,X2=SDASS D ^%DTC I X<365 S NEW=1
..I NEW S %DT="",X="T-12M" D ^%DT S STDT=+Y D
...S X1=STDT,X2=-7 D C^%DTC S TYDT=X
..I 'NEW S %DT="",X="T-24M" D ^%DT S STDT=+Y D
...S X1=STDT,X2=-7 D C^%DTC S TYDT=X
..;
..;I $P(ZERO,U,17) D UNFLG Q ;react.
..;get prec
..;S %DT="",X="T-12M" D ^%DT S STDT=+Y
..;S PREC=$$DATES^SCAPMCU1(404.53,+POS),PREC=$S(PREC:$P($G(^SCTM(404.53,+$P(PREC,U,4),0)),U,6),1:+POS)
..I '$P(ZERO,U,5) D UNFLG Q ;Not PC
..D SEEN^SCMCTSK1(DFN,POS,TYDT,SDDT,.PROV,.PRECP,.SEEN)
..;S PC=$$GET^XUA4A72(+PROV)
..I SEEN D UNFLG Q
..I $P(ZERO,U,13) S X1=DATE,X2=$S(ALPHA:4,1:90) D C^%DTC S FLGDT=X I FLGDT>SDDT Q ;do not inactivate yet; extended
..I ('NOINAC)&(SDDT'<ENDDT) D DIS^SCMCTSK1
;flag prov 6m after install sd/297
I NOINAC D:ALPHA BULL I '$D(^SCPT(404.43,"AFLG",SDDT)) K ^TMP($J,"SCMCTSK2") Q
;flag prov 6m after install sd/297
;I SIXM&(SIXM'>SDDT)!LDOM D
I LDOM!ALPHA D
.D PRINAC
.;N FLDA
.;S FLDA(404.44,"1,",19)=""
.;D FILE^DIE("I","FLDA","ERR")
D BULL K ^TMP($J,"SCMCTSK2")
Q
UNFLG ;Unflagging
N DR,DIE,DA
S DR=".15///@;.13///@;.12///@",DIE="^SCPT(404.43,",DA=ENTRY D ^DIE
Q
PRFLAG ;flag incorrect provider pos
N POS
;prov inact. has run once
;I $P($G(^SCTM(404.44,1,1)),U,11)'="" Q
D PRFLAG^SCMCTSK3
Q
PRINAC ;inact. flagged providers
N I,II
;Prov inact. run already
I $G(SDDT)="" S SDDT=DT
;S II=$P($G(^SCTM(404.44,1,1)),U,11) I II'="",II'=SDDT Q
F I=0:0 S I=$O(^SCTM(404.52,I)) Q:'I S ZERO=$G(^(I,0)) I $P(ZERO,U,10) D
.S ZEROIEN=I
.;uncomment next line for testing only bpfo/swo 11.19.2008
.;S X1=$P(ZERO,U,10),X2=$S(ALPHA:2,1:30) D C^%DTC I SDDT<X Q ;not time yet
.;I $P(ZERO,U,10)>$G(ENDDT) Q ;not time yet
.I +$$EN^SCMCTSKI(1)<SDDT Q
.I $O(^SCTM(404.52,"AIDT",+ZERO,0,-9999999))<(-$P(ZERO,U,2)) Q ;inactivated
.;Check valid criteria
.S POS=+ZERO
.S PROV=+$$GETPRTP^SCAPMCU2(POS,SDDT)
.S PC=$$GET^XUA4A72(+PROV)
.S DR=".091///@",DIE="^SCTM(404.52,",DA=ZEROIEN D ^DIE ;remove flag
.S ZERO1=$G(^SCTM(404.57,POS,0))
.I '$D(^SD(403.46,+$P(ZERO1,U,3),2,+PC)) D
..;inactivation
..K DO
..S DIC="^SCTM(404.52,",X=+ZERO,DIC("DR")=".02////"_DT_";.03////"_$P(ZERO,U,3)_";.04////0;.05///EMPLOYEE LEAVES POSITION;.11////1"
..S DIC(0)="Z" D FILE^DICN
..;S DIE="^SCTM(404.52,",DA=+ZERO,DR=".02////"_SDDT_";.03////"_$P(ZERO,U,3)_";.04////0;.05///EMPLOYEE LEAVES POSITION;.11////1"
..;D ^DIE
;only run inact. once
S $P(^SCTM(404.44,1,1),U,11)=SDDT
Q
FUTAPP(DFN) ;print future appts
N TAB,SCDT0,SCARRAY,SCDTMP S TAB=$X
I $G(SDDT)="" S SDDT=DT
S SCDT=SDDT+.24
S SCARRAY(1)=SCDT ;date/time filter
S SCARRAY(4)=DFN ;patient filter
S SCARRAY("SORT")="P" ;sort filter
S SCARRAY("FLDS")="1;2;3"
I ($$SDAPI^SDAMA301(.SCARRAY)>0) D
.S SCDTMP=0 F S SCDTMP=$O(^TMP($J,"SDAMA301",DFN,SCDTMP)) Q:'SCDTMP D
..S SCDT0=$G(^TMP($J,"SDAMA301",DFN,SCDTMP)) Q:($P($P(SCDT0,U,3),U)="R")
..S Y=SCDTMP X ^DD("DD") W $E(Y_" ",1,17)_" "_$E($P($P(SCDT0,U,2),";",2),1,10)
Q
GETASC(DATA,ENTRY) ;get assoc. clinics
N I,CNT S CNT=0
F I=0:0 S I=$O(^SCTM(404.57,+$G(ENTRY),5,I)) Q:'I S CNT=CNT+1,DATA(CNT)=I_U_$P($G(^SC(I,0)),U)
Q
SETASC(RESULT,DATA) ;set assoc. clinics
D SETASC^SCMCTSK7(.RESULT,DATA) Q
MSG(SCTP,DFN) ;send inact. message
;given valid positions get current practitioners
S SCLIST="SCL"
I $G(SDDT)="" S SDDT=DT
I "N"'[$P($G(^SCTM(404.57,SCTP,2)),U,9) D
.S SCOK=$$PRTP^SCAPMC(SCTP,"",.SCLIST,.SCERR)
.;if preceptor notice turned on for message type
I +$P($G(^SCTM(404.57,SCTP,2)),U,9) D
.S SCX=+$$OKPREC2^SCMCLK(SCTP,SDDT)
.;if preceptor duz returned, add to array
.I SCX S @SCLIST@("SCPR",SCX)=""
N XMY F I=0:0 S I=$O(@SCLIST@("SCPR",I)) Q:'I S XMY(I)=""
S SCTEXT(1,0)="PATIENT "_$P($G(^DPT(DFN,0)),U)_" has been inactivated from PC team position "_$P($G(^SCTM(404.57,SCTP,0)),U)
S XMSUB="Provider's Inactivated Primary Care Patients" D ^XMD
Q
BULL ;EOM Bulletin
N DISUPNO,BY,DHIT,HEAD
S DISUPNO=1,L=0
S XMSUB="Patients Scheduled for Inactivation from PC Panel"
S XMY("G.PCMM PATIENT/PROVIDER INACTIVE")=""
K ^TMP("SCMC",$J),^TMP("SCMCTXT",$J),^TMP("SCML",$J)
S XMTEXT="^TMP(""SCMCTXT"",$J," ;S @XMTEXT@(0)=""
S DIC="^SCPT(404.43,",BY="[SCMC FLAGGED BULLETIN]",FLDS="[SC BULLETIN]",CNT=0
S:0 FLDS="" S IOP="",DHD="@@",(FR,TO)="" D EN1^DIP
S ^TMP("SCMCTXT",$J,1,0)="There are "_$O(^TMP("SCMC",$J,""),-1)_" Patients scheduled for inactivation in next 30 days"
D LINES(1)
D ^XMD
D PRMAIL^SCMCTSK5(1)
F SCI=0:0 S SCI=$O(^TMP("SCF",$J,SCI)) Q:'SCI D
.K XMY S XMY(SCI)="" K ^TMP("SCMC",$J),^TMP("SCMCTXT",$J)
.M ^TMP("SCMC",$J)=^TMP("SCF",$J,SCI)
.S XMSUB="Patients Scheduled for Inactivation from PC Panel"
.S XMTEXT="^TMP(""SCMCTXT"",$J,"
S DISUPNO=1
K ^TMP("SCMC",$J),^TMP("SCMCTXT")
I $G(NOINAC) K ^TMP($J,"SCMCTSK2") Q ; SD/499
S XMSUB="Patients With Extended PCMM Inactivation Dates"
S XMY("G.PCMM PATIENT/PROVIDER INACTIVE")=""
K ^TMP("SCMC",$J)
S XMTEXT="^TMP(""SCMCTXT"",$J," ;S @XMTEXT@(0)=""
S DIC="^SCPT(404.43,",BY="[SCMC EXTENDED BULLETIN]",DHIT="S CNT=$G(CNT)+1,^TMP(""SCMC"",$J,CNT,D0)=""""",CNT=0
S FR=",,,",TO=FR,FLDS="",IOP="",DHD="@@" D EN1^DIP
S ^TMP("SCMCTXT",$J,1,0)="There are "_$O(^TMP("SCMC",$J,""),-1)_" Patients Extended from inactivation"
D LINES(3)
D ^XMD
D PRMAIL^SCMCTSK5(3)
S DISUPNO=1
K ^TMP("SCMC",$J),^TMP("SCMCTXT")
S XMSUB="Patients Automated Inactivations from PC Panels"
S XMY("G.PCMM PATIENT/PROVIDER INACTIVE")=""
K ^TMP("SCMC",$J)
S XMTEXT="^TMP(""SCMCTXT"",$J," ;S @XMTEXT@(0)=""
S DIC="^SCPT(404.43,",BY="[SCMC INACTIVATED]",DHIT="S CNT=$G(CNT)+1,^TMP(""SCMC"",$J,CNT,D0)=""""",CNT=0
S FLDS="",IOP="",DHD="@@",FR=",T-30,,",TO=",,,,," D EN1^DIP
S ^TMP("SCMCTXT",$J,1,0)="There are "_$O(^TMP("SCMC",$J,""),-1)_" Patients Inactivated in last 30 days"
D LINES(2)
D ^XMD
TST ;
S DISUPNO=1
D PRMAIL^SCMCTSK5(2)
K ^TMP("SCMC",$J),^TMP("SCMCTXT")
;I $P($G(^SCTM(404.44,1,1)),U,11)="" D
S XMSUB="PC Providers Scheduled for Inactivation"
S XMY("G.PCMM PATIENT/PROVIDER INACTIVE")=""
K ^TMP("SCMC",$J)
S XMTEXT="^TMP(""SCMCTXT"",$J,"
S DIC="^SCTM(404.52,",BY="[SC PROVIDER FLAGGED BULLE]",DHIT="S CNT=$G(CNT)+1,^TMP(""SCMC"",$J,CNT,D0)=""""",CNT=0
S FLDS="",IOP="",DHD="@@",FR="",TO="" D EN1^DIP
D LINES(4)
D ^XMD
D PRMAIL^SCMCTSK5(4)
D BULL^SCMCTSK6
Q
LINES(TYPE) ;Lines of Bulletin
D LINES^SCMCTSK5(TYPE) Q
ROLE(DATA,INFO) ;SCMC ROLE
N ROLE,TP,I,SCRSLT,SCTF,SCLS,SCPOR
S (SCPOR,SCRSLT)=0
S ROLE=+$G(INFO),TP=+$P($G(INFO),U,2)
I 'ROLE Q
I 'TP Q
;get values
S DATA(0)=+$P($G(^SD(403.46,ROLE,0)),U,3)
I $$DATES^SCAPMCU1(404.53,+TP) S SCPOR=1
N PREC S PREC=0
F I=0:0 S I=$O(^SCTM(404.53,"AD",TP,I)) Q:'I D Q:PREC
.I $D(^SCTM(404.53,"AD",TP,I,1)) I '$D(^(0)) S PREC=1
I +DATA(0)'=0 D
. S SCTF=$$GETPRTP^SCAPMCU2(TP) Q:+SCTF=0
. S SCLS=$$GET^XUA4A72(+SCTF)
. I SCLS S SCRSLT=$S('$D(^SD(403.46,ROLE,2,"B",+SCLS)):1,1:0)
;end of get
;type of role^preceptor^preceptee^person class check
S DATA(0)=DATA(0)_U_SCPOR_U_PREC_U_SCRSLT
Q
INRPT ; REPORT
N DIOEND,SCDHD
D PROMPT^SCMCTSK3("** Date Range Selection **","DATE PATIENTS INACTIVATED FROM PC PANELS")
Q:'$D(^TMP("SC",$J,"XR"))
D UNASSIGN^SCMCTSK3
S Q=""""
S DIC="^SCPT(404.43," ;=0,BY="[SCMC INACTIVATION SORT]"
D BY
S (SCDHD,DHD)="AUTOMATED PATIENT INACTIVATION FROM PRIMARY CARE PANELS REPORT"
S DIOBEG="D DIOBEG^SCMCTSK4"
S DIOEND="D DIOEND1^SCMCTSK4"
S FLDS="[SCMC INACTIVATED]" ;,FR="?,,"_$TR(DIPA("SI"),","," "),TO="T,,"_$TR(DIPA("EI")_"z",","," ")
D EN1^DIP
Q
IN30 ;inact. last month
N DIPA,SDD D SORT^SCMCTSK1(.DIPA,.SDD) Q:'SDD ;SD/499
S Q=""""
S DIC="^SCPT(404.43,",L=0,BY="[SCMC INACTIVATION SORT]"
S DHD="Patients Inactivated from Primary Care Panels in the Past Month"
S FLDS="[SCMC INACTIVATED]",FR="T-31,,"_$TR(DIPA("SI"),","," "),TO="T,,"_$TR(DIPA("EI")_"z",","," ")
D EN1^DIP
Q
EXRPT ;EXTEND REPORT
K CLIN,TEAM,INST
D PROMPT^SCMCTSK3("PCMM Patients with Extended Inactivations","Scheduled Inactivation Date")
Q:'$D(^TMP("SC",$J,"XR"))
S Q="""",SORT=1
D EXTEND^SCMCTSK3
S DIC="^SCPT(404.43," ;,L=0,BY="[SCMC EXTENDED]"
S (SCDHD,DHD)="PCMM Patients with extended Inactivations"
S DIOBEG="D DIOBEG^SCMCTSK4",DIOEND="D EXTKEY^SCMCTSK9"
D BY
S FLDS="[SCMC EXTENDED]"
D EN1^DIP
Q
BY N DISPAR
S BY(0)="^TMP(""SCSORT"",$J)",L(0)=$O(^TMP("SC",$J,"SORT",99),-1)+1,DISPAR(0,1)="+",L=0 I $G(SCDHD)["FTEE" S DISPAR(0,1)="+#" ;BY="@'.01"
F I=1:1:$L(SORTN,U) S A=$P(SORTN,U,I) Q:'$L(A) S $P(DISPAR(0,I),U,2)=";"_Q_A_": "_Q D
.I A["PATIENT" I (I>1)!($G(SCDHD)["Patients Scheduled for Inactivation from PC Panel") S $P(DISPAR(0,I),U)="@"
.I $G(SCDHD)["FTEE" D
..I A["PROV" S $P(DISPAR(0,I),U)="@"
..I I>1 I (A["CLI")!(A["POS") S $P(DISPAR(0,I),U)="@"_$P($G(DISPAR(0,I)),U)
S ZTSAVE("^TMP(""SC"",$J,")="",ZTSAVE("^TMP(""SCSORT"",$J,")=""
Q
FLRPT ;FLAGGED REPORT
D PROMPT^SCMCTSK3("Patients Scheduled for Inactivation from PC Panels","Date Scheduled for Inactivation")
Q:'$D(^TMP("SC",$J,"XR"))
D FLAGG^SCMCTSK3
S Q=""""
S DIC="^SCPT(404.43,",L=0
S (SCDHD,DHD)="Patients Scheduled for Inactivation from PC Panels"
D BY
S DIOBEG="D DIOBEG^SCMCTSK4"
S FLDS="[SCMC PENDING UNASSIGN]"
I $G(DISPAR(0,1))["PATIENT" S FLDS="[SCMC PENDING UNASSIGN PAT]"
S DIOEND="D DIOEND^SCMCTSK4"
D EN1^DIP
SCMCTSK2 ;ALB/JDS - PCMM Inactivation Nightly Job; 18 Apr 2003 9:36 AM ; 10/24/07 12:23pm ; Compiled November 21, 2007 13:32:47 ; 9/22/09 8:43am
+1 ;;5.3;PIMS;**297,498,527,499,532,1015,1016**;JUN 30, 2012;Build 20
+2 QUIT
NIGHT ;
+1 NEW ENDDT,NOINAC,SIXM,FLGDT,L,PATDT,SEEN,SDDT,LDOM
+2 DO DT^DICRW
SET SDDT=$PIECE($GET(^XTMP("SCMCTSK2-"_DT,0)),U,2)
+3 IF SDDT=""
SET SDDT=DT
+4 SET ALPHA=$GET(^SCTM(404.44,1,1))
SET ALPHA=$PIECE(ALPHA,U,8)
IF ALPHA<SDDT
SET ALPHA=0
+5 ;if 'ALPHA NOINAC=1 except 15th and the Last Day of a Month (LDoM)
+6 ;inact only on 15th and on LDoM
+7 SET (NOINAC,LDOM)=0
+8 SET X1=SDDT
SET X2=1
DO C^%DTC
+9 IF ($EXTRACT(SDDT,1,5)'=$EXTRACT(X,1,5))
SET LDOM=1
+10 IF 'ALPHA
Begin DoDot:1
+11 IF ($EXTRACT(SDDT,6,7)'=15)&('LDOM)
SET NOINAC=1
+12 DO INACTIVE^SCMCTSK1
End DoDot:1
+13 SET SIXM=$PIECE($GET(^SCTM(404.44,1,1)),U,9)
+14 IF SIXM!(LDOM)
DO PRFLAG
+15 IF ALPHA
DO INACTIVE^SCMCTSK1
+16 ;determine ENDDT-Inactn Date-30 days if flagged today
+17 FOR DATE=0:0
SET DATE=$ORDER(^SCPT(404.43,"AFLG",DATE))
IF 'DATE
QUIT
Begin DoDot:1
+18 FOR ENTRY=0:0
SET ENTRY=$ORDER(^SCPT(404.43,"AFLG",DATE,ENTRY))
IF 'ENTRY
QUIT
Begin DoDot:2
+19 SET ZERO=$GET(^SCPT(404.43,ENTRY,0))
IF 'ZERO
QUIT
+20 SET DFN=+$GET(^SCPT(404.42,+ZERO,0))
IF 'DFN
QUIT
+21 SET POS=$PIECE(ZERO,U,2)
+22 ;unass.
IF $PIECE(ZERO,U,4)
DO UNFLG
QUIT
+23 SET X1=DATE
SET X2=$SELECT(ALPHA:+2,1:+30)
DO C^%DTC
SET ENDDT=X
+24 NEW SDASS
SET SDASS=$PIECE(ZERO,U,3)
+25 ;N-new or E-stbl.
+26 ;assig >12 months since flagging, not NEW, E-stbl)
+27 NEW NEW
+28 SET NEW=0
SET X1=DATE
SET X2=SDASS
DO ^%DTC
IF X<365
SET NEW=1
+29 IF NEW
SET %DT=""
SET X="T-12M"
DO ^%DT
SET STDT=+Y
Begin DoDot:3
+30 SET X1=STDT
SET X2=-7
DO C^%DTC
SET TYDT=X
End DoDot:3
+31 IF 'NEW
SET %DT=""
SET X="T-24M"
DO ^%DT
SET STDT=+Y
Begin DoDot:3
+32 SET X1=STDT
SET X2=-7
DO C^%DTC
SET TYDT=X
End DoDot:3
+33 ;
+34 ;I $P(ZERO,U,17) D UNFLG Q ;react.
+35 ;get prec
+36 ;S %DT="",X="T-12M" D ^%DT S STDT=+Y
+37 ;S PREC=$$DATES^SCAPMCU1(404.53,+POS),PREC=$S(PREC:$P($G(^SCTM(404.53,+$P(PREC,U,4),0)),U,6),1:+POS)
+38 ;Not PC
IF '$PIECE(ZERO,U,5)
DO UNFLG
QUIT
+39 DO SEEN^SCMCTSK1(DFN,POS,TYDT,SDDT,.PROV,.PRECP,.SEEN)
+40 ;S PC=$$GET^XUA4A72(+PROV)
+41 IF SEEN
DO UNFLG
QUIT
+42 ;do not inactivate yet; extended
IF $PIECE(ZERO,U,13)
SET X1=DATE
SET X2=$SELECT(ALPHA:4,1:90)
DO C^%DTC
SET FLGDT=X
IF FLGDT>SDDT
QUIT
+43 IF ('NOINAC)&(SDDT'<ENDDT)
DO DIS^SCMCTSK1
End DoDot:2
End DoDot:1
+44 ;flag prov 6m after install sd/297
+45 IF NOINAC
IF ALPHA
DO BULL
IF '$DATA(^SCPT(404.43,"AFLG",SDDT))
KILL ^TMP($JOB,"SCMCTSK2")
QUIT
+46 ;flag prov 6m after install sd/297
+47 ;I SIXM&(SIXM'>SDDT)!LDOM D
+48 IF LDOM!ALPHA
Begin DoDot:1
+49 DO PRINAC
+50 ;N FLDA
+51 ;S FLDA(404.44,"1,",19)=""
+52 ;D FILE^DIE("I","FLDA","ERR")
End DoDot:1
+53 DO BULL
KILL ^TMP($JOB,"SCMCTSK2")
+54 QUIT
UNFLG ;Unflagging
+1 NEW DR,DIE,DA
+2 SET DR=".15///@;.13///@;.12///@"
SET DIE="^SCPT(404.43,"
SET DA=ENTRY
DO ^DIE
+3 QUIT
PRFLAG ;flag incorrect provider pos
+1 NEW POS
+2 ;prov inact. has run once
+3 ;I $P($G(^SCTM(404.44,1,1)),U,11)'="" Q
+4 DO PRFLAG^SCMCTSK3
+5 QUIT
PRINAC ;inact. flagged providers
+1 NEW I,II
+2 ;Prov inact. run already
+3 IF $GET(SDDT)=""
SET SDDT=DT
+4 ;S II=$P($G(^SCTM(404.44,1,1)),U,11) I II'="",II'=SDDT Q
+5 FOR I=0:0
SET I=$ORDER(^SCTM(404.52,I))
IF 'I
QUIT
SET ZERO=$GET(^(I,0))
IF $PIECE(ZERO,U,10)
Begin DoDot:1
+6 SET ZEROIEN=I
+7 ;uncomment next line for testing only bpfo/swo 11.19.2008
+8 ;S X1=$P(ZERO,U,10),X2=$S(ALPHA:2,1:30) D C^%DTC I SDDT<X Q ;not time yet
+9 ;I $P(ZERO,U,10)>$G(ENDDT) Q ;not time yet
+10 IF +$$EN^SCMCTSKI(1)<SDDT
QUIT
+11 ;inactivated
IF $ORDER(^SCTM(404.52,"AIDT",+ZERO,0,-9999999))<(-$PIECE(ZERO,U,2))
QUIT
+12 ;Check valid criteria
+13 SET POS=+ZERO
+14 SET PROV=+$$GETPRTP^SCAPMCU2(POS,SDDT)
+15 SET PC=$$GET^XUA4A72(+PROV)
+16 ;remove flag
SET DR=".091///@"
SET DIE="^SCTM(404.52,"
SET DA=ZEROIEN
DO ^DIE
+17 SET ZERO1=$GET(^SCTM(404.57,POS,0))
+18 IF '$DATA(^SD(403.46,+$PIECE(ZERO1,U,3),2,+PC))
Begin DoDot:2
+19 ;inactivation
+20 KILL DO
+21 SET DIC="^SCTM(404.52,"
SET X=+ZERO
SET DIC("DR")=".02////"_DT_";.03////"_$PIECE(ZERO,U,3)_";.04////0;.05///EMPLOYEE LEAVES POSITION;.11////1"
+22 SET DIC(0)="Z"
DO FILE^DICN
+23 ;S DIE="^SCTM(404.52,",DA=+ZERO,DR=".02////"_SDDT_";.03////"_$P(ZERO,U,3)_";.04////0;.05///EMPLOYEE LEAVES POSITION;.11////1"
+24 ;D ^DIE
End DoDot:2
End DoDot:1
+25 ;only run inact. once
+26 SET $PIECE(^SCTM(404.44,1,1),U,11)=SDDT
+27 QUIT
FUTAPP(DFN) ;print future appts
+1 NEW TAB,SCDT0,SCARRAY,SCDTMP
SET TAB=$X
+2 IF $GET(SDDT)=""
SET SDDT=DT
+3 SET SCDT=SDDT+.24
+4 ;date/time filter
SET SCARRAY(1)=SCDT
+5 ;patient filter
SET SCARRAY(4)=DFN
+6 ;sort filter
SET SCARRAY("SORT")="P"
+7 SET SCARRAY("FLDS")="1;2;3"
+8 IF ($$SDAPI^SDAMA301(.SCARRAY)>0)
Begin DoDot:1
+9 SET SCDTMP=0
FOR
SET SCDTMP=$ORDER(^TMP($JOB,"SDAMA301",DFN,SCDTMP))
IF 'SCDTMP
QUIT
Begin DoDot:2
+10 SET SCDT0=$GET(^TMP($JOB,"SDAMA301",DFN,SCDTMP))
IF ($PIECE($PIECE(SCDT0,U,3),U)="R")
QUIT
+11 SET Y=SCDTMP
XECUTE ^DD("DD")
WRITE $EXTRACT(Y_" ",1,17)_" "_$EXTRACT($PIECE($PIECE(SCDT0,U,2),";",2),1,10)
End DoDot:2
End DoDot:1
+12 QUIT
GETASC(DATA,ENTRY) ;get assoc. clinics
+1 NEW I,CNT
SET CNT=0
+2 FOR I=0:0
SET I=$ORDER(^SCTM(404.57,+$GET(ENTRY),5,I))
IF 'I
QUIT
SET CNT=CNT+1
SET DATA(CNT)=I_U_$PIECE($GET(^SC(I,0)),U)
+3 QUIT
SETASC(RESULT,DATA) ;set assoc. clinics
+1 DO SETASC^SCMCTSK7(.RESULT,DATA)
QUIT
MSG(SCTP,DFN) ;send inact. message
+1 ;given valid positions get current practitioners
+2 SET SCLIST="SCL"
+3 IF $GET(SDDT)=""
SET SDDT=DT
+4 IF "N"'[$PIECE($GET(^SCTM(404.57,SCTP,2)),U,9)
Begin DoDot:1
+5 SET SCOK=$$PRTP^SCAPMC(SCTP,"",.SCLIST,.SCERR)
+6 ;if preceptor notice turned on for message type
End DoDot:1
+7 IF +$PIECE($GET(^SCTM(404.57,SCTP,2)),U,9)
Begin DoDot:1
+8 SET SCX=+$$OKPREC2^SCMCLK(SCTP,SDDT)
+9 ;if preceptor duz returned, add to array
+10 IF SCX
SET @SCLIST@("SCPR",SCX)=""
End DoDot:1
+11 NEW XMY
FOR I=0:0
SET I=$ORDER(@SCLIST@("SCPR",I))
IF 'I
QUIT
SET XMY(I)=""
+12 SET SCTEXT(1,0)="PATIENT "_$PIECE($GET(^DPT(DFN,0)),U)_" has been inactivated from PC team position "_$PIECE($GET(^SCTM(404.57,SCTP,0)),U)
+13 SET XMSUB="Provider's Inactivated Primary Care Patients"
DO ^XMD
+14 QUIT
BULL ;EOM Bulletin
+1 NEW DISUPNO,BY,DHIT,HEAD
+2 SET DISUPNO=1
SET L=0
+3 SET XMSUB="Patients Scheduled for Inactivation from PC Panel"
+4 SET XMY("G.PCMM PATIENT/PROVIDER INACTIVE")=""
+5 KILL ^TMP("SCMC",$JOB),^TMP("SCMCTXT",$JOB),^TMP("SCML",$JOB)
+6 ;S @XMTEXT@(0)=""
SET XMTEXT="^TMP(""SCMCTXT"",$J,"
+7 SET DIC="^SCPT(404.43,"
SET BY="[SCMC FLAGGED BULLETIN]"
SET FLDS="[SC BULLETIN]"
SET CNT=0
+8 IF 0
SET FLDS=""
SET IOP=""
SET DHD="@@"
SET (FR,TO)=""
DO EN1^DIP
+9 SET ^TMP("SCMCTXT",$JOB,1,0)="There are "_$ORDER(^TMP("SCMC",$JOB,""),-1)_" Patients scheduled for inactivation in next 30 days"
+10 DO LINES(1)
+11 DO ^XMD
+12 DO PRMAIL^SCMCTSK5(1)
+13 FOR SCI=0:0
SET SCI=$ORDER(^TMP("SCF",$JOB,SCI))
IF 'SCI
QUIT
Begin DoDot:1
+14 KILL XMY
SET XMY(SCI)=""
KILL ^TMP("SCMC",$JOB),^TMP("SCMCTXT",$JOB)
+15 MERGE ^TMP("SCMC",$JOB)=^TMP("SCF",$JOB,SCI)
+16 SET XMSUB="Patients Scheduled for Inactivation from PC Panel"
+17 SET XMTEXT="^TMP(""SCMCTXT"",$J,"
End DoDot:1
+18 SET DISUPNO=1
+19 KILL ^TMP("SCMC",$JOB),^TMP("SCMCTXT")
+20 ; SD/499
IF $GET(NOINAC)
KILL ^TMP($JOB,"SCMCTSK2")
QUIT
+21 SET XMSUB="Patients With Extended PCMM Inactivation Dates"
+22 SET XMY("G.PCMM PATIENT/PROVIDER INACTIVE")=""
+23 KILL ^TMP("SCMC",$JOB)
+24 ;S @XMTEXT@(0)=""
SET XMTEXT="^TMP(""SCMCTXT"",$J,"
+25 SET DIC="^SCPT(404.43,"
SET BY="[SCMC EXTENDED BULLETIN]"
SET DHIT="S CNT=$G(CNT)+1,^TMP(""SCMC"",$J,CNT,D0)="""""
SET CNT=0
+26 SET FR=",,,"
SET TO=FR
SET FLDS=""
SET IOP=""
SET DHD="@@"
DO EN1^DIP
+27 SET ^TMP("SCMCTXT",$JOB,1,0)="There are "_$ORDER(^TMP("SCMC",$JOB,""),-1)_" Patients Extended from inactivation"
+28 DO LINES(3)
+29 DO ^XMD
+30 DO PRMAIL^SCMCTSK5(3)
+31 SET DISUPNO=1
+32 KILL ^TMP("SCMC",$JOB),^TMP("SCMCTXT")
+33 SET XMSUB="Patients Automated Inactivations from PC Panels"
+34 SET XMY("G.PCMM PATIENT/PROVIDER INACTIVE")=""
+35 KILL ^TMP("SCMC",$JOB)
+36 ;S @XMTEXT@(0)=""
SET XMTEXT="^TMP(""SCMCTXT"",$J,"
+37 SET DIC="^SCPT(404.43,"
SET BY="[SCMC INACTIVATED]"
SET DHIT="S CNT=$G(CNT)+1,^TMP(""SCMC"",$J,CNT,D0)="""""
SET CNT=0
+38 SET FLDS=""
SET IOP=""
SET DHD="@@"
SET FR=",T-30,,"
SET TO=",,,,,"
DO EN1^DIP
+39 SET ^TMP("SCMCTXT",$JOB,1,0)="There are "_$ORDER(^TMP("SCMC",$JOB,""),-1)_" Patients Inactivated in last 30 days"
+40 DO LINES(2)
+41 DO ^XMD
TST ;
+1 SET DISUPNO=1
+2 DO PRMAIL^SCMCTSK5(2)
+3 KILL ^TMP("SCMC",$JOB),^TMP("SCMCTXT")
+4 ;I $P($G(^SCTM(404.44,1,1)),U,11)="" D
+5 SET XMSUB="PC Providers Scheduled for Inactivation"
+6 SET XMY("G.PCMM PATIENT/PROVIDER INACTIVE")=""
+7 KILL ^TMP("SCMC",$JOB)
+8 SET XMTEXT="^TMP(""SCMCTXT"",$J,"
+9 SET DIC="^SCTM(404.52,"
SET BY="[SC PROVIDER FLAGGED BULLE]"
SET DHIT="S CNT=$G(CNT)+1,^TMP(""SCMC"",$J,CNT,D0)="""""
SET CNT=0
+10 SET FLDS=""
SET IOP=""
SET DHD="@@"
SET FR=""
SET TO=""
DO EN1^DIP
+11 DO LINES(4)
+12 DO ^XMD
+13 DO PRMAIL^SCMCTSK5(4)
+14 DO BULL^SCMCTSK6
+15 QUIT
LINES(TYPE) ;Lines of Bulletin
+1 DO LINES^SCMCTSK5(TYPE)
QUIT
ROLE(DATA,INFO) ;SCMC ROLE
+1 NEW ROLE,TP,I,SCRSLT,SCTF,SCLS,SCPOR
+2 SET (SCPOR,SCRSLT)=0
+3 SET ROLE=+$GET(INFO)
SET TP=+$PIECE($GET(INFO),U,2)
+4 IF 'ROLE
QUIT
+5 IF 'TP
QUIT
+6 ;get values
+7 SET DATA(0)=+$PIECE($GET(^SD(403.46,ROLE,0)),U,3)
+8 IF $$DATES^SCAPMCU1(404.53,+TP)
SET SCPOR=1
+9 NEW PREC
SET PREC=0
+10 FOR I=0:0
SET I=$ORDER(^SCTM(404.53,"AD",TP,I))
IF 'I
QUIT
Begin DoDot:1
+11 IF $DATA(^SCTM(404.53,"AD",TP,I,1))
IF '$DATA(^(0))
SET PREC=1
End DoDot:1
IF PREC
QUIT
+12 IF +DATA(0)'=0
Begin DoDot:1
+13 SET SCTF=$$GETPRTP^SCAPMCU2(TP)
IF +SCTF=0
QUIT
+14 SET SCLS=$$GET^XUA4A72(+SCTF)
+15 IF SCLS
SET SCRSLT=$SELECT('$DATA(^SD(403.46,ROLE,2,"B",+SCLS)):1,1:0)
End DoDot:1
+16 ;end of get
+17 ;type of role^preceptor^preceptee^person class check
+18 SET DATA(0)=DATA(0)_U_SCPOR_U_PREC_U_SCRSLT
+19 QUIT
INRPT ; REPORT
+1 NEW DIOEND,SCDHD
+2 DO PROMPT^SCMCTSK3("** Date Range Selection **","DATE PATIENTS INACTIVATED FROM PC PANELS")
+3 IF '$DATA(^TMP("SC",$JOB,"XR"))
QUIT
+4 DO UNASSIGN^SCMCTSK3
+5 SET Q=""""
+6 ;=0,BY="[SCMC INACTIVATION SORT]"
SET DIC="^SCPT(404.43,"
+7 DO BY
+8 SET (SCDHD,DHD)="AUTOMATED PATIENT INACTIVATION FROM PRIMARY CARE PANELS REPORT"
+9 SET DIOBEG="D DIOBEG^SCMCTSK4"
+10 SET DIOEND="D DIOEND1^SCMCTSK4"
+11 ;,FR="?,,"_$TR(DIPA("SI"),","," "),TO="T,,"_$TR(DIPA("EI")_"z",","," ")
SET FLDS="[SCMC INACTIVATED]"
+12 DO EN1^DIP
+13 QUIT
IN30 ;inact. last month
+1 ;SD/499
NEW DIPA,SDD
DO SORT^SCMCTSK1(.DIPA,.SDD)
IF 'SDD
QUIT
+2 SET Q=""""
+3 SET DIC="^SCPT(404.43,"
SET L=0
SET BY="[SCMC INACTIVATION SORT]"
+4 SET DHD="Patients Inactivated from Primary Care Panels in the Past Month"
+5 SET FLDS="[SCMC INACTIVATED]"
SET FR="T-31,,"_$TRANSLATE(DIPA("SI"),","," ")
SET TO="T,,"_$TRANSLATE(DIPA("EI")_"z",","," ")
+6 DO EN1^DIP
+7 QUIT
EXRPT ;EXTEND REPORT
+1 KILL CLIN,TEAM,INST
+2 DO PROMPT^SCMCTSK3("PCMM Patients with Extended Inactivations","Scheduled Inactivation Date")
+3 IF '$DATA(^TMP("SC",$JOB,"XR"))
QUIT
+4 SET Q=""""
SET SORT=1
+5 DO EXTEND^SCMCTSK3
+6 ;,L=0,BY="[SCMC EXTENDED]"
SET DIC="^SCPT(404.43,"
+7 SET (SCDHD,DHD)="PCMM Patients with extended Inactivations"
+8 SET DIOBEG="D DIOBEG^SCMCTSK4"
SET DIOEND="D EXTKEY^SCMCTSK9"
+9 DO BY
+10 SET FLDS="[SCMC EXTENDED]"
+11 DO EN1^DIP
+12 QUIT
BY NEW DISPAR
+1 ;BY="@'.01"
SET BY(0)="^TMP(""SCSORT"",$J)"
SET L(0)=$ORDER(^TMP("SC",$JOB,"SORT",99),-1)+1
SET DISPAR(0,1)="+"
SET L=0
IF $GET(SCDHD)["FTEE"
SET DISPAR(0,1)="+#"
+2 FOR I=1:1:$LENGTH(SORTN,U)
SET A=$PIECE(SORTN,U,I)
IF '$LENGTH(A)
QUIT
SET $PIECE(DISPAR(0,I),U,2)=";"_Q_A_": "_Q
Begin DoDot:1
+3 IF A["PATIENT"
IF (I>1)!($GET(SCDHD)["Patients Scheduled for Inactivation from PC Panel")
SET $PIECE(DISPAR(0,I),U)="@"
+4 IF $GET(SCDHD)["FTEE"
Begin DoDot:2
+5 IF A["PROV"
SET $PIECE(DISPAR(0,I),U)="@"
+6 IF I>1
IF (A["CLI")!(A["POS")
SET $PIECE(DISPAR(0,I),U)="@"_$PIECE($GET(DISPAR(0,I)),U)
End DoDot:2
End DoDot:1
+7 SET ZTSAVE("^TMP(""SC"",$J,")=""
SET ZTSAVE("^TMP(""SCSORT"",$J,")=""
+8 QUIT
FLRPT ;FLAGGED REPORT
+1 DO PROMPT^SCMCTSK3("Patients Scheduled for Inactivation from PC Panels","Date Scheduled for Inactivation")
+2 IF '$DATA(^TMP("SC",$JOB,"XR"))
QUIT
+3 DO FLAGG^SCMCTSK3
+4 SET Q=""""
+5 SET DIC="^SCPT(404.43,"
SET L=0
+6 SET (SCDHD,DHD)="Patients Scheduled for Inactivation from PC Panels"
+7 DO BY
+8 SET DIOBEG="D DIOBEG^SCMCTSK4"
+9 SET FLDS="[SCMC PENDING UNASSIGN]"
+10 IF $GET(DISPAR(0,1))["PATIENT"
SET FLDS="[SCMC PENDING UNASSIGN PAT]"
+11 SET DIOEND="D DIOEND^SCMCTSK4"
+12 DO EN1^DIP