| 1 | ORY244 ;SLC/JEH -- post-install for OR*3*244 ;12/14/2005
 | 
|---|
| 2 |  ;;3.0;ORDER ENTRY/RESULTS REPORTING;**244**;Dec 17, 1997;Build 1
 | 
|---|
| 3 |  ; Variables used: 
 | 
|---|
| 4 |  ; DATE = the date 2nd part of the sub script of LRO(69,DATE
 | 
|---|
| 5 |  ; LORSN = the multiple counter of 69 or 4th part  to get to each LAB ORDER
 | 
|---|
| 6 |  ; LABDFN = DFN of LR file
 | 
|---|
| 7 |  ; TSTCNT = the sub multiple / counter of the lab test or the 6th part of the 69 sub script   
 | 
|---|
| 8 |  ; OERRDFN = DFN of OR(100 
 | 
|---|
| 9 |  ; LRSUB = sub of LAB(60, the lab test in LR
 | 
|---|
| 10 |  ; L60DFN = DFN of Lab test performed
 | 
|---|
| 11 |  ; TSTCNT = 6th part of sub script of LOR(69, pts to LAB TEST( LAB(60, and corresponding OR DFN
 | 
|---|
| 12 |  ; TSTTYP= CH MI AP, from the order file OR(100
 | 
|---|
| 13 |  ; PANEL=1 Indicates from a panel test versies single test PANEL="" 
 | 
|---|
| 14 |  ; CNT244 = Number of Abnormal results modified
 | 
|---|
| 15 |  ;
 | 
|---|
| 16 |  ;
 | 
|---|
| 17 | POST ; -- Postinit corrects the abnormal flag and resuslts set in the OR(100, file
 | 
|---|
| 18 |  N DATE,LOCATION,PTNAME,LABDFN,LORSN,LRSUB,TSTCNT,PANEL,TSTTYP,LRIVDAT,LSTEST,LABPNUM,TEST
 | 
|---|
| 19 |  N L60DFN,RCNT,LRRESULT,LV60TST,OERRDFN,OR0,ORESULTS,CNT244,DAT60LV1,DAT60LV2,DAT69LV1,DAT69LV2
 | 
|---|
| 20 |  S LOCATION="",PTNAME="",LABDFN="",PANEL="",CNT244=0,TEST=""
 | 
|---|
| 21 |  K ^TMP("ORFIX",$J),^TMP("ORTXT",$J)
 | 
|---|
| 22 |  S ^TMP("ORFIX",$J,0)=0
 | 
|---|
| 23 |  ;
 | 
|---|
| 24 | PTR69 ; -- Loop thru Lab order file 69 to find ptr to Order file (OR 100) and Lab Data file (LR
 | 
|---|
| 25 |  N ORMSG,ZTSK
 | 
|---|
| 26 |  S ORMSG(1)=""
 | 
|---|
| 27 |  S ORMSG(2)="STARTING reinstatement of missing abnormal results in the ORDER file #100"
 | 
|---|
| 28 |  S ORMSG(3)=""
 | 
|---|
| 29 |  D MES^XPDUTL(.ORMSG)
 | 
|---|
| 30 |  ;W !,"STARTING reinstatement of missing abnormal results in the ORDER file #100"
 | 
|---|
| 31 |  S DATE=3050815 ; PROBLEM START WITH LR*5.2*340 given to test sites Aug 15
 | 
|---|
| 32 |  F  S DATE=$O(^LRO(69,DATE)) Q:DATE'?7N!(DATE>3051231)  D  ;69 loop
 | 
|---|
| 33 |  . ;
 | 
|---|
| 34 |  . S LORSN=0
 | 
|---|
| 35 |  . F  S LORSN=$O(^LRO(69,DATE,1,LORSN)) Q:LORSN'>0  D    ;loop within LR order to get multi test
 | 
|---|
| 36 |  . . ;
 | 
|---|
| 37 |  . . S DAT69LV1=$G(^LRO(69,DATE,1,LORSN,0)) Q:DAT69LV1=""
 | 
|---|
| 38 |  . . S LABDFN=$P(^LRO(69,DATE,1,LORSN,0),"^",1)  ;get LR DFN
 | 
|---|
| 39 |  . . I LABDFN="" Q   ;No LR not need to process v2
 | 
|---|
| 40 |  . . ;
 | 
|---|
| 41 |  . . S TSTCNT=0
 | 
|---|
| 42 |  . . F  S TSTCNT=$O(^LRO(69,DATE,1,LORSN,2,TSTCNT)) Q:TSTCNT=""!(TSTCNT]"@")  D  ;loop thru test 
 | 
|---|
| 43 |  . . . ;
 | 
|---|
| 44 |  . . . W "."
 | 
|---|
| 45 |  . . . S DAT69LV2=$G(^LRO(69,DATE,1,LORSN,2,TSTCNT,0)) Q:DAT69LV2=""
 | 
|---|
| 46 |  . . . S OERRDFN=$P(^LRO(69,DATE,1,LORSN,2,TSTCNT,0),"^",7)  ;get DFN of OR(100
 | 
|---|
| 47 |  . . . I OERRDFN="" Q   ;No OR(100 no need to process v2
 | 
|---|
| 48 |  . . . S L60DFN=+$P(^LRO(69,DATE,1,LORSN,2,TSTCNT,0),"^",1)  ;get DFN of 60 lab test performed
 | 
|---|
| 49 |  . . . I L60DFN="" Q   ;No lab test no need to process v2
 | 
|---|
| 50 |  . . . ; If test is a Panel of test or a single test?
 | 
|---|
| 51 |  . . . S DAT60LV1=$G(^LAB(60,L60DFN,0)) Q:DAT60LV1=""
 | 
|---|
| 52 |  . . . S LSTEST=L60DFN
 | 
|---|
| 53 |  . . . S PANEL=""
 | 
|---|
| 54 |  . . . S PANEL=$G(^LAB(60,L60DFN,2,1,0)) ;if there, equal to 1st test in panel test.
 | 
|---|
| 55 |  . . . I PANEL'="" S PANEL=L60DFN
 | 
|---|
| 56 |  . . . ; OR100FU GET INFO FROM OR(100
 | 
|---|
| 57 |  . . . I $G(^OR(100,OERRDFN,7))="" Q  ;No results no need to process
 | 
|---|
| 58 |  . . . I $P(^OR(100,OERRDFN,7),"^",2)=1 Q  ;If abnomal results already, no need to process
 | 
|---|
| 59 |  . . . ;
 | 
|---|
| 60 |  . . . S LRIVDAT="",TSTTYP="",ORESULTS=""
 | 
|---|
| 61 |  . . . I $G(^OR(100,OERRDFN,4))="" Q   ;If no date time of type quit v3
 | 
|---|
| 62 |  . . . S LRIVDAT=$P(^OR(100,OERRDFN,4),";",5)
 | 
|---|
| 63 |  . . . S TSTTYP=$P(^OR(100,OERRDFN,4),";",4)
 | 
|---|
| 64 |  . . . ;If not one of the Lab test types processed by LR7OR1 then quit
 | 
|---|
| 65 |  . . . I TSTTYP'="CH" Q
 | 
|---|
| 66 |  . . . I LRIVDAT="" Q  ;No LR date no need to process v2
 | 
|---|
| 67 |  . . . I PANEL="" D NONPAN
 | 
|---|
| 68 |  . . . ;
 | 
|---|
| 69 |  . . . I PANEL'="" D PAN60 ; PROCESS A PANEL OF TEST FOR THSI ORDER.
 | 
|---|
| 70 |  ;
 | 
|---|
| 71 |  D MAIL
 | 
|---|
| 72 |  ;W !,"Up date of Order file is complete!"
 | 
|---|
| 73 |  ;W !,"Please check your Mail for a list of modified ORDER files"
 | 
|---|
| 74 |  N ORMSG,ZTSK
 | 
|---|
| 75 |  S ORMSG(1)=""
 | 
|---|
| 76 |  S ORMSG(2)="Up date of Order file is complete!"
 | 
|---|
| 77 |  S ORMSG(3)="Please check your Mail for a list of modified ORDER files"
 | 
|---|
| 78 |  S ORMSG(4)=""
 | 
|---|
| 79 |  D MES^XPDUTL(.ORMSG)
 | 
|---|
| 80 |  Q
 | 
|---|
| 81 |  ;
 | 
|---|
| 82 | NONPAN ;
 | 
|---|
| 83 |  S DAT60LV2=$G(^LAB(60,L60DFN,.2)) Q:DAT60LV2=""
 | 
|---|
| 84 |  S LRSUB=$P(^LAB(60,L60DFN,.2),"^",1)
 | 
|---|
| 85 |  I LRSUB="" Q   ; if not test skip v2
 | 
|---|
| 86 |  S LRRESULT=$G(^LR(LABDFN,TSTTYP,LRIVDAT,LRSUB)) Q:LRRESULT=""  ;If no results quit
 | 
|---|
| 87 |  S TEST=$P(LRRESULT,"^",2)
 | 
|---|
| 88 |  I (TEST["L")!(TEST["H") D  Q
 | 
|---|
| 89 |  . I $G(^LAB(60,L60DFN,.1))="" Q  ;If no test name quit v3
 | 
|---|
| 90 |  . S ORESULTS=$P(^LAB(60,L60DFN,.1),"^",1)_"="_$P(LRRESULT,"^",1)
 | 
|---|
| 91 |  . D ORUPDAT ;set ABNORMAL results in Order file
 | 
|---|
| 92 |  Q
 | 
|---|
| 93 |  ;
 | 
|---|
| 94 | PAN60 ;
 | 
|---|
| 95 |  S ORESULTS=""   ;Clear for the next order file
 | 
|---|
| 96 |  ; S DAT60LV1=$G(^LAB(60,LRSUB,0)) Q:DAT60LV1=""
 | 
|---|
| 97 |  ;
 | 
|---|
| 98 |  ; Lab(60 DFN in LOR(69 was a Panel of test.
 | 
|---|
| 99 |  ; If an abnormal test in the panel test loop thru the panel test to pull each individual test 
 | 
|---|
| 100 |  ; also loop Thru the LR from the start to pull the results to put with the test from LAB(60 
 | 
|---|
| 101 |  S LRSUB=""
 | 
|---|
| 102 |  ; Loop Thru LR file to pull individual test results when from a panel of test.
 | 
|---|
| 103 |  S RCNT=0
 | 
|---|
| 104 |  S LSTEST=""
 | 
|---|
| 105 |  S LABPNUM=0
 | 
|---|
| 106 |  F  S LABPNUM=$O(^LAB(60,PANEL,2,LABPNUM)) Q:LABPNUM=""!(LABPNUM]"@")  D
 | 
|---|
| 107 |  . S LV60TST=$G(^LAB(60,PANEL,2,LABPNUM,0)) Q:LV60TST=""
 | 
|---|
| 108 |  . S L60DFN=$P(LV60TST,"^",1)
 | 
|---|
| 109 |  . I L60DFN="" Q  ;If not test skip v3
 | 
|---|
| 110 |  . S LRSUB=$G(^LAB(60,L60DFN,.2))  ; If L60DFN not null but not valid quit v3
 | 
|---|
| 111 |  . I LRSUB="" Q  ; v3
 | 
|---|
| 112 |  . S LRSUB=$P(^LAB(60,L60DFN,.2),"^",1)
 | 
|---|
| 113 |  . S LRRESULT=$G(^LR(LABDFN,TSTTYP,LRIVDAT,LRSUB)) Q:LRRESULT=""  ;If no test quit
 | 
|---|
| 114 |  . S TEST=$P(LRRESULT,"^",2) Q:LRRESULT=""  ;If no results quit
 | 
|---|
| 115 |  . I (TEST["L")!(TEST["H") D  Q
 | 
|---|
| 116 |  . . S RCNT=RCNT+1
 | 
|---|
| 117 |  . . S DAT60LV1=$G(^LAB(60,L60DFN,0)) Q:DAT60LV1=""
 | 
|---|
| 118 |  . . S LSTEST=LRSUB
 | 
|---|
| 119 |  . . I $G(^LAB(60,L60DFN,.1))="" Q  ;If no test name quit v3
 | 
|---|
| 120 |  . . S $P(ORESULTS,",",RCNT)=$P(^LAB(60,L60DFN,.1),"^",1)_"="_$P(LRRESULT,"^",1)_" "
 | 
|---|
| 121 |  . . ; S LRSUB=LRSUB+1  ;Bump to the next LR test results
 | 
|---|
| 122 |  I ORESULTS'="" D ORUPDAT ;set ABNORMAL results in Order file
 | 
|---|
| 123 |  Q
 | 
|---|
| 124 |  ;
 | 
|---|
| 125 | ORUPDAT ; Update the OR(100, file Abnormal results
 | 
|---|
| 126 |  ;
 | 
|---|
| 127 |  S CNT244=CNT244+1
 | 
|---|
| 128 |  S ^TMP("ORFIX",$J,0)=CNT244
 | 
|---|
| 129 |  S PTNAME=""
 | 
|---|
| 130 |  S OR0=$G(^OR(100,OERRDFN,0))
 | 
|---|
| 131 |  S PTNAME=$$PTNM($P(OR0,U,2))
 | 
|---|
| 132 |  S ^TMP("ORFIX",$J,CNT244)="PATIENT NAME="_PTNAME
 | 
|---|
| 133 |  S ^TMP("ORFIX",$J,CNT244,0)=" ORER FILE DFN="_OERRDFN
 | 
|---|
| 134 |  S ^TMP("ORFIX",$J,CNT244,1)=" LAB DATA LRDFN="_LABDFN
 | 
|---|
| 135 |  I PANEL="" S ^TMP("ORFIX",$J,CNT244,2)=" LABORATORY TEST IEN="_LSTEST
 | 
|---|
| 136 |  I PANEL'="" S ^TMP("ORFIX",$J,CNT244,2)=" LABORATORY TEST(PANEL) IEN="_PANEL
 | 
|---|
| 137 |  S ^TMP("ORFIX",$J,CNT244,3)=" ABNORMAL TEST RESULTS: "_ORESULTS
 | 
|---|
| 138 |  S $P(^OR(100,OERRDFN,7),"^",2)=1
 | 
|---|
| 139 |  S $P(^OR(100,OERRDFN,7),"^",3)=ORESULTS
 | 
|---|
| 140 |  ;W !," ABNORMAL TEST RESULTS: ",ORESULTS
 | 
|---|
| 141 |  ;
 | 
|---|
| 142 |  ;S THISTEST=^OR(100,OERRDFN,7)
 | 
|---|
| 143 |  ;W !,"Before update ^OR(100,"_OERRDFN_",7)=",THISTEST
 | 
|---|
| 144 |  ;
 | 
|---|
| 145 |  ;S THISTEST=^OR(100,OERRDFN,7)
 | 
|---|
| 146 |  ;W !,"After update ^OR(100,"_OERRDFN_",7)=",THISTEST
 | 
|---|
| 147 |  ;W !
 | 
|---|
| 148 |  Q
 | 
|---|
| 149 |  ;
 | 
|---|
| 150 |  ;
 | 
|---|
| 151 |  ;
 | 
|---|
| 152 | MAIL ;Send results of cleanup in a mail message to initiator
 | 
|---|
| 153 |  N I,XMSUB,XMTEXT,XMDUZ,XMY,DIFROM
 | 
|---|
| 154 |  S XMSUB="Patch OR*3*244 Clean up completed"
 | 
|---|
| 155 |  S XMDUZ="Patch OR*3*244 Clean up job"
 | 
|---|
| 156 |  S XMY(.5)="" S:$G(DUZ) XMY(DUZ)=""
 | 
|---|
| 157 |  S XMTEXT="^TMP(""ORTXT"",$J,"
 | 
|---|
| 158 |  K ^TMP("ORTXT",$J)
 | 
|---|
| 159 |  ; set up header and count
 | 
|---|
| 160 |  S I=1
 | 
|---|
| 161 |  S ^TMP("ORTXT",$J,I)="The reinstatement of Abnormal results has completed.",I=I+1
 | 
|---|
| 162 |  S ^TMP("ORTXT",$J,I)="Below is a listing of Abnormal results taken from Lab test and added to the Order file.",I=I+1
 | 
|---|
| 163 |  S ^TMP("ORTXT",$J,I)="",I=I+1
 | 
|---|
| 164 |  S ^TMP("ORTXT",$J,I)=+$P($G(^TMP("ORFIX",$J,0)),U)_" orders had abnormal results added.",I=I+1
 | 
|---|
| 165 |  S ^TMP("ORTXT",$J,I)="",I=I+1
 | 
|---|
| 166 |  I $G(^TMP("ORFIX",$J,0))=0 S ^TMP("ORTXT",$J,I)="No changes were made to your database.",I=I+1
 | 
|---|
| 167 |  S ^TMP("ORTXT",$J,I)="",I=I+1
 | 
|---|
| 168 |  ; set up message text
 | 
|---|
| 169 |  S CNT244=0 F  S CNT244=$O(^TMP("ORFIX",$J,CNT244)) Q:CNT244=""  D
 | 
|---|
| 170 |  .S ^TMP("ORTXT",$J,I)=^TMP("ORFIX",$J,CNT244),I=I+1
 | 
|---|
| 171 |  .S ^TMP("ORTXT",$J,I)=^TMP("ORFIX",$J,CNT244,0),I=I+1
 | 
|---|
| 172 |  .S ^TMP("ORTXT",$J,I)=^TMP("ORFIX",$J,CNT244,1),I=I+1
 | 
|---|
| 173 |  .S ^TMP("ORTXT",$J,I)=^TMP("ORFIX",$J,CNT244,2),I=I+1
 | 
|---|
| 174 |  .S ^TMP("ORTXT",$J,I)=^TMP("ORFIX",$J,CNT244,3),I=I+1
 | 
|---|
| 175 |  .S ^TMP("ORTXT",$J,I)="",I=I+1
 | 
|---|
| 176 |  D ^XMD ;send results
 | 
|---|
| 177 |  Q
 | 
|---|
| 178 |  ;
 | 
|---|
| 179 | PTNM(IEN) ;Return pt name or -1 if unable to determine
 | 
|---|
| 180 |  N DFN,VADM
 | 
|---|
| 181 |  I +IEN=0!(IEN'["DPT") Q -1
 | 
|---|
| 182 |  S DFN=+IEN
 | 
|---|
| 183 |  D ^VADPT
 | 
|---|
| 184 |  I $G(VADM(1))="" Q -1
 | 
|---|
| 185 |  Q $G(VADM(1))
 | 
|---|
| 186 |  ;
 | 
|---|