| 1 | IBATFILE ;LL/ELZ - TRANSFER PRICING FILLING  ; 22-JAN-1999
 | 
|---|
| 2 |  ;;2.0;INTEGRATED BILLING;**115**;21-MAR-94
 | 
|---|
| 3 |  ;;Per VHA Directive 10-93-142, this routine should not be modified.
 | 
|---|
| 4 | PAT(DA,IBFAC,IBOVER) ; files patient in transfer pricing returns dfn
 | 
|---|
| 5 |  Q:'$G(DA) 0
 | 
|---|
| 6 |  I $D(^IBAT(351.6,DA,0)) Q DA
 | 
|---|
| 7 |  N DO,DD,DIC,X,DINUM
 | 
|---|
| 8 |  S DIC="^IBAT(351.6,",DIC(0)="",X=DA,DINUM=DA
 | 
|---|
| 9 |  S DIC("DR")=".02///"_$$NOW^XLFDT_";.03////"_+$S($G(IBFAC):IBFAC,1:$$PPF^IBATUTL(DA))_";.04///1"_$S($D(IBOVER):";.1////"_+IBOVER,1:"")
 | 
|---|
| 10 |  D FILE^DICN
 | 
|---|
| 11 |  Q $S(Y>0:Y,1:0)
 | 
|---|
| 12 | UPPPF(DA,PPF) ; updates a patient's enrolled facility
 | 
