| [613] | 1 | QACI2D ; OAKOIFO/TKW - DATA MIGRATION - BUILD LEGACY DATA TO BE MIGRATED (CONT.) ;11/30/06  12:06 | 
|---|
|  | 2 | ;;2.0;Patient Representative;**19**;07/25/1995;Build 55 | 
|---|
|  | 3 | ENISS(ROCIEN,ROCNO,OLDROC,QACI0,ROCCNT,RESERR,HL,PARENT,STATION,PATSCNT) ; Move Issue Code and related data to output global | 
|---|
|  | 4 | N I,J,X,ROCISS,ISSIEN,ISSLIST,ISSCODE,ISSNAME,FSOSIEN,FSOS,FSOSCNT,ERR,HLID,HLNAME,EMPID,EMP,EMPNAME,EMPCNT,NEWITXT,ISACTIVE,ITXT,HLINST,ROCDT | 
|---|
|  | 5 | S ERR=0 | 
|---|
|  | 6 | ; Read through Issue Codes, build lists of active/inactive codes | 
|---|
|  | 7 | F ROCISS=0:0 S ROCISS=$O(^QA(745.1,ROCIEN,3,ROCISS)) Q:'ROCISS!(ERR)  S ISSIEN=$P($G(^(ROCISS,0)),"^") D:ISSIEN]"" | 
|---|
|  | 8 | . S X="" | 
|---|
|  | 9 | . I ISSIEN S X=$G(^QA(745.2,ISSIEN,0)) | 
|---|
|  | 10 | . I X="" D ERROC^QACI2A(OLDROC,"Issue Code Pointer "_+X_" is invalid") Q | 
|---|
|  | 11 | . S ISSCODE=$P(X,"^"),ISSNAME=$P(X,"^",3) | 
|---|
|  | 12 | . I ISSCODE=""!(ISSNAME="") S ERR=1 D ERROC^QACI2A(OLDROC,"Issue Code or Issue Code Name NULL") Q | 
|---|
|  | 13 | . ; Set a flag based on whether this is an active (migrated) issue code. | 
|---|
|  | 14 | . S ISACTIVE=$S($D(^XTMP("QACMIGR","ISS","D",ISSCODE)):1,1:0) | 
|---|
|  | 15 | . S ISSLIST(ISACTIVE,ROCISS)=ISSIEN_"^"_ISSCODE_"^"_ISSNAME | 
|---|
|  | 16 | . Q | 
|---|
|  | 17 | ; | 
|---|
|  | 18 | ; If there are no issue codes, and date of contact after FY2003, generate an error | 
|---|
|  | 19 | I '$D(ISSLIST) D  Q:ERR ERR | 
|---|
|  | 20 | . N ROCDT S ROCDT=$P(^QA(745.1,ROCIEN,0),"^",2) | 
|---|
|  | 21 | . I ROCDT<3031001 S ISSLIST(0,1)=0 Q | 
|---|
|  | 22 | . S ERR=1 D ERROC^QACI2A(OLDROC,"ROC Has no valid Issue Codes") | 
|---|
|  | 23 | . Q | 
|---|
|  | 24 | ; | 
|---|
|  | 25 | ; Build hospital location ref table data if there's at least one active issue code to migrate | 
|---|
|  | 26 | S (HLNAME,HLINST)="" | 
|---|
|  | 27 | I HL]"" D | 
|---|
|  | 28 | . S HLNAME=$P($G(^SC(+HL,0)),"^") | 
|---|
|  | 29 | . Q:'$O(ISSLIST(1,0)) | 
|---|
|  | 30 | . ; First check for errors on Hospital Location | 
|---|
|  | 31 | . I HLNAME="",'$D(^SC(+HL,0)) S ERR=1 D  Q | 
|---|
|  | 32 | .. D ERROC^QACI2A(OLDROC,"LOCATION OF EVENT pointer "_+HL_" is invalid") Q | 
|---|
|  | 33 | . I HLNAME="" S ERR=1 D | 
|---|
|  | 34 | .. D ERROC^QACI2A(OLDROC,"LOCATION OF EVENT Name field is NULL") Q | 
|---|
|  | 35 | . I $D(^XTMP("QACMIGR","HL","E",HL)) D  Q | 
|---|
|  | 36 | .. D ERROC^QACI2A(OLDROC,"LOCATION OF EVENT has invalid data -- see ref data report") Q | 
|---|
|  | 37 | . S HLINST=$P($G(^XTMP("QACMIGR","HL","U",HL)),"^",3) Q:HLINST]"" | 
|---|
|  | 38 | . ; Build Reference Table data for Hospital Location | 
|---|
|  | 39 | . D HLDATA(STATION,HL,QACI0,.ERR,.HLINST,.PATSCNT) | 
|---|
|  | 40 | . I ERR D ERROC^QACI2A(OLDROC,"LOCATION OF EVENT has invalid data -- see ref data report") | 
|---|
|  | 41 | . Q | 
|---|
|  | 42 | ; | 
|---|
|  | 43 | ; Build list of employees. | 
|---|
|  | 44 | S EMPCNT=0 | 
|---|
|  | 45 | F I=0:0 S I=$O(^QA(745.1,ROCIEN,8,I)) Q:'I  S EMP=$P($G(^(I,0)),"^") D:EMP]"" | 
|---|
|  | 46 | . S EMPNAME="" | 
|---|
|  | 47 | . ; Check for errors on Employee data | 
|---|
|  | 48 | . I '$D(^VA(200,+EMP,0)) D  Q | 
|---|
|  | 49 | .. D ERROC^QACI2A(OLDROC,"EMPLOYEE pointer "_+EMP_" is invalid") | 
|---|
|  | 50 | .. S ERR=1 Q | 
|---|
|  | 51 | . S EMPNAME=$P(^VA(200,+EMP,0),"^") | 
|---|
|  | 52 | . S EMP(EMP)=EMPNAME,EMPCNT=EMPCNT+1 | 
|---|
|  | 53 | . ; Quit if there are no active issue codes to migrate. | 
|---|
|  | 54 | . Q:'$O(ISSLIST(1,0)) | 
|---|
|  | 55 | . I EMPNAME="" D  Q | 
|---|
|  | 56 | .. S ERR=1 | 
|---|
|  | 57 | .. D ERREF^QACI2C("EMPINV",EMP,"Name missing") | 
|---|
|  | 58 | .. D ERROC^QACI2A(OLDROC,"EMPLOYEE Name is NULL -- see EMP.INVOLVED on ref data report") Q | 
|---|
|  | 59 | . ; Build reference table data for Employee Involved. | 
|---|
|  | 60 | . D USERDATA^QACI2B(PARENT,EMP,"E",QACI0,.ERR,.PATSCNT) | 
|---|
|  | 61 | . I ERR D ERROC^QACI2A(OLDROC,"EMPLOYEE has invalid data -- see EMP.INVOLVED on ref data report") | 
|---|
|  | 62 | . Q | 
|---|
|  | 63 | Q:ERR ERR | 
|---|
|  | 64 | ; | 
|---|
|  | 65 | ; | 
|---|
|  | 66 | ; For inactive issue codes, issue multiple data goes in resolution text. | 
|---|
|  | 67 | I $O(ISSLIST(0,0)) D | 
|---|
|  | 68 | . N RTXTCNT,RESERR1,RESERR2 | 
|---|
|  | 69 | . S RESERR2=" char.(8000 maximum)" | 
|---|
|  | 70 | . ; Set current resolution text number of characters and error code | 
|---|
|  | 71 | . I 'RESERR D | 
|---|
|  | 72 | .. S RTXTCNT=0 | 
|---|
|  | 73 | .. S RESERR1="Resolution Text" Q | 
|---|
|  | 74 | . E  D | 
|---|
|  | 75 | .. S RTXTCNT=$P(RESERR,"^") | 
|---|
|  | 76 | .. S RESERR1=$P(RESERR,"^",2)_" + Issue Code Data" Q | 
|---|
|  | 77 | . ; Add header to resolution text. | 
|---|
|  | 78 | . S RTXTCNT=RTXTCNT+34 | 
|---|
|  | 79 | . I 'QACI0,RTXTCNT'>8000 D | 
|---|
|  | 80 | .. I RTXTCNT>0 S ^XTMP("QACMIGR","ROC","U",ROCNO_" ",ROCCNT+1)=ROCNO_"^RTXT^ ",^(ROCCNT+2)=ROCNO_"^RTXT^ ",ROCCNT=ROCCNT+2 | 
|---|
|  | 81 | .. I $P($G(ISSLIST(0,1)),"^")=0 S X="**  No Issue Code Assigned  **" | 
|---|
|  | 82 | .. E  S X="**  Inactive Issue Code Data  **" | 
|---|
|  | 83 | .. S ROCCNT=ROCCNT+1,^XTMP("QACMIGR","ROC","U",ROCNO_" ",ROCCNT)=ROCNO_"^RTXT^"_X | 
|---|
|  | 84 | .. Q | 
|---|
|  | 85 | . ; Add Hospital Location data to Resolution Text | 
|---|
|  | 86 | . I HL]"" D | 
|---|
|  | 87 | .. I 'HL S HLNAME=HL | 
|---|
|  | 88 | .. S:HLNAME="" HLNAME="*Unknown*" | 
|---|
|  | 89 | .. S RTXTCNT=RTXTCNT+$L(HLNAME)+12 | 
|---|
|  | 90 | .. I 'QACI0,RTXTCNT'>8000 D | 
|---|
|  | 91 | ... S ^XTMP("QACMIGR","ROC","U",ROCNO_" ",ROCCNT+1)=ROCNO_"^RTXT^ " | 
|---|
|  | 92 | ... S ^XTMP("QACMIGR","ROC","U",ROCNO_" ",ROCCNT+2)=ROCNO_"^RTXT^Hosp.Loc.: "_HLNAME | 
|---|
|  | 93 | ... S ROCCNT=ROCCNT+2 Q | 
|---|
|  | 94 | .. Q | 
|---|
|  | 95 | . ; Add Employee Involved data to Resolution Text | 
|---|
|  | 96 | . F EMP=0:0 S EMP=$O(EMP(EMP)) Q:'EMP  D | 
|---|
|  | 97 | .. S EMPNAME=EMP(EMP) | 
|---|
|  | 98 | .. S:EMPNAME="" EMPNAME="*Unknown*" | 
|---|
|  | 99 | .. S RTXTCNT=RTXTCNT+$L(EMPNAME)+11 | 
|---|
|  | 100 | .. I 'QACI0,RTXTCNT'>8000 D | 
|---|
|  | 101 | ... S ^XTMP("QACMIGR","ROC","U",ROCNO_" ",ROCCNT+1)=ROCNO_"^RTXT^ " | 
|---|
|  | 102 | ... S ^XTMP("QACMIGR","ROC","U",ROCNO_" ",ROCCNT+2)=ROCNO_"^RTXT^Emp.Inv.: "_EMPNAME | 
|---|
|  | 103 | ... S ROCCNT=ROCCNT+2 Q | 
|---|
|  | 104 | .. Q | 
|---|
|  | 105 | . ; Add Issue Code and Service/Discipline data to Resolution Text | 
|---|
|  | 106 | . F I=0:0 S I=$O(ISSLIST(0,I)) Q:'I  S X=ISSLIST(0,I) D:X | 
|---|
|  | 107 | .. S ISSCODE=$P(X,"^",2),ISSNAME=$P(X,"^",3) S:ISSCODE="" ISSCODE="*Unknown*" | 
|---|
|  | 108 | .. S RTXTCNT=RTXTCNT+$L(ISSNAME)+19 | 
|---|
|  | 109 | .. I 'QACI0,RTXTCNT'>8000 D | 
|---|
|  | 110 | ... S ^XTMP("QACMIGR","ROC","U",ROCNO_" ",ROCCNT+1)=ROCNO_"^RTXT^ " | 
|---|
|  | 111 | ... S ^XTMP("QACMIGR","ROC","U",ROCNO_" ",ROCCNT+2)=ROCNO_"^RTXT^Issue Code: "_ISSCODE_"  "_ISSNAME | 
|---|
|  | 112 | ... S ROCCNT=ROCCNT+2 Q | 
|---|
|  | 113 | .. ; Read through Service/Discipline multiples | 
|---|
|  | 114 | .. F J=0:0 S J=$O(^QA(745.1,ROCIEN,3,I,3,J)) Q:'J  S FSOSIEN=$P($G(^(J,0)),"^") D:FSOSIEN | 
|---|
|  | 115 | ... S X=$P($G(^QA(745.55,FSOSIEN,0)),"^") | 
|---|
|  | 116 | ... S:X="" X="*Unknown*" | 
|---|
|  | 117 | ... S RTXTCNT=RTXTCNT+$L(X)+14 | 
|---|
|  | 118 | ... I 'QACI0,RTXTCNT'>8000 D | 
|---|
|  | 119 | .... S ^XTMP("QACMIGR","ROC","U",ROCNO_" ",ROCCNT+1)=ROCNO_"^RTXT^ " | 
|---|
|  | 120 | .... S ^XTMP("QACMIGR","ROC","U",ROCNO_" ",ROCCNT+2)=ROCNO_"^RTXT^  Serv/Disc: "_X | 
|---|
|  | 121 | .... S ROCCNT=ROCCNT+2 Q | 
|---|
|  | 122 | ... Q | 
|---|
|  | 123 | .. Q | 
|---|
|  | 124 | . I RTXTCNT>8000 D | 
|---|
|  | 125 | .. D ERROC^QACI2A(OLDROC,RESERR1_"="_RTXTCNT_RESERR2) | 
|---|
|  | 126 | .. S ERR=1 Q | 
|---|
|  | 127 | . Q | 
|---|
|  | 128 | ; | 
|---|
|  | 129 | ; | 
|---|
|  | 130 | ; For active issue codes, build issue code multiple data for the ROC. | 
|---|
|  | 131 | F I=0:0 S I=$O(ISSLIST(1,I)) Q:'I  S X=ISSLIST(1,I) D | 
|---|
|  | 132 | . S ISSCODE=$P(X,"^",2) | 
|---|
|  | 133 | . ; | 
|---|
|  | 134 | . ; Read through Service/Discipline multiple | 
|---|
|  | 135 | . S FSOSCNT=0,FSOSNAME="" | 
|---|
|  | 136 | . F J=0:0 S J=$O(^QA(745.1,ROCIEN,3,I,3,J)) Q:'J!(ERR)  S FSOSIEN=$P($G(^(J,0)),"^") D:FSOSIEN]"" | 
|---|
|  | 137 | .. ; Check for errors | 
|---|
|  | 138 | .. I '$D(^QA(745.55,+FSOSIEN,0)) D  Q | 
|---|
|  | 139 | ... D ERROC^QACI2A(OLDROC,"SERVICE/DISCIPLINE pointer "_+FSOSIEN_" is invalid") | 
|---|
|  | 140 | ... S ERR=1 Q | 
|---|
|  | 141 | .. S FSOSNAME=$P(^QA(745.55,+FSOSIEN,0),"^") | 
|---|
|  | 142 | .. I $$TXTERR^QACI2C(FSOSNAME,50,0,1) D | 
|---|
|  | 143 | ... S ERR=1 | 
|---|
|  | 144 | ... D ERROC^QACI2A(OLDROC,"SERVICE/DISCIPLINE on issue "_ISSCODE_" invalid -- see ref data report") | 
|---|
|  | 145 | ... Q | 
|---|
|  | 146 | .. ; Build reference table data for FSOS | 
|---|
|  | 147 | .. D BLDFSOS^QACI2A(FSOSIEN,FSOSNAME,QACI0,.PATSCNT) | 
|---|
|  | 148 | .. ; Quit if errors were encountered in FSOS data | 
|---|
|  | 149 | .. I $D(^XTMP("QACMIGR","FSOS","E",FSOSIEN)) S ERR=1 Q | 
|---|
|  | 150 | .. S FSOSCNT=FSOSCNT+1 | 
|---|
|  | 151 | .. ; | 
|---|
|  | 152 | .. ; Set ROC Issue data for Issue Multiples with both FSOS and Employees | 
|---|
|  | 153 | .. I EMPCNT D  Q | 
|---|
|  | 154 | ... F EMP=0:0 S EMP=$O(EMP(EMP)) Q:'EMP  D:'QACI0 SETDATA | 
|---|
|  | 155 | ... Q | 
|---|
|  | 156 | .. ; If no employees notified, set Issue Multiples with FSOS | 
|---|
|  | 157 | .. S EMP="" D:'QACI0 SETDATA | 
|---|
|  | 158 | .. Q | 
|---|
|  | 159 | . I FSOSCNT=0 S FSOSNAME="" D | 
|---|
|  | 160 | .. ; If no FSOS, but there are employees, set Issue Multiples | 
|---|
|  | 161 | .. I EMPCNT D  Q | 
|---|
|  | 162 | ... F EMP=0:0 S EMP=$O(EMP(EMP)) Q:'EMP  D:'QACI0 SETDATA | 
|---|
|  | 163 | ... Q | 
|---|
|  | 164 | .. ; If there are no FSOS and no employees, set Issue Multiples | 
|---|
|  | 165 | .. S EMP="" D:'QACI0 SETDATA Q | 
|---|
|  | 166 | . Q | 
|---|
|  | 167 | ; If errors were encountered, quit with the error code | 
|---|
|  | 168 | I ERR K ^XTMP("QACMIGR","ROC","U",ROCNO) Q ERR | 
|---|
|  | 169 | Q 0 | 
|---|
|  | 170 | ; | 
|---|
|  | 171 | ; | 
|---|
|  | 172 | SETDATA ; Set data for Issue Code multiple on a ROC | 
|---|
|  | 173 | ; We don't call this routine if just building error report (i.e., from ^QACI0). | 
|---|
|  | 174 | S ROCCNT=ROCCNT+1 | 
|---|
|  | 175 | S ^XTMP("QACMIGR","ROC","U",ROCNO_" ",ROCCNT)=ROCNO_"^ISS^"_ISSCODE_"^"_FSOSNAME_"^"_EMP_"^"_HLNAME_"^"_HLINST_"^" | 
|---|
|  | 176 | Q | 
|---|
|  | 177 | ; | 
|---|
|  | 178 | HLDATA(STATION,HL,QACI0,ERR,HLINST,PATSCNT) ; Load Hospital Location Data for migration | 
|---|
|  | 179 | ; IA #10040, #10112 | 
|---|
|  | 180 | N Y,HLNAME S ERR=0 | 
|---|
|  | 181 | S Y=$G(^SC(HL,0)) I Y="" S ERR=1 Q | 
|---|
|  | 182 | S HLNAME=$P(Y,"^"),HLINST="" | 
|---|
|  | 183 | D | 
|---|
|  | 184 | . ; Get DIVISION station number for Hospital Location | 
|---|
|  | 185 | . S HLINST=$P(Y,"^",15) | 
|---|
|  | 186 | . I HLINST S HLINST=$P($$SITE^VASITE(,HLINST),"^",3) Q:HLINST'=-1 | 
|---|
|  | 187 | . ; If not found, get Institution station | 
|---|
|  | 188 | . S HLINST=$P(Y,"^",4) Q:'HLINST | 
|---|
|  | 189 | . S HLINST=$$STA^XUAF4(HLINST) Q:HLINST]"" | 
|---|
|  | 190 | . ; If no station number for either one, generate an error | 
|---|
|  | 191 | . S Y=$L(HLNAME) | 
|---|
|  | 192 | . S HLNAME=$E(HLNAME,1,30)_$S(Y>30:"...",1:"") | 
|---|
|  | 193 | . S ERR=1 D ERREF^QACI2C("HL",HL,HLNAME_" - has no STATION NUMBER") Q | 
|---|
|  | 194 | I HLINST="" S HLINST=STATION | 
|---|
|  | 195 | Q:$D(^XTMP("QACMIGR","HL","D",HL)) | 
|---|
|  | 196 | Q:$D(^XTMP("QACMIGR","HL","U",HL)) | 
|---|
|  | 197 | I $$TXTERR^QACI2C(HLNAME,30,0,1) D | 
|---|
|  | 198 | . S HLNAME=$E(HLNAME,1,20)_$S($L(HLNAME>20):"...",1:"") | 
|---|
|  | 199 | . S ERR=1 D ERREF^QACI2C("HL",HL,HLNAME_" - NAME missing or invalid") Q | 
|---|
|  | 200 | ; Check to make sure station is on the list from std_institution table | 
|---|
|  | 201 | I '$D(^XTMP("QACMIGR","STDINSTITUTION",HLINST)) D | 
|---|
|  | 202 | . S ERR=1 D ERREF^QACI2C("HL",HL,HLINST_" is not a valid national station number") Q | 
|---|
|  | 203 | ; Quit if there are errors, or if called from ^QACI0 to just print the error report. | 
|---|
|  | 204 | Q:ERR=1 | 
|---|
|  | 205 | Q:QACI0 | 
|---|
|  | 206 | S ^XTMP("QACMIGR","HL","U",HL)=HL_"^"_HLNAME_"^"_HLINST_"^" | 
|---|
|  | 207 | S PATSCNT("HL")=PATSCNT("HL")+1 | 
|---|
|  | 208 | Q | 
|---|
|  | 209 | ; | 
|---|
|  | 210 | ; | 
|---|