- BPSRPT3 ;BHAM ISC/BEE - ECME REPORTS ;14-FEB-05
- ;;1.0;E CLAIMS MGMT ENGINE;**1,3,5,7,11,14,19,20,23,24**;JUN 2004;Build 43
- ;;Per VA Directive 6402, this routine should not be modified.
- ;
- ;Reference to IB NCPCP NON-BILLABLE STATUS REASONS (#366.17) supported by ICR 6136
- ;
- Q
- ;
- ; Select the ECME Pharmacy or Pharmacies
- ;
- ; Input Variable -> none
- ; Return Value -> "" = Valid Entry or Entries Selected
- ; ^ = Exit
- ;
- ; Output Variable -> BPPHARM = 1 One or More Pharmacies Selected
- ; = 0 User Entered 'ALL'
- ;
- ; If BPPHARM = 1 then the BPPHARM array will be defined where:
- ; BPPHARM(ptr) = ptr ^ BPS PHARMACY NAME and
- ; ptr = Internal Pointer to BPS PHARMACIES file (#9002313.56)
- ;
- SELPHARM() N DIC,DIR,DIRUT,DTOUT,DUOUT,X,Y
- ;
- ;Reset BPPHARM array
- K BPPHARM
- ;
- ;First see if they want to enter individual divisions or ALL
- S DIR(0)="S^D:DIVISION;A:ALL"
- S DIR("A")="Select Certain Pharmacy (D)ivisions or (A)LL"
- S DIR("L",1)="Select one of the following:"
- S DIR("L",2)=""
- S DIR("L",3)=" D DIVISION"
- S DIR("L",4)=" A ALL"
- D ^DIR K DIR
- ;
- ;Check for "^" or timeout, otherwise define BPPHARM
- I ($G(DUOUT)=1)!($G(DTOUT)=1) S Y="^"
- E S BPPHARM=$S(Y="A":0,1:1)
- ;
- SELPHRM1 ;
- ;If division selected, ask prompt
- I $G(BPPHARM)=1 F D Q:Y="^"!(Y="")
- .;
- .;Prompt for entry
- .K X S DIC(0)="QEAM",DIC=9002313.56,DIC("A")="Select ECME Pharmacy Division(s): "
- .W ! D ^DIC
- .;
- .;Check for "^" or timeout
- .I ($G(DUOUT)=1)!($G(DTOUT)=1) K BPPHARM S Y="^" Q
- .;
- .;Check for blank entry, quit if no previous selections
- .I $G(X)="" S Y=$S($D(BPPHARM)>9:"",1:"^") Q
- .;
- .;Handle Deletes
- .I $D(BPPHARM(+Y)) D Q:Y="^" I 1
- ..N P
- ..S P=Y ;Save Original Value
- ..S DIR(0)="S^Y:YES;N:NO",DIR("A")="Delete "_$P(P,U,2)_" from your list?"
- ..S DIR("B")="NO" D ^DIR
- ..I ($G(DUOUT)=1)!($G(DTOUT)=1) K BPPHARM S Y="^" Q
- ..I Y="Y" K BPPHARM(+P),BPPHARM("B",$P(P,U,2),+P)
- ..S Y=P ;Restore Original Value
- ..K P
- .E D
- ..;Define new entries in BPPHARM array
- ..S BPPHARM(+Y)=Y
- ..S BPPHARM("B",$P(Y,U,2),+Y)=""
- .;
- .;Display a list of selected divisions
- .I $D(BPPHARM)>9 D
- ..N X
- ..W !,?2,"Selected:"
- ..S X="" F S X=$O(BPPHARM("B",X)) Q:X="" W !,?10,X
- ..K X
- .Q
- ;
- K BPPHARM("B")
- Q Y
- ;
- ; Select to Include Eligibility of (V)ETERAN, (T)RICARE, (C)HAMPVA or (A)ll
- ;
- ; Input Variable -> DFLT = 0 = All
- ; 1 = VETERAN
- ; 2 = TRICARE
- ; 3 = CHAMPVA
- ;
- ; Return Value -> V, T, C or 0 for All
- ;
- SELELIG(DFLT) N DIC,DIR,DIRUT,DUOUT,DTOUT,DIROUT,X,Y
- S DFLT=$S($G(DFLT)=1:"V",$G(DFLT)=2:"T",$G(DFLT)=3:"C",1:"A")
- S DIR(0)="S^V:VETERAN;T:TRICARE;C:CHAMPVA;A:ALL"
- S DIR("A")="Include Certain Eligibility Type or (A)ll",DIR("B")=DFLT
- D ^DIR
- I ($G(DUOUT)=1)!($G(DTOUT)=1) S Y="^"
- S Y=$S(Y="A":0,1:Y)
- Q Y
- ;
- ; Display (S)ummary or (D)etail Format
- ;
- ; Input Variable -> DFLT = 1 Summary
- ; 2 Detail
- ;
- ; Return Value -> 1 = Summary
- ; 0 = Detail
- ; ^ = Exit
- ;
- SELSMDET(DFLT) N DIR,DIRUT,DTOUT,DUOUT,X,Y
- S DFLT=$S($G(DFLT)=1:"Summary",$G(DFLT)=0:"Detail",1:"Detail")
- S DIR(0)="S^S:Summary;D:Detail",DIR("A")="Display (S)ummary or (D)etail Format",DIR("B")=DFLT
- D ^DIR
- I ($G(DUOUT)=1)!($G(DTOUT)=1) S Y="^"
- S Y=$S(Y="S":1,Y="D":0,1:Y)
- Q Y
- ;
- ; Display (C)MOP or (M)ail or (W)indow or (A)ll
- ;
- ; Input Variable -> DFLT = C CMOP
- ; W Window
- ; M Mail
- ; A All
- ;
- ; Return Value -> C = CMOP
- ; W = Window
- ; M = Mail
- ; A = All
- ; ^ = Exit
- ;
- SELMWC(DFLT) N DIR,DIRUT,DTOUT,DUOUT,X,Y
- S DFLT=$S($G(DFLT)="C":"CMOP",$G(DFLT)="W":"Window",$G(DFLT)="M":"Mail",1:"ALL")
- S DIR(0)="S^C:CMOP;M:Mail;W:Window;A:ALL"
- S DIR("A")="Display (C)MOP or (M)ail or (W)indow or (A)LL",DIR("B")=DFLT
- D ^DIR
- I ($G(DUOUT)=1)!($G(DTOUT)=1) S Y="^"
- Q Y
- ;
- ;
- SELMWC1(DFLT) ;
- ; Upon completion of prompt, values will be placed into a string delimited
- ; by commas. e.g. C,M
- ;
- ; If user includes (A)ll as a code, "A" will be stored in BPARR
- ; array. e.g. Entry of C,M,A will save as BPARR("MWC")="A"
- ;
- ; User input values are temporary stored in array BPSMWC to eliminate duplicate
- ; entries. e.g. Entry of C,M,C will save as BPARR("MWC")="C,M"
- ;
- BPSMWC ;
- N DIR,DIRUT,DTOUT,DUOUT,X,Y
- N BPARR,BPSMWC,BPSERR,BPSMWCSTR,BPSSEL,BPSX
- ;
- S BPSMWCSTR=",C,M,W,A,"
- S DIR(0)="FO^0:7"
- S DIR("A",1)=""
- S DIR("A",2)=" Select one or more of the following:"
- S DIR("A",3)=""
- S DIR("A",4)=" C CMOP"
- S DIR("A",5)=" M Mail"
- S DIR("A",6)=" W Window"
- S DIR("A",7)=" A ALL"
- S DIR("A",8)=""
- S DIR("A")="Display (C)MOP or (M)ail or (W)indow or (A)ll"
- S DIR("B")="A" S:$G(BPARR("MWC"))'="" DIR("B")=BPARR("MWC")
- S DIR("?",1)="Enter a single response or multiple responses separated by commas."
- S DIR("?",2)=" Example:"
- S DIR("?",3)=" C"
- S DIR("?")=" C,M"
- D ^DIR K DIR
- I ($G(DUOUT)=1)!($G(DTOUT)=1)!($D(DIRUT)) Q "^"
- ;
- ;Convert any lower case to upper case
- S X=$TR(X,BPSLC,BPSUC)
- ;
- ;If 'A' was one of the selections,reset X to include all available selections.
- I X[",",X["A" S X="C,M,W"
- ;
- ; Loop through user input (returned in variable X).
- ; Display warning message if any user input selection is not included
- ; in the string of acceptable codes (BPSMWCSTR) and re-prompt question.
- ; Assign valid selections to BPSMWC array. This array will prevent
- ; duplicate entries from being saved to the user's profile.
- ;
- K BPSMWC
- S BPSERR=""
- F BPSX=1:1:$L(X,",") D
- . S BPSSEL=$P(X,",",BPSX)
- . I BPSMWCSTR'[(","_BPSSEL_",") W !," ",BPSSEL," is not a valid entry." S BPSERR=1 Q
- . S BPSMWC(BPSSEL)=""
- ;
- I $G(BPSERR)=1 G BPSMWC
- ;
- ; If user included (A)ll as a selection, set profile setting to "A".
- ;
- I $D(BPSMWC("A")) S BPARR("MWC")="A"
- E D ; User did not enter "A".
- . ;
- . ; At this point user selections are valid, do not include "A".
- . ; Loop through and set selections into a comma delimited
- . ; string before assigning to BPARR array.
- . ;
- . S BPSSEL=""
- . F S BPSSEL=$O(BPSMWC(BPSSEL)) Q:BPSSEL="" D
- . . ; Display the user selections
- . . W !,?10,$S(BPSSEL="C":"CMOP",BPSSEL="M":"MAIL",BPSSEL="W":"WINDOW",1:"")
- . . S BPSMWC=$G(BPSMWC)_BPSSEL_","
- . S BPSMWC=$E(BPSMWC,1,($L(BPSMWC)-1))
- . S BPARR("MWC")=BPSMWC
- ;
- Q BPARR("MWC")
- ;
- ; Display (R)ealTime Fills or (B)ackbills or (P)RO option or Re(S)ubmission or (A)LL
- ;
- ; Input Variable -> DFLT = 5 Resubmission
- ; 4 PRO Option
- ; 3 Backbill
- ; 2 Real Time Fills
- ; 1 ALL
- ;
- ; Return Value -> 5 = Resubmision
- ; 4 = PRO Option
- ; 3 = Backbill (manually)
- ; 2 = Real Time Fills (automatically during FINISH)
- ; 1 = ALL
- ; ^ = Exit
- ;
- SELRTBCK(DFLT) N DIR,DIRUT,DTOUT,DUOUT,DIROUT,X,Y
- S DFLT=$S($G(DFLT)=2:"Real Time",$G(DFLT)=3:"Backbill",$G(DFLT)=4:"PRO Option",$G(DFLT)=5:"Resubmission",1:"A")
- S DIR(0)="S^R:Real Time Fills;B:Backbill;P:PRO Option;S:ReSubmission;A:ALL"
- S DIR("A")="Display (R)ealTime, (B)ackbills, (P)RO Option, Re(S)ubmission or (A)LL",DIR("B")=DFLT
- D ^DIR
- I ($G(DUOUT)=1)!($G(DTOUT)=1) S Y="^"
- S Y=$S(Y="A":1,Y="R":2,Y="B":3,Y="P":4,Y="S":5,1:Y)
- Q Y
- ;
- SELRBPS() ;
- ;
- ; BPSRBSTR = string of valid codes
- ;
- ; Upon completion of prompt, values will be placed into a string delimited
- ; by commas. e.g. P,R
- ;
- ; If user selected (A)ll then 1 will be stored in BPARR
- ;
- ; User input values are temporary stored in array BPSRBPS to eliminate duplicate
- ; entries.
- ;
- BPRBPS ; Realtime / Backbills / Pro Option / Resubmission / All
- N BPARR,BPSRBPS,BPSERR,BPSRBSTR,BPSSEL,BPSX
- N DIR,DIRUT,DTOUT,DUOUT,X,Y
- ;
- S BPSRBSTR=",R,B,P,S,A,"
- S DIR(0)="FO^0:9"
- S DIR("A",1)=""
- S DIR("A",2)=" Select one or more of the following:"
- S DIR("A",3)=""
- S DIR("A",4)=" R Real Time Fills"
- S DIR("A",5)=" B Backbill"
- S DIR("A",6)=" P PRO Option"
- S DIR("A",7)=" S ReSubmission"
- S DIR("A",8)=" A ALL"
- S DIR("A",9)=""
- S DIR("A")="Display (R)ealTime, (B)ackbills, (P)RO Option, Re(S)ubmission or (A)ll"
- S DIR("B")="A" S:$G(BPARR("RBPS"))'="" DIR("B")=BPARR("RBPS")
- S DIR("?",1)="Enter a single response or multiple responses separated by commas."
- S DIR("?",2)=" Example:"
- S DIR("?",3)=" B"
- S DIR("?")=" B,P"
- D ^DIR K DIR
- ;
- I ($G(DUOUT)=1)!($G(DTOUT)=1)!($D(DIRUT)) Q "^"
- ;
- ;Convert any lower case to upper case
- S X=$TR(X,BPSLC,BPSUC)
- ;
- ;If 'A' was one of the selections,reset X to include all available selections.
- I X[",",X["A" S X="R,B,P,S"
- ;
- ; Loop through user input (returned in variable X).
- ; Display warning message if any user input selection is not included
- ; in the string of acceptable codes (BPSRBSTR) and re-prompt question.
- ; Assign valid selections to BPRTBCK array. This array will prevent
- ; duplicate entries from being saved to the user's profile.
- ;
- K BPSRBPS
- S (BPSSEL,BPSERR)=""
- F BPSX=1:1:$L(X,",") D
- . S BPSSEL=$P(X,",",BPSX)
- . I BPSRBSTR'[(","_BPSSEL_",") W !," ",BPSSEL," is not a valid entry." S BPSERR=1 Q
- . S BPSRBPS(BPSSEL)=""
- ;
- I $G(BPSERR)=1 G BPRBPS
- ;
- ; If user selected (A)ll, set profile setting to ALL.
- I $D(BPSRBPS("A")) S BPARR("RBPS")=1
- E D ; User did not enter "A".
- . ;
- . ; At this point user selections are valid and do not include "A".
- . ; Loop through valid user selections. Set selections into a
- . ; comma delimited string before assigning to BPARR array.
- . ;
- . S (BPSSEL,BPSSELN)=""
- . F S BPSSEL=$O(BPSRBPS(BPSSEL)) Q:BPSSEL="" D
- . . ; Display the user selections
- . . W !,?10,$S(BPSSEL="R":"REALTIME",BPSSEL="B":"BACKBILLS",BPSSEL="P":"PRO OPTION",BPSSEL="S":"RESUBMISSION",1:"")
- . . S BPSRBPS=$G(BPSRBPS)_BPSSEL_","
- . S BPSRBPS=$E(BPSRBPS,1,($L(BPSRBPS)-1))
- ;
- ; If ALL wasn't selected convert BPSRBPS to numerical a value, like existing functionality in SELRTBCK^BPSRPT3.
- I '$D(BPSRBPS("A")) D
- . N RTBCKX,NRTBCK,I
- . S NRTBCK=""
- . I $L(BPSRBPS)=1 D
- . . S NRTBCK=$S(BPSRBPS="R":2,BPSRBPS="B":3,BPSRBPS="P":4,BPSRBPS="S":5,1:"")
- . . S BPARR("RBPS")=NRTBCK
- . E D
- . . F I=1:1:$L(BPSRBPS,",") S RTBCKX=$P(BPSRBPS,",",I),NRTBCK=NRTBCK_$S(RTBCKX="R":2,RTBCKX="B":3,RTBCKX="P":4,RTBCKX="S":5,1:"")_","
- . . S BPARR("RBPS")=$E(NRTBCK,1,$L(NRTBCK)-1)
- ;
- Q BPARR("RBPS")
- ;
- ; Display Specific (D)rug or Drug (C)lass
- ;
- ; Input Variable -> DFLT = 3 Drug Class
- ; 2 Drug
- ; 1 ALL
- ;
- ; Return Value -> 3 = Drug Class
- ; 2 = Drug
- ; 1 = ALL
- ; ^ = Exit
- ;
- SELDRGAL(DFLT) N DIR,DIRUT,DTOUT,DUOUT,X,Y
- S DFLT=$S($G(DFLT)=2:"Drug",$G(DFLT)=3:"Drug Class",1:"ALL")
- S DIR(0)="S^D:Drug;C:Drug Class;A:ALL"
- S DIR("A")="Display Specific (D)rug or Drug (C)lass or (A)LL",DIR("B")=DFLT
- D ^DIR
- I ($G(DUOUT)=1)!($G(DTOUT)=1) S Y="^"
- S Y=$S(Y="A":1,Y="D":2,Y="C":3,1:Y)
- Q Y
- ;
- ; Select Drug
- ;
- ; Input Variable -> none
- ;
- ; Return Value -> ptr = pointer to DRUG file (#50)
- ; ^ = Exit
- ;
- SELDRG() N DIC,DIRUT,DUOUT,X,Y
- ;
- ;Prompt for entry
- W ! D SELDRG^BPSRPT6
- ;
- ;Check for "^", timeout, or blank entry
- I ($G(DUOUT)=1)!($G(DTOUT)=1) S Y="^"
- ;
- ;Check for Valid Entry
- I +Y>0 S Y=+Y
- ;
- Q Y
- ;
- ; Select Drug Class
- ;
- ; Input Variable -> none
- ;
- ; Return Value -> ptr = pointer to VA DRUG CLASS file (#50.605)
- ; ^ = Exit
- ;
- SELDRGCL() N DIC,DIRUT,DUOUT,Y
- ;
- ;Prompt for entry
- ;Using DIC^PSNDI per ICR 4554 - BPS*1*14 ticket 313337
- S DIC="50.605",DIC(0)="QEAMZ" D DIC^PSNDI(DIC,"BPS",.DIC,,,)
- ;
- ;call returns DRUG CLASS CODE, need to extract DRUG CLASSIFICATION
- I +$G(Y)>0 S Y=$P($G(Y(0)),"^",2) I $G(Y)="" S Y=-1
- ;
- ;If nothing was returned set Y="-1" so report knows
- I $G(Y)=-1 S Y="^"
- ;
- Q Y
- ;
- ; Enter Date Range
- ;
- ; Input Variable -> TYPE = 7 CLOSE REPORT
- ; 1-6 OTHER REPORTS
- ;
- ; Return Value -> P1^P2
- ;
- ; where P1 = From Date
- ; = ^ Exit
- ; P2 = To Date
- ; = blank for Exit
- ;
- SELDATE(TYPE) N BPSIBDT,DIR,DIRUT,DTOUT,DUOUT,VAL,X,Y
- S TYPE=$S($G(TYPE)=7:"CLOSE",1:"TRANSACTION")
- SELDATE1 S VAL="",DIR(0)="DA^:DT:EX",DIR("A")="START WITH "_TYPE_" DATE: ",DIR("B")="T-1"
- W ! D ^DIR
- ;
- ;Check for "^", timeout, or blank entry
- I ($G(DUOUT)=1)!($G(DTOUT)=1)!($G(X)="") S VAL="^"
- ;
- I VAL="" D
- .S $P(VAL,U)=Y
- .S DIR(0)="DA^"_VAL_":DT:EX",DIR("A")=" GO TO "_TYPE_" DATE: ",DIR("B")="T"
- .D ^DIR
- .;
- .;Check for "^", timeout, or blank entry
- .I ($G(DUOUT)=1)!($G(DTOUT)=1)!($G(X)="") S VAL="^" Q
- .;
- .;Define Entry
- .S $P(VAL,U,2)=Y
- ;
- Q VAL
- ;
- ; Select to Include Open or Closed or All claims
- ;
- ; Input Variable -> DFLT = 0 = All
- ; 1 = Closed
- ; 2 = Open
- ;
- ; Return Value -> 0 = All, 1 = Closed, 2 = Open
- SELOPCL(DFLT) N DIC,DIR,DIRUT,DUOUT,X,Y
- ;
- S DFLT=$S($G(DFLT)=1:"C",$G(DFLT)=2:"O",1:"A")
- S DIR(0)="S^O:OPEN;C:CLOSED;A:ALL"
- S DIR("A")="Include (O)pen, (C)losed, or (A)ll Claims",DIR("B")=DFLT
- D ^DIR
- I ($G(DUOUT)=1)!($G(DTOUT)=1) S Y="^"
- ;
- S Y=$S(Y="C":1,Y="O":2,1:0)
- Q Y
- ;
- SELELIG1() ;
- ; Select multiple Eligibilities
- ;
- ; Input Variable -> none
- ; Return Value -> 0: All, 1: Selected Eligibilities; '^' = Exit
- ;
- ; Output Variable -> BPELIG1 = 1 - One or More Eligibilities Selected
- ; = 0 - User Entered 'ALL'
- ; = "^" - User quit
- ;
- ; If BPELIG1 = 1 then the BPELIG1 array will be defined where:
- ; BPELIG1("C")="CHAMPVA"
- ; BPELIG1("T")="TRICARE"
- ; BPELIG1("V")="VETERAN"
- ;
- ;
- BPSELIG1 ;
- ;Reset BPELIG1 array
- K BPELIG1
- N DIR,DTOUT,DUOUT,DIRUT,DIROUT,X,Y,P
- N BPSVTC,BPSERR,BPSVTCSTR,BPSSEL,BPSX
- ;
- S BPSVTCSTR=",V,T,C,A,"
- S DIR(0)="FO^0:7"
- S DIR("A",1)=""
- S DIR("A",2)="Select one or more of the following:"
- S DIR("A",3)=""
- S DIR("A",4)=" V VETERAN"
- S DIR("A",5)=" T TRICARE"
- S DIR("A",6)=" C CHAMPVA"
- S DIR("A",7)=" A ALL"
- S DIR("A",8)=""
- S DIR("A")="Display (V)ETERAN or (T)RICARE or (C)HAMPVA or (A)LL"
- S DIR("B")="A" S:$G(BPARR("ELIG"))'="" DIR("B")=BPARR("ELIG")
- S DIR("?",1)="Enter a single response or multiple responses separated by commas."
- S DIR("?",2)=" Example:"
- S DIR("?",3)=" T"
- S DIR("?")=" T,C"
- D ^DIR K DIR
- I ($G(DUOUT)=1)!($G(DTOUT)=1)!($D(DIRUT)) Q "^"
- ;
- ;Convert any lower case to upper case
- S X=$TR(X,BPSLC,BPSUC)
- ;
- ;If 'A' was one of the selections, reset X to include all available selections.
- I X[",",X["A" S X="V,T,C"
- ;
- ; Loop through user input (returned in variable X).
- ; Display warning message if any user input selection is not included
- ; in the string of acceptable codes (BPSVTCSTR) and re-prompt question.
- ; Assign valid selections to BPSVTC array. This array will prevent
- ; duplicate entries from being saved to the user's profile.
- ;
- K BPSVTC
- S BPSERR=""
- F BPSX=1:1:$L(X,",") D
- . S BPSSEL=$P(X,",",BPSX)
- . I BPSVTCSTR'[(","_BPSSEL_",") W !," ",BPSSEL," is not a valid entry." S BPSERR=1 Q
- . ; if All was selected don't include in array
- . I BPSSEL'="A" S BPELIG1(BPSSEL)=$S(BPSSEL="V":"VETERAN",BPSSEL="T":"TRICARE",BPSSEL="C":"CHAMPVA",1:"")
- ;
- I $G(BPSERR)=1 G BPSELIG1
- ;
- ; ALL was selected
- I X="A" S BPELIG1=0
- E D ;
- . ;User selected one or more eligibilities
- . S BPELIG1=1
- . ;
- . ; Display the user selections
- . ;
- . S BPSSEL=""
- . F S BPSSEL=$O(BPELIG1(BPSSEL)) Q:BPSSEL="" W !,?10,BPELIG1(BPSSEL)
- ;
- Q BPELIG1
- ;
- SELALRC() ;
- ; Display Most (R)ecent or (A)ll
- ;
- ; Return Value -> A: All
- ; R: Most Recent
- ; ^: Exit
- ;
- N DIR,X,Y,DIRUT,DTOUT,DUOUT,DIROUT
- ;
- S DIR(0)="S^R:Most Recent;A:ALL"
- S DIR("A")="Select Most (R)ecent or (A)ll"
- S DIR("B")="MOST RECENT"
- S DIR("L",1)="Select one of the following:"
- S DIR("L",2)=""
- S DIR("L",3)=" R Most Recent Transaction Only"
- S DIR("L",4)=" A ALL Transactions (will list the Rx/Fill each time resubmitted)"
- D ^DIR K DIR
- ;
- ;Check for "^" or timeout,
- I ($G(DUOUT)=1)!($G(DTOUT)=1) S Y="^"
- Q Y
- ;
- SELNBSTS() ;
- ; Select the Non-Billable Status Reason
- ;
- ; Input Variable -> None
- ; Return Value -> 0: All, 1: Selected Non-Billable Status; '^' = Exit
- ;
- ; Output Variable -> BPNBSTS = 1 - One or More Non-Billable Statuses Selected
- ; = 0 - User Entered 'ALL'
- ; = "" - User quit
- ;
- ; If BPNBSTS = 1 then the BPNBSTS array will be defined where:
- ; BPNBSTS(Non-Billable Status IEN)=Non-Billable Status Reason
- ;
- ;Reset BPNBSTS array
- K BPNBSTS
- N DIR,DTOUT,DUOUT,DIRUT,DIROUT,X,Y,P,DIC
- ;
- ;First see if they want to enter individual eligibilities or ALL
- S DIR(0)="S^S:NON-BILLABLE STATUS;A:ALL"
- S DIR("A")="Select Certain Non-Billable (S)tatus or (A)ll"
- S DIR("B")="ALL"
- S DIR("L",1)="Select one of the following:"
- S DIR("L",2)=""
- S DIR("L",3)=" S NON-BILLABLE STATUS"
- S DIR("L",4)=" A ALL"
- D ^DIR K DIR
- ;
- ;Check for "^" or timeout, otherwise define BPNBSTS
- I ($G(DUOUT)=1)!($G(DTOUT)=1) S Y="^"
- S BPNBSTS=$S(Y="A":0,Y="^":"^",1:1)
- I BPNBSTS'=1 Q BPNBSTS
- ;
- ;Allow user to select multiple non-billable statuses
- F D Q:Y="^"!(Y="")
- .;Prompt for entry - ICR 6136
- .K X
- .S DIC(0)="QEAM",DIC=366.17,DIC("A")="Select Non-Billable Reason: "
- .W ! D ^DIC
- .I ($G(DUOUT)=1)!($G(DTOUT)=1) S Y="^" Q
- .;
- .;Check for blank entry, quit if no previous selections
- .I $G(Y)=-1 S Y=$S($D(BPNBSTS)>9:"",1:"^") Q
- .;
- .; Add entry to array or handle duplicate entries
- .I '$D(BPNBSTS($P(Y,U,1))) S BPNBSTS($P(Y,U,1))=$P(Y,U,2),BPNBSTS("B",$P(Y,U,2),$P(Y,U,1))=""
- .E D I Y="^" Q
- ..;Already in the array, so ask whether to delete
- ..N P
- ..S P=Y ;Save Original Value
- ..S DIR(0)="S^Y:YES;N:NO",DIR("A")="Delete "_$P(P,U,2)_" from your list?"
- ..S DIR("B")="NO"
- ..D ^DIR
- ..I ($G(DUOUT)=1)!($G(DTOUT)=1) S Y="^" Q
- ..I Y="Y" K BPNBSTS($P(P,U,1)),BPNBSTS("B",$P(P,U,2),$P(P,U,1))
- ..S Y=P ;Restore Original Value
- ..K P
- .;
- .;Display a list of selected values
- .I $D(BPNBSTS)>9 D
- ..N X
- ..W !,?2,"Selected:"
- ..S X="" F S X=$O(BPNBSTS("B",X)) Q:X="" W !,?10,X
- ..K X
- .Q
- ;
- ; Reset BPNBSTS array if user exited
- I Y="^" K BPNBSTS S BPNBSTS="^" Q "^"
- ;
- ; Deleted 'x-ref' as we don't need to return that
- K BPNBSTS("B")
- ;
- Q 1
- ;
- --- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HBPSRPT3 19700 printed Feb 18, 2025@23:19:05 Page 2
- BPSRPT3 ;BHAM ISC/BEE - ECME REPORTS ;14-FEB-05
- +1 ;;1.0;E CLAIMS MGMT ENGINE;**1,3,5,7,11,14,19,20,23,24**;JUN 2004;Build 43
- +2 ;;Per VA Directive 6402, this routine should not be modified.
- +3 ;
- +4 ;Reference to IB NCPCP NON-BILLABLE STATUS REASONS (#366.17) supported by ICR 6136
- +5 ;
- +6 QUIT
- +7 ;
- +8 ; Select the ECME Pharmacy or Pharmacies
- +9 ;
- +10 ; Input Variable -> none
- +11 ; Return Value -> "" = Valid Entry or Entries Selected
- +12 ; ^ = Exit
- +13 ;
- +14 ; Output Variable -> BPPHARM = 1 One or More Pharmacies Selected
- +15 ; = 0 User Entered 'ALL'
- +16 ;
- +17 ; If BPPHARM = 1 then the BPPHARM array will be defined where:
- +18 ; BPPHARM(ptr) = ptr ^ BPS PHARMACY NAME and
- +19 ; ptr = Internal Pointer to BPS PHARMACIES file (#9002313.56)
- +20 ;
- SELPHARM() NEW DIC,DIR,DIRUT,DTOUT,DUOUT,X,Y
- +1 ;
- +2 ;Reset BPPHARM array
- +3 KILL BPPHARM
- +4 ;
- +5 ;First see if they want to enter individual divisions or ALL
- +6 SET DIR(0)="S^D:DIVISION;A:ALL"
- +7 SET DIR("A")="Select Certain Pharmacy (D)ivisions or (A)LL"
- +8 SET DIR("L",1)="Select one of the following:"
- +9 SET DIR("L",2)=""
- +10 SET DIR("L",3)=" D DIVISION"
- +11 SET DIR("L",4)=" A ALL"
- +12 DO ^DIR
- KILL DIR
- +13 ;
- +14 ;Check for "^" or timeout, otherwise define BPPHARM
- +15 IF ($GET(DUOUT)=1)!($GET(DTOUT)=1)
- SET Y="^"
- +16 IF '$TEST
- SET BPPHARM=$SELECT(Y="A":0,1:1)
- +17 ;
- SELPHRM1 ;
- +1 ;If division selected, ask prompt
- +2 IF $GET(BPPHARM)=1
- FOR
- Begin DoDot:1
- +3 ;
- +4 ;Prompt for entry
- +5 KILL X
- SET DIC(0)="QEAM"
- SET DIC=9002313.56
- SET DIC("A")="Select ECME Pharmacy Division(s): "
- +6 WRITE !
- DO ^DIC
- +7 ;
- +8 ;Check for "^" or timeout
- +9 IF ($GET(DUOUT)=1)!($GET(DTOUT)=1)
- KILL BPPHARM
- SET Y="^"
- QUIT
- +10 ;
- +11 ;Check for blank entry, quit if no previous selections
- +12 IF $GET(X)=""
- SET Y=$SELECT($DATA(BPPHARM)>9:"",1:"^")
- QUIT
- +13 ;
- +14 ;Handle Deletes
- +15 IF $DATA(BPPHARM(+Y))
- Begin DoDot:2
- +16 NEW P
- +17 ;Save Original Value
- SET P=Y
- +18 SET DIR(0)="S^Y:YES;N:NO"
- SET DIR("A")="Delete "_$PIECE(P,U,2)_" from your list?"
- +19 SET DIR("B")="NO"
- DO ^DIR
- +20 IF ($GET(DUOUT)=1)!($GET(DTOUT)=1)
- KILL BPPHARM
- SET Y="^"
- QUIT
- +21 IF Y="Y"
- KILL BPPHARM(+P),BPPHARM("B",$PIECE(P,U,2),+P)
- +22 ;Restore Original Value
- SET Y=P
- +23 KILL P
- End DoDot:2
- if Y="^"
- QUIT
- IF 1
- +24 IF '$TEST
- Begin DoDot:2
- +25 ;Define new entries in BPPHARM array
- +26 SET BPPHARM(+Y)=Y
- +27 SET BPPHARM("B",$PIECE(Y,U,2),+Y)=""
- End DoDot:2
- +28 ;
- +29 ;Display a list of selected divisions
- +30 IF $DATA(BPPHARM)>9
- Begin DoDot:2
- +31 NEW X
- +32 WRITE !,?2,"Selected:"
- +33 SET X=""
- FOR
- SET X=$ORDER(BPPHARM("B",X))
- if X=""
- QUIT
- WRITE !,?10,X
- +34 KILL X
- End DoDot:2
- +35 QUIT
- End DoDot:1
- if Y="^"!(Y="")
- QUIT
- +36 ;
- +37 KILL BPPHARM("B")
- +38 QUIT Y
- +39 ;
- +40 ; Select to Include Eligibility of (V)ETERAN, (T)RICARE, (C)HAMPVA or (A)ll
- +41 ;
- +42 ; Input Variable -> DFLT = 0 = All
- +43 ; 1 = VETERAN
- +44 ; 2 = TRICARE
- +45 ; 3 = CHAMPVA
- +46 ;
- +47 ; Return Value -> V, T, C or 0 for All
- +48 ;
- SELELIG(DFLT) NEW DIC,DIR,DIRUT,DUOUT,DTOUT,DIROUT,X,Y
- +1 SET DFLT=$SELECT($GET(DFLT)=1:"V",$GET(DFLT)=2:"T",$GET(DFLT)=3:"C",1:"A")
- +2 SET DIR(0)="S^V:VETERAN;T:TRICARE;C:CHAMPVA;A:ALL"
- +3 SET DIR("A")="Include Certain Eligibility Type or (A)ll"
- SET DIR("B")=DFLT
- +4 DO ^DIR
- +5 IF ($GET(DUOUT)=1)!($GET(DTOUT)=1)
- SET Y="^"
- +6 SET Y=$SELECT(Y="A":0,1:Y)
- +7 QUIT Y
- +8 ;
- +9 ; Display (S)ummary or (D)etail Format
- +10 ;
- +11 ; Input Variable -> DFLT = 1 Summary
- +12 ; 2 Detail
- +13 ;
- +14 ; Return Value -> 1 = Summary
- +15 ; 0 = Detail
- +16 ; ^ = Exit
- +17 ;
- SELSMDET(DFLT) NEW DIR,DIRUT,DTOUT,DUOUT,X,Y
- +1 SET DFLT=$SELECT($GET(DFLT)=1:"Summary",$GET(DFLT)=0:"Detail",1:"Detail")
- +2 SET DIR(0)="S^S:Summary;D:Detail"
- SET DIR("A")="Display (S)ummary or (D)etail Format"
- SET DIR("B")=DFLT
- +3 DO ^DIR
- +4 IF ($GET(DUOUT)=1)!($GET(DTOUT)=1)
- SET Y="^"
- +5 SET Y=$SELECT(Y="S":1,Y="D":0,1:Y)
- +6 QUIT Y
- +7 ;
- +8 ; Display (C)MOP or (M)ail or (W)indow or (A)ll
- +9 ;
- +10 ; Input Variable -> DFLT = C CMOP
- +11 ; W Window
- +12 ; M Mail
- +13 ; A All
- +14 ;
- +15 ; Return Value -> C = CMOP
- +16 ; W = Window
- +17 ; M = Mail
- +18 ; A = All
- +19 ; ^ = Exit
- +20 ;
- SELMWC(DFLT) NEW DIR,DIRUT,DTOUT,DUOUT,X,Y
- +1 SET DFLT=$SELECT($GET(DFLT)="C":"CMOP",$GET(DFLT)="W":"Window",$GET(DFLT)="M":"Mail",1:"ALL")
- +2 SET DIR(0)="S^C:CMOP;M:Mail;W:Window;A:ALL"
- +3 SET DIR("A")="Display (C)MOP or (M)ail or (W)indow or (A)LL"
- SET DIR("B")=DFLT
- +4 DO ^DIR
- +5 IF ($GET(DUOUT)=1)!($GET(DTOUT)=1)
- SET Y="^"
- +6 QUIT Y
- +7 ;
- +8 ;
- SELMWC1(DFLT) ;
- +1 ; Upon completion of prompt, values will be placed into a string delimited
- +2 ; by commas. e.g. C,M
- +3 ;
- +4 ; If user includes (A)ll as a code, "A" will be stored in BPARR
- +5 ; array. e.g. Entry of C,M,A will save as BPARR("MWC")="A"
- +6 ;
- +7 ; User input values are temporary stored in array BPSMWC to eliminate duplicate
- +8 ; entries. e.g. Entry of C,M,C will save as BPARR("MWC")="C,M"
- +9 ;
- BPSMWC ;
- +1 NEW DIR,DIRUT,DTOUT,DUOUT,X,Y
- +2 NEW BPARR,BPSMWC,BPSERR,BPSMWCSTR,BPSSEL,BPSX
- +3 ;
- +4 SET BPSMWCSTR=",C,M,W,A,"
- +5 SET DIR(0)="FO^0:7"
- +6 SET DIR("A",1)=""
- +7 SET DIR("A",2)=" Select one or more of the following:"
- +8 SET DIR("A",3)=""
- +9 SET DIR("A",4)=" C CMOP"
- +10 SET DIR("A",5)=" M Mail"
- +11 SET DIR("A",6)=" W Window"
- +12 SET DIR("A",7)=" A ALL"
- +13 SET DIR("A",8)=""
- +14 SET DIR("A")="Display (C)MOP or (M)ail or (W)indow or (A)ll"
- +15 SET DIR("B")="A"
- if $GET(BPARR("MWC"))'=""
- SET DIR("B")=BPARR("MWC")
- +16 SET DIR("?",1)="Enter a single response or multiple responses separated by commas."
- +17 SET DIR("?",2)=" Example:"
- +18 SET DIR("?",3)=" C"
- +19 SET DIR("?")=" C,M"
- +20 DO ^DIR
- KILL DIR
- +21 IF ($GET(DUOUT)=1)!($GET(DTOUT)=1)!($DATA(DIRUT))
- QUIT "^"
- +22 ;
- +23 ;Convert any lower case to upper case
- +24 SET X=$TRANSLATE(X,BPSLC,BPSUC)
- +25 ;
- +26 ;If 'A' was one of the selections,reset X to include all available selections.
- +27 IF X[","
- IF X["A"
- SET X="C,M,W"
- +28 ;
- +29 ; Loop through user input (returned in variable X).
- +30 ; Display warning message if any user input selection is not included
- +31 ; in the string of acceptable codes (BPSMWCSTR) and re-prompt question.
- +32 ; Assign valid selections to BPSMWC array. This array will prevent
- +33 ; duplicate entries from being saved to the user's profile.
- +34 ;
- +35 KILL BPSMWC
- +36 SET BPSERR=""
- +37 FOR BPSX=1:1:$LENGTH(X,",")
- Begin DoDot:1
- +38 SET BPSSEL=$PIECE(X,",",BPSX)
- +39 IF BPSMWCSTR'[(","_BPSSEL_",")
- WRITE !," ",BPSSEL," is not a valid entry."
- SET BPSERR=1
- QUIT
- +40 SET BPSMWC(BPSSEL)=""
- End DoDot:1
- +41 ;
- +42 IF $GET(BPSERR)=1
- GOTO BPSMWC
- +43 ;
- +44 ; If user included (A)ll as a selection, set profile setting to "A".
- +45 ;
- +46 IF $DATA(BPSMWC("A"))
- SET BPARR("MWC")="A"
- +47 ; User did not enter "A".
- IF '$TEST
- Begin DoDot:1
- +48 ;
- +49 ; At this point user selections are valid, do not include "A".
- +50 ; Loop through and set selections into a comma delimited
- +51 ; string before assigning to BPARR array.
- +52 ;
- +53 SET BPSSEL=""
- +54 FOR
- SET BPSSEL=$ORDER(BPSMWC(BPSSEL))
- if BPSSEL=""
- QUIT
- Begin DoDot:2
- +55 ; Display the user selections
- +56 WRITE !,?10,$SELECT(BPSSEL="C":"CMOP",BPSSEL="M":"MAIL",BPSSEL="W":"WINDOW",1:"")
- +57 SET BPSMWC=$GET(BPSMWC)_BPSSEL_","
- End DoDot:2
- +58 SET BPSMWC=$EXTRACT(BPSMWC,1,($LENGTH(BPSMWC)-1))
- +59 SET BPARR("MWC")=BPSMWC
- End DoDot:1
- +60 ;
- +61 QUIT BPARR("MWC")
- +62 ;
- +63 ; Display (R)ealTime Fills or (B)ackbills or (P)RO option or Re(S)ubmission or (A)LL
- +64 ;
- +65 ; Input Variable -> DFLT = 5 Resubmission
- +66 ; 4 PRO Option
- +67 ; 3 Backbill
- +68 ; 2 Real Time Fills
- +69 ; 1 ALL
- +70 ;
- +71 ; Return Value -> 5 = Resubmision
- +72 ; 4 = PRO Option
- +73 ; 3 = Backbill (manually)
- +74 ; 2 = Real Time Fills (automatically during FINISH)
- +75 ; 1 = ALL
- +76 ; ^ = Exit
- +77 ;
- SELRTBCK(DFLT) NEW DIR,DIRUT,DTOUT,DUOUT,DIROUT,X,Y
- +1 SET DFLT=$SELECT($GET(DFLT)=2:"Real Time",$GET(DFLT)=3:"Backbill",$GET(DFLT)=4:"PRO Option",$GET(DFLT)=5:"Resubmission",1:"A")
- +2 SET DIR(0)="S^R:Real Time Fills;B:Backbill;P:PRO Option;S:ReSubmission;A:ALL"
- +3 SET DIR("A")="Display (R)ealTime, (B)ackbills, (P)RO Option, Re(S)ubmission or (A)LL"
- SET DIR("B")=DFLT
- +4 DO ^DIR
- +5 IF ($GET(DUOUT)=1)!($GET(DTOUT)=1)
- SET Y="^"
- +6 SET Y=$SELECT(Y="A":1,Y="R":2,Y="B":3,Y="P":4,Y="S":5,1:Y)
- +7 QUIT Y
- +8 ;
- SELRBPS() ;
- +1 ;
- +2 ; BPSRBSTR = string of valid codes
- +3 ;
- +4 ; Upon completion of prompt, values will be placed into a string delimited
- +5 ; by commas. e.g. P,R
- +6 ;
- +7 ; If user selected (A)ll then 1 will be stored in BPARR
- +8 ;
- +9 ; User input values are temporary stored in array BPSRBPS to eliminate duplicate
- +10 ; entries.
- +11 ;
- BPRBPS ; Realtime / Backbills / Pro Option / Resubmission / All
- +1 NEW BPARR,BPSRBPS,BPSERR,BPSRBSTR,BPSSEL,BPSX
- +2 NEW DIR,DIRUT,DTOUT,DUOUT,X,Y
- +3 ;
- +4 SET BPSRBSTR=",R,B,P,S,A,"
- +5 SET DIR(0)="FO^0:9"
- +6 SET DIR("A",1)=""
- +7 SET DIR("A",2)=" Select one or more of the following:"
- +8 SET DIR("A",3)=""
- +9 SET DIR("A",4)=" R Real Time Fills"
- +10 SET DIR("A",5)=" B Backbill"
- +11 SET DIR("A",6)=" P PRO Option"
- +12 SET DIR("A",7)=" S ReSubmission"
- +13 SET DIR("A",8)=" A ALL"
- +14 SET DIR("A",9)=""
- +15 SET DIR("A")="Display (R)ealTime, (B)ackbills, (P)RO Option, Re(S)ubmission or (A)ll"
- +16 SET DIR("B")="A"
- if $GET(BPARR("RBPS"))'=""
- SET DIR("B")=BPARR("RBPS")
- +17 SET DIR("?",1)="Enter a single response or multiple responses separated by commas."
- +18 SET DIR("?",2)=" Example:"
- +19 SET DIR("?",3)=" B"
- +20 SET DIR("?")=" B,P"
- +21 DO ^DIR
- KILL DIR
- +22 ;
- +23 IF ($GET(DUOUT)=1)!($GET(DTOUT)=1)!($DATA(DIRUT))
- QUIT "^"
- +24 ;
- +25 ;Convert any lower case to upper case
- +26 SET X=$TRANSLATE(X,BPSLC,BPSUC)
- +27 ;
- +28 ;If 'A' was one of the selections,reset X to include all available selections.
- +29 IF X[","
- IF X["A"
- SET X="R,B,P,S"
- +30 ;
- +31 ; Loop through user input (returned in variable X).
- +32 ; Display warning message if any user input selection is not included
- +33 ; in the string of acceptable codes (BPSRBSTR) and re-prompt question.
- +34 ; Assign valid selections to BPRTBCK array. This array will prevent
- +35 ; duplicate entries from being saved to the user's profile.
- +36 ;
- +37 KILL BPSRBPS
- +38 SET (BPSSEL,BPSERR)=""
- +39 FOR BPSX=1:1:$LENGTH(X,",")
- Begin DoDot:1
- +40 SET BPSSEL=$PIECE(X,",",BPSX)
- +41 IF BPSRBSTR'[(","_BPSSEL_",")
- WRITE !," ",BPSSEL," is not a valid entry."
- SET BPSERR=1
- QUIT
- +42 SET BPSRBPS(BPSSEL)=""
- End DoDot:1
- +43 ;
- +44 IF $GET(BPSERR)=1
- GOTO BPRBPS
- +45 ;
- +46 ; If user selected (A)ll, set profile setting to ALL.
- +47 IF $DATA(BPSRBPS("A"))
- SET BPARR("RBPS")=1
- +48 ; User did not enter "A".
- IF '$TEST
- Begin DoDot:1
- +49 ;
- +50 ; At this point user selections are valid and do not include "A".
- +51 ; Loop through valid user selections. Set selections into a
- +52 ; comma delimited string before assigning to BPARR array.
- +53 ;
- +54 SET (BPSSEL,BPSSELN)=""
- +55 FOR
- SET BPSSEL=$ORDER(BPSRBPS(BPSSEL))
- if BPSSEL=""
- QUIT
- Begin DoDot:2
- +56 ; Display the user selections
- +57 WRITE !,?10,$SELECT(BPSSEL="R":"REALTIME",BPSSEL="B":"BACKBILLS",BPSSEL="P":"PRO OPTION",BPSSEL="S":"RESUBMISSION",1:"")
- +58 SET BPSRBPS=$GET(BPSRBPS)_BPSSEL_","
- End DoDot:2
- +59 SET BPSRBPS=$EXTRACT(BPSRBPS,1,($LENGTH(BPSRBPS)-1))
- End DoDot:1
- +60 ;
- +61 ; If ALL wasn't selected convert BPSRBPS to numerical a value, like existing functionality in SELRTBCK^BPSRPT3.
- +62 IF '$DATA(BPSRBPS("A"))
- Begin DoDot:1
- +63 NEW RTBCKX,NRTBCK,I
- +64 SET NRTBCK=""
- +65 IF $LENGTH(BPSRBPS)=1
- Begin DoDot:2
- +66 SET NRTBCK=$SELECT(BPSRBPS="R":2,BPSRBPS="B":3,BPSRBPS="P":4,BPSRBPS="S":5,1:"")
- +67 SET BPARR("RBPS")=NRTBCK
- End DoDot:2
- +68 IF '$TEST
- Begin DoDot:2
- +69 FOR I=1:1:$LENGTH(BPSRBPS,",")
- SET RTBCKX=$PIECE(BPSRBPS,",",I)
- SET NRTBCK=NRTBCK_$SELECT(RTBCKX="R":2,RTBCKX="B":3,RTBCKX="P":4,RTBCKX="S":5,1:"")_","
- +70 SET BPARR("RBPS")=$EXTRACT(NRTBCK,1,$LENGTH(NRTBCK)-1)
- End DoDot:2
- End DoDot:1
- +71 ;
- +72 QUIT BPARR("RBPS")
- +73 ;
- +74 ; Display Specific (D)rug or Drug (C)lass
- +75 ;
- +76 ; Input Variable -> DFLT = 3 Drug Class
- +77 ; 2 Drug
- +78 ; 1 ALL
- +79 ;
- +80 ; Return Value -> 3 = Drug Class
- +81 ; 2 = Drug
- +82 ; 1 = ALL
- +83 ; ^ = Exit
- +84 ;
- SELDRGAL(DFLT) NEW DIR,DIRUT,DTOUT,DUOUT,X,Y
- +1 SET DFLT=$SELECT($GET(DFLT)=2:"Drug",$GET(DFLT)=3:"Drug Class",1:"ALL")
- +2 SET DIR(0)="S^D:Drug;C:Drug Class;A:ALL"
- +3 SET DIR("A")="Display Specific (D)rug or Drug (C)lass or (A)LL"
- SET DIR("B")=DFLT
- +4 DO ^DIR
- +5 IF ($GET(DUOUT)=1)!($GET(DTOUT)=1)
- SET Y="^"
- +6 SET Y=$SELECT(Y="A":1,Y="D":2,Y="C":3,1:Y)
- +7 QUIT Y
- +8 ;
- +9 ; Select Drug
- +10 ;
- +11 ; Input Variable -> none
- +12 ;
- +13 ; Return Value -> ptr = pointer to DRUG file (#50)
- +14 ; ^ = Exit
- +15 ;
- SELDRG() NEW DIC,DIRUT,DUOUT,X,Y
- +1 ;
- +2 ;Prompt for entry
- +3 WRITE !
- DO SELDRG^BPSRPT6
- +4 ;
- +5 ;Check for "^", timeout, or blank entry
- +6 IF ($GET(DUOUT)=1)!($GET(DTOUT)=1)
- SET Y="^"
- +7 ;
- +8 ;Check for Valid Entry
- +9 IF +Y>0
- SET Y=+Y
- +10 ;
- +11 QUIT Y
- +12 ;
- +13 ; Select Drug Class
- +14 ;
- +15 ; Input Variable -> none
- +16 ;
- +17 ; Return Value -> ptr = pointer to VA DRUG CLASS file (#50.605)
- +18 ; ^ = Exit
- +19 ;
- SELDRGCL() NEW DIC,DIRUT,DUOUT,Y
- +1 ;
- +2 ;Prompt for entry
- +3 ;Using DIC^PSNDI per ICR 4554 - BPS*1*14 ticket 313337
- +4 SET DIC="50.605"
- SET DIC(0)="QEAMZ"
- DO DIC^PSNDI(DIC,"BPS",.DIC,,,)
- +5 ;
- +6 ;call returns DRUG CLASS CODE, need to extract DRUG CLASSIFICATION
- +7 IF +$GET(Y)>0
- SET Y=$PIECE($GET(Y(0)),"^",2)
- IF $GET(Y)=""
- SET Y=-1
- +8 ;
- +9 ;If nothing was returned set Y="-1" so report knows
- +10 IF $GET(Y)=-1
- SET Y="^"
- +11 ;
- +12 QUIT Y
- +13 ;
- +14 ; Enter Date Range
- +15 ;
- +16 ; Input Variable -> TYPE = 7 CLOSE REPORT
- +17 ; 1-6 OTHER REPORTS
- +18 ;
- +19 ; Return Value -> P1^P2
- +20 ;
- +21 ; where P1 = From Date
- +22 ; = ^ Exit
- +23 ; P2 = To Date
- +24 ; = blank for Exit
- +25 ;
- SELDATE(TYPE) NEW BPSIBDT,DIR,DIRUT,DTOUT,DUOUT,VAL,X,Y
- +1 SET TYPE=$SELECT($GET(TYPE)=7:"CLOSE",1:"TRANSACTION")
- SELDATE1 SET VAL=""
- SET DIR(0)="DA^:DT:EX"
- SET DIR("A")="START WITH "_TYPE_" DATE: "
- SET DIR("B")="T-1"
- +1 WRITE !
- DO ^DIR
- +2 ;
- +3 ;Check for "^", timeout, or blank entry
- +4 IF ($GET(DUOUT)=1)!($GET(DTOUT)=1)!($GET(X)="")
- SET VAL="^"
- +5 ;
- +6 IF VAL=""
- Begin DoDot:1
- +7 SET $PIECE(VAL,U)=Y
- +8 SET DIR(0)="DA^"_VAL_":DT:EX"
- SET DIR("A")=" GO TO "_TYPE_" DATE: "
- SET DIR("B")="T"
- +9 DO ^DIR
- +10 ;
- +11 ;Check for "^", timeout, or blank entry
- +12 IF ($GET(DUOUT)=1)!($GET(DTOUT)=1)!($GET(X)="")
- SET VAL="^"
- QUIT
- +13 ;
- +14 ;Define Entry
- +15 SET $PIECE(VAL,U,2)=Y
- End DoDot:1
- +16 ;
- +17 QUIT VAL
- +18 ;
- +19 ; Select to Include Open or Closed or All claims
- +20 ;
- +21 ; Input Variable -> DFLT = 0 = All
- +22 ; 1 = Closed
- +23 ; 2 = Open
- +24 ;
- +25 ; Return Value -> 0 = All, 1 = Closed, 2 = Open
- SELOPCL(DFLT) NEW DIC,DIR,DIRUT,DUOUT,X,Y
- +1 ;
- +2 SET DFLT=$SELECT($GET(DFLT)=1:"C",$GET(DFLT)=2:"O",1:"A")
- +3 SET DIR(0)="S^O:OPEN;C:CLOSED;A:ALL"
- +4 SET DIR("A")="Include (O)pen, (C)losed, or (A)ll Claims"
- SET DIR("B")=DFLT
- +5 DO ^DIR
- +6 IF ($GET(DUOUT)=1)!($GET(DTOUT)=1)
- SET Y="^"
- +7 ;
- +8 SET Y=$SELECT(Y="C":1,Y="O":2,1:0)
- +9 QUIT Y
- +10 ;
- SELELIG1() ;
- +1 ; Select multiple Eligibilities
- +2 ;
- +3 ; Input Variable -> none
- +4 ; Return Value -> 0: All, 1: Selected Eligibilities; '^' = Exit
- +5 ;
- +6 ; Output Variable -> BPELIG1 = 1 - One or More Eligibilities Selected
- +7 ; = 0 - User Entered 'ALL'
- +8 ; = "^" - User quit
- +9 ;
- +10 ; If BPELIG1 = 1 then the BPELIG1 array will be defined where:
- +11 ; BPELIG1("C")="CHAMPVA"
- +12 ; BPELIG1("T")="TRICARE"
- +13 ; BPELIG1("V")="VETERAN"
- +14 ;
- +15 ;
- BPSELIG1 ;
- +1 ;Reset BPELIG1 array
- +2 KILL BPELIG1
- +3 NEW DIR,DTOUT,DUOUT,DIRUT,DIROUT,X,Y,P
- +4 NEW BPSVTC,BPSERR,BPSVTCSTR,BPSSEL,BPSX
- +5 ;
- +6 SET BPSVTCSTR=",V,T,C,A,"
- +7 SET DIR(0)="FO^0:7"
- +8 SET DIR("A",1)=""
- +9 SET DIR("A",2)="Select one or more of the following:"
- +10 SET DIR("A",3)=""
- +11 SET DIR("A",4)=" V VETERAN"
- +12 SET DIR("A",5)=" T TRICARE"
- +13 SET DIR("A",6)=" C CHAMPVA"
- +14 SET DIR("A",7)=" A ALL"
- +15 SET DIR("A",8)=""
- +16 SET DIR("A")="Display (V)ETERAN or (T)RICARE or (C)HAMPVA or (A)LL"
- +17 SET DIR("B")="A"
- if $GET(BPARR("ELIG"))'=""
- SET DIR("B")=BPARR("ELIG")
- +18 SET DIR("?",1)="Enter a single response or multiple responses separated by commas."
- +19 SET DIR("?",2)=" Example:"
- +20 SET DIR("?",3)=" T"
- +21 SET DIR("?")=" T,C"
- +22 DO ^DIR
- KILL DIR
- +23 IF ($GET(DUOUT)=1)!($GET(DTOUT)=1)!($DATA(DIRUT))
- QUIT "^"
- +24 ;
- +25 ;Convert any lower case to upper case
+26 SET X=$TRANSLATE(X,BPSLC,BPSUC)
+27 ;
+28 ;If 'A' was one of the selections, reset X to include all available selections.
+29 IF X[","
IF X["A"
SET X="V,T,C"
+30 ;
+31 ; Loop through user input (returned in variable X).
+32 ; Display warning message if any user input selection is not included
+33 ; in the string of acceptable codes (BPSVTCSTR) and re-prompt question.
+34 ; Assign valid selections to BPSVTC array. This array will prevent
+35 ; duplicate entries from being saved to the user's profile.
+36 ;
+37 KILL BPSVTC
+38 SET BPSERR=""
+39 FOR BPSX=1:1:$LENGTH(X,",")
Begin DoDot:1
+40 SET BPSSEL=$PIECE(X,",",BPSX)
+41 IF BPSVTCSTR'[(","_BPSSEL_",")
WRITE !," ",BPSSEL," is not a valid entry."
SET BPSERR=1
QUIT
+42 ; if All was selected don't include in array
+43 IF BPSSEL'="A"
SET BPELIG1(BPSSEL)=$SELECT(BPSSEL="V":"VETERAN",BPSSEL="T":"TRICARE",BPSSEL="C":"CHAMPVA",1:"")
End DoDot:1
+44 ;
+45 IF $GET(BPSERR)=1
GOTO BPSELIG1
+46 ;
+47 ; ALL was selected
+48 IF X="A"
SET BPELIG1=0
+49 ;
IF '$TEST
Begin DoDot:1
+50 ;User selected one or more eligibilities
+51 SET BPELIG1=1
+52 ;
+53 ; Display the user selections
+54 ;
+55 SET BPSSEL=""
+56 FOR
SET BPSSEL=$ORDER(BPELIG1(BPSSEL))
if BPSSEL=""
QUIT
WRITE !,?10,BPELIG1(BPSSEL)
End DoDot:1
+57 ;
+58 QUIT BPELIG1
+59 ;
SELALRC() ;
+1 ; Display Most (R)ecent or (A)ll
+2 ;
+3 ; Return Value -> A: All
+4 ; R: Most Recent
+5 ; ^: Exit
+6 ;
+7 NEW DIR,X,Y,DIRUT,DTOUT,DUOUT,DIROUT
+8 ;
+9 SET DIR(0)="S^R:Most Recent;A:ALL"
+10 SET DIR("A")="Select Most (R)ecent or (A)ll"
+11 SET DIR("B")="MOST RECENT"
+12 SET DIR("L",1)="Select one of the following:"
+13 SET DIR("L",2)=""
+14 SET DIR("L",3)=" R Most Recent Transaction Only"
+15 SET DIR("L",4)=" A ALL Transactions (will list the Rx/Fill each time resubmitted)"
+16 DO ^DIR
KILL DIR
+17 ;
+18 ;Check for "^" or timeout,
+19 IF ($GET(DUOUT)=1)!($GET(DTOUT)=1)
SET Y="^"
+20 QUIT Y
+21 ;
SELNBSTS() ;
+1 ; Select the Non-Billable Status Reason
+2 ;
+3 ; Input Variable -> None
+4 ; Return Value -> 0: All, 1: Selected Non-Billable Status; '^' = Exit
+5 ;
+6 ; Output Variable -> BPNBSTS = 1 - One or More Non-Billable Statuses Selected
+7 ; = 0 - User Entered 'ALL'
+8 ; = "" - User quit
+9 ;
+10 ; If BPNBSTS = 1 then the BPNBSTS array will be defined where:
+11 ; BPNBSTS(Non-Billable Status IEN)=Non-Billable Status Reason
+12 ;
+13 ;Reset BPNBSTS array
+14 KILL BPNBSTS
+15 NEW DIR,DTOUT,DUOUT,DIRUT,DIROUT,X,Y,P,DIC
+16 ;
+17 ;First see if they want to enter individual eligibilities or ALL
+18 SET DIR(0)="S^S:NON-BILLABLE STATUS;A:ALL"
+19 SET DIR("A")="Select Certain Non-Billable (S)tatus or (A)ll"
+20 SET DIR("B")="ALL"
+21 SET DIR("L",1)="Select one of the following:"
+22 SET DIR("L",2)=""
+23 SET DIR("L",3)=" S NON-BILLABLE STATUS"
+24 SET DIR("L",4)=" A ALL"
+25 DO ^DIR
KILL DIR
+26 ;
+27 ;Check for "^" or timeout, otherwise define BPNBSTS
+28 IF ($GET(DUOUT)=1)!($GET(DTOUT)=1)
SET Y="^"
+29 SET BPNBSTS=$SELECT(Y="A":0,Y="^":"^",1:1)
+30 IF BPNBSTS'=1
QUIT BPNBSTS
+31 ;
+32 ;Allow user to select multiple non-billable statuses
+33 FOR
Begin DoDot:1
+34 ;Prompt for entry - ICR 6136
+35 KILL X
+36 SET DIC(0)="QEAM"
SET DIC=366.17
SET DIC("A")="Select Non-Billable Reason: "
+37 WRITE !
DO ^DIC
+38 IF ($GET(DUOUT)=1)!($GET(DTOUT)=1)
SET Y="^"
QUIT
+39 ;
+40 ;Check for blank entry, quit if no previous selections
+41 IF $GET(Y)=-1
SET Y=$SELECT($DATA(BPNBSTS)>9:"",1:"^")
QUIT
+42 ;
+43 ; Add entry to array or handle duplicate entries
+44 IF '$DATA(BPNBSTS($PIECE(Y,U,1)))
SET BPNBSTS($PIECE(Y,U,1))=$PIECE(Y,U,2)
SET BPNBSTS("B",$PIECE(Y,U,2),$PIECE(Y,U,1))=""
+45 IF '$TEST
Begin DoDot:2
+46 ;Already in the array, so ask whether to delete
+47 NEW P
+48 ;Save Original Value
SET P=Y
+49 SET DIR(0)="S^Y:YES;N:NO"
SET DIR("A")="Delete "_$PIECE(P,U,2)_" from your list?"
+50 SET DIR("B")="NO"
+51 DO ^DIR
+52 IF ($GET(DUOUT)=1)!($GET(DTOUT)=1)
SET Y="^"
QUIT
+53 IF Y="Y"
KILL BPNBSTS($PIECE(P,U,1)),BPNBSTS("B",$PIECE(P,U,2),$PIECE(P,U,1))
+54 ;Restore Original Value
SET Y=P
+55 KILL P
End DoDot:2
IF Y="^"
QUIT
+56 ;
+57 ;Display a list of selected values
+58 IF $DATA(BPNBSTS)>9
Begin DoDot:2
+59 NEW X
+60 WRITE !,?2,"Selected:"
+61 SET X=""
FOR
SET X=$ORDER(BPNBSTS("B",X))
if X=""
QUIT
WRITE !,?10,X
+62 KILL X
End DoDot:2
+63 QUIT
End DoDot:1
if Y="^"!(Y="")
QUIT
+64 ;
+65 ; Reset BPNBSTS array if user exited
+66 IF Y="^"
KILL BPNBSTS
SET BPNBSTS="^"
QUIT "^"
+67 ;
+68 ; Deleted 'x-ref' as we don't need to return that
+69 KILL BPNBSTS("B")
+70 ;
+71 QUIT 1
+72 ;