|---|
| 13 |  I '$G(DA)!('$G(PPF))!('$D(^IBAT(351.6,DA))) Q
 | 
|---|
| 14 |  N DIE,DR
 | 
|---|
| 15 |  S DIE="^IBAT(351.6,",DR=".03////"_+PPF D ^DIE
 | 
|---|
| 16 |  Q
 | 
|---|
| 17 | ADM(DFN,IBADMDT,IBPREF,IBSOURCE) ; - files admissions
 | 
|---|
| 18 |  ; IBADMDT=admission date, IBPREF=enrolled facility
 | 
|---|
| 19 |  ; IBSOURCE=source (movement ien;DGPM(
 | 
|---|
| 20 |  I '$G(DFN)!('$G(IBADMDT))!('$G(IBPREF))!($G(IBSOURCE)="") Q 0
 | 
|---|
| 21 |  Q $$NEW(DFN,IBADMDT,IBPREF,IBSOURCE)
 | 
|---|
| 22 | DIS(DA,IBDISDT,IBPTF,IBDISM) ; - files discharges
 | 
|---|
| 23 |  ; DA=transaction ien in 351.61, IBDISDT=discharge date
 | 
|---|
| 24 |  ; IBPTF=ptf pointer, IBDISM=discharge movement pointer
 | 
|---|
| 25 |  I '$G(DA)!('$G(IBDISDT))!('$G(IBPTF))!('$G(IBDISM)) Q 0
 | 
|---|
| 26 |  N DIE,DR
 | 
|---|
| 27 |  S DIE="^IBAT(351.61,"
 | 
|---|
| 28 |  S DR=".05////C;.1////"_IBDISDT_";1.07////"_IBPTF_";1.08////"_IBDISM
 | 
|---|
| 29 |  L +^IBAT(351.61,DA):10 I '$T Q "0^Transaction Locked"
 | 
|---|
| 30 |  D ^DIE L -^IBAT(351.61,DA)
 | 
|---|
| 31 |  Q DA
 | 
|---|
| 32 | DISC(DA) ; - deletes discharge data
 | 
|---|
| 33 |  ; DA=transaction ien in 351.61
 | 
|---|
| 34 |  N DIE,DR Q:'$G(DA) 0
 | 
|---|
| 35 |  S DIE="^IBAT(351.61,"
 | 
|---|
| 36 |  S DR=".05////E;.1///@;1.08///@"
 | 
|---|
| 37 |  L +^IBAT(351.61,DA):10 I '$T Q "0^Transaction Locked"
 | 
|---|
| 38 |  D ^DIE L -^IBAT(351.61,DA)
 | 
|---|
| 39 |  Q DA
 | 
|---|
| 40 | INPT(IBIEN,IBDRG,IBDRGA,IBLOS,IBHIGH,IBOUT,IBOUTR) ; - file remaining inpt
 | 
|---|
| 41 |  ; IBIEN=transaction ien in 351.61, IBDRG=DRG pointer
 | 
|---|
| 42 |  ; IBDRGA=DRG amount,IBLOS=inpatient LOS,IBHIGH=high trim days
 | 
|---|
| 43 |  ; IBOUT=outlier days,IBOUTR=outlier rate
 | 
|---|
| 44 |  I '$G(IBIEN)!('$G(IBLOS))!('$D(IBHIGH))!('$D(IBOUT)) Q 0
 | 
|---|
| 45 |  N DIE,X,Y,DR
 | 
|---|
| 46 |  S DIE="^IBAT(351.61,",DA=IBIEN
 | 
|---|
| 47 |  S DR="1.03////"_IBLOS_";1.04////"_IBHIGH_";1.05////"_IBOUT
 | 
|---|
| 48 |  S:$G(IBDRG) DR=DR_";1.01///"_IBDRG
 | 
|---|
| 49 |  S:$G(IBDRGA) DR=DR_";1.02////"_IBDRGA
 | 
|---|
| 50 |  S:$G(IBOUTR) DR=DR_";1.06////"_IBOUTR
 | 
|---|
| 51 |  L +^IBAT(351.61,IBIEN):10 I '$T Q "0^Transaction Locked"
 | 
|---|
| 52 |  D ^DIE,TOTAL^IBATCM(IBIEN) I $P($G(^IBAT(351.61,IBIEN,6)),"^",2) D
 | 
|---|
| 53 |  . S DR=";.05////P;.13////"_DT D ^DIE
 | 
|---|
| 54 |  L -^IBAT(351.61,IBIEN)
 | 
|---|
| 55 |  Q IBIEN
 | 
|---|
| 56 | OUT(DFN,IBEDT,IBPREF,IBSOURCE,IBPROC) ; - files outpatient data
 | 
|---|
| 57 |  ; DFN=dfn for patient, IBEDT=event date, IBPREF=enrolled facility
 | 
|---|
| 58 |  ; IBSOURCE=source (outpatient encounter ien;SCE(
 | 
|---|
| 59 |  ; IBPROC=procedures (by ref in array)
 | 
|---|
| 60 |  I '$G(DFN)!('$G(IBEDT))!('$G(IBPREF))!($G(IBSOURCE)="") Q 0
 | 
|---|
| 61 |  N IBIEN,IBX,Y,IBPRICE
 | 
|---|
| 62 |  S IBIEN=$$NEW(DFN,IBEDT,IBPREF,IBSOURCE) I 'IBIEN Q IBIEN
 | 
|---|
| 63 |  L +^IBAT(351.61,IBIEN):10 I '$T Q "0^Transaction Locked"
 | 
|---|
| 64 |  S IBIEN=$$PROC(IBIEN,.IBPROC,.IBPRICE) ; file procedures
 | 
|---|
| 65 |  I IBIEN<1 L -^IBAT(351.61,IBIEN) Q "0^Unable to file procedures"
 | 
|---|
| 66 |  S DIE="^IBAT(351.61,",DA=IBIEN
 | 
|---|
| 67 |  S DR=".1////"_IBEDT_";.05////"_$S($G(IBPRICE):"C",1:"P;.13////"_DT)
 | 
|---|
| 68 |  D ^DIE,TOTAL^IBATCM(IBIEN) L -^IBAT(351.61,IBIEN)
 | 
|---|
| 69 |  Q IBIEN
 | 
|---|
| 70 | UPDATE(IBIEN,IBPROC) ; -- updates procedures
 | 
|---|
| 71 |  ; IBIEN=351.61 ien, IBPROC=procedures by ref like above
 | 
|---|
| 72 |  Q:'$G(IBIEN) 0
 | 
|---|
| 73 |  N IBX,IBPRICE,DIE,DA,DR,X,Y
 | 
|---|
| 74 |  S IBIEN(0)=^IBAT(351.61,IBIEN,0),IBEDT=$P(IBIEN(0),"^",4)
 | 
|---|
| 75 |  ; if approved, cancel and create a new one
 | 
|---|
| 76 |  I $P(IBIEN(0),"^",5)="A" D  Q IBIEN
 | 
|---|
| 77 |  . S IBIEN=$$CANC(IBIEN)
 | 
|---|
| 78 |  . S IBIEN=$$OUT($P(IBIEN(0),"^",2),IBEDT,$P(IBIEN(0),"^",11),$P(IBIEN(0),"^",12),.IBPROC)
 | 
|---|
| 79 |  L +^IBAT(351.61,IBIEN):10 I '$T Q "0^Transaction Locked"
 | 
|---|
| 80 |  ; first clean out procedures there
 | 
|---|
| 81 |  S IBX=0 F  S IBX=$O(^IBAT(351.61,IBIEN,3,IBX)) Q:IBX<1  S DIK="^IBAT(351.61,"_IBIEN_",3,",DA(1)=IBIEN,DA=IBX D ^DIK
 | 
|---|
| 82 |  S IBIEN=$$PROC(IBIEN,.IBPROC,.IBPRICE) ; file procedures
 | 
|---|
| 83 |  I IBIEN<1 L -^IBAT(351.61,IBIEN) Q "0^Unable to file procedures"
 | 
|---|
| 84 |  S DIE="^IBAT(351.61,",DA=IBIEN
 | 
|---|
| 85 |  S DR=".1////"_IBEDT_";.05////"_$S($G(IBPRICE):"C",1:"P;.13////"_DT)
 | 
|---|
| 86 |  D ^DIE,TOTAL^IBATCM(IBIEN) L -^IBAT(351.61,IBIEN)
 | 
|---|
| 87 |  Q IBIEN
 | 
|---|
| 88 | RX(DFN,IBEDT,IBPREF,IBSOURCE,IBDRUG,IBQTY,IBCOST) ; - files pharmacy data
 | 
|---|
| 89 |  ; DFN=dfn for patient, IBEDT=event date, IBPREF=enrolled facility
 | 
|---|
| 90 |  ; IBSOURCE=source (prescription ien;PSRX(;refill #
 | 
|---|
| 91 |  ; IBDRUG=ien from drug file
 | 
|---|
| 92 |  ; IBQTY=quantity of drug, IBCOST=drug cost
 | 
|---|
| 93 |  I '$G(DFN)!('$G(IBEDT))!('$G(IBPREF))!($G(IBSOURCE)="")!('$G(IBDRUG))!('$G(IBQTY)) Q 0
 | 
|---|
| 94 |  N IBIEN
 | 
|---|
| 95 |  S IBIEN=$$NEW(DFN,IBEDT,IBPREF,IBSOURCE) I 'IBIEN Q IBIEN
 | 
|---|
| 96 |  S DIE="^IBAT(351.61,",DA=IBIEN
 | 
|---|
| 97 |  S DR=".1////"_+IBEDT_";4.01////"_+IBDRUG_";4.02////"_+IBQTY_";.05////"_$S($G(IBCOST):"P;4.03////"_+IBCOST_";.13////"_DT,1:"C")
 | 
|---|
| 98 |  L +^IBAT(351.61,IBIEN):10 I '$T Q "0^Transaction Locked"
 | 
|---|
| 99 |  D ^DIE D:$G(IBCOST) TOTAL^IBATCM(IBIEN)
 | 
|---|
| 100 |  L -^IBAT(351.61,IBIEN)
 | 
|---|
| 101 |  Q IBIEN
 | 
|---|
| 102 |  ;
 | 
|---|
| 103 | RMPR(DFN,IBEDT,IBPREF,IBSOURCE,IBPROS,IBCOST) ; - files prost. data
 | 
|---|
| 104 |  ; DFN=dfn for patient, IBEDT=event date, IBPREF=enrolled facility
 | 
|---|
| 105 |  ; IBSOURCE=source (prost ien;RMPR(660,
 | 
|---|
| 106 |  ; IBPROS=ien from file 661
 | 
|---|
| 107 |  ; IBCOST=item cost
 | 
|---|
| 108 |  I '$G(DFN)!('$G(IBEDT))!('$G(IBPREF))!($G(IBSOURCE)="")!('$G(IBPROS)) Q 0
 | 
|---|
| 109 |  N IBIEN
 | 
|---|
| 110 |  S IBIEN=$$NEW(DFN,IBEDT,IBPREF,IBSOURCE) I 'IBIEN Q IBIEN
 | 
|---|
| 111 |  S DIE="^IBAT(351.61,",DA=IBIEN
 | 
|---|
| 112 |  S DR=".1////"_+IBEDT_";4.04////"_+IBPROS_";.05////"_$S($G(IBCOST):"P;4.05////"_+IBCOST_";.13////"_DT,1:"C")
 | 
|---|
| 113 |  L +^IBAT(351.61,IBIEN):10 I '$T Q "0^Transaction Locked"
 | 
|---|
| 114 |  D ^DIE D:$G(IBCOST) TOTAL^IBATCM(IBIEN)
 | 
|---|
| 115 |  L -^IBAT(351.61,IBIEN)
 | 
|---|
| 116 |  Q IBIEN
 | 
|---|
| 117 |  ;
 | 
|---|
| 118 | CANC(DA) ; - used to cancel any transaction
 | 
|---|
| 119 |  N DIE,DR,X,Y Q:'$G(DA)
 | 
|---|
| 120 |  S DIE="^IBAT(351.61,",DR=".05///X" D ^DIE
 | 
|---|
| 121 |  Q
 | 
|---|
| 122 | DEL(DA) ; - used to delete a transaction (only valid for inpatients or rx)
 | 
|---|
| 123 |  N DIK,DR,X,Y,Z Q:'$G(DA)
 | 
|---|
| 124 |  S Z=$G(^IBAT(351.61,DA,0)) Q:'Z
 | 
|---|
| 125 |  Q:$P(Z,"^",12)["SCE("
 | 
|---|
| 126 |  S DIK="^IBAT(351.61," D ^DIK
 | 
|---|
| 127 |  Q
 | 
|---|
| 128 | NEW(DFN,IBEDT,IBPREF,IBSOURCE) ; - creates new transaction and returns ien
 | 
|---|
| 129 |  N IBIEN,IBSITE,DD,DO,DIC,X,Y,DINUM,DLAYGO,DIE,DA,DR
 | 
|---|
| 130 |  S IBSITE=$$SITE^IBATUTL
 | 
|---|
| 131 |  L +^IBAT(351.6,DFN):10 I '$T Q "0^Patient file Locked"
 | 
|---|
| 132 |  L +^IBAT(351.61,0):10 I '$T Q "0^Transaction File Locked"
 | 
|---|
| 133 |  S IBIEN=$P(^IBAT(351.61,0),"^",3)+1
 | 
|---|
| 134 |  F IBIEN=IBIEN:1 Q:'$D(^IBAT(351.61,"B",IBSITE_IBIEN))
 | 
|---|
| 135 |  S DIC="^IBAT(351.61,",DIC(0)="",X=IBSITE_IBIEN,DINUM=IBIEN,DLAYGO=351.61
 | 
|---|
| 136 |  S DIC("DR")=".02////"_+DFN_";.03////"_+DT_";.04////"_+IBEDT_";.05////E;.09////"_+IBEDT_";.11////"_+IBPREF_";.12////^S X=IBSOURCE"
 | 
|---|
| 137 |  D FILE^DICN I +Y<1 L -(^IBAT(351.61,0),^IBAT(351.6,DFN)) Q "0^Unable to add new transaction"
 | 
|---|
| 138 |  S DIE="^IBAT(351.6,",DA=+DFN
 | 
|---|
| 139 |  S DR=$S(IBSOURCE["DGPM":".05",IBSOURCE["SCE":".06",IBSOURCE["RMPR":".11",1:".07")_"////"_+IBEDT
 | 
|---|
| 140 |  I $P(^IBAT(351.6,DFN,0),"^",+(DR*100))<IBEDT D ^DIE
 | 
|---|
| 141 |  L -(^IBAT(351.61,0),^IBAT(351.6,DFN))
 | 
|---|
| 142 |  Q IBIEN
 | 
|---|
| 143 | PROC(IBIEN,IBPROC,IBPRICE) ; files procedures
 | 
|---|
| 144 |  N X,Y
 | 
|---|
| 145 |  S Y=1,IBX=0 F  S IBX=$O(IBPROC(IBX)) Q:IBX=""!(+Y<1)  D
 | 
|---|
| 146 |  . N DIC,X,DA,DD,DO
 | 
|---|
| 147 |  . S DIC="^IBAT(351.61,"_IBIEN_",3,",DIC(0)="L"
 | 
|---|
| 148 |  . S X=IBX,DA(1)=IBIEN
 | 
|---|
| 149 |  . ;S DIC("P")=$P(^DD(351.61,3,0),"^",2) ; no longer required with fm22
 | 
|---|
| 150 |  . S DIC("DR")=".02////"_$P(IBPROC(IBX),"^")
 | 
|---|
| 151 |  . I $P(IBPROC(IBX),"^",2) S DIC("DR")=DIC("DR")_";.03////"_$P(IBPROC(IBX),"^",2)
 | 
|---|
| 152 |  . E  S IBPRICE=1
 | 
|---|
| 153 |  . D FILE^DICN
 | 
|---|
| 154 |  I +Y<1 L -^IBAT(351.61,IBIEN) Q "0^Unable to file procedures"
 | 
|---|
| 155 |  Q IBIEN
 | 
|---|
| 156 | DX(IBIEN,IBPTF) ; - files dx info
 | 
|---|
| 157 |  Q IBIEN
 | 
|---|
| 158 |  N IBX,Y S Y=1,IBX="" F  S IBX=$O(IBDX(IBX)) Q:IBX=""!(+Y<1)  D
 | 
|---|
| 159 |  . N DD,DO,DIC,DINUM,X
 | 
|---|
| 160 |  . S DIC="^IBAT(351.61,"_IBIEN_",2,",DIC(0)="",X=$P(IBDX(IBX),"^")
 | 
|---|
| 161 |  . ;S DA(1)=IBIEN,DIC("P")=$P(^DD(351.61,2,0),"^",2) D FILE^DICN
 | 
|---|
| 162 |  . ; no longer required with fm22
 | 
|---|
| 163 |  . S DA(1)=IBIEN D FILE^DICN
 | 
|---|
| 164 |  Q $S(+Y<1:"0^Unable to file diagnosis's",1:IBIEN)
 | 
|---|
| 165 |  ;
 | 
|---|
| 166 | INIT ; called to possibly initialize the 351.6 file if not done
 | 
|---|
| 167 |  N IBS,ZTRTN,ZTDESC,ZTIO,ZTSK,X,Y
 | 
|---|
| 168 |  ;
 | 
|---|
| 169 |  Q:$O(^IBAT(351.6,0))  ; already populated
 | 
|---|
| 170 |  ;
 | 
|---|
| 171 |  ; is Transfer Pricing active or not for any
 | 
|---|
| 172 |  S IBS=$G(^IBE(350.9,1,10))
 | 
|---|
| 173 |  I '$P(IBS,"^",2),'$P(IBS,"^",3),'$P(IBS,"^",4),'$P(IBS,"^",5) Q
 | 
|---|
| 174 |  ;
 | 
|---|
| 175 |  ; queue off job
 | 
|---|
| 176 |  W !!,"It appears you have never used Transfer Pricing before.  I need to populate",!,"the Transfer Pricing patient file.  Please select a date/time to do this.",!
 | 
|---|
| 177 |  S ZTRTN="ADDTP^IBATFILE",ZTDESC="Initializing Transfer Pricing Patient File",ZTIO="" D ^%ZTLOAD
 | 
|---|
| 178 |  I $G(ZTSK) W !,"Task Queued #",ZTSK
 | 
|---|
| 179 |  ;
 | 
|---|
| 180 |  Q
 | 
|---|
| 181 | ADDTP ; Add Transfer Pricing patients to file #351.6
 | 
|---|
| 182 |  ;
 | 
|---|
| 183 |  N DFN,IBADM,IBDFN,IBPREF,IBADMDT,IBX
 | 
|---|
| 184 |  ;
 | 
|---|
| 185 |  S DFN=0 F  S DFN=$O(^DPT(DFN)) Q:'DFN  D
 | 
|---|
| 186 |  .;
 | 
|---|
| 187 |  .S IBDFN=$$TPP^IBATUTL(DFN)
 | 
|---|
| 188 |  .Q:'IBDFN
 | 
|---|
| 189 |  .;
 | 
|---|
| 190 |  .; - see if they are admitted
 | 
|---|
| 191 |  .S IBADM=$G(^DPT(DFN,.105))
 | 
|---|
| 192 |  .I IBADM D
 | 
|---|
| 193 |  ..S IBPREF=+$P($G(^IBAT(351.6,DFN,0)),"^",3)
 | 
|---|
| 194 |  ..S IBADMDT=+$G(^DGPM(IBADM,0))
 | 
|---|
| 195 |  ..S IBX=$$ADM(DFN,IBADMDT,IBPREF,IBADM_";DGPM(")
 | 
|---|
| 196 |  ;
 | 
|---|
| 197 |  Q
 | 
|---|