| 1 | OOPSGUIF ;WIOFO/LLH-RPC routine for OSHA Log ;11/5/01 | 
|---|
| 2 | ;;2.0;ASISTS;**6,7,11**;Jun 03, 2002 | 
|---|
| 3 | ; | 
|---|
| 4 | OSHA(RESULTS,INPUT,CALL) ; get the data | 
|---|
| 5 | ;   Input:  INPUT - contains 4 values, the START AND END DATE, | 
|---|
| 6 | ;                   STATION, and INCLUDE NAME ON REPORT.  The Date of | 
|---|
| 7 | ;                   Occ (fld #4) is used to in/exclude claims from the | 
|---|
| 8 | ;                   report.  If Include name = Y, then names are | 
|---|
| 9 | ;                   printed, else they will not,and if Station='ALL' | 
|---|
| 10 | ;                   then all claims are included, if not 'All', then | 
|---|
| 11 | ;                   only 1 station is included. | 
|---|
| 12 | ;            CALL - Contains the calling menu.  If caller = "U"nion | 
|---|
| 13 | ;                   name is excluded from printing. | 
|---|
| 14 | ; Output: RESULTS - the results array passes data back to the client. | 
|---|
| 15 | N CN,DA,IEN,INCNA,OCC,OOPS,PERSON,SDATE,STDT,STA,ENDDT,EDATE,X,Y | 
|---|
| 16 | N GONE,LOST,DOI,CAX,FILL,TYPE | 
|---|
| 17 | K ^TMP($J,"OSHA") | 
|---|
| 18 | S CN=1,RESULTS(0)="Processing..." | 
|---|
| 19 | S STDT=$P($G(INPUT),U),ENDDT=$P($G(INPUT),U,2) | 
|---|
| 20 | S STA=$P($G(INPUT),U,3) | 
|---|
| 21 | S INCNA=$P($G(INPUT),U,4) | 
|---|
| 22 | I (STDT="")!(ENDDT="")!(STA="")!(INCNA="") D  Q | 
|---|
| 23 | . S RESULTS(0)="Input parameters missing, cannot run report." Q | 
|---|
| 24 | S (SDATE,EDATE)="" | 
|---|
| 25 | S X=STDT D ^%DT S SDATE=Y | 
|---|
| 26 | S X=ENDDT D ^%DT S EDATE=Y | 
|---|
| 27 | ; SDATE made last time in day prior so start date correct | 
|---|
| 28 | S SDATE=(SDATE-1)_".9999",EDATE=EDATE_".9999" | 
|---|
| 29 | S LP="",IEN="" | 
|---|
| 30 | F LP=SDATE:0 S LP=$O(^OOPS(2260,"AD",LP)) Q:(LP'>0)!(LP>EDATE)  D | 
|---|
| 31 | . F  S IEN=$O(^OOPS(2260,"AD",LP,IEN)) Q:IEN'>0  D | 
|---|
| 32 | .. I $$GET1^DIQ(2260,IEN,88,"I")'="Y" Q | 
|---|
| 33 | .. I $$GET1^DIQ(2260,IEN,51,"I")>1 Q | 
|---|
| 34 | .. S STATION=$P(^OOPS(2260,IEN,"2162A"),U,9) | 
|---|
| 35 | .. I $G(STA)'="A",(STATION'=STA) Q | 
|---|
| 36 | .. K OOPS,ARR S DIC="^OOPS(2260," | 
|---|
| 37 | .. S DR=".01;1;3;4;15;30;33;52;63;86;89" | 
|---|
| 38 | .. S DA=IEN,DIQ="OOPS",DIQ(0)="IE" D EN^DIQ1 | 
|---|
| 39 | .. S CAX=OOPS(2260,IEN,52,"I") | 
|---|
| 40 | .. S DOI=OOPS(2260,IEN,4,"I"),DOI=$P($$FMTE^XLFDT(DOI,2),"@") | 
|---|
| 41 | .. ; PER A. BIERENBAUM, GET OCC DESC 5/13/02 | 
|---|
| 42 | .. S OCC=$$OCCDESC(IEN) | 
|---|
| 43 | .. ; S OCC=OOPS(2260,IEN,63,"E")_$E(OOPS(2260,IEN,15,"E"),1,4) | 
|---|
| 44 | .. S GONE=OOPS(2260,IEN,89,"I"),GONE=$S(GONE="Y":"X",1:"") | 
|---|
| 45 | .. S LOST=OOPS(2260,IEN,33,"I") | 
|---|
| 46 | .. S LOST=$S(LOST="Y":"X^",LOST="N":"^X",1:"^X") | 
|---|
| 47 | .. S TYPE=OOPS(2260,IEN,3,"I") | 
|---|
| 48 | .. I TYPE>10&(TYPE<15) S PERSON="Privacy Case" | 
|---|
| 49 | .. S PERSON=OOPS(2260,IEN,1,"E") I CALL="Union"!(INCNA="N") S PERSON="" | 
|---|
| 50 | .. S ARR=OOPS(2260,IEN,.01,"E")_U_DOI_U | 
|---|
| 51 | .. S ARR=ARR_PERSON_U_OCC_U_$E(OOPS(2260,IEN,86,"E"),1,35)_U | 
|---|
| 52 | .. S ARR=ARR_OOPS(2260,IEN,3,"E")_U_OOPS(2260,IEN,30,"E")_U | 
|---|
| 53 | .. S FILL="" I CAX=2 S FILL="^^^" | 
|---|
| 54 | .. S ARR=ARR_FILL_GONE_U_LOST | 
|---|
| 55 | .. S ^TMP($J,"OSHA",CN)=ARR,CN=CN+1 | 
|---|
| 56 | S RESULTS=$NA(^TMP($J,"OSHA")) | 
|---|
| 57 | Q | 
|---|
| 58 | NSTICK(RESULTS,INPUT,CALL) ; NeedleStick Log get data logic | 
|---|
| 59 | ;   Input:  INPUT - contains 4 values, the START DATE, END DATE, | 
|---|
| 60 | ;                   STATION, and INCLUDE NAME ON REPORT.  The Date of | 
|---|
| 61 | ;                   Occurrence (field #4) will be used to include/ | 
|---|
| 62 | ;                   exclude claims from the report.  If the Include | 
|---|
| 63 | ;                   name is = Y then the names will be printed, if no | 
|---|
| 64 | ;                   they will not, and if the Station = 'ALL' then any | 
|---|
| 65 | ;                   claim will be include, if not 'All', but the | 
|---|
| 66 | ;                   station number then only 1 station is included. | 
|---|
| 67 | ;            CALL - Contains the calling menu.  This will be used | 
|---|
| 68 | ;                   to exclude the name from printing if the caller | 
|---|
| 69 | ;                   is 'U'nion. | 
|---|
| 70 | ; Output: RESULTS - the results array passes the data back to the | 
|---|
| 71 | ;                   client. | 
|---|
| 72 | N CN,DA,IEN,INCNA,OCC,PERSON,SDATE,STDT,STA,ENDDT,EDATE,X,Y | 
|---|
| 73 | N LOST,DOI,OOPS,TYPE | 
|---|
| 74 | K ^TMP($J,"NS") | 
|---|
| 75 | S CN=1,RESULTS(0)="Processing..." | 
|---|
| 76 | S STDT=$P($G(INPUT),U),ENDDT=$P($G(INPUT),U,2) | 
|---|
| 77 | S STA=$P($G(INPUT),U,3) | 
|---|
| 78 | S INCNA=$P($G(INPUT),U,4) | 
|---|
| 79 | I (STDT="")!(ENDDT="")!(STA="")!(INCNA="") D  Q | 
|---|
| 80 | . S RESULTS(0)="Input parameters missing, cannot run report." Q | 
|---|
| 81 | S (SDATE,EDATE)="" | 
|---|
| 82 | S X=STDT D ^%DT S SDATE=Y | 
|---|
| 83 | S X=ENDDT D ^%DT S EDATE=Y | 
|---|
| 84 | ; SDATE made last time in day prior so start date correct | 
|---|
| 85 | S SDATE=(SDATE-1)_".9999",EDATE=EDATE_".9999" | 
|---|
| 86 | S LP="",IEN="" | 
|---|
| 87 | F LP=SDATE:0 S LP=$O(^OOPS(2260,"AD",LP)) Q:(LP'>0)!(LP>EDATE)  D | 
|---|
| 88 | . F  S IEN=$O(^OOPS(2260,"AD",LP,IEN)) Q:IEN'>0  D | 
|---|
| 89 | .. ; exclude deleted, replaced by amendment cases | 
|---|
| 90 | .. I $$GET1^DIQ(2260,IEN,51,"I")>1 Q | 
|---|
| 91 | .. S STATION=$P(^OOPS(2260,IEN,"2162A"),U,9) | 
|---|
| 92 | .. I $G(STA)'="A",(STATION'=STA) Q | 
|---|
| 93 | .. ; if Type Incident not = Hollow Bore Needlestick, Sharps Exposure, | 
|---|
| 94 | .. ; Exposure to Body Fluids/Splash, Suture Needlestick don't include | 
|---|
| 95 | .. S TYPE=$$GET1^DIQ(2260,IEN,3,"I") | 
|---|
| 96 | .. I TYPE<11!(TYPE>14) Q | 
|---|
| 97 | .. ; now get the data and put in array. | 
|---|
| 98 | .. K OOPS,ARR S DIC="^OOPS(2260," | 
|---|
| 99 | .. S DR=".01;1;3;4;15;14;29;30;33;37;38;51;52;82;86;108" | 
|---|
| 100 | .. S DA=IEN,DIQ="OOPS",DIQ(0)="IE" D EN^DIQ1 | 
|---|
| 101 | .. S DOI=OOPS(2260,IEN,4,"E") | 
|---|
| 102 | .. ; PER A. BIERENBAUM, USE OCC DESC 5/13/02 | 
|---|
| 103 | .. S OCC=$$OCCDESC(IEN) | 
|---|
| 104 | .. ; S OCC=$E(OOPS(2260,IEN,15,"E"),1,4) | 
|---|
| 105 | .. ; patch 7 remove lost time | 
|---|
| 106 | .. ; S LOST=OOPS(2260,IEN,33,"E") | 
|---|
| 107 | .. S INJILL=OOPS(2260,IEN,52,"I") | 
|---|
| 108 | .. S INJILL=$S(INJILL=1:"Injury",INJILL=2:"Illness",1:"") | 
|---|
| 109 | .. ; patch 7 - only print privacy case in name field - all cases | 
|---|
| 110 | .. S PERSON="Privacy Case" | 
|---|
| 111 | .. ; S PERSON=OOPS(2260,IEN,1,"E") | 
|---|
| 112 | .. I CALL="Union"!(INCNA="N") S PERSON="" | 
|---|
| 113 | .. S ARR=IEN_U_OOPS(2260,IEN,.01,"E")_U_DOI_U_PERSON_U_INJILL_U | 
|---|
| 114 | .. S ARR=ARR_OOPS(2260,IEN,51,"E")_U_OCC_U_$E(OOPS(2260,DA,14,"E"),1,4) | 
|---|
| 115 | .. S ARR=ARR_U_OOPS(2260,IEN,86,"E")_U | 
|---|
| 116 | .. S ARR=ARR_OOPS(2260,IEN,3,"E")_U_OOPS(2260,IEN,108,"E") | 
|---|
| 117 | .. S ARR=ARR_U_OOPS(2260,IEN,30,"E")_U_$E(OOPS(2260,IEN,29,"E"),1,45)_U | 
|---|
| 118 | .. S ARR=ARR_$E(OOPS(2260,IEN,37,"E"),1,50)_U | 
|---|
| 119 | .. S ARR=ARR_$E(OOPS(2260,IEN,38,"E"),1,50)_U_OOPS(2260,IEN,82,"E") | 
|---|
| 120 | .. S ^TMP($J,"NS",CN)=ARR K ARR | 
|---|
| 121 | .. S CN=CN+1 | 
|---|
| 122 | S RESULTS=$NA(^TMP($J,"NS")) | 
|---|
| 123 | Q | 
|---|
| 124 | OCCDESC(IEN) ;Get Occupation Description | 
|---|
| 125 | ; | 
|---|
| 126 | ;  Input:  IEN - IEN of the ASISTS Case number to get the Occ Desc | 
|---|
| 127 | ; Output:      - will be the Occupation description | 
|---|
| 128 | ; | 
|---|
| 129 | N INC,FLD | 
|---|
| 130 | S INC=$$GET1^DIQ(2260,IEN,52,"I") | 
|---|
| 131 | S FLD=$S(INC=1:111,INC=2:208,1:"") | 
|---|
| 132 | I 'FLD Q "" | 
|---|
| 133 | Q $$GET1^DIQ(2260,IEN,FLD) | 
|---|
| 134 | DSPUTE ; Reason for Dispute Report - called from DSPUTE^OOPSGUIR | 
|---|
| 135 | ; code in DSPUTE^OOPSGUIF requires case to be a CA1 | 
|---|
| 136 | N BLK36,DIS,DSPCD,F174 | 
|---|
| 137 | S F174=$$GET1^DIQ(2260,IEN,174,"I")      ; determines lost time or not | 
|---|
| 138 | S F174=$S(F174=3:"LT",1:"NLT") | 
|---|
| 139 | S DIS=$$GET1^DIQ(2260,IEN,165.2,"I"),DSPCD=$$GET1^DIQ(2260,IEN,347) | 
|---|
| 140 | I $G(DIS)="" S DIS="N" | 
|---|
| 141 | I DIS="N" S DSPCD="zCase not disputed, no dispute code expected" | 
|---|
| 142 | I (DIS="Y"),DSPCD="" S DSPCD="zCase disputed, no dispute code entered" | 
|---|
| 143 | ;if data in State the reason in detail question and case controverted | 
|---|
| 144 | ;don't count, otherwise report number of entries in free text field | 
|---|
| 145 | S BLK36="" | 
|---|
| 146 | I DIS="Y",($P($G(^OOPS(2260,IEN,"CA1K",0)),U,3)) D | 
|---|
| 147 | .I $$GET1^DIQ(2260,IEN,165.1,"I")="Y" Q | 
|---|
| 148 | .S BLK36="zBlk 36 also has text entered" | 
|---|
| 149 | S:'$D(ARR(DSPCD,F174)) ARR(DSPCD,F174)=0 | 
|---|
| 150 | S ARR(DSPCD,F174)=ARR(DSPCD,F174)+1 | 
|---|
| 151 | I BLK36'="" D | 
|---|
| 152 | .S:'$D(ARR(BLK36,F174)) ARR(BLK36,F174)=0 | 
|---|
| 153 | .S ARR(BLK36,F174)=ARR(BLK36,F174)+1 | 
|---|
| 154 | Q | 
|---|