| [613] | 1 | IBAUTL ;ALB/AAS - INTEGRATED BILLING APPLICATION UTILITIES ; 14-FEB-91 | 
|---|
|  | 2 | V ;;2.0;INTEGRATED BILLING;**93,156,347**;21-MAR-94;Build 24 | 
|---|
|  | 3 | ;;Per VHA Directive 2004-038, this routine should not be modified. | 
|---|
|  | 4 | ; | 
|---|
|  | 5 | ; | 
|---|
|  | 6 | COST ;  - find charges for transaction type, when only one | 
|---|
|  | 7 | N IBD,IBN,IB K X1 | 
|---|
|  | 8 | S IBD=-(DT+.9) F  S IBD=$O(^IBE(350.2,"AIVDT",DA,IBD)) Q:'IBD  S IBN=0 F  S IBN=$O(^IBE(350.2,"AIVDT",DA,IBD,IBN)) Q:'IBN  S IB=$G(^IBE(350.2,IBN,0)) I IB]"",'$P(IB,"^",5)!($P(IB,"^",5)>DT) S X1=$P(IB,"^",4) G COSTQ | 
|---|
|  | 9 | COSTQ S X1=+$G(X1) | 
|---|
|  | 10 | Q | 
|---|
|  | 11 | ; | 
|---|
|  | 12 | FY I $D(X) S IBAFY=$$FY^IBOUTL(X) | 
|---|
|  | 13 | Q | 
|---|
|  | 14 | ; | 
|---|
|  | 15 | PTL ;  - parent trace logic | 
|---|
|  | 16 | ;  - input in x resulting from field from file 350 | 
|---|
|  | 17 | ;  - output in y=1 if found, -1^error message if not found | 
|---|
|  | 18 | ;  -           y(0) = zeroth node of top level | 
|---|
|  | 19 | ;  -           y(1) = zeroth node of second level | 
|---|
|  | 20 | ;  -           y(n) = zeroth node of nth level | 
|---|
|  | 21 | ; | 
|---|
|  | 22 | K Y | 
|---|
|  | 23 | S Y=1 I '+X!'($D(^DIC(+X,0,"GL"))) S Y="-1^IB004" G PTLQ | 
|---|
|  | 24 | I +X=52 G PHAPI | 
|---|
|  | 25 | S IBAGL=^DIC(+X,0,"GL") | 
|---|
|  | 26 | I '$D(@(IBAGL_$P($P(X,";",1),":",2)_",0)")) S Y="-1^IB005" G PTLQ | 
|---|
|  | 27 | ; | 
|---|
|  | 28 | ; This naked reference should be set to the original data source that | 
|---|
|  | 29 | ; is causing this charge to be created.  The data source will be one of | 
|---|
|  | 30 | ; many different data sources that will generate patient charges. | 
|---|
|  | 31 | S Y(0)=^(0) | 
|---|
|  | 32 | ; | 
|---|
|  | 33 | F IBJJ=2:1 S IBII=$P(X,";",IBJJ) Q:IBII=""  D PTL1 | 
|---|
|  | 34 | PTLQ K IBAGL,IBII,IBJJ,IBMIN | 
|---|
|  | 35 | Q | 
|---|
|  | 36 | ; | 
|---|
|  | 37 | PTL1 ;  - find y(n) of sublevels | 
|---|
|  | 38 | ; Call in here with a FOR loop to go each level deeper.  This will | 
|---|
|  | 39 | ; setup the subsripts in Y for all the data elements that go into | 
|---|
|  | 40 | ; causing this charge to be created.  It looks in the original data | 
|---|
|  | 41 | ; source file as approprite to obtain the information.  The naked | 
|---|
|  | 42 | ; reference should be the last data level in the data source appropriate | 
|---|
|  | 43 | ; data source file last looked up. | 
|---|
|  | 44 | ; | 
|---|
|  | 45 | S IBMIN=$P(IBII,":") I IBMIN="" S Y="-1^IB006" Q | 
|---|
|  | 46 | I '$D(^(IBMIN,$P(IBII,":",2),0)) S Y="-1^IB006" Q | 
|---|
|  | 47 | ;I '$D(^(+IBII,$P(IBII,":",2),0)) S Y="-1^IB006" Q | 
|---|
|  | 48 | S Y(IBJJ-1)=^(0) | 
|---|
|  | 49 | Q | 
|---|
|  | 50 | ; | 
|---|
|  | 51 | CHKX ;  - check input x | 
|---|
|  | 52 | ;  -  piece 1 = service and exists | 
|---|
|  | 53 | ;  -  peice 2 = patient and exists | 
|---|
|  | 54 | ;  -  piece 3 = action type | 
|---|
|  | 55 | ;  -  piece 4 = user duz | 
|---|
|  | 56 | S DFN=$P(X,"^",2),IBSERV=+IBSAVX | 
|---|
|  | 57 | I $S('DFN:1,'$D(^DPT(DFN,0)):1,1:0) S Y="-1^IB002" G CHKXQ ;patient pointer bad | 
|---|
|  | 58 | I $S('IBSERV:1,'$D(^DIC(49,IBSERV,0)):1,1:0) S Y="-1^IB003" G CHKXQ ;service pointer bad | 
|---|
|  | 59 | I IBTAG=1 G CHKXQ | 
|---|
|  | 60 | S IBDUZ=$P(IBSAVX,"^",4) I $S('IBDUZ:1,'$D(^VA(200,IBDUZ,0)):1,1:0) S Y="-1^IB007" G CHKXQ | 
|---|
|  | 61 | I IBTAG=3 G CHKXQ | 
|---|
|  | 62 | S IBATYP=$P(IBSAVX,"^",3) I $S('IBATYP:1,'$D(^IBE(350.1,IBATYP,0)):1,1:0) S Y="-1^IB008" | 
|---|
|  | 63 | CHKXQ Q | 
|---|
|  | 64 | ; | 
|---|
|  | 65 | SITE ;  - calculate site from site parameters | 
|---|
|  | 66 | ;  -  output ibsite = station number | 
|---|
|  | 67 | ;  =         ibfac  = pointer to institution file | 
|---|
|  | 68 | I '$D(^IBE(350.9,1,0)) S Y="-1^IB016" Q | 
|---|
|  | 69 | S IBFAC=$P(^IBE(350.9,1,0),"^",2),IBSITE=$S('$D(^DIC(4,IBFAC,99)):"",1:+^(99)) I IBSITE<1 S Y="-1^IB009" | 
|---|
|  | 70 | Q | 
|---|
|  | 71 | ; | 
|---|
|  | 72 | ADD ;  - add new entry to ^ib | 
|---|
|  | 73 | ; | 
|---|
|  | 74 | N %DT,IBYCHK | 
|---|
|  | 75 | L +^IB(0):10 I '$T S Y="-1^IB014" G ADDQ | 
|---|
|  | 76 | S X=$P($S($D(^IB(0)):^(0),1:"^^-1"),"^",3)+1 L -^IB(0) I 'X S Y="-1^IB015" G ADDQ | 
|---|
|  | 77 | K DD,DO,DIC,DR S DIC="^IB(",DIC(0)="L",DLAYGO=350 | 
|---|
|  | 78 | F X=X:1 L:$D(IBN1) -^IB(IBN1) I X>0,'$D(^IB(X)) S IBN1=X L +^IB(IBN1):1 I $T,'$D(^IB(X)) S DINUM=X,X=+IBSITE_X D FILE^DICN I +Y>0 Q | 
|---|
|  | 79 | S IBN=+Y,DIE="^IB(",DA=IBN,DR=".02////"_$S($D(DFN):DFN,1:"")_";.03////"_$S($D(IBATYP):IBATYP,1:"")_";.05////1;12///NOW" D | 
|---|
|  | 80 | . N Y D ^DIE K DA,DR,DIE I $D(Y) S IBYCHK=Y | 
|---|
|  | 81 | L -^IB(IBN1) | 
|---|
|  | 82 | S Y=$S('$D(IBYCHK):1,1:"-1^IB028") | 
|---|
|  | 83 | ; | 
|---|
|  | 84 | ADDQ K DO,DD,DINUM,DIC,IBN1 Q | 
|---|
|  | 85 | ; | 
|---|
|  | 86 | ARPARM N X S X=DT | 
|---|
|  | 87 | D SITE,FY,NOW^%DTC S IBNOW=% | 
|---|
|  | 88 | Q | 
|---|
|  | 89 | BILLNO ;  -get open bill number | 
|---|
|  | 90 | I '$G(IBTOTL) S (IBIL,IBTRAN)="" G BILLQ | 
|---|
|  | 91 | S IBARTYP=$S($D(^IBE(350.1,+IBATYP,0)):$P(^(0),"^",3),1:"") | 
|---|
|  | 92 | S X=IBSITE_"^"_IBSERV_"^"_IBARTYP_"^"_DFN_";DPT("_"^"_IBAFY_"^"_$S($D(IBTOTL):IBTOTL,1:0)_"^"_$S($D(IBDUZ):IBDUZ,$D(DUZ):DUZ,1:0)_"^"_$P(IBNOW,".",1) D ^PRCASER I +Y<1 G BILLQ | 
|---|
|  | 93 | S IBIL=$P(Y,"^",2),IBTRAN=$P(Y,"^",3) I IBIL="" S Y="-1^IB011" G BILLQ | 
|---|
|  | 94 | S IBTRAN=$S(IBTRAN>0:IBTRAN,1:"") | 
|---|
|  | 95 | BILLQ Q | 
|---|
|  | 96 | ; | 
|---|
|  | 97 | PHAPI ; | 
|---|
|  | 98 | ;This is alternate code for Parent Trace Logic | 
|---|
|  | 99 | ; to deal with the Pharmacy Encapsulation of Prescription File (#52) | 
|---|
|  | 100 | ; | 
|---|
|  | 101 | N IBRFL,IBXX,IBPT,IBRX,IBY | 
|---|
|  | 102 | S IBXX=X,IBY=1 | 
|---|
|  | 103 | S IBRX=$P($P(IBXX,";"),":",2) | 
|---|
|  | 104 | S IBPT=$$FILE^IBRXUTL(IBRX,2),IBY(0)=$$RXZERO^IBRXUTL(IBPT,IBRX) I IBY(0)="" S IBY="-1^IB005" G PHAPIQ | 
|---|
|  | 105 | I $P(IBXX,";",2)="" G PHAPIQ ; original fill being billed | 
|---|
|  | 106 | S IBRFL=$P($P(IBXX,";",2),":",2),IBY(1)=$$ZEROSUB^IBRXUTL(IBPT,IBRX,IBRFL) | 
|---|
|  | 107 | I IBY(1)="" S IBY="-1^IB006" G PHAPIQ | 
|---|
|  | 108 | ; | 
|---|
|  | 109 | PHAPIQ ; | 
|---|
|  | 110 | S:$G(IBY)]"" Y=IBY | 
|---|
|  | 111 | S:$G(IBY(0))]"" Y(0)=IBY(0) | 
|---|
|  | 112 | S:$G(IBY(1))]"" Y(1)=IBY(1) | 
|---|
|  | 113 | Q | 
|---|
|  | 114 | ; | 
|---|