| [613] | 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 |  ;
 | 
|---|