| 1 | RCDPEWL7 ;ALB/TMK - EDI LOCKBOX WORKLIST ERA DISPLAY SCREEN ;16-JAN-04
 | 
|---|
| 2 |  ;;4.5;Accounts Receivable;**208,222**;Mar 20, 1995
 | 
|---|
| 3 |  ;;Per VHA Directive 10-93-142, this routine should not be modified.
 | 
|---|
| 4 |  Q
 | 
|---|
| 5 |  ;
 | 
|---|
| 6 | BLD(RCSORT) ; Build list with sort criteria
 | 
|---|
| 7 |  ; RCSORT = the sort levels to use to display the data in ^ pieces
 | 
|---|
| 8 |  ;  piece 1 = the codes for the first level sort (sort code;null or -)
 | 
|---|
| 9 |  ;  piece 2 = the codes for the second level sort
 | 
|---|
| 10 |  ;     sort code is the type of data to sort by;- indicates reverse order
 | 
|---|
| 11 |  N Z,Z1,RCT,RCZ
 | 
|---|
| 12 |  S (RCT,VALMCNT)=0
 | 
|---|
| 13 |  I '$D(^TMP($J,"RCERA_LIST")) D
 | 
|---|
| 14 |  . S Z=0 F  S Z=$O(^TMP("RCDPE-ERA_WLDX",$J,Z)) Q:'Z  S RCZ=$P($G(^(Z)),U,2) D
 | 
|---|
| 15 |  .. I $$FILTER^RCDPEWL0(RCZ) S ^TMP($J,"RCERA_LIST",$$SL(RCZ,$P(RCSORT,U)),$$SL(RCZ,$P(RCSORT,U,2)),RCZ)=""
 | 
|---|
| 16 |  . K ^TMP("RCDPE-ERA_WLDX",$J),^TMP("RCDPE-ERA_WL",$J)
 | 
|---|
| 17 |  ;
 | 
|---|
| 18 |  S Z=""
 | 
|---|
| 19 |  I RCSORT'["PN;-" D
 | 
|---|
| 20 |  . F  S Z=$O(^TMP($J,"RCERA_LIST",Z)) Q:Z=""  S Z1="" F  S Z1=$O(^TMP($J,"RCERA_LIST",Z,Z1)) Q:Z1=""  D EXTRACT(Z,Z1,.RCT)
 | 
|---|
| 21 |  ;
 | 
