| 1 | LA7UTL1A ;HOIFO/BH - Microbiology Query Utility ; 3/11/03 10:45am | 
|---|
| 2 | ;;5.2;AUTOMATED LAB INSTRUMENTS;**69**;Sep 27, 1994 | 
|---|
| 3 | ; | 
|---|
| 4 | ; | 
|---|
| 5 | GETDATA(LRDFN,LASDT,LAEDT,LASEARCH,RESULTS) ; | 
|---|
| 6 | ; | 
|---|
| 7 | ;    Input: | 
|---|
| 8 | ; | 
|---|
| 9 | ;    LRDFN - Lab DFN | 
|---|
| 10 | ;    LASDT - Search Start Date | 
|---|
| 11 | ;    LAEDT - Search End Date | 
|---|
| 12 | ;    LASEARCH - Set to CD (collection date) or RAD (completion date). | 
|---|
| 13 | ;    RESULTS - Closed root destination array reference | 
|---|
| 14 | ; | 
|---|
| 15 | ;    Output: | 
|---|
| 16 | ;    If an error is found with the input variables one for the | 
|---|
| 17 | ;    strings will be returned. | 
|---|
| 18 | ; | 
|---|
| 19 | ;       -1^Start date is after end date | 
|---|
| 20 | ;       -2^No return array global | 
|---|
| 21 | ;       -3^Global array only | 
|---|
| 22 | ;       -4^No Patient lab DFN | 
|---|
| 23 | ;       -5^No Start Date Range | 
|---|
| 24 | ;       -6^No End Date Range | 
|---|
| 25 | ; | 
|---|
| 26 | ;  If there are no errors with the input variables the processing | 
|---|
| 27 | ;  will return '1'.  If there is no data in the passed in global | 
|---|
| 28 | ;  there was no data available for the patient. | 
|---|
| 29 | ; | 
|---|
| 30 | ;  If there is data available for the patient the routine will pass | 
|---|
| 31 | ;  back the following data (the example assumes the passed in closed | 
|---|
| 32 | ;  root global was "^TMP($J)"): | 
|---|
| 33 | ; | 
|---|
| 34 | ;  Fields .01 (Accession date),.05 (Site Specimen),.055 (Sample Type), | 
|---|
| 35 | ;  .06 (Accession #),11.51 (Sterility Control),11.57 (Urine Screen), | 
|---|
| 36 | ;  11.58 (Sputum Screen), 22 (TB RPT Date Approved), 23 (TB RPT Status), | 
|---|
| 37 | ;  24 (ACID Fast Stain), 25 (Quantity) and .99 (Specimen Comment) from | 
|---|
| 38 | ;  the top node in the following format; | 
|---|
| 39 | ; | 
|---|
| 40 | ;  ^TMP($J,LRDFN,Record_IEN,"0",Field #,"E" or "I")=Field Data | 
|---|
| 41 | ; | 
|---|
| 42 | ;  Field .01 of sub file 63.29 - Gram Stain - in the following format | 
|---|
| 43 | ; | 
|---|
| 44 | ; ^TMP($J,LRDFN,Record_IEN,"2",Sub File IEN,"0",Field #,"E" or "I")=Data | 
|---|
| 45 | ; | 
|---|
| 46 | ;  Field .01 (Organism) and 1 (Quantity) of sub file 63.3 in the | 
|---|
| 47 | ;  following format; | 
|---|
| 48 | ; | 
|---|
| 49 | ; ^TMP($J,LRDFN,Record_IEN,"3",Sub File IEN,"0",Field #,"E" or "I")=Data | 
|---|
| 50 | ; | 
|---|
| 51 | ;   Within the Organism data there is an antibiotic multiple.  The | 
|---|
| 52 | ;   routine returns the antibiotic (.01) along with the Mic (field #1) | 
|---|
| 53 | ;   and Mbc (field #2) from the sub file 63.32 in the following format; | 
|---|
| 54 | ; | 
|---|
| 55 | ;   ^TMP($J,LRDFN,Record_IEN,"3",Sub File IEN,"3",Sub-Sub File IEN,"0" | 
|---|
| 56 | ;   ,Field #,"E" or "I")=Data | 
|---|
| 57 | ; | 
|---|
| 58 | ; | 
|---|
| 59 | ;  Organisms can potentially have specific antibiotics associated with | 
|---|
| 60 | ;  them. This API pulls any of the Antibiotics (along with their | 
|---|
| 61 | ;  interpretation and screen) that have been entered in the antibiotic | 
|---|
| 62 | ;  fields that exist within the standard Lab DD.  Within this sub file | 
|---|
| 63 | ;  these fields are numbered between 5 and 160.2 and have node numbers | 
|---|
| 64 | ;  that begin with the numbers 2.00. | 
|---|
| 65 | ;  It is also possible for sites to enter their own specific named | 
|---|
| 66 | ;  antibiotics within this multiple using a lab option.  This option | 
|---|
| 67 | ;  creates a new node number for the new antibiotic entry that is | 
|---|
| 68 | ;  comprised in the | 
|---|
| 69 | ;  following way "2.00"_site #_n (where n is an incremented number). | 
|---|
| 70 | ;  This node number also becomes the field number for this antibiotic. | 
|---|
| 71 | ;  The interpretation and screen values of these antibiotics should | 
|---|
| 72 | ;  follow a pattern where interpretation field number is comprised as | 
|---|
| 73 | ;  follows "2.00"_site #_n_1 and the screen is "2.00"_site #_n_2. | 
|---|
| 74 | ; | 
|---|
| 75 | ;  However only antibiotics have been entered in the standard Organism | 
|---|
| 76 | ;  DD will get extracted.  Any antibiotics entered into the site | 
|---|
| 77 | ;  specified fields will not get extracted. | 
|---|
| 78 | ; | 
|---|
| 79 | ;  ^TMP($J,LRDFN,Record_IEN,"3",Sub File IEN,"0",Field #,"I")=data | 
|---|
| 80 | ;  ^TMP($J,LRDFN,Record_IEN,"3",Sub File IEN,"0",Field #,"E")=field name | 
|---|
| 81 | ;                                                             ^data | 
|---|
| 82 | ; | 
|---|
| 83 | ;  Note the "E" node contains the field name and it's related data. | 
|---|
| 84 | ; | 
|---|
| 85 | ; | 
|---|
| 86 | ;    Within the Organism data there is a comment multiple which the | 
|---|
| 87 | ;    routine also returns. | 
|---|
| 88 | ;    Field .01 Comment of sub file 63.31 in the following format; | 
|---|
| 89 | ; | 
|---|
| 90 | ;   ^TMP($J,LRDFN,Record_IEN,"3",Sub File IEN,"1",Sub-Sub File IEN,"0" | 
|---|
| 91 | ;   ,Field #,"E" or "I")=Data | 
|---|
| 92 | ; | 
|---|
| 93 | ;  Field .01 Bact RPT Remark of sub file 63.33 in the following format; | 
|---|
| 94 | ; | 
|---|
| 95 | ; ^TMP($J,LRDFN,Record_IEN,"4",Sub File IEN,"0",Field #,"E" or "I")=Data | 
|---|
| 96 | ; | 
|---|
| 97 | ;  Field .01 Parasite of sub file 63.34 in the following format; | 
|---|
| 98 | ; | 
|---|
| 99 | ; ^TMP($J,LRDFN,Record_IEN,"6",Sub File IEN,"0",Field #,"E" or "I")=Data | 
|---|
| 100 | ; | 
|---|
| 101 | ;   Within Parasite data there is a stage code multiple that the routine | 
|---|
| 102 | ;   also returns. | 
|---|
| 103 | ;   Fields .01 Stage code and 1 Quantity of sub file 63.35 in the | 
|---|
| 104 | ;   following format; | 
|---|
| 105 | ; | 
|---|
| 106 | ;   ^TMP($J,LRDFN,Record_IEN,"6",Sub File IEN,"1",Sub-Sub File IEN,"0" | 
|---|
| 107 | ;   ,Field #,"E" or "I")=Data | 
|---|
| 108 | ; | 
|---|
| 109 | ;     Within the Stage Code multiple there can be a Stage Code Comment | 
|---|
| 110 | ;     multiple that this routine also returns; | 
|---|
| 111 | ;     Field .01 of the Stage Code Comment Multiple 63.351 in the | 
|---|
| 112 | ;     following format; | 
|---|
| 113 | ; | 
|---|
| 114 | ; | 
|---|
| 115 | ;     ^TMP($J,LRDFN,Record_IEN,"6",Sub File IEN,"1",Sub-Sub File IEN,"1" | 
|---|
| 116 | ;     ,Sub Sub Sub File IEN,"0",Field #,"E" or "I")=Data) | 
|---|
| 117 | ; | 
|---|
| 118 | ;  Field .01 Parasite RPT Remark 63.36 in the following format; | 
|---|
| 119 | ; | 
|---|
| 120 | ; ^TMP($J,LRDFN,Record_IEN,"7",Sub File IEN,"0",Field #,"E" or "I")=Data | 
|---|
| 121 | ; | 
|---|
| 122 | ;  Field .01 Fungus/Yeast and field 1 Quantity of sub file 63.37 in the | 
|---|
| 123 | ;  following format; | 
|---|
| 124 | ; | 
|---|
| 125 | ; ^TMP($J,LRDFN,Record_IEN,"9",Sub File IEN,"0",Field #,"E" or "I")=Data | 
|---|
| 126 | ; | 
|---|
| 127 | ;    Within the Fungus/Yeast data there is a comment multiple which the | 
|---|
| 128 | ;    routine also returns. | 
|---|
| 129 | ;    Field .01 Comment of sub file 63.372 in the following format; | 
|---|
| 130 | ; | 
|---|
| 131 | ;   ^TMP($J,LRDFN,Record_IEN,"9",Sub File IEN,"1",Sub-Sub File IEN,"0" | 
|---|
| 132 | ;   ,Field #,"E" or "I")=Data | 
|---|
| 133 | ; | 
|---|
| 134 | ; | 
|---|
| 135 | ;  Field .01 Mycobacterium and field 1 Quantity of sub file 63.39 in | 
|---|
| 136 | ;  the following format; | 
|---|
| 137 | ; | 
|---|
| 138 | ; ^TMP($J,LRDFN,Record_IEN,"12",Sub File IEN,"0",Field #,"E" or "I") | 
|---|
| 139 | ;                                                                 =Data | 
|---|
| 140 | ;  Mycobacterium can potentially have antibiotics associated with them. | 
|---|
| 141 | ;  This API pulls any of the Antibiotics that have been entered in the | 
|---|
| 142 | ;  antibiotic | 
|---|
| 143 | ;  fields that exist within the standard Lab DD.  Within this sub file | 
|---|
| 144 | ;  these fields are numbered between 5 and 55). | 
|---|
| 145 | ;  It is also possible for sites to enter their own antibiotics | 
|---|
| 146 | ;  within this multiple using a lab option.  This option creates a new | 
|---|
| 147 | ;  node number for the new antibiotic entry that is comprised in the | 
|---|
| 148 | ;  following way "2.00"_site #_n (where n is an incremented number). | 
|---|
| 149 | ;  This node number also becomes the field number for this antibiotic. | 
|---|
| 150 | ; | 
|---|
| 151 | ;  However only antibiotics have been entered in the standard | 
|---|
| 152 | ;  Mycobacterium antibiotic DD will get extracted.  Any antibiotics | 
|---|
| 153 | ;  entered into the site specified fields will not get extracted. | 
|---|
| 154 | ; | 
|---|
| 155 | ;  ^TMP($J,LRDFN,Record_IEN,"12",Sub File IEN,"0",Field #,"I")=data | 
|---|
| 156 | ;  ^TMP($J,LRDFN,Record_IEN,"12",Sub File IEN,"0",Field #,"E") | 
|---|
| 157 | ;                                                     =field name^data | 
|---|
| 158 | ; | 
|---|
| 159 | ;  Note the "E" node contains the field name and it's related data. | 
|---|
| 160 | ; | 
|---|
| 161 | ; | 
|---|
| 162 | ; | 
|---|
| 163 | ;    Within the Mycobacterium data there is a comment multiple which the | 
|---|
| 164 | ;    routine also returns. | 
|---|
| 165 | ;    Field .01 Comment of sub file 63.4 in the following format; | 
|---|
| 166 | ; | 
|---|
| 167 | ;   ^TMP($J,LRDFN,Record_IEN,"12",Sub File IEN,"1",Sub-Sub File IEN,"0" | 
|---|
| 168 | ;   ,Field #,"E" or "I")=Data | 
|---|
| 169 | ; | 
|---|
| 170 | ;  Field .01 BACT Smear/Prep of sub file 63.291 in the following format; | 
|---|
| 171 | ; | 
|---|
| 172 | ; ^TMP($J,LRDFN,Record_IEN,"25",Sub File IEN,"0",Field #,"E" or "I") | 
|---|
| 173 | ;                                                                = Data | 
|---|
| 174 | ; | 
|---|
| 175 | ;  Field .01 PARA Smear/Prep of sub file 63.341 in the following format; | 
|---|
| 176 | ; | 
|---|
| 177 | ; ^TMP($J,LRDFN,Record_IEN,"24",Sub File IEN,"0",Field #,"E" or "I") | 
|---|
| 178 | ;                                                                =Data | 
|---|
| 179 | ; | 
|---|
| 180 | ;  Field .01 VIRUS of sub file 63.43 in the following format; | 
|---|
| 181 | ; | 
|---|
| 182 | ; ^TMP($J,LRDFN,Record_IEN,"17",Sub File IEN,"0",Field #,"E" or "I") | 
|---|
| 183 | ;                                                                 =Data | 
|---|
| 184 | ; | 
|---|
| 185 | ; | 
|---|
| 186 | ; --------------------------------------------------------------------- | 
|---|
| 187 | ; | 
|---|
| 188 | N LAARRAY,LAINX,LATYP,LAFILE,LAARRET,LACD,LACDFLD,LACDTYP,LADATA,LASET,LASUB,LA763,LATYPE | 
|---|
| 189 | ; | 
|---|
| 190 | I LASDT>LAEDT Q "-1^Start date is after end date" | 
|---|
| 191 | I '$D(RESULTS) Q "-2^No return array global" | 
|---|
| 192 | I $E(RESULTS,1,1)'="^" Q "-3^Global array only" | 
|---|
| 193 | I '+$G(LRDFN) Q "-4^No Patient lab DFN" | 
|---|
| 194 | I '$G(LASDT) Q "-5^No Start Date Range" | 
|---|
| 195 | I '$G(LAEDT) Q "-6^No End Date Range" | 
|---|
| 196 | S LAFILE=63.05,LATYPE="MI" | 
|---|
| 197 | ; | 
|---|
| 198 | ; - Used for internal processing | 
|---|
| 199 | S LAARRAY="^XTMP(""LA7UTL1A"",$J)" | 
|---|
| 200 | ; - Passed in global reference, returns results | 
|---|
| 201 | S LAARRET=$S($G(RESULTS)'="":RESULTS,1:"^TMP(""LA7UTL1A"","_$J_")") | 
|---|
| 202 | K @LAARRAY,@LAARRET | 
|---|
| 203 | I LASEARCH="RAD" D RAD | 
|---|
| 204 | I LASEARCH="CD" D CD | 
|---|
| 205 | ; | 
|---|
| 206 | Q 1 | 
|---|
| 207 | ; | 
|---|
| 208 | CD ; Search by collection date | 
|---|
| 209 | ; | 
|---|
| 210 | N LRIDT,LRSS,LANSDT,LANEDT | 
|---|
| 211 | ; | 
|---|
| 212 | I LASDT S LANSDT=9999999-LASDT | 
|---|
| 213 | I LAEDT S LANEDT=9999999-LAEDT | 
|---|
| 214 | ; | 
|---|
| 215 | S LRIDT=LANSDT | 
|---|
| 216 | F  S LRIDT=$O(^LR(LRDFN,LATYPE,LRIDT),-1) Q:LRIDT=""!(LRIDT<LANEDT)  D | 
|---|
| 217 | . D MI^LA7UTL1C(LRDFN,LRIDT,LAARRAY),ARRANGE^LA7UTL1B(LAARRAY,LAARRET) | 
|---|
| 218 | ; | 
|---|
| 219 | Q | 
|---|
| 220 | ; | 
|---|
| 221 | RAD ; Search by completion date. | 
|---|
| 222 | ; | 
|---|
| 223 | N LRIDT | 
|---|
| 224 | S LRIDT=0 | 
|---|
| 225 | F  S LRIDT=$O(^LR(LRDFN,LATYPE,LRIDT)) Q:'LRIDT  D | 
|---|
| 226 | . S LA763(0)=$G(^LR(LRDFN,LATYPE,LRIDT,0)) | 
|---|
| 227 | . I $P(LA763(0),"^",3)>LASDT,$P(LA763(0),"^",3)<LAEDT D MI^LA7UTL1C(LRDFN,LRIDT,LAARRAY),ARRANGE^LA7UTL1B(LAARRAY,LAARRET) | 
|---|
| 228 | Q | 
|---|
| 229 | ; | 
|---|
| 230 | ; | 
|---|
| 231 | ; | 
|---|