RGPRSSN ;WAS/FHM-MPI/PD PSEUDO/MISSING SSN REPORT ;6/25/98
;;1.0;CLINICAL INFO RESOURCE NETWORK;**19,34**;30 Apr 99
;
;Reference to ^DIC(8 supported by IA #427
;Reference to ^DGPM( supported by IA #966
;Reference to ^SCE( supported by IA #2443
;Reference to ADM^VADPT2 supported by IA #325
;
;EXTRACT BAD SSN AND SORTS THEM BY CLASSIFICATION
W !,"This report will provide a list of:"
W !,"(1) any B Cross-references (there is no 'zero' node but a B x-ref)"
W !," on the patient file,"
W !,"(2) patients with Pseudo SSNs who have not had activity within the past 3 years,"
W !,"(3) patients with Pseudo SSNs who have had activity within the past 3 years.",!
W !,"The Reports are sorted by Primary Eligibility Code. The report can"
W !,"be queued if desired."
W !,!,"For MPI/PD purposes, general advice is to concentrate first on"
W !,"getting correct SSNs for the patients who HAVE had activity within"
W !,"the past 3 years.",!
S %ZIS="QM" D ^%ZIS G EXIT:POP
K ^TMP($J)
I $D(IO("Q")) D Q
.S ZTRTN="DQ^RGPRSSN",ZTDESC="MPI/PD SSN VALIDATION"
.D ^%ZTLOAD D HOME^%ZIS K IO("Q")
DQ N DTOUT,DUOUT S RGFS=1,PRNTCODE="",RGPRNTCO=""
U IO W @IOF,!,"MPI/PD Report of Pseudo, missing & potentially false SSNs "
D NOW^%DTC D YX^%DTC
W ?55,Y,!
W !,"Bad B Cross References Report"
W !,"Please contact IRM for assistance with bad B Cross references."
W !,"----------------------------------------------------------------------------"
S BREF=0
S NAME=""
F S NAME=$O(^DPT("B",NAME)) Q:NAME="" D
.S REFNO=0
.S REFNO=$O(^DPT("B",NAME,REFNO)) Q:REFNO=""
.IF $D(^DPT(REFNO,0)) S NODE=^DPT(REFNO,0),RGSSN=$P(NODE,"^",9)
.E S BREF=1 W !,"B Cross Reference with no 0 Node in DPT: DFN= ",REFNO Q
.IF RGSSN="" S RGSSN="None"
.IF RGSSN'?9N S SCRATCH=$$SETGBL
.IF RGSSN="123456789" S SCRATCH=$$SETGBL
.IF RGSSN="000000000" S SCRATCH=$$SETGBL
.IF RGSSN="111111111" S SCRATCH=$$SETGBL
.IF RGSSN="222222222" S SCRATCH=$$SETGBL
.IF RGSSN="333333333" S SCRATCH=$$SETGBL
.IF RGSSN="444444444" S SCRATCH=$$SETGBL
.IF RGSSN="555555555" S SCRATCH=$$SETGBL
.IF RGSSN="666666666" S SCRATCH=$$SETGBL
.IF RGSSN="777777777" S SCRATCH=$$SETGBL
.IF RGSSN="888888888" S SCRATCH=$$SETGBL
.IF RGSSN?1"9"8N S SCRATCH=$$SETGBL
.QUIT
IF BREF=0 W !,"*** No Bad B Cross References Found in your account.***"
LST S (ACTIV1,ECODE1,NAME1,REFNO1)=""
LST1 S ACTIV1=$O(^TMP($J,ACTIV1)) G EXIT:ACTIV1="" D HEADER G EXIT:$D(DUOUT)!($D(DTOUT))
LST2 S ECODE1=$O(^TMP($J,ACTIV1,ECODE1)) G LST1:ECODE1="" D:$Y>(IOSL-4) HEADER,HEAD2 G:$D(DUOUT)!($D(DTOUT)) EXIT W ! S SCRATCH=$$GETECODE
LST3 S NAME1=$O(^TMP($J,ACTIV1,ECODE1,NAME1)) G LST2:NAME1="" D:$Y>(IOSL-4) HEADER,HEAD2 G:$D(DUOUT)!($D(DTOUT)) EXIT
S REFNO1=^TMP($J,ACTIV1,ECODE1,NAME1)
S (PHONE,RGSSN,ECODE)="None"
;Using VADPT for PHONE# , SSN ,eligibility code, and Name
K VAPTYP,VAHOW,VAROOT,VADM,VAEL,VAPA,VATEST S DFN=REFNO1 D ADD^VADPT,DEM^VADPT,ELIG^VADPT S NAME=VADM(1),RGSSN=$P(VADM(2),U),PHONE=VAPA(8),ECODE=$P(VAEL(1),U)
K VAPTYP,VAHOW,VAROOT,VADM,VAEL,VAPA,VATEST
S ACTIVITY=$$ACTIVE(REFNO1)
W !,?10,ECODE,?20,NAME1,?54,RGSSN,?65,PHONE
GOTO LST3
EXIT D ^%ZISC
S:$D(ZTQUEUED) ZTREQ="@"
K ^TMP($J)
K ACTIV1,ACTIVITY,BREF,ECODE,ECODE1,NAME,NAME1,NODE,NODE2,NODE3
K NODE4,PHONE,PRNTCODE,REFNO,REFNO1,RGFS,RGPRNTCO,SCRATCH,RGSSN,ZTREQ,%ZIS,NODE1,POP,ZTDESC,ZTRTN
QUIT
SETGBL() ;SETS GLOBAL
S ECODE=""
K VAEL S DFN=REFNO D ELIG^VADPT S ECODE=$P(VAEL(1),U)
IF ECODE="" S ECODE="None"
S ACTIVITY=$$ACTIVE(REFNO)
S ^TMP($J,ACTIVITY,ECODE,NAME)=REFNO
QUIT 1
GETECODE() ;
S PRNTCODE="None"
IF $D(^DIC(8,ECODE1,0)) S NODE4=^DIC(8,ECODE1,0),PRNTCODE=$P(NODE4,"^",1)
W !,PRNTCODE S RGFS=0
QUIT 1
LTD(DFN) ;
;FIND LAST TREATMENT DATE
;INPUT: DFN
;OUTPUT: LTD LAST TREATMENT DATE
;
;
N LTD,X
;
; - NEED A PATIENT
I '$G(DFN) S LTD=0 G LTDQ
;
; - IF CURRENT INPATIENT, SET LTD = TODAY AND QUIT
;Current admission movement from ADM^VAPDT2
K VADMVT,VAINDT D ADM^VADPT2 I $L(VADMVT) S LTD=DT K VADMVT,VAERR,VAINDT G LTDQ
K VADMVT,VAERR,VAINDT
;
; - GET THE LAST DISCHARGE DATE
S LTD=+$O(^DGPM("ATID3",DFN,"")) S:LTD LTD=9999999.9999999-LTD\1 S:LTD>DT LTD=DT
;
; - GET THE LAST REGISTRATION DATE AND COMPARE IT TO LTD
K VAROOT,VARP,^UTILITY("VARP",$J) S VARP("F")=2000101 D REG^VADPT I $D(^UTILITY("VARP",$J,1,"I")) S X=$P(^("I"),U) I X S X=X\1 S:X>LTD LTD=X
K ^UTILITY("VARP",$J),VARP,VAERR
;
; - GET THE LAST STOP AND COMPARE TO LTD
; Look at Outpatient Encounter, ^SDV is going away
; Use an API instead of ordering through global
N OPIEN S OPIEN=$$GETLAST^SDOE(DFN,2000101,"C")
I $G(^SCE(+OPIEN,0)) S LTD=$P(^SCE(OPIEN,0),"^",1)\1
;
LTDQ ;
Q $S(LTD:LTD,1:0)
;
ACTIVE(DFN) ;
N LTD,TODAY,DIFF
S LTD=$$LTD(DFN)
Q:LTD'>0 "NO"
Q:$L(LTD)'=7 1_"^"_LTD_"^"_"ZERO"
S TODAY=$$NOW^XLFDT\1
S DIFF=$$FMDIFF^XLFDT(TODAY,LTD)
; if difference is > 1096 days or 3 years
I DIFF>1096 Q "NO"
Q "YES"
I ($E(IOST,1,2)="C-")&(IO=IO(0)) D
. S DIR(0)="E"
. D ^DIR K DIR
Q:$D(DUOUT)!($D(DTOUT))
;;;W:$D(IOF) @IOF
W @IOF,!,"MPI/PD Report of Pseudo, missing & potentially false SSNs "
D NOW^%DTC D YX^%DTC
W ?55,Y,! K Y
W !,?20,"Patient activity within past 3 years = ",$G(ACTIV1)
W !,?1,"Primary"
W !,?1,"Elig Code"
W !,?10,"Elig.",?20,"Name",?54,"SSN",?65,"Home Phone"
W !,"-----------------------------------------------------------------------------"
Q
HEAD2 ;SUB HEADER
Q:$D(DUOUT)!($D(DTOUT))
I RGFS=0,PRNTCODE=RGPRNTCO W !,PRNTCODE
E I RGFS=0 W !,PRNTCODE S RGPRNTCO=PRNTCODE
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HRGPRSSN 5722 printed Oct 16, 2024@17:43:36 Page 2
+1 ;;1.0;CLINICAL INFO RESOURCE NETWORK;**19,34**;30 Apr 99
+2 ;
+3 ;Reference to ^DIC(8 supported by IA #427
+4 ;Reference to ^DGPM( supported by IA #966
+5 ;Reference to ^SCE( supported by IA #2443
+6 ;Reference to ADM^VADPT2 supported by IA #325
+7 ;
+8 ;EXTRACT BAD SSN AND SORTS THEM BY CLASSIFICATION
+9 WRITE !,"This report will provide a list of:"
+10 WRITE !,"(1) any B Cross-references (there is no 'zero' node but a B x-ref)"
+11 WRITE !," on the patient file,"
+12 WRITE !,"(2) patients with Pseudo SSNs who have not had activity within the past 3 years,"
+13 WRITE !,"(3) patients with Pseudo SSNs who have had activity within the past 3 years.",!
+14 WRITE !,"The Reports are sorted by Primary Eligibility Code. The report can"
+15 WRITE !,"be queued if desired."
+16 WRITE !,!,"For MPI/PD purposes, general advice is to concentrate first on"
+17 WRITE !,"getting correct SSNs for the patients who HAVE had activity within"
+18 WRITE !,"the past 3 years.",!
+19 SET %ZIS="QM"
DO ^%ZIS
if POP
GOTO EXIT
+20 KILL ^TMP($JOB)
+21 IF $DATA(IO("Q"))
Begin DoDot:1
+22 SET ZTRTN="DQ^RGPRSSN"
SET ZTDESC="MPI/PD SSN VALIDATION"
+23 DO ^%ZTLOAD
DO HOME^%ZIS
KILL IO("Q")
End DoDot:1
QUIT
DQ NEW DTOUT,DUOUT
SET RGFS=1
SET PRNTCODE=""
SET RGPRNTCO=""
+1 USE IO
WRITE @IOF,!,"MPI/PD Report of Pseudo, missing & potentially false SSNs "
+2 DO NOW^%DTC
DO YX^%DTC
+3 WRITE ?55,Y,!
+4 WRITE !,"Bad B Cross References Report"
+5 WRITE !,"Please contact IRM for assistance with bad B Cross references."
+6 WRITE !,"----------------------------------------------------------------------------"
+7 SET BREF=0
+8 SET NAME=""
+9 FOR
SET NAME=$ORDER(^DPT("B",NAME))
if NAME=""
QUIT
Begin DoDot:1
+10 SET REFNO=0
+11 SET REFNO=$ORDER(^DPT("B",NAME,REFNO))
if REFNO=""
QUIT
+12 IF $DATA(^DPT(REFNO,0))
SET NODE=^DPT(REFNO,0)
SET RGSSN=$PIECE(NODE,"^",9)
+13 IF '$TEST
SET BREF=1
WRITE !,"B Cross Reference with no 0 Node in DPT: DFN= ",REFNO
QUIT
+14 IF RGSSN=""
SET RGSSN="None"
+15 IF RGSSN'?9N
SET SCRATCH=$$SETGBL
+16 IF RGSSN="123456789"
SET SCRATCH=$$SETGBL
+17 IF RGSSN="000000000"
SET SCRATCH=$$SETGBL
+18 IF RGSSN="111111111"
SET SCRATCH=$$SETGBL
+19 IF RGSSN="222222222"
SET SCRATCH=$$SETGBL
+20 IF RGSSN="333333333"
SET SCRATCH=$$SETGBL
+21 IF RGSSN="444444444"
SET SCRATCH=$$SETGBL
+22 IF RGSSN="555555555"
SET SCRATCH=$$SETGBL
+23 IF RGSSN="666666666"
SET SCRATCH=$$SETGBL
+24 IF RGSSN="777777777"
SET SCRATCH=$$SETGBL
+25 IF RGSSN="888888888"
SET SCRATCH=$$SETGBL
+26 IF RGSSN?1"9"8N
SET SCRATCH=$$SETGBL
+27 QUIT
End DoDot:1
+28 IF BREF=0
WRITE !,"*** No Bad B Cross References Found in your account.***"
LST SET (ACTIV1,ECODE1,NAME1,REFNO1)=""
LST1 SET ACTIV1=$ORDER(^TMP($JOB,ACTIV1))
if ACTIV1=""
GOTO EXIT
DO HEADER
if $DATA(DUOUT)!($DATA(DTOUT))
GOTO EXIT
LST2 SET ECODE1=$ORDER(^TMP($JOB,ACTIV1,ECODE1))
if ECODE1=""
GOTO LST1
if $Y>(IOSL-4)
DO HEADER
DO HEAD2
if $DATA(DUOUT)!($DATA(DTOUT))
GOTO EXIT
WRITE !
SET SCRATCH=$$GETECODE
LST3 SET NAME1=$ORDER(^TMP($JOB,ACTIV1,ECODE1,NAME1))
if NAME1=""
GOTO LST2
if $Y>(IOSL-4)
DO HEADER
DO HEAD2
if $DATA(DUOUT)!($DATA(DTOUT))
GOTO EXIT
+1 SET REFNO1=^TMP($JOB,ACTIV1,ECODE1,NAME1)
+2 SET (PHONE,RGSSN,ECODE)="None"
+3 ;Using VADPT for PHONE# , SSN ,eligibility code, and Name
+4 KILL VAPTYP,VAHOW,VAROOT,VADM,VAEL,VAPA,VATEST
SET DFN=REFNO1
DO ADD^VADPT
DO DEM^VADPT
DO ELIG^VADPT
SET NAME=VADM(1)
SET RGSSN=$PIECE(VADM(2),U)
SET PHONE=VAPA(8)
SET ECODE=$PIECE(VAEL(1),U)
+5 KILL VAPTYP,VAHOW,VAROOT,VADM,VAEL,VAPA,VATEST
+6 SET ACTIVITY=$$ACTIVE(REFNO1)
+7 WRITE !,?10,ECODE,?20,NAME1,?54,RGSSN,?65,PHONE
+8 GOTO LST3
EXIT DO ^%ZISC
+1 if $DATA(ZTQUEUED)
SET ZTREQ="@"
+2 KILL ^TMP($JOB)
+3 KILL ACTIV1,ACTIVITY,BREF,ECODE,ECODE1,NAME,NAME1,NODE,NODE2,NODE3
+4 KILL NODE4,PHONE,PRNTCODE,REFNO,REFNO1,RGFS,RGPRNTCO,SCRATCH,RGSSN,ZTREQ,%ZIS,NODE1,POP,ZTDESC,ZTRTN
+5 QUIT
SETGBL() ;SETS GLOBAL
+1 SET ECODE=""
+2 KILL VAEL
SET DFN=REFNO
DO ELIG^VADPT
SET ECODE=$PIECE(VAEL(1),U)
+3 IF ECODE=""
SET ECODE="None"
+4 SET ACTIVITY=$$ACTIVE(REFNO)
+5 SET ^TMP($JOB,ACTIVITY,ECODE,NAME)=REFNO
+6 QUIT 1
GETECODE() ;
+1 SET PRNTCODE="None"
+2 IF $DATA(^DIC(8,ECODE1,0))
SET NODE4=^DIC(8,ECODE1,0)
SET PRNTCODE=$PIECE(NODE4,"^",1)
+3 WRITE !,PRNTCODE
SET RGFS=0
+4 QUIT 1
LTD(DFN) ;
+1 ;FIND LAST TREATMENT DATE
+2 ;INPUT: DFN
+3 ;OUTPUT: LTD LAST TREATMENT DATE
+4 ;
+5 ;
+6 NEW LTD,X
+7 ;
+8 ; - NEED A PATIENT
+9 IF '$GET(DFN)
SET LTD=0
GOTO LTDQ
+10 ;
+11 ; - IF CURRENT INPATIENT, SET LTD = TODAY AND QUIT
+12 ;Current admission movement from ADM^VAPDT2
+13 KILL VADMVT,VAINDT
DO ADM^VADPT2
IF $LENGTH(VADMVT)
SET LTD=DT
KILL VADMVT,VAERR,VAINDT
GOTO LTDQ
+14 KILL VADMVT,VAERR,VAINDT
+15 ;
+16 ; - GET THE LAST DISCHARGE DATE
+17 SET LTD=+$ORDER(^DGPM("ATID3",DFN,""))
if LTD
SET LTD=9999999.9999999-LTD\1
if LTD>DT
SET LTD=DT
+18 ;
+19 ; - GET THE LAST REGISTRATION DATE AND COMPARE IT TO LTD
+20 KILL VAROOT,VARP,^UTILITY("VARP",$JOB)
SET VARP("F")=2000101
DO REG^VADPT
IF $DATA(^UTILITY("VARP",$JOB,1,"I"))
SET X=$PIECE(^("I"),U)
IF X
SET X=X\1
if X>LTD
SET LTD=X
+21 KILL ^UTILITY("VARP",$JOB),VARP,VAERR
+22 ;
+23 ; - GET THE LAST STOP AND COMPARE TO LTD
+24 ; Look at Outpatient Encounter, ^SDV is going away
+25 ; Use an API instead of ordering through global
+26 NEW OPIEN
SET OPIEN=$$GETLAST^SDOE(DFN,2000101,"C")
+27 IF $GET(^SCE(+OPIEN,0))
SET LTD=$PIECE(^SCE(OPIEN,0),"^",1)\1
+28 ;
LTDQ ;
+1 QUIT $SELECT(LTD:LTD,1:0)
+2 ;
ACTIVE(DFN) ;
+1 NEW LTD,TODAY,DIFF
+2 SET LTD=$$LTD(DFN)
+3 if LTD'>0
QUIT "NO"
+4 if $LENGTH(LTD)'=7
QUIT 1_"^"_LTD_"^"_"ZERO"
+5 SET TODAY=$$NOW^XLFDT\1
+6 SET DIFF=$$FMDIFF^XLFDT(TODAY,LTD)
+7 ; if difference is > 1096 days or 3 years
+8 IF DIFF>1096
QUIT "NO"
+9 QUIT "YES"
+1 IF ($EXTRACT(IOST,1,2)="C-")&(IO=IO(0))
Begin DoDot:1
+2 SET DIR(0)="E"
+3 DO ^DIR
KILL DIR
End DoDot:1
+4 if $DATA(DUOUT)!($DATA(DTOUT))
QUIT
+5 ;;;W:$D(IOF) @IOF
+6 WRITE @IOF,!,"MPI/PD Report of Pseudo, missing & potentially false SSNs "
+7 DO NOW^%DTC
DO YX^%DTC
+8 WRITE ?55,Y,!
KILL Y
+9 WRITE !,?20,"Patient activity within past 3 years = ",$GET(ACTIV1)
+10 WRITE !,?1,"Primary"
+11 WRITE !,?1,"Elig Code"
+12 WRITE !,?10,"Elig.",?20,"Name",?54,"SSN",?65,"Home Phone"
+13 WRITE !,"-----------------------------------------------------------------------------"
+14 QUIT
HEAD2 ;SUB HEADER
+1 if $DATA(DUOUT)!($DATA(DTOUT))
QUIT
+2 IF RGFS=0
IF PRNTCODE=RGPRNTCO
WRITE !,PRNTCODE
+3 IF '$TEST
IF RGFS=0
WRITE !,PRNTCODE
SET RGPRNTCO=PRNTCODE
+4 QUIT