|---|
| 22 |  I $P(RCSORT,U)["PN;-" D
 | 
|---|
| 23 |  . F  S Z=$O(^TMP($J,"RCERA_LIST",Z),-1) Q:Z=""  S Z1="" F  S Z1=$O(^TMP($J,"RCERA_LIST",Z,Z1)) Q:Z1=""  D EXTRACT(Z,Z1,.RCT)
 | 
|---|
| 24 |  ;
 | 
|---|
| 25 |  I $P(RCSORT,U,2)["PN;-" D
 | 
|---|
| 26 |  . F  S Z=$O(^TMP($J,"RCERA_LIST",Z)) Q:Z=""  S Z1="" F  S Z1=$O(^TMP($J,"RCERA_LIST",Z,Z1),-1) Q:Z1=""  D EXTRACT(Z,Z1,.RCT)
 | 
|---|
| 27 |  ;
 | 
|---|
| 28 |  I '$O(^TMP($J,"RCERA_LIST",0)) D SET("No ERAs left for your selection criteria")
 | 
|---|
| 29 |  K ^TMP($J,"RCERA_LIST")
 | 
|---|
| 30 |  S ^TMP("RCERA_PARAMS",$J,"SORT")=RCSORT
 | 
|---|
| 31 |  Q
 | 
|---|
| 32 |  ;
 | 
|---|
| 33 | EXTRACT(RCSRT1,RCSRT2,RCT) ; Extract the data
 | 
|---|
| 34 |  ; RCSRT1 = data value at 1st sort level
 | 
|---|
| 35 |  ; RCSRT2 = data value at 2nd sort level
 | 
|---|
| 36 |  ; RCT = running entry counter - returned if passed by ref
 | 
|---|
| 37 |  N FIRST,RCZ,RC0,RCEFT,RCSTAT,RCPOST,X,Z,Z0
 | 
|---|
| 38 |  S RCZ=0 F  S RCZ=$O(^TMP($J,"RCERA_LIST",RCSRT1,RCSRT2,RCZ)) Q:'RCZ  D
 | 
|---|
| 39 |  . S RCT=RCT+1,RC0=$G(^RCY(344.4,RCZ,0))
 | 
|---|
| 40 |  . S RCEFT=+$O(^RCY(344.31,"AERA",RCZ,0))
 | 
|---|
| 41 |  . S RCSTAT=$S('RCEFT:U_$S($P(RC0,U,15)="CHK":"(CHECK PAYMENT EXPECTED)",$P(RC0,U,15)="NON":"(NO PAYMENT EXPECTED)",$P(RC0,U,9)=2:"(CHECK PAYMENT CHOSEN)",1:"N/A"),1:$$FMSSTAT^RCDPUREC(+$P($G(^RCY(344.31,RCEFT,0)),U,9)))
 | 
|---|
| 42 |  . S RCPOST=$S(RCEFT:"EFT RECEIPT STATUS: ",1:"")_$P(RCSTAT,U,2)
 | 
|---|
| 43 |  . S X=$E(RCT_$J("",4),1,4)_$S($D(^RCY(344.49,RCZ)):" ",1:"-")_$E($P(RC0,U)_$J("",5),1,5)_"  "_$E($P(RC0,U,2)_$J("",30),1,30)_"  "_$J($$FMTE^XLFDT($P(RC0,U,7),"2D"),8)_$J("",5)_$J(+$P(RC0,U,5),12,2)
 | 
|---|
| 44 |  . S $E(X,73,80)=$$FMTE^XLFDT($P(RC0,U,7),"2D")
 | 
|---|
| 45 |  . D SET(X,RCT,RCZ)
 | 
|---|
| 46 |  . S X=$J("",12)_$E($P(RC0,U,6)_$J("",30),1,30)_"  APPROX # EEOBs: "_+$$CTEEOB^RCDPEWLB(RCZ)
 | 
|---|
| 47 |  . D SET(X,RCT,RCZ)
 | 
|---|
| 48 |  . S X=$J("",12)_$E($$EXTERNAL^DILFD(344.4,.09,"",$P(RC0,U,9))_$J("",30),1,30)_"  "_RCPOST
 | 
|---|
| 49 |  . D SET(X,RCT)
 | 
|---|
| 50 |  . I $G(^TMP("RCERA_PARAMS",$J,"BATCHON")) D
 | 
|---|
| 51 |  .. S Z=0 F  S Z=$O(^RCY(344.49,RCZ,3,Z)) Q:'Z  S Z0=$G(^(Z,0)) I Z0'="" D
 | 
|---|
| 52 |  ... S X=$J("",12)_$E("- BATCH #"_$P(Z0,U)_$J("",4),1,13)_" "_$E($P(Z0,U,2)_$J("",30),1,30)_"  "_$S('$P(Z0,U,3):"NOT ",1:"")_"READY TO POST"
 | 
|---|
| 53 |  ... D SET(X,RCT)
 | 
|---|
| 54 |  . D SET(" ",RCT)
 | 
|---|
| 55 |  S VALMSG="'-' Before the ERA # indicates no scratchpad entry yet"
 | 
|---|
| 56 |  ;
 | 
|---|
| 57 |  Q
 | 
|---|
| 58 |  ;
 | 
|---|
| 59 | SL(Y,SORT) ; Returns data for sort level from entry Y in file 344.4
 | 
|---|
| 60 |  ; SORT = the sort data in ';' delimited pieces
 | 
|---|
| 61 |  ;    pc 1 = code for sort data
 | 
|---|
| 62 |  ;    pc 2 = the order requested (- or null)
 | 
|---|
| 63 |  ;  
 | 
|---|
| 64 |  N RC0,DAT,SORT1,SORT2
 | 
|---|
| 65 |  S SORT1=$P(SORT,";"),SORT2=$P(SORT,";",2)
 | 
|---|
| 66 |  S RC0=$G(^RCY(344.4,Y,0)),DAT=" "
 | 
|---|
| 67 |  ; No sort
 | 
|---|
| 68 |  I SORT="" G SLQ
 | 
|---|
| 69 |  ; Amt paid
 | 
|---|
| 70 |  I SORT1="AP" D  G SLQ
 | 
|---|
| 71 |  . S DAT=SORT2_+$P(RC0,U,5)
 | 
|---|
| 72 |  ; ERA date pd
 | 
|---|
| 73 |  I SORT1="DP" D  G SLQ
 | 
|---|
| 74 |  . S DAT=SORT2_($P(RC0,U,4)\1)
 | 
|---|
| 75 |  ; Payer name
 | 
|---|
| 76 |  I SORT1="PN" D  G SLQ
 | 
|---|
| 77 |  . S DAT=$$UPPER($P(RC0,U,6))
 | 
|---|
| 78 |  ; ERA date received
 | 
|---|
| 79 |  I SORT1="DR" D  G SLQ
 | 
|---|
| 80 |  . S DAT=SORT2_($P(RC0,U,7)\1)
 | 
|---|
| 81 |  ;
 | 
|---|
| 82 | SLQ Q $S(DAT'="":DAT,1:" ")
 | 
|---|
| 83 |  ;
 | 
|---|
| 84 | INIT ; Entry point for List template to build the display of ERAs
 | 
|---|
| 85 |  ;
 | 
|---|
| 86 |  ; Parameters for selecting ERAs to be included in the list are
 | 
|---|
| 87 |  ; contained in the global ^TMP("RCERA_PARAMS",$J,parameter name)
 | 
|---|
| 88 |  ;
 | 
|---|
| 89 |  N RCZ,RC0,RCT,RCTT,RCQUIT,RCDTFR,RCDTTO,DTOUT,DUOUT,DIR,X,Y,Z,Z1,RCPOST,RCEFT,RCINDX
 | 
|---|
| 90 |  D CLEAN^VALM10
 | 
|---|
| 91 |  K ^TMP("RCDPE-ERA_WL",$J),^TMP("RCDPE-ERA_WLDX",$J),^TMP($J,"RCERA_LIST")
 | 
|---|
| 92 |  ;
 | 
|---|
| 93 |  S (RCT,RCTT,RCQUIT)=0
 | 
|---|
| 94 |  ;
 | 
|---|
| 95 |  S RCDTFR=+$P($G(^TMP("RCERA_PARAMS",$J,"RCDT")),U),RCDTTO=$S($P($G(^TMP("RCERA_PARAMS",$J,"RCDT")),U,2):$P(^("RCDT"),U,2),1:DT)
 | 
|---|
| 96 |  ;
 | 
|---|
| 97 |  S RCINDX=$S(RCDTFR:RCDTFR-.00000001,1:0)
 | 
|---|
| 98 |  F  S RCINDX=$O(^RCY(344.4,"AFD",RCINDX)) Q:'RCINDX!(RCINDX\1>RCDTTO)!RCQUIT  S RCZ=0 F  S RCZ=$O(^RCY(344.4,"AFD",RCINDX,RCZ)) Q:'RCZ  D  Q:RCQUIT
 | 
|---|
| 99 |  . ;
 | 
|---|
| 100 |  . S RCTT=RCTT+1 I '(RCTT#5000) D  Q:RCQUIT
 | 
|---|
| 101 |  .. S DIR("A",1)=RCTT_" ERA RECORDS HAVE ALREADY BEEN SEARCHED USING YOUR CRITERIA",DIR("A",2)="LAST DATE SEARCHED WAS "_$$FMTE^XLFDT(RCINDX,"2D"),DIR("A")="DO YOU WANT TO CONTINUE THIS SEARCH?: "
 | 
|---|
| 102 |  .. S DIR("B")="NO",DIR("?")="RESPOND NO HERE AND RESTART TO SELECT A DATE RANGE TO LIMIT THE SEARCH",DIR(0)="YA" W ! D ^DIR K DIR
 | 
|---|
| 103 |  .. I Y=1!$D(DTOUT) W !,$S($D(DTOUT):"TIME OUT - ",1:""),"SEARCH CONTINUED",! Q
 | 
|---|
| 104 |  .. I $D(DUOUT)!(Y=0) S RCQUIT=1 Q
 | 
|---|
| 105 |  . ;
 | 
|---|
| 106 |  . S RC0=$G(^RCY(344.4,RCZ,0))
 | 
|---|
| 107 |  . I $$FILTER^RCDPEWL0(RCZ) S ^TMP($J,"RCERA_LIST",$$SL(RCZ,"DR"),$$SL(RCZ,""),RCZ)=""
 | 
|---|
| 108 |  ;
 | 
|---|
| 109 |  ; Output the list
 | 
|---|
| 110 |  I 'RCQUIT D
 | 
|---|
| 111 |  . D:$D(^TMP($J,"RCERA_LIST")) BLD("DR^N")
 | 
|---|
| 112 |  . I '$O(^TMP("RCDPE-ERA_WL",$J,0)) D
 | 
|---|
| 113 |  .. S DIR(0)="EA",DIR("A",1)="THERE ARE NO ERAs MATCHING YOUR SELECTION CRITERIA",DIR("A")="PRESS RETURN TO CONTINUE " W ! D ^DIR K DIR S RCQUIT=1
 | 
|---|
| 114 |  I RCQUIT K ^TMP("RCDPE-ERA_WL",$J),^TMP("RCDPE-ERA_WLDX",$J),^TMP($J,"RCERA_LIST") S VALMQUIT=""
 | 
|---|
| 115 |  Q
 | 
|---|
| 116 |  ;
 | 
|---|
| 117 | HDR ; Header for ERA list
 | 
|---|
| 118 |  N X
 | 
|---|
| 119 |  S X=$G(^TMP("RCERA_PARAMS",$J,"RCMATCH"))
 | 
|---|
| 120 |  S VALMHDR(1)=$E("SELECTED:  MATCH STATUS: "_$S(X="N":"NOT MATCHED",X="M":"MATCHED",1:"BOTH")_$J("",38),1,38)
 | 
|---|
| 121 |  S X=$G(^TMP("RCERA_PARAMS",$J,"RCPOST"))
 | 
|---|
| 122 |  S VALMHDR(1)=VALMHDR(1)_"  POST STATUS: "_$S(X="U":"UNPOSTED",X="P":"POSTED",1:"BOTH")
 | 
|---|
| 123 |  S X=$G(^TMP("RCERA_PARAMS",$J,"RCDT"))
 | 
|---|
| 124 |  S VALMHDR(2)=$J("",11)_"DATE RANGE  : "_$S($P(X,U):$$FMTE^XLFDT($P(X,U),2)_$S($P(X,U,2):"-"_$$FMTE^XLFDT($P(X,U,2),2),1:""),1:"NONE SELECTED")
 | 
|---|
| 125 |  S X=$G(^TMP("RCERA_PARAMS",$J,"RCPAYR"))
 | 
|---|
| 126 |  S VALMHDR(3)=$J("",11)_$S($P(X,U)="A"!(X=""):"ALL PAYERS",1:"PAYERS: "_$P(X,U,2)_"-"_$P(X,U,3))
 | 
|---|
| 127 |  Q
 | 
|---|
| 128 |  ;
 | 
|---|
| 129 | FNL ; -- Clean up list
 | 
|---|
| 130 |  K ^TMP("RCDPE-ERA_WL",$J),^TMP("RCDPE-ERA_WLDX",$J),^TMP("RCERA_PARAMS",$J),^TMP($J,"RCERA_LIST")
 | 
|---|
| 131 |  Q
 | 
|---|
| 132 |  ;
 | 
|---|
| 133 | SET(X,RCSEQ,RCSEQ1) ; -- set arrays
 | 
|---|
| 134 |  ; X = the data to set into the global
 | 
|---|
| 135 |  ; RCSEQ = the selectable line #
 | 
|---|
| 136 |  ; RCSEQ1 = the ien of the entry in file 344.4
 | 
|---|
| 137 |  S VALMCNT=VALMCNT+1,^TMP("RCDPE-ERA_WL",$J,VALMCNT,0)=X
 | 
|---|
| 138 |  I $G(RCSEQ) S ^TMP("RCDPE-ERA_WL",$J,"IDX",VALMCNT,RCSEQ)=$G(RCSEQ1)
 | 
|---|
| 139 |  I $G(RCSEQ1) S ^TMP("RCDPE-ERA_WLDX",$J,RCSEQ)=VALMCNT_U_RCSEQ1
 | 
|---|
| 140 |  Q
 | 
|---|
| 141 |  ;
 | 
|---|
| 142 | ENTERWL ; Enter the worklist with an ERA
 | 
|---|
| 143 |  D WL($$SEL())
 | 
|---|
| 144 |  D BLD($G(^TMP("RCERA_PARAMS",$J,"SORT")))
 | 
|---|
| 145 |  S VALMBCK="R"
 | 
|---|
| 146 |  Q
 | 
|---|
| 147 |  ;
 | 
|---|
| 148 | SEL() ; Select an ERA from the ERA list
 | 
|---|
| 149 |  N RCDA,VALMY
 | 
|---|
| 150 |  D FULL^VALM1
 | 
|---|
| 151 |  D EN^VALM2($G(XQORNOD(0)),"S")
 | 
|---|
| 152 |  S RCERA=0
 | 
|---|
| 153 |  S RCDA=0 F  S RCDA=$O(VALMY(RCDA)) Q:'RCDA  S RCERA=+$P($G(^TMP("RCDPE-ERA_WLDX",$J,RCDA)),U,2)
 | 
|---|
| 154 |  ;
 | 
|---|
| 155 |  Q RCERA
 | 
|---|
| 156 |  ;
 | 
|---|
| 157 | WL(RCERA) ; Enter worklist
 | 
|---|
| 158 |  ; RCERA = ien of the ERA entry in file 344.4
 | 
|---|
| 159 |  N RC0,RCNOED,RCQUIT,RCSORT,DA,DIE,X,Y,DR,DIR,DTOUT,DUOUT
 | 
|---|
| 160 |  Q:RCERA'>0
 | 
|---|
| 161 |  S (RCQUIT,RCNOED)=0,RC0=$G(^RCY(344.4,RCERA,0)),RCSORT=""
 | 
|---|
| 162 |  I $P(RC0,U,8) D
 | 
|---|
| 163 |  . I '$D(^RCY(344.49,RCERA,0)) D  Q
 | 
|---|
| 164 |  .. S RCQUIT=1
 | 
|---|
| 165 |  .. W ! S DIR(0)="EA",DIR("A",1)="A SCRATCH PAD WAS NOT CREATED FOR THIS ERA BEFORE POSTING",DIR("A",2)="USE THE VIEW/PRINT ERA OPTION TO SEE ITS DETAIL",DIR("A")="PRESS RETURN TO CONTINUE: " D ^DIR K DIR Q
 | 
|---|
| 166 |  . ;
 | 
|---|
| 167 |  . S RCNOED=+$P(RC0,U,8)
 | 
|---|
| 168 |  . S DIR(0)="EA",DIR("A",1)="THIS ERA ALREADY HAS A RECEIPT - YOU MAY ONLY VIEW ITS SCRATCH PAD",DIR("A")="PRESS RETURN TO CONTINUE "
 | 
|---|
| 169 |  . W ! D ^DIR K DIR W !
 | 
|---|
| 170 |  I 'RCQUIT D
 | 
|---|
| 171 |  . N RCQUIT
 | 
|---|
| 172 |  . D DISP^RCDPEWL(RCERA,RCNOED)
 | 
|---|
| 173 |  ;
 | 
|---|
| 174 |  I 'RCQUIT,$G(^TMP("RCBATCH_SELECTED",$J)) D
 | 
|---|
| 175 |  . S DA(1)=RCERA,DA=+$G(^TMP("RCBATCH_SELECTED",$J)),DR=".05////0",DIE="^RCY(344.49,"_DA(1)_",3," D ^DIE
 | 
|---|
| 176 |  . L -^RCY(344.49,DA(1),3,DA,0)
 | 
|---|
| 177 |  . K ^TMP("RCBATCH_SELECTED",$J)
 | 
|---|
| 178 |  E  D
 | 
|---|
| 179 |  . L -^RCY(344.4,RCERA,0)
 | 
|---|
| 180 |  Q
 | 
|---|
| 181 |  ;
 | 
|---|
| 182 | PRERA ; View/Print ERA from ERA list menu
 | 
|---|
| 183 |  N RCSCR
 | 
|---|
| 184 |  S RCSCR=$$SEL()
 | 
|---|
| 185 |  I RCSCR>0 D PRERA^RCDPEWL0
 | 
|---|
| 186 |  S VALMBCK="R"
 | 
|---|
| 187 |  Q
 | 
|---|
| 188 |  ;
 | 
|---|
| 189 | BAT(RCERA) ; Select batch, if needed
 | 
|---|
| 190 |  ; Returns 1 if batch selected OK or no batch needed
 | 
|---|
| 191 |  ; RCERA = ien of entry in file 344.49
 | 
|---|
| 192 |  N RCINUSE,RCQUIT,RCADJ,RC0,RCOK,DIR,DTOUT,DUOUT,X,Y,Z
 | 
|---|
| 193 |  K ^TMP("RCBATCH_SELECTED",$J)
 | 
|---|
| 194 |  S RCOK=1
 | 
|---|
| 195 |  I '$O(^RCY(344.49,RCERA,3,0)) G BATQ
 | 
|---|
| 196 |  S RC0=$G(^RCY(344.4,RCERA,0))
 | 
|---|
| 197 |  S (RCQUIT,RCADJ)=0
 | 
|---|
| 198 |  I $$HASADJ^RCDPEWL8(RCERA) D
 | 
|---|
| 199 |  . S RCADJ=1
 | 
|---|
| 200 |  . S DIR("A",1)="THIS ERA HAS NEGATIVE ADJUSTMENTS THAT NEED TO BE DISTRIBUTED TO OTHER",DIR("A",2)="PAYMENTS ON THE ERA.  YOU CANNOT SELECT ANY INDIVIDUAL BATCHES UNTIL",DIR("A",3)="THE DISTRIBUTIONS ARE COMPLETE."
 | 
|---|
| 201 |  . S DIR("A")="PRESS RETURN TO CONTINUE: ",DIR(0)="EA" W ! D ^DIR K DIR
 | 
|---|
| 202 |  S RCINUSE=+$O(^RCY(344.49,"AINUSE",1,RCERA,0))
 | 
|---|
| 203 |  I RCINUSE D
 | 
|---|
| 204 |  . N OK,Z
 | 
|---|
| 205 |  . Q:RCADJ!$P(RC0,U,8)
 | 
|---|
| 206 |  . S OK=0 S Z=0 F  S Z=$O(^RCY(344.49,RCERA,3,Z)) Q:'Z  I '$P($G(^RCY(344.49,RCERA,3,Z,0)),U,5) S OK=1 Q
 | 
|---|
| 207 |  . I 'OK D  Q
 | 
|---|
| 208 |  .. S DIR("A",1)="ALL BATCHES WITHIN THIS ERA ARE CURRENTLY IN USE - TRY AGAIN LATER",DIR("A")="PRESS RETURN TO CONTINUE ",DIR(0)="EA" W ! D ^DIR K DIR S RCQUIT=1,RCOK=0 Q
 | 
|---|
| 209 |  . W !!,"AT LEAST 1 BATCH WITHIN THIS ERA IS CURRENTLY IN USE",!,"AT THIS TIME, YOU CAN ONLY ACCESS INDIVIDUAL BATCHES",!
 | 
|---|
| 210 |  . D SELBAT^RCDPEWL8(RCERA,.RCQUIT)
 | 
|---|
| 211 |  . I RCQUIT S RCOK=0
 | 
|---|
| 212 |  E  D
 | 
|---|
| 213 |  . Q:$P(RC0,U,8)!RCADJ  ; Always require the entire ERA be used
 | 
|---|
| 214 |  . S DIR(0)="SA^E:(E)NTIRE ERA;B:(B)ATCH",DIR("A")="DO YOU WANT THE (E)NTIRE ERA OR JUST A (B)ATCH?: " W ! D ^DIR K DIR
 | 
|---|
| 215 |  . I $D(DTOUT)!$D(DUOUT) S RCQUIT=1,RCOK=0 Q
 | 
|---|
| 216 |  . I Y="E" D  Q
 | 
|---|
| 217 |  .. S RCQUIT=1 F Z=1:1:2 L +^RCY(344.4,RCERA,0):5 I $T S RCQUIT=0 Q
 | 
|---|
| 218 |  .. I RCQUIT S RCOK=0,DIR(0)="EA",DIR("A",1)="ANOTHER USER IS CURRENTLY USING THIS ERA, TRY AGAIN LATER",DIR("A")="PRESS RETURN TO CONTINUE " W ! D ^DIR K DIR Q
 | 
|---|
| 219 |  . D SELBAT^RCDPEWL8(RCERA,.RCQUIT)
 | 
|---|
| 220 |  . I RCQUIT S RCOK=0
 | 
|---|
| 221 |  ;
 | 
|---|
| 222 | BATQ Q RCOK
 | 
|---|
| 223 |  ;
 | 
|---|
| 224 | UPPER(X) ; Function returns X as all upper case
 | 
|---|
| 225 |  Q $TR(X,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ")
 | 
|---|
| 226 |  ;
 | 
|---|