| 1 | SDAMA305 ;BPOIFO/ACS-Filter API Get Data ; 6/21/05 1:50pm | 
|---|
| 2 | ;;5.3;Scheduling;**301,347,508**;13 Aug 1993 | 
|---|
| 3 | ;PER VHA DIRECTIVE 2004-038, DO NOT MODIFY THIS ROUTINE | 
|---|
| 4 | ; | 
|---|
| 5 | ;***************************************************************** | 
|---|
| 6 | ;              CHANGE LOG | 
|---|
| 7 | ; | 
|---|
| 8 | ;  DATE      PATCH       DESCRIPTION | 
|---|
| 9 | ;--------  ----------    ----------------------------------------- | 
|---|
| 10 | ;12/04/03  SD*5.3*301    ROUTINE COMPLETED | 
|---|
| 11 | ;08/06/04  SD*5.3*347    ADDITION OF A NEW FILTER - DATE APPOINTMENT | 
|---|
| 12 | ;                        MADE (FIELD #16) AND 2 NEW FIELDS TO RETURN: | 
|---|
| 13 | ;                        1) AUTO-REBOOKED APPT DATE/TIME (FIELD #24) | 
|---|
| 14 | ;                        2) NO-SHOW/CANCEL APPT DATE/TIME (FIELD #25) | 
|---|
| 15 | ;                        RENAME ENTRY POINT TO ROUTINE | 
|---|
| 16 | ;02/22/07  SD*5.3*508    SEE SDAMA301 FOR CHANGE LIST | 
|---|
| 17 | ;***************************************************************** | 
|---|
| 18 | ; | 
|---|
| 19 | ;***************************************************************** | 
|---|
| 20 | ;              GET APPOINTMENT DATA FROM VISTA | 
|---|
| 21 | ;INPUT | 
|---|
| 22 | ;  SDARRAY    Appointment Filter array | 
|---|
| 23 | ; | 
|---|
| 24 | ;OUTPUT | 
|---|
| 25 | ;  ^TMP($J,"SDAMA301",SORT1,SORT2,APPT D/T) | 
|---|
| 26 | ;***************************************************************** | 
|---|
| 27 | SETARRAY(SDARRAY) ; | 
|---|
| 28 | ;Initialize local variables | 
|---|
| 29 | N SDI,SDIEN,SDNAME,SDFLDS,SDDATA,SDCOUNT,SDFIELD,SDCLIEN,SDDV,SDSCRTCH | 
|---|
| 30 | S SDFLDS=SDARRAY("FLDS") | 
|---|
| 31 | S SDCOUNT=$L(SDFLDS,";") | 
|---|
| 32 | ;Add 1 to appointment count | 
|---|
| 33 | S SDARRAY("CNT")=(SDARRAY("CNT")+1) | 
|---|
| 34 | ;For each appoitment field requested | 
|---|
| 35 | F SDI=1:1:SDCOUNT D | 
|---|
| 36 | . S (SDIEN,SDNAME,SDDATA)="" | 
|---|
| 37 | . S SDFIELD=$P(SDFLDS,";",SDI) | 
|---|
| 38 | . ;get data | 
|---|
| 39 | . D @SDFIELD | 
|---|
| 40 | . ;nodes in output global can't be null | 
|---|
| 41 | . I $G(SDARRAY("SORT1"))="" S SDARRAY("SORT1")="X"_SDARRAY("CNT") | 
|---|
| 42 | . I $G(SDARRAY("SORT2"))="" S SDARRAY("SORT2")="Y"_SDARRAY("CNT") | 
|---|
| 43 | . ;add data to output array | 
|---|
| 44 | . ;Store information with just Patient IEN (No Clinic IEN) in the global reference | 
|---|
| 45 | . I $G(SDARRAY("SORT"))="P" D | 
|---|
| 46 | . .S:(SDFIELD<28) $P(^TMP($J,"SDAMA301",$G(SDARRAY("PAT")),SDARRAY("DATE")),"^",SDFIELD)=$S(SDFIELD=6:"",1:$G(SDDV(SDFIELD))) | 
|---|
| 47 | . .S:(SDFIELD>27) $P(^TMP($J,"SDAMA301",$G(SDARRAY("PAT")),SDARRAY("DATE"),0),"^",(SDFIELD#27))=$G(SDDV(SDFIELD)) | 
|---|
| 48 | . .S:(SDFIELD=6) ^TMP($J,"SDAMA301",$G(SDARRAY("PAT")),SDARRAY("DATE"),"C")=$G(SDDV(SDFIELD)) | 
|---|
| 49 | . ;Store information with Patient and Clinic IEN (Sort1, Sort2) in the global reference | 
|---|
| 50 | . I $G(SDARRAY("SORT"))'="P" D | 
|---|
| 51 | . .S:(SDFIELD<28) $P(^TMP($J,"SDAMA301",SDARRAY("SORT1"),SDARRAY("SORT2"),SDARRAY("DATE")),"^",SDFIELD)=$S(SDFIELD=6:"",1:$G(SDDV(SDFIELD))) | 
|---|
| 52 | . .S:(SDFIELD>27) $P(^TMP($J,"SDAMA301",SDARRAY("SORT1"),SDARRAY("SORT2"),SDARRAY("DATE"),0),"^",(SDFIELD#27))=$G(SDDV(SDFIELD)) | 
|---|
| 53 | . .S:(SDFIELD=6) ^TMP($J,"SDAMA301",SDARRAY("SORT1"),SDARRAY("SORT2"),SDARRAY("DATE"),"C")=$G(SDDV(SDFIELD)) | 
|---|
| 54 | Q | 
|---|
| 55 | 1 ;Appt date/time | 
|---|
| 56 | S SDDV(SDFIELD)=SDARRAY("DATE") | 
|---|
| 57 | Q | 
|---|
| 58 | 2 ;Clinic IEN and Name | 
|---|
| 59 | S SDIEN=+$G(SDARRAY("DPT0")) | 
|---|
| 60 | I '$G(SDIEN) S SDNAME="" | 
|---|
| 61 | E  S SDNAME=$P($G(^SC(SDIEN,0)),"^",1) | 
|---|
| 62 | S SDDV(SDFIELD)=$G(SDIEN)_";"_$G(SDNAME) | 
|---|
| 63 | Q | 
|---|
| 64 | 3 ;Appt Status and Status Description | 
|---|
| 65 | N SDSTAT | 
|---|
| 66 | S SDSTAT=$P($G(SDARRAY("DPT0")),"^",2) | 
|---|
| 67 | I $G(SDSTAT)="" S SDDATA="R;SCHEDULED/KEPT" | 
|---|
| 68 | E  D | 
|---|
| 69 | . S SDDATA=$S(SDSTAT="I":"I;INPATIENT",SDSTAT="C":"CC;CANCELLED BY CLINIC",1:"X") | 
|---|
| 70 | . I SDDATA="X" S SDDATA=$S(SDSTAT="CA":"CCR;CANCELLED BY CLINIC & RESCHEDULED",SDSTAT="PC":"CP;CANCELLED BY PATIENT",1:"X") | 
|---|
| 71 | . I SDDATA="X" S SDDATA=$S(SDSTAT="PCA":"CPR;CANCELLED BY PATIENT & RESCHEDULED",SDSTAT="N":"NS;NO-SHOW",1:"X") | 
|---|
| 72 | . I SDDATA="X" S SDDATA=$S(SDSTAT="NA":"NSR;NO-SHOW & RESCHEDULED",SDSTAT="NT":"NT;NO ACTION TAKEN",1:SDSTAT_";UNKNOWN") | 
|---|
| 73 | S SDDV(SDFIELD)=SDDATA | 
|---|
| 74 | Q | 
|---|
| 75 | 4 ;Patient IEN and Name | 
|---|
| 76 | S SDIEN=$G(SDARRAY("PAT")) | 
|---|
| 77 | S SDNAME=$P($G(^DPT(SDIEN,0)),"^",1) | 
|---|
| 78 | S SDDV(SDFIELD)=$G(SDIEN)_";"_$G(SDNAME) | 
|---|
| 79 | Q | 
|---|
| 80 | 5 ;Length of Appt | 
|---|
| 81 | S SDDV(SDFIELD)=$P($G(SDARRAY("SC0")),"^",2) | 
|---|
| 82 | Q | 
|---|
| 83 | 6 ;Comments | 
|---|
| 84 | S SDDV(SDFIELD)=$P($G(SDARRAY("SC0")),"^",4) | 
|---|
| 85 | Q | 
|---|
| 86 | 7 ;Overbook (return null if appt cancelled) | 
|---|
| 87 | I $G(SDARRAY("SC0"))'="" D | 
|---|
| 88 | . S SDDATA=$P($G(SDARRAY("SCOB")),"^",1) | 
|---|
| 89 | . S SDDV(SDFIELD)=$S($G(SDDATA)="O":"Y",1:"N") | 
|---|
| 90 | Q | 
|---|
| 91 | 8 ;Local & National Eligiblity of Visit Codes and Names | 
|---|
| 92 | N SDELIG,SDPELIG,SDASTS,DFN,VAROOT,VAERR | 
|---|
| 93 | S VAERR=0,SDDATA=$P($G(SDARRAY("SC0")),"^",10) | 
|---|
| 94 | S SDASTS=$P($G(SDARRAY("DPT0")),"^",2) | 
|---|
| 95 | ;if eligibility is null, get patients primary eligibility | 
|---|
| 96 | ;  * only if appointment status is not cancelled * | 
|---|
| 97 | I (($G(SDDATA)']"")&($G(SDASTS)'["C")) D | 
|---|
| 98 | . S VAROOT="SDPELIG",DFN=$G(SDARRAY("PAT")) D ELIG^VADPT | 
|---|
| 99 | . S SDDATA=$P(SDPELIG(1),"^") | 
|---|
| 100 | ;get local/national eligibility to add to output if | 
|---|
| 101 | ;ELIG^VADPT did not error and the ien is not null | 
|---|
| 102 | I (('VAERR)&($G(SDDATA)]"")) D | 
|---|
| 103 | . S SDELIG=$G(^DIC(8,SDDATA,0)) | 
|---|
| 104 | . ;Append Local Eligibility IEN and Name | 
|---|
| 105 | . S SDDV(SDFIELD)=$G(SDDATA)_";"_$P(SDELIG,"^") | 
|---|
| 106 | . ;Append National Eligibility IEN and Name | 
|---|
| 107 | . S SDIEN=$P(SDELIG,"^",9) | 
|---|
| 108 | . I $G(SDIEN) D | 
|---|
| 109 | .. S SDNAME=$P($G(^DIC(8.1,SDIEN,0)),"^",1) | 
|---|
| 110 | .. S SDDV(SDFIELD)=SDDV(SDFIELD)_";"_$G(SDIEN)_";"_$G(SDNAME) | 
|---|
| 111 | Q | 
|---|
| 112 | 9 ;Check-In Date/time | 
|---|
| 113 | S SDSCRTCH=$P($G(SDARRAY("SCC")),"^",1) | 
|---|
| 114 | S SDDV(SDFIELD)=$S($L(SDSCRTCH)<13:SDSCRTCH,1:$E(SDSCRTCH,1,12)) | 
|---|
| 115 | Q | 
|---|
| 116 | 10 ;Appt Type IEN and Name | 
|---|
| 117 | S SDIEN=$P($G(SDARRAY("DPT0")),"^",16) | 
|---|
| 118 | I $G(SDIEN)]"" D | 
|---|
| 119 | . S SDNAME=$P($G(^SD(409.1,SDIEN,0)),"^",1) | 
|---|
| 120 | . S SDDV(SDFIELD)=$G(SDIEN)_";"_$G(SDNAME) | 
|---|
| 121 | Q | 
|---|
| 122 | 11 ;Check-Out date/time | 
|---|
| 123 | S SDSCRTCH=$P($G(SDARRAY("SCC")),"^",3) | 
|---|
| 124 | S SDDV(SDFIELD)=$S($L(SDSCRTCH)<13:SDSCRTCH,1:$E(SDSCRTCH,1,12)) | 
|---|
| 125 | Q | 
|---|
| 126 | 12 ;Outpatient Encounter | 
|---|
| 127 | S SDDV(SDFIELD)=$P($G(SDARRAY("DPT0")),"^",20) | 
|---|
| 128 | Q | 
|---|
| 129 | 13 ;Primary Stop Code IEN and AMIS STOP CODE | 
|---|
| 130 | N SDCODES | 
|---|
| 131 | S SDCLIEN=+SDARRAY("DPT0") | 
|---|
| 132 | I $G(SDCLIEN)]"" D | 
|---|
| 133 | . S SDCODES=$$GETSTOP(SDCLIEN) | 
|---|
| 134 | . I SDCODES'=-1 S SDDV(SDFIELD)=$P(SDCODES,"^",1) | 
|---|
| 135 | Q | 
|---|
| 136 | 14 ;Credit Stop Code IEN and AMIS STOP CODE | 
|---|
| 137 | S SDCLIEN=+SDARRAY("DPT0") | 
|---|
| 138 | I $G(SDCLIEN)]"" D | 
|---|
| 139 | . S SDCODES=$$GETSTOP(SDCLIEN) | 
|---|
| 140 | . I SDCODES'=-1 S SDDV(SDFIELD)=$P(SDCODES,"^",2) | 
|---|
| 141 | Q | 
|---|
| 142 | 15 ;Workload Non-Count | 
|---|
| 143 | S SDCLIEN=+SDARRAY("DPT0") | 
|---|
| 144 | I $G(SDCLIEN)]"" D | 
|---|
| 145 | . S SDCODES=$$GETSTOP(SDCLIEN) | 
|---|
| 146 | . I SDCODES'=-1 S SDDV(SDFIELD)=$P($G(SDCODES),"^",3) | 
|---|
| 147 | Q | 
|---|
| 148 | 16 ;Date Appt Made | 
|---|
| 149 | S SDDV(SDFIELD)=$P($P($G(SDARRAY("DPT0")),"^",19),".") | 
|---|
| 150 | Q | 
|---|
| 151 | 17 ;Desired Date of Appt | 
|---|
| 152 | S SDDV(SDFIELD)=$P($P($G(SDARRAY("DPT1")),"^",1),".") | 
|---|
| 153 | Q | 
|---|
| 154 | 18 ;Purpose of Visit | 
|---|
| 155 | S SDDATA=$P($G(SDARRAY("DPT0")),"^",7) | 
|---|
| 156 | I $G(SDDATA)'="" D | 
|---|
| 157 | . S SDDATA=SDDATA_$S(SDDATA="1":";C&P",SDDATA="2":";10-10",SDDATA="3":";SV",SDDATA="4":";UV",1:";") | 
|---|
| 158 | . S SDDV(SDFIELD)=SDDATA | 
|---|
| 159 | Q | 
|---|
| 160 | 19 ;EKG Date/time | 
|---|
| 161 | S SDSCRTCH=$P($G(SDARRAY("DPT0")),"^",5) | 
|---|
| 162 | S SDDV(SDFIELD)=$S($L(SDSCRTCH)<13:SDSCRTCH,1:$E(SDSCRTCH,1,12)) | 
|---|
| 163 | Q | 
|---|
| 164 | 20 ;X-Ray Date/time | 
|---|
| 165 | S SDSCRTCH=$P($G(SDARRAY("DPT0")),"^",4) | 
|---|
| 166 | S SDDV(SDFIELD)=$S($L(SDSCRTCH)<13:SDSCRTCH,1:$E(SDSCRTCH,1,12)) | 
|---|
| 167 | Q | 
|---|
| 168 | 21 ;Lab Date/time | 
|---|
| 169 | S SDSCRTCH=$P($G(SDARRAY("DPT0")),"^",3) | 
|---|
| 170 | S SDDV(SDFIELD)=$S($L(SDSCRTCH)<13:SDSCRTCH,1:$E(SDSCRTCH,1,12)) | 
|---|
| 171 | Q | 
|---|
| 172 | 22 ;Status | 
|---|
| 173 | ;   (Status IEN; Status Description; Print Status; Checked In Date/Time; | 
|---|
| 174 | ;       Checked Out Date/Time; Admission Movement IEN) | 
|---|
| 175 | ;convert to new appt status code | 
|---|
| 176 | D 3 | 
|---|
| 177 | S SDDV(SDFIELD)=$$STATUS^SDAMA308(+$G(SDARRAY("PAT")),+$G(SDARRAY("DATE")),+$G(SDARRAY("DPT0")),$P(SDDV(SDFIELD),";"),$P($G(SDARRAY("SCC")),"^"),$P($G(SDARRAY("SCC")),"^",3),$P($G(SDARRAY("DPT0")),"^",20)) | 
|---|
| 178 | Q | 
|---|
| 179 | 23 ;X-Ray Films | 
|---|
| 180 | N SDRECS | 
|---|
| 181 | ;Get Clinic IEN, X-Ray Films Required | 
|---|
| 182 | S SDIEN=+$G(SDARRAY("DPT0")) | 
|---|
| 183 | S SDRECS=$P($G(^SC(SDIEN,"RAD")),"^") | 
|---|
| 184 | ;Translate Lower Case to Upper | 
|---|
| 185 | S SDRECS=$TR(SDRECS,"ny","NY") | 
|---|
| 186 | S SDDATA=$S(SDRECS["Y":"Y",1:"N") | 
|---|
| 187 | S SDDV(SDFIELD)=SDDATA | 
|---|
| 188 | Q | 
|---|
| 189 | 24 ;Auto-Rebooked Appt. Date/Time | 
|---|
| 190 | S SDSCRTCH=$P($G(SDARRAY("DPT0")),"^",10) | 
|---|
| 191 | S SDDV(SDFIELD)=$S($L(SDSCRTCH)<13:SDSCRTCH,1:$E(SDSCRTCH,1,12)) | 
|---|
| 192 | Q | 
|---|
| 193 | 25 ;No-Show/Cancel Date/Time | 
|---|
| 194 | S SDSCRTCH=$P($G(SDARRAY("DPT0")),"^",14) | 
|---|
| 195 | S SDDV(SDFIELD)=$S($L(SDSCRTCH)<13:SDSCRTCH,1:$E(SDSCRTCH,1,12)) | 
|---|
| 196 | Q | 
|---|
| 197 | ;This field is only associated with appt info from RSA | 
|---|
| 198 | ;(No VistA Scheduling Value Exists) | 
|---|
| 199 | 26 ;RSA Appointment ID | 
|---|
| 200 | Q | 
|---|
| 201 | 27 ;2507 Request IEN | 
|---|
| 202 | ;N SDREQ | 
|---|
| 203 | ;retrieve 2507 request for patient's appt | 
|---|
| 204 | ;S SDREQ=$$GET2507^DVBCMKLK(+$G(SDARRAY("PAT")),$G(SDARRAY("DATE"))) | 
|---|
| 205 | ;S SDDV(SDFIELD)=$S((SDREQ>0):SDREQ,1:"") | 
|---|
| 206 | Q | 
|---|
| 207 | 28 ;Data Entry Clerk DUZ and Name | 
|---|
| 208 | N SDSTAT | 
|---|
| 209 | S SDSTAT=$P($G(SDARRAY("DPT0")),"^",2)  ;determine appt status | 
|---|
| 210 | ;Appt is deleted from ^SC when appt is cancelled | 
|---|
| 211 | S SDSCRTCH=$S(SDSTAT["C":$P($G(SDARRAY("DPT0")),"^",18),1:$P($G(SDARRAY("SC0")),"^",6)) | 
|---|
| 212 | S:(+SDSCRTCH) SDDV(SDFIELD)=SDSCRTCH_";"_$$GET1^DIQ(200,SDSCRTCH,.01) | 
|---|
| 213 | Q | 
|---|
| 214 | 29 ;No-Show/Cancelled By DUZ and Name | 
|---|
| 215 | S SDSCRTCH=$P($G(SDARRAY("DPT0")),"^",12) | 
|---|
| 216 | S:(+SDSCRTCH) SDDV(SDFIELD)=SDSCRTCH_";"_$$GET1^DIQ(200,SDSCRTCH,.01) | 
|---|
| 217 | Q | 
|---|
| 218 | 30 ;Check-In User DUZ and Name | 
|---|
| 219 | S SDSCRTCH=$P($G(SDARRAY("SCC")),"^",2) | 
|---|
| 220 | S:(+SDSCRTCH) SDDV(SDFIELD)=SDSCRTCH_";"_$$GET1^DIQ(200,SDSCRTCH,.01) | 
|---|
| 221 | Q | 
|---|
| 222 | 31 ;Check-Out User DUZ and Name | 
|---|
| 223 | S SDSCRTCH=$P($G(SDARRAY("SCC")),"^",4) | 
|---|
| 224 | S:(+SDSCRTCH) SDDV(SDFIELD)=SDSCRTCH_";"_$$GET1^DIQ(200,SDSCRTCH,.01) | 
|---|
| 225 | Q | 
|---|
| 226 | 32 ;Cancellation Reason IEN and Name | 
|---|
| 227 | S SDSCRTCH=$P($G(SDARRAY("DPT0")),"^",15) | 
|---|
| 228 | S:(+SDSCRTCH) SDDV(SDFIELD)=SDSCRTCH_";"_$$GET1^DIQ(409.2,SDSCRTCH,.01) | 
|---|
| 229 | Q | 
|---|
| 230 | 33 ;Consult Link IEN | 
|---|
| 231 | S SDDV(SDFIELD)=$G(SDARRAY("SCONS")) | 
|---|
| 232 | Q | 
|---|
| 233 | GETSTOP(SDCLIEN) ;Primary Stop Code, Credit Stop Code, Non-Count | 
|---|
| 234 | ; return codes or -1 if bad clinic | 
|---|
| 235 | N SDPSC,SDPSCIEN,SDCSC,SDCSCIEN,SDNC,SDCODES | 
|---|
| 236 | I +$G(SDCLIEN)=0 S SDCODES=-1 | 
|---|
| 237 | I +$G(SDCLIEN)'=0 D | 
|---|
| 238 | . ;make sure clinic is on ^SC | 
|---|
| 239 | . I '$D(^SC(SDCLIEN)) S SDCODES=-1 Q | 
|---|
| 240 | . ;get primary stop code ien | 
|---|
| 241 | . S SDPSCIEN=$P($G(^SC(SDCLIEN,0)),"^",7) | 
|---|
| 242 | . ;get credit stop code ien | 
|---|
| 243 | . S SDCSCIEN=$P($G(^SC(SDCLIEN,0)),"^",18) | 
|---|
| 244 | . I $G(SDPSCIEN) S SDPSC=$P($G(^DIC(40.7,SDPSCIEN,0)),"^",2) | 
|---|
| 245 | . I $G(SDCSCIEN) S SDCSC=$P($G(^DIC(40.7,SDCSCIEN,0)),"^",2) | 
|---|
| 246 | . ;get workload non-count | 
|---|
| 247 | . S SDNC=$P($G(^SC(SDCLIEN,0)),"^",17) | 
|---|
| 248 | . S SDNC=$S($G(SDNC)="Y":"Y",1:"N") | 
|---|
| 249 | . S SDCODES=$G(SDPSCIEN)_";"_$G(SDPSC)_"^"_$G(SDCSCIEN)_";"_$G(SDCSC)_"^"_SDNC | 
|---|
| 250 | Q SDCODES | 
|---|