| 1 | IVMADDRP ;ALB/PHH,EG - IVM ADDRESS UPLOAD LOG REPORT ; 03/29/2006
 | 
|---|
| 2 |  ;;2.0;INCOME VERIFICATION MATCH;**108,106**; 21-OCT-94
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  ; This routine list veterans who have had more than one address
 | 
|---|
| 5 |  ; change in the past 90 days.
 | 
|---|
| 6 |  ;
 | 
|---|
| 7 |  N SDATE,EDATE,HDR,MSG,%ZIS,ZTRTN,ZTDESC,ZTSAVE,PAGE,ZTSK,ZTREQ,POP,X
 | 
|---|
| 8 |  N BDT,U,DFN,SO
 | 
|---|
| 9 |  S U="^",DFN="",SO=""
 | 
|---|
| 10 |  S DOS=$$DOS
 | 
|---|
| 11 |  I DOS="^" Q
 | 
|---|
| 12 |  S X=$$ENDDATE
 | 
|---|
| 13 |  I X="" Q
 | 
|---|
| 14 |  S BDT=$P(X,"^",1)
 | 
|---|
| 15 |  I DOS="D" D  I DFN="" Q
 | 
|---|
| 16 |  . S DFN=$$GETPAT
 | 
|---|
| 17 |  . Q
 | 
|---|
| 18 |  I DOS="S" S SO=$$SORTORD I SO="^" Q
 | 
|---|
| 19 |  S (SDATE,EDATE,HDR)=""
 | 
|---|
| 20 |  S EDATE=$$FMADD^XLFDT(BDT) I EDATE="" Q
 | 
|---|
| 21 |  S SDATE=$$FMADD^XLFDT(EDATE,-90)
 | 
|---|
| 22 |  ;
 | 
|---|
| 23 |  ; Get report device. Queue report if requested
 | 
|---|
| 24 |  S MSG(1)=""
 | 
|---|
| 25 |  S MSG(2)="This report may take a long time to generate.  It is recommended that the report"
 | 
|---|
| 26 |  S MSG(3)="be queued to print."
 | 
|---|
| 27 |  S MSG(4)=""
 | 
|---|
| 28 |  D BMES^XPDUTL(.MSG)
 | 
|---|
| 29 |  K IOP,%ZIS
 | 
|---|
| 30 |  S %ZIS="MQ"
 | 
|---|
| 31 |  D ^%ZIS I POP W !!,"Report Cancelled!" Q
 | 
|---|
| 32 |  I $D(IO("Q")) D  Q
 | 
|---|
| 33 |  . S ZTRTN="START^IVMADDRP"
 | 
|---|
| 34 |  . S ZTDESC="IVM Address Change Log Report"
 | 
|---|
| 35 |  . S (ZTSAVE("PAGE"),ZTSAVE("SDATE"),ZTSAVE("EDATE"))=""
 | 
|---|
| 36 |  . S (ZTSAVE("DOS"),ZTSAVE("DFN"),ZTSAVE("SO"))=""
 | 
|---|
| 37 |  . D ^%ZTLOAD
 | 
|---|
| 38 |  . W !!,"Report "_$S($D(ZTSK):"Queued!",1:"Cancelled!")
 | 
|---|
| 39 |  . D HOME^%ZIS
 | 
|---|
| 40 |  . Q
 | 
|---|
| 41 |  D START,^%ZISC
 | 
|---|
| 42 |  Q
 | 
|---|
| 43 | DOS() ;detail or summary
 | 
|---|
| 44 |  N DIR,Y,X
 | 
|---|
| 45 |  S DIR(0)="SA^D:Detail;S:Summary"
 | 
|---|
| 46 |  S DIR("A")="Select Type of Report to Run: "
 | 
|---|
| 47 |  D ^DIR
 | 
|---|
| 48 |  Q Y
 | 
|---|
| 49 |  ;
 | 
|---|
| 50 | GETPAT() ;get a patient
 | 
|---|
| 51 |  N DIC,Y,X,U
 | 
|---|
| 52 |  S DIC="^DPT(",DIC(0)="AEQZM" D ^DIC
 | 
|---|
| 53 |  Q $S($P(Y,U,1)>0:$P(Y,U,1),1:"")
 | 
