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)
|
---|