Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: IBJTEP1

IBJTEP1.m

Go to the documentation of this file.
  1. IBJTEP1 ;ALB/TJB - TP ERA/835 INFORMATION SCREEN ;01-MAY-2015
  1. ;;2.0;INTEGRATED BILLING;**530,633**;21-MAR-94;Build 21
  1. ;;Per VA Directive 6402, this routine should not be modified.
  1. ;; ;
  1. Q
  1. ; Utility Routine for the IBJTEP & IBJTPE routines
  1. EEOB(ARRAY,IENERA,KBILL,SPLIT) ; Return all of the EEOBs with this KBILL for the ERA IEN in 344.4
  1. N ZZ,IBZZ,CNT,IBI,IBDG,AA
  1. S CNT=0
  1. D GETS^DIQ(344.4,IENERA_",","1*;","IE","IBZZ")
  1. S ZZ="" F S ZZ=$O(IBZZ(344.41,ZZ)) Q:ZZ="" D:IBZZ(344.41,ZZ,.02,"E")=KBILL
  1. . Q:$P($G(^IBM(361.1,IBZZ(344.41,ZZ,.02,"I"),0)),U,4)=1 ; Don't count, it is a MRA
  1. . S CNT=CNT+1,@ARRAY@(CNT,IBZZ(344.41,ZZ,.02,"I"))=1,AA(IBZZ(344.41,ZZ,.02,"I"))=1
  1. . ; See if any splits are associated with this KBILL
  1. . D:+$G(SPLIT)'=0
  1. .. S IBI=0,IBDG=$$FIND1^DIC(399,,,IBZZ(344.41,ZZ,.02,"E"),"B",)
  1. .. I IBDG'="" F S IBI=$O(^IBM(361.1,"C",IBDG,IBI)) Q:'IBI S:$G(AA(IBI))'=1 CNT=CNT+1,@ARRAY@(CNT,IBI)=1 ; EOB has been reapportioned at the site
  1. S @ARRAY=CNT
  1. Q
  1. ;
  1. ; IEN = IEN for File 399, CODE = Revenue Code, CPT = the procedure code for this line
  1. ; Return the billed amount for this line
  1. BILLN(IEN,CODE,CPT) ; Get the line item information from the Bill
  1. N RCOUT,II,RET
  1. S RET=0
  1. K RCOUT D FIND^DIC(399.042,","_IEN_",",".01;.02;.03;.04;.06","",CODE,"","","","","RCOUT")
  1. S II="" F S II=$O(RCOUT("DILIST","ID",II)) Q:II="" I RCOUT("DILIST","ID",II,.06)=CPT S RET=RCOUT("DILIST","ID",II,.04) Q
  1. Q RET
  1. ;
  1. ADJU(TYPE,ARR1,END) ; Get the Deduction information from the line level
  1. ; TYPE = "DEDUCT" or "COINS", pass array by reference, END - quit condition
  1. N RCOUT,AA,BB,RET
  1. S RET=0
  1. S AA=END F S AA=$O(ARR1(361.1151,AA)) Q:$E(AA,1,$L(END))'=END D:ARR1(361.1151,AA,.01,"I")="PR"
  1. . S BB=AA F S BB=$O(ARR1(361.11511,BB)) Q:$E(BB,1,$L(AA))'=AA D Q:RET'=0
  1. .. I TYPE="DEDUCT" S:ARR1(361.11511,BB,.01,"E")=1 RET=ARR1(361.11511,BB,.02,"E") ; Deductable
  1. .. I TYPE="COINS" S:ARR1(361.11511,BB,.01,"E")=2 RET=ARR1(361.11511,BB,.02,"E") ; Co-Insurance
  1. Q RET
  1. ;
  1. RESORT(ZAR,ZIDX) ; Resort the subscripts from GETS so items collate correctly while walking the array
  1. ; Pass ZAR through indirection
  1. ; Take the second subscript and reverse the pieces, put them in right order
  1. Q:$G(ZIDX)']""
  1. N II,XX,YY,ZZ,Z1,ZN,A S ZZ="",ZN=""
  1. F S ZZ=$O(@ZAR@(ZIDX,ZZ)) Q:ZZ="" D
  1. . S ZN="" F II=1:1:($L(ZZ,",")-1) S ZN=$P(ZZ,",",II)_","_ZN
  1. . S XX="" F S XX=$O(@ZAR@(ZIDX,ZZ,XX)) Q:XX="" D
  1. .. I $D(@ZAR@(ZIDX,ZZ,XX,"E"))=1 S YY=@ZAR@(ZIDX,ZZ,XX,"E") K @ZAR@(ZIDX,ZZ,XX,"E") S QQ(ZN,XX,"E")=YY
  1. .. I $D(@ZAR@(ZIDX,ZZ,XX,"I"))=1 S YY=@ZAR@(ZIDX,ZZ,XX,"I") K @ZAR@(ZIDX,ZZ,XX,"I") S QQ(ZN,XX,"I")=YY
  1. M @ZAR@(ZIDX)=QQ
  1. K QQ
  1. Q
  1. ;
  1. RECEIPT ; Go to Receipt profile
  1. ; Build the ^TMP(RCDPDPLM,$J,"IDX",#,#)=# array if we have a receipt on this ERA
  1. ; ERALST, IBIFN is passed in by IBJTEP and will be cleaned up there
  1. N IBERA,IBEPB,IBRP,DIR,DTOUT,DUOUT,DZX,EPIEN,I,IX,INDEX,X,Y,IBARR,IBAR2,IBAR3,RCDEPTDA,RCRECTDA,RCDPFXIT
  1. D FULL^VALM1
  1. S VALMBCK="R"
  1. RC1 ;
  1. S IBRP(U)=", "
  1. I $L(ERALST,U)=1 S IBERA=ERALST G RC2
  1. S DIR("A")="Enter ERA for receipt review: ",DIR(0)="FA^1:10"
  1. S DIR("A",1)="Enter an ERA# from the following list for additional information."
  1. S DIR("A",2)="Available ERAs: "_$$REPLACE^XLFSTR(ERALST,.IBRP)
  1. D ^DIR K DIR
  1. I $D(DTOUT)!$D(DUOUT)!(Y="") G RCQ
  1. S IBERA=Y I (U_ERALST_U)'[(U_Y_U) W !!,"ERA: "_Y_" not a valid selection. Please try again...",! S X="",IBERA="" G RC1
  1. ;
  1. RC2 ;
  1. I $G(IBERA)="" S DIR("A",1)="No ERAs for this K-Bill exist.",DIR(0)="EA",DIR("A")="Press ENTER to continue: " W ! D ^DIR K DIR G RCQ
  1. ; Get zero node of ERA
  1. S ZN=$G(^RCY(344.4,IBERA,0))
  1. ; Get Reciept for this Bill
  1. K IBEPB,^TMP("RCDPDPLM",$J) D GETS^DIQ(344.4,IBERA_",","1*;","IE","IBEPB")
  1. ; No Receipt then report and quit
  1. I $P(ZN,U,8)="",$D(^RCY(344.4,IBERA,1,"RECEIPT"))=0 S DIR("A",1)="No receipts exist for this ERA.",DIR(0)="EA",DIR("A")="Press ENTER to continue: " W ! D ^DIR K DIR G RCQ
  1. ; Reciept, build temp global and call RECEIPTS
  1. S I=0,IX="" F S IX=$O(IBEPB(344.41,IX)) Q:IX="" I $G(IBEPB(344.41,IX,.02,"E"))=EPBILL D
  1. . ; Add Reciept to list if not already on this list
  1. . I $G(IBEPB(344.41,IX,.25,"I"))'="" S:'$D(^TMP("RCDPDPLM",$J,"RCPT",IBEPB(344.41,IX,.25,"I"))) I=I+1,^TMP("RCDPDPLM",$J,"IDX",I,I)=$G(IBEPB(344.41,IX,.25,"I")),^TMP("RCDPDPLM",$J,"RCPT",IBEPB(344.41,IX,.25,"I"))=""
  1. ; if no receipts, then set the single Receipt from the zero node.
  1. I '$D(^TMP("RCDPDPLM",$J,"IDX")) S:$P(ZN,U,8)'="" ^TMP("RCDPDPLM",$J,"IDX",1,1)=$P(ZN,U,8),^TMP("RCDPDPLM",$J,"RCPT",$P(ZN,U,8))="" I $P(ZN,U,8)="" D G RCQ
  1. . S DIR("A",1)="Issue with ERA: "_IBERA_" and Bill No.: "_EPBILL,DIR(0)="EA",DIR("A")="Press ENTER to continue: " W ! D ^DIR K DIR
  1. ;
  1. S RCRECTDA=$$GETRCPT($NA(^TMP("RCDPDPLM",$J,"IDX")))
  1. I RCRECTDA=-1 G RCQ ; no selection, "^" or read timeout
  1. D EN^VALM("RCDP RECEIPT PROFILE")
  1. ;
  1. RCQ ;
  1. ; If RCDPFXIT is set, exit option entirely was selected so quit back to the menu
  1. I $G(RCDPFXIT) S VALMBCK="Q"
  1. K ^TMP("RCDPDPLM",$J)
  1. Q
  1. ;
  1. GETRCPT(ARRAY) ; If only one receipt return with the single receipt, otherwise user selects receipt
  1. I '$O(@ARRAY@(1)) Q $S($G(@ARRAY@(1,1))'="":$G(@ARRAY@(1,1)),1:-1)
  1. N ZX,ZY,ZZ,ZAR,DIR,X,Y,DTOUT,DUOUT,DIROUT,DIRUT,QQ
  1. S ZZ=0,QQ="",ZX="" F S ZX=$O(@ARRAY@(ZX)) Q:ZX="" S:QQ'="" QQ=QQ_";" S ZZ=ZZ+1,QQ=QQ_ZZ_":"_$P($G(^RCY(344,@ARRAY@(ZX,ZX),0)),U,1),ZAR(ZZ)=@ARRAY@(ZX,ZX)
  1. S DIR(0)="S^"_QQ
  1. S DIR("A")="Enter index number for Receipt" D ^DIR K DIR
  1. I $D(DTOUT)!$D(DUOUT)!(Y="") Q -1 ; no selection/timeout quit
  1. Q ZAR(Y)
  1. ;
  1. GETRX(IBIEN,IBARRY) ;return pharmacy data to about EEOB items
  1. ; input - IBIEN = ien to record in 361.1
  1. ; IBARRY = Array name that will be used to store and return pharmacy data elements
  1. ; output - IBARRY = holds pharmacy data
  1. ; IA 6033 (controlled subscription) - read access of file 362.4. status is pending
  1. ; ICR 1878 (supported) - usage of EN^PSOORDER
  1. ;
  1. N IB0,RXDATA,RXIEN,IBDFN,PRIEN,RXFILL
  1. K IBARRY
  1. Q:IBIEN=""
  1. S PRIEN=$P(^IBM(361.1,IBIEN,0),U,1) Q:PRIEN=""
  1. S IBDFN=$P(^PRCA(430,PRIEN,0),U,7)
  1. S IB0=+$O(^IBA(362.4,"C",PRIEN,0))
  1. Q:IB0=0
  1. S RXDATA=$G(^IBA(362.4,IB0,0))
  1. S IBARRY("DOS")=$$FMTE^XLFDT($P(RXDATA,U,3),"2Z")
  1. S IBARRY("FILL")=+$P(RXDATA,U,10) ; rx fill#
  1. S RXIEN=+$P(RXDATA,U,5) ; RX ien ptr file 52
  1. D EN^PSOORDER(IBDFN,RXIEN)
  1. S IBARRY("RX")=$P(^TMP("PSOR",$J,RXIEN,0),U,5)
  1. I IBARRY("FILL")=0 S IBARRY("RELEASED STATUS")=$S($P(^TMP("PSOR",$J,RXIEN,0),U,13)]"":"Released",1:"Not Released") ; Release status from Rx on the first fill (no refills)
  1. I IBARRY("FILL")>0 S IBARRY("RELEASED STATUS")=$S($P(^TMP("PSOR",$J,RXIEN,"REF",IBARRY("FILL"),0),U,8)]"":"Released",1:"Not Released") ; Release status from Rx refill #
  1. Q
  1. ;
  1. EOBREM(RCEOB,LINE) ; EP from IBJTEP - Show EOB removal details if EOB removed
  1. ; Input: RCEOB - Internal entry number from file 361.1
  1. ; LINE - Line counter for ListMan storage
  1. ; Output: To screen
  1. ; Get last move/copy history record
  1. N I,J,RCEOBH,RCJUST
  1. S RCEOBH=$O(^IBM(361.1,RCEOB,101,"A"),-1)
  1. ; Quit if EOB if no history found - should not occur since EOB is removed
  1. I 'RCEOBH D SET^IBJTEP(.LINE,"**EOB Removed**") Q
  1. ;
  1. D SET^IBJTEP(.LINE,"EOB Removed by : "_$$GET1^DIQ(361.1101,RCEOBH_","_RCEOB,.02,"E"))
  1. D SET^IBJTEP(.LINE,"Date/Time Removed : "_$$GET1^DIQ(361.1101,RCEOBH_","_RCEOB,.01,"E"))
  1. S RCJUST=$$GET1^DIQ(361.1101,RCEOBH_","_RCEOB,.03,"E")
  1. I $L(RCJUST>59) D ;
  1. . S I=1
  1. . F J=1:1:$L(RCJUST," ") D ;
  1. . . I $L($G(RCJUST(I))_$P(RCJUST," ",J))>60 S I=I+1
  1. . . S RCJUST(I)=$G(RCJUST(I))_" "_$P(RCJUST," ",J)
  1. E S RCJUST(1)=RCJUST
  1. D SET^IBJTEP(.LINE,"Justification :"_$G(RCJUST(1)))
  1. F J=2:1:I D SET^IBJTEP(.LINE," "_$G(RCJUST(J)))
  1. Q
  1. ;
  1. ; Make CARC or RARC description lines the right length for display - IB*2.0*633 Moved for routine size
  1. DLN(ZIN,ZARR,FLN,SLN) ;
  1. ; ZIN - array to get lines of text
  1. ; ZRARR - array for display passed by indirection
  1. ; FLN - First line length; SLN - Second and subsequent line lengths
  1. N ZI,ZX,ZL,ZXL,ZICT,ZCT,ZSP,ZLN
  1. S ZI="",ZCT=0,ZICT=0
  1. ; Get number of lines in array
  1. F S ZI=$O(@ZIN@(ZI)) Q:ZI="" S ZICT=ZICT+1
  1. ; If more than one line in array, process the line
  1. D:ZICT>1
  1. . S ZI="",ZL="" F S ZI=$O(@ZIN@(ZI)) Q:ZI="" S ZL=ZL_$S($L(ZL)>1:" ",1:"")_@ZIN@(ZI) D
  1. .. F Q:$L(ZL)<SLN S ZCT=ZCT+1 D
  1. ... I ZCT=1 S:$L(ZL)<FLN @ZARR@(ZCT)=ZL,ZL="" D:$L(ZL)>FLN ; First line
  1. .... S ZXL="" F ZX=1:1 Q:($L(ZXL)+$L($P(ZL," ",ZX)))>FLN S ZXL=ZXL_$S($L(ZXL)>0:" ",1:"")_$P(ZL," ",ZX)
  1. .... K ZSP S @ZARR@(ZCT)=ZXL,ZSP(ZXL)="",ZL=$$REPLACE^XLFSTR(ZL,.ZSP),ZL=$$TRIM^XLFSTR(ZL)
  1. ... D:ZCT>1
  1. .... S ZXL="" F ZX=1:1 Q:($L(ZXL)+$L($P(ZL," ",ZX)))>SLN S ZXL=ZXL_$S($L(ZXL)>0:" ",1:"")_$P(ZL," ",ZX)
  1. .... K ZSP S @ZARR@(ZCT)=ZXL,ZSP(ZXL)="",ZL=$$REPLACE^XLFSTR(ZL,.ZSP),ZL=$$TRIM^XLFSTR(ZL)
  1. . I ($L(ZL)>1) S ZCT=ZCT+1,@ZARR@(ZCT)=ZL,ZL=""
  1. . S @ZARR=ZCT
  1. ; One line in array break up if necessary
  1. I ZICT=1 D
  1. . S ZX=$O(@ZIN@(""))
  1. . I $L(@ZIN@(ZX))<FLN S @ZARR@(1)=@ZIN@(ZX),@ZARR=1 Q
  1. . ; Otherwise we are spanning two lines
  1. . S ZL="" F ZI=1:1 Q:($L(ZL)+$L($P(@ZIN@(ZX)," ",ZI)))>FLN S ZL=ZL_$S($L(ZL)>0:" ",1:"")_$P(@ZIN@(ZX)," ",ZI)
  1. . S @ZARR@(1)=ZL,@ZARR@(2)=$P(@ZIN@(ZX)," ",ZI,9999)
  1. . S @ZARR=2
  1. Q