| 1 | RGPRSSN ;WAS/FHM-MPI/PD PSEUDO/MISSING SSN REPORT ;6/25/98
 | 
|---|
| 2 |  ;;1.0;CLINICAL INFO RESOURCE NETWORK;**19,34**;30 Apr 99
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  ;Reference to ^DIC(8 supported by IA #427
 | 
|---|
| 5 |  ;Reference to ^DGPM( supported by IA #966
 | 
|---|
| 6 |  ;Reference to ^SCE( supported by IA #2443
 | 
|---|
| 7 |  ;Reference to ADM^VADPT2 supported by IA #325
 | 
|---|
| 8 |  ;
 | 
|---|
| 9 |  ;EXTRACT BAD SSN AND SORTS THEM BY CLASSIFICATION
 | 
|---|
| 10 |  W !,"This report will provide a list of:"
 | 
|---|
| 11 |  W !,"(1) any B Cross-references (there is no 'zero' node but a B x-ref)"
 | 
|---|
| 12 |  W !,"    on the patient file,"
 | 
|---|
| 13 |  W !,"(2) patients with Pseudo SSNs who have not had activity within the past 3 years,"
 | 
|---|
| 14 |  W !,"(3) patients with Pseudo SSNs who have had activity within the past 3 years.",!
 | 
|---|
| 15 |  W !,"The Reports are sorted by Primary Eligibility Code. The report can"
 | 
|---|
| 16 |  W !,"be queued if desired."
 | 
|---|
| 17 |  W !,!,"For MPI/PD purposes, general advice is to concentrate first on"
 | 
|---|
| 18 |  W !,"getting correct SSNs for the patients who HAVE had activity within"
 | 
|---|
| 19 |  W !,"the past 3 years.",!
 | 
|---|
| 20 |  S %ZIS="QM" D ^%ZIS G EXIT:POP
 | 
|---|
| 21 |  K ^TMP($J)
 | 
|---|
| 22 |  I $D(IO("Q")) D  Q
 | 
|---|
| 23 |    .S ZTRTN="DQ^RGPRSSN",ZTDESC="MPI/PD SSN VALIDATION"
 | 
|---|
| 24 |    .D ^%ZTLOAD D HOME^%ZIS K IO("Q")
 | 
|---|
| 25 | DQ N DTOUT,DUOUT S RGFS=1,PRNTCODE="",RGPRNTCO=""
 | 
|---|
| 26 |  U IO W @IOF,!,"MPI/PD Report of Pseudo, missing & potentially false SSNs "
 | 
|---|
| 27 |  D NOW^%DTC D YX^%DTC
 | 
|---|
| 28 |  W ?55,Y,!
 | 
|---|
| 29 |  W !,"Bad B Cross References Report"
 | 
|---|
| 30 |  W !,"Please contact IRM for assistance with bad B Cross references."
 | 
|---|
| 31 |  W !,"----------------------------------------------------------------------------"
 | 
|---|
| 32 |  S BREF=0
 | 
|---|
| 33 |  S NAME=""
 | 
|---|
| 34 |  F  S NAME=$O(^DPT("B",NAME)) Q:NAME=""  D
 | 
|---|
| 35 |    .S REFNO=0
 | 
|---|
| 36 |    .S REFNO=$O(^DPT("B",NAME,REFNO)) Q:REFNO=""
 | 
|---|
| 37 |    .IF $D(^DPT(REFNO,0)) S NODE=^DPT(REFNO,0),RGSSN=$P(NODE,"^",9)
 | 
|---|
| 38 |    .E  S BREF=1 W !,"B Cross Reference with no 0 Node in DPT: DFN= ",REFNO Q
 | 
|---|
| 39 |    .IF RGSSN="" S RGSSN="None"
 | 
|---|
| 40 |    .IF RGSSN'?9N S SCRATCH=$$SETGBL
 | 
|---|
| 41 |    .IF RGSSN="123456789" S SCRATCH=$$SETGBL
 | 
|---|
| 42 |    .IF RGSSN="000000000" S SCRATCH=$$SETGBL
 | 
|---|
| 43 |    .IF RGSSN="111111111" S SCRATCH=$$SETGBL
 | 
|---|
| 44 |    .IF RGSSN="222222222" S SCRATCH=$$SETGBL
 | 
|---|
| 45 |    .IF RGSSN="333333333" S SCRATCH=$$SETGBL
 | 
|---|
| 46 |    .IF RGSSN="444444444" S SCRATCH=$$SETGBL
 | 
|---|
| 47 |    .IF RGSSN="555555555" S SCRATCH=$$SETGBL
 | 
|---|
| 48 |    .IF RGSSN="666666666" S SCRATCH=$$SETGBL
 | 
|---|
| 49 |    .IF RGSSN="777777777" S SCRATCH=$$SETGBL
 | 
|---|
| 50 |    .IF RGSSN="888888888" S SCRATCH=$$SETGBL
 | 
|---|
| 51 |    .IF RGSSN?1"9"8N S SCRATCH=$$SETGBL
 | 
|---|
| 52 |    .QUIT
 | 
|---|
| 53 |  IF BREF=0 W !,"*** No Bad B Cross References Found in your account.***"
 | 
|---|
| 54 | LST S (ACTIV1,ECODE1,NAME1,REFNO1)=""
 | 
|---|
| 55 | LST1 S ACTIV1=$O(^TMP($J,ACTIV1)) G EXIT:ACTIV1="" D HEADER G EXIT:$D(DUOUT)!($D(DTOUT))
 | 
|---|
| 56 | 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
 | 
|---|
| 57 | LST3 S NAME1=$O(^TMP($J,ACTIV1,ECODE1,NAME1))  G LST2:NAME1="" D:$Y>(IOSL-4) HEADER,HEAD2 G:$D(DUOUT)!($D(DTOUT)) EXIT
 | 
|---|
| 58 |  S REFNO1=^TMP($J,ACTIV1,ECODE1,NAME1)
 | 
|---|
| 59 |  S (PHONE,RGSSN,ECODE)="None"
 | 
|---|
| 60 |  ;Using VADPT for PHONE# , SSN     ,eligibility code, and Name  
 | 
|---|
| 61 |  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)
 | 
|---|
| 62 |  K VAPTYP,VAHOW,VAROOT,VADM,VAEL,VAPA,VATEST
 | 
|---|
| 63 |  S ACTIVITY=$$ACTIVE(REFNO1)
 | 
|---|
| 64 |  W !,?10,ECODE,?20,NAME1,?54,RGSSN,?65,PHONE
 | 
|---|
| 65 |  GOTO LST3
 | 
|---|
| 66 | EXIT D ^%ZISC
 | 
|---|
| 67 |  S:$D(ZTQUEUED) ZTREQ="@"
 | 
|---|
| 68 |  K ^TMP($J)
 | 
|---|
| 69 |  K ACTIV1,ACTIVITY,BREF,ECODE,ECODE1,NAME,NAME1,NODE,NODE2,NODE3
 | 
|---|
| 70 |  K NODE4,PHONE,PRNTCODE,REFNO,REFNO1,RGFS,RGPRNTCO,SCRATCH,RGSSN,ZTREQ,%ZIS,NODE1,POP,ZTDESC,ZTRTN
 | 
|---|
| 71 |  QUIT
 | 
|---|
| 72 | SETGBL()        ;SETS GLOBAL
 | 
|---|
| 73 |  S ECODE=""
 | 
|---|
| 74 |  K VAEL S DFN=REFNO D ELIG^VADPT S ECODE=$P(VAEL(1),U)
 | 
|---|
| 75 |  IF ECODE="" S ECODE="None"
 | 
|---|
| 76 |  S ACTIVITY=$$ACTIVE(REFNO)
 | 
|---|
| 77 |  S ^TMP($J,ACTIVITY,ECODE,NAME)=REFNO
 | 
|---|
| 78 |  QUIT 1
 | 
|---|
| 79 | GETECODE()      ;
 | 
|---|
| 80 |  S PRNTCODE="None"
 | 
|---|
| 81 |  IF $D(^DIC(8,ECODE1,0)) S NODE4=^DIC(8,ECODE1,0),PRNTCODE=$P(NODE4,"^",1)
 | 
|---|
| 82 |  W !,PRNTCODE S RGFS=0
 | 
|---|
| 83 |  QUIT 1
 | 
|---|
| 84 | LTD(DFN)        ;
 | 
|---|
| 85 |  ;FIND LAST TREATMENT DATE
 | 
|---|
| 86 |  ;INPUT: DFN
 | 
|---|
| 87 |  ;OUTPUT: LTD LAST TREATMENT DATE
 | 
|---|
| 88 |  ;
 | 
|---|
| 89 |  ;
 | 
|---|
| 90 |  N LTD,X
 | 
|---|
| 91 |  ;
 | 
|---|
| 92 |  ; - NEED A PATIENT
 | 
|---|
| 93 |  I '$G(DFN) S LTD=0 G LTDQ
 | 
|---|
| 94 |  ;
 | 
|---|
| 95 |  ; - IF CURRENT INPATIENT, SET LTD = TODAY AND QUIT
 | 
|---|
| 96 |  ;Current admission movement from ADM^VAPDT2
 | 
|---|
| 97 |  K VADMVT,VAINDT D ADM^VADPT2 I $L(VADMVT) S LTD=DT K VADMVT,VAERR,VAINDT G LTDQ
 | 
|---|
| 98 |  K VADMVT,VAERR,VAINDT
 | 
|---|
| 99 |  ;
 | 
|---|
| 100 |  ; - GET THE LAST DISCHARGE DATE
 | 
|---|
| 101 |  S LTD=+$O(^DGPM("ATID3",DFN,"")) S:LTD LTD=9999999.9999999-LTD\1 S:LTD>DT LTD=DT
 | 
|---|
| 102 |  ;
 | 
|---|
| 103 |  ; - GET THE LAST REGISTRATION DATE AND COMPARE IT TO LTD
 | 
|---|
| 104 |  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
 | 
|---|
| 105 |  K ^UTILITY("VARP",$J),VARP,VAERR
 | 
|---|
| 106 |  ;
 | 
|---|
| 107 |  ; - GET THE LAST STOP AND COMPARE TO LTD
 | 
|---|
| 108 |  ; Look at Outpatient Encounter, ^SDV is going away
 | 
|---|
| 109 |  ; Use an API instead of ordering through global
 | 
|---|
| 110 |  N OPIEN S OPIEN=$$GETLAST^SDOE(DFN,2000101,"C")
 | 
|---|
| 111 |  I $G(^SCE(+OPIEN,0)) S LTD=$P(^SCE(OPIEN,0),"^",1)\1
 | 
|---|
| 112 |  ;
 | 
|---|
| 113 | LTDQ ;
 | 
|---|
| 114 |  Q $S(LTD:LTD,1:0)
 | 
|---|
| 115 |  ;
 | 
|---|
| 116 | ACTIVE(DFN) ;
 | 
|---|
| 117 |  N LTD,TODAY,DIFF
 | 
|---|
| 118 |  S LTD=$$LTD(DFN)
 | 
|---|
| 119 |  Q:LTD'>0 "NO"
 | 
|---|
| 120 |  Q:$L(LTD)'=7 1_"^"_LTD_"^"_"ZERO"
 | 
|---|
| 121 |  S TODAY=$$NOW^XLFDT\1
 | 
|---|
| 122 |  S DIFF=$$FMDIFF^XLFDT(TODAY,LTD)
 | 
|---|
| 123 |  ; if difference is > 1096 days or 3 years
 | 
|---|
| 124 |  I DIFF>1096 Q "NO"
 | 
|---|
| 125 |  Q "YES"
 | 
|---|
| 126 | HEADER ;PRINT REPORT HEADER
 | 
|---|
| 127 |  I ($E(IOST,1,2)="C-")&(IO=IO(0)) D
 | 
|---|
| 128 |  . S DIR(0)="E"
 | 
|---|
| 129 |  . D ^DIR K DIR
 | 
|---|
| 130 |  Q:$D(DUOUT)!($D(DTOUT))
 | 
|---|
| 131 |  ;;;W:$D(IOF) @IOF
 | 
|---|
| 132 |  W @IOF,!,"MPI/PD Report of Pseudo, missing & potentially false SSNs "
 | 
|---|
| 133 |  D NOW^%DTC D YX^%DTC
 | 
|---|
| 134 |  W ?55,Y,! K Y
 | 
|---|
| 135 |  W !,?20,"Patient activity within past 3 years = ",$G(ACTIV1)
 | 
|---|
| 136 |  W !,?1,"Primary"
 | 
|---|
| 137 |  W !,?1,"Elig Code"
 | 
|---|
| 138 |  W !,?10,"Elig.",?20,"Name",?54,"SSN",?65,"Home Phone"
 | 
|---|
| 139 |  W !,"-----------------------------------------------------------------------------"
 | 
|---|
| 140 |  Q
 | 
|---|
| 141 | HEAD2 ;SUB HEADER
 | 
|---|
| 142 |  Q:$D(DUOUT)!($D(DTOUT))
 | 
|---|
| 143 |  I RGFS=0,PRNTCODE=RGPRNTCO W !,PRNTCODE
 | 
|---|
| 144 |  E  I RGFS=0 W !,PRNTCODE S RGPRNTCO=PRNTCODE
 | 
|---|
| 145 |  Q
 | 
|---|