| 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 |  ;
 | 
|---|