- DGPTSCAN ;ALB/MTC,WOIFO/PMK - SPECIAL ACTION SCAN PROCESS ;03/26/2015 3:27 PM
- ;;5.3;Registration;**29,64,114,189,729,850,884**;Aug 13, 1993;Build 31
- ;;MAS 5.1
- CHK501 ;--
- D INIT G ENQ:DGOUT
- ; G ENQ:'$D(^DGPT(DGPTF,"M",+DGMOV,0)) S DGREC=^(0)
- ; F DGI=5:1:9 I $P(DGREC,U,DGI) S DGPTIT($P(DGREC,U,DGI)_";ICD9(")=""
- N DGD D PTFICD^DGPTFUT(501,DGPTF,+DGMOV,.DGD) G ENQ:$D(DGD)'=11
- S DGI="" F S DGI=$O(DGD(DGI)) Q:DGI="" S DGPTIT($P(DGD(DGI),U)_";ICD9(")=""
- S DGHOLD=$S($D(^DGPT(DGPTF,"M",+DGMOV,300)):^(300),1:"")
- D SCAN
- I '$D(DGBPC),DGHOLD']"" G CHK5Q
- S DIE="^DGPT(",DA=DGPTF,DR="[DGPT 501 CLEANUP]"
- D ^DIE
- ;;
- ;;ADDED FOR GAF ENHANCEMENT 6/2/98
- ;;Gathers GAF Score, GAF Date, GAF Provider and sends to
- ;;Mental Health package
- N DGGAFSC,DGGAFDT,DGGAFPR,DGDFN
- S DGGAFSC=$P(DGHOLD,"^",6),DGDFN=$P(^DGPT(DGPTF,0),"^")
- S DGGAFDT=$P(^DGPT(DGPTF,0),"^",2)\1
- S DGGAFPR=$P($G(^DGPT(DGPTF,"M",+DGMOV,"P")),"^",5) ;Provider
- D UPD^YSGAF(DGDFN,DGGAFSC,DGGAFDT,DGGAFPR,"I")
- ;;END GAF ENHANCEMENTS
- ;;
- CHK5Q K DA,DR,DGHOLD,DGBPC,DGPTIT,DIE,DGREC,DGI,DGSCDT,DGSTART,DGTREC,DGOUT
- Q
- ;
- CHK601 ;--
- D INIT G ENQ:DGOUT
- G ENQ:'$D(^DGPT(DGPTF,"P",+P(DGZP,1),0)) S DGREC=^(0)
- ; F DGI=5:1:9 I $P(DGREC,U,DGI) S DGPTIT($P(DGREC,U,DGI)_";ICD0(")=""
- N DGD D PTFICD^DGPTFUT(601,DGPTF,+P(DGZP,1),.DGD) G ENQ:$D(DGD)'=11
- S DGI="" F S DGI=$O(DGD(DGI)) Q:DGI="" S DGPTIT($P(DGD(DGI),U)_";ICD0(")=""
- S DGHOLD=DGREC
- D SCAN
- I '$D(DGBPC(8)),$P(DGHOLD,U,4)']"" G CHK6Q
- S DIE="^DGPT(",DA=DGPTF,DR="[DGPT 601 CLEANUP]"
- D ^DIE
- CHK6Q K DA,DR,DGHOLD,DGBPC,DGPTIT,DIE,DGREC,DGI,DGOUT
- Q
- CHK401 ;--
- D INIT G ENQ:DGOUT
- ; G ENQ:'$D(^DGPT(DGPTF,"S",+DGSUR,0)) S DGREC=^(0)
- ; F DGI=8:1:12 I $P(DGREC,U,DGI) S DGPTIT($P(DGREC,U,DGI)_";ICD0(")=""
- N DGD D PTFICD^DGPTFUT(401,DGPTF,+DGSUR,.DGD) G ENQ:$D(DGD)'=11
- S DGI="" F S DGI=$O(DGD(DGI)) Q:DGI="" S DGPTIT($P(DGD(DGI),U)_";ICD0(")=""
- S DGHOLD=$S($D(^DGPT(DGPTF,"S",+DGSUR,300)):^(300),1:"")
- D SCAN
- I '$D(DGBPC),DGHOLD']"" G CHK4Q
- S DIE="^DGPT(",DA=DGPTF,DR="[DGPT 401 CLEANUP]"
- D ^DIE
- CHK4Q K DA,DR,DGHOLD,DGBPC,DGPTIT,DIE,DGREC,DGI,DGSCDT,DGSTART,DGTREC,DGOUT
- Q
- ;
- CHK701 ;-- will get data from flagchk then stuff into 701 (300 node)
- ; G CHK7Q:'$D(^DGPT(DGPTF,70)) S DGREC=^(70)
- ; F DGI=10,16:1:24 I $P(DGREC,U,DGI) S DGPTIT($P(DGREC,U,DGI)_";ICD9(")=""
- N DGD D PTFICD^DGPTFUT(701,DGPTF,,.DGD) G ENQ:$D(DGD)'=11
- S DGI="" F S DGI=$O(DGD(DGI)) Q:DGI="" S DGPTIT($P(DGD(DGI),U)_";ICD9(")=""
- D DC,SCAN,ANYPSY,FLAGCHK
- S DGREC=$S($D(^DGPT(DGPTF,300)):^(300),1:""),DR="",DA=DGPTF,DIE="^DGPT("
- D GETNUM
- F DGII=2:1:DGFNUM S DR=DR_$S($P(DG701,U,DGII)]""&($P(DG701,U,DGII)'=$P(DGREC,U,DGII)):"300.0"_DGII_"////"_$P(DG701,U,DGII)_";",'$D(DGBPC(DGII))&($P(DGREC,U,DGII)]"")&($P(DG701,U,DGII)']""):"300.0"_DGII_"////@;",1:"")
- CHK7J I DR]"" D ^DIE
- CHK7Q ;
- K DGII,DA,DR,DIE,DG701,DGI,DGT,DGREC,DGFNUM,DGSCDT,DGSTART,DGTREC,DGOUT
- Q
- FLAGCHK ;-- build 701 from 501 responses, kill flags if necessary
- S DG701="",DGOUT=0
- F DGI=0:0 S DGI=$O(^DGPT(DGPTF,"M","AM",DGI)) Q:DGI'>0 F DGJ=0:0 S DGJ=$O(^DGPT(DGPTF,"M","AM",DGI,DGJ)) Q:DGJ'>0 I $D(^DGPT(DGPTF,"M",DGJ,300)) S DGHOLD=^(300) D FL1
- S DGNDIS=$S('$D(^DGPT(DGPTF,70)):0,1:+^(70))
- I DGNDIS'>0,$D(^DGPT(DGPTF,"M",1,300)) S DGHOLD=^(300) D FL1
- FLAGQ K DGI,DGNDIS
- Q
- FL1 ;
- D GETNUM
- F DGII=2:1:DGFNUM I $P(DGHOLD,U,DGII)]"",$P(DG701,U,DGII)']"" S $P(DG701,U,DGII)=$P(DGHOLD,U,DGII) K DGBPC(DGII)
- FL1Q K DGII,DGHOLD,DGK,DGFNUM
- Q
- ;
- SCAN ;-- process DGPTIT array
- K DGBPC
- D ISPSY
- G:'$D(DGPTIT) SCANQ
- D DC ;return discharge date or current date in DGSCDT
- S DGI="" F DGJ=0:0 S DGI=$O(DGPTIT(DGI)) Q:DGI="" F DGK=0:0 S DGK=$O(^DIC(45.89,"ASPL",DGI,DGK)) Q:'DGK D S1
- SCANQ ;
- K DGSPEC,DGI,DGJ,DGK
- Q
- ;
- S1 ;-- check inactive dates, set flag array
- G S1Q:'$D(^DIC(45.89,DGK,0)) S X=^(0)
- I $P(X,U,3)]"",$D(DGSCDT) G S1Q:DGSCDT>$P(X,U,3)
- S Y=+X
- G S1Q:'$D(^DIC(45.88,Y,0)) S X=^(0)
- I $P(X,U,3)]"",$D(DGSCDT) G S1Q:DGSCDT>$P(X,U,3)
- I $P(X,U,2)]"" S X=$P(X,U,2) F DGII=1:1 S Y=$P(X,",",DGII) Q:'Y D FLGFIL
- S1Q ;
- K X,Y,DGII
- Q
- ;
- DC ;-- find discharge date
- S DGSCDT=$S('$D(^DGPT(PTF,70)):DT,^(70):+^(70),1:DT)
- Q
- ;
- ENQ ;
- K DG701,DGSTART,DGI,DGOUT,DGREC,DGBPC,DGPTIT,DGTREC,DGSCDT
- Q
- ;
- GETNUM ;-- returns the number of additional questions/flags
- S DGFNUM=7
- Q
- ;
- INIT ;-- init routine
- S DGOUT=0,(DGTREC,DGHOLD)=""
- ;-- DGSTART should be set to 2910930 for national release
- S DGSTART=2910930
- D DC
- D LO^DGUTL,HOME^%ZIS
- K DGPTIT
- INITQ ;
- Q
- ;
- ANYPSY ;-- will go through all movements check for PSYCH specialty
- N DGMOV
- K DGPSY
- I '$D(^DGPT(DGPTF,"M")) G ANYQ
- F DGMOV=0:0 S DGMOV=$O(^DGPT(DGPTF,"M",DGMOV)) Q:'DGMOV D ISPSY I $D(DGSPEC) S DGPSY=""
- I '$D(DGPSY) K DGBPC(5),DGBPC(6),DGBPC(7)
- ANYQ ;
- K DGSPEC
- Q
- ISPSY ;-- check if losing specialty is in psych range set flag.
- ;-- if psych then $D(DGSPEC)
- K DGSPEC
- I '$D(DGMOV) S DGSPEC="" G ISPSYQ
- ; -- 850 Fix (BELOW), problem in fee basis when DGMOV is defined but no global ref.
- I $D(DGMOV) D
- . S DGSPEC=$P($G(^DGPT(DGPTF,"M",+$G(DGMOV),0)),U,2)
- . I '$P($G(^DIC(42.4,+$G(DGSPEC),0)),U,4) K DGSPEC
- ISPSYQ Q
- ;
- FLGFIL ;-- fill DGBPC with correct flag.
- I '$D(DGSPEC),Y>4,Y<8 G FLGFILQ
- S DGBPC(Y)=""
- FLGFILQ ;
- Q
- ;
- ANYSC(PTF) ;-- will go through all movements check for sc treatment
- ; INPUT - ptf record ien to check
- ; OUTPUT- 1 sc treatment, 0 no sc treatment
- N DGMOV,RESULT
- S RESULT=0
- I '$D(^DGPT(PTF,"M")) G ANYSCQ
- S DGMOV=0 F S DGMOV=$O(^DGPT(PTF,"M",DGMOV)) Q:'DGMOV I $P(^(DGMOV,0),U,18)=1 S RESULT=1 Q
- ANYSCQ ;
- Q RESULT
- ;
- --- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HDGPTSCAN 5663 printed Feb 19, 2025@00:19:38 Page 2
- DGPTSCAN ;ALB/MTC,WOIFO/PMK - SPECIAL ACTION SCAN PROCESS ;03/26/2015 3:27 PM
- +1 ;;5.3;Registration;**29,64,114,189,729,850,884**;Aug 13, 1993;Build 31
- +2 ;;MAS 5.1
- CHK501 ;--
- +1 DO INIT
- if DGOUT
- GOTO ENQ
- +2 ; G ENQ:'$D(^DGPT(DGPTF,"M",+DGMOV,0)) S DGREC=^(0)
- +3 ; F DGI=5:1:9 I $P(DGREC,U,DGI) S DGPTIT($P(DGREC,U,DGI)_";ICD9(")=""
- +4 NEW DGD
- DO PTFICD^DGPTFUT(501,DGPTF,+DGMOV,.DGD)
- if $DATA(DGD)'=11
- GOTO ENQ
- +5 SET DGI=""
- FOR
- SET DGI=$ORDER(DGD(DGI))
- if DGI=""
- QUIT
- SET DGPTIT($PIECE(DGD(DGI),U)_";ICD9(")=""
- +6 SET DGHOLD=$SELECT($DATA(^DGPT(DGPTF,"M",+DGMOV,300)):^(300),1:"")
- +7 DO SCAN
- +8 IF '$DATA(DGBPC)
- IF DGHOLD']""
- GOTO CHK5Q
- +9 SET DIE="^DGPT("
- SET DA=DGPTF
- SET DR="[DGPT 501 CLEANUP]"
- +10 DO ^DIE
- +11 ;;
- +12 ;;ADDED FOR GAF ENHANCEMENT 6/2/98
- +13 ;;Gathers GAF Score, GAF Date, GAF Provider and sends to
- +14 ;;Mental Health package
- +15 NEW DGGAFSC,DGGAFDT,DGGAFPR,DGDFN
- +16 SET DGGAFSC=$PIECE(DGHOLD,"^",6)
- SET DGDFN=$PIECE(^DGPT(DGPTF,0),"^")
- +17 SET DGGAFDT=$PIECE(^DGPT(DGPTF,0),"^",2)\1
- +18 ;Provider
- SET DGGAFPR=$PIECE($GET(^DGPT(DGPTF,"M",+DGMOV,"P")),"^",5)
- +19 DO UPD^YSGAF(DGDFN,DGGAFSC,DGGAFDT,DGGAFPR,"I")
- +20 ;;END GAF ENHANCEMENTS
- +21 ;;
- CHK5Q KILL DA,DR,DGHOLD,DGBPC,DGPTIT,DIE,DGREC,DGI,DGSCDT,DGSTART,DGTREC,DGOUT
- +1 QUIT
- +2 ;
- CHK601 ;--
- +1 DO INIT
- if DGOUT
- GOTO ENQ
- +2 if '$DATA(^DGPT(DGPTF,"P",+P(DGZP,1),0))
- GOTO ENQ
- SET DGREC=^(0)
- +3 ; F DGI=5:1:9 I $P(DGREC,U,DGI) S DGPTIT($P(DGREC,U,DGI)_";ICD0(")=""
- +4 NEW DGD
- DO PTFICD^DGPTFUT(601,DGPTF,+P(DGZP,1),.DGD)
- if $DATA(DGD)'=11
- GOTO ENQ
- +5 SET DGI=""
- FOR
- SET DGI=$ORDER(DGD(DGI))
- if DGI=""
- QUIT
- SET DGPTIT($PIECE(DGD(DGI),U)_";ICD0(")=""
- +6 SET DGHOLD=DGREC
- +7 DO SCAN
- +8 IF '$DATA(DGBPC(8))
- IF $PIECE(DGHOLD,U,4)']""
- GOTO CHK6Q
- +9 SET DIE="^DGPT("
- SET DA=DGPTF
- SET DR="[DGPT 601 CLEANUP]"
- +10 DO ^DIE
- CHK6Q KILL DA,DR,DGHOLD,DGBPC,DGPTIT,DIE,DGREC,DGI,DGOUT
- +1 QUIT
- CHK401 ;--
- +1 DO INIT
- if DGOUT
- GOTO ENQ
- +2 ; G ENQ:'$D(^DGPT(DGPTF,"S",+DGSUR,0)) S DGREC=^(0)
- +3 ; F DGI=8:1:12 I $P(DGREC,U,DGI) S DGPTIT($P(DGREC,U,DGI)_";ICD0(")=""
- +4 NEW DGD
- DO PTFICD^DGPTFUT(401,DGPTF,+DGSUR,.DGD)
- if $DATA(DGD)'=11
- GOTO ENQ
- +5 SET DGI=""
- FOR
- SET DGI=$ORDER(DGD(DGI))
- if DGI=""
- QUIT
- SET DGPTIT($PIECE(DGD(DGI),U)_";ICD0(")=""
- +6 SET DGHOLD=$SELECT($DATA(^DGPT(DGPTF,"S",+DGSUR,300)):^(300),1:"")
- +7 DO SCAN
- +8 IF '$DATA(DGBPC)
- IF DGHOLD']""
- GOTO CHK4Q
- +9 SET DIE="^DGPT("
- SET DA=DGPTF
- SET DR="[DGPT 401 CLEANUP]"
- +10 DO ^DIE
- CHK4Q KILL DA,DR,DGHOLD,DGBPC,DGPTIT,DIE,DGREC,DGI,DGSCDT,DGSTART,DGTREC,DGOUT
- +1 QUIT
- +2 ;
- CHK701 ;-- will get data from flagchk then stuff into 701 (300 node)
- +1 ; G CHK7Q:'$D(^DGPT(DGPTF,70)) S DGREC=^(70)
- +2 ; F DGI=10,16:1:24 I $P(DGREC,U,DGI) S DGPTIT($P(DGREC,U,DGI)_";ICD9(")=""
- +3 NEW DGD
- DO PTFICD^DGPTFUT(701,DGPTF,,.DGD)
- if $DATA(DGD)'=11
- GOTO ENQ
- +4 SET DGI=""
- FOR
- SET DGI=$ORDER(DGD(DGI))
- if DGI=""
- QUIT
- SET DGPTIT($PIECE(DGD(DGI),U)_";ICD9(")=""
- +5 DO DC
- DO SCAN
- DO ANYPSY
- DO FLAGCHK
- +6 SET DGREC=$SELECT($DATA(^DGPT(DGPTF,300)):^(300),1:"")
- SET DR=""
- SET DA=DGPTF
- SET DIE="^DGPT("
- +7 DO GETNUM
- +8 FOR DGII=2:1:DGFNUM
- SET DR=DR_$SELECT($PIECE(DG701,U,DGII)]""&($PIECE(DG701,U,DGII)'=$PIECE(DGREC,U,DGII)):"300.0"_DGII_"////"_$PIECE(DG701,U,DGII)_";",'$DATA(DGBPC(DGII))&($PIECE(DGREC,U,DGII)]"")&($PIECE(DG701,U,DGII)']""):"300.0"_DGII_"////@;",1:"")
- CHK7J IF DR]""
- DO ^DIE
- CHK7Q ;
- +1 KILL DGII,DA,DR,DIE,DG701,DGI,DGT,DGREC,DGFNUM,DGSCDT,DGSTART,DGTREC,DGOUT
- +2 QUIT
- FLAGCHK ;-- build 701 from 501 responses, kill flags if necessary
- +1 SET DG701=""
- SET DGOUT=0
- +2 FOR DGI=0:0
- SET DGI=$ORDER(^DGPT(DGPTF,"M","AM",DGI))
- if DGI'>0
- QUIT
- FOR DGJ=0:0
- SET DGJ=$ORDER(^DGPT(DGPTF,"M","AM",DGI,DGJ))
- if DGJ'>0
- QUIT
- IF $DATA(^DGPT(DGPTF,"M",DGJ,300))
- SET DGHOLD=^(300)
- DO FL1
- +3 SET DGNDIS=$SELECT('$DATA(^DGPT(DGPTF,70)):0,1:+^(70))
- +4 IF DGNDIS'>0
- IF $DATA(^DGPT(DGPTF,"M",1,300))
- SET DGHOLD=^(300)
- DO FL1
- FLAGQ KILL DGI,DGNDIS
- +1 QUIT
- FL1 ;
- +1 DO GETNUM
- +2 FOR DGII=2:1:DGFNUM
- IF $PIECE(DGHOLD,U,DGII)]""
- IF $PIECE(DG701,U,DGII)']""
- SET $PIECE(DG701,U,DGII)=$PIECE(DGHOLD,U,DGII)
- KILL DGBPC(DGII)
- FL1Q KILL DGII,DGHOLD,DGK,DGFNUM
- +1 QUIT
- +2 ;
- SCAN ;-- process DGPTIT array
- +1 KILL DGBPC
- +2 DO ISPSY
- +3 if '$DATA(DGPTIT)
- GOTO SCANQ
- +4 ;return discharge date or current date in DGSCDT
- DO DC
- +5 SET DGI=""
- FOR DGJ=0:0
- SET DGI=$ORDER(DGPTIT(DGI))
- if DGI=""
- QUIT
- FOR DGK=0:0
- SET DGK=$ORDER(^DIC(45.89,"ASPL",DGI,DGK))
- if 'DGK
- QUIT
- DO S1
- SCANQ ;
- +1 KILL DGSPEC,DGI,DGJ,DGK
- +2 QUIT
- +3 ;
- S1 ;-- check inactive dates, set flag array
- +1 if '$DATA(^DIC(45.89,DGK,0))
- GOTO S1Q
- SET X=^(0)
- +2 IF $PIECE(X,U,3)]""
- IF $DATA(DGSCDT)
- if DGSCDT>$PIECE(X,U,3)
- GOTO S1Q
- +3 SET Y=+X
- +4 if '$DATA(^DIC(45.88,Y,0))
- GOTO S1Q
- SET X=^(0)
- +5 IF $PIECE(X,U,3)]""
- IF $DATA(DGSCDT)
- if DGSCDT>$PIECE(X,U,3)
- GOTO S1Q
- +6 IF $PIECE(X,U,2)]""
- SET X=$PIECE(X,U,2)
- FOR DGII=1:1
- SET Y=$PIECE(X,",",DGII)
- if 'Y
- QUIT
- DO FLGFIL
- S1Q ;
- +1 KILL X,Y,DGII
- +2 QUIT
- +3 ;
- DC ;-- find discharge date
- +1 SET DGSCDT=$SELECT('$DATA(^DGPT(PTF,70)):DT,^(70):+^(70),1:DT)
- +2 QUIT
- +3 ;
- ENQ ;
- +1 KILL DG701,DGSTART,DGI,DGOUT,DGREC,DGBPC,DGPTIT,DGTREC,DGSCDT
- +2 QUIT
- +3 ;
- GETNUM ;-- returns the number of additional questions/flags
- +1 SET DGFNUM=7
- +2 QUIT
- +3 ;
- INIT ;-- init routine
- +1 SET DGOUT=0
- SET (DGTREC,DGHOLD)=""
- +2 ;-- DGSTART should be set to 2910930 for national release
- +3 SET DGSTART=2910930
- +4 DO DC
- +5 DO LO^DGUTL
- DO HOME^%ZIS
- +6 KILL DGPTIT
- INITQ ;
- +1 QUIT
- +2 ;
- ANYPSY ;-- will go through all movements check for PSYCH specialty
- +1 NEW DGMOV
- +2 KILL DGPSY
- +3 IF '$DATA(^DGPT(DGPTF,"M"))
- GOTO ANYQ
- +4 FOR DGMOV=0:0
- SET DGMOV=$ORDER(^DGPT(DGPTF,"M",DGMOV))
- if 'DGMOV
- QUIT
- DO ISPSY
- IF $DATA(DGSPEC)
- SET DGPSY=""
- +5 IF '$DATA(DGPSY)
- KILL DGBPC(5),DGBPC(6),DGBPC(7)
- ANYQ ;
- +1 KILL DGSPEC
- +2 QUIT
- ISPSY ;-- check if losing specialty is in psych range set flag.
- +1 ;-- if psych then $D(DGSPEC)
- +2 KILL DGSPEC
- +3 IF '$DATA(DGMOV)
- SET DGSPEC=""
- GOTO ISPSYQ
- +4 ; -- 850 Fix (BELOW), problem in fee basis when DGMOV is defined but no global ref.
- +5 IF $DATA(DGMOV)
- Begin DoDot:1
- +6 SET DGSPEC=$PIECE($GET(^DGPT(DGPTF,"M",+$GET(DGMOV),0)),U,2)
- +7 IF '$PIECE($GET(^DIC(42.4,+$GET(DGSPEC),0)),U,4)
- KILL DGSPEC
- End DoDot:1
- ISPSYQ QUIT
- +1 ;
- FLGFIL ;-- fill DGBPC with correct flag.
- +1 IF '$DATA(DGSPEC)
- IF Y>4
- IF Y<8
- GOTO FLGFILQ
- +2 SET DGBPC(Y)=""
- FLGFILQ ;
- +1 QUIT
- +2 ;
- ANYSC(PTF) ;-- will go through all movements check for sc treatment
- +1 ; INPUT - ptf record ien to check
- +2 ; OUTPUT- 1 sc treatment, 0 no sc treatment
- +3 NEW DGMOV,RESULT
- +4 SET RESULT=0
- +5 IF '$DATA(^DGPT(PTF,"M"))
- GOTO ANYSCQ
- +6 SET DGMOV=0
- FOR
- SET DGMOV=$ORDER(^DGPT(PTF,"M",DGMOV))
- if 'DGMOV
- QUIT
- IF $PIECE(^(DGMOV,0),U,18)=1
- SET RESULT=1
- QUIT
- ANYSCQ ;
- +1 QUIT RESULT
- +2 ;