IBRFIWL ;ALB/FA - IB LIST OF Request For Additional Information (RFAI) SCREEN ;18-JUL-2015
;;2.0;INTEGRATED BILLING;**547**;21-MAR-1994;Build 119
;;Per VA Directive 6402, this routine should not be modified.
;
EN ; Main entry point for RFAI Management Worklist
; Input: None
; Output: IBAUTHB - Selected Authorized Biller(s)
; IBSORT1 - Selected Primary Sort
; IBSORT2 - Selected Secondary Sort
N IBAUTHB,IBDONE,IBSORT1,IBSORT2,VALMSG
S IBDONE=$$SORT(0)
I IBDONE D Q
. W !!,*7,"Sort Criteria was not selected"
. D PAUSE^VALM1
. S VALMQUIT=1
D EN^VALM("IBRFI 277 WL")
Q
;
HDR ;EP
; Build the listman template header information
; Input: IBAUTHB - Selected Authorized Biller(s)
; IBSORT1 - Selected Primary Sort
; IBSORT2 - Selected Secondary Sort
; Output: VALMHDR - array of header lines for the templaqte3
;N XX
;S XX="Primary Sort: "_$$SD^IBRFIWLA(IBSORT1)
;S:IBSORT2'="" XX=XX_" Secondary Sort: "_$$SD^IBRFIWLA(IBSORT2)
;S VALMHDR(1)=XX
;S:IBAUTHB VALMHDR(2)="Filter: Selected Authorized Billers"
Q
;
INIT ;EP
; Initialize variables and list array
; Input: IBAUTHB - Selected Authorized Biller(s)
; IBSORT1 - Selected Primary Sort
; IBSORT2 - Selected Secondary Sort
;K ^TMP("IBBIL",$J)
K ^TMP("IBRFIWL",$J),^TMP("IBRFIWLS",$J),^TMP("IBRFIWLIX",$J)
K VALMQUIT
S VALMSG="|* Review in progress | Enter ?? for more actions|"
D BLD(.IBAUTHB,IBSORT1,IBSORT2)
Q
;
SORT(REBUILD) ;EP
; Protocol action and also called initially from method EN
; Select/ReSelect Sort/Filter criteria
; Input: REBUILD - 1 to rebuild the worklist (set to 1 from Resort
; protocol option)
; Optional, defaults to 0
; IBAUTHB - Currently Selected Authorized Biller(s)
; IBSORT1 - Currently Selected Primary Sort
; IBSORT2 - Currently Selected Secondary Sort
; Output: IBAUTHB - Currently Selected Authorized Biller(s)
; IBSORT1 - Currently Selected Primary Sort
; IBSORT2 - Currently Selected Secondary Sort
; Returns: 1 - User exited without entering Sort/Filter criteria
; 0 Otherwise
N IBDONE,IBSTOP,XX
S:'$D(REBUILD) REBUILD=0
D FULL^VALM1
D AUTHB(.IBAUTHB,.IBDONE) ; Authorized Biller filter
Q:IBDONE 1
S IBSORT1=$$SORTSET^IBRFIWLA(1,"L","",.IBDONE) ; Primary Sort
Q:IBDONE 1
;
; If the user selected Oldest or Newest Date Received as the primary sort,
; Do not ask for secondary sort
;I (IBSORT1="O")!(IBSORT1="N") S IBSORT2=0
;E D
;. S XX=$S(IBSORT1="O":"",1:"O") ; Default Secondary Sort
;. S IBSORT2=$$SORTSET^IBRFIWLA(2,XX,IBSORT1,.IBDONE) ; Secondary Sort
S XX=$S(IBSORT1="O"!(IBSORT1="N"):"L",1:"O") ; Default Secondary Sort
S IBSORT2=$$SORTSET^IBRFIWLA(2,XX,IBSORT1,.IBDONE) ; Secondary Sort
I REBUILD D
. D INIT ; Rebuild Sorted worklist
. D HDR ; Redisplay Header
. S VALMBCK="R"
Q:IBDONE 1
Q 0
;
AUTHB(IBAUTHB,IBDONE) ; Set the Authorized Biller
; Input: None
; Output: IBAUTHB - 1 - Authorized Biller(s) selected, 0 otherwise
; IBDONE - 1 if user quit or timed out
;
K ^TMP("IBBIL",$J)
N FIRST,DIC,DTOUT,DONE,DUOUT,X,Y
S FIRST=1,(DONE,IBDONE)=0,IBAUTHB=0
F D Q:DONE
. S DIC="^VA(200,",DIC(0)="AEQM"
. S DIC("A")="Select "_$S(FIRST:"",1:" Another ")_"Authorizing Biller: "
. S:FIRST DIC("A")=DIC("A")_"ALL// "
. D ^DIC
. K DIC
. I Y<0 S DONE=1 Q
. I $D(^TMP("IBBIL",$J,+Y)) D Q
. . W !!,*7,"This biller has already been selected",!
. S ^TMP("IBBIL",$J,+Y)="",FIRST=0,IBAUTHB=1
I $D(DTOUT)!$D(DUOUT) S IBDONE=1 Q
Q
;
BLD(IBAUTHB,IBSORT1,IBSORT2) ; Build the listman template body
; Input: IBAUTHB - Authorized Biller filter
; IBSORT1 - Primary Sort
; IBSORT2 - Secondary Sort
; ^TMP("IBRFIWLS",$J,A,B)=RFAIEN - See GETMSGS
; ^TMP("IBRIFWLIX",$J,CNT)=RFAIEN^### - Message Selector Index
N AA,CNT,PFILTER,RFAIEN,S1,S2,XX,SFILTER
D GETMSGS(.IBAUTHB,IBSORT1,IBSORT2) ; Get Sorted/Filtered list
S (CNT,VALMCNT)=0,(AA,PFILTER,S1)=""
F D Q:AA=""
. S AA=$O(^TMP("IBRFIWLS",$J,AA))
. Q:AA=""
. S S1=""
. F D Q:S1=""
. . S S1=$O(^TMP("IBRFIWLS",$J,AA,S1))
. . Q:S1=""
. . S S2=""
. . F D Q:S2=""
. . . S S2=$O(^TMP("IBRFIWLS",$J,AA,S1,S2))
. . . Q:S2=""
. . . S RFAIEN=""
. . . F D Q:RFAIEN=""
. . . . S RFAIEN=$O(^TMP("IBRFIWLS",$J,AA,S1,S2,RFAIEN))
. . . . Q:RFAIEN=""
. . . . S XX=$S(AA="~":S1,1:0)
. . . . D BLDONEM(.VALMCNT,.CNT,RFAIEN,IBSORT1,.PFILTER,XX,S1,IBSORT2,S2,.SFILTER)
Q
;
GETMSGS(IBAUTHB,IBSORT1,IBSORT2) ; Retrieves the RFAI Messages filtering
; by Authorized Biller in sorted order
; Input: IBAUTHB - Authorized Biller filter
; IBSORT1 - Primary Sort
; IBSORT2 - Secondary Sort
; Output: ^TMP("IBRFIWLS",$J,A,B,C,IEN)=""- Where:
; A - ~ - Bad Record Indicator
; 1 - No Authorized Biller filter
; Authorized Biller Name
; B - When A=0 - Bad Data Type
; Otherwise Primary sort value
; C - When A=0 - 0
; Otherwise Secondary Sort value OR
; 0 if no secondary sort
; IEN - IEN of the RFAI Message
N CNT,IBIFN,PIEN,RAUTHBV,RFAIEN,SKIP,STATUS,XX
S CNT=0,RFAIEN=""
F D Q:RFAIEN=""
. S RFAIEN=$O(^IBA(368,"E",0,RFAIEN))
. Q:RFAIEN=""
. S SKIP=0
. Q:$$BADREQ(RFAIEN) ; Quit if bad data error
. S:'$G(IBAUTHB) RAUTHBV=1 ; No Authorized Biller filter or primary sort
. S:IBSORT1="B" RAUTHBV=""
. ;
. ; Filtering on Authorized Biller
. I $G(RAUTHBV)'=1 D Q:SKIP
. . S RAUTHBV=$$GET1^DIQ(399,IBIFN,11,"I") ; IEN of Bill/Claims Authorizer
. . ;
. . ; If Request MRA bill, pull the MRA Requestor user instead
. . I 'RAUTHBV D
. . . S STATUS=$$GET1^DIQ(399,IBIFN,.13,"I") ; Status of Bill
. . . Q:STATUS'=2 ; Not a Request MRA Bill
. . . S RAUTHBV=$$GET1^DIQ(399,IBIFN,8,"I") ; MRA Requestor
. . ;
. . ; Not a selected Authorized Biller
. . I $G(IBAUTHB),'$D(^TMP("IBBIL",$J,RAUTHBV)) S SKIP=1 Q
. . S RAUTHBV=$$GET1^DIQ(200,RAUTHBV,.01) ; New Person NAME
. ;
. D GETONEM(RFAIEN,RAUTHBV,IBSORT1,IBSORT2,IBIFN) ; Get One Message
Q
;
BADREQ(RFAIEN) ; Marks a record that contains missing or incorrect
; critical data
; Input: RFAIEN - IEN of the record containing bad data
; ^TMP("IBRFIWLS",$J,-1,TYPE,0)=RFAIEN potentially
; Returns: 1 - Bad data found, 0 otherwise
N PIEN,XX
S IBIFN=$$GET1^DIQ(368,RFAIEN,111.01,"I") ; IEN for Bill/Claims file
I IBIFN="" D Q 1
. S ^TMP("IBRFIWLS",$J,"~",1,0,RFAIEN)=""
;
S PIEN=$$GET1^DIQ(368,RFAIEN,109.01,"I") ; Patient IEN
I PIEN="" D Q 1
. S ^TMP("IBRFIWLS",$J,"~",2,0,RFAIEN)="" ; Patient Bill/Mismatch
Q 0
;
GETONEM(RFAIEN,RAUTHB,IBSORT1,IBSORT2,IBIFN) ; Get the Data for a specified
; RFAI Message
; Input: RFAIEN - IEN of the selected RFAI Message
; RAUTHB - Authorized Biller Name
; 1 - No Authorized Biller filter
; IBSORT1 - Primary Sort Code
; IBSORT2 - Secondary Sort Code
; IBIFN - IEN for the associated Bill/Claims record
; Output: ^TMP("IBRFIWLS",$J,A,B,C)=IEN - Where:
; A - 0 - Bad Record Indicator
; 1 - No Authorized Biller filter or it passed the filter
; B - When A=0 - Bad Data Type
; Otherwise Primary sort value
; C - When A=0 - 0
; Otherwise Secondary Sort value OR
; 0 if no secondary sort
; IEN - IEN of the RFAI Message
N FIELDP,FIELDS,RDATE
S (FIELDP,FIELDS)=""
;
; Determine the Primary Sort field
S:(IBSORT1="N")!(IBSORT1="O") FIELDP=100.02 ; Request date/tinme
I FIELDP="",((IBSORT1="E")!(IBSORT1="D")) D ; Response Date
. S FIELDP=112.01
I FIELDP="",IBSORT1="I" S FIELDP=101.01 ; Insurance Company Name
I FIELDP="",IBSORT1="P" S FIELDP=109.01 ; Patient Name
I FIELDP="",IBSORT1="L" S FIELDP=122.03 ; LOINC Code
S:FIELDP="" FIELDP=-1 ; Authorized Biller
;
; Determine the Secondary Sort field
I IBSORT2="" S FIELDS=-2 ; No Secondary Sort
S:(IBSORT2="N")!(IBSORT2="O") FIELDS=100.03 ; Transmission Date
I FIELDS="",((IBSORT2="E")!(IBSORT2="D")) D ; Request Due Date
. S FIELDS=112.01
I FIELDS="",IBSORT2="I" S FIELDS=101.01 ; Insurance Company Name
I FIELDS="",IBSORT2="P" S FIELDS=109.01 ; Patient Name
I FIELDS="",IBSORT2="L" S FIELDS=122.03 ; LOINC Code
S:FIELDS="" FIELDS=-1 ; Authorized Biller
;
; Get the sort values
;S RDATE=$S(IBSORT1="N":1,IBSORT1="E":1,1:2)
S RDATE=$S(IBSORT1="O":1,IBSORT1="D":1,1:2)
S FIELDP=$S(IBSORT1="B":RAUTHB,1:$$GETFVAL(FIELDP,RFAIEN,RAUTHB,RDATE)) ; Get Primary sort value
I ".D.O.N.E."[("."_IBSORT1_".") S FIELDP=$P(FIELDP,".") ; don't need times for sort
;S RDATE=$S(IBSORT2="N":1,IBSORT2="E":1,1:2)
S RDATE=$S(IBSORT2="O":1,IBSORT2="D":1,1:2)
S FIELDS=$$GETFVAL(FIELDS,RFAIEN,RAUTHB,RDATE) ; Get Secondary sort value
I ".D.O.N.E."[("."_IBSORT2_".") S FIELDS=$P(FIELDS,".")
I IBSORT2=""!(IBSORT2=0) S FIELDS=0 ; no secondary, avoild subscript error
;
; Finally set the sorted record into the list
S ^TMP("IBRFIWLS",$J,$S(RAUTHB="~":"~",1:1),FIELDP,FIELDS,RFAIEN)=""
Q
;
GETFVAL(FIELD,RFAIEN,RAUTHB,RDATE,RETNA) ;EP
; Returns the external value of the specified field
; Input: FIELD - # of the field to be retrieved
; NOTE: if this number is >100 AND no value is found, then
; the value of FIELD-100 will be returned which is
; the raw value received from the HL7 message.
; The following are 'special' FIELD values:
; -1 - RAUTHB variable is used
; -2 - 0 is returned
; -3 - Last 4 digits of the SSN are returned
; -4 - Current balance is returned
; FIELD
; RFAIEN - IEN of the RFAI Message (file 368) to retrieve values from
; RAUTHB - IEN of the Authorized Billed (special case)
; Optional, defaults to ""
; RDATE - 1 - Return negative internal date (used for sorting)
; 2 - Return internal date (used for sorting)
; 3 - Force Date conversion to DD/MM/YY
; 0 - Return external date (DD/MM/YY)
; Optional, defaults to 0
; RETNA - 2 - Return null if field does not contain a value
; 1 - Return '*NA*' if field does not contain a value
; 0 - Return '0'
; Optional, defaults to 0
; Returns: External Field value
N VAL,VAL2,XX,YY
S:'$D(RAUTHB) RAUTHB=0
S:'$D(RDATE) RDATE=0
S:'$D(RETNA) RETNA=0
I $F(FIELD,",") D Q VAL
. N FILE
. S FILE=$P(FIELD,","),FIELD=$P(FIELD,",",2)
. S VAL=$$GET1^DIQ(FILE,RFAIEN,FIELD)
. I RDATE=3,VAL]"" S VAL2=$$GET1^DIQ(FILE,RFAIEN,FIELD,"I") S:VAL2]"" VAL=$$FMTE^XLFDT(VAL2,"2DZ")
. I VAL="" D ; Return raw value
.. I FILE=368.0113 S FILE=368.013
.. I FILE=368.0121 S FILE=368.021
.. I FILE=368.12199 S FILE=368.2199
.. S VAL=$$GET1^DIQ(FILE,RFAIEN,FIELD)
.. I VAL="" S VAL=$S(RETNA=1:"*NA*",RETNA=2:"",1:0)
.. Q
. Q
I FIELD=-1 Q $$GET1^DIQ(200,RAUTHB,.01) ; Authorized Biller Name
I FIELD=-2 Q 0
I FIELD=-3 D Q VAL ; Last 4 digits of SSN
. S VAL=$$GET1^DIQ(368,RFAIEN,109.01,"I") ; Patient Pointer
. I VAL="" S VAL=$S(RETNA=1:"*NA*",RETNA=2:"",1:0) Q
. S VAL=$$GET1^DIQ(2,VAL,.09) ; SSN number
. I VAL="" S VAL=$S(RETNA=1:"*NA*",RETNA=2:"",1:0) Q
. S VAL=$E(VAL,6,9)
I FIELD=-4 D Q VAL ; Current Balance
. S VAL=$$GET1^DIQ(368,RFAIEN,111.01,"I") ; Bill pointer
. I VAL="" S VAL=$S(RETNA=1:"*NA*",RETNA=2:"",1:0) Q
. S XX=$$GET1^DIQ(399,VAL,201,"I") ; Current Balance
. S YY=$$GET1^DIQ(399,VAL,202,"I") ; Offset
. S VAL=XX-YY
;
S VAL=$$GET1^DIQ(368,RFAIEN,FIELD,"E") ; Get external value
I FIELD=122.03,VAL'="" S VAL=VAL_": "_$$GET1^DIQ(368,RFAIEN,FIELD_":1") ; add LOINC code description
I FIELD=122.03,VAL="" S VAL=$$GET1^DIQ(368,RFAIEN,22.03,"E") ; for LOINC codes not in LAB LOINC file
I ((FIELD=100.02)!(FIELD=100.03)!(FIELD=.03)!(FIELD=122.04)!(FIELD=113.03)!(FIELD=112.01)!(FIELD=114.03)!(FIELD=114.04)),VAL'="" D Q VAL
. S VAL=$$GET1^DIQ(368,RFAIEN,FIELD,"I")
. Q:RDATE=2 ; Return internal date
. I RDATE=1 S VAL=VAL*-1 Q ; Return negative internal date
. S VAL=$$FMTE^XLFDT(VAL,"2DZ") ; Return external date
I VAL'="" Q VAL
I VAL="",FIELD>100 D ; Return raw value
. S FIELD=FIELD-100
. S VAL=$$GET1^DIQ(368,RFAIEN,FIELD)
S:VAL="" VAL=$S(RETNA=1:"*NA*",RETNA=2:"",1:0)
Q VAL
;
BLDONEM(VALMCNT,MSGCNT,RFAIEN,IBSORT1,PFILTER,BTYPE,PSORT,IBSORT2,SSORT,SFILTER) ; Build one Message into
; the listman display
; Input: VALMCNT - Current Line of the display being
; (re)built
; MSGCNT - Current Message Number
; RFAIEN - IEN of the message to be displayed
; IBSORT1 - Primary Sort Code
; PFILTER - Current Filter line value
; BTYPE - 0 - Not a bad record
; Otherwise, type of bad record (1-2)
; PSORT - External value of primary sort data
; IBSORT2 - Secondary Sort Code
; SSORT - External value of secondary sort data
;
; Output: VALMCNT - Updated Line of the display being
; MSGCNT - Updated Message Number
; PFILTER - Update Filter line Value
; ^TMP("IBRIFWLIX",$J,CNT) - Message Selector Index
N LINE,VAL,XX
I BTYPE D ; Display Bad Record Type
. Q:PFILTER=BTYPE ; Same as previous line
. S VALMCNT=VALMCNT+1,PFILTER=BTYPE
. I BTYPE=1 D
. . S LINE="Messages with an invalid Bill Number"
. I BTYPE=2 D
. . S LINE="Messages with Patient/Bill Mismatch"
. D SET^VALM10(VALMCNT,LINE,VALMCNT)
I 'BTYPE D
. I ".N.O.E.D."[("."_IBSORT1_".") S PSORT=$TR(PSORT,"-"),PSORT=$$FMTE^XLFDT(PSORT,"2DZ")
. S LINE=$S(IBSORT1="I":"Insurance Company Name: ",IBSORT1="P":"Patient Name: ",IBSORT1="B":"Authorizing Biller: ",IBSORT1="L":"LOINC Code: ",IBSORT1="E"!(IBSORT1="D"):"Date Due: ",1:"Date Received: ")_PSORT
. I PFILTER'=LINE D
. . S VALMCNT=VALMCNT+1,PFILTER=LINE
. . D SET^VALM10(VALMCNT,LINE,VALMCNT)
. . S SFILTER=""
. I $G(IBSORT2)]"",$G(IBSORT2)'=0 D
. . I ".N.O.E.D."[("."_IBSORT2_".") S SSORT=$TR(SSORT,"-"),SSORT=$$FMTE^XLFDT(SSORT,"2DZ")
. . S LINE=" "_$S(IBSORT2="I":"Insurance Company Name: ",IBSORT2="P":"Patient Name: ",IBSORT2="B":"Authorizing Biller: ",IBSORT2="L":"LOINC Code: ",IBSORT2="E"!(IBSORT2="D"):"Date Due: ",1:"Date Received: ")_SSORT
. . I SFILTER'=LINE D
. . . S VALMCNT=VALMCNT+1,SFILTER=LINE
. . . D SET^VALM10(VALMCNT,LINE,VALMCNT)
S CNT=CNT+1,VALMCNT=VALMCNT+1
S ^TMP("IBRFIWLIX",$J,CNT)=RFAIEN
S LINE=$$SETL("",MSGCNT,"",1,4) ; Message #
S VAL=$$GETFVAL(111.01,RFAIEN,"",0,2) ; External Bill #
S XX=$$GET1^DIQ(368,RFAIEN,200.04,"I") ; Review Status
S:XX VAL=VAL_"*"
S LINE=$$SETL(LINE,VAL,"",5,8)
D SET^VALM10(VALMCNT,LINE,VALMCNT)
S VAL=$$GETFVAL(101.01,RFAIEN,"",0,2) ; Ins. Co. Name
S LINE=$$SETL(LINE,VAL,"",15,16)
D SET^VALM10(VALMCNT,LINE,VALMCNT)
S VAL=$$GETFVAL(109.01,RFAIEN,"",0,2) ; Patient Name
S LINE=$$SETL(LINE,VAL,"",33,20)
D SET^VALM10(VALMCNT,LINE,VALMCNT)
S VAL=$$GETFVAL(-3,RFAIEN,"",0,2) ; SSN
S LINE=$$SETL(LINE,VAL,"",56,4)
D SET^VALM10(VALMCNT,LINE,VALMCNT)
S VAL=$$GETFVAL(114.03,RFAIEN,"",2,2) ; Service Date
I VAL'="" S VAL=$$FMTE^XLFDT(VAL,"2Z")
S LINE=$$SETL(LINE,VAL,"",61,8)
D SET^VALM10(VALMCNT,LINE,VALMCNT)
S VAL=$$GETFVAL(-4,RFAIEN,"",0,2) ; Current Balance
S VAL=$J("$"_$FN(VAL,"",2),9)
S LINE=$$SETL(LINE,VAL,"",71,9)
D SET^VALM10(VALMCNT,LINE,VALMCNT)
;
S ^TMP("IBRFIWLIX",$J,CNT)=RFAIEN_U_VALMCNT ; Selection Index - RFAIEN is pointer to file 368, VALMCNT points to detailed entry in worklist ^TMP
;I IBSORT1'="L" D
;. S VALMCNT=VALMCNT+1
;. S VAL=$$GETFVAL(122.03,RFAIEN,"",0,2) ; LOINC Code + Description
;. I VAL'="" D
;. . S LINE=$$SETL("",VAL,"",6,80)
;. . D SET^VALM10(VALMCNT,LINE,VALMCNT)
;
S VALMCNT=VALMCNT+1
S VAL=$$GETFVAL(122.03,RFAIEN,"",0,2) ; LOINC Code + Description
I VAL'="" D
. S LINE=$$SETL("",VAL,"",5,80)
. D SET^VALM10(VALMCNT,LINE,VALMCNT)
Q
;
SETL(LINE,DATA,LABEL,COL,LNG) ; Creates a line of data to be set into the body
; of the worklist
; Input: LINE - Current line being created
; DATA - Information to be added to the end of the current line
; LABEL - Label to describe the information being added
; COL - Column position in line to add information add
; LNG - Maximum length of data information to include on the line
; Returns: Line updated with added information
S LINE=LINE_$J("",(COL-$L(LABEL)-$L(LINE)))_LABEL_$E(DATA,1,LNG)
Q LINE
;
HELP ; -- help code
S X="?" D DISP^XQORM1 W !!
S VALMSG="* Indicates review in progress"
Q
;
SMSG ;EP
; Protocol action to select an RFI message to be worked
; Input: ^TMP("IBRFIWLIX",$J,CNT)=RFAIEN
N RFAIEN,RFAIDET,RFAIDHDR
S VALMBCK="R"
D FULL^VALM1
S RFAIEN=$$SELMSG^IBRFIWLA("Select Message")
I RFAIEN="" S VALMSG="|* Review in progress | Enter ?? for more actions|" Q
S (RFAIDET,RFAIDHDR)=""
I $P(RFAIEN,U,2) D
.S RFAIDET=$P($G(RFAIEN),U,2)
.I $G(RFAIDET) S RFAIDET=$E($G(^TMP("IBRFIWL",$J,+$G(RFAIDET),0)),6,999)
.S RFAIDHDR=$E($G(VALMCAP),6,999)
S RFAIEN=$P(RFAIEN,U)
;
D EN^IBRFIWL1(RFAIEN,RFAIDET,RFAIDHDR) ; Show the detail of the message
D INIT ; Rebuild the list
Q
;
EXIT ; -- exit code
K IBAUTH,IBSORT1,IBSORT2
K ^TMP("IBBIL",$J),^TMP("IBRFIWL",$J),^TMP("IBRFIWLS",$J),^TMP("IBRFIWLIX",$J)
D CLEAN^VALM10
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HIBRFIWL 19821 printed Dec 13, 2024@02:26:50 Page 2
IBRFIWL ;ALB/FA - IB LIST OF Request For Additional Information (RFAI) SCREEN ;18-JUL-2015
+1 ;;2.0;INTEGRATED BILLING;**547**;21-MAR-1994;Build 119
+2 ;;Per VA Directive 6402, this routine should not be modified.
+3 ;
EN ; Main entry point for RFAI Management Worklist
+1 ; Input: None
+2 ; Output: IBAUTHB - Selected Authorized Biller(s)
+3 ; IBSORT1 - Selected Primary Sort
+4 ; IBSORT2 - Selected Secondary Sort
+5 NEW IBAUTHB,IBDONE,IBSORT1,IBSORT2,VALMSG
+6 SET IBDONE=$$SORT(0)
+7 IF IBDONE
Begin DoDot:1
+8 WRITE !!,*7,"Sort Criteria was not selected"
+9 DO PAUSE^VALM1
+10 SET VALMQUIT=1
End DoDot:1
QUIT
+11 DO EN^VALM("IBRFI 277 WL")
+12 QUIT
+13 ;
HDR ;EP
+1 ; Build the listman template header information
+2 ; Input: IBAUTHB - Selected Authorized Biller(s)
+3 ; IBSORT1 - Selected Primary Sort
+4 ; IBSORT2 - Selected Secondary Sort
+5 ; Output: VALMHDR - array of header lines for the templaqte3
+6 ;N XX
+7 ;S XX="Primary Sort: "_$$SD^IBRFIWLA(IBSORT1)
+8 ;S:IBSORT2'="" XX=XX_" Secondary Sort: "_$$SD^IBRFIWLA(IBSORT2)
+9 ;S VALMHDR(1)=XX
+10 ;S:IBAUTHB VALMHDR(2)="Filter: Selected Authorized Billers"
+11 QUIT
+12 ;
INIT ;EP
+1 ; Initialize variables and list array
+2 ; Input: IBAUTHB - Selected Authorized Biller(s)
+3 ; IBSORT1 - Selected Primary Sort
+4 ; IBSORT2 - Selected Secondary Sort
+5 ;K ^TMP("IBBIL",$J)
+6 KILL ^TMP("IBRFIWL",$JOB),^TMP("IBRFIWLS",$JOB),^TMP("IBRFIWLIX",$JOB)
+7 KILL VALMQUIT
+8 SET VALMSG="|* Review in progress | Enter ?? for more actions|"
+9 DO BLD(.IBAUTHB,IBSORT1,IBSORT2)
+10 QUIT
+11 ;
SORT(REBUILD) ;EP
+1 ; Protocol action and also called initially from method EN
+2 ; Select/ReSelect Sort/Filter criteria
+3 ; Input: REBUILD - 1 to rebuild the worklist (set to 1 from Resort
+4 ; protocol option)
+5 ; Optional, defaults to 0
+6 ; IBAUTHB - Currently Selected Authorized Biller(s)
+7 ; IBSORT1 - Currently Selected Primary Sort
+8 ; IBSORT2 - Currently Selected Secondary Sort
+9 ; Output: IBAUTHB - Currently Selected Authorized Biller(s)
+10 ; IBSORT1 - Currently Selected Primary Sort
+11 ; IBSORT2 - Currently Selected Secondary Sort
+12 ; Returns: 1 - User exited without entering Sort/Filter criteria
+13 ; 0 Otherwise
+14 NEW IBDONE,IBSTOP,XX
+15 if '$DATA(REBUILD)
SET REBUILD=0
+16 DO FULL^VALM1
+17 ; Authorized Biller filter
DO AUTHB(.IBAUTHB,.IBDONE)
+18 if IBDONE
QUIT 1
+19 ; Primary Sort
SET IBSORT1=$$SORTSET^IBRFIWLA(1,"L","",.IBDONE)
+20 if IBDONE
QUIT 1
+21 ;
+22 ; If the user selected Oldest or Newest Date Received as the primary sort,
+23 ; Do not ask for secondary sort
+24 ;I (IBSORT1="O")!(IBSORT1="N") S IBSORT2=0
+25 ;E D
+26 ;. S XX=$S(IBSORT1="O":"",1:"O") ; Default Secondary Sort
+27 ;. S IBSORT2=$$SORTSET^IBRFIWLA(2,XX,IBSORT1,.IBDONE) ; Secondary Sort
+28 ; Default Secondary Sort
SET XX=$SELECT(IBSORT1="O"!(IBSORT1="N"):"L",1:"O")
+29 ; Secondary Sort
SET IBSORT2=$$SORTSET^IBRFIWLA(2,XX,IBSORT1,.IBDONE)
+30 IF REBUILD
Begin DoDot:1
+31 ; Rebuild Sorted worklist
DO INIT
+32 ; Redisplay Header
DO HDR
+33 SET VALMBCK="R"
End DoDot:1
+34 if IBDONE
QUIT 1
+35 QUIT 0
+36 ;
AUTHB(IBAUTHB,IBDONE) ; Set the Authorized Biller
+1 ; Input: None
+2 ; Output: IBAUTHB - 1 - Authorized Biller(s) selected, 0 otherwise
+3 ; IBDONE - 1 if user quit or timed out
+4 ;
+5 KILL ^TMP("IBBIL",$JOB)
+6 NEW FIRST,DIC,DTOUT,DONE,DUOUT,X,Y
+7 SET FIRST=1
SET (DONE,IBDONE)=0
SET IBAUTHB=0
+8 FOR
Begin DoDot:1
+9 SET DIC="^VA(200,"
SET DIC(0)="AEQM"
+10 SET DIC("A")="Select "_$SELECT(FIRST:"",1:" Another ")_"Authorizing Biller: "
+11 if FIRST
SET DIC("A")=DIC("A")_"ALL// "
+12 DO ^DIC
+13 KILL DIC
+14 IF Y<0
SET DONE=1
QUIT
+15 IF $DATA(^TMP("IBBIL",$JOB,+Y))
Begin DoDot:2
+16 WRITE !!,*7,"This biller has already been selected",!
End DoDot:2
QUIT
+17 SET ^TMP("IBBIL",$JOB,+Y)=""
SET FIRST=0
SET IBAUTHB=1
End DoDot:1
if DONE
QUIT
+18 IF $DATA(DTOUT)!$DATA(DUOUT)
SET IBDONE=1
QUIT
+19 QUIT
+20 ;
BLD(IBAUTHB,IBSORT1,IBSORT2) ; Build the listman template body
+1 ; Input: IBAUTHB - Authorized Biller filter
+2 ; IBSORT1 - Primary Sort
+3 ; IBSORT2 - Secondary Sort
+4 ; ^TMP("IBRFIWLS",$J,A,B)=RFAIEN - See GETMSGS
+5 ; ^TMP("IBRIFWLIX",$J,CNT)=RFAIEN^### - Message Selector Index
+6 NEW AA,CNT,PFILTER,RFAIEN,S1,S2,XX,SFILTER
+7 ; Get Sorted/Filtered list
DO GETMSGS(.IBAUTHB,IBSORT1,IBSORT2)
+8 SET (CNT,VALMCNT)=0
SET (AA,PFILTER,S1)=""
+9 FOR
Begin DoDot:1
+10 SET AA=$ORDER(^TMP("IBRFIWLS",$JOB,AA))
+11 if AA=""
QUIT
+12 SET S1=""
+13 FOR
Begin DoDot:2
+14 SET S1=$ORDER(^TMP("IBRFIWLS",$JOB,AA,S1))
+15 if S1=""
QUIT
+16 SET S2=""
+17 FOR
Begin DoDot:3
+18 SET S2=$ORDER(^TMP("IBRFIWLS",$JOB,AA,S1,S2))
+19 if S2=""
QUIT
+20 SET RFAIEN=""
+21 FOR
Begin DoDot:4
+22 SET RFAIEN=$ORDER(^TMP("IBRFIWLS",$JOB,AA,S1,S2,RFAIEN))
+23 if RFAIEN=""
QUIT
+24 SET XX=$SELECT(AA="~":S1,1:0)
+25 DO BLDONEM(.VALMCNT,.CNT,RFAIEN,IBSORT1,.PFILTER,XX,S1,IBSORT2,S2,.SFILTER)
End DoDot:4
if RFAIEN=""
QUIT
End DoDot:3
if S2=""
QUIT
End DoDot:2
if S1=""
QUIT
End DoDot:1
if AA=""
QUIT
+26 QUIT
+27 ;
GETMSGS(IBAUTHB,IBSORT1,IBSORT2) ; Retrieves the RFAI Messages filtering
+1 ; by Authorized Biller in sorted order
+2 ; Input: IBAUTHB - Authorized Biller filter
+3 ; IBSORT1 - Primary Sort
+4 ; IBSORT2 - Secondary Sort
+5 ; Output: ^TMP("IBRFIWLS",$J,A,B,C,IEN)=""- Where:
+6 ; A - ~ - Bad Record Indicator
+7 ; 1 - No Authorized Biller filter
+8 ; Authorized Biller Name
+9 ; B - When A=0 - Bad Data Type
+10 ; Otherwise Primary sort value
+11 ; C - When A=0 - 0
+12 ; Otherwise Secondary Sort value OR
+13 ; 0 if no secondary sort
+14 ; IEN - IEN of the RFAI Message
+15 NEW CNT,IBIFN,PIEN,RAUTHBV,RFAIEN,SKIP,STATUS,XX
+16 SET CNT=0
SET RFAIEN=""
+17 FOR
Begin DoDot:1
+18 SET RFAIEN=$ORDER(^IBA(368,"E",0,RFAIEN))
+19 if RFAIEN=""
QUIT
+20 SET SKIP=0
+21 ; Quit if bad data error
if $$BADREQ(RFAIEN)
QUIT
+22 ; No Authorized Biller filter or primary sort
if '$GET(IBAUTHB)
SET RAUTHBV=1
+23 if IBSORT1="B"
SET RAUTHBV=""
+24 ;
+25 ; Filtering on Authorized Biller
+26 IF $GET(RAUTHBV)'=1
Begin DoDot:2
+27 ; IEN of Bill/Claims Authorizer
SET RAUTHBV=$$GET1^DIQ(399,IBIFN,11,"I")
+28 ;
+29 ; If Request MRA bill, pull the MRA Requestor user instead
+30 IF 'RAUTHBV
Begin DoDot:3
+31 ; Status of Bill
SET STATUS=$$GET1^DIQ(399,IBIFN,.13,"I")
+32 ; Not a Request MRA Bill
if STATUS'=2
QUIT
+33 ; MRA Requestor
SET RAUTHBV=$$GET1^DIQ(399,IBIFN,8,"I")
End DoDot:3
+34 ;
+35 ; Not a selected Authorized Biller
+36 IF $GET(IBAUTHB)
IF '$DATA(^TMP("IBBIL",$JOB,RAUTHBV))
SET SKIP=1
QUIT
+37 ; New Person NAME
SET RAUTHBV=$$GET1^DIQ(200,RAUTHBV,.01)
End DoDot:2
if SKIP
QUIT
+38 ;
+39 ; Get One Message
DO GETONEM(RFAIEN,RAUTHBV,IBSORT1,IBSORT2,IBIFN)
End DoDot:1
if RFAIEN=""
QUIT
+40 QUIT
+41 ;
BADREQ(RFAIEN) ; Marks a record that contains missing or incorrect
+1 ; critical data
+2 ; Input: RFAIEN - IEN of the record containing bad data
+3 ; ^TMP("IBRFIWLS",$J,-1,TYPE,0)=RFAIEN potentially
+4 ; Returns: 1 - Bad data found, 0 otherwise
+5 NEW PIEN,XX
+6 ; IEN for Bill/Claims file
SET IBIFN=$$GET1^DIQ(368,RFAIEN,111.01,"I")
+7 IF IBIFN=""
Begin DoDot:1
+8 SET ^TMP("IBRFIWLS",$JOB,"~",1,0,RFAIEN)=""
End DoDot:1
QUIT 1
+9 ;
+10 ; Patient IEN
SET PIEN=$$GET1^DIQ(368,RFAIEN,109.01,"I")
+11 IF PIEN=""
Begin DoDot:1
+12 ; Patient Bill/Mismatch
SET ^TMP("IBRFIWLS",$JOB,"~",2,0,RFAIEN)=""
End DoDot:1
QUIT 1
+13 QUIT 0
+14 ;
GETONEM(RFAIEN,RAUTHB,IBSORT1,IBSORT2,IBIFN) ; Get the Data for a specified
+1 ; RFAI Message
+2 ; Input: RFAIEN - IEN of the selected RFAI Message
+3 ; RAUTHB - Authorized Biller Name
+4 ; 1 - No Authorized Biller filter
+5 ; IBSORT1 - Primary Sort Code
+6 ; IBSORT2 - Secondary Sort Code
+7 ; IBIFN - IEN for the associated Bill/Claims record
+8 ; Output: ^TMP("IBRFIWLS",$J,A,B,C)=IEN - Where:
+9 ; A - 0 - Bad Record Indicator
+10 ; 1 - No Authorized Biller filter or it passed the filter
+11 ; B - When A=0 - Bad Data Type
+12 ; Otherwise Primary sort value
+13 ; C - When A=0 - 0
+14 ; Otherwise Secondary Sort value OR
+15 ; 0 if no secondary sort
+16 ; IEN - IEN of the RFAI Message
+17 NEW FIELDP,FIELDS,RDATE
+18 SET (FIELDP,FIELDS)=""
+19 ;
+20 ; Determine the Primary Sort field
+21 ; Request date/tinme
if (IBSORT1="N")!(IBSORT1="O")
SET FIELDP=100.02
+22 ; Response Date
IF FIELDP=""
IF ((IBSORT1="E")!(IBSORT1="D"))
Begin DoDot:1
+23 SET FIELDP=112.01
End DoDot:1
+24 ; Insurance Company Name
IF FIELDP=""
IF IBSORT1="I"
SET FIELDP=101.01
+25 ; Patient Name
IF FIELDP=""
IF IBSORT1="P"
SET FIELDP=109.01
+26 ; LOINC Code
IF FIELDP=""
IF IBSORT1="L"
SET FIELDP=122.03
+27 ; Authorized Biller
if FIELDP=""
SET FIELDP=-1
+28 ;
+29 ; Determine the Secondary Sort field
+30 ; No Secondary Sort
IF IBSORT2=""
SET FIELDS=-2
+31 ; Transmission Date
if (IBSORT2="N")!(IBSORT2="O")
SET FIELDS=100.03
+32 ; Request Due Date
IF FIELDS=""
IF ((IBSORT2="E")!(IBSORT2="D"))
Begin DoDot:1
+33 SET FIELDS=112.01
End DoDot:1
+34 ; Insurance Company Name
IF FIELDS=""
IF IBSORT2="I"
SET FIELDS=101.01
+35 ; Patient Name
IF FIELDS=""
IF IBSORT2="P"
SET FIELDS=109.01
+36 ; LOINC Code
IF FIELDS=""
IF IBSORT2="L"
SET FIELDS=122.03
+37 ; Authorized Biller
if FIELDS=""
SET FIELDS=-1
+38 ;
+39 ; Get the sort values
+40 ;S RDATE=$S(IBSORT1="N":1,IBSORT1="E":1,1:2)
+41 SET RDATE=$SELECT(IBSORT1="O":1,IBSORT1="D":1,1:2)
+42 ; Get Primary sort value
SET FIELDP=$SELECT(IBSORT1="B":RAUTHB,1:$$GETFVAL(FIELDP,RFAIEN,RAUTHB,RDATE))
+43 ; don't need times for sort
IF ".D.O.N.E."[("."_IBSORT1_".")
SET FIELDP=$PIECE(FIELDP,".")
+44 ;S RDATE=$S(IBSORT2="N":1,IBSORT2="E":1,1:2)
+45 SET RDATE=$SELECT(IBSORT2="O":1,IBSORT2="D":1,1:2)
+46 ; Get Secondary sort value
SET FIELDS=$$GETFVAL(FIELDS,RFAIEN,RAUTHB,RDATE)
+47 IF ".D.O.N.E."[("."_IBSORT2_".")
SET FIELDS=$PIECE(FIELDS,".")
+48 ; no secondary, avoild subscript error
IF IBSORT2=""!(IBSORT2=0)
SET FIELDS=0
+49 ;
+50 ; Finally set the sorted record into the list
+51 SET ^TMP("IBRFIWLS",$JOB,$SELECT(RAUTHB="~":"~",1:1),FIELDP,FIELDS,RFAIEN)=""
+52 QUIT
+53 ;
GETFVAL(FIELD,RFAIEN,RAUTHB,RDATE,RETNA) ;EP
+1 ; Returns the external value of the specified field
+2 ; Input: FIELD - # of the field to be retrieved
+3 ; NOTE: if this number is >100 AND no value is found, then
+4 ; the value of FIELD-100 will be returned which is
+5 ; the raw value received from the HL7 message.
+6 ; The following are 'special' FIELD values:
+7 ; -1 - RAUTHB variable is used
+8 ; -2 - 0 is returned
+9 ; -3 - Last 4 digits of the SSN are returned
+10 ; -4 - Current balance is returned
+11 ; FIELD
+12 ; RFAIEN - IEN of the RFAI Message (file 368) to retrieve values from
+13 ; RAUTHB - IEN of the Authorized Billed (special case)
+14 ; Optional, defaults to ""
+15 ; RDATE - 1 - Return negative internal date (used for sorting)
+16 ; 2 - Return internal date (used for sorting)
+17 ; 3 - Force Date conversion to DD/MM/YY
+18 ; 0 - Return external date (DD/MM/YY)
+19 ; Optional, defaults to 0
+20 ; RETNA - 2 - Return null if field does not contain a value
+21 ; 1 - Return '*NA*' if field does not contain a value
+22 ; 0 - Return '0'
+23 ; Optional, defaults to 0
+24 ; Returns: External Field value
+25 NEW VAL,VAL2,XX,YY
+26 if '$DATA(RAUTHB)
SET RAUTHB=0
+27 if '$DATA(RDATE)
SET RDATE=0
+28 if '$DATA(RETNA)
SET RETNA=0
+29 IF $FIND(FIELD,",")
Begin DoDot:1
+30 NEW FILE
+31 SET FILE=$PIECE(FIELD,",")
SET FIELD=$PIECE(FIELD,",",2)
+32 SET VAL=$$GET1^DIQ(FILE,RFAIEN,FIELD)
+33 IF RDATE=3
IF VAL]""
SET VAL2=$$GET1^DIQ(FILE,RFAIEN,FIELD,"I")
if VAL2]""
SET VAL=$$FMTE^XLFDT(VAL2,"2DZ")
+34 ; Return raw value
IF VAL=""
Begin DoDot:2
+35 IF FILE=368.0113
SET FILE=368.013
+36 IF FILE=368.0121
SET FILE=368.021
+37 IF FILE=368.12199
SET FILE=368.2199
+38 SET VAL=$$GET1^DIQ(FILE,RFAIEN,FIELD)
+39 IF VAL=""
SET VAL=$SELECT(RETNA=1:"*NA*",RETNA=2:"",1:0)
+40 QUIT
End DoDot:2
+41 QUIT
End DoDot:1
QUIT VAL
+42 ; Authorized Biller Name
IF FIELD=-1
QUIT $$GET1^DIQ(200,RAUTHB,.01)
+43 IF FIELD=-2
QUIT 0
+44 ; Last 4 digits of SSN
IF FIELD=-3
Begin DoDot:1
+45 ; Patient Pointer
SET VAL=$$GET1^DIQ(368,RFAIEN,109.01,"I")
+46 IF VAL=""
SET VAL=$SELECT(RETNA=1:"*NA*",RETNA=2:"",1:0)
QUIT
+47 ; SSN number
SET VAL=$$GET1^DIQ(2,VAL,.09)
+48 IF VAL=""
SET VAL=$SELECT(RETNA=1:"*NA*",RETNA=2:"",1:0)
QUIT
+49 SET VAL=$EXTRACT(VAL,6,9)
End DoDot:1
QUIT VAL
+50 ; Current Balance
IF FIELD=-4
Begin DoDot:1
+51 ; Bill pointer
SET VAL=$$GET1^DIQ(368,RFAIEN,111.01,"I")
+52 IF VAL=""
SET VAL=$SELECT(RETNA=1:"*NA*",RETNA=2:"",1:0)
QUIT
+53 ; Current Balance
SET XX=$$GET1^DIQ(399,VAL,201,"I")
+54 ; Offset
SET YY=$$GET1^DIQ(399,VAL,202,"I")
+55 SET VAL=XX-YY
End DoDot:1
QUIT VAL
+56 ;
+57 ; Get external value
SET VAL=$$GET1^DIQ(368,RFAIEN,FIELD,"E")
+58 ; add LOINC code description
IF FIELD=122.03
IF VAL'=""
SET VAL=VAL_": "_$$GET1^DIQ(368,RFAIEN,FIELD_":1")
+59 ; for LOINC codes not in LAB LOINC file
IF FIELD=122.03
IF VAL=""
SET VAL=$$GET1^DIQ(368,RFAIEN,22.03,"E")
+60 IF ((FIELD=100.02)!(FIELD=100.03)!(FIELD=.03)!(FIELD=122.04)!(FIELD=113.03)!(FIELD=112.01)!(FIELD=114.03)!(FIELD=114.04))
IF VAL'=""
Begin DoDot:1
+61 SET VAL=$$GET1^DIQ(368,RFAIEN,FIELD,"I")
+62 ; Return internal date
if RDATE=2
QUIT
+63 ; Return negative internal date
IF RDATE=1
SET VAL=VAL*-1
QUIT
+64 ; Return external date
SET VAL=$$FMTE^XLFDT(VAL,"2DZ")
End DoDot:1
QUIT VAL
+65 IF VAL'=""
QUIT VAL
+66 ; Return raw value
IF VAL=""
IF FIELD>100
Begin DoDot:1
+67 SET FIELD=FIELD-100
+68 SET VAL=$$GET1^DIQ(368,RFAIEN,FIELD)
End DoDot:1
+69 if VAL=""
SET VAL=$SELECT(RETNA=1:"*NA*",RETNA=2:"",1:0)
+70 QUIT VAL
+71 ;
BLDONEM(VALMCNT,MSGCNT,RFAIEN,IBSORT1,PFILTER,BTYPE,PSORT,IBSORT2,SSORT,SFILTER) ; Build one Message into
+1 ; the listman display
+2 ; Input: VALMCNT - Current Line of the display being
+3 ; (re)built
+4 ; MSGCNT - Current Message Number
+5 ; RFAIEN - IEN of the message to be displayed
+6 ; IBSORT1 - Primary Sort Code
+7 ; PFILTER - Current Filter line value
+8 ; BTYPE - 0 - Not a bad record
+9 ; Otherwise, type of bad record (1-2)
+10 ; PSORT - External value of primary sort data
+11 ; IBSORT2 - Secondary Sort Code
+12 ; SSORT - External value of secondary sort data
+13 ;
+14 ; Output: VALMCNT - Updated Line of the display being
+15 ; MSGCNT - Updated Message Number
+16 ; PFILTER - Update Filter line Value
+17 ; ^TMP("IBRIFWLIX",$J,CNT) - Message Selector Index
+18 NEW LINE,VAL,XX
+19 ; Display Bad Record Type
IF BTYPE
Begin DoDot:1
+20 ; Same as previous line
if PFILTER=BTYPE
QUIT
+21 SET VALMCNT=VALMCNT+1
SET PFILTER=BTYPE
+22 IF BTYPE=1
Begin DoDot:2
+23 SET LINE="Messages with an invalid Bill Number"
End DoDot:2
+24 IF BTYPE=2
Begin DoDot:2
+25 SET LINE="Messages with Patient/Bill Mismatch"
End DoDot:2
+26 DO SET^VALM10(VALMCNT,LINE,VALMCNT)
End DoDot:1
+27 IF 'BTYPE
Begin DoDot:1
+28 IF ".N.O.E.D."[("."_IBSORT1_".")
SET PSORT=$TRANSLATE(PSORT,"-")
SET PSORT=$$FMTE^XLFDT(PSORT,"2DZ")
+29 SET LINE=$SELECT(IBSORT1="I":"Insurance Company Name: ",IBSORT1="P":"Patient Name: ",IBSORT1="B":"Authorizing Biller: ",IBSORT1="L":"LOINC Code: ",IBSORT1="E"!(IBSORT1="D"):"Date Due: ",1:"Date Received: ")_PSORT
+30 IF PFILTER'=LINE
Begin DoDot:2
+31 SET VALMCNT=VALMCNT+1
SET PFILTER=LINE
+32 DO SET^VALM10(VALMCNT,LINE,VALMCNT)
+33 SET SFILTER=""
End DoDot:2
+34 IF $GET(IBSORT2)]""
IF $GET(IBSORT2)'=0
Begin DoDot:2
+35 IF ".N.O.E.D."[("."_IBSORT2_".")
SET SSORT=$TRANSLATE(SSORT,"-")
SET SSORT=$$FMTE^XLFDT(SSORT,"2DZ")
+36 SET LINE=" "_$SELECT(IBSORT2="I":"Insurance Company Name: ",IBSORT2="P":"Patient Name: ",IBSORT2="B":"Authorizing Biller: ",IBSORT2="L":"LOINC Code: ",IBSORT2="E"!(IBSORT2="D"):"Date Due: ",1:"Date Received: ")_SSORT
+37 IF SFILTER'=LINE
Begin DoDot:3
+38 SET VALMCNT=VALMCNT+1
SET SFILTER=LINE
+39 DO SET^VALM10(VALMCNT,LINE,VALMCNT)
End DoDot:3
End DoDot:2
End DoDot:1
+40 SET CNT=CNT+1
SET VALMCNT=VALMCNT+1
+41 SET ^TMP("IBRFIWLIX",$JOB,CNT)=RFAIEN
+42 ; Message #
SET LINE=$$SETL("",MSGCNT,"",1,4)
+43 ; External Bill #
SET VAL=$$GETFVAL(111.01,RFAIEN,"",0,2)
+44 ; Review Status
SET XX=$$GET1^DIQ(368,RFAIEN,200.04,"I")
+45 if XX
SET VAL=VAL_"*"
+46 SET LINE=$$SETL(LINE,VAL,"",5,8)
+47 DO SET^VALM10(VALMCNT,LINE,VALMCNT)
+48 ; Ins. Co. Name
SET VAL=$$GETFVAL(101.01,RFAIEN,"",0,2)
+49 SET LINE=$$SETL(LINE,VAL,"",15,16)
+50 DO SET^VALM10(VALMCNT,LINE,VALMCNT)
+51 ; Patient Name
SET VAL=$$GETFVAL(109.01,RFAIEN,"",0,2)
+52 SET LINE=$$SETL(LINE,VAL,"",33,20)
+53 DO SET^VALM10(VALMCNT,LINE,VALMCNT)
+54 ; SSN
SET VAL=$$GETFVAL(-3,RFAIEN,"",0,2)
+55 SET LINE=$$SETL(LINE,VAL,"",56,4)
+56 DO SET^VALM10(VALMCNT,LINE,VALMCNT)
+57 ; Service Date
SET VAL=$$GETFVAL(114.03,RFAIEN,"",2,2)
+58 IF VAL'=""
SET VAL=$$FMTE^XLFDT(VAL,"2Z")
+59 SET LINE=$$SETL(LINE,VAL,"",61,8)
+60 DO SET^VALM10(VALMCNT,LINE,VALMCNT)
+61 ; Current Balance
SET VAL=$$GETFVAL(-4,RFAIEN,"",0,2)
+62 SET VAL=$JUSTIFY("$"_$FNUMBER(VAL,"",2),9)
+63 SET LINE=$$SETL(LINE,VAL,"",71,9)
+64 DO SET^VALM10(VALMCNT,LINE,VALMCNT)
+65 ;
+66 ; Selection Index - RFAIEN is pointer to file 368, VALMCNT points to detailed entry in worklist ^TMP
SET ^TMP("IBRFIWLIX",$JOB,CNT)=RFAIEN_U_VALMCNT
+67 ;I IBSORT1'="L" D
+68 ;. S VALMCNT=VALMCNT+1
+69 ;. S VAL=$$GETFVAL(122.03,RFAIEN,"",0,2) ; LOINC Code + Description
+70 ;. I VAL'="" D
+71 ;. . S LINE=$$SETL("",VAL,"",6,80)
+72 ;. . D SET^VALM10(VALMCNT,LINE,VALMCNT)
+73 ;
+74 SET VALMCNT=VALMCNT+1
+75 ; LOINC Code + Description
SET VAL=$$GETFVAL(122.03,RFAIEN,"",0,2)
+76 IF VAL'=""
Begin DoDot:1
+77 SET LINE=$$SETL("",VAL,"",5,80)
+78 DO SET^VALM10(VALMCNT,LINE,VALMCNT)
End DoDot:1
+79 QUIT
+80 ;
SETL(LINE,DATA,LABEL,COL,LNG) ; Creates a line of data to be set into the body
+1 ; of the worklist
+2 ; Input: LINE - Current line being created
+3 ; DATA - Information to be added to the end of the current line
+4 ; LABEL - Label to describe the information being added
+5 ; COL - Column position in line to add information add
+6 ; LNG - Maximum length of data information to include on the line
+7 ; Returns: Line updated with added information
+8 SET LINE=LINE_$JUSTIFY("",(COL-$LENGTH(LABEL)-$LENGTH(LINE)))_LABEL_$EXTRACT(DATA,1,LNG)
+9 QUIT LINE
+10 ;
HELP ; -- help code
+1 SET X="?"
DO DISP^XQORM1
WRITE !!
+2 SET VALMSG="* Indicates review in progress"
+3 QUIT
+4 ;
SMSG ;EP
+1 ; Protocol action to select an RFI message to be worked
+2 ; Input: ^TMP("IBRFIWLIX",$J,CNT)=RFAIEN
+3 NEW RFAIEN,RFAIDET,RFAIDHDR
+4 SET VALMBCK="R"
+5 DO FULL^VALM1
+6 SET RFAIEN=$$SELMSG^IBRFIWLA("Select Message")
+7 IF RFAIEN=""
SET VALMSG="|* Review in progress | Enter ?? for more actions|"
QUIT
+8 SET (RFAIDET,RFAIDHDR)=""
+9 IF $PIECE(RFAIEN,U,2)
Begin DoDot:1
+10 SET RFAIDET=$PIECE($GET(RFAIEN),U,2)
+11 IF $GET(RFAIDET)
SET RFAIDET=$EXTRACT($GET(^TMP("IBRFIWL",$JOB,+$GET(RFAIDET),0)),6,999)
+12 SET RFAIDHDR=$EXTRACT($GET(VALMCAP),6,999)
End DoDot:1
+13 SET RFAIEN=$PIECE(RFAIEN,U)
+14 ;
+15 ; Show the detail of the message
DO EN^IBRFIWL1(RFAIEN,RFAIDET,RFAIDHDR)
+16 ; Rebuild the list
DO INIT
+17 QUIT
+18 ;
EXIT ; -- exit code
+1 KILL IBAUTH,IBSORT1,IBSORT2
+2 KILL ^TMP("IBBIL",$JOB),^TMP("IBRFIWL",$JOB),^TMP("IBRFIWLS",$JOB),^TMP("IBRFIWLIX",$JOB)
+3 DO CLEAN^VALM10
+4 QUIT