IBTRHRC ;ALB/JWS - CLAIMS TRACKING 278 CERTIFICATION REPORT ;24-AUG-2015
;;2.0;INTEGRATED BILLING;**517**;21-MAR-94;Build 240
;;Per VA Directive 6402, this routine should not be modified.
;
% ;
;
; FILTERS array is built
; FILTERS(0)[1] = 1 if report by Payer (Insurance)
; 2 if report by Staff
; 3 if report by Patient
; 4 if report by Date
; FILTERS(0)[2] = 0 (or null) if All Payer's, 1 if selected payers
; FILTERS(0)[3] = 0 (or null) if All staff, 1 if selected staff
; FILTERS(0)[4] = 0 (or null) if All Patients, 1 if selected patients
; FILTERS(0)[5] = 0 (No) to display decision reason code, 1 (Yes)
; FILTERS(0)[6] = sort, 1 = name, 2 = date
; FILTERS(0)[7] = 0 (No) to total by Date, 1 (Yes)
; FILTERS(1,payer name) = ien
; FILTERS(2,staff name) = ien
; FILTERS(3,patient name) = ien
; FILTERS(4)[1] = from date
; FILTERS(4)[2] = through date
N DIR,DIROUT,DIRUT,DTOUT,DUOUT,X,Y,RPTDATE,IBQUIT,FILTERS,OK
I '$D(DT) D DT^DICRW
W !!,"278 Certification Report"
; selection filter
S DIR(0)="S^1:Report by Payer;2:Report by Staff;3:Report by Patient;4:Report by Date Range^I '$F("",1,2,3,4"",X) K X"
S DIR("A")="Select the type of report to generate"
S DIR("L",1)="Select one of the following:"
S DIR("L",2)=""
S DIR("L",3)="1 Report by Payer"
S DIR("L",4)="2 Report by Staff"
S DIR("L",5)="3 Report by Patient"
S DIR("L",6)="4 Report by Date Range"
S DIR("?",1)="Select how you wish to select the entries to display on the report."
S DIR("?",2)=""
S DIR("?",3)="1 will allow you to select one or more Payers to report on."
S DIR("?",4)="2 will allow you to select one or more Staff members to report on."
S DIR("?",5)="3 will allow you to select one or more Patients to report on."
S DIR("?")="4 will allow you to select a Date Range of 278 transactions to report on."
W ! D ^DIR K DIR
I $G(DIRUT) Q
S FILTERS(0)=Y
I Y=1 D PAY G 1
I Y=2 D STAFF G 1
I Y=4 G 1
I Y=3 D PAT
;
1 ;
S RPTDATE=$$FMDATES("") I RPTDATE="" Q
S FILTERS(4)=RPTDATE
S DIR(0)="Y",DIR("A")="Include Autho/Review Decision Code",DIR("B")="NO"
S DIR("?",1)=" Enter: 'Y' - to include Authorization/Review Decision Reason Codes on report."
S DIR("?",2)=" 'N' - to exclude Authorization/Review Decision Reason Codes on report."
S DIR("?")=" '^' - to exit this report."
D ^DIR K DIR
I $G(DIRUT) Q
S $P(FILTERS(0),"^",5)=+Y
I $P(FILTERS(0),"^")=4 S $P(FILTERS(0),"^",6)=2 G 4
S DIR(0)="Y",DIR("A")="Total by Date",DIR("B")="NO"
S DIR("?",1)=" Enter: 'Y' - to include totals for each date on report."
S DIR("?",2)=" 'N' - to NOT include totals for each date on report."
S DIR("?")=" '^' - to exit this report."
D ^DIR K DIR
I $G(DIRUT) Q
S $P(FILTERS(0),"^",7)=+Y
I 'Y S $P(FILTERS(0),"^",6)=1 G 4
I $P(FILTERS(0),"^")=2 G 2
I $P(FILTERS(0),"^")=3 G 3
S OK=1
S X=$O(FILTERS(1,"")) I X,$O(FILTERS(1,X))="" S OK=0,$P(FILTERS(0),"^",6)=2
I OK D I $G(DIRUT) Q
. S DIR(0)="S^1:Payer Name;2:Date^I '$F("",1,2"",X) K X"
. S DIR("A")="Select the Primary Sort"
. S DIR("L",1)="Select one of the following:"
. S DIR("L",2)=""
. S DIR("L",3)="1 Payer Name"
. S DIR("L",4)="2 Date"
. S DIR("?",1)="Select how you wish to sort the entries on this report."
. S DIR("?",2)=""
. S DIR("?",3)="1 will sort the entries by Payer Name."
. S DIR("?")="2 will sort the entries by 278 Transaction Date."
. W ! D ^DIR K DIR
. I $G(DIRUT) Q
. S $P(FILTERS(0),"^",6)=Y
. Q
G 4
;
2 ;
S OK=1,X=$P(FILTERS(0),"^",3)
I X S X=$O(FILTERS(2,"")) I X,$O(FILTERS(2,X))="" S OK=0,$P(FILTERS(0),"^",6)=2
I OK D I $G(DIRUT) Q
. S DIR(0)="S^1:Staff Name;2:Date^I '$F("",1,2"",X) K X"
. S DIR("A")="Select the Primary Sort"
. S DIR("L",1)="Select one of the following:"
. S DIR("L",2)=""
. S DIR("L",3)="1 Staff Name"
. S DIR("L",4)="2 Date"
. S DIR("?",1)="Select how you wish to sort the entries on this report."
. S DIR("?",2)=""
. S DIR("?",3)="1 will sort the entries by Staff Name."
. S DIR("?")="2 will sort the entries by 278 Transaction Date."
. W ! D ^DIR K DIR
. I $G(DIRUT) Q
. S $P(FILTERS(0),"^",6)=Y
. Q
G 4
;
3 ;
S OK=1,X=$P(FILTERS(0),"^",4)
I X S X=$O(FILTERS(3,"")) I X,$O(FILTERS(3,X))="" S OK=0,$P(FILTERS(0),"^",6)=2
I OK D I $G(DIRUT) Q
. S DIR(0)="S^1:Patient Name;2:Date^I '$F("",1,2"",X) K X"
. S DIR("A")="Select the Primary Sort"
. S DIR("L",1)="Select one of the following:"
. S DIR("L",2)=""
. S DIR("L",3)="1 Patient Name"
. S DIR("L",4)="2 Date"
. S DIR("?",1)="Select how you wish to sort the entries on this report."
. S DIR("?",2)=""
. S DIR("?",3)="1 will sort the entries by Patient Name."
. S DIR("?")="2 will sort the entries by 278 Transaction Date."
. W ! D ^DIR K DIR
. I $G(DIRUT) Q
. S $P(FILTERS(0),"^",6)=Y
. Q
4 ;
D DEV
Q
;
PAY ; Payer filter
N DIR,DIROUT,DIRUT,DTOUT,DUOUT,X,Y
S DIR(0)="S",DIR("A")="Select(A)ll or (S)elected Payer(s)",DIR("B")="All"
S DIR("?",1)="Enter 'A' to select all Payers."
S DIR("?")="Enter 'S' to select specific Payers."
S $P(DIR(0),"^",2)="A:All Payers;S:Selected Payers"
W ! D ^DIR K DIR
I $G(DIRUT) Q 0
S X=$$UP^XLFSTR(X)
S $P(FILTERS(0),"^",2)=$S(Y="A":0,1:1)
; Set Payer
I $P(FILTERS(0),"^",2)=1 D ASKPAY(.FILTERS)
Q
;
STAFF ; Staff ( New Person file) filter
N DIR,DIROUT,DIRUT,DTOUT,DUOUT,X,Y
S DIR(0)="S",DIR("A")="Select(A)ll or (S)elected Staff",DIR("B")="All"
S DIR("?",1)="Enter 'A' to select all Staff Members."
S DIR("?")="Enter 'S' to select specific Staff Members."
S $P(DIR(0),"^",2)="A:All Staff Members;S:Selected Staff Members"
W ! D ^DIR K DIR
I $G(DIRUT) Q 0
S X=$$UP^XLFSTR(X)
S $P(FILTERS(0),"^",3)=$S(Y="A":0,1:1)
; Set staff
I $P(FILTERS(0),"^",3)=1 D ASKSTAFF(.FILTERS)
Q
;
PAT ; Patient filter
N DIR,DIROUT,DIRUT,DTOUT,DUOUT,X,Y
S DIR(0)="S",DIR("A")="Select(A)ll or (S)elected Patient(s)",DIR("B")="All"
S DIR("?",1)="Enter 'A' to select all Patients."
S DIR("?")="Enter 'S' to select specific Patients."
S $P(DIR(0),"^",2)="A:All Patients;S:Selected Patients"
W ! D ^DIR K DIR
I $G(DIRUT) Q 0
S X=$$UP^XLFSTR(X)
S $P(FILTERS(0),"^",4)=$S(Y="A":0,1:1)
; Set Patient
I $P(FILTERS(0),"^",4)=1 D ASKPAT(.FILTERS)
Q
;
DEV ; -- select device, run option
W !!,"You will need a 132 column printer for this report!",!
S %ZIS="QM" D ^%ZIS G:POP END
I $D(IO("Q")) S ZTRTN="DQ^IBTRHRC",ZTSAVE("IB*")="",ZTDESC="IB - 278 Certification Report" D ^%ZTLOAD K IO("Q"),ZTSK D HOME^%ZIS G END
U IO
S X=132 X ^%ZOSF("RM")
DQ D PRINT G END
Q
;
END ; -- Clean up
I $D(ZTQUEUED) S ZTREQ="@" Q
D ^%ZISC
K I,J,X,Y,DFN,%ZIS,VA,IBTRN,IBTRND,IBPAG,IBHDT,IBDT,IBBDT,IBEDT,IBQUIT
Q
;
PRINT ; -- print one billing report from ct
W !,"Compiling report data..."
N SDT,EDT,IEN,NODE0,PATIEN,INSIEN,IBQUIT,IBPAG,CERT,AUTH,AUTH2,PATINS,STAFF,XREQ
S IBHDT=$$HTE^XLFDT($H,1),IBQUIT=0,IBPAG=0
K ^TMP($J)
S SDT=$P(FILTERS(4),"^"),EDT=$P(FILTERS(4),"^",2)
F S SDT=$O(^IBT(356.22,"AC",SDT)) Q:SDT="" Q:$P(SDT,".")>EDT D
. S IEN=0 F S IEN=$O(^IBT(356.22,"AC",SDT,IEN)) Q:IEN="" Q:$G(IBQUIT) D
.. S NODE0=$G(^IBT(356.22,IEN,0)) I NODE0'="" D
... I $P(NODE0,"^",20)'=2 Q ;response message
... S PATIEN=$P(NODE0,"^",2),INSIEN=$P(NODE0,"^",3)
... I PATIEN="" Q
... I INSIEN="" Q
... S PATINS=$P($G(^DPT(PATIEN,.312,INSIEN,0)),"^") I PATINS="" Q
... S OK=1
... I $P(FILTERS(0),"^")=1 D I 'OK Q
.... I $P(FILTERS(0),"^",2) D I 'OK Q
..... I '$D(FILTERS(1,PATINS)) S OK=0 Q
..... Q
.... Q
... I $P(FILTERS(0),"^")=2 D I 'OK Q
.... S XREQ=$P(NODE0,"^",13) I XREQ="" S OK=0 Q
.... S STAFF=$P($G(^IBT(356.22,XREQ,0)),"^",11) I STAFF="" S OK=0 Q
.... I $P(FILTERS(0),"^",3) D I 'OK Q
..... I '$D(FILTERS(2,STAFF)) S OK=0 Q
..... Q
.... Q
... I $P(FILTERS(0),"^")=3 D I 'OK Q
.... I $P(FILTERS(0),"^",4) D I 'OK Q
..... I '$D(FILTERS(3,PATIEN)) S OK=0 Q
..... Q
.... Q
... S CERT=$P($G(^IBT(356.22,IEN,103)),"^")
... S AUTH=$P($G(^IBT(356.22,IEN,103)),"^",3),AUTH2=$P($G(^(103)),"^",2)
... I CERT D SET
.. Q
. Q
;
PR ;
D HDR
I '$D(^TMP($J,"IBTRHRC")) W !!,"No 278 Transactions found in date range.",! G PR1
N Z1,Z2,Z3,TOT1,TOT2,TOT3,TOT4,TOT5,TOT6,TOT7,TOT8,TOT9,DATA,DDATA
N GTOT1,GTOT2,GTOT3,GTOT4,GTOT5,GTOT6,GTOT7,GTOT8,GTOT9,D1,D2,TAB,TOT
S (Z1,Z2)=""
F S Z1=$O(^TMP($J,"IBTRHRC",Z1)) Q:Z1=""!($G(IBQUIT)) D Q:IBQUIT
. S Z2="" F S Z2=$O(^TMP($J,"IBTRHRC",Z1,Z2)) Q:Z2=""!($G(IBQUIT)) S DATA=$G(^(Z2)) I DATA'="" D
.. I ($Y+5)>IOSL D HDR Q:IBQUIT
.. I $P(FILTERS(0),"^",6)=1 W !,Z1 I $P(FILTERS(0),"^",7),$P(FILTERS(0),"^")'=4 W ?30,$E(Z2,4,5),"/",$E(Z2,6,7),"/",$S($E(Z2)=3:20,1:19),$E(Z2,2,3)
.. I $P(FILTERS(0),"^",6)=2 D
... I $P(FILTERS(0),"^")=4 W !,$E(Z1,4,5),"/",$E(Z1,6,7),"/",$S($E(Z1)=3:20,1:19),$E(Z1,2,3) Q
... W !,Z2,?30,$E(Z1,4,5),"/",$E(Z1,6,7),"/",$S($E(Z1)=3:20,1:19),$E(Z1,2,3)
.. W ?49,$J($P(DATA,"^"),3),?57,$J($P(DATA,"^",2),3)
.. W ?67,$J($P(DATA,"^",3),3),?77,$J($P(DATA,"^",4),3),?87,$J($P(DATA,"^",5),3),?97,$J($P(DATA,"^",6),3)
.. W ?107,$J($P(DATA,"^",7),3),?117,$J($P(DATA,"^",8),3),?126,$J($P(DATA,"^",9),4)
.. I $P(FILTERS(0),"^",5),$O(^TMP($J,"IBTRHRC",Z1,Z2,""))'="" D
... W !?48,"Detail Autho/Review Decision Code:",?93,"----"
... S Z3="" F S Z3=$O(^TMP($J,"IBTRHRC",Z1,Z2,1,Z3)) Q:Z3="" S DDATA=$G(^(Z3)) I DDATA D
.... S D1=$$GET1^DIQ(356.021,Z3_",",.01)
.... S D2=$$GET1^DIQ(356.021,Z3_",",.02)
.... W !?48,D1,"-",D2,?95,DDATA
... S Z3="" F S Z3=$O(^TMP($J,"IBTRHRC",Z1,Z2,2,Z3)) Q:Z3="" S DDATA=$G(^(Z3)) I DDATA D
.... W !?48,Z3,?95,DDATA
.... Q
.. S TOT1=$G(TOT1)+$P(DATA,"^"),TOT2=$G(TOT2)+$P(DATA,"^",2)
.. S TOT3=$G(TOT3)+$P(DATA,"^",3),TOT4=$G(TOT4)+$P(DATA,"^",4)
.. S TOT5=$G(TOT5)+$P(DATA,"^",5),TOT6=$G(TOT6)+$P(DATA,"^",6)
.. S TOT7=$G(TOT7)+$P(DATA,"^",7),TOT8=$G(TOT8)+$P(DATA,"^",8)
.. S TOT9=$G(TOT9)+$P(DATA,"^",9)
. I +$P(FILTERS(0),"^",7) D
.. ;N CHK S CHK=$O(FILTERS(1,"")) I CHK'="",$O(FILTERS(1,CHK))="" Q
.. ;S CHK=$O(FILTERS(2,"")) I CHK'="",$O(FILTERS(2,CHK))="" Q
.. ;S CHK=$O(FILTERS(3,"")) I CHK'="",$O(FILTERS(2,CHK))="" Q
.. W !?48,$TR($J(" ",84)," ","-")
.. W !," Total"
.. W ?48,$J(TOT1,4)
.. F I=2:1:8 S TAB=36+(10*I),TAB="?"_TAB,TOT="TOT"_I W @TAB,$J(@TOT,4)
.. W ?126,$J(TOT9,4)
.. W !?29,$TR($J(" ",103)," ","-")
. S GTOT1=$G(GTOT1)+$G(TOT1),GTOT2=$G(GTOT2)+$G(TOT2)
. S GTOT3=$G(GTOT3)+$G(TOT3),GTOT4=$G(GTOT4)+$G(TOT4)
. S GTOT5=$G(GTOT5)+$G(TOT5),GTOT6=$G(GTOT6)+$G(TOT6)
. S GTOT7=$G(GTOT7)+$G(TOT7),GTOT8=$G(GTOT8)+$G(TOT8)
. S GTOT9=$G(GTOT9)+$G(TOT9)
. S (TOT1,TOT2,TOT3,TOT4,TOT5,TOT6,TOT7,TOT8,TOT9)=""
. Q
I '+$P(FILTERS(0),"^",7) W !?29,$TR($J(" ",103)," ","-")
W !,"Grand Total"
W ?48,$J(GTOT1,4)
F I=2:1:9 S TAB=36+(10*I),TAB="?"_TAB,TOT="GTOT"_I W @TAB,$J(@TOT,4)
W !?29,$TR($J(" ",103)," ","=")
W !
PR1 ;
W !?(132-$L("*** END OF REPORT ***")\2),"*** END OF REPORT ***"
I $D(ZTQUEUED) G END
Q
;
HDR ; -- Print header for billing report
Q:IBQUIT
I $E(IOST,1,2)="C-",IBPAG D PAUSE^VALM1 I $D(DIRUT) S IBQUIT=1 Q
I $E(IOST,1,2)="C-"!(IBPAG) W @IOF
S IBPAG=IBPAG+1
W !," 278 Certification Report",?55,IBHDT,?125,"Page: ",IBPAG
W !," Sort by: ",$S($P(FILTERS(0),"^",6)=1:$S($P(FILTERS(0),"^")=1:"Payer",$P(FILTERS(0),"^")=2:"Staff",1:"Patient"),1:"Date"),?116,"Detail: ",$S($P(FILTERS(0),"^",7)=1:"Included",1:"Excluded")
W !?55,"Report Timeframe:"
S SDT=$P(FILTERS(4),"^"),EDT=$P(FILTERS(4),"^",2)
W !?52,$E(SDT,4,5),"/",$E(SDT,6,7),"/",$S($E(SDT)=3:20,1:19),$E(SDT,2,3)
W " - ",$E(EDT,4,5),"/",$E(EDT,6,7),"/",$S($E(EDT)=3:20,1:19),$E(EDT,2,3)
I $P(FILTERS(0),"^")=1 W !?55,$S($P(FILTERS(0),"^",2)=1:"Selected",1:"All")," Payer(s)"
I $P(FILTERS(0),"^")=2 W !?55,$S($P(FILTERS(0),"^",3)=1:"Selected",1:"All")," Staff"
I $P(FILTERS(0),"^")=3 W !?55,$S($P(FILTERS(0),"^",4)=1:"Selected",1:"All")," Patient(s)"
I $P(FILTERS(0),"^")=4 W !?55,"Selected Dates"
W !
W !,$S($P(FILTERS(0),"^")=1:"Payer",$P(FILTERS(0),"^")=2:"Staff",$P(FILTERS(0),"^")=3:"Patient",1:"Date")
W ?30
I $P(FILTERS(0),"^",7),$P(FILTERS(0),"^")'=4 W "Date"
W ?48,"#278s",?58,"#A1",?68,"#A2",?78,"#A6",?88,"#A4",?98,"#A3",?108,"#C",?118,"CT",?128,"NA"
W !,$TR($J(" ",132)," ","=")
I $D(ZTQUEUED),$$S^%ZTLOAD S ZTSTOP=1,IBQUIT=1 W !!,"....task stopped at user request"
Q
;
SET ; -- set tmp array
N PIECE,ST1,ST2,INS,DATE,AUTH1,COUNT
I $P(FILTERS(0),"^")=1 D
. I $D(FILTERS(1,PATINS)) S INS=FILTERS(1,PATINS)
. E S INS=$$GET1^DIQ(36,PATINS_",",.01),FILTERS(1,PATINS)=INS
. I INS="" S INS="UNKNOWN" Q
I $P(FILTERS(0),"^")=2 D
. I $D(FILTERS(2,STAFF)) S INS=FILTERS(2,STAFF)
. E S INS=$$GET1^DIQ(200,STAFF_",",.01),FILTERS(2,STAFF)=INS
. I INS="" S INS="UNKNOWN" Q
I $P(FILTERS(0),"^")=3 D
. I $D(FILTERS(3,PATIEN)) S INS=FILTERS(3,PATIEN)
. E S INS=$$GET1^DIQ(2,PATIEN_",",.01),FILTERS(3,PATIEN)=INS
. I INS="" S INS="UNKNOWN" Q
I $P(FILTERS(0),"^")=4 S INS=$P(SDT,".")
I $P(FILTERS(0),"^",6)=1 S ST1=INS,ST2=$P(SDT,".") I '$P(FILTERS(0),"^",7) S ST2=ST1
I $P(FILTERS(0),"^",6)=2 S ST1=$P(SDT,"."),ST2=INS
I $D(ZTQUEUED),$$S^%ZTLOAD S ZTSTOP=1,IBQUIT=1 D HDR W !!,"....task stopped at user request" Q
S COUNT=$G(^TMP($J,"IBTRHRC",ST1,ST2)),$P(COUNT,"^")=$P(COUNT,"^")+1,^(ST2)=COUNT
I CERT D
. S CERT=$$GET1^DIQ(356.02,CERT_",",.01)
. S PIECE=$S(CERT="A1":2,CERT="A2":3,CERT="A6":4,CERT="A4":5,CERT="A3":6,CERT="C":7,CERT="CT":8,1:"9")
. S $P(COUNT,"^",PIECE)=$P(COUNT,"^",PIECE)+1
. S ^TMP($J,"IBTRHRC",ST1,ST2)=COUNT
I AUTH'="" D
. S AUTH1=$$GET1^DIQ(356.021,AUTH_",",.01)
. I AUTH1="" Q
. S COUNT=$G(^TMP($J,"IBTRHRC",ST1,ST2,1,AUTH))
. S COUNT=COUNT+1
. S ^TMP($J,"IBTRHRC",ST1,ST2,1,AUTH)=COUNT
I AUTH2'="" D
. S COUNT=$G(^TMP($J,"IBTRHRC",ST1,ST2,2,AUTH2))
. S COUNT=COUNT+1
. S ^TMP($J,"IBTRHRC",ST1,ST2,2,AUTH2)=COUNT
Q
;
FMDATES(PROMPT) ; ask for date range
N %DT,X,Y,DT1,DT2,IB1,IB2
S DT1="",IB1="Start Date: ",IB2="End Date: "
I $G(PROMPT)'="" S IB1="Start with "_PROMPT_": ",IB2="Go to "_PROMPT_": "
FM1 ;
S %DT="AEX",%DT("A")=IB1 D ^%DT K %DT I Y<0!($P(Y,".",1)'?7N) G FM1E:(Y<0&(X="")),FMDQ
S (%DT(0),DT2)=$P(Y,".",1) I DT2'>DT S %DT("B")="Today"
FM2 ;
S %DT="AEX",%DT("A")=IB2 D ^%DT K %DT I Y<0!($P(Y,".",1)'?7N) G FM2E:(Y<0&(X="")),FMDQ
S DT1=DT2_"^"_$P(Y,".",1)
FMDQ ;
Q DT1
FM1E ;
W !,"A date must be entered." G FM1
FM2E ;
W !,"A date must be entered." G FM2
Q
;
ASKPAY(FILTERS) ; Sets a list of patients
; the HCSR Worklist
; Input: FILTERS - Current Array of filter settings
; Output: FILTERS - Updated Array of filter settings
N CLINS,DIC,DIR,DIRUT,DIVS,DUOUT,IBIENS,IEN,N,NM,NODE,WARDS,X,XX,Y
S DIC=36,DIC(0)="AEM"
F D Q:+IEN<1
. D ONE(.DIC,.IEN) ; One patient
. Q:+IEN<1
. S FILTERS(1,$P(IEN,"^"))=$P(IEN,"^",2)
Q
;
ASKSTAFF(FILTERS) ; Sets a list of staff
; Input: FILTERS - Current Array of filter settings
; Output: FILTERS - Updated Array of filter settings
N DIC,DIR,DIRUT,DIVS,DUOUT,IBIENS,IEN,N,NM,NODE,X,XX,Y
S DIC=200,DIC(0)="AEM"
F D Q:+IEN<1
. D ONE(.DIC,.IEN)
. Q:+IEN<1
. S FILTERS(2,$P(IEN,"^"))=$P(IEN,"^",2)
Q
;
ONE(DIC,IEN) ; Prompts the user for Payer
; Input: DIC - Variable/Array of settings needed for ^DIC call
;
; Output: IEN - IEN of the selected Payer Entry
; null if no selection was made
S DIC("A")="Select "_$S(DIC=200:"Staff Member: ",DIC="^VA(200,":"Staff Member: ",DIC=2:"Patient: ",DIC="^DPT(":"Patient: ",1:"Payer: ")
D ^DIC
S IEN=Y
Q
;
ASKPAT(FILTERS) ; Sets a list of Patients
; Input: FILTERS - Current Array of filter settings
; Output: FILTERS - Updated Array of filter settings
N DIC,DIR,DIRUT,DIVS,DUOUT,IBIENS,IEN,N,NM,NODE,X,XX,Y
S DIC=2,DIC(0)="AEM"
F D Q:+IEN<1
. D ONE(.DIC,.IEN)
. Q:+IEN<1
. S FILTERS(3,$P(IEN,"^"))=$P(IEN,"^",2)
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HIBTRHRC 16163 printed Dec 13, 2024@02:28:32 Page 2
IBTRHRC ;ALB/JWS - CLAIMS TRACKING 278 CERTIFICATION REPORT ;24-AUG-2015
+1 ;;2.0;INTEGRATED BILLING;**517**;21-MAR-94;Build 240
+2 ;;Per VA Directive 6402, this routine should not be modified.
+3 ;
% ;
+1 ;
+2 ; FILTERS array is built
+3 ; FILTERS(0)[1] = 1 if report by Payer (Insurance)
+4 ; 2 if report by Staff
+5 ; 3 if report by Patient
+6 ; 4 if report by Date
+7 ; FILTERS(0)[2] = 0 (or null) if All Payer's, 1 if selected payers
+8 ; FILTERS(0)[3] = 0 (or null) if All staff, 1 if selected staff
+9 ; FILTERS(0)[4] = 0 (or null) if All Patients, 1 if selected patients
+10 ; FILTERS(0)[5] = 0 (No) to display decision reason code, 1 (Yes)
+11 ; FILTERS(0)[6] = sort, 1 = name, 2 = date
+12 ; FILTERS(0)[7] = 0 (No) to total by Date, 1 (Yes)
+13 ; FILTERS(1,payer name) = ien
+14 ; FILTERS(2,staff name) = ien
+15 ; FILTERS(3,patient name) = ien
+16 ; FILTERS(4)[1] = from date
+17 ; FILTERS(4)[2] = through date
+18 NEW DIR,DIROUT,DIRUT,DTOUT,DUOUT,X,Y,RPTDATE,IBQUIT,FILTERS,OK
+19 IF '$DATA(DT)
DO DT^DICRW
+20 WRITE !!,"278 Certification Report"
+21 ; selection filter
+22 SET DIR(0)="S^1:Report by Payer;2:Report by Staff;3:Report by Patient;4:Report by Date Range^I '$F("",1,2,3,4"",X) K X"
+23 SET DIR("A")="Select the type of report to generate"
+24 SET DIR("L",1)="Select one of the following:"
+25 SET DIR("L",2)=""
+26 SET DIR("L",3)="1 Report by Payer"
+27 SET DIR("L",4)="2 Report by Staff"
+28 SET DIR("L",5)="3 Report by Patient"
+29 SET DIR("L",6)="4 Report by Date Range"
+30 SET DIR("?",1)="Select how you wish to select the entries to display on the report."
+31 SET DIR("?",2)=""
+32 SET DIR("?",3)="1 will allow you to select one or more Payers to report on."
+33 SET DIR("?",4)="2 will allow you to select one or more Staff members to report on."
+34 SET DIR("?",5)="3 will allow you to select one or more Patients to report on."
+35 SET DIR("?")="4 will allow you to select a Date Range of 278 transactions to report on."
+36 WRITE !
DO ^DIR
KILL DIR
+37 IF $GET(DIRUT)
QUIT
+38 SET FILTERS(0)=Y
+39 IF Y=1
DO PAY
GOTO 1
+40 IF Y=2
DO STAFF
GOTO 1
+41 IF Y=4
GOTO 1
+42 IF Y=3
DO PAT
+43 ;
1 ;
+1 SET RPTDATE=$$FMDATES("")
IF RPTDATE=""
QUIT
+2 SET FILTERS(4)=RPTDATE
+3 SET DIR(0)="Y"
SET DIR("A")="Include Autho/Review Decision Code"
SET DIR("B")="NO"
+4 SET DIR("?",1)=" Enter: 'Y' - to include Authorization/Review Decision Reason Codes on report."
+5 SET DIR("?",2)=" 'N' - to exclude Authorization/Review Decision Reason Codes on report."
+6 SET DIR("?")=" '^' - to exit this report."
+7 DO ^DIR
KILL DIR
+8 IF $GET(DIRUT)
QUIT
+9 SET $PIECE(FILTERS(0),"^",5)=+Y
+10 IF $PIECE(FILTERS(0),"^")=4
SET $PIECE(FILTERS(0),"^",6)=2
GOTO 4
+11 SET DIR(0)="Y"
SET DIR("A")="Total by Date"
SET DIR("B")="NO"
+12 SET DIR("?",1)=" Enter: 'Y' - to include totals for each date on report."
+13 SET DIR("?",2)=" 'N' - to NOT include totals for each date on report."
+14 SET DIR("?")=" '^' - to exit this report."
+15 DO ^DIR
KILL DIR
+16 IF $GET(DIRUT)
QUIT
+17 SET $PIECE(FILTERS(0),"^",7)=+Y
+18 IF 'Y
SET $PIECE(FILTERS(0),"^",6)=1
GOTO 4
+19 IF $PIECE(FILTERS(0),"^")=2
GOTO 2
+20 IF $PIECE(FILTERS(0),"^")=3
GOTO 3
+21 SET OK=1
+22 SET X=$ORDER(FILTERS(1,""))
IF X
IF $ORDER(FILTERS(1,X))=""
SET OK=0
SET $PIECE(FILTERS(0),"^",6)=2
+23 IF OK
Begin DoDot:1
+24 SET DIR(0)="S^1:Payer Name;2:Date^I '$F("",1,2"",X) K X"
+25 SET DIR("A")="Select the Primary Sort"
+26 SET DIR("L",1)="Select one of the following:"
+27 SET DIR("L",2)=""
+28 SET DIR("L",3)="1 Payer Name"
+29 SET DIR("L",4)="2 Date"
+30 SET DIR("?",1)="Select how you wish to sort the entries on this report."
+31 SET DIR("?",2)=""
+32 SET DIR("?",3)="1 will sort the entries by Payer Name."
+33 SET DIR("?")="2 will sort the entries by 278 Transaction Date."
+34 WRITE !
DO ^DIR
KILL DIR
+35 IF $GET(DIRUT)
QUIT
+36 SET $PIECE(FILTERS(0),"^",6)=Y
+37 QUIT
End DoDot:1
IF $GET(DIRUT)
QUIT
+38 GOTO 4
+39 ;
2 ;
+1 SET OK=1
SET X=$PIECE(FILTERS(0),"^",3)
+2 IF X
SET X=$ORDER(FILTERS(2,""))
IF X
IF $ORDER(FILTERS(2,X))=""
SET OK=0
SET $PIECE(FILTERS(0),"^",6)=2
+3 IF OK
Begin DoDot:1
+4 SET DIR(0)="S^1:Staff Name;2:Date^I '$F("",1,2"",X) K X"
+5 SET DIR("A")="Select the Primary Sort"
+6 SET DIR("L",1)="Select one of the following:"
+7 SET DIR("L",2)=""
+8 SET DIR("L",3)="1 Staff Name"
+9 SET DIR("L",4)="2 Date"
+10 SET DIR("?",1)="Select how you wish to sort the entries on this report."
+11 SET DIR("?",2)=""
+12 SET DIR("?",3)="1 will sort the entries by Staff Name."
+13 SET DIR("?")="2 will sort the entries by 278 Transaction Date."
+14 WRITE !
DO ^DIR
KILL DIR
+15 IF $GET(DIRUT)
QUIT
+16 SET $PIECE(FILTERS(0),"^",6)=Y
+17 QUIT
End DoDot:1
IF $GET(DIRUT)
QUIT
+18 GOTO 4
+19 ;
3 ;
+1 SET OK=1
SET X=$PIECE(FILTERS(0),"^",4)
+2 IF X
SET X=$ORDER(FILTERS(3,""))
IF X
IF $ORDER(FILTERS(3,X))=""
SET OK=0
SET $PIECE(FILTERS(0),"^",6)=2
+3 IF OK
Begin DoDot:1
+4 SET DIR(0)="S^1:Patient Name;2:Date^I '$F("",1,2"",X) K X"
+5 SET DIR("A")="Select the Primary Sort"
+6 SET DIR("L",1)="Select one of the following:"
+7 SET DIR("L",2)=""
+8 SET DIR("L",3)="1 Patient Name"
+9 SET DIR("L",4)="2 Date"
+10 SET DIR("?",1)="Select how you wish to sort the entries on this report."
+11 SET DIR("?",2)=""
+12 SET DIR("?",3)="1 will sort the entries by Patient Name."
+13 SET DIR("?")="2 will sort the entries by 278 Transaction Date."
+14 WRITE !
DO ^DIR
KILL DIR
+15 IF $GET(DIRUT)
QUIT
+16 SET $PIECE(FILTERS(0),"^",6)=Y
+17 QUIT
End DoDot:1
IF $GET(DIRUT)
QUIT
4 ;
+1 DO DEV
+2 QUIT
+3 ;
PAY ; Payer filter
+1 NEW DIR,DIROUT,DIRUT,DTOUT,DUOUT,X,Y
+2 SET DIR(0)="S"
SET DIR("A")="Select(A)ll or (S)elected Payer(s)"
SET DIR("B")="All"
+3 SET DIR("?",1)="Enter 'A' to select all Payers."
+4 SET DIR("?")="Enter 'S' to select specific Payers."
+5 SET $PIECE(DIR(0),"^",2)="A:All Payers;S:Selected Payers"
+6 WRITE !
DO ^DIR
KILL DIR
+7 IF $GET(DIRUT)
QUIT 0
+8 SET X=$$UP^XLFSTR(X)
+9 SET $PIECE(FILTERS(0),"^",2)=$SELECT(Y="A":0,1:1)
+10 ; Set Payer
+11 IF $PIECE(FILTERS(0),"^",2)=1
DO ASKPAY(.FILTERS)
+12 QUIT
+13 ;
STAFF ; Staff ( New Person file) filter
+1 NEW DIR,DIROUT,DIRUT,DTOUT,DUOUT,X,Y
+2 SET DIR(0)="S"
SET DIR("A")="Select(A)ll or (S)elected Staff"
SET DIR("B")="All"
+3 SET DIR("?",1)="Enter 'A' to select all Staff Members."
+4 SET DIR("?")="Enter 'S' to select specific Staff Members."
+5 SET $PIECE(DIR(0),"^",2)="A:All Staff Members;S:Selected Staff Members"
+6 WRITE !
DO ^DIR
KILL DIR
+7 IF $GET(DIRUT)
QUIT 0
+8 SET X=$$UP^XLFSTR(X)
+9 SET $PIECE(FILTERS(0),"^",3)=$SELECT(Y="A":0,1:1)
+10 ; Set staff
+11 IF $PIECE(FILTERS(0),"^",3)=1
DO ASKSTAFF(.FILTERS)
+12 QUIT
+13 ;
PAT ; Patient filter
+1 NEW DIR,DIROUT,DIRUT,DTOUT,DUOUT,X,Y
+2 SET DIR(0)="S"
SET DIR("A")="Select(A)ll or (S)elected Patient(s)"
SET DIR("B")="All"
+3 SET DIR("?",1)="Enter 'A' to select all Patients."
+4 SET DIR("?")="Enter 'S' to select specific Patients."
+5 SET $PIECE(DIR(0),"^",2)="A:All Patients;S:Selected Patients"
+6 WRITE !
DO ^DIR
KILL DIR
+7 IF $GET(DIRUT)
QUIT 0
+8 SET X=$$UP^XLFSTR(X)
+9 SET $PIECE(FILTERS(0),"^",4)=$SELECT(Y="A":0,1:1)
+10 ; Set Patient
+11 IF $PIECE(FILTERS(0),"^",4)=1
DO ASKPAT(.FILTERS)
+12 QUIT
+13 ;
DEV ; -- select device, run option
+1 WRITE !!,"You will need a 132 column printer for this report!",!
+2 SET %ZIS="QM"
DO ^%ZIS
if POP
GOTO END
+3 IF $DATA(IO("Q"))
SET ZTRTN="DQ^IBTRHRC"
SET ZTSAVE("IB*")=""
SET ZTDESC="IB - 278 Certification Report"
DO ^%ZTLOAD
KILL IO("Q"),ZTSK
DO HOME^%ZIS
GOTO END
+4 USE IO
+5 SET X=132
XECUTE ^%ZOSF("RM")
DQ DO PRINT
GOTO END
+1 QUIT
+2 ;
END ; -- Clean up
+1 IF $DATA(ZTQUEUED)
SET ZTREQ="@"
QUIT
+2 DO ^%ZISC
+3 KILL I,J,X,Y,DFN,%ZIS,VA,IBTRN,IBTRND,IBPAG,IBHDT,IBDT,IBBDT,IBEDT,IBQUIT
+4 QUIT
+5 ;
PRINT ; -- print one billing report from ct
+1 WRITE !,"Compiling report data..."
+2 NEW SDT,EDT,IEN,NODE0,PATIEN,INSIEN,IBQUIT,IBPAG,CERT,AUTH,AUTH2,PATINS,STAFF,XREQ
+3 SET IBHDT=$$HTE^XLFDT($HOROLOG,1)
SET IBQUIT=0
SET IBPAG=0
+4 KILL ^TMP($JOB)
+5 SET SDT=$PIECE(FILTERS(4),"^")
SET EDT=$PIECE(FILTERS(4),"^",2)
+6 FOR
SET SDT=$ORDER(^IBT(356.22,"AC",SDT))
if SDT=""
QUIT
if $PIECE(SDT,".")>EDT
QUIT
Begin DoDot:1
+7 SET IEN=0
FOR
SET IEN=$ORDER(^IBT(356.22,"AC",SDT,IEN))
if IEN=""
QUIT
if $GET(IBQUIT)
QUIT
Begin DoDot:2
+8 SET NODE0=$GET(^IBT(356.22,IEN,0))
IF NODE0'=""
Begin DoDot:3
+9 ;response message
IF $PIECE(NODE0,"^",20)'=2
QUIT
+10 SET PATIEN=$PIECE(NODE0,"^",2)
SET INSIEN=$PIECE(NODE0,"^",3)
+11 IF PATIEN=""
QUIT
+12 IF INSIEN=""
QUIT
+13 SET PATINS=$PIECE($GET(^DPT(PATIEN,.312,INSIEN,0)),"^")
IF PATINS=""
QUIT
+14 SET OK=1
+15 IF $PIECE(FILTERS(0),"^")=1
Begin DoDot:4
+16 IF $PIECE(FILTERS(0),"^",2)
Begin DoDot:5
+17 IF '$DATA(FILTERS(1,PATINS))
SET OK=0
QUIT
+18 QUIT
End DoDot:5
IF 'OK
QUIT
+19 QUIT
End DoDot:4
IF 'OK
QUIT
+20 IF $PIECE(FILTERS(0),"^")=2
Begin DoDot:4
+21 SET XREQ=$PIECE(NODE0,"^",13)
IF XREQ=""
SET OK=0
QUIT
+22 SET STAFF=$PIECE($GET(^IBT(356.22,XREQ,0)),"^",11)
IF STAFF=""
SET OK=0
QUIT
+23 IF $PIECE(FILTERS(0),"^",3)
Begin DoDot:5
+24 IF '$DATA(FILTERS(2,STAFF))
SET OK=0
QUIT
+25 QUIT
End DoDot:5
IF 'OK
QUIT
+26 QUIT
End DoDot:4
IF 'OK
QUIT
+27 IF $PIECE(FILTERS(0),"^")=3
Begin DoDot:4
+28 IF $PIECE(FILTERS(0),"^",4)
Begin DoDot:5
+29 IF '$DATA(FILTERS(3,PATIEN))
SET OK=0
QUIT
+30 QUIT
End DoDot:5
IF 'OK
QUIT
+31 QUIT
End DoDot:4
IF 'OK
QUIT
+32 SET CERT=$PIECE($GET(^IBT(356.22,IEN,103)),"^")
+33 SET AUTH=$PIECE($GET(^IBT(356.22,IEN,103)),"^",3)
SET AUTH2=$PIECE($GET(^(103)),"^",2)
+34 IF CERT
DO SET
End DoDot:3
+35 QUIT
End DoDot:2
+36 QUIT
End DoDot:1
+37 ;
PR ;
+1 DO HDR
+2 IF '$DATA(^TMP($JOB,"IBTRHRC"))
WRITE !!,"No 278 Transactions found in date range.",!
GOTO PR1
+3 NEW Z1,Z2,Z3,TOT1,TOT2,TOT3,TOT4,TOT5,TOT6,TOT7,TOT8,TOT9,DATA,DDATA
+4 NEW GTOT1,GTOT2,GTOT3,GTOT4,GTOT5,GTOT6,GTOT7,GTOT8,GTOT9,D1,D2,TAB,TOT
+5 SET (Z1,Z2)=""
+6 FOR
SET Z1=$ORDER(^TMP($JOB,"IBTRHRC",Z1))
if Z1=""!($GET(IBQUIT))
QUIT
Begin DoDot:1
+7 SET Z2=""
FOR
SET Z2=$ORDER(^TMP($JOB,"IBTRHRC",Z1,Z2))
if Z2=""!($GET(IBQUIT))
QUIT
SET DATA=$GET(^(Z2))
IF DATA'=""
Begin DoDot:2
+8 IF ($Y+5)>IOSL
DO HDR
if IBQUIT
QUIT
+9 IF $PIECE(FILTERS(0),"^",6)=1
WRITE !,Z1
IF $PIECE(FILTERS(0),"^",7)
IF $PIECE(FILTERS(0),"^")'=4
WRITE ?30,$EXTRACT(Z2,4,5),"/",$EXTRACT(Z2,6,7),"/",$SELECT($EXTRACT(Z2)=3:20,1:19),$EXTRACT(Z2,2,3)
+10 IF $PIECE(FILTERS(0),"^",6)=2
Begin DoDot:3
+11 IF $PIECE(FILTERS(0),"^")=4
WRITE !,$EXTRACT(Z1,4,5),"/",$EXTRACT(Z1,6,7),"/",$SELECT($EXTRACT(Z1)=3:20,1:19),$EXTRACT(Z1,2,3)
QUIT
+12 WRITE !,Z2,?30,$EXTRACT(Z1,4,5),"/",$EXTRACT(Z1,6,7),"/",$SELECT($EXTRACT(Z1)=3:20,1:19),$EXTRACT(Z1,2,3)
End DoDot:3
+13 WRITE ?49,$JUSTIFY($PIECE(DATA,"^"),3),?57,$JUSTIFY($PIECE(DATA,"^",2),3)
+14 WRITE ?67,$JUSTIFY($PIECE(DATA,"^",3),3),?77,$JUSTIFY($PIECE(DATA,"^",4),3),?87,$JUSTIFY($PIECE(DATA,"^",5),3),?97,$JUSTIFY($PIECE(DATA,"^",6),3)
+15 WRITE ?107,$JUSTIFY($PIECE(DATA,"^",7),3),?117,$JUSTIFY($PIECE(DATA,"^",8),3),?126,$JUSTIFY($PIECE(DATA,"^",9),4)
+16 IF $PIECE(FILTERS(0),"^",5)
IF $ORDER(^TMP($JOB,"IBTRHRC",Z1,Z2,""))'=""
Begin DoDot:3
+17 WRITE !?48,"Detail Autho/Review Decision Code:",?93,"----"
+18 SET Z3=""
FOR
SET Z3=$ORDER(^TMP($JOB,"IBTRHRC",Z1,Z2,1,Z3))
if Z3=""
QUIT
SET DDATA=$GET(^(Z3))
IF DDATA
Begin DoDot:4
+19 SET D1=$$GET1^DIQ(356.021,Z3_",",.01)
+20 SET D2=$$GET1^DIQ(356.021,Z3_",",.02)
+21 WRITE !?48,D1,"-",D2,?95,DDATA
End DoDot:4
+22 SET Z3=""
FOR
SET Z3=$ORDER(^TMP($JOB,"IBTRHRC",Z1,Z2,2,Z3))
if Z3=""
QUIT
SET DDATA=$GET(^(Z3))
IF DDATA
Begin DoDot:4
+23 WRITE !?48,Z3,?95,DDATA
+24 QUIT
End DoDot:4
End DoDot:3
+25 SET TOT1=$GET(TOT1)+$PIECE(DATA,"^")
SET TOT2=$GET(TOT2)+$PIECE(DATA,"^",2)
+26 SET TOT3=$GET(TOT3)+$PIECE(DATA,"^",3)
SET TOT4=$GET(TOT4)+$PIECE(DATA,"^",4)
+27 SET TOT5=$GET(TOT5)+$PIECE(DATA,"^",5)
SET TOT6=$GET(TOT6)+$PIECE(DATA,"^",6)
+28 SET TOT7=$GET(TOT7)+$PIECE(DATA,"^",7)
SET TOT8=$GET(TOT8)+$PIECE(DATA,"^",8)
+29 SET TOT9=$GET(TOT9)+$PIECE(DATA,"^",9)
End DoDot:2
+30 IF +$PIECE(FILTERS(0),"^",7)
Begin DoDot:2
+31 ;N CHK S CHK=$O(FILTERS(1,"")) I CHK'="",$O(FILTERS(1,CHK))="" Q
+32 ;S CHK=$O(FILTERS(2,"")) I CHK'="",$O(FILTERS(2,CHK))="" Q
+33 ;S CHK=$O(FILTERS(3,"")) I CHK'="",$O(FILTERS(2,CHK))="" Q
+34 WRITE !?48,$TRANSLATE($JUSTIFY(" ",84)," ","-")
+35 WRITE !," Total"
+36 WRITE ?48,$JUSTIFY(TOT1,4)
+37 FOR I=2:1:8
SET TAB=36+(10*I)
SET TAB="?"_TAB
SET TOT="TOT"_I
WRITE @TAB,$JUSTIFY(@TOT,4)
+38 WRITE ?126,$JUSTIFY(TOT9,4)
+39 WRITE !?29,$TRANSLATE($JUSTIFY(" ",103)," ","-")
End DoDot:2
+40 SET GTOT1=$GET(GTOT1)+$GET(TOT1)
SET GTOT2=$GET(GTOT2)+$GET(TOT2)
+41 SET GTOT3=$GET(GTOT3)+$GET(TOT3)
SET GTOT4=$GET(GTOT4)+$GET(TOT4)
+42 SET GTOT5=$GET(GTOT5)+$GET(TOT5)
SET GTOT6=$GET(GTOT6)+$GET(TOT6)
+43 SET GTOT7=$GET(GTOT7)+$GET(TOT7)
SET GTOT8=$GET(GTOT8)+$GET(TOT8)
+44 SET GTOT9=$GET(GTOT9)+$GET(TOT9)
+45 SET (TOT1,TOT2,TOT3,TOT4,TOT5,TOT6,TOT7,TOT8,TOT9)=""
+46 QUIT
End DoDot:1
if IBQUIT
QUIT
+47 IF '+$PIECE(FILTERS(0),"^",7)
WRITE !?29,$TRANSLATE($JUSTIFY(" ",103)," ","-")
+48 WRITE !,"Grand Total"
+49 WRITE ?48,$JUSTIFY(GTOT1,4)
+50 FOR I=2:1:9
SET TAB=36+(10*I)
SET TAB="?"_TAB
SET TOT="GTOT"_I
WRITE @TAB,$JUSTIFY(@TOT,4)
+51 WRITE !?29,$TRANSLATE($JUSTIFY(" ",103)," ","=")
+52 WRITE !
PR1 ;
+1 WRITE !?(132-$LENGTH("*** END OF REPORT ***")\2),"*** END OF REPORT ***"
+2 IF $DATA(ZTQUEUED)
GOTO END
+3 QUIT
+4 ;
HDR ; -- Print header for billing report
+1 if IBQUIT
QUIT
+2 IF $EXTRACT(IOST,1,2)="C-"
IF IBPAG
DO PAUSE^VALM1
IF $DATA(DIRUT)
SET IBQUIT=1
QUIT
+3 IF $EXTRACT(IOST,1,2)="C-"!(IBPAG)
WRITE @IOF
+4 SET IBPAG=IBPAG+1
+5 WRITE !," 278 Certification Report",?55,IBHDT,?125,"Page: ",IBPAG
+6 WRITE !," Sort by: ",$SELECT($PIECE(FILTERS(0),"^",6)=1:$SELECT($PIECE(FILTERS(0),"^")=1:"Payer",$PIECE(FILTERS(0),"^")=2:"Staff",1:"Patient"),1:"Date"),?116,"Detail: ",$SELECT($PIECE(FILTERS(0),"^",7)=1:"Included",1:"Excluded")
+7 WRITE !?55,"Report Timeframe:"
+8 SET SDT=$PIECE(FILTERS(4),"^")
SET EDT=$PIECE(FILTERS(4),"^",2)
+9 WRITE !?52,$EXTRACT(SDT,4,5),"/",$EXTRACT(SDT,6,7),"/",$SELECT($EXTRACT(SDT)=3:20,1:19),$EXTRACT(SDT,2,3)
+10 WRITE " - ",$EXTRACT(EDT,4,5),"/",$EXTRACT(EDT,6,7),"/",$SELECT($EXTRACT(EDT)=3:20,1:19),$EXTRACT(EDT,2,3)
+11 IF $PIECE(FILTERS(0),"^")=1
WRITE !?55,$SELECT($PIECE(FILTERS(0),"^",2)=1:"Selected",1:"All")," Payer(s)"
+12 IF $PIECE(FILTERS(0),"^")=2
WRITE !?55,$SELECT($PIECE(FILTERS(0),"^",3)=1:"Selected",1:"All")," Staff"
+13 IF $PIECE(FILTERS(0),"^")=3
WRITE !?55,$SELECT($PIECE(FILTERS(0),"^",4)=1:"Selected",1:"All")," Patient(s)"
+14 IF $PIECE(FILTERS(0),"^")=4
WRITE !?55,"Selected Dates"
+15 WRITE !
+16 WRITE !,$SELECT($PIECE(FILTERS(0),"^")=1:"Payer",$PIECE(FILTERS(0),"^")=2:"Staff",$PIECE(FILTERS(0),"^")=3:"Patient",1:"Date")
+17 WRITE ?30
+18 IF $PIECE(FILTERS(0),"^",7)
IF $PIECE(FILTERS(0),"^")'=4
WRITE "Date"
+19 WRITE ?48,"#278s",?58,"#A1",?68,"#A2",?78,"#A6",?88,"#A4",?98,"#A3",?108,"#C",?118,"CT",?128,"NA"
+20 WRITE !,$TRANSLATE($JUSTIFY(" ",132)," ","=")
+21 IF $DATA(ZTQUEUED)
IF $$S^%ZTLOAD
SET ZTSTOP=1
SET IBQUIT=1
WRITE !!,"....task stopped at user request"
+22 QUIT
+23 ;
SET ; -- set tmp array
+1 NEW PIECE,ST1,ST2,INS,DATE,AUTH1,COUNT
+2 IF $PIECE(FILTERS(0),"^")=1
Begin DoDot:1
+3 IF $DATA(FILTERS(1,PATINS))
SET INS=FILTERS(1,PATINS)
+4 IF '$TEST
SET INS=$$GET1^DIQ(36,PATINS_",",.01)
SET FILTERS(1,PATINS)=INS
+5 IF INS=""
SET INS="UNKNOWN"
QUIT
End DoDot:1
+6 IF $PIECE(FILTERS(0),"^")=2
Begin DoDot:1
+7 IF $DATA(FILTERS(2,STAFF))
SET INS=FILTERS(2,STAFF)
+8 IF '$TEST
SET INS=$$GET1^DIQ(200,STAFF_",",.01)
SET FILTERS(2,STAFF)=INS
+9 IF INS=""
SET INS="UNKNOWN"
QUIT
End DoDot:1
+10 IF $PIECE(FILTERS(0),"^")=3
Begin DoDot:1
+11 IF $DATA(FILTERS(3,PATIEN))
SET INS=FILTERS(3,PATIEN)
+12 IF '$TEST
SET INS=$$GET1^DIQ(2,PATIEN_",",.01)
SET FILTERS(3,PATIEN)=INS
+13 IF INS=""
SET INS="UNKNOWN"
QUIT
End DoDot:1
+14 IF $PIECE(FILTERS(0),"^")=4
SET INS=$PIECE(SDT,".")
+15 IF $PIECE(FILTERS(0),"^",6)=1
SET ST1=INS
SET ST2=$PIECE(SDT,".")
IF '$PIECE(FILTERS(0),"^",7)
SET ST2=ST1
+16 IF $PIECE(FILTERS(0),"^",6)=2
SET ST1=$PIECE(SDT,".")
SET ST2=INS
+17 IF $DATA(ZTQUEUED)
IF $$S^%ZTLOAD
SET ZTSTOP=1
SET IBQUIT=1
DO HDR
WRITE !!,"....task stopped at user request"
QUIT
+18 SET COUNT=$GET(^TMP($JOB,"IBTRHRC",ST1,ST2))
SET $PIECE(COUNT,"^")=$PIECE(COUNT,"^")+1
SET ^(ST2)=COUNT
+19 IF CERT
Begin DoDot:1
+20 SET CERT=$$GET1^DIQ(356.02,CERT_",",.01)
+21 SET PIECE=$SELECT(CERT="A1":2,CERT="A2":3,CERT="A6":4,CERT="A4":5,CERT="A3":6,CERT="C":7,CERT="CT":8,1:"9")
+22 SET $PIECE(COUNT,"^",PIECE)=$PIECE(COUNT,"^",PIECE)+1
+23 SET ^TMP($JOB,"IBTRHRC",ST1,ST2)=COUNT
End DoDot:1
+24 IF AUTH'=""
Begin DoDot:1
+25 SET AUTH1=$$GET1^DIQ(356.021,AUTH_",",.01)
+26 IF AUTH1=""
QUIT
+27 SET COUNT=$GET(^TMP($JOB,"IBTRHRC",ST1,ST2,1,AUTH))
+28 SET COUNT=COUNT+1
+29 SET ^TMP($JOB,"IBTRHRC",ST1,ST2,1,AUTH)=COUNT
End DoDot:1
+30 IF AUTH2'=""
Begin DoDot:1
+31 SET COUNT=$GET(^TMP($JOB,"IBTRHRC",ST1,ST2,2,AUTH2))
+32 SET COUNT=COUNT+1
+33 SET ^TMP($JOB,"IBTRHRC",ST1,ST2,2,AUTH2)=COUNT
End DoDot:1
+34 QUIT
+35 ;
FMDATES(PROMPT) ; ask for date range
+1 NEW %DT,X,Y,DT1,DT2,IB1,IB2
+2 SET DT1=""
SET IB1="Start Date: "
SET IB2="End Date: "
+3 IF $GET(PROMPT)'=""
SET IB1="Start with "_PROMPT_": "
SET IB2="Go to "_PROMPT_": "
FM1 ;
+1 SET %DT="AEX"
SET %DT("A")=IB1
DO ^%DT
KILL %DT
IF Y<0!($PIECE(Y,".",1)'?7N)
if (Y<0&(X=""))
GOTO FM1E
GOTO FMDQ
+2 SET (%DT(0),DT2)=$PIECE(Y,".",1)
IF DT2'>DT
SET %DT("B")="Today"
FM2 ;
+1 SET %DT="AEX"
SET %DT("A")=IB2
DO ^%DT
KILL %DT
IF Y<0!($PIECE(Y,".",1)'?7N)
if (Y<0&(X=""))
GOTO FM2E
GOTO FMDQ
+2 SET DT1=DT2_"^"_$PIECE(Y,".",1)
FMDQ ;
+1 QUIT DT1
FM1E ;
+1 WRITE !,"A date must be entered."
GOTO FM1
FM2E ;
+1 WRITE !,"A date must be entered."
GOTO FM2
+2 QUIT
+3 ;
ASKPAY(FILTERS) ; Sets a list of patients
+1 ; the HCSR Worklist
+2 ; Input: FILTERS - Current Array of filter settings
+3 ; Output: FILTERS - Updated Array of filter settings
+4 NEW CLINS,DIC,DIR,DIRUT,DIVS,DUOUT,IBIENS,IEN,N,NM,NODE,WARDS,X,XX,Y
+5 SET DIC=36
SET DIC(0)="AEM"
+6 FOR
Begin DoDot:1
+7 ; One patient
DO ONE(.DIC,.IEN)
+8 if +IEN<1
QUIT
+9 SET FILTERS(1,$PIECE(IEN,"^"))=$PIECE(IEN,"^",2)
End DoDot:1
if +IEN<1
QUIT
+10 QUIT
+11 ;
ASKSTAFF(FILTERS) ; Sets a list of staff
+1 ; Input: FILTERS - Current Array of filter settings
+2 ; Output: FILTERS - Updated Array of filter settings
+3 NEW DIC,DIR,DIRUT,DIVS,DUOUT,IBIENS,IEN,N,NM,NODE,X,XX,Y
+4 SET DIC=200
SET DIC(0)="AEM"
+5 FOR
Begin DoDot:1
+6 DO ONE(.DIC,.IEN)
+7 if +IEN<1
QUIT
+8 SET FILTERS(2,$PIECE(IEN,"^"))=$PIECE(IEN,"^",2)
End DoDot:1
if +IEN<1
QUIT
+9 QUIT
+10 ;
ONE(DIC,IEN) ; Prompts the user for Payer
+1 ; Input: DIC - Variable/Array of settings needed for ^DIC call
+2 ;
+3 ; Output: IEN - IEN of the selected Payer Entry
+4 ; null if no selection was made
+5 SET DIC("A")="Select "_$SELECT(DIC=200:"Staff Member: ",DIC="^VA(200,":"Staff Member: ",DIC=2:"Patient: ",DIC="^DPT(":"Patient: ",1:"Payer: ")
+6 DO ^DIC
+7 SET IEN=Y
+8 QUIT
+9 ;
ASKPAT(FILTERS) ; Sets a list of Patients
+1 ; Input: FILTERS - Current Array of filter settings
+2 ; Output: FILTERS - Updated Array of filter settings
+3 NEW DIC,DIR,DIRUT,DIVS,DUOUT,IBIENS,IEN,N,NM,NODE,X,XX,Y
+4 SET DIC=2
SET DIC(0)="AEM"
+5 FOR
Begin DoDot:1
+6 DO ONE(.DIC,.IEN)
+7 if +IEN<1
QUIT
+8 SET FILTERS(3,$PIECE(IEN,"^"))=$PIECE(IEN,"^",2)
End DoDot:1
if +IEN<1
QUIT
+9 QUIT