| [613] | 1 | IBCU71 ;ALB/AAS - INTERCEPT SCREEN INPUT OF PROCEDURE CODES ; 29-OCT-91 | 
|---|
|  | 2 | ;;2.0;INTEGRATED BILLING;**41,60,91,106,125,138,210,245,349**;21-MAR-94;Build 46 | 
|---|
|  | 3 | ;;Per VHA Directive 2004-038, this routine should not be modified. | 
|---|
|  | 4 | ; | 
|---|
|  | 5 | ;MAP TO DGCRU71 | 
|---|
|  | 6 | ; | 
|---|
|  | 7 | ADDCPT ;  - store cpt codes in visits file | 
|---|
|  | 8 | Q:$D(DGCPT)'>9 | 
|---|
|  | 9 | N DA,DIC,DR,DIE,DIRUT,DUOUT,DTOUT,DIROUT,VADM | 
|---|
|  | 10 | S DIR(0)="Y",DIR("A")="OK to add CPT codes to Visits file",DIR("B")="Y" D ^DIR K DIR Q:'Y!$D(DIRUT) | 
|---|
|  | 11 | N IBPKG,IBCLIN,IBVDATE,IBPROC,IBK,IBCOUNT,IBRESULT,IBOTH | 
|---|
|  | 12 | S IBPKG=$O(^DIC(9.4,"C","IB",0)) Q:'IBPKG | 
|---|
|  | 13 | W !!,"Adding Procedures to PCE..." | 
|---|
|  | 14 | S IBCLIN=0 F  S IBCLIN=$O(DGCPT(IBCLIN)) Q:'IBCLIN  D | 
|---|
|  | 15 | .; | 
|---|
|  | 16 | .K ^TMP("IBPXAPI",$J) | 
|---|
|  | 17 | .; | 
|---|
|  | 18 | .; - set up encounter data | 
|---|
|  | 19 | .S IBVDATE=DGPROCDT D VISDT | 
|---|
|  | 20 | .S ^TMP("IBPXAPI",$J,"ENCOUNTER",1,"ENC D/T")=IBVDATE,^("PATIENT")=DFN,^("HOS LOC")=IBCLIN,^("SERVICE CATEGORY")="X",^("ENCOUNTER TYPE")="A" | 
|---|
|  | 21 | .; | 
|---|
|  | 22 | .; - set up procedure and diagnosis data | 
|---|
|  | 23 | .S IBK=0,IBPROC=0 F  S IBPROC=$O(DGCPT(IBCLIN,IBPROC)) Q:'IBPROC  D | 
|---|
|  | 24 | ..S IBOTH="" F  S IBOTH=$O(DGCPT(IBCLIN,IBPROC,IBOTH)) Q:IBOTH=""  D | 
|---|
|  | 25 | ...S IBK=IBK+1 | 
|---|
|  | 26 | ...; | 
|---|
|  | 27 | ...; - load first procedure diagnosis as visit diagnosis | 
|---|
|  | 28 | ...I +$P(IBOTH,U,2) S ^TMP("IBPXAPI",$J,"DX/PL",IBK,"DIAGNOSIS")=+$P(IBOTH,U,2) | 
|---|
|  | 29 | ...; | 
|---|
|  | 30 | ...; - count number of times procedure performed | 
|---|
|  | 31 | ...S (X,IBCOUNT)=0 F  S X=$O(DGCPT(IBCLIN,IBPROC,IBOTH,X)) Q:'X  S IBCOUNT=IBCOUNT+1 | 
|---|
|  | 32 | ...; | 
|---|
|  | 33 | ...; - load procedure information | 
|---|
|  | 34 | ...S ^TMP("IBPXAPI",$J,"PROCEDURE",IBK,"PROCEDURE")=IBPROC,^("QTY")=IBCOUNT,^("EVENT D/T")=IBVDATE | 
|---|
|  | 35 | ...I +$P(IBOTH,U,1) S ^TMP("IBPXAPI",$J,"PROCEDURE",IBK,"ENC PROVIDER")=+$P(IBOTH,U,1) | 
|---|
|  | 36 | ...I +$P(IBOTH,U,3) S ^TMP("IBPXAPI",$J,"PROCEDURE",IBK,"MODIFIERS",$P($$MOD^ICPTMOD(+$P(IBOTH,U,3),"I"),U,2))="" | 
|---|
|  | 37 | .; | 
|---|
|  | 38 | .; - call the PCE interface | 
|---|
|  | 39 | .Q:'$D(^TMP("IBPXAPI",$J,"PROCEDURE")) | 
|---|
|  | 40 | .; | 
|---|
|  | 41 | .S IBRESULT=$$DATA2PCE^PXAPI("^TMP(""IBPXAPI"",$J)",IBPKG,"IB DATA",,DUZ,0) | 
|---|
|  | 42 | .W !,"  Procedures in ",$P(^SC(IBCLIN,0),"^")," " | 
|---|
|  | 43 | .I IBRESULT>0 W "were added okay." Q | 
|---|
|  | 44 | .W "were not added - error code is ",IBRESULT | 
|---|
|  | 45 | ; | 
|---|
|  | 46 | K ^TMP("IBPXAPI",$J) | 
|---|
|  | 47 | Q | 
|---|
|  | 48 | ; | 
|---|
|  | 49 | ; | 
|---|
|  | 50 | DISPDX ;  - display diagnosis codes available for associated dx (CMS-1500)  NO LONGER USED? | 
|---|
|  | 51 | N I,J,X,IBDX,IBDXL,IBDATE | 
|---|
|  | 52 | S IBDATE=$$BDATE^IBACSV(IBIFN) | 
|---|
|  | 53 | F I=1:1:4 S IBDX=$P($G(^DGCR(399,IBIFN,"C")),"^",(I+13)),X=$$ICD9^IBACSV(+IBDX,IBDATE) I X'="" S IBDXL(I)=IBDX_"^"_X | 
|---|
|  | 54 | I '$D(IBDXL) W !!,"Bill has no ICD DIAGNOSIS." Q | 
|---|
|  | 55 | W !!,?24,"<<<ASSOCIATED ICD-9 DIAGNOSIS>>>",!! | 
|---|
|  | 56 | F I=1,2 W ! S X=0 F J=0,2 I $D(IBDXL(I+J)) S IBDX=IBDXL(I+J) D  S X=40 | 
|---|
|  | 57 | . W ?X,"    ",$P(IBDX,"^",2),?(X+13),$E($P(IBDX,"^",4),1,28) | 
|---|
|  | 58 | W ! | 
|---|
|  | 59 | Q | 
|---|
|  | 60 | ; | 
|---|
|  | 61 | SCREEN(X,Y) ; -- screen logic for active procs or surgeries - OBSOLETE | 
|---|
|  | 62 | ; -- input x = date to check,  y = procedure | 
|---|
|  | 63 | ; -- output 0 if not active for billing or amb proc on date,  1 if either active | 
|---|
|  | 64 | ; | 
|---|
|  | 65 | Q 0 | 
|---|
|  | 66 | ; | 
|---|
|  | 67 | VISDT ; Find the actual encounter for the visit; update visit date/time | 
|---|
|  | 68 | ; input DGPROCDT, DFN, IBCLIN | 
|---|
|  | 69 | N IBD,IBF,IBOEN,IBEVT,IBVAL,IBCBK,IBFILTER | 
|---|
|  | 70 | S IBF=0,IBD=DGPROCDT-.1 | 
|---|
|  | 71 | S IBVAL("DFN")=DFN,IBVAL("BDT")=DGPROCDT-.1,IBVAL("EDT")=DGPROCDT\1_".99" | 
|---|
|  | 72 | S IBFILTER="" | 
|---|
|  | 73 | S IBCBK="I IBCLIN=$P(Y0,U,4) S IBVDATE=+Y0,SDSTOP=1" | 
|---|
|  | 74 | D SCAN^IBSDU("PATIENT/DATE",.IBVAL,IBFILTER,IBCBK,1) | 
|---|
|  | 75 | Q | 
|---|
|  | 76 | ; | 
|---|
|  | 77 | PRCDT(IBIFN,ARR) ; return array of bill's procedures in date then code order | 
|---|
|  | 78 | ; returns    ARR(DATE, NAME, CPIFN) = 399.0304 node | 
|---|
|  | 79 | N IBI,IBX,IBNAME K ARR | 
|---|
|  | 80 | S IBI=0 F  S IBI=$O(^DGCR(399,+$G(IBIFN),"CP",IBI)) Q:'IBI  D | 
|---|
|  | 81 | . S IBX=$G(^DGCR(399,IBIFN,"CP",IBI,0)) | 
|---|
|  | 82 | . S IBNAME=$P($$PRCNM^IBCSCH1($P(IBX,U,1)),U,1)_" " | 
|---|
|  | 83 | . S ARR($P(IBX,U,2),IBNAME,IBI)=IBX | 
|---|
|  | 84 | Q | 
|---|
|  | 85 | ; | 
|---|
|  | 86 | PRCDIV(IBIFN) ; change Bills Default Division (399,.22) to reflect care provided | 
|---|
|  | 87 | ; - set Bill Division to the first Procedures Division (399,304,5), if defined | 
|---|
|  | 88 | ; - or else if bill is an inpatient bill then get the Division of the Ward the patient was Admitted to | 
|---|
|  | 89 | ; return null if no change or 'new division ifn^message' | 
|---|
|  | 90 | ; | 
|---|
|  | 91 | N IB0,IBCPT,IBPDIV,IBWRD,IBX,DIC,DIE,DA,DR,X,Y S IBX="",IBPDIV=0 | 
|---|
|  | 92 | S IB0=$G(^DGCR(399,+$G(IBIFN),0)) | 
|---|
|  | 93 | ; | 
|---|
|  | 94 | I +$G(IBIFN) S IBCPT=$O(^DGCR(399,IBIFN,"CP",0)) I +IBCPT D  ; if CPT division defined, use it | 
|---|
|  | 95 | . S IBCPT=$G(^DGCR(399,IBIFN,"CP",IBCPT,0)) S IBPDIV=+$P(IBCPT,U,6) | 
|---|
|  | 96 | ; | 
|---|
|  | 97 | I 'IBPDIV,+$P(IB0,U,8) D  ; for inpatient, get Ward Division | 
|---|
|  | 98 | . S IBWRD=$G(^DGPT(+$P(IB0,U,8),535,1,0)) S IBPDIV=+$P($G(^DIC(42,+$P(IBWRD,U,6),0)),U,11) | 
|---|
|  | 99 | ; | 
|---|
|  | 100 | I +IBPDIV,+$P(IB0,U,22)'=+IBPDIV D | 
|---|
|  | 101 | . S DIE="^DGCR(399,",DA=IBIFN,DR=".22////"_+IBPDIV D ^DIE K DIE,DR,DA,X,Y | 
|---|
|  | 102 | . S IBX=+IBPDIV_"^Bill Division Changed to "_$P($G(^DG(40.8,+IBPDIV,0)),U,1) | 
|---|
|  | 103 | Q IBX | 
|---|
|  | 104 | ; | 
|---|
|  | 105 | DVTYP(IBIFN) ; reset Bill Charge Type (399, .27) based on Bill Division (399, .22) | 
|---|
|  | 106 | ; if bill division is type 3 - Freestanding then reset Charge Type to 2 - Professional | 
|---|
|  | 107 | ; with RC 2.0+ Type 3 sites have only professional charges, start date of bill must be on/after beginning of RC 2.0 | 
|---|
|  | 108 | N IB0,IBDV,IBCHGTYP,IBDVTYP,DIC,DIE,DA,DR,X,Y | 
|---|
|  | 109 | S IB0=$G(^DGCR(399,+$G(IBIFN),0)),IBDV=$P(IB0,U,22),IBCHGTYP=$P(IB0,U,27) | 
|---|
|  | 110 | I +$G(^DGCR(399,+$G(IBIFN),"U"))<$$VERSDT^IBCRU8(2) G DVTYPQ | 
|---|
|  | 111 | I +IBDV,+IBCHGTYP S IBDVTYP=$$RCDV^IBCRU8(+IBDV) I +$P(IBDVTYP,U,3)=3,IBCHGTYP'=2 D | 
|---|
|  | 112 | . S DIE="^DGCR(399,",DA=IBIFN,DR=".27////"_2 D ^DIE K DIE,DR,DA,X,Y | 
|---|
|  | 113 | . S IBCHGTYP="2^Bill Charge Type Changed to Professional" | 
|---|
|  | 114 | DVTYPQ Q IBCHGTYP | 
|---|