| 1 | IBACUS ;ALB/CPM - TRICARE BILLING UTILITIES ; 02-AUG-96 | 
|---|
| 2 | ;;2.0;INTEGRATED BILLING;**52,240,274**;21-MAR-94 | 
|---|
| 3 | ;;Per VHA Directive 10-93-142, this routine should not be modified. | 
|---|
| 4 | ; | 
|---|
| 5 | CUS(DFN,IBDT) ; Does the patient have TRICARE coverage? | 
|---|
| 6 | ;  Input:    DFN  --  Pointer to the patient in file #2 | 
|---|
| 7 | ;           DATE  --  Date on which coverage is to be determined | 
|---|
| 8 | ; Output:  IBCOV  --  0, if the vet has no billable TRICARE coverage | 
|---|
| 9 | ;                     >0 => pointer to such coverage in file #2.312 | 
|---|
| 10 | ; | 
|---|
| 11 | N IBCOV,IBPOL,IBI | 
|---|
| 12 | S IBCOV=0 | 
|---|
| 13 | I '$G(DFN) G CUSQ | 
|---|
| 14 | S:'$G(IBDT) IBDT=DT | 
|---|
| 15 | ; | 
|---|
| 16 | ; - find a billable TRICARE policy | 
|---|
| 17 | D ALL^IBCNS1(DFN,"IBPOL",1,IBDT) | 
|---|
| 18 | S IBI=0 F  S IBI=$O(IBPOL(IBI)) Q:'IBI  D  Q:IBCOV | 
|---|
| 19 | .Q:$P($G(IBPOL(IBI,3)),"^",4)  ; ignore billing this policy | 
|---|
| 20 | .I $P($G(^IBE(355.1,+$P($G(IBPOL(IBI,355.3)),"^",9),0)),"^",3)=7 S IBCOV=IBI | 
|---|
| 21 | CUSQ Q IBCOV | 
|---|
| 22 | ; | 
|---|
| 23 | ; | 
|---|
| 24 | TRI() ; Is the Tricare Billing engine up and running? | 
|---|
| 25 | ;  Input:  none | 
|---|
| 26 | ; Output:  0 - No  1 - Yes | 
|---|
| 27 | ; | 
|---|
| 28 | Q $P($G(^IBE(350.9,1,9)),"^",4)>0 | 
|---|
| 29 | ; | 
|---|
| 30 | ; | 
|---|
| 31 | CHPUS(DFN,DATE,IBRX,IBREF,IBLAB,IBRSITE,IBDUZ) ; Bill this patient for TRICARE? | 
|---|
| 32 | ;  Input:    DFN  --  Pointer to the patient in file #2 | 
|---|
| 33 | ;           DATE  --  Date on which coverage is to be determined | 
|---|
| 34 | ;           IBRX  --  Pointer to the prescription in file #52 | 
|---|
| 35 | ;          IBREF  --  Pointer to the refill in file #52.1, or | 
|---|
| 36 | ;                     0 if billing the original prescription | 
|---|
| 37 | ;          IBLAB  --  Pharmacy label printing device | 
|---|
| 38 | ;        IBRSITE  --  Pointer to the Pharmacy in file #59 | 
|---|
| 39 | ;          IBDUZ  --  Pointer to the Pharmacy user in file #200 | 
|---|
| 40 | ; Output:  IBCHK  --  0 => can't bill rx || 1 => bill rx | 
|---|
| 41 | ; | 
|---|
| 42 | N IBCHK,IBKEY S IBCHK=0 | 
|---|
| 43 | I '$G(DFN) G CHPUSQ | 
|---|
| 44 | D POL^IBCNSU41(DFN) | 
|---|
| 45 | ; | 
|---|
| 46 | ; - make sure system is running and the patient has TRICARE coverage | 
|---|
| 47 | I '$$TRI() G CHPUSQ | 
|---|
| 48 | I '$$CUS(DFN,DATE) G CHPUSQ | 
|---|
| 49 | ; | 
|---|
| 50 | ; - check remaining user input | 
|---|
| 51 | I '$G(IBRX) G CHPUSQ | 
|---|
| 52 | I $G(IBREF)="" G CHPUSQ | 
|---|
| 53 | I $G(IBLAB)=""!('$G(IBRSITE))!('$G(IBDUZ)) G CHPUSQ | 
|---|
| 54 | ; | 
|---|
| 55 | ; - perform all Pharmacy edits | 
|---|
| 56 | I '$$CHK^PSOCPTRI(IBRX,IBREF) G CHPUSQ | 
|---|
| 57 | ; | 
|---|
| 58 | ; - queue rx for billing | 
|---|
| 59 | S IBCHK=1,IBKEY=IBRX_";"_IBREF | 
|---|
| 60 | S ^IBA(351.5,"APOST",IBKEY)=IBLAB_"^"_IBRSITE_"^"_IBDUZ | 
|---|
| 61 | ; | 
|---|
| 62 | CHPUSQ Q IBCHK | 
|---|
| 63 | ; | 
|---|
| 64 | ; | 
|---|
| 65 | ; | 
|---|
| 66 | ; | 
|---|
| 67 | ; The following three queued entry points are invoked by the | 
|---|
| 68 | ; TRICARE Rx Billing engine.  The following two variables are | 
|---|
| 69 | ; defined for each of the jobs: | 
|---|
| 70 | ; | 
|---|
| 71 | ;     IBCHTRN  --  Pointer to the transaction entry in file #351.5 | 
|---|
| 72 | ;      IBKEYD  --  1 ^ 2 ^ 3, where | 
|---|
| 73 | ;                    1 = Rx label printing device | 
|---|
| 74 | ;                    2 = Pointer to the Pharmacy in file #59 | 
|---|
| 75 | ;                    3 = Pointer to the Pharmacy user in file #200 | 
|---|
| 76 | ; | 
|---|
| 77 | RXLAB ; Queued entry point to print the TRICARE Rx label. | 
|---|
| 78 | I $G(IBKEYD)="" G RXLABQ | 
|---|
| 79 | S IBCOP=$J(+$G(^IBA(351.5,+$G(IBCHTRN),2)),0,2) | 
|---|
| 80 | I 'IBCOP G RXLABQ | 
|---|
| 81 | D LABEL^PSOCPTRI(+$G(^IBA(351.5,IBCHTRN,0)),$P(IBKEYD,"^"),$P(IBKEYD,"^",2),$P(IBKEYD,"^",3),IBCOP) | 
|---|
| 82 | RXLABQ K IBCOP | 
|---|
| 83 | Q | 
|---|
| 84 | ; | 
|---|
| 85 | ; | 
|---|
| 86 | RXBIL ; Queued entry point to create TRICARE Rx Billing charges. | 
|---|
| 87 | ; | 
|---|
| 88 | ; - check some basic input | 
|---|
| 89 | I '$$RXSET G RXBILQ | 
|---|
| 90 | ; | 
|---|
| 91 | ; - create copay charge | 
|---|
| 92 | D BILL^IBACUS1(IBKEY,IBCHTRN) | 
|---|
| 93 | ; | 
|---|
| 94 | ; - create fiscal intermediary claim | 
|---|
| 95 | D BILL^IBACUS2(IBKEY,IBCHTRN) | 
|---|
| 96 | ; | 
|---|
| 97 | RXBILQ Q | 
|---|
| 98 | ; | 
|---|
| 99 | ; | 
|---|
| 100 | RXCAN ; Queued entry point to cancel TRICARE Rx Billing charges. | 
|---|
| 101 | ; | 
|---|
| 102 | ; - check some basic input | 
|---|
| 103 | I '$$RXSET G RXCANQ | 
|---|
| 104 | ; | 
|---|
| 105 | ; - cancel copay charge | 
|---|
| 106 | D CANC^IBACUS1(IBCHTRN) | 
|---|
| 107 | ; | 
|---|
| 108 | ; - cancel fiscal intermediary claim | 
|---|
| 109 | D CANC^IBACUS2(IBCHTRN) | 
|---|
| 110 | ; | 
|---|
| 111 | RXCANQ Q | 
|---|
| 112 | ; | 
|---|
| 113 | ; | 
|---|
| 114 | RXSET() ; Establish the session. | 
|---|
| 115 | N IBOK S IBOK=0 | 
|---|
| 116 | ; | 
|---|
| 117 | ; - check some basic input | 
|---|
| 118 | I '$G(IBCHTRN) G RXSETQ | 
|---|
| 119 | S IBKEY=$P($G(^IBA(351.5,IBCHTRN,0)),"^") | 
|---|
| 120 | I IBKEY="" G RXSETQ | 
|---|
| 121 | S DUZ=+$P(IBKEYD,"^",3) | 
|---|
| 122 | I $G(^VA(200,DUZ,0))="" G RXSETQ | 
|---|
| 123 | ; | 
|---|
| 124 | N DIQUIET S DIQUIET=1 D DT^DICRW | 
|---|
| 125 | S IBOK=1 | 
|---|
| 126 | ; | 
|---|
| 127 | RXSETQ Q IBOK | 
|---|