|---|
| 54 |  ;
 | 
|---|
| 55 | ENDDATE() ;get an end date, default to TODAY
 | 
|---|
| 56 |  N DIR,Y,X
 | 
|---|
| 57 |  S DIR(0)="D^::EX",DIR("?")="^D HELP^%DTC",DIR("B")=$$FMTE^XLFDT(DT)
 | 
|---|
| 58 |  S DIR("A")="Enter End Date of 90 Day Window: "
 | 
|---|
| 59 |  D ^DIR
 | 
|---|
| 60 |  Q $S('Y:"",1:Y)
 | 
|---|
| 61 |  ;
 | 
|---|
| 62 | SORTORD() ;get sort order for summary
 | 
|---|
| 63 |  N DIR,Y,X
 | 
|---|
| 64 |  S DIR(0)="SA^S:Social Security Number;N:Name then SSN"
 | 
|---|
| 65 |  S DIR("A")="What Order Do You Want to See Output: "
 | 
|---|
| 66 |  D ^DIR
 | 
|---|
| 67 |  Q Y
 | 
|---|
| 68 |  ;
 | 
|---|
| 69 | START ; Generate Report
 | 
|---|
| 70 |  N CRT,X
 | 
|---|
| 71 |  K ^XTMP("IVMADDRP",$J)
 | 
|---|
| 72 |  S CRT=$S($E(IOST,1,2)="C-":1,1:0)
 | 
|---|
| 73 |  S X=$$BUILD(SDATE,EDATE,DOS,DFN,SO)
 | 
|---|
| 74 |  U IO W ! D REPORT W ! U 0
 | 
|---|
| 75 |  K ^XTMP("IVMADDRP",$J)
 | 
|---|
| 76 |  I $G(ZTSK) S ZTREQ="@"
 | 
|---|
| 77 |  Q
 | 
|---|
| 78 | BUILD(SDATE,EDATE,DOS,DFN,SO) ; Build the Report
 | 
|---|
| 79 |  ;use C index if you are only looking for one DFN
 | 
|---|
| 80 |  I $L(DFN) D C Q 1
 | 
|---|
| 81 |  N CHDTTM
 | 
|---|
| 82 |  S CHDTTM=SDATE
 | 
|---|
| 83 |  F  S CHDTTM=$O(^IVM(301.7,"B",CHDTTM)) Q:CHDTTM=""!(CHDTTM>(EDATE+1))  D ADDIEN
 | 
|---|
| 84 |  Q 1
 | 
|---|
| 85 | ADDIEN ;
 | 
|---|
| 86 |  N ADDIEN
 | 
|---|
| 87 |  S ADDIEN=0
 | 
|---|
| 88 |  F  S ADDIEN=$O(^IVM(301.7,"B",CHDTTM,ADDIEN)) Q:ADDIEN=""  D GETINF
 | 
|---|
| 89 |  Q
 | 
|---|
| 90 | C N ADDIEN,CHDTTM
 | 
|---|
| 91 |  S ADDIEN=""
 | 
|---|
| 92 |  F  S ADDIEN=$O(^IVM(301.7,"C",DFN,ADDIEN)) Q:ADDIEN=""  D
 | 
|---|
| 93 |  . S CHDTTM=$P($G(^IVM(301.7,ADDIEN,0)),"^",1)
 | 
|---|
| 94 |  . I (CHDTTM>SDATE),(CHDTTM<(EDATE+1)) D GETINF
 | 
|---|
| 95 |  . Q
 | 
|---|
| 96 |  Q
 | 
|---|
| 97 | GETINF ; 
 | 
|---|
| 98 |  N NODE0,NODE1,DFN,SSN,NAME,ADDR1,ADDR2,CITY,STATE,ZIP,SORT1,SORT2,U,SOURCE,SIEN,SITE
 | 
|---|
| 99 |  S U="^",SITE=""
 | 
|---|
| 100 |  S NODE0=$G(^IVM(301.7,ADDIEN,0))
 | 
|---|
| 101 |  S NODE1=$G(^IVM(301.7,ADDIEN,1))
 | 
|---|
| 102 |  S DFN=$P(NODE0,"^",2)
 | 
|---|
| 103 |  Q:DFN=""
 | 
|---|
| 104 |  Q:'$D(^DPT(DFN))
 | 
|---|
| 105 |  S SSN=$P($G(^DPT(DFN,0)),"^",9)
 | 
|---|
| 106 |  Q:SSN=""
 | 
|---|
| 107 |  S NAME=$P($G(^DPT(DFN,0)),"^",1)
 | 
|---|
| 108 |  S SOURCE=$P(NODE1,"^",4),SIEN=$P(NODE1,"^",3)
 | 
|---|
| 109 |  I SIEN S SITE=$P($G(^DIC(4,SIEN,0)),"^",1)
 | 
|---|
| 110 |  S ADDR1=$P(NODE1,"^",6)
 | 
|---|
| 111 |  S ADDR2=$P(NODE1,"^",7)
 | 
|---|
| 112 |  S CITY=$P(NODE1,"^",8)
 | 
|---|
| 113 |  S STATE=$P(NODE1,"^",10)
 | 
|---|
| 114 |  I STATE'="",$D(^DIC(5,STATE,0)) S STATE=$P(^DIC(5,STATE,0),"^",2)
 | 
|---|
| 115 |  S ZIP=$P(NODE1,"^",11)
 | 
|---|
| 116 |  I DOS="D" D  Q
 | 
|---|
| 117 |  . S ^XTMP("IVMADDRP",$J,SSN,CHDTTM)=ADDIEN_"^"_DFN_"^"_NAME_"^"_ADDR1_"^"_ADDR2_"^"_CITY_"^"_STATE_"^"_ZIP_"^"_SOURCE_"^"_SITE
 | 
|---|
| 118 |  . S ^XTMP("IVMADDRP",$J,SSN)=$G(^XTMP("IVMADDRP",$J,SSN))+1
 | 
|---|
| 119 |  . Q
 | 
|---|
| 120 |  I DOS="S" D
 | 
|---|
| 121 |  . S SORT1=$S(SO="S":SSN,1:NAME) I NAME="" S SORT1="UNKNOWN"
 | 
|---|
| 122 |  . S SORT2=$S(SO="S":0,1:SSN)
 | 
|---|
| 123 |  . S ^XTMP("IVMADDRP",$J,SORT1,SORT2,"INF")=NAME_U_SSN
 | 
|---|
| 124 |  . S ^XTMP("IVMADDRP",$J,SORT1,SORT2,"DATE",CHDTTM)=""
 | 
|---|
| 125 |  . S ^XTMP("IVMADDRP",$J,SORT1,SORT2)=$G(^XTMP("IVMADDRP",$J,SORT1,SORT2))+1
 | 
|---|
| 126 |  . Q
 | 
|---|
| 127 |  Q
 | 
|---|
| 128 | REPORT ; Display the Report
 | 
|---|
| 129 |  D HEADER
 | 
|---|
| 130 |  I '$D(^XTMP("IVMADDRP",$J)) D  Q
 | 
|---|
| 131 |  . N X S X="****** NOTHING TO REPORT ******" W !?80-$L(X)\2,X,!
 | 
|---|
| 132 |  . Q
 | 
|---|
| 133 |  I DOS="S" D SUMMARY Q
 | 
|---|
| 134 |  N SSN
 | 
|---|
| 135 |  ;
 | 
|---|
| 136 |  S SSN=""
 | 
|---|
| 137 |  F  S SSN=$O(^XTMP("IVMADDRP",$J,SSN)) Q:SSN=""  D DETAIL
 | 
|---|
| 138 |  Q
 | 
|---|
| 139 | DETAIL N NAME,CHDTTM,ADDR,ADDR2,CITY,STATE,ZIP,CSZ
 | 
|---|
| 140 |  N ADDR1,ADDR2,X,U,QUIT,CNT,SITE,SOURCE
 | 
|---|
| 141 |  S CHDTTM="",U="^",QUIT=0,CNT=0
 | 
|---|
| 142 |  I $G(^XTMP("IVMADDRP",$J,SSN))'>1 Q
 | 
|---|
| 143 |  F  S CHDTTM=$O(^XTMP("IVMADDRP",$J,SSN,CHDTTM)) Q:CHDTTM=""!(QUIT)  D
 | 
|---|
| 144 |  . S X=$G(^XTMP("IVMADDRP",$J,SSN,CHDTTM))
 | 
|---|
| 145 |  . S NAME=$P(X,U,3)
 | 
|---|
| 146 |  . S ADDR1=$P(X,U,4)
 | 
|---|
| 147 |  . S ADDR2=$P(X,U,5)
 | 
|---|
| 148 |  . S CITY=$P(X,U,6)
 | 
|---|
| 149 |  . S STATE=$P(X,U,7)
 | 
|---|
| 150 |  . S ZIP=$P(X,U,8)
 | 
|---|
| 151 |  . S SOURCE=$P(X,U,9)
 | 
|---|
| 152 |  . S SITE=$P(X,U,10)
 | 
|---|
| 153 |  . I ($Y+6)>IOSL D HEADER I QUIT Q
 | 
|---|
| 154 |  . W !,$$FSSN(SSN),?12,$E(NAME,1,20)
 | 
|---|
| 155 |  . W ?35,$$FMTE^XLFDT($P(CHDTTM,".",1))
 | 
|---|
| 156 |  . S CSZ=$$CSZ(CITY,STATE,ZIP)
 | 
|---|
| 157 |  . W ?49,$E(ADDR1,1,30),!
 | 
|---|
| 158 |  . I $L(ADDR2) W ?49,$E(ADDR2,1,30),!
 | 
|---|
| 159 |  . I $L(CSZ) W ?49,$E(CSZ,1,30),!
 | 
|---|
| 160 |  . I $L(SOURCE) W ?49,"SOURCE: ",SOURCE,!
 | 
|---|
| 161 |  . I $L(SITE) W ?49,"SITE: ",SITE
 | 
|---|
| 162 |  . S CNT=CNT+1
 | 
|---|
| 163 |  . Q
 | 
|---|
| 164 |  I 'QUIT D TOTAL(CNT)
 | 
|---|
| 165 |  Q
 | 
|---|
| 166 | SUMMARY N SORT1,QUIT,CNT
 | 
|---|
| 167 |  S SORT1="",QUIT=0,CNT=0
 | 
|---|
| 168 |  F  S SORT1=$O(^XTMP("IVMADDRP",$J,SORT1)) Q:SORT1=""!(QUIT)  D SORT2
 | 
|---|
| 169 |  I 'QUIT D TOTAL(CNT)
 | 
|---|
| 170 |  Q
 | 
|---|
| 171 | SORT2 N NAME,SSN
 | 
|---|
| 172 |  S SORT2=""
 | 
|---|
| 173 |  F  S SORT2=$O(^XTMP("IVMADDRP",$J,SORT1,SORT2)) Q:SORT2=""!(QUIT)  D
 | 
|---|
| 174 |  . I $G(^XTMP("IVMADDRP",$J,SORT1,SORT2))'>1 Q
 | 
|---|
| 175 |  . D SUMPR S CNT=CNT+1
 | 
|---|
| 176 |  . Q
 | 
|---|
| 177 |  Q
 | 
|---|
| 178 | SUMPR N X,U
 | 
|---|
| 179 |  S U="^"
 | 
|---|
| 180 |  S X=$G(^XTMP("IVMADDRP",$J,SORT1,SORT2,"INF"))
 | 
|---|
| 181 |  S NAME=$P(X,U,1),SSN=$P(X,U,2)
 | 
|---|
| 182 |  I ($Y+2)>IOSL D HEADER I QUIT Q
 | 
|---|
| 183 |  W !,$$FSSN(SSN),?12,$E(NAME,1,20)
 | 
|---|
| 184 |  W ?35,$$FMTE^XLFDT($O(^XTMP("IVMADDRP",$J,SORT1,SORT2,"DATE",""),-1))
 | 
|---|
| 185 |  S X=$G(^XTMP("IVMADDRP",$J,SORT1,SORT2))
 | 
|---|
| 186 |  W ?73,$J($FN(X,","),5)
 | 
|---|
| 187 |  Q
 | 
|---|
| 188 | TOTAL(CNT) ;
 | 
|---|
| 189 |  I ($Y+2)>IOSL D HEADER
 | 
|---|
| 190 |  W !!,"Total records found meeting criteria: ",CNT,!
 | 
|---|
| 191 |  Q
 | 
|---|
| 192 | CSZ(CITY,STATE,ZIP) ;format city, state and zip into one line
 | 
|---|
| 193 |  N X
 | 
|---|
| 194 |  S X=""
 | 
|---|
| 195 |  I $L(CITY) S X=CITY
 | 
|---|
| 196 |  I $L(STATE) D
 | 
|---|
| 197 |  . I $L(X) S X=X_", "_STATE Q
 | 
|---|
| 198 |  . S X=STATE
 | 
|---|
| 199 |  . Q
 | 
|---|
| 200 |  I $L(ZIP) D
 | 
|---|
| 201 |  . I $L(X) S X=X_"  "_ZIP Q
 | 
|---|
| 202 |  . S X=ZIP
 | 
|---|
| 203 |  . Q
 | 
|---|
| 204 |  Q X
 | 
|---|
| 205 | FSSN(SSN) ; Format the SSN
 | 
|---|
| 206 |  N FMTSSN
 | 
|---|
| 207 |  I SSN="NO SSN" Q SSN
 | 
|---|
| 208 |  I $L(SSN)=9 S FMTSSN=SSN
 | 
|---|
| 209 |  I $L(SSN)>9 S FMTSSN=$E(SSN,1,10)  ; Account for pseudo-SSN
 | 
|---|
| 210 |  I $L(SSN)<9 D
 | 
|---|
| 211 |  . S FMTSSN=""
 | 
|---|
| 212 |  . F FMTSSN=$L(SSN):1:9 S FMTSSN=FMTSSN_"0"
 | 
|---|
| 213 |  . S FMTSSN=FMTSSN_SSN
 | 
|---|
| 214 |  . Q
 | 
|---|
| 215 |  Q FMTSSN
 | 
|---|
| 216 | HEADER ; Print the header
 | 
|---|
| 217 |  N IDX,PGHDR
 | 
|---|
| 218 |  S QUIT=0
 | 
|---|
| 219 |  I $G(CRT),($G(PAGE)>0) I $$PAUSE(0) S QUIT=1 Q
 | 
|---|
| 220 |  S PAGE=$G(PAGE,0),PAGE=PAGE+1,PGHDR="Page: "_$J(PAGE,3)
 | 
|---|
| 221 |  W #
 | 
|---|
| 222 |  I $G(CRT) W $C(27,91,72,27,91,74)  ; Additional $C to clear screen in Cache'
 | 
|---|
| 223 |  S IDX="",IDX=$O(HDR(IDX))
 | 
|---|
| 224 |  W "IVM ADDRESS CHANGE LOG REPORT",?71,PGHDR
 | 
|---|
| 225 |  W !,$$FMTE^XLFDT(SDATE)_" THRU "_$$FMTE^XLFDT(EDATE)
 | 
|---|
| 226 |  I DOS="D" D
 | 
|---|
| 227 |  . W !!,"SSN",?12,"NAME",?35,"CHANGE DATE",?49,"PRIOR ADDRESS"
 | 
|---|
| 228 |  . W !,"---",?12,"----",?35,"-----------",?49,"--------------"
 | 
|---|
| 229 |  . Q
 | 
|---|
| 230 |  I DOS="S" D
 | 
|---|
| 231 |  . W !!,"SSN",?12,"NAME",?35,"LAST UPDATED",?69,"# ENTRIES"
 | 
|---|
| 232 |  . W !,"---",?12,"----",?35,"------------",?69,"---------"
 | 
|---|
| 233 |  . Q
 | 
|---|
| 234 |  Q
 | 
|---|
| 235 | PAUSE(RESP) ; Prompt user for next page or quit
 | 
|---|
| 236 |  N DIR,DIRUT,DUOUT,DTOUT,U,X,Y
 | 
|---|
| 237 |  W !
 | 
|---|
| 238 |  S DIR(0)="E"
 | 
|---|
| 239 |  D ^DIR
 | 
|---|
| 240 |  I 'Y S RESP=1
 | 
|---|
| 241 |  Q RESP
 | 
|---|