- DGMTOFA ;ALB/CAW/AEG/PWC/DHS - Future Appointments who will require MT ; 4/21/11 10:57am
- ;;5.3;Registration;**3,50,182,326,426,568,725,830,891**;Aug 13, 1993;Build 14
- ;
- EN ;
- I '$$RANGE^DGMTUTL("F") G ENQ
- I '$$DIV^DGMTUTL G ENQ
- I '$$CLINIC^DGMTUTL G ENQ
- ;I '$$LETTER G ENQ
- W !! S %ZIS="PMQ" D ^%ZIS I POP G ENQ
- I '$D(IO("Q")) D MAIN G ENQ
- S Y=$$QUE
- ENQ ;
- D:'$D(ZTQUEUED) ^%ZISC
- K DFN,DGAPT,DGBEG,DGCLN,DGDATE,DGDFN,DGDIV,DGEND,DGFLG,DGINFO,DGLINE,DGLST,DGMT,DGMT1,DGPAGE,DGSTOP,DGTMP,DGTMP1,DGTMP2,DGMTYPT,DGYN,DIW,DIWF,DIWR,DIWT,DN,SDFORM,SDLET,VA,VAERR,VAUTC,VAUTD,^TMP("DGMTO",$J),^TMP("DGMTL",$J)
- K DGARRAY,CLNARRAY,^TMP($J,"SDAMA"),I,DGTMP,SDCNT
- Q
- ;
- QUE() ; -- que job
- ; return: did job que [ 1|yes 0|no ]
- ;
- K ZTSK,IO("Q")
- S ZTDESC="Future Appt. w/ Means Test",ZTRTN="MAIN^DGMTOFA"
- F X="DGBEG","DGEND","DGYN","DGMTYPT","SDFORM","SDLET","VAUTC","VAUTD","VAUTC(","VAUTD(" S ZTSAVE(X)=""
- D ^%ZTLOAD W:$D(ZTSK) " (Task: ",ZTSK,")"
- Q $D(ZTSK)
- ;
- MAIN ;
- K ^TMP("DGMTO",$J) S I=1
- I VAUTC=1,VAUTD=1 S DGCLN=0 F S DGCLN=$O(^SC(DGCLN)) Q:'DGCLN I $P(^(DGCLN,0),U,3)="C" D CBLD3(DGCLN)
- ;
- I VAUTC=1,VAUTD=0 S DGDIV="" F S DGDIV=$O(VAUTD(DGDIV)) Q:'DGDIV S DGCLN=0 F S DGCLN=$O(^SC(DGCLN)) Q:'DGCLN I $P(^SC(DGCLN,0),U,3)="C",$P(^SC(DGCLN,0),U,15)=DGDIV D CBLD3(DGCLN)
- I VAUTC=0 S DGCLN="" F S DGCLN=$O(VAUTC(DGCLN)) Q:'DGCLN D CBLD3(DGCLN)
- D SDAM,CLN1
- D ^DGMTOFA1
- D CLOSE^DGMTUTL
- Q
- ;
- CBLD3(DGCLN) ; Build array of specified Clinics for specified Divisions
- S CLNARRAY(I)=$G(CLNARRAY(I))_DGCLN_";"
- I $L(CLNARRAY(I))>120 S I=I+1
- Q
- ;
- SDAM ; Build TMP Global with Appointment API Data for Report
- S DGARRAY(1)=DGBEG_";"_DGEND
- S DGARRAY("FLDS")="1;3;10"
- F I=1:1 Q:'$D(CLNARRAY(I)) D
- .S DGARRAY(2)=CLNARRAY(I)
- .I $$SDAPI^SDAMA301(.DGARRAY)>0 M ^TMP($J,"SDAMA")=^TMP($J,"SDAMA301")
- .K ^TMP($J,"SDAMA301")
- Q
- ;
- CLN1 ; Loop through appointments
- ;
- N DGTMP S DGDATE=DGBEG-.1,DGLST=DGEND+.9
- S DGCLN=0 F S DGCLN=$O(^TMP($J,"SDAMA",DGCLN)) Q:'DGCLN D
- .S DGDFN=0 F S DGDFN=$O(^TMP($J,"SDAMA",DGCLN,DGDFN)) Q:'DGDFN D
- ..S DGDATE=0 F S DGDATE=$O(^TMP($J,"SDAMA",DGCLN,DGDFN,DGDATE)) Q:'DGDATE D
- ...S DGTMP=^TMP($J,"SDAMA",DGCLN,DGDFN,DGDATE)
- ...Q:$$DOM(DGDFN,DGDATE)
- ...Q:"^NS^NSR^CC^CCR^CP^CPR^"[(U_$P($P(DGTMP,U,3),";")_U)
- ...D MT
- Q
- MT ; Is patient going to need to complete a MT/Copay by appt?
- S DGMT=$$LST^DGMTU(DGDFN,$P(DGDATE,"."),DGMTYPT),DGMT1=$P($G(^DGMT(408.31,+DGMT,0)),U,3) I DGMT1,"^3^10^"'[("^"_DGMT1_"^") D
- . N MTQ,X S MTQ=0 ; only do the following for RX Co-pay tests
- .I DGMTYPT=2 D Q:MTQ=1
- .. ;Exclude from report the following:
- .. ;Existing RX Copay Test with Source of Test = IVM AND
- .. ;Primary eligibility code = NSC OR Primary eligibility code =
- .. ; SC Less than 50% and percentage is 0 and Total VA check amt = 0
- .. ; DG*5.3*830
- .. I $P($G(^DGMT(408.31,+DGMT,0)),U,23)'=2 Q ; quit if not IVM
- .. S X=$P($G(^DPT(DGDFN,.36)),"^",1)
- .. I $P($G(^DIC(8,+X,0)),"^",9)=5!($$SC(DGDFN)) S MTQ=1
- .S X1=$P(DGMT,U,2),X2=365 D C^%DTC I $P(DGDATE,".")<X,$S(DGMT1=1:0,DGMT1=9:0,1:1) Q
- .;Check to see if Cat C/Pend Adj agreed to pay with test date >10/5/99
- .I $P(DGMT,U,2)>2991005,$P($G(^DGMT(408.31,+DGMT,0)),U,11)=1,((DGMT1=6)!(DGMT1=2)) Q
- .;Check to see if Cat C, declined to provide income info but agreed to
- .;pay -- no date restrictions on these types.
- .I $G(DGMT1)=6,+$P($G(^DGMT(408.31,+DGMT,0)),U,14),+$P($G(^DGMT(408.31,+DGMT,0)),U,11) Q
- .; checking for future means test based on DT
- .;
- .; DG*5.3*891 - test whether patient is current
- .I $P(DGMT,U,2)>3120101&($P(DGMT,U,2)<3130101) Q ; test effective date range 1 or 9 value
- .I $P(DGMT,U,2)>3121231,"^4^11^16^"[("^"_DGMT1_"^") Q ; MT status = Copay exempt,GMT Copay requred,Pending Adjudication
- .I DGMT1=6!(DGMT1=3) Q ;MT Copay required and and No longer required
- .;
- .N DGNXTMT
- .S DGNXTMT=$O(^IVM(301.5,"AE",DGDFN,DT))
- .I 'DGNXTMT S DGNXTMT=""
- .S ^TMP("DGMTO",$J,$S(+$P(^SC(DGCLN,0),U,15):$P(^(0),U,15),1:$O(^DG(40.8,0))),$P(^SC(DGCLN,0),U),$P(^DPT(DGDFN,0),U),DGDATE)=DGDFN_U_$P(DGMT,U,1,4)_U_$P($P(DGTMP,U,10),";")_U_DGNXTMT,^TMP("DGMTL",$J,$P(^DPT(DGDFN,0),U),DGDFN)=""
- Q
- ;
- SC(DFN) ; Check if patient is SC 0% non-compensable
- ; Input -- DFN Patient IEN
- ; Output -- 1=Yes and 0=No
- N Y
- S Y=0
- ; Primary eligibility is SC LESS THAN 50%
- I $D(^DPT(DFN,.36)),$P($G(^DIC(8,+^(.36),0)),"^",9)=3 S Y=1
- G:'Y SCQ
- ; Service connected percentage is zero
- I $P($G(^DPT(DFN,.3)),"^",2)'=0 S Y=0 G SCQ
- ; No Total annual VA check amount
- I $P($G(^DPT(DFN,.362)),"^",20) S Y=0
- SCQ Q +$G(Y)
- ;
- LETTER() ;
- ; Input - none
- ; Output - DGYN - yes/no
- ;
- N %
- LTR W !!,"Do you want to generate letters" S %=2 D YN^DICN
- ;I %=1 D START^DGMTLTR S DGYN=$S('$D(DGFLG):1,1:0)
- I %=2 S DGYN=0
- I %=0 W !!,"Enter 'Y'es to generate letters from the listing or",!,"Enter 'N'o to produce the listing, but not the letters." G LTR
- Q $D(DGYN)
- ;
- DOM(DFN,DGT) ; Screen out dom patient
- ; Input: DFN - Patient IEN
- ; DGT - Date of visit
- ;
- N Y,DGI,DGXFR0,DGA1,DGINP
- S Y=0
- D ^DGINPW I DG1 I $P(^DG(43,1,0),U,21),$D(^DIC(42,+DG1,0)),$P(^(0),U,3)="D" S Y=1
- Q Y
- --- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HDGMTOFA 5250 printed Feb 19, 2025@00:11:05 Page 2
- DGMTOFA ;ALB/CAW/AEG/PWC/DHS - Future Appointments who will require MT ; 4/21/11 10:57am
- +1 ;;5.3;Registration;**3,50,182,326,426,568,725,830,891**;Aug 13, 1993;Build 14
- +2 ;
- EN ;
- +1 IF '$$RANGE^DGMTUTL("F")
- GOTO ENQ
- +2 IF '$$DIV^DGMTUTL
- GOTO ENQ
- +3 IF '$$CLINIC^DGMTUTL
- GOTO ENQ
- +4 ;I '$$LETTER G ENQ
- +5 WRITE !!
- SET %ZIS="PMQ"
- DO ^%ZIS
- IF POP
- GOTO ENQ
- +6 IF '$DATA(IO("Q"))
- DO MAIN
- GOTO ENQ
- +7 SET Y=$$QUE
- ENQ ;
- +1 if '$DATA(ZTQUEUED)
- DO ^%ZISC
- +2 KILL DFN,DGAPT,DGBEG,DGCLN,DGDATE,DGDFN,DGDIV,DGEND,DGFLG,DGINFO,DGLINE,DGLST,DGMT,DGMT1,DGPAGE,DGSTOP,DGTMP,DGTMP1,DGTMP2,DGMTYPT,DGYN,DIW,DIWF,DIWR,DIWT,DN,SDFORM,SDLET,VA,VAERR,VAUTC,VAUTD,^TMP("DGMTO",$JOB),^TMP("DGMTL",$JOB)
- +3 KILL DGARRAY,CLNARRAY,^TMP($JOB,"SDAMA"),I,DGTMP,SDCNT
- +4 QUIT
- +5 ;
- QUE() ; -- que job
- +1 ; return: did job que [ 1|yes 0|no ]
- +2 ;
- +3 KILL ZTSK,IO("Q")
- +4 SET ZTDESC="Future Appt. w/ Means Test"
- SET ZTRTN="MAIN^DGMTOFA"
- +5 FOR X="DGBEG","DGEND","DGYN","DGMTYPT","SDFORM","SDLET","VAUTC","VAUTD","VAUTC(","VAUTD("
- SET ZTSAVE(X)=""
- +6 DO ^%ZTLOAD
- if $DATA(ZTSK)
- WRITE " (Task: ",ZTSK,")"
- +7 QUIT $DATA(ZTSK)
- +8 ;
- MAIN ;
- +1 KILL ^TMP("DGMTO",$JOB)
- SET I=1
- +2 IF VAUTC=1
- IF VAUTD=1
- SET DGCLN=0
- FOR
- SET DGCLN=$ORDER(^SC(DGCLN))
- if 'DGCLN
- QUIT
- IF $PIECE(^(DGCLN,0),U,3)="C"
- DO CBLD3(DGCLN)
- +3 ;
- +4 IF VAUTC=1
- IF VAUTD=0
- SET DGDIV=""
- FOR
- SET DGDIV=$ORDER(VAUTD(DGDIV))
- if 'DGDIV
- QUIT
- SET DGCLN=0
- FOR
- SET DGCLN=$ORDER(^SC(DGCLN))
- if 'DGCLN
- QUIT
- IF $PIECE(^SC(DGCLN,0),U,3)="C"
- IF $PIECE(^SC(DGCLN,0),U,15)=DGDIV
- DO CBLD3(DGCLN)
- +5 IF VAUTC=0
- SET DGCLN=""
- FOR
- SET DGCLN=$ORDER(VAUTC(DGCLN))
- if 'DGCLN
- QUIT
- DO CBLD3(DGCLN)
- +6 DO SDAM
- DO CLN1
- +7 DO ^DGMTOFA1
- +8 DO CLOSE^DGMTUTL
- +9 QUIT
- +10 ;
- CBLD3(DGCLN) ; Build array of specified Clinics for specified Divisions
- +1 SET CLNARRAY(I)=$GET(CLNARRAY(I))_DGCLN_";"
- +2 IF $LENGTH(CLNARRAY(I))>120
- SET I=I+1
- +3 QUIT
- +4 ;
- SDAM ; Build TMP Global with Appointment API Data for Report
- +1 SET DGARRAY(1)=DGBEG_";"_DGEND
- +2 SET DGARRAY("FLDS")="1;3;10"
- +3 FOR I=1:1
- if '$DATA(CLNARRAY(I))
- QUIT
- Begin DoDot:1
- +4 SET DGARRAY(2)=CLNARRAY(I)
- +5 IF $$SDAPI^SDAMA301(.DGARRAY)>0
- MERGE ^TMP($JOB,"SDAMA")=^TMP($JOB,"SDAMA301")
- +6 KILL ^TMP($JOB,"SDAMA301")
- End DoDot:1
- +7 QUIT
- +8 ;
- CLN1 ; Loop through appointments
- +1 ;
- +2 NEW DGTMP
- SET DGDATE=DGBEG-.1
- SET DGLST=DGEND+.9
- +3 SET DGCLN=0
- FOR
- SET DGCLN=$ORDER(^TMP($JOB,"SDAMA",DGCLN))
- if 'DGCLN
- QUIT
- Begin DoDot:1
- +4 SET DGDFN=0
- FOR
- SET DGDFN=$ORDER(^TMP($JOB,"SDAMA",DGCLN,DGDFN))
- if 'DGDFN
- QUIT
- Begin DoDot:2
- +5 SET DGDATE=0
- FOR
- SET DGDATE=$ORDER(^TMP($JOB,"SDAMA",DGCLN,DGDFN,DGDATE))
- if 'DGDATE
- QUIT
- Begin DoDot:3
- +6 SET DGTMP=^TMP($JOB,"SDAMA",DGCLN,DGDFN,DGDATE)
- +7 if $$DOM(DGDFN,DGDATE)
- QUIT
- +8 if "^NS^NSR^CC^CCR^CP^CPR^"[(U_$PIECE($PIECE(DGTMP,U,3),";")_U)
- QUIT
- +9 DO MT
- End DoDot:3
- End DoDot:2
- End DoDot:1
- +10 QUIT
- MT ; Is patient going to need to complete a MT/Copay by appt?
- +1 SET DGMT=$$LST^DGMTU(DGDFN,$PIECE(DGDATE,"."),DGMTYPT)
- SET DGMT1=$PIECE($GET(^DGMT(408.31,+DGMT,0)),U,3)
- IF DGMT1
- IF "^3^10^"'[("^"_DGMT1_"^")
- Begin DoDot:1
- +2 ; only do the following for RX Co-pay tests
- NEW MTQ,X
- SET MTQ=0
- +3 IF DGMTYPT=2
- Begin DoDot:2
- +4 ;Exclude from report the following:
- +5 ;Existing RX Copay Test with Source of Test = IVM AND
- +6 ;Primary eligibility code = NSC OR Primary eligibility code =
- +7 ; SC Less than 50% and percentage is 0 and Total VA check amt = 0
- +8 ; DG*5.3*830
- +9 ; quit if not IVM
- IF $PIECE($GET(^DGMT(408.31,+DGMT,0)),U,23)'=2
- QUIT
- +10 SET X=$PIECE($GET(^DPT(DGDFN,.36)),"^",1)
- +11 IF $PIECE($GET(^DIC(8,+X,0)),"^",9)=5!($$SC(DGDFN))
- SET MTQ=1
- End DoDot:2
- if MTQ=1
- QUIT
- +12 SET X1=$PIECE(DGMT,U,2)
- SET X2=365
- DO C^%DTC
- IF $PIECE(DGDATE,".")<X
- IF $SELECT(DGMT1=1:0,DGMT1=9:0,1:1)
- QUIT
- +13 ;Check to see if Cat C/Pend Adj agreed to pay with test date >10/5/99
- +14 IF $PIECE(DGMT,U,2)>2991005
- IF $PIECE($GET(^DGMT(408.31,+DGMT,0)),U,11)=1
- IF ((DGMT1=6)!(DGMT1=2))
- QUIT
- +15 ;Check to see if Cat C, declined to provide income info but agreed to
- +16 ;pay -- no date restrictions on these types.
- +17 IF $GET(DGMT1)=6
- IF +$PIECE($GET(^DGMT(408.31,+DGMT,0)),U,14)
- IF +$PIECE($GET(^DGMT(408.31,+DGMT,0)),U,11)
- QUIT
- +18 ; checking for future means test based on DT
- +19 ;
- +20 ; DG*5.3*891 - test whether patient is current
- +21 ; test effective date range 1 or 9 value
- IF $PIECE(DGMT,U,2)>3120101&($PIECE(DGMT,U,2)<3130101)
- QUIT
- +22 ; MT status = Copay exempt,GMT Copay requred,Pending Adjudication
- IF $PIECE(DGMT,U,2)>3121231
- IF "^4^11^16^"[("^"_DGMT1_"^")
- QUIT
- +23 ;MT Copay required and and No longer required
- IF DGMT1=6!(DGMT1=3)
- QUIT
- +24 ;
- +25 NEW DGNXTMT
- +26 SET DGNXTMT=$ORDER(^IVM(301.5,"AE",DGDFN,DT))
- +27 IF 'DGNXTMT
- SET DGNXTMT=""
- +28 SET ^TMP("DGMTO",$JOB,$SELECT(+$PIECE(^SC(DGCLN,0),U,15):$PIECE(^(0),U,15),1:$ORDER(^DG(40.8,0))),$PIECE(^SC(DGCLN,0),U),$PIECE(^DPT(DGDFN,0),U),DGDATE)=DGDFN_U_$PIECE(DGMT,U,1,4)_U_$PIECE($PIECE(DGTMP,U,10),";")_U_DGNXTMT
- SET ^TMP("DGMTL",$JOB,$PIECE(^DPT(DGDFN,0),U),DGDFN)=""
- End DoDot:1
- +29 QUIT
- +30 ;
- SC(DFN) ; Check if patient is SC 0% non-compensable
- +1 ; Input -- DFN Patient IEN
- +2 ; Output -- 1=Yes and 0=No
- +3 NEW Y
- +4 SET Y=0
- +5 ; Primary eligibility is SC LESS THAN 50%
- +6 IF $DATA(^DPT(DFN,.36))
- IF $PIECE($GET(^DIC(8,+^(.36),0)),"^",9)=3
- SET Y=1
- +7 if 'Y
- GOTO SCQ
- +8 ; Service connected percentage is zero
- +9 IF $PIECE($GET(^DPT(DFN,.3)),"^",2)'=0
- SET Y=0
- GOTO SCQ
- +10 ; No Total annual VA check amount
- +11 IF $PIECE($GET(^DPT(DFN,.362)),"^",20)
- SET Y=0
- SCQ QUIT +$GET(Y)
- +1 ;
- LETTER() ;
- +1 ; Input - none
- +2 ; Output - DGYN - yes/no
- +3 ;
- +4 NEW %
- LTR WRITE !!,"Do you want to generate letters"
- SET %=2
- DO YN^DICN
- +1 ;I %=1 D START^DGMTLTR S DGYN=$S('$D(DGFLG):1,1:0)
- +2 IF %=2
- SET DGYN=0
- +3 IF %=0
- WRITE !!,"Enter 'Y'es to generate letters from the listing or",!,"Enter 'N'o to produce the listing, but not the letters."
- GOTO LTR
- +4 QUIT $DATA(DGYN)
- +5 ;
- DOM(DFN,DGT) ; Screen out dom patient
- +1 ; Input: DFN - Patient IEN
- +2 ; DGT - Date of visit
- +3 ;
- +4 NEW Y,DGI,DGXFR0,DGA1,DGINP
- +5 SET Y=0
- +6 DO ^DGINPW
- IF DG1
- IF $PIECE(^DG(43,1,0),U,21)
- IF $DATA(^DIC(42,+DG1,0))
- IF $PIECE(^(0),U,3)="D"
- SET Y=1
- +7 QUIT Y