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

IBCOPR.m

Go to the documentation of this file.
  1. 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
  1. ;;Per VA Directive 6402, this routine should not be modified.
  1. ;
  1. ;IA - 3336 (IB REFERENCING 433)
  1. ;ib
  1. W !!,"This report will print bills and payments within the user selected"
  1. W !,"date range that are associated to an insurance policy with a source"
  1. W !,"of information equal to the user selected criteria."
  1. ;
  1. N CT,DATEEND,DATESTRT,DATETYPE,ENDDATE,IBCNFSUM,IBCNESOI,IBCNOUT,IBCNSORT,Q,WIDTH,X,Y
  1. ;
  1. DATETYPE ;
  1. ;Prompt for the type of date to report on.
  1. S DIR(0)="S^B:Billed Date;C:Collected Date",DIR("B")=""
  1. S DIR("A")="Report by (B)ill Date or by (C)ollected Date?"
  1. S DIR("?")="Enter B or C"
  1. S DIR("??")="^D BCHELP^IBCOPR"
  1. D ^DIR I $D(DTOUT)!$D(DUOUT)!$D(DIRUT)!$D(DIROUT) G EXIT
  1. S DATETYPE=Y K DIR,Y
  1. ;
  1. DATESEL ;Select Start and End Date
  1. ;Get Start Date
  1. S DIR(0)="DA^::EX",DIR("B")=$$FMTE^XLFDT($E(DT,1,5)_"01")
  1. S DIR("A")="Starting "_$S(DATETYPE="B":"Billed",1:"Collected")_" Date: "
  1. D ^DIR I $D(DTOUT)!$D(DUOUT)!$D(DIRUT)!$D(DIROUT) G EXIT
  1. I Y>DT W !,"FUTURE DATES ARE NOT ALLOWED." G DATESEL
  1. S DATESTRT=Y K DIR,Y
  1. ;
  1. ENDDATE ;
  1. ;Get End Date
  1. S DIR(0)="DA^::EX",DIR("B")=$$FMTE^XLFDT(DT)
  1. S DIR("A")=" Ending "_$S(DATETYPE="B":"Billed",1:"Collected")_" Date: "
  1. D ^DIR I $D(DTOUT)!$D(DUOUT)!$D(DIRUT)!$D(DIROUT) G EXIT
  1. I Y>DT W !,"FUTURE DATES ARE NOT ALLOWED." G ENDDATE
  1. I Y<DATESTRT W !,"END DATE MUST BE GREATER THAN OR EQUAL TO THE START DATE." G ENDDATE
  1. S DATEEND=Y K DIR,Y
  1. W !!?5,"*** Selected ",$S(DATETYPE="B":"Billed",1:"Collected")_" Date"," range from ",$$FMTE^XLFDT(DATESTRT)," to ",$$FMTE^XLFDT(DATEEND)," ***",!
  1. ;
  1. ; select Source of Information (SOI)
  1. SOISEL ; Select one SOI (source of information) or ALL - File #355.12
  1. S CT=0 W !,"Enter Sources of Information to include one at a time OR <RETURN> for ALL."
  1. SOISEL1 S DIC(0)="AMEQ"
  1. S Q="Include Source of Information"
  1. I CT S Q="Also "_Q
  1. S DIC("A")=$$FO^IBCNEUT1(Q_": ",36,"R")
  1. S DIC="^IBE(355.12,"
  1. D ^DIC K DIC
  1. I $D(DUOUT)!$D(DTOUT) G EXIT
  1. ; If nothing was selected (Y=-1), select ALL sources
  1. I Y=-1 G SUMMARY:CT=1 S IBCNESOI="A" G SUMMARY
  1. S IBCNESOI($P(Y,"^",1))=$P(Y,"^",2),IBCNESOI=$G(IBCNESOI)+1,CT=1 G SOISEL1
  1. ;
  1. SUMMARY ; ask to print detailed or summary report
  1. S DIR(0)="S^D:Detailed;S:Summary;",DIR("B")="Summary"
  1. S DIR("A")="Print (D)etailed or (S)ummary report?"
  1. W ! D ^DIR K DIR
  1. I $D(DTOUT)!$D(DUOUT)!$D(DIRUT)!$D(DIROUT) G EXIT
  1. S IBCNFSUM=Y="S"
  1. ;
  1. SORT ;Sort the detail report
  1. S IBCNSORT=""
  1. I 'IBCNFSUM D
  1. . S DIR(0)="S^P:Patient;I:Insurance;B:Billed Amount;C:Collected Amount;D:Date;S:Source of Information"
  1. . S DIR("B")="Source of Information"
  1. . S DIR("A")="Sort the report by"
  1. . W ! D ^DIR K DIR
  1. . I $D(DTOUT)!$D(DUOUT)!$D(DIRUT)!$D(DIROUT) Q
  1. . S IBCNSORT=Y
  1. I $D(DTOUT)!$D(DUOUT)!$D(DIRUT)!$D(DIROUT) G EXIT
  1. ;
  1. OUT ; select Excel or Report format
  1. N %ZIS,DIR,DIROUT,DIRUT,DTOUT,DUOUT,POP,X,Y,ZTDESC,ZTRTN,ZTSAVE
  1. W !
  1. S DIR(0)="S^E:Excel;R:Report"
  1. S DIR("A")="(E)xcel Format or (R)eport Format: "
  1. S DIR("B")="Report"
  1. D ^DIR K DIR
  1. I $D(DTOUT)!$D(DUOUT)!$D(DIRUT)!$D(DIROUT) G EXIT
  1. S IBCNOUT=Y
  1. ;
  1. W !!,"If you selected a long report period it is"
  1. W !,"recommended that this report be queued."
  1. ;
  1. I 'IBCNFSUM W !!,"*** This report is 132 characters wide ***"
  1. ; select device
  1. W ! S %ZIS="Q" D ^%ZIS G:POP EXIT
  1. I $D(IO("Q")) D G EXIT
  1. . S ZTDESC="Source of Information Report",ZTRTN="DQ^IBCOPR"
  1. . S ZTSAVE("DATE*")="",ZTSAVE("IBCN*")="",ZTSAVE("ZTREQ")="@"
  1. . D ^%ZTLOAD K IO("Q"),ZTSK
  1. ;
  1. I IBCNOUT="R" W !!,"<*> please wait <*>"
  1. ;
  1. ;^TMP($J,CLASS,SORT,SORTIEN)=DFN^SSN^BILLNO^INS^BILLDATE^BILLAMT
  1. DQ ;Process Report (queue entry point)
  1. N ARTRX,BILLIEN,DATE,TRXIEN
  1. K ^TMP($J,"IBCOPR")
  1. ;
  1. ;AR Transactions to show on the report.
  1. S ARTRX("PAYMENT (IN PART)")=""
  1. S ARTRX("PAYMENT (IN FULL)")=""
  1. ;
  1. ;Collect Data based on the Bill Date
  1. I DATETYPE="B" D G PRINT
  1. . N DATE
  1. . S DATE=DATESTRT-1
  1. . F S DATE=$O(^DGCR(399,"APD3",DATE)) Q:'DATE!(DATE>DATEEND) D
  1. .. N BILLIEN
  1. .. S BILLIEN=""
  1. .. F S BILLIEN=$O(^DGCR(399,"APD3",DATE,BILLIEN)) Q:(BILLIEN="") D
  1. ... N BILLDATA,CLMDATA
  1. ... D BILLDATA(BILLIEN,.BILLDATA,.SORT)
  1. ... I '$G(BILLDATA("SOI")) Q
  1. ... S TRXIEN="" F S TRXIEN=$O(^PRCA(433,"C",BILLIEN,TRXIEN)) Q:'TRXIEN D
  1. .... D CLMDATA(TRXIEN,.CLMDATA)
  1. ... D SETTMP(.BILLDATA,.CLMDATA)
  1. ;
  1. ;Collect Data based on the Collection Date
  1. N TYPE,TYPEIEN
  1. S TYPE=""
  1. F S TYPE=$O(ARTRX(TYPE)) Q:TYPE="" D
  1. . S TYPEIEN=$O(^PRCA(430.3,"B",TYPE,""))
  1. . S DATE=DATESTRT-1,ENDDATE=$$FMADD^XLFDT(DATEEND,30)
  1. . F S DATE=$O(^PRCA(433,"AT",TYPEIEN,DATE)) Q:'DATE!(DATE>ENDDATE) D
  1. .. S TRXIEN=0
  1. .. F S TRXIEN=$O(^PRCA(433,"AT",TYPEIEN,DATE,TRXIEN)) Q:'TRXIEN D
  1. ... N BILLDATA,CLMDATA
  1. ... D CLMDATA(TRXIEN,.CLMDATA)
  1. ... I '$D(CLMDATA) Q
  1. ... D BILLDATA(CLMDATA(TRXIEN,"BILLNUM"),.BILLDATA)
  1. ... I '$D(BILLDATA("SOI")) Q
  1. ... D SETTMP(.BILLDATA,.CLMDATA)
  1. ;
  1. PRINT ; Print the report
  1. N IBEX,LINE,PAGE,RDATE,SORTBY,TAB
  1. S RDATE=$$FMTE^XLFDT($$NOW^XLFDT),IBEX=0
  1. 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:"")
  1. I IBCNOUT="E" D EXCEL^IBCOPR1
  1. I IBCNOUT="R" D REPORT^IBCOPR1
  1. I '$G(IBEX),($E(IOST,1,2)="C-") D PAUSE^VALM1
  1. ;
  1. EXIT ; Exit routine
  1. D ^%ZISC
  1. K ^TMP($J,"IBCOPR")
  1. Q
  1. ;
  1. BILLDATA(BILLIEN,DATA,SORT) ;Get Billing Data
  1. N ARRAY,BILLIENS,DFN,FLD,INS,INSCOIEN,INSIENS,SEQ,SOI
  1. ;
  1. S BILLIENS=BILLIEN_","
  1. ;.01 - BILL NUMBER
  1. ;.02 - PATIENT NAME (DFN)
  1. ;.05 - BILL CLASSIFICATION
  1. ;.21 - CURRENT BILL PAYER SEQUENCE
  1. ;10 - AUTHORIZATION DATE (BILL DATE)
  1. ;16 - CANCEL BILL?
  1. ;201 - TOTAL CHARGES
  1. D GETS^DIQ(399,BILLIENS,".01;.02;.05;.21;10;16;201","EI","ARRAY","ERROR")
  1. ;Get data from INSURANE TYPE subfile.
  1. S DATA("BILLNUM")=$G(ARRAY(399,BILLIENS,.01,"E"))
  1. S DATA("BILLAMT")=$G(ARRAY(399,BILLIENS,201,"I"))
  1. S DATA("BILLDATE")=$G(ARRAY(399,BILLIENS,10,"I"))
  1. S DATA("CANCEL")=$G(ARRAY(399,BILLIENS,16,"I"))
  1. S DATA("CLASS")=$S($G(ARRAY(399,BILLIENS,.05,"I"))<3:1,1:3) ;Inpatient (1) or Outpatient (3)
  1. S SEQ=$G(ARRAY(399,BILLIENS,.21,"I")),FLD=$S(SEQ="P":101,SEQ="S":102,1:103)
  1. S (DATA("PATIENT"),DFN)=$G(ARRAY(399,BILLIENS,.02,"I"))
  1. S INSCOIEN=$$GET1^DIQ(399,BILLIENS,FLD,"I") I 'INSCOIEN G BILLDATX
  1. S INS=$O(^DPT(DFN,.312,"B",INSCOIEN,""))
  1. ;.09 - SSN
  1. D GETS^DIQ(2,DFN_",",".09","EI","ARRAY","ERROR")
  1. S INSIENS=INS_","_DFN_","
  1. ;.01 - Insurance Company
  1. ;1.09 - Source of Information
  1. D GETS^DIQ(2.312,INSIENS,".01;1.09","EI","ARRAY","ERROR")
  1. S SOI=$G(ARRAY(2.312,INSIENS,1.09,"I")) I SOI="" G BILLDATX
  1. I ($G(IBCNESOI)'="A"),'$D(IBCNESOI(SOI)) G BILLDATX ;Quit if SOI not selected and not ALL
  1. S DATA("SOI")=SOI
  1. S DATA("SSN")=$E($G(ARRAY(2,DFN_",",.09,"E")),6,9)
  1. S DATA("INSCO")=$G(ARRAY(2.312,INSIENS,.01,"I"))
  1. I $D(^TMP($J,"IBCOPR","B",DATA("CLASS"),BILLIEN)) G BILLDATX
  1. I DATA("CANCEL") Q ;Don't add to totals
  1. ;
  1. BILLDATX ; Exit the Bill data gathering subroutine
  1. Q
  1. ;
  1. CLMDATA(CLMIEN,DATA) ; Get Data from Transaction file.
  1. ;
  1. ;Retrieve the following fields from the AR TRANSACTION FILE (#433)
  1. ;.03 - Bill Number
  1. ; 11 - Date
  1. ; 12 - Type
  1. ; 15 - Transaction Amount
  1. ;
  1. N ARRAY,CLMIENS,TRXDATE,TRXTYPE
  1. S CLMIENS=CLMIEN_","
  1. D GETS^DIQ(433,CLMIENS,".03;11;12;15","EI","ARRAY","ERROR")
  1. S TRXTYPE=$G(ARRAY(433,CLMIENS,12,"E")) I TRXTYPE="" G CLMDATAX
  1. S TRXDATE=$G(ARRAY(433,CLMIENS,11,"I")) I (DATETYPE="C"),((TRXDATE<DATESTRT)!(TRXDATE>DATEEND)) G CLMDATAX
  1. I '$D(ARTRX(TRXTYPE)) G CLMDATAX
  1. S DATA(CLMIEN,"TRXAMT")=$G(ARRAY(433,CLMIENS,15,"I"))
  1. S DATA(CLMIEN,"BILLNUM")=$G(ARRAY(433,CLMIENS,.03,"I"))
  1. S DATA(CLMIEN,"TRXDATE")=TRXDATE
  1. S DATA(CLMIEN,"TRXTYPE")=TRXTYPE
  1. ;
  1. CLMDATAX ; Exit the Claim data gathering subroutine
  1. Q
  1. ;
  1. SETTMP(BILL,CLAIM) ; Set ^TMP($J,"IPCOPR") global with data for printing the report
  1. ;
  1. ; BILL - Data from Billing
  1. ; BILL("BILLAMT")=Bill Amount
  1. ; BILL("BILLDATE")=Bill Date
  1. ; BILL("BILLNUM")=Bill Number
  1. ; BILL("CANCEL")=1 if bill cancelled
  1. ; BILL("CLASS")=1 (inpatient) OR 3 (outpatient)
  1. ; BILL("INSCO")=Ins Co IEN
  1. ; BILL("PATIENT")=DFN
  1. ; BILL("SOI")=SOI IEN
  1. ; BILL("SSN")=Last 4 SSN
  1. ; CLAIM - Data from AR Transaction
  1. ; CLAIM(TRXIEN,"BILLNUM")=Bill IEN
  1. ; CLAIM(TRXIEN,"TRXDATE")=Transaction Date in FileMan format
  1. ; CLAIM(TRXIEN,"TRXTYPE")=Transaction Type
  1. ; CLAIM(TRXIEN,"TRXAMT")=Tranaction Amount
  1. ;
  1. N STR,TOT,TRX
  1. I DATETYPE="C" S TRX=$O(CLAIM("")),BILLIEN=$G(CLAIM(TRX,"BILLNUM")) I 'BILLIEN G SETTMPX
  1. ;
  1. I '$D(CLAIM),$D(^TMP($J,"IBCOPR","B",BILLIEN)) G SETTMPX ;No change
  1. ;
  1. I '$G(BILL("CANCEL")) D
  1. . I '$D(^TMP($J,"IBCOPR","B",BILLIEN)) D
  1. .. ;Grand Total
  1. .. S TOT=$G(^TMP($J,"IBCOPR","T","BILLCNT"))+1,^("BILLCNT")=TOT
  1. .. S TOT=$G(^TMP($J,"IBCOPR","T","BILLAMT"))+BILL("BILLAMT"),^("BILLAMT")=TOT
  1. .. ;
  1. .. ;Total by class
  1. .. S TOT=$G(^TMP($J,"IBCOPR","T",BILL("CLASS"),"BILLCNT"))+1,^("BILLCNT")=TOT
  1. .. S TOT=$G(^TMP($J,"IBCOPR","T",BILL("CLASS"),"BILLAMT"))+BILL("BILLAMT"),^("BILLAMT")=TOT
  1. .. ;
  1. .. I 'IBCNFSUM Q ;Only Summary report
  1. .. ;
  1. .. ;Total by class and SOI
  1. .. S TOT=$G(^TMP($J,"IBCOPR","S",BILL("CLASS"),BILL("SOI"),"BILLCNT"))+1,^("BILLCNT")=TOT
  1. .. S TOT=$G(^TMP($J,"IBCOPR","S",BILL("CLASS"),BILL("SOI"),"BILLAMT"))+BILL("BILLAMT"),^("BILLAMT")=TOT
  1. .. ;
  1. .. ;Grand Total by SOI
  1. .. S TOT=$G(^TMP($J,"IBCOPR","S","T",BILL("SOI"),"BILLCNT"))+1,^("BILLCNT")=TOT
  1. .. S TOT=$G(^TMP($J,"IBCOPR","S","T",BILL("SOI"),"BILLAMT"))+BILL("BILLAMT"),^("BILLAMT")=TOT
  1. . ;
  1. . I $D(CLAIM) S TRX="" F S TRX=$O(CLAIM(TRX)) Q:'TRX D
  1. .. ;Grand Total
  1. .. S TOT=$G(^TMP($J,"IBCOPR","T","CLMCNT"))+1,^("CLMCNT")=TOT
  1. .. S TOT=$G(^TMP($J,"IBCOPR","T","CLMAMT"))+CLAIM(TRX,"TRXAMT"),^("CLMAMT")=TOT
  1. .. ;
  1. .. ;Total by Class
  1. .. S TOT=$G(^TMP($J,"IBCOPR","T",BILL("CLASS"),"CLMCNT"))+1,^("CLMCNT")=TOT
  1. .. S TOT=$G(^TMP($J,"IBCOPR","T",BILL("CLASS"),"CLMAMT"))+$G(CLAIM(TRX,"TRXAMT")),^("CLMAMT")=TOT
  1. .. ;
  1. .. I 'IBCNFSUM Q ;Only Summary report
  1. .. ;
  1. .. ;Total by class and SOI
  1. .. S TOT=$G(^TMP($J,"IBCOPR","S",BILL("CLASS"),BILL("SOI"),"CLMCNT"))+1,^("CLMCNT")=TOT
  1. .. S TOT=$G(^TMP($J,"IBCOPR","S",BILL("CLASS"),BILL("SOI"),"CLMAMT"))+CLAIM(TRX,"TRXAMT"),^("CLMAMT")=TOT
  1. .. ;
  1. .. ; Total by SOI
  1. .. S TOT=$G(^TMP($J,"IBCOPR","S","T",BILL("SOI"),"CLMCNT"))+1,^("CLMCNT")=TOT
  1. .. S TOT=$G(^TMP($J,"IBCOPR","S","T",BILL("SOI"),"CLMAMT"))+CLAIM(TRX,"TRXAMT"),^("CLMAMT")=TOT
  1. . S ^TMP($J,"IBCOPR","B",BILLIEN)=""
  1. ;
  1. I 'IBCNFSUM D ; Only Detail Report
  1. . N FPN,INSCO,PN,SOI,TRX
  1. . S PN=$$GET1^DIQ(2,BILL("PATIENT")_",",.01),INSCO=$$GET1^DIQ(36,BILL("INSCO")_",",.01)
  1. . S SOI=$$GET1^DIQ(355.12,BILL("SOI")_",",.01)
  1. . S STR=PN ;Patient Name
  1. . S STR=STR_U_BILL("SSN") ;SSN
  1. . S STR=STR_U_$S(BILL("CANCEL"):"*",1:" ") ;Cancel
  1. . S STR=STR_BILL("BILLNUM") ;Bill Number (concatenacted to Cancel)
  1. . S STR=STR_U_INSCO ;Insurance Company
  1. . S STR=STR_U_$G(BILL("BILLAMT")) ;Bill Amt
  1. . S STR=STR_U_BILL("BILLDATE") ;Bill Date
  1. . S $P(STR,U,10)=SOI ;SOI
  1. . ;
  1. . ; Only have Bill Data
  1. . I '$D(CLAIM) D Q
  1. .. S $P(STR,U,9)="N"
  1. .. D SETLINE
  1. . ;
  1. . ; Process Collection Data
  1. . S TRX=0
  1. . F S TRX=$O(CLAIM(TRX)) Q:'TRX D
  1. .. S FPN=$S($G(CLAIM(TRX,"TRXTYPE"))["FULL":"F",$G(CLAIM(TRX,"TRXTYPE"))["PART":"P",1:"N")
  1. .. S $P(STR,U,7)=$G(CLAIM(TRX,"TRXAMT")) ;Collected Amt
  1. .. S $P(STR,U,8)=$G(CLAIM(TRX,"TRXDATE")) ;Collected Date
  1. .. S $P(STR,U,9)=FPN ;F/P/N
  1. .. D SETLINE
  1. ;
  1. SETTMPX ;Exit subroutine
  1. Q
  1. ;
  1. SETLINE ; Set up data line for detail report
  1. ;
  1. N CNT,SORT
  1. S SORT="" D
  1. . I IBCNSORT="P" S SORT=PN Q
  1. . I IBCNSORT="I" S SORT=INSCO Q
  1. . I IBCNSORT="B" S SORT=BILL("BILLAMT") Q
  1. . I IBCNSORT="C" S SORT=+$G(CLAIM(+$G(TRX),"TRXAMT")) Q
  1. . I IBCNSORT="D" S SORT=$S(DATETYPE="B":BILL("BILLDATE"),1:$G(CLAIM(TRX,"TRXDATE"))) Q
  1. . S SORT=SOI
  1. S CNT=$G(^TMP($J,"IBCOPR","D",BILL("CLASS"),SORT))+1,^(SORT)=CNT,^(SORT,CNT)=STR
  1. Q
  1. ;
  1. BCHELP ;Help for DATETYPE field
  1. W !!,"Enter 'B' for Bill Date - The date bills were generated"
  1. W !,"or 'C' for Collected Date - The date money was collected for"
  1. W !," a claim (may be partial or full).",!
  1. Q