| [1501] | 1 | C0QKIDS ; VEN/SMH - Kids Utilities for transporting C0Q data ; 7/31/12 3:01pm | 
|---|
|  | 2 | ;;1.0;C0Q;;May 21, 2012;Build 63 | 
|---|
| [1438] | 3 | ; Licensed under package license. See Documentation. | 
|---|
|  | 4 | ; | 
|---|
| [1501] | 5 | ; PEPs: TRAN, POST, PRE | 
|---|
| [1438] | 6 | ; | 
|---|
|  | 7 | TRAN    ; Unified Transport; PEP | 
|---|
|  | 8 | ; D TRAN301  ; looks like I won't send that file over | 
|---|
| [1501] | 9 | D TRAN201 ; C0Q MEASUREMENT | 
|---|
|  | 10 | D TRAN101 ; C0Q QUALITY MEASURE | 
|---|
| [1438] | 11 | QUIT | 
|---|
|  | 12 | POST    ; Unified Post; PEP | 
|---|
|  | 13 | ; D POST301  ; looks like I won't send that file over | 
|---|
| [1501] | 14 | ; D POST101 ; C0Q QUALITY MEASURE ; As of T11, I won't do that anymore. --> | 
|---|
|  | 15 | ; I discovered that it will do it on destination systems that are set-up. | 
|---|
|  | 16 | ; So bad bad bad idea for me to do it in a post-init. | 
|---|
|  | 17 | ; ... I wrote TRAN101 to do the function of POST101. | 
|---|
|  | 18 | D POST201 ; C0Q MEASUREMENT | 
|---|
| [1438] | 19 | QUIT | 
|---|
|  | 20 | ; | 
|---|
| [1501] | 21 | PRE     ; Unified Pre; PEP | 
|---|
|  | 22 | D PRE101 | 
|---|
|  | 23 | QUIT | 
|---|
|  | 24 | ; | 
|---|
| [1438] | 25 | ; << >> | 
|---|
|  | 26 | ; | 
|---|
| [1501] | 27 | TRAN101 ; Remove Untransportable pointers in C0Q QUALITY MEASURE; Private EP | 
|---|
|  | 28 | ; NB: I am reaching into KIDS's data here. This may not work for future versions | 
|---|
|  | 29 | ; of KIDS. However, I am exporting this only; once exported, it should work in | 
|---|
|  | 30 | ; any version of KIDS. | 
|---|
|  | 31 | N XPDIEN S XPDIEN=$QS(XPDGREF,2) ; Get IEN of KIDS Transport Global | 
|---|
|  | 32 | N X S X=$NA(^XTMP("XPDT",XPDIEN,"DATA",1130580001.101)) ; KIDS transports our data here | 
|---|
|  | 33 | N IEN S IEN=0 ; Looper | 
|---|
|  | 34 | F  S IEN=$O(@X@(IEN)) Q:'IEN  D  ; For each IEN, remove the following: | 
|---|
|  | 35 | . S $P(@X@(IEN,0),U,2)="" ; Numerator Patient List | 
|---|
|  | 36 | . S $P(@X@(IEN,0),U,3)="" ; Denominator Patient List | 
|---|
|  | 37 | . S $P(@X@(IEN,7),U,4)="" ; Negative Numerator List | 
|---|
|  | 38 | . S $P(@X@(IEN,7),U,2)="" ; Alternate Numerator List | 
|---|
|  | 39 | . S $P(@X@(IEN,7),U,3)="" ; Alternate Denominator List | 
|---|
|  | 40 | . S $P(@X@(IEN,7),U,5)="" ; Alternate Negative Numerator List | 
|---|
|  | 41 | QUIT | 
|---|
|  | 42 | ; | 
|---|
| [1438] | 43 | TRAN301 ; Grab FDA for entire file C0Q PATIENT LIST and store in Transport Global; Private EP | 
|---|
| [1501] | 44 | ; Not used. Dead code. | 
|---|
| [1438] | 45 | N C0QIEN S C0QIEN=0 ; IEN walker | 
|---|
|  | 46 | N C0QREF1 S C0QREF1=$NAME(^TMP("C0QOLD",$J)) ; Temporary Global Reference | 
|---|
|  | 47 | N C0QREF2 S C0QREF2=$NAME(^TMP("C0QNEW",$J)) ; Temporary Global Reference | 
|---|
|  | 48 | K @C0QREF1,@C0QREF2   ; Kill that | 
|---|
|  | 49 | F  S C0QIEN=$O(^C0Q(301,C0QIEN)) Q:'+C0QIEN  D | 
|---|
|  | 50 | . D GETS^DIQ(1130580001.301,C0QIEN_",","*","",C0QREF1) ; Load FDA's in there | 
|---|
|  | 51 | . M @C0QREF2@(1130580001.301,"?+"_C0QIEN_",")=@C0QREF1@(1130580001.301,C0QIEN_",") ; Change IENs to ?+ IENs | 
|---|
|  | 52 | M @XPDGREF@("C0Q","1130580001.301")=@C0QREF2  ; Put in Transport Global | 
|---|
|  | 53 | K @C0QREF1,@C0QREF2  ; Remove | 
|---|
|  | 54 | QUIT | 
|---|
|  | 55 | ; | 
|---|
|  | 56 | TRAN201 ; Grab FDA for 201 C0Q MEASUREMENTS selected fields; Private EP | 
|---|
|  | 57 | N C0QIEN S C0QIEN=0 ; IEN walker | 
|---|
|  | 58 | N C0QREF1 S C0QREF1=$NAME(^TMP("C0QOLD",$J)) ; Temporary Global Reference | 
|---|
|  | 59 | N C0QREF2 S C0QREF2=$NAME(^TMP("C0QNEW",$J)) ; Temporary Global Reference | 
|---|
|  | 60 | K @C0QREF1,@C0QREF2   ; Kill that | 
|---|
|  | 61 | ; | 
|---|
|  | 62 | ; We need C0QCOUNT so that it wouldn't reuse the numbers, b/c updater wants numbers for every different item | 
|---|
|  | 63 | N C0QCOUNT S C0QCOUNT=$O(^C0Q(201," "),-1) ; Counter for SubIENs for destination array; init at highest IEN to prevent dups | 
|---|
|  | 64 | F  S C0QIEN=$O(^C0Q(201,C0QIEN)) Q:'+C0QIEN  D  ; Walk IENs | 
|---|
|  | 65 | . W "Exporting "_C0QIEN,! | 
|---|
|  | 66 | . ; Fields SET NAME, BEGIN DATE, END DATE, LOCKED, USE ALL MEASURES, MU YEAR KEY | 
|---|
|  | 67 | . D GETS^DIQ(1130580001.201,C0QIEN_",",".01;.02;.03;.05;.2;.3","",C0QREF1) | 
|---|
|  | 68 | . M @C0QREF2@(1130580001.201,"?+"_C0QIEN_",")=@C0QREF1@(1130580001.201,C0QIEN_",") ; Change IENs to ?+ IENs | 
|---|
|  | 69 | . N C0QIEN2 S C0QIEN2=0 ; Subfile walker | 
|---|
|  | 70 | . F  S C0QIEN2=$O(^C0Q(201,C0QIEN,5,C0QIEN2)) Q:'+C0QIEN2  D  ; MEASURE subfile | 
|---|
|  | 71 | . . W "Exporting IENS "_C0QIEN2_","_C0QIEN_",",! | 
|---|
|  | 72 | . . D GETS^DIQ(1130580001.2011,C0QIEN2_","_C0QIEN_",",".01","",C0QREF1) ; MEASURE (#.01) | 
|---|
|  | 73 | . . S C0QCOUNT=C0QCOUNT+1 ; Increment the counter for SubIEN (can't reuse) | 
|---|
|  | 74 | . . M @C0QREF2@(1130580001.2011,"?+"_C0QCOUNT_","_"?+"_C0QIEN_",")=@C0QREF1@(1130580001.2011,C0QIEN2_","_C0QIEN_",") ; as above | 
|---|
|  | 75 | ; | 
|---|
|  | 76 | M @XPDGREF@("C0Q","1130580001.201")=@C0QREF2 ; Put in transport global | 
|---|
|  | 77 | K @C0QREF1,@C0QREF2  ; Remove temp | 
|---|
|  | 78 | QUIT | 
|---|
|  | 79 | ; | 
|---|
|  | 80 | POST201 ; File FDA for 201; Private EP | 
|---|
| [1501] | 81 | ; | 
|---|
|  | 82 | ; Clean-up data if it already exists! | 
|---|
|  | 83 | ; ZWRITE ^C0Q(201,:,5,:,0) | 
|---|
|  | 84 | ; ^C0Q(201,1,5,599,0)=50 | 
|---|
|  | 85 | ; ^C0Q(201,1,5,600,0)=4 | 
|---|
|  | 86 | ; ^C0Q(201,1,5,601,0)=39 | 
|---|
|  | 87 | ; ^C0Q(201,1,5,602,0)=6 | 
|---|
|  | 88 | ; ^C0Q(201,1,5,603,0)=7 | 
|---|
|  | 89 | ; ^C0Q(201,1,5,604,0)=48 | 
|---|
|  | 90 | ; ^C0Q(201,1,5,605,0)=46 | 
|---|
|  | 91 | ; | 
|---|
| [1438] | 92 | IF $O(^C0Q(201,0)) DO  QUIT  ; Quit if data is already there. | 
|---|
|  | 93 | . D MES^XPDUTL("Data exists in file C0Q MEASUREMENTS... Not adding new data") | 
|---|
| [1501] | 94 | . D MES^XPDUTL("Cleaning up broken pointers in C0Q MEASUREMENTS from deleted data in C0Q QUALITY MEASURE") | 
|---|
|  | 95 | . ; This is very hairy code. Run through the 5 multiple in C0Q MEASUREMENT | 
|---|
|  | 96 | . ; Grab the IEN in the .01, check if it exists; if not, kill. | 
|---|
|  | 97 | . N DA,DIK ; DIK Variables; as well as our looper variables | 
|---|
|  | 98 | . S (DA,DA(1))=0 ; Initial looper values | 
|---|
|  | 99 | . F  S DA(1)=$O(^C0Q(201,DA(1))) Q:'DA(1)  D  ; Loop through entries | 
|---|
|  | 100 | . . D MES^XPDUTL("...Processing entry "_$P(^C0Q(201,DA(1),0),U))  ; msg | 
|---|
|  | 101 | . . S DIK="^C0Q(201,"_DA(1)_",5,"  ; deletion root for the next loop | 
|---|
|  | 102 | . . F  S DA=$O(^C0Q(201,DA(1),5,DA)) Q:'DA  D  ; For each Measure | 
|---|
|  | 103 | . . . N IEN S IEN=+^C0Q(201,DA(1),5,DA,0)  ; Get IEN | 
|---|
|  | 104 | . . . I IEN,'$D(^C0Q(101,IEN)) D  ; If IEN is numeric, IEN exists in dest file | 
|---|
|  | 105 | . . . . D MES^XPDUTL("......Deleting broken pointer "_IEN) ; msg | 
|---|
|  | 106 | . . . . D ^DIK ; delete | 
|---|
| [1438] | 107 | ; | 
|---|
| [1501] | 108 | ; If new install, add data | 
|---|
|  | 109 | ; | 
|---|
| [1438] | 110 | D MES^XPDUTL("Adding data to C0Q MEASUREMENTS") | 
|---|
|  | 111 | N C0QFDA S C0QFDA=$NAME(@XPDGREF@("C0Q","1130580001.201")) ; Grab FDA from Transport Global | 
|---|
|  | 112 | N C0QERR ; Error array for filer | 
|---|
|  | 113 | D UPDATE^DIE("E",C0QFDA,"","C0QERR") ; File all | 
|---|
|  | 114 | I $D(C0QERR) D  ; if there's an error, print it out | 
|---|
|  | 115 | . D MES^XPDUTL("Couldn't add data into C0Q MEASUREMENTS") | 
|---|
|  | 116 | . S C0QERR=$Q(C0QERR) | 
|---|
|  | 117 | . F  S C0QERR=$Q(@C0QERR) Q:C0QERR=""  D MES^XPDUTL(C0QERR_": "_@C0QERR) | 
|---|
|  | 118 | QUIT | 
|---|
|  | 119 | ; | 
|---|
|  | 120 | POST301 ; Get FDA from Transport Global and install in destination system for C0Q PATIENT LIST; Private EP | 
|---|
| [1501] | 121 | ; Not used. Dead code. | 
|---|
| [1438] | 122 | N C0QFDA S C0QFDA=$NAME(@XPDGREF@("C0Q","1130580001.301")) ; FDA array name is the global reference | 
|---|
|  | 123 | N C0QERR ; Error | 
|---|
|  | 124 | D UPDATE^DIE("E",C0QFDA,"","C0QERR") ; File all | 
|---|
|  | 125 | I $D(C0QERR) D  ; if there's an error, print it out | 
|---|
|  | 126 | . D MES^XPDUTL("Couldn't add data into C0Q PATIENT LIST file") | 
|---|
|  | 127 | . S C0QERR=$Q(C0QERR) | 
|---|
|  | 128 | . F  S C0QERR=$Q(@C0QERR) Q:C0QERR=""  D MES^XPDUTL(C0QERR_": "_@C0QERR) | 
|---|
|  | 129 | QUIT | 
|---|
|  | 130 | ; | 
|---|
| [1501] | 131 | PRE101  ; Clean existing data (from an earlier installation) from measures that are now merged to other measures | 
|---|
|  | 132 | ; in C0Q QUALITY MEASURE in destination systems; Private EP | 
|---|
|  | 133 | ; | 
|---|
|  | 134 | ; Quit if C0Q Quality Measures isn't on the system. | 
|---|
|  | 135 | Q:'$D(^C0Q(101)) | 
|---|
|  | 136 | ; | 
|---|
|  | 137 | D MES^XPDUTL("Removing subsumed entries in C0Q QUALITY MEASURE") | 
|---|
|  | 138 | ; | 
|---|
|  | 139 | ; .01 field values to for records to remove | 
|---|
|  | 140 | N C0QLIST | 
|---|
|  | 141 | S C0QLIST("TEST M0028A")="" | 
|---|
|  | 142 | S C0QLIST("MU EP 0028B")="" | 
|---|
|  | 143 | S C0QLIST("M0013")="" | 
|---|
|  | 144 | S C0QLIST("M0024")="" | 
|---|
|  | 145 | S C0QLIST("M1")="" | 
|---|
|  | 146 | S C0QLIST("M3")="" | 
|---|
|  | 147 | S C0QLIST("M2")="" | 
|---|
|  | 148 | S C0QLIST("M0028")="" | 
|---|
|  | 149 | S C0QLIST("M111")="" | 
|---|
|  | 150 | S C0QLIST("M112")="" | 
|---|
|  | 151 | S C0QLIST("M113")="" | 
|---|
|  | 152 | S C0QLIST("M128")="" | 
|---|
|  | 153 | S C0QLIST("M5")="" | 
|---|
|  | 154 | S C0QLIST("M7")="" | 
|---|
|  | 155 | S C0QLIST("M0022")="" | 
|---|
|  | 156 | S C0QLIST("12")="" | 
|---|
|  | 157 | S C0QLIST("M0038")="" | 
|---|
|  | 158 | S C0QLIST("M110")="" | 
|---|
|  | 159 | S C0QLIST("MU EP NQF 0070")="" | 
|---|
|  | 160 | ; | 
|---|
|  | 161 | ; Root for ^DIK | 
|---|
|  | 162 | N DIK S DIK="^C0Q(101," | 
|---|
|  | 163 | ; | 
|---|
|  | 164 | ; Loop through list, find IEN for each one, kill off | 
|---|
|  | 165 | N C0QITEM S C0QITEM=""                             ; Item | 
|---|
|  | 166 | F  S C0QITEM=$O(C0QLIST(C0QITEM)) Q:C0QITEM=""  D  ; Loop | 
|---|
|  | 167 | . Q:'$DATA(^C0Q(101,"B",C0QITEM))                  ; Quit if not present. | 
|---|
|  | 168 | . N DA S DA=$O(^C0Q(101,"B",C0QITEM,""))           ; IEN | 
|---|
|  | 169 | . ; The original software has MU EP NQF 0070 incorrectly. If the 1 node | 
|---|
|  | 170 | . ; has Pneumonia, we want to remove that entry. | 
|---|
|  | 171 | . I C0QITEM="MU EP NQF 0070",^C0Q(101,DA,1)'["Pneumonia" QUIT | 
|---|
|  | 172 | . D MES^XPDUTL("...Removing "_C0QITEM)                ; Message to user | 
|---|
|  | 173 | . D ^DIK                                           ; Delete | 
|---|
|  | 174 | ; | 
|---|
|  | 175 | REN     ; Rename a bunch of entries | 
|---|
|  | 176 | ; ("OLD NAME")="NEW NAME" | 
|---|
|  | 177 | D MES^XPDUTL("Renaming Old entries in C0Q QUALITY MEASURE") | 
|---|
|  | 178 | ; | 
|---|
|  | 179 | N C0QLIST | 
|---|
|  | 180 | S C0QLIST("NQF0038 NUM1 DPT")="MU EP NQF 0038 NUM1 DPT" | 
|---|
|  | 181 | S C0QLIST("NQF0038 NUM10")="MU EP NQF 0038 NUM10 FLU" | 
|---|
|  | 182 | S C0QLIST("NQF0038 NUM11 COMBO5")="MU EP NQF 0038 NUM11 COMBO5" | 
|---|
|  | 183 | S C0QLIST("NQF0038 NUM12 COMBO6")="MU EP NQF 0038 NUM12 COMBO6" | 
|---|
|  | 184 | S C0QLIST("NQF0038 NUM2 IPV")="MU EP NQF 0038 NUM2 IPV" | 
|---|
|  | 185 | S C0QLIST("NQF0038 NUM3 MMR")="MU EP NQF 0038 NUM3 MMR" | 
|---|
|  | 186 | S C0QLIST("NQF0038 NUM4 HiB")="MU EP NQF 0038 NUM4 HiB" | 
|---|
|  | 187 | S C0QLIST("NQF0038 NUM5 HEP B")="MU EP NQF 0038 NUM5 HEP B" | 
|---|
|  | 188 | S C0QLIST("NQF0038 NUM6 VZV")="MU EP NQF 0038 NUM6 VZV" | 
|---|
|  | 189 | S C0QLIST("NQF0038 NUM7 PCV")="MU EP NQF 0038 NUM7 PCV" | 
|---|
|  | 190 | S C0QLIST("NQF0038 NUM8 HEP A")="MU EP NQF 0038 NUM8 HEP A" | 
|---|
|  | 191 | S C0QLIST("NQF0038 NUM9")="MU EP NQF 0038 NUM9 RV" | 
|---|
|  | 192 | S C0QLIST("M124")="PQRI MEASURE 124" | 
|---|
|  | 193 | S C0QLIST("M173")="PQRI MEASURE 173" | 
|---|
|  | 194 | S C0QLIST("M39")="PQRI MEASURE 39" | 
|---|
|  | 195 | S C0QLIST("M47")="PQRI MEASURE 47" | 
|---|
|  | 196 | S C0QLIST("M48")="PQRI MEASURE 48" | 
|---|
|  | 197 | ; | 
|---|
|  | 198 | N C0QITEM S C0QITEM=""                              ; Item | 
|---|
|  | 199 | N C0QFDA                                            ; FDA | 
|---|
|  | 200 | F  S C0QITEM=$O(C0QLIST(C0QITEM))  Q:C0QITEM=""  D  ; Loop through | 
|---|
|  | 201 | . N IEN S IEN=$O(^C0Q(101,"B",C0QITEM,""))          ; Get IEN from File using old name | 
|---|
|  | 202 | . I IEN S C0QFDA(1130580001.101,IEN_",",.01)=C0QLIST(C0QITEM)  ; If found, put new name in FDA for this IEN | 
|---|
|  | 203 | . I IEN D MES^XPDUTL("...Renaming "_C0QITEM_" to "_C0QLIST(C0QITEM)) ; Print message to user | 
|---|
|  | 204 | ; | 
|---|
|  | 205 | N C0QERR                                            ; Error for FILE^DIE | 
|---|
|  | 206 | I $D(C0QFDA) D FILE^DIE("E",$NA(C0QFDA),$NA(C0QERR))  ; File if FDA has contents | 
|---|
|  | 207 | E  D MES^XPDUTL("No entries to rename")             ; If nothing, tell user so | 
|---|
|  | 208 | ; | 
|---|
|  | 209 | D:$D(C0QERR)                                        ; If Error, print it | 
|---|
|  | 210 | . D MES^XPDUTL("Error Filing Data. FILE^DIE reported:") | 
|---|
|  | 211 | . N REF S REF=$NA(C0QERR)                           ; $Q Reference | 
|---|
|  | 212 | . F  S REF=$Q(@REF) Q:REF=""  D MES^XPDUTL(REF_"="_@REF) ; Loop and Print | 
|---|
|  | 213 | ; | 
|---|
| [1438] | 214 | QUIT | 
|---|