| 1 | IBTRE4 ;ALB/AAS - CLAIMS TRACKING EDIT PROCEDURE ;1-SEP-93 | 
|---|
| 2 | ;;2.0;INTEGRATED BILLING;**10,210,266**;21-MAR-94 | 
|---|
| 3 | ;;Per VHA Directive 10-93-142, this routine should not be modified. | 
|---|
| 4 | ; | 
|---|
| 5 | % G ^IBTRE | 
|---|
| 6 | ; | 
|---|
| 7 | EN(IBTRN) ; -- entry point for protocols | 
|---|
| 8 | ;    must do own rebuild actions | 
|---|
| 9 | ; -- Input - point to 356 | 
|---|
| 10 | ; | 
|---|
| 11 | N IBETYP,IBTRND,IBXY,IBCNT,IBDGPM | 
|---|
| 12 | D FULL^VALM1 | 
|---|
| 13 | S VALMBCK="" | 
|---|
| 14 | S IBTRND=$G(^IBT(356,IBTRN,0)),IBDGPM=$P(IBTRND,"^",5) | 
|---|
| 15 | ; | 
|---|
| 16 | S IBETYP=$$TRTP^IBTRE1(IBTRN) | 
|---|
| 17 | I IBETYP>2 W !!,"Clinical Information comes from the parent package." D PAUSE^VALM1 G ENQ | 
|---|
| 18 | ; | 
|---|
| 19 | ; -- outpatient procedure | 
|---|
| 20 | I IBETYP=2 D  G ENQ | 
|---|
| 21 | .W !!,*7,"You must use the add/edit action on Check-out to add procedures to Outpatient Encounters.",! | 
|---|
| 22 | .S VALMBCK="R" | 
|---|
| 23 | ; | 
|---|
| 24 | ; -- Inpatient procedure | 
|---|
| 25 | Q:'IBDGPM | 
|---|
| 26 | I IBETYP=1 D PROC(IBTRN,IBETYP) S VALMBCK="R" | 
|---|
| 27 | ; | 
|---|
| 28 | ENQ ; | 
|---|
| 29 | Q | 
|---|
| 30 | ; | 
|---|
| 31 | PROC(IBTRN,IBETYP) ; -- add/edit procedure | 
|---|
| 32 | Q:'IBTRN | 
|---|
| 33 | I $G(IBETYP)'=1 Q | 
|---|
| 34 | N DA,DR,DIC,DIE | 
|---|
| 35 | ;S IBDGPM=$P(^IBT(356,+IBTRN,0),"^",5) | 
|---|
| 36 | I IBETYP'=1!('IBDGPM) W !!,"You can only enter a procedure for an admission",! D PAUSE^VALM1 G PROCQ | 
|---|
| 37 | ; | 
|---|
| 38 | S X="IOINHI;IOINORM" D ENDR^%ZISS | 
|---|
| 39 | W !!,"--- ",IOINHI,"Procedure",IOINORM," --- " | 
|---|
| 40 | S IBSEL="Add" | 
|---|
| 41 | D SET(IBTRN) I $D(IBXY) D LIST(.IBXY) S IBSEL=$$ASK(IBCNT,"A") | 
|---|
| 42 | I IBSEL["^"!(IBSEL["Return") S:IBSEL["^" IBQUIT=1 G PROCQ | 
|---|
| 43 | I IBSEL="Add" D ADD(IBTRN) | 
|---|
| 44 | I IBSEL D EDT(+$G(IBXY(+IBSEL)),".01;.03;"),CHECK(+$G(IBXY(+IBSEL))) | 
|---|
| 45 | PROCQ Q | 
|---|
| 46 | ; | 
|---|
| 47 | CHECK(IBADG) ; Check active status of the ICD0 code (Code Set Versioning) | 
|---|
| 48 | N IBZ,DIR,X,Y | 
|---|
| 49 | S IBZ=$G(^IBT(356.91,+$G(IBADG),0)) Q:'IBZ | 
|---|
| 50 | Q:$$ICD0ACT^IBACSV(+IBZ,$P(IBZ,U,3)) | 
|---|
| 51 | W !!,*7,"Warning! The Procedure Code ",$P($$ICD0^IBACSV(+IBZ),U)," is inactive on this date!" | 
|---|
| 52 | S DIR(0)="EA",DIR("A")="Press <Enter> to continue" D ^DIR | 
|---|
| 53 | Q | 
|---|
| 54 | ; | 
|---|
| 55 | ADD(IBTRN,TYPE) ; -- Add a new procedure | 
|---|
| 56 | ; | 
|---|
| 57 | N DTOUT,DUTOU,X,Y,DIC,DIR,IBDATE,IBP,IBPN,IBPDT,IBADT,ICDVDT | 
|---|
| 58 | ;Service date (for CSV) | 
|---|
| 59 | S IBDATE=$$TRNDATE^IBACSV(IBTRN) | 
|---|
| 60 | S IBADT=$G(^DGPM(+$$DGPM^IBTRE3(IBTRN),0)) ;Admission Date | 
|---|
| 61 | S IBCNT=0 | 
|---|
| 62 | I '$G(TYPE) S TYPE="" | 
|---|
| 63 | NXT ; The Procedure Date has to be asked first for the Code Set Versioning requirements | 
|---|
| 64 | ; Input Procedure Date | 
|---|
| 65 | S DIR(0)="D",DIR("A")=$S(IBCNT<1:"Procedure Date",1:"Next Procedure Date") | 
|---|
| 66 | S DIR("B")=$$DAT3^IBOUTL(IBDATE) | 
|---|
| 67 | W:$G(IBCNT) ! | 
|---|
| 68 | S IBPDT=IBDATE D ^DIR K DIR G ADDQ:Y'?7N S IBPDT=+Y W "  ",$$DAT2^IBOUTL(IBPDT) | 
|---|
| 69 | ; The same checking as in the Data Dictionary, file #356.91, field #.03 (PROCEDURE DATE): | 
|---|
| 70 | I IBADT,(IBPDT+.9)<IBADT W !!,*7,"The Procedure Date cannot be earlier than Admission (",$$DAT3^IBOUTL(IBADT),")",! G NXT | 
|---|
| 71 | ; Input Procedure (ICD0) | 
|---|
| 72 | S DIC("A")="Select Procedure: " | 
|---|
| 73 | S DIC("S")="I $$ICD0ACT^IBACSV(+Y,IBPDT)" | 
|---|
| 74 | S ICDVDT=IBPDT ; for DD ID (versioned text) | 
|---|
| 75 | S DIC="^ICD0(",DIC(0)="AEMQ",X="" | 
|---|
| 76 | D ^DIC K DIC G ADDQ:Y'>0 | 
|---|
| 77 | S IBP=+Y,IBPN=$P(Y,U,2) ; Procedure IEN and name | 
|---|
| 78 | ;I '$$ICD0ACT^IBACSV(IBP,IBPDT) W !!,*7,IBPN," is not active for the procedure date ("_$$DAT3^IBOUTL(IBPDT),").",! G NXT | 
|---|
| 79 | I $D(^IBT(356.91,"ADGPM",$$DGPM^IBTRE3(IBTRN),IBP)) W !!,*7,IBPN," is already a procedure.",! | 
|---|
| 80 | S IBCNT=IBCNT+1 | 
|---|
| 81 | S IBADG=$$NEW(IBP,IBTRN,TYPE,IBPDT) | 
|---|
| 82 | I IBADG>0,TYPE'=3 G NXT ;D EDT(IBADG) G NXT | 
|---|
| 83 | ADDQ Q | 
|---|
| 84 | ; | 
|---|
| 85 | NEW(ICDI,IBTRN,TYPE,IBPDT) ; -- file new entry | 
|---|
| 86 | ; | 
|---|
| 87 | N DA,DD,DO,DIC,DIK,DINUM,DLAYGO,X,Y,I,J | 
|---|
| 88 | S X=ICDI,(DIC,DIK)="^IBT(356.91,",DIC(0)="L",DLAYGO=356.91 | 
|---|
| 89 | D FILE^DICN S IBADG=+Y I Y'>0 G NEWQ | 
|---|
| 90 | I '$G(IBPDT) S IBPDT=$P($P(^IBT(356,IBTRN,0),"^",6),".") | 
|---|
| 91 | L +^IBT(356.91,IBADG) S $P(^IBT(356.91,IBADG,0),"^",2,3)=$$DGPM^IBTRE3(IBTRN)_"^"_IBPDT,DA=IBADG D IX1^DIK L -^IBT(356.91,IBADG) | 
|---|
| 92 | NEWQ Q IBADG | 
|---|
| 93 | ; | 
|---|
| 94 | EDT(IBADG,IBDR) ; -- edit entry | 
|---|
| 95 | ; | 
|---|
| 96 | N DR,DIE,DA,DIDEL | 
|---|
| 97 | S DR=$G(IBDR),DIDEL=356.91 I DR="" S DR=".03;" | 
|---|
| 98 | S DA=IBADG,DIE="^IBT(356.91," | 
|---|
| 99 | Q:'$G(^IBT(356.91,DA,0)) | 
|---|
| 100 | L +^IBT(356.91,IBADG):5 I '$T D LOCKED^IBTRCD1 G EDTQ | 
|---|
| 101 | D ^DIE | 
|---|
| 102 | L -^IBT(356.91,IBADG) | 
|---|
| 103 | EDTQ Q | 
|---|
| 104 | ; | 
|---|
| 105 | SET(IBTRN) ; -- set array | 
|---|
| 106 | N IBDGPM,IBICD | 
|---|
| 107 | S IBDGPM=$$DGPM^IBTRE3(IBTRN) | 
|---|
| 108 | S (IBICD,IBDA,IBCNT)=0 | 
|---|
| 109 | F  S IBICD=$O(^IBT(356.91,"ADGPM",IBDGPM,IBICD)) Q:'IBICD  S IBDA=0 F  S IBDA=$O(^IBT(356.91,"ADGPM",IBDGPM,IBICD,IBDA)) Q:'IBDA  D | 
|---|
| 110 | .Q:'$D(^IBT(356.91,+IBDA,0)) | 
|---|
| 111 | .S IBCNT=IBCNT+1 | 
|---|
| 112 | .S IBXY(IBCNT)=IBDA_"^"_IBICD | 
|---|
| 113 | SETQ Q | 
|---|
| 114 | ; | 
|---|
| 115 | LIST(IBXY) ;List Diagnosis Array | 
|---|
| 116 | ; Input  -- IBXY     Diagnosis Array Subscripted by a Number | 
|---|
| 117 | ; Output -- List Diagnosis Array | 
|---|
| 118 | N I,IBXD,IBDATE | 
|---|
| 119 | W ! | 
|---|
| 120 | S I=0 F  S I=$O(IBXY(I)) Q:'I  D | 
|---|
| 121 | . S IBTNOD=$G(^IBT(356.91,+IBXY(I),0)) | 
|---|
| 122 | . S IBDATE=$P($P(IBTNOD,U,3),".") ; Procedure date | 
|---|
| 123 | . S IBXD=$$ICD0^IBACSV(+$P(IBXY(I),U,2),IBDATE) | 
|---|
| 124 | . W !?2,I,"  ",$P(IBXD,U),?15,$E($P(IBXD,U,4),1,43),?60,$$DAT1^IBOUTL(IBDATE) | 
|---|
| 125 | Q | 
|---|
| 126 | ; | 
|---|
| 127 | ASK(IBCNT,IBPAR,IBSELDF) ;Ask user to select from list | 
|---|
| 128 | ; Input  -- SDCNT    Number of Entities | 
|---|
| 129 | ;           SDPAR    Selection Parameters (A=Add) | 
|---|
| 130 | ;           SDSELDF  Selection Default  [Optional] | 
|---|
| 131 | ; Output -- Selection | 
|---|
| 132 | N DIR,DIRUT,DTOUT,DUOUT,X,Y | 
|---|
| 133 | REASK S DIR("?")="Enter "_$S($G(IBSELDF)]"":"<RETURN> for '"_IBSELDF_"', ",1:"")_$S(IBCNT=1:"1",1:"1-"_IBCNT)_" to Edit"_$S(IBPAR["A":", or 'A' to Add",1:"") | 
|---|
| 134 | S DIR("A")="Enter "_$S(IBCNT=1:"1",1:"1-"_IBCNT)_" to Edit"_$S(IBPAR["A":", or 'A' to Add",1:"")_": "_$S($G(IBSELDF)]"":IBSELDF_"// ",1:"") | 
|---|
| 135 | S DIR(0)="FAO^1:30" | 
|---|
| 136 | D ^DIR I $D(DTOUT)!($D(DUOUT)) S Y="^" G ASKQ | 
|---|
| 137 | S Y=$$UPPER^VALM1(Y) | 
|---|
| 138 | I Y?.N,Y,Y'>IBCNT G ASKQ | 
|---|
| 139 | I IBPAR["A",$E(Y)="A" S Y="Add" G ASKQ | 
|---|
| 140 | I Y="" S Y=$S($G(IBSELDF)]"":IBSELDF,1:"Return") G ASKQ | 
|---|
| 141 | W !!?5,DIR("?"),".",! G REASK | 
|---|
| 142 | ASKQ Q $G(Y) | 
|---|