- IBCOPR ;WISC/RFJ,BOISE/WRL - print dollar amts for pre-registration ;05 May 97 8:30 AM [7/22/03 11:59am]
- ;;2.0;INTEGRATED BILLING;**75,345,528,664,668**;21-MAR-94;Build 28
- ;;Per VA Directive 6402, this routine should not be modified.
- ;
- ;IA - 3336 (IB REFERENCING 433)
- ;ib
- W !!,"This report will print bills and payments within the user selected"
- W !,"date range that are associated to an insurance policy with a source"
- W !,"of information equal to the user selected criteria."
- ;
- N CT,DATEEND,DATESTRT,DATETYPE,ENDDATE,IBCNFSUM,IBCNESOI,IBCNOUT,IBCNSORT,Q,WIDTH,X,Y
- ;
- DATETYPE ;
- ;Prompt for the type of date to report on.
- S DIR(0)="S^B:Billed Date;C:Collected Date",DIR("B")=""
- S DIR("A")="Report by (B)ill Date or by (C)ollected Date?"
- S DIR("?")="Enter B or C"
- S DIR("??")="^D BCHELP^IBCOPR"
- D ^DIR I $D(DTOUT)!$D(DUOUT)!$D(DIRUT)!$D(DIROUT) G EXIT
- S DATETYPE=Y K DIR,Y
- ;
- DATESEL ;Select Start and End Date
- ;Get Start Date
- S DIR(0)="DA^::EX",DIR("B")=$$FMTE^XLFDT($E(DT,1,5)_"01")
- S DIR("A")="Starting "_$S(DATETYPE="B":"Billed",1:"Collected")_" Date: "
- D ^DIR I $D(DTOUT)!$D(DUOUT)!$D(DIRUT)!$D(DIROUT) G EXIT
- I Y>DT W !,"FUTURE DATES ARE NOT ALLOWED." G DATESEL
- S DATESTRT=Y K DIR,Y
- ;
- ENDDATE ;
- ;Get End Date
- S DIR(0)="DA^::EX",DIR("B")=$$FMTE^XLFDT(DT)
- S DIR("A")=" Ending "_$S(DATETYPE="B":"Billed",1:"Collected")_" Date: "
- D ^DIR I $D(DTOUT)!$D(DUOUT)!$D(DIRUT)!$D(DIROUT) G EXIT
- I Y>DT W !,"FUTURE DATES ARE NOT ALLOWED." G ENDDATE
- I Y<DATESTRT W !,"END DATE MUST BE GREATER THAN OR EQUAL TO THE START DATE." G ENDDATE
- S DATEEND=Y K DIR,Y
- W !!?5,"*** Selected ",$S(DATETYPE="B":"Billed",1:"Collected")_" Date"," range from ",$$FMTE^XLFDT(DATESTRT)," to ",$$FMTE^XLFDT(DATEEND)," ***",!
- ;
- ; select Source of Information (SOI)
- SOISEL ; Select one SOI (source of information) or ALL - File #355.12
- S CT=0 W !,"Enter Sources of Information to include one at a time OR <RETURN> for ALL."
- SOISEL1 S DIC(0)="AMEQ"
- S Q="Include Source of Information"
- I CT S Q="Also "_Q
- S DIC("A")=$$FO^IBCNEUT1(Q_": ",36,"R")
- S DIC="^IBE(355.12,"
- D ^DIC K DIC
- I $D(DUOUT)!$D(DTOUT) G EXIT
- ; If nothing was selected (Y=-1), select ALL sources
- I Y=-1 G SUMMARY:CT=1 S IBCNESOI="A" G SUMMARY
- S IBCNESOI($P(Y,"^",1))=$P(Y,"^",2),IBCNESOI=$G(IBCNESOI)+1,CT=1 G SOISEL1
- ;
- SUMMARY ; ask to print detailed or summary report
- S DIR(0)="S^D:Detailed;S:Summary;",DIR("B")="Summary"
- S DIR("A")="Print (D)etailed or (S)ummary report?"
- W ! D ^DIR K DIR
- I $D(DTOUT)!$D(DUOUT)!$D(DIRUT)!$D(DIROUT) G EXIT
- S IBCNFSUM=Y="S"
- ;
- SORT ;Sort the detail report
- S IBCNSORT=""
- I 'IBCNFSUM D
- . S DIR(0)="S^P:Patient;I:Insurance;B:Billed Amount;C:Collected Amount;D:Date;S:Source of Information"
- . S DIR("B")="Source of Information"
- . S DIR("A")="Sort the report by"
- . W ! D ^DIR K DIR
- . I $D(DTOUT)!$D(DUOUT)!$D(DIRUT)!$D(DIROUT) Q
- . S IBCNSORT=Y
- I $D(DTOUT)!$D(DUOUT)!$D(DIRUT)!$D(DIROUT) G EXIT
- ;
- OUT ; select Excel or Report format
- N %ZIS,DIR,DIROUT,DIRUT,DTOUT,DUOUT,POP,X,Y,ZTDESC,ZTRTN,ZTSAVE
- W !
- S DIR(0)="S^E:Excel;R:Report"
- S DIR("A")="(E)xcel Format or (R)eport Format: "
- S DIR("B")="Report"
- D ^DIR K DIR
- I $D(DTOUT)!$D(DUOUT)!$D(DIRUT)!$D(DIROUT) G EXIT
- S IBCNOUT=Y
- ;
- W !!,"If you selected a long report period it is"
- W !,"recommended that this report be queued."
- ;
- I 'IBCNFSUM W !!,"*** This report is 132 characters wide ***"
- ; select device
- W ! S %ZIS="Q" D ^%ZIS G:POP EXIT
- I $D(IO("Q")) D G EXIT
- . S ZTDESC="Source of Information Report",ZTRTN="DQ^IBCOPR"
- . S ZTSAVE("DATE*")="",ZTSAVE("IBCN*")="",ZTSAVE("ZTREQ")="@"
- . D ^%ZTLOAD K IO("Q"),ZTSK
- ;
- I IBCNOUT="R" W !!,"<*> please wait <*>"
- ;
- ;^TMP($J,CLASS,SORT,SORTIEN)=DFN^SSN^BILLNO^INS^BILLDATE^BILLAMT
- DQ ;Process Report (queue entry point)
- N ARTRX,BILLIEN,DATE,TRXIEN
- K ^TMP($J,"IBCOPR")
- ;
- ;AR Transactions to show on the report.
- S ARTRX("PAYMENT (IN PART)")=""
- S ARTRX("PAYMENT (IN FULL)")=""
- ;
- ;Collect Data based on the Bill Date
- I DATETYPE="B" D G PRINT
- . N DATE
- . S DATE=DATESTRT-1
- . F S DATE=$O(^DGCR(399,"APD3",DATE)) Q:'DATE!(DATE>DATEEND) D
- .. N BILLIEN
- .. S BILLIEN=""
- .. F S BILLIEN=$O(^DGCR(399,"APD3",DATE,BILLIEN)) Q:(BILLIEN="") D
- ... N BILLDATA,CLMDATA
- ... D BILLDATA(BILLIEN,.BILLDATA,.SORT)
- ... I '$G(BILLDATA("SOI")) Q
- ... S TRXIEN="" F S TRXIEN=$O(^PRCA(433,"C",BILLIEN,TRXIEN)) Q:'TRXIEN D
- .... D CLMDATA(TRXIEN,.CLMDATA)
- ... D SETTMP(.BILLDATA,.CLMDATA)
- ;
- ;Collect Data based on the Collection Date
- N TYPE,TYPEIEN
- S TYPE=""
- F S TYPE=$O(ARTRX(TYPE)) Q:TYPE="" D
- . S TYPEIEN=$O(^PRCA(430.3,"B",TYPE,""))
- . S DATE=DATESTRT-1,ENDDATE=$$FMADD^XLFDT(DATEEND,30)
- . F S DATE=$O(^PRCA(433,"AT",TYPEIEN,DATE)) Q:'DATE!(DATE>ENDDATE) D
- .. S TRXIEN=0
- .. F S TRXIEN=$O(^PRCA(433,"AT",TYPEIEN,DATE,TRXIEN)) Q:'TRXIEN D
- ... N BILLDATA,CLMDATA
- ... D CLMDATA(TRXIEN,.CLMDATA)
- ... I '$D(CLMDATA) Q
- ... D BILLDATA(CLMDATA(TRXIEN,"BILLNUM"),.BILLDATA)
- ... I '$D(BILLDATA("SOI")) Q
- ... D SETTMP(.BILLDATA,.CLMDATA)
- ;
- PRINT ; Print the report
- N IBEX,LINE,PAGE,RDATE,SORTBY,TAB
- S RDATE=$$FMTE^XLFDT($$NOW^XLFDT),IBEX=0
- I 'IBCNFSUM S SORTBY=$S(IBCNSORT="P":"Patient",IBCNSORT="I":"Insurance",IBCNSORT="B":"Billed Amount",IBCNSORT="C":"Collected Amount",IBCNSORT="D":$S(DATETYPE="B":"Bill ",1:"Collected ")_"Date",IBCNSORT="S":"Source of Information",1:"")
- I IBCNOUT="E" D EXCEL^IBCOPR1
- I IBCNOUT="R" D REPORT^IBCOPR1
- I '$G(IBEX),($E(IOST,1,2)="C-") D PAUSE^VALM1
- ;
- EXIT ; Exit routine
- D ^%ZISC
- K ^TMP($J,"IBCOPR")
- Q
- ;
- BILLDATA(BILLIEN,DATA,SORT) ;Get Billing Data
- N ARRAY,BILLIENS,DFN,FLD,INS,INSCOIEN,INSIENS,SEQ,SOI
- ;
- S BILLIENS=BILLIEN_","
- ;.01 - BILL NUMBER
- ;.02 - PATIENT NAME (DFN)
- ;.05 - BILL CLASSIFICATION
- ;.21 - CURRENT BILL PAYER SEQUENCE
- ;10 - AUTHORIZATION DATE (BILL DATE)
- ;16 - CANCEL BILL?
- ;201 - TOTAL CHARGES
- D GETS^DIQ(399,BILLIENS,".01;.02;.05;.21;10;16;201","EI","ARRAY","ERROR")
- ;Get data from INSURANE TYPE subfile.
- S DATA("BILLNUM")=$G(ARRAY(399,BILLIENS,.01,"E"))
- S DATA("BILLAMT")=$G(ARRAY(399,BILLIENS,201,"I"))
- S DATA("BILLDATE")=$G(ARRAY(399,BILLIENS,10,"I"))
- S DATA("CANCEL")=$G(ARRAY(399,BILLIENS,16,"I"))
- S DATA("CLASS")=$S($G(ARRAY(399,BILLIENS,.05,"I"))<3:1,1:3) ;Inpatient (1) or Outpatient (3)
- S SEQ=$G(ARRAY(399,BILLIENS,.21,"I")),FLD=$S(SEQ="P":101,SEQ="S":102,1:103)
- S (DATA("PATIENT"),DFN)=$G(ARRAY(399,BILLIENS,.02,"I"))
- S INSCOIEN=$$GET1^DIQ(399,BILLIENS,FLD,"I") I 'INSCOIEN G BILLDATX
- S INS=$O(^DPT(DFN,.312,"B",INSCOIEN,""))
- ;.09 - SSN
- D GETS^DIQ(2,DFN_",",".09","EI","ARRAY","ERROR")
- S INSIENS=INS_","_DFN_","
- ;.01 - Insurance Company
- ;1.09 - Source of Information
- D GETS^DIQ(2.312,INSIENS,".01;1.09","EI","ARRAY","ERROR")
- S SOI=$G(ARRAY(2.312,INSIENS,1.09,"I")) I SOI="" G BILLDATX
- I ($G(IBCNESOI)'="A"),'$D(IBCNESOI(SOI)) G BILLDATX ;Quit if SOI not selected and not ALL
- S DATA("SOI")=SOI
- S DATA("SSN")=$E($G(ARRAY(2,DFN_",",.09,"E")),6,9)
- S DATA("INSCO")=$G(ARRAY(2.312,INSIENS,.01,"I"))
- I $D(^TMP($J,"IBCOPR","B",DATA("CLASS"),BILLIEN)) G BILLDATX
- I DATA("CANCEL") Q ;Don't add to totals
- ;
- BILLDATX ; Exit the Bill data gathering subroutine
- Q
- ;
- CLMDATA(CLMIEN,DATA) ; Get Data from Transaction file.
- ;
- ;Retrieve the following fields from the AR TRANSACTION FILE (#433)
- ;.03 - Bill Number
- ; 11 - Date
- ; 12 - Type
- ; 15 - Transaction Amount
- ;
- N ARRAY,CLMIENS,TRXDATE,TRXTYPE
- S CLMIENS=CLMIEN_","
- D GETS^DIQ(433,CLMIENS,".03;11;12;15","EI","ARRAY","ERROR")
- S TRXTYPE=$G(ARRAY(433,CLMIENS,12,"E")) I TRXTYPE="" G CLMDATAX
- S TRXDATE=$G(ARRAY(433,CLMIENS,11,"I")) I (DATETYPE="C"),((TRXDATE<DATESTRT)!(TRXDATE>DATEEND)) G CLMDATAX
- I '$D(ARTRX(TRXTYPE)) G CLMDATAX
- S DATA(CLMIEN,"TRXAMT")=$G(ARRAY(433,CLMIENS,15,"I"))
- S DATA(CLMIEN,"BILLNUM")=$G(ARRAY(433,CLMIENS,.03,"I"))
- S DATA(CLMIEN,"TRXDATE")=TRXDATE
- S DATA(CLMIEN,"TRXTYPE")=TRXTYPE
- ;
- CLMDATAX ; Exit the Claim data gathering subroutine
- Q
- ;
- SETTMP(BILL,CLAIM) ; Set ^TMP($J,"IPCOPR") global with data for printing the report
- ;
- ; BILL - Data from Billing
- ; BILL("BILLAMT")=Bill Amount
- ; BILL("BILLDATE")=Bill Date
- ; BILL("BILLNUM")=Bill Number
- ; BILL("CANCEL")=1 if bill cancelled
- ; BILL("CLASS")=1 (inpatient) OR 3 (outpatient)
- ; BILL("INSCO")=Ins Co IEN
- ; BILL("PATIENT")=DFN
- ; BILL("SOI")=SOI IEN
- ; BILL("SSN")=Last 4 SSN
- ; CLAIM - Data from AR Transaction
- ; CLAIM(TRXIEN,"BILLNUM")=Bill IEN
- ; CLAIM(TRXIEN,"TRXDATE")=Transaction Date in FileMan format
- ; CLAIM(TRXIEN,"TRXTYPE")=Transaction Type
- ; CLAIM(TRXIEN,"TRXAMT")=Tranaction Amount
- ;
- N STR,TOT,TRX
- I DATETYPE="C" S TRX=$O(CLAIM("")),BILLIEN=$G(CLAIM(TRX,"BILLNUM")) I 'BILLIEN G SETTMPX
- ;
- I '$D(CLAIM),$D(^TMP($J,"IBCOPR","B",BILLIEN)) G SETTMPX ;No change
- ;
- I '$G(BILL("CANCEL")) D
- . I '$D(^TMP($J,"IBCOPR","B",BILLIEN)) D
- .. ;Grand Total
- .. S TOT=$G(^TMP($J,"IBCOPR","T","BILLCNT"))+1,^("BILLCNT")=TOT
- .. S TOT=$G(^TMP($J,"IBCOPR","T","BILLAMT"))+BILL("BILLAMT"),^("BILLAMT")=TOT
- .. ;
- .. ;Total by class
- .. S TOT=$G(^TMP($J,"IBCOPR","T",BILL("CLASS"),"BILLCNT"))+1,^("BILLCNT")=TOT
- .. S TOT=$G(^TMP($J,"IBCOPR","T",BILL("CLASS"),"BILLAMT"))+BILL("BILLAMT"),^("BILLAMT")=TOT
- .. ;
- .. I 'IBCNFSUM Q ;Only Summary report
- .. ;
- .. ;Total by class and SOI
- .. S TOT=$G(^TMP($J,"IBCOPR","S",BILL("CLASS"),BILL("SOI"),"BILLCNT"))+1,^("BILLCNT")=TOT
- .. S TOT=$G(^TMP($J,"IBCOPR","S",BILL("CLASS"),BILL("SOI"),"BILLAMT"))+BILL("BILLAMT"),^("BILLAMT")=TOT
- .. ;
- .. ;Grand Total by SOI
- .. S TOT=$G(^TMP($J,"IBCOPR","S","T",BILL("SOI"),"BILLCNT"))+1,^("BILLCNT")=TOT
- .. S TOT=$G(^TMP($J,"IBCOPR","S","T",BILL("SOI"),"BILLAMT"))+BILL("BILLAMT"),^("BILLAMT")=TOT
- . ;
- . I $D(CLAIM) S TRX="" F S TRX=$O(CLAIM(TRX)) Q:'TRX D
- .. ;Grand Total
- .. S TOT=$G(^TMP($J,"IBCOPR","T","CLMCNT"))+1,^("CLMCNT")=TOT
- .. S TOT=$G(^TMP($J,"IBCOPR","T","CLMAMT"))+CLAIM(TRX,"TRXAMT"),^("CLMAMT")=TOT
- .. ;
- .. ;Total by Class
- .. S TOT=$G(^TMP($J,"IBCOPR","T",BILL("CLASS"),"CLMCNT"))+1,^("CLMCNT")=TOT
- .. S TOT=$G(^TMP($J,"IBCOPR","T",BILL("CLASS"),"CLMAMT"))+$G(CLAIM(TRX,"TRXAMT")),^("CLMAMT")=TOT
- .. ;
- .. I 'IBCNFSUM Q ;Only Summary report
- .. ;
- .. ;Total by class and SOI
- .. S TOT=$G(^TMP($J,"IBCOPR","S",BILL("CLASS"),BILL("SOI"),"CLMCNT"))+1,^("CLMCNT")=TOT
- .. S TOT=$G(^TMP($J,"IBCOPR","S",BILL("CLASS"),BILL("SOI"),"CLMAMT"))+CLAIM(TRX,"TRXAMT"),^("CLMAMT")=TOT
- .. ;
- .. ; Total by SOI
- .. S TOT=$G(^TMP($J,"IBCOPR","S","T",BILL("SOI"),"CLMCNT"))+1,^("CLMCNT")=TOT
- .. S TOT=$G(^TMP($J,"IBCOPR","S","T",BILL("SOI"),"CLMAMT"))+CLAIM(TRX,"TRXAMT"),^("CLMAMT")=TOT
- . S ^TMP($J,"IBCOPR","B",BILLIEN)=""
- ;
- I 'IBCNFSUM D ; Only Detail Report
- . N FPN,INSCO,PN,SOI,TRX
- . S PN=$$GET1^DIQ(2,BILL("PATIENT")_",",.01),INSCO=$$GET1^DIQ(36,BILL("INSCO")_",",.01)
- . S SOI=$$GET1^DIQ(355.12,BILL("SOI")_",",.01)
- . S STR=PN ;Patient Name
- . S STR=STR_U_BILL("SSN") ;SSN
- . S STR=STR_U_$S(BILL("CANCEL"):"*",1:" ") ;Cancel
- . S STR=STR_BILL("BILLNUM") ;Bill Number (concatenacted to Cancel)
- . S STR=STR_U_INSCO ;Insurance Company
- . S STR=STR_U_$G(BILL("BILLAMT")) ;Bill Amt
- . S STR=STR_U_BILL("BILLDATE") ;Bill Date
- . S $P(STR,U,10)=SOI ;SOI
- . ;
- . ; Only have Bill Data
- . I '$D(CLAIM) D Q
- .. S $P(STR,U,9)="N"
- .. D SETLINE
- . ;
- . ; Process Collection Data
- . S TRX=0
- . F S TRX=$O(CLAIM(TRX)) Q:'TRX D
- .. S FPN=$S($G(CLAIM(TRX,"TRXTYPE"))["FULL":"F",$G(CLAIM(TRX,"TRXTYPE"))["PART":"P",1:"N")
- .. S $P(STR,U,7)=$G(CLAIM(TRX,"TRXAMT")) ;Collected Amt
- .. S $P(STR,U,8)=$G(CLAIM(TRX,"TRXDATE")) ;Collected Date
- .. S $P(STR,U,9)=FPN ;F/P/N
- .. D SETLINE
- ;
- SETTMPX ;Exit subroutine
- Q
- ;
- SETLINE ; Set up data line for detail report
- ;
- N CNT,SORT
- S SORT="" D
- . I IBCNSORT="P" S SORT=PN Q
- . I IBCNSORT="I" S SORT=INSCO Q
- . I IBCNSORT="B" S SORT=BILL("BILLAMT") Q
- . I IBCNSORT="C" S SORT=+$G(CLAIM(+$G(TRX),"TRXAMT")) Q
- . I IBCNSORT="D" S SORT=$S(DATETYPE="B":BILL("BILLDATE"),1:$G(CLAIM(TRX,"TRXDATE"))) Q
- . S SORT=SOI
- S CNT=$G(^TMP($J,"IBCOPR","D",BILL("CLASS"),SORT))+1,^(SORT)=CNT,^(SORT,CNT)=STR
- Q
- ;
- BCHELP ;Help for DATETYPE field
- W !!,"Enter 'B' for Bill Date - The date bills were generated"
- W !,"or 'C' for Collected Date - The date money was collected for"
- W !," a claim (may be partial or full).",!
- Q
- --- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HIBCOPR 12784 printed Mar 13, 2025@21:23:33 Page 2
- IBCOPR ;WISC/RFJ,BOISE/WRL - print dollar amts for pre-registration ;05 May 97 8:30 AM [7/22/03 11:59am]
- +1 ;;2.0;INTEGRATED BILLING;**75,345,528,664,668**;21-MAR-94;Build 28
- +2 ;;Per VA Directive 6402, this routine should not be modified.
- +3 ;
- +4 ;IA - 3336 (IB REFERENCING 433)
- +5 ;ib
- +6 WRITE !!,"This report will print bills and payments within the user selected"
- +7 WRITE !,"date range that are associated to an insurance policy with a source"
- +8 WRITE !,"of information equal to the user selected criteria."
- +9 ;
- +10 NEW CT,DATEEND,DATESTRT,DATETYPE,ENDDATE,IBCNFSUM,IBCNESOI,IBCNOUT,IBCNSORT,Q,WIDTH,X,Y
- +11 ;
- DATETYPE ;
- +1 ;Prompt for the type of date to report on.
- +2 SET DIR(0)="S^B:Billed Date;C:Collected Date"
- SET DIR("B")=""
- +3 SET DIR("A")="Report by (B)ill Date or by (C)ollected Date?"
- +4 SET DIR("?")="Enter B or C"
- +5 SET DIR("??")="^D BCHELP^IBCOPR"
- +6 DO ^DIR
- IF $DATA(DTOUT)!$DATA(DUOUT)!$DATA(DIRUT)!$DATA(DIROUT)
- GOTO EXIT
- +7 SET DATETYPE=Y
- KILL DIR,Y
- +8 ;
- DATESEL ;Select Start and End Date
- +1 ;Get Start Date
- +2 SET DIR(0)="DA^::EX"
- SET DIR("B")=$$FMTE^XLFDT($EXTRACT(DT,1,5)_"01")
- +3 SET DIR("A")="Starting "_$SELECT(DATETYPE="B":"Billed",1:"Collected")_" Date: "
- +4 DO ^DIR
- IF $DATA(DTOUT)!$DATA(DUOUT)!$DATA(DIRUT)!$DATA(DIROUT)
- GOTO EXIT
- +5 IF Y>DT
- WRITE !,"FUTURE DATES ARE NOT ALLOWED."
- GOTO DATESEL
- +6 SET DATESTRT=Y
- KILL DIR,Y
- +7 ;
- ENDDATE ;
- +1 ;Get End Date
- +2 SET DIR(0)="DA^::EX"
- SET DIR("B")=$$FMTE^XLFDT(DT)
- +3 SET DIR("A")=" Ending "_$SELECT(DATETYPE="B":"Billed",1:"Collected")_" Date: "
- +4 DO ^DIR
- IF $DATA(DTOUT)!$DATA(DUOUT)!$DATA(DIRUT)!$DATA(DIROUT)
- GOTO EXIT
- +5 IF Y>DT
- WRITE !,"FUTURE DATES ARE NOT ALLOWED."
- GOTO ENDDATE
- +6 IF Y<DATESTRT
- WRITE !,"END DATE MUST BE GREATER THAN OR EQUAL TO THE START DATE."
- GOTO ENDDATE
- +7 SET DATEEND=Y
- KILL DIR,Y
- +8 WRITE !!?5,"*** Selected ",$SELECT(DATETYPE="B":"Billed",1:"Collected")_" Date"," range from ",$$FMTE^XLFDT(DATESTRT)," to ",$$FMTE^XLFDT(DATEEND)," ***",!
- +9 ;
- +10 ; select Source of Information (SOI)
- SOISEL ; Select one SOI (source of information) or ALL - File #355.12
- +1 SET CT=0
- WRITE !,"Enter Sources of Information to include one at a time OR <RETURN> for ALL."
- SOISEL1 SET DIC(0)="AMEQ"
- +1 SET Q="Include Source of Information"
- +2 IF CT
- SET Q="Also "_Q
- +3 SET DIC("A")=$$FO^IBCNEUT1(Q_": ",36,"R")
- +4 SET DIC="^IBE(355.12,"
- +5 DO ^DIC
- KILL DIC
- +6 IF $DATA(DUOUT)!$DATA(DTOUT)
- GOTO EXIT
- +7 ; If nothing was selected (Y=-1), select ALL sources
- +8 IF Y=-1
- if CT=1
- GOTO SUMMARY
- SET IBCNESOI="A"
- GOTO SUMMARY
- +9 SET IBCNESOI($PIECE(Y,"^",1))=$PIECE(Y,"^",2)
- SET IBCNESOI=$GET(IBCNESOI)+1
- SET CT=1
- GOTO SOISEL1
- +10 ;
- SUMMARY ; ask to print detailed or summary report
- +1 SET DIR(0)="S^D:Detailed;S:Summary;"
- SET DIR("B")="Summary"
- +2 SET DIR("A")="Print (D)etailed or (S)ummary report?"
- +3 WRITE !
- DO ^DIR
- KILL DIR
- +4 IF $DATA(DTOUT)!$DATA(DUOUT)!$DATA(DIRUT)!$DATA(DIROUT)
- GOTO EXIT
- +5 SET IBCNFSUM=Y="S"
- +6 ;
- SORT ;Sort the detail report
- +1 SET IBCNSORT=""
- +2 IF 'IBCNFSUM
- Begin DoDot:1
- +3 SET DIR(0)="S^P:Patient;I:Insurance;B:Billed Amount;C:Collected Amount;D:Date;S:Source of Information"
- +4 SET DIR("B")="Source of Information"
- +5 SET DIR("A")="Sort the report by"
- +6 WRITE !
- DO ^DIR
- KILL DIR
- +7 IF $DATA(DTOUT)!$DATA(DUOUT)!$DATA(DIRUT)!$DATA(DIROUT)
- QUIT
- +8 SET IBCNSORT=Y
- End DoDot:1
- +9 IF $DATA(DTOUT)!$DATA(DUOUT)!$DATA(DIRUT)!$DATA(DIROUT)
- GOTO EXIT
- +10 ;
- OUT ; select Excel or Report format
- +1 NEW %ZIS,DIR,DIROUT,DIRUT,DTOUT,DUOUT,POP,X,Y,ZTDESC,ZTRTN,ZTSAVE
- +2 WRITE !
- +3 SET DIR(0)="S^E:Excel;R:Report"
- +4 SET DIR("A")="(E)xcel Format or (R)eport Format: "
- +5 SET DIR("B")="Report"
- +6 DO ^DIR
- KILL DIR
- +7 IF $DATA(DTOUT)!$DATA(DUOUT)!$DATA(DIRUT)!$DATA(DIROUT)
- GOTO EXIT
- +8 SET IBCNOUT=Y
- +9 ;
- +10 WRITE !!,"If you selected a long report period it is"
- +11 WRITE !,"recommended that this report be queued."
- +12 ;
- +13 IF 'IBCNFSUM
- WRITE !!,"*** This report is 132 characters wide ***"
- +14 ; select device
- +15 WRITE !
- SET %ZIS="Q"
- DO ^%ZIS
- if POP
- GOTO EXIT
- +16 IF $DATA(IO("Q"))
- Begin DoDot:1
- +17 SET ZTDESC="Source of Information Report"
- SET ZTRTN="DQ^IBCOPR"
- +18 SET ZTSAVE("DATE*")=""
- SET ZTSAVE("IBCN*")=""
- SET ZTSAVE("ZTREQ")="@"
- +19 DO ^%ZTLOAD
- KILL IO("Q"),ZTSK
- End DoDot:1
- GOTO EXIT
- +20 ;
- +21 IF IBCNOUT="R"
- WRITE !!,"<*> please wait <*>"
- +22 ;
- +23 ;^TMP($J,CLASS,SORT,SORTIEN)=DFN^SSN^BILLNO^INS^BILLDATE^BILLAMT
- DQ ;Process Report (queue entry point)
- +1 NEW ARTRX,BILLIEN,DATE,TRXIEN
- +2 KILL ^TMP($JOB,"IBCOPR")
- +3 ;
- +4 ;AR Transactions to show on the report.
- +5 SET ARTRX("PAYMENT (IN PART)")=""
- +6 SET ARTRX("PAYMENT (IN FULL)")=""
- +7 ;
- +8 ;Collect Data based on the Bill Date
- +9 IF DATETYPE="B"
- Begin DoDot:1
- +10 NEW DATE
- +11 SET DATE=DATESTRT-1
- +12 FOR
- SET DATE=$ORDER(^DGCR(399,"APD3",DATE))
- if 'DATE!(DATE>DATEEND)
- QUIT
- Begin DoDot:2
- +13 NEW BILLIEN
- +14 SET BILLIEN=""
- +15 FOR
- SET BILLIEN=$ORDER(^DGCR(399,"APD3",DATE,BILLIEN))
- if (BILLIEN="")
- QUIT
- Begin DoDot:3
- +16 NEW BILLDATA,CLMDATA
- +17 DO BILLDATA(BILLIEN,.BILLDATA,.SORT)
- +18 IF '$GET(BILLDATA("SOI"))
- QUIT
- +19 SET TRXIEN=""
- FOR
- SET TRXIEN=$ORDER(^PRCA(433,"C",BILLIEN,TRXIEN))
- if 'TRXIEN
- QUIT
- Begin DoDot:4
- +20 DO CLMDATA(TRXIEN,.CLMDATA)
- End DoDot:4
- +21 DO SETTMP(.BILLDATA,.CLMDATA)
- End DoDot:3
- End DoDot:2
- End DoDot:1
- GOTO PRINT
- +22 ;
- +23 ;Collect Data based on the Collection Date
- +24 NEW TYPE,TYPEIEN
- +25 SET TYPE=""
- +26 FOR
- SET TYPE=$ORDER(ARTRX(TYPE))
- if TYPE=""
- QUIT
- Begin DoDot:1
- +27 SET TYPEIEN=$ORDER(^PRCA(430.3,"B",TYPE,""))
- +28 SET DATE=DATESTRT-1
- SET ENDDATE=$$FMADD^XLFDT(DATEEND,30)
- +29 FOR
- SET DATE=$ORDER(^PRCA(433,"AT",TYPEIEN,DATE))
- if 'DATE!(DATE>ENDDATE)
- QUIT
- Begin DoDot:2
- +30 SET TRXIEN=0
- +31 FOR
- SET TRXIEN=$ORDER(^PRCA(433,"AT",TYPEIEN,DATE,TRXIEN))
- if 'TRXIEN
- QUIT
- Begin DoDot:3
- +32 NEW BILLDATA,CLMDATA
- +33 DO CLMDATA(TRXIEN,.CLMDATA)
- +34 IF '$DATA(CLMDATA)
- QUIT
- +35 DO BILLDATA(CLMDATA(TRXIEN,"BILLNUM"),.BILLDATA)
- +36 IF '$DATA(BILLDATA("SOI"))
- QUIT
- +37 DO SETTMP(.BILLDATA,.CLMDATA)
- End DoDot:3
- End DoDot:2
- End DoDot:1
- +38 ;
- PRINT ; Print the report
- +1 NEW IBEX,LINE,PAGE,RDATE,SORTBY,TAB
- +2 SET RDATE=$$FMTE^XLFDT($$NOW^XLFDT)
- SET IBEX=0
- +3 IF 'IBCNFSUM
- SET SORTBY=$SELECT(IBCNSORT="P":"Patient",IBCNSORT="I":"Insurance",IBCNSORT="B":"Billed Amount",IBCNSORT="C":"Collected Amount",IBCNSORT="D":$SELECT(DATETYPE="B":"Bill ",1:"Collected ")_"Date",IBCNSORT="S":"Source of Information",1:"")
- +4 IF IBCNOUT="E"
- DO EXCEL^IBCOPR1
- +5 IF IBCNOUT="R"
- DO REPORT^IBCOPR1
- +6 IF '$GET(IBEX)
- IF ($EXTRACT(IOST,1,2)="C-")
- DO PAUSE^VALM1
- +7 ;
- EXIT ; Exit routine
- +1 DO ^%ZISC
- +2 KILL ^TMP($JOB,"IBCOPR")
- +3 QUIT
- +4 ;
- BILLDATA(BILLIEN,DATA,SORT) ;Get Billing Data
- +1 NEW ARRAY,BILLIENS,DFN,FLD,INS,INSCOIEN,INSIENS,SEQ,SOI
- +2 ;
- +3 SET BILLIENS=BILLIEN_","
- +4 ;.01 - BILL NUMBER
- +5 ;.02 - PATIENT NAME (DFN)
- +6 ;.05 - BILL CLASSIFICATION
- +7 ;.21 - CURRENT BILL PAYER SEQUENCE
- +8 ;10 - AUTHORIZATION DATE (BILL DATE)
- +9 ;16 - CANCEL BILL?
- +10 ;201 - TOTAL CHARGES
- +11 DO GETS^DIQ(399,BILLIENS,".01;.02;.05;.21;10;16;201","EI","ARRAY","ERROR")
- +12 ;Get data from INSURANE TYPE subfile.
- +13 SET DATA("BILLNUM")=$GET(ARRAY(399,BILLIENS,.01,"E"))
- +14 SET DATA("BILLAMT")=$GET(ARRAY(399,BILLIENS,201,"I"))
- +15 SET DATA("BILLDATE")=$GET(ARRAY(399,BILLIENS,10,"I"))
- +16 SET DATA("CANCEL")=$GET(ARRAY(399,BILLIENS,16,"I"))
- +17 ;Inpatient (1) or Outpatient (3)
- SET DATA("CLASS")=$SELECT($GET(ARRAY(399,BILLIENS,.05,"I"))<3:1,1:3)
- +18 SET SEQ=$GET(ARRAY(399,BILLIENS,.21,"I"))
- SET FLD=$SELECT(SEQ="P":101,SEQ="S":102,1:103)
- +19 SET (DATA("PATIENT"),DFN)=$GET(ARRAY(399,BILLIENS,.02,"I"))
- +20 SET INSCOIEN=$$GET1^DIQ(399,BILLIENS,FLD,"I")
- IF 'INSCOIEN
- GOTO BILLDATX
- +21 SET INS=$ORDER(^DPT(DFN,.312,"B",INSCOIEN,""))
- +22 ;.09 - SSN
- +23 DO GETS^DIQ(2,DFN_",",".09","EI","ARRAY","ERROR")
- +24 SET INSIENS=INS_","_DFN_","
- +25 ;.01 - Insurance Company
- +26 ;1.09 - Source of Information
- +27 DO GETS^DIQ(2.312,INSIENS,".01;1.09","EI","ARRAY","ERROR")
- +28 SET SOI=$GET(ARRAY(2.312,INSIENS,1.09,"I"))
- IF SOI=""
- GOTO BILLDATX
- +29 ;Quit if SOI not selected and not ALL
- IF ($GET(IBCNESOI)'="A")
- IF '$DATA(IBCNESOI(SOI))
- GOTO BILLDATX
- +30 SET DATA("SOI")=SOI
- +31 SET DATA("SSN")=$EXTRACT($GET(ARRAY(2,DFN_",",.09,"E")),6,9)
- +32 SET DATA("INSCO")=$GET(ARRAY(2.312,INSIENS,.01,"I"))
- +33 IF $DATA(^TMP($JOB,"IBCOPR","B",DATA("CLASS"),BILLIEN))
- GOTO BILLDATX
- +34 ;Don't add to totals
- IF DATA("CANCEL")
- QUIT
- +35 ;
- BILLDATX ; Exit the Bill data gathering subroutine
- +1 QUIT
- +2 ;
- CLMDATA(CLMIEN,DATA) ; Get Data from Transaction file.
- +1 ;
- +2 ;Retrieve the following fields from the AR TRANSACTION FILE (#433)
- +3 ;.03 - Bill Number
- +4 ; 11 - Date
- +5 ; 12 - Type
- +6 ; 15 - Transaction Amount
- +7 ;
- +8 NEW ARRAY,CLMIENS,TRXDATE,TRXTYPE
- +9 SET CLMIENS=CLMIEN_","
- +10 DO GETS^DIQ(433,CLMIENS,".03;11;12;15","EI","ARRAY","ERROR")
- +11 SET TRXTYPE=$GET(ARRAY(433,CLMIENS,12,"E"))
- IF TRXTYPE=""
- GOTO CLMDATAX
- +12 SET TRXDATE=$GET(ARRAY(433,CLMIENS,11,"I"))
- IF (DATETYPE="C")
- IF ((TRXDATE<DATESTRT)!(TRXDATE>DATEEND))
- GOTO CLMDATAX
- +13 IF '$DATA(ARTRX(TRXTYPE))
- GOTO CLMDATAX
- +14 SET DATA(CLMIEN,"TRXAMT")=$GET(ARRAY(433,CLMIENS,15,"I"))
- +15 SET DATA(CLMIEN,"BILLNUM")=$GET(ARRAY(433,CLMIENS,.03,"I"))
- +16 SET DATA(CLMIEN,"TRXDATE")=TRXDATE
- +17 SET DATA(CLMIEN,"TRXTYPE")=TRXTYPE
- +18 ;
- CLMDATAX ; Exit the Claim data gathering subroutine
- +1 QUIT
- +2 ;
- SETTMP(BILL,CLAIM) ; Set ^TMP($J,"IPCOPR") global with data for printing the report
- +1 ;
- +2 ; BILL - Data from Billing
- +3 ; BILL("BILLAMT")=Bill Amount
- +4 ; BILL("BILLDATE")=Bill Date
- +5 ; BILL("BILLNUM")=Bill Number
- +6 ; BILL("CANCEL")=1 if bill cancelled
- +7 ; BILL("CLASS")=1 (inpatient) OR 3 (outpatient)
- +8 ; BILL("INSCO")=Ins Co IEN
- +9 ; BILL("PATIENT")=DFN
- +10 ; BILL("SOI")=SOI IEN
- +11 ; BILL("SSN")=Last 4 SSN
- +12 ; CLAIM - Data from AR Transaction
- +13 ; CLAIM(TRXIEN,"BILLNUM")=Bill IEN
- +14 ; CLAIM(TRXIEN,"TRXDATE")=Transaction Date in FileMan format
- +15 ; CLAIM(TRXIEN,"TRXTYPE")=Transaction Type
- +16 ; CLAIM(TRXIEN,"TRXAMT")=Tranaction Amount
- +17 ;
- +18 NEW STR,TOT,TRX
- +19 IF DATETYPE="C"
- SET TRX=$ORDER(CLAIM(""))
- SET BILLIEN=$GET(CLAIM(TRX,"BILLNUM"))
- IF 'BILLIEN
- GOTO SETTMPX
- +20 ;
- +21 ;No change
- IF '$DATA(CLAIM)
- IF $DATA(^TMP($JOB,"IBCOPR","B",BILLIEN))
- GOTO SETTMPX
- +22 ;
- +23 IF '$GET(BILL("CANCEL"))
- Begin DoDot:1
- +24 IF '$DATA(^TMP($JOB,"IBCOPR","B",BILLIEN))
- Begin DoDot:2
- +25 ;Grand Total
- +26 SET TOT=$GET(^TMP($JOB,"IBCOPR","T","BILLCNT"))+1
- SET ^("BILLCNT")=TOT
- +27 SET TOT=$GET(^TMP($JOB,"IBCOPR","T","BILLAMT"))+BILL("BILLAMT")
- SET ^("BILLAMT")=TOT
- +28 ;
- +29 ;Total by class
- +30 SET TOT=$GET(^TMP($JOB,"IBCOPR","T",BILL("CLASS"),"BILLCNT"))+1
- SET ^("BILLCNT")=TOT
- +31 SET TOT=$GET(^TMP($JOB,"IBCOPR","T",BILL("CLASS"),"BILLAMT"))+BILL("BILLAMT")
- SET ^("BILLAMT")=TOT
- +32 ;
- +33 ;Only Summary report
- IF 'IBCNFSUM
- QUIT
- +34 ;
- +35 ;Total by class and SOI
- +36 SET TOT=$GET(^TMP($JOB,"IBCOPR","S",BILL("CLASS"),BILL("SOI"),"BILLCNT"))+1
- SET ^("BILLCNT")=TOT
- +37 SET TOT=$GET(^TMP($JOB,"IBCOPR","S",BILL("CLASS"),BILL("SOI"),"BILLAMT"))+BILL("BILLAMT")
- SET ^("BILLAMT")=TOT
- +38 ;
- +39 ;Grand Total by SOI
- +40 SET TOT=$GET(^TMP($JOB,"IBCOPR","S","T",BILL("SOI"),"BILLCNT"))+1
- SET ^("BILLCNT")=TOT
- +41 SET TOT=$GET(^TMP($JOB,"IBCOPR","S","T",BILL("SOI"),"BILLAMT"))+BILL("BILLAMT")
- SET ^("BILLAMT")=TOT
- End DoDot:2
- +42 ;
- +43 IF $DATA(CLAIM)
- SET TRX=""
- FOR
- SET TRX=$ORDER(CLAIM(TRX))
- if 'TRX
- QUIT
- Begin DoDot:2
- +44 ;Grand Total
- +45 SET TOT=$GET(^TMP($JOB,"IBCOPR","T","CLMCNT"))+1
- SET ^("CLMCNT")=TOT
- +46 SET TOT=$GET(^TMP($JOB,"IBCOPR","T","CLMAMT"))+CLAIM(TRX,"TRXAMT")
- SET ^("CLMAMT")=TOT
- +47 ;
- +48 ;Total by Class
- +49 SET TOT=$GET(^TMP($JOB,"IBCOPR","T",BILL("CLASS"),"CLMCNT"))+1
- SET ^("CLMCNT")=TOT
- +50 SET TOT=$GET(^TMP($JOB,"IBCOPR","T",BILL("CLASS"),"CLMAMT"))+$GET(CLAIM(TRX,"TRXAMT"))
- SET ^("CLMAMT")=TOT
- +51 ;
- +52 ;Only Summary report
- IF 'IBCNFSUM
- QUIT
- +53 ;
- +54 ;Total by class and SOI
- +55 SET TOT=$GET(^TMP($JOB,"IBCOPR","S",BILL("CLASS"),BILL("SOI"),"CLMCNT"))+1
- SET ^("CLMCNT")=TOT
- +56 SET TOT=$GET(^TMP($JOB,"IBCOPR","S",BILL("CLASS"),BILL("SOI"),"CLMAMT"))+CLAIM(TRX,"TRXAMT")
- SET ^("CLMAMT")=TOT
- +57 ;
- +58 ; Total by SOI
- +59 SET TOT=$GET(^TMP($JOB,"IBCOPR","S","T",BILL("SOI"),"CLMCNT"))+1
- SET ^("CLMCNT")=TOT
- +60 SET TOT=$GET(^TMP($JOB,"IBCOPR","S","T",BILL("SOI"),"CLMAMT"))+CLAIM(TRX,"TRXAMT")
- SET ^("CLMAMT")=TOT
- End DoDot:2
- +61 SET ^TMP($JOB,"IBCOPR","B",BILLIEN)=""
- End DoDot:1
- +62 ;
- +63 ; Only Detail Report
- IF 'IBCNFSUM
- Begin DoDot:1
- +64 NEW FPN,INSCO,PN,SOI,TRX
- +65 SET PN=$$GET1^DIQ(2,BILL("PATIENT")_",",.01)
- SET INSCO=$$GET1^DIQ(36,BILL("INSCO")_",",.01)
- +66 SET SOI=$$GET1^DIQ(355.12,BILL("SOI")_",",.01)
- +67 ;Patient Name
- SET STR=PN
- +68 ;SSN
- SET STR=STR_U_BILL("SSN")
- +69 ;Cancel
- SET STR=STR_U_$SELECT(BILL("CANCEL"):"*",1:" ")
- +70 ;Bill Number (concatenacted to Cancel)
- SET STR=STR_BILL("BILLNUM")
- +71 ;Insurance Company
- SET STR=STR_U_INSCO
- +72 ;Bill Amt
- SET STR=STR_U_$GET(BILL("BILLAMT"))
- +73 ;Bill Date
- SET STR=STR_U_BILL("BILLDATE")
- +74 ;SOI
- SET $PIECE(STR,U,10)=SOI
- +75 ;
- +76 ; Only have Bill Data
- +77 IF '$DATA(CLAIM)
- Begin DoDot:2
- +78 SET $PIECE(STR,U,9)="N"
- +79 DO SETLINE
- End DoDot:2
- QUIT
- +80 ;
- +81 ; Process Collection Data
- +82 SET TRX=0
- +83 FOR
- SET TRX=$ORDER(CLAIM(TRX))
- if 'TRX
- QUIT
- Begin DoDot:2
- +84 SET FPN=$SELECT($GET(CLAIM(TRX,"TRXTYPE"))["FULL":"F",$GET(CLAIM(TRX,"TRXTYPE"))["PART":"P",1:"N")
- +85 ;Collected Amt
- SET $PIECE(STR,U,7)=$GET(CLAIM(TRX,"TRXAMT"))
- +86 ;Collected Date
- SET $PIECE(STR,U,8)=$GET(CLAIM(TRX,"TRXDATE"))
- +87 ;F/P/N
- SET $PIECE(STR,U,9)=FPN
- +88 DO SETLINE
- End DoDot:2
- End DoDot:1
- +89 ;
- SETTMPX ;Exit subroutine
- +1 QUIT
- +2 ;
- SETLINE ; Set up data line for detail report
- +1 ;
- +2 NEW CNT,SORT
- +3 SET SORT=""
- Begin DoDot:1
- +4 IF IBCNSORT="P"
- SET SORT=PN
- QUIT
- +5 IF IBCNSORT="I"
- SET SORT=INSCO
- QUIT
- +6 IF IBCNSORT="B"
- SET SORT=BILL("BILLAMT")
- QUIT
- +7 IF IBCNSORT="C"
- SET SORT=+$GET(CLAIM(+$GET(TRX),"TRXAMT"))
- QUIT
- +8 IF IBCNSORT="D"
- SET SORT=$SELECT(DATETYPE="B":BILL("BILLDATE"),1:$GET(CLAIM(TRX,"TRXDATE")))
- QUIT
- +9 SET SORT=SOI
- End DoDot:1
- +10 SET CNT=$GET(^TMP($JOB,"IBCOPR","D",BILL("CLASS"),SORT))+1
- SET ^(SORT)=CNT
- SET ^(SORT,CNT)=STR
- +11 QUIT
- +12 ;
- BCHELP ;Help for DATETYPE field
- +1 WRITE !!,"Enter 'B' for Bill Date - The date bills were generated"
- +2 WRITE !,"or 'C' for Collected Date - The date money was collected for"
- +3 WRITE !," a claim (may be partial or full).",!
- +4 QUIT