| 1 | LRPXSXRB ; SLC/PKR - Build indexes for Lab Microbiology. ;1/29/04  14:36 | 
|---|
| 2 | ;;5.2;LAB SERVICE;**295**;Sep 27, 1994 | 
|---|
| 3 | Q | 
|---|
| 4 | ;=============================================================== | 
|---|
| 5 | MICRO ; from LRPXSXRL | 
|---|
| 6 | ;Build the indexes for LAB DATA - MICROBIOLOGY. | 
|---|
| 7 | N AB,ABDN,ACC,ANUMS,DATE,DNUM,DFN,END,ENTRIES,ERR,GLOBAL,IND,ITEM | 
|---|
| 8 | N LRDFN,LRIDT,NE,NERROR,NODE,NUM,ORG,ORGNUM,SPEC,START,SUB | 
|---|
| 9 | N TB,TBDN,TEMP,TENP,TEST,TESTS,TEXT | 
|---|
| 10 | K ANUMS,TESTS | 
|---|
| 11 | ;Dont leave any old stuff around. | 
|---|
| 12 | S GLOBAL=$$GET1^DID(63,"","","GLOBAL NAME")_"""MICRO"")" | 
|---|
| 13 | S ENTRIES=$P(^LR(0),U,4) | 
|---|
| 14 | S TENP=ENTRIES/10 | 
|---|
| 15 | S TENP=+$P(TENP,".",1) | 
|---|
| 16 | I TENP<1 S TENP=1 | 
|---|
| 17 | D BMES^XPDUTL("Building indexes for LAB DATA - MICROBIOLOGY") | 
|---|
| 18 | S TEXT="There are "_ENTRIES_" entries to process." | 
|---|
| 19 | D MES^XPDUTL(TEXT) | 
|---|
| 20 | S START=$H | 
|---|
| 21 | S (IND,NE,NERROR)=0 | 
|---|
| 22 | K ^TMP("LRPXSXRB",$J) | 
|---|
| 23 | S NUM=0 | 
|---|
| 24 | F  S NUM=$O(^LAB(62.06,NUM)) Q:NUM<1  D | 
|---|
| 25 | . S DNUM=+$P($G(^LAB(62.06,NUM,0)),U,2) | 
|---|
| 26 | . I DNUM'["2." Q | 
|---|
| 27 | . I '$D(^TMP("LRPXSXRB",$J,"AB",DNUM)) S ^TMP("LRPXSXRB",$J,"AB",DNUM)=NUM | 
|---|
| 28 | S NUM=2 | 
|---|
| 29 | F  S NUM=$O(^DD(63.39,NUM)) Q:NUM<1  D  ; dbia 999 | 
|---|
| 30 | . S DNUM=+$P($G(^DD(63.39,NUM,0)),U,4) ; dbia 999 | 
|---|
| 31 | . I DNUM'["2." Q | 
|---|
| 32 | . S ^TMP("LRPXSXRB",$J,"TB",DNUM)=NUM | 
|---|
| 33 | D AANUMS(.ANUMS) | 
|---|
| 34 | S LRDFN=.9 | 
|---|
| 35 | F  S LRDFN=$O(^LR(LRDFN)) Q:LRDFN<1  D | 
|---|
| 36 | . S TEMP=$G(^LR(LRDFN,0)) | 
|---|
| 37 | . I $P(TEMP,U,2)'=2 Q | 
|---|
| 38 | . S DFN=+$P(TEMP,U,3) | 
|---|
| 39 | . I LRDFN'=$$LRDFN^LRPXAPIU(DFN) Q | 
|---|
| 40 | . S IND=IND+1 | 
|---|
| 41 | . I IND#TENP=0 D | 
|---|
| 42 | .. S TEXT="Processing entry "_IND | 
|---|
| 43 | .. D MES^XPDUTL(TEXT) | 
|---|
| 44 | . S LRIDT=0 | 
|---|
| 45 | . F  S LRIDT=$O(^LR(LRDFN,"MI",LRIDT)) Q:LRIDT<1  D | 
|---|
| 46 | .. S DATE=+$G(^LR(LRDFN,"MI",LRIDT,0)) | 
|---|
| 47 | .. I 'DATE Q | 
|---|
| 48 | .. I '$$MIVER^LRPXRM(LRDFN,LRIDT) Q | 
|---|
| 49 | .. S SPEC=+$P(^LR(LRDFN,"MI",LRIDT,0),U,5) | 
|---|
| 50 | .. I 'SPEC Q | 
|---|
| 51 | .. S ITEM="M;S;"_SPEC | 
|---|
| 52 | .. S NODE=LRDFN_";MI;"_LRIDT_";0" | 
|---|
| 53 | .. D MISET(DFN,ITEM,DATE,NODE) | 
|---|
| 54 | .. S ACC=$P(^LR(LRDFN,"MI",LRIDT,0),U,6) | 
|---|
| 55 | .. I $L(ACC) D | 
|---|
| 56 | ... D ACC(.TESTS,ACC,DATE,.ANUMS,.ERR) | 
|---|
| 57 | ... I 'ERR D | 
|---|
| 58 | .... S TEST=0 | 
|---|
| 59 | .... F  S TEST=$O(TESTS(TEST)) Q:TEST<1  D | 
|---|
| 60 | ..... S ITEM="M;T;"_TEST | 
|---|
| 61 | ..... D MISET(DFN,ITEM,DATE,NODE) | 
|---|
| 62 | .. I $G(^LR(LRDFN,"MI",LRIDT,1)) D | 
|---|
| 63 | ... S ORGNUM=0 | 
|---|
| 64 | ... F  S ORGNUM=$O(^LR(LRDFN,"MI",LRIDT,3,ORGNUM)) Q:ORGNUM<1  D | 
|---|
| 65 | .... S ORG=+$G(^LR(LRDFN,"MI",LRIDT,3,ORGNUM,0)) | 
|---|
| 66 | .... I 'ORG Q | 
|---|
| 67 | .... S ITEM="M;O;"_ORG | 
|---|
| 68 | .... S NODE=LRDFN_";MI;"_LRIDT_";3;"_ORGNUM_";0" | 
|---|
| 69 | .... D MISET(DFN,ITEM,DATE,NODE) | 
|---|
| 70 | .... S ABDN=1 | 
|---|
| 71 | .... F  S ABDN=$O(^LR(LRDFN,"MI",LRIDT,3,ORGNUM,ABDN)) Q:ABDN<1  D | 
|---|
| 72 | ..... S AB=+$G(^TMP("LRPXSXRB",$J,"AB",ABDN)) | 
|---|
| 73 | ..... I 'AB Q | 
|---|
| 74 | ..... S ITEM="M;A;"_AB | 
|---|
| 75 | ..... S NODE=LRDFN_";MI;"_LRIDT_";3;"_ORGNUM_";"_ABDN | 
|---|
| 76 | ..... D MISET(DFN,ITEM,DATE,NODE) | 
|---|
| 77 | .. F SUB=6,9,12,17 D | 
|---|
| 78 | ... I '$G(^LR(LRDFN,"MI",LRIDT,(SUB-1))) Q | 
|---|
| 79 | ... S ORGNUM=0 | 
|---|
| 80 | ... F  S ORGNUM=$O(^LR(LRDFN,"MI",LRIDT,SUB,ORGNUM)) Q:ORGNUM<1  D | 
|---|
| 81 | .... S ORG=+$G(^LR(LRDFN,"MI",LRIDT,SUB,ORGNUM,0)) | 
|---|
| 82 | .... I 'ORG Q | 
|---|
| 83 | .... S ITEM="M;O;"_ORG | 
|---|
| 84 | .... S NODE=LRDFN_";MI;"_LRIDT_";"_SUB_";"_ORGNUM_";0" | 
|---|
| 85 | .... D MISET(DFN,ITEM,DATE,NODE) | 
|---|
| 86 | .... I SUB'=12 Q | 
|---|
| 87 | .... S TBDN=2 | 
|---|
| 88 | .... F  S TBDN=$O(^LR(LRDFN,"MI",LRIDT,12,ORGNUM,TBDN)) Q:TBDN<2  D | 
|---|
| 89 | ..... S TB=+$G(^TMP("LRPXSXRB",$J,"TB",TBDN)) | 
|---|
| 90 | ..... I '$L(TB) Q | 
|---|
| 91 | ..... S ITEM="M;M;"_TB | 
|---|
| 92 | ..... S NODE=LRDFN_";MI;"_LRIDT_";12;"_ORGNUM_";"_TBDN | 
|---|
| 93 | ..... D MISET(DFN,ITEM,DATE,NODE) | 
|---|
| 94 | K ^TMP("LRPXSXRB",$J) | 
|---|
| 95 | S TEXT=NE_" LAB DATA (MICRO) results indexed." | 
|---|
| 96 | D MES^XPDUTL(TEXT) | 
|---|
| 97 | S END=$H | 
|---|
| 98 | D DETIME^PXRMSXRM(START,END) ; dbia 4113 | 
|---|
| 99 | ;If there were errors send a message. | 
|---|
| 100 | I NERROR>0 D ERRMSG^PXRMSXRM(NERROR,GLOBAL) ; dbia 4113 | 
|---|
| 101 | ;Send a MailMan message with the results. | 
|---|
| 102 | D COMMSG^PXRMSXRM(GLOBAL,START,END,NE,NERROR) ; dbia 4113 | 
|---|
| 103 | S ^PXRMINDX(63,"GLOBAL NAME")=$P(GLOBAL,"""",1) ; dbia 4114 | 
|---|
| 104 | S ^PXRMINDX(63,"BUILT BY")=DUZ ; dbia 4114 | 
|---|
| 105 | S ^PXRMINDX(63,"DATE BUILT")=$$NOW^XLFDT ; dbia 4114 | 
|---|
| 106 | Q | 
|---|
| 107 | ; | 
|---|
| 108 | MISET(DFN,ITEM,DATE,NODE) ; | 
|---|
| 109 | I '$P(ITEM,";",3) D | 
|---|
| 110 | . N ETEXT | 
|---|
| 111 | . S ETEXT=NODE_" missing test" | 
|---|
| 112 | . D ADDERROR^PXRMSXRM("LR(MICRO",ETEXT,.NERROR) ; dbia 4113 | 
|---|
| 113 | E  D | 
|---|
| 114 | . D SLAB^LRPX(DFN,DATE,ITEM,NODE) | 
|---|
| 115 | . S NE=NE+1 | 
|---|
| 116 | Q | 
|---|
| 117 | ; | 
|---|
| 118 | AANUMS(ANUMS) ; from LRPXSXRA | 
|---|
| 119 | N AA,ABREV K ANUMS | 
|---|
| 120 | S AA=0 | 
|---|
| 121 | F  S AA=$O(^LRO(68,AA)) Q:AA<1  D | 
|---|
| 122 | . S ABREV=$P($G(^LRO(68,AA,0)),U,11) | 
|---|
| 123 | . I $L(ABREV) S ANUMS(ABREV)=AA | 
|---|
| 124 | Q | 
|---|
| 125 | ; | 
|---|
| 126 | ACC(TESTS,ACC,BDN,ANUMS,ERR) ; from LRPXSXRA | 
|---|
| 127 | ; returns TESTS from micro accession, ACC, BDN required | 
|---|
| 128 | ; BDN is beginning date number | 
|---|
| 129 | ; ANUMS is array of accession name numbers (avoids lookup on repeated calls) | 
|---|
| 130 | N DIC,LRAA,LRAAB,LRAD,LRAN,TEST,X,Y K DIC,TESTS | 
|---|
| 131 | S ERR=0 | 
|---|
| 132 | I '$L($G(ACC)) S ERR=1 Q | 
|---|
| 133 | S LRAAB=$P(ACC," ") | 
|---|
| 134 | I LRAAB="" Q | 
|---|
| 135 | S BDN=$E($G(BDN)) | 
|---|
| 136 | I BDN'>1 S ERR=1 Q | 
|---|
| 137 | S LRAN=+$P(ACC," ",3) | 
|---|
| 138 | I 'LRAN S ERR=1 Q | 
|---|
| 139 | S LRAA=+$G(ANUMS(LRAAB)) | 
|---|
| 140 | I 'LRAA D | 
|---|
| 141 | . S DIC=68,DIC(0)="M" | 
|---|
| 142 | . S X=LRAAB | 
|---|
| 143 | . D ^DIC K DIC | 
|---|
| 144 | . S LRAA=+Y | 
|---|
| 145 | . S ANUMS(LRAAB)=LRAA | 
|---|
| 146 | I LRAA'>0 S ERR=1 Q | 
|---|
| 147 | S LRAD=BDN_$P(ACC," ",2)_"0000" ; yearly acc areas are assumed | 
|---|
| 148 | S TEST=0 | 
|---|
| 149 | F  S TEST=$O(^LRO(68,LRAA,1,LRAD,1,LRAN,4,TEST)) Q:TEST<1  D | 
|---|
| 150 | . S TESTS(TEST)=TEST | 
|---|
| 151 | Q | 
|---|
| 152 | ; | 
